1 | (function webpackUniversalModuleDefinition(root, factory) {
|
2 | if(typeof exports === 'object' && typeof module === 'object')
|
3 | module.exports = factory();
|
4 | else if(typeof define === 'function' && define.amd)
|
5 | define([], factory);
|
6 | else if(typeof exports === 'object')
|
7 | exports["sqlFormatter"] = factory();
|
8 | else
|
9 | root["sqlFormatter"] = factory();
|
10 | })(self, () => {
|
11 | return /******/ (() => { // webpackBootstrap
|
12 | /******/ "use strict";
|
13 | /******/ var __webpack_modules__ = ({
|
14 |
|
15 | /***/ "./src/core/AliasAs.ts":
|
16 | /*!*****************************!*\
|
17 | !*** ./src/core/AliasAs.ts ***!
|
18 | \*****************************/
|
19 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
20 |
|
21 | __webpack_require__.r(__webpack_exports__);
|
22 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
23 | /* harmony export */ "default": () => (/* binding */ AliasAs)
|
24 | /* harmony export */ });
|
25 | /* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
|
26 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
27 |
|
28 | 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); } }
|
29 |
|
30 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
31 |
|
32 |
|
33 | /** Decides addition and removal of AS tokens */
|
34 |
|
35 | var AliasAs = /*#__PURE__*/function () {
|
36 | function AliasAs(aliasAs, formatter) {
|
37 | _classCallCheck(this, AliasAs);
|
38 |
|
39 | this.aliasAs = aliasAs;
|
40 | this.formatter = formatter;
|
41 | }
|
42 | /** True when AS keyword should be added *before* current token */
|
43 |
|
44 |
|
45 | _createClass(AliasAs, [{
|
46 | key: "shouldAddBefore",
|
47 | value: function shouldAddBefore(token) {
|
48 | return this.isMissingTableAlias(token) || this.isMissingSelectColumnAlias(token);
|
49 | } // if table alias is missing and should be added
|
50 |
|
51 | }, {
|
52 | key: "isMissingTableAlias",
|
53 | value: function isMissingTableAlias(token) {
|
54 | return this.aliasAs === 'always' && token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD && this.lookBehind().value === ')';
|
55 | } // if select column alias is missing and should be added
|
56 |
|
57 | }, {
|
58 | key: "isMissingSelectColumnAlias",
|
59 | value: function isMissingSelectColumnAlias(token) {
|
60 | var prevToken = this.lookBehind();
|
61 | var nextToken = this.lookAhead();
|
62 | return (this.aliasAs === 'always' || this.aliasAs === 'select') && this.formatter.isWithinSelect() && token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD && (_token__WEBPACK_IMPORTED_MODULE_0__.isToken.END(prevToken) || (prevToken.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD || prevToken.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.NUMBER) && (nextToken.value === ',' || (0,_token__WEBPACK_IMPORTED_MODULE_0__.isCommand)(nextToken)));
|
63 | }
|
64 | /** True when AS keyword should be added *after* current token */
|
65 |
|
66 | }, {
|
67 | key: "shouldAddAfter",
|
68 | value: function shouldAddAfter() {
|
69 | return this.isEdgeCaseCTE() || this.isEdgeCaseCreateTable() || this.isMissingTypeCastAs();
|
70 | } // checks for CAST(«expression» [AS] type)
|
71 |
|
72 | }, {
|
73 | key: "isMissingTypeCastAs",
|
74 | value: function isMissingTypeCastAs() {
|
75 | return this.aliasAs === 'never' && this.formatter.isWithinSelect() && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.CAST(this.formatter.getPreviousReservedToken()) && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS(this.lookAhead()) && (this.lookAhead(2).type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.WORD || this.lookAhead(2).type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_KEYWORD) && this.lookAhead(3).value === ')';
|
76 | } // checks for WITH `table` [AS] (
|
77 |
|
78 | }, {
|
79 | key: "isEdgeCaseCTE",
|
80 | value: function isEdgeCaseCTE() {
|
81 | var nextToken = this.lookAhead();
|
82 | return this.aliasAs === 'never' && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.WITH(this.lookBehind()) && (nextToken.value === '(' || _token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS(nextToken) && this.lookAhead(2).value === '(');
|
83 | } // checks for CREATE TABLE `table` [AS] WITH (
|
84 |
|
85 | }, {
|
86 | key: "isEdgeCaseCreateTable",
|
87 | value: function isEdgeCaseCreateTable() {
|
88 | var prevToken = this.lookBehind();
|
89 | var nextToken = this.lookAhead();
|
90 | return this.aliasAs === 'never' && (_token__WEBPACK_IMPORTED_MODULE_0__.isToken.TABLE(prevToken) || prevToken.value.endsWith('TABLE')) && (_token__WEBPACK_IMPORTED_MODULE_0__.isToken.WITH(nextToken) || _token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS(nextToken) && _token__WEBPACK_IMPORTED_MODULE_0__.isToken.WITH(this.lookAhead(2)));
|
91 | }
|
92 | /* True when the current AS token should be discarded */
|
93 |
|
94 | }, {
|
95 | key: "shouldRemove",
|
96 | value: function shouldRemove() {
|
97 | return this.aliasAs === 'never' || this.aliasAs === 'select' && this.isRemovableNonSelectAs();
|
98 | }
|
99 | }, {
|
100 | key: "isRemovableNonSelectAs",
|
101 | value: function isRemovableNonSelectAs() {
|
102 | return this.lookBehind().value === ')' && // ) [AS] alias but not SELECT (a) [AS] alpha
|
103 | !this.formatter.isWithinSelect() && this.lookAhead().value !== '(' // skip WITH foo [AS] ( ...
|
104 | ;
|
105 | }
|
106 | }, {
|
107 | key: "lookBehind",
|
108 | value: function lookBehind(n) {
|
109 | return this.formatter.tokenLookBehind(n);
|
110 | }
|
111 | }, {
|
112 | key: "lookAhead",
|
113 | value: function lookAhead(n) {
|
114 | return this.formatter.tokenLookAhead(n);
|
115 | }
|
116 | }]);
|
117 |
|
118 | return AliasAs;
|
119 | }();
|
120 |
|
121 |
|
122 |
|
123 | /***/ }),
|
124 |
|
125 | /***/ "./src/core/AsTokenFactory.ts":
|
126 | /*!************************************!*\
|
127 | !*** ./src/core/AsTokenFactory.ts ***!
|
128 | \************************************/
|
129 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
130 |
|
131 | __webpack_require__.r(__webpack_exports__);
|
132 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
133 | /* harmony export */ "default": () => (/* binding */ AsTokenFactory)
|
134 | /* harmony export */ });
|
135 | /* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
|
136 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
137 |
|
138 | 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); } }
|
139 |
|
140 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
141 |
|
142 |
|
143 |
|
144 | var AsTokenFactory = /*#__PURE__*/function () {
|
145 | function AsTokenFactory(keywordCase) {
|
146 | var tokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
147 |
|
148 | _classCallCheck(this, AsTokenFactory);
|
149 |
|
150 | this.keywordCase = keywordCase;
|
151 | this.detectedCase = this.autoDetectCase(tokens);
|
152 | }
|
153 |
|
154 | _createClass(AsTokenFactory, [{
|
155 | key: "autoDetectCase",
|
156 | value: function autoDetectCase(tokens) {
|
157 | var asTokens = tokens.filter(_token__WEBPACK_IMPORTED_MODULE_0__.isToken.AS);
|
158 | var upperAsTokens = asTokens.filter(function (_ref) {
|
159 | var value = _ref.value;
|
160 | return value === 'AS';
|
161 | });
|
162 | return upperAsTokens.length > asTokens.length / 2 ? 'upper' : 'lower';
|
163 | }
|
164 | /** Returns AS token with either upper- or lowercase text */
|
165 |
|
166 | }, {
|
167 | key: "token",
|
168 | value: function token() {
|
169 | return {
|
170 | type: _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_KEYWORD,
|
171 | value: this.asTokenValue()
|
172 | };
|
173 | }
|
174 | }, {
|
175 | key: "asTokenValue",
|
176 | value: function asTokenValue() {
|
177 | var keywordCase = this.keywordCase === 'preserve' ? this.detectedCase : this.keywordCase;
|
178 | return keywordCase === 'upper' ? 'AS' : 'as';
|
179 | }
|
180 | }]);
|
181 |
|
182 | return AsTokenFactory;
|
183 | }();
|
184 |
|
185 |
|
186 |
|
187 | /***/ }),
|
188 |
|
189 | /***/ "./src/core/Formatter.ts":
|
190 | /*!*******************************!*\
|
191 | !*** ./src/core/Formatter.ts ***!
|
192 | \*******************************/
|
193 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
194 |
|
195 | __webpack_require__.r(__webpack_exports__);
|
196 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
197 | /* harmony export */ "default": () => (/* binding */ Formatter)
|
198 | /* harmony export */ });
|
199 | /* harmony import */ var _Indentation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./Indentation */ "./src/core/Indentation.ts");
|
200 | /* harmony import */ var _InlineBlock__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./InlineBlock */ "./src/core/InlineBlock.ts");
|
201 | /* harmony import */ var _Params__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./Params */ "./src/core/Params.ts");
|
202 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
203 | /* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
|
204 | /* harmony import */ var _formatCommaPositions__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./formatCommaPositions */ "./src/core/formatCommaPositions.ts");
|
205 | /* harmony import */ var _formatAliasPositions__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./formatAliasPositions */ "./src/core/formatAliasPositions.ts");
|
206 | /* harmony import */ var _tabularStyle__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tabularStyle */ "./src/core/tabularStyle.ts");
|
207 | /* harmony import */ var _AliasAs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./AliasAs */ "./src/core/AliasAs.ts");
|
208 | /* harmony import */ var _AsTokenFactory__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./AsTokenFactory */ "./src/core/AsTokenFactory.ts");
|
209 | function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
210 |
|
211 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
212 |
|
213 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
214 |
|
215 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
216 |
|
217 | 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); } }
|
218 |
|
219 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
220 |
|
221 |
|
222 |
|
223 |
|
224 |
|
225 |
|
226 |
|
227 |
|
228 |
|
229 |
|
230 |
|
231 | /** Main formatter class that produces a final output string from list of tokens */
|
232 |
|
233 | var Formatter = /*#__PURE__*/function () {
|
234 | function Formatter(cfg) {
|
235 | _classCallCheck(this, Formatter);
|
236 |
|
237 | this.currentNewline = true;
|
238 | this.previousReservedToken = _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
|
239 | this.previousCommandToken = _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
|
240 | this.tokens = [];
|
241 | this.index = -1;
|
242 | this.cfg = cfg;
|
243 | this.indentation = new _Indentation__WEBPACK_IMPORTED_MODULE_0__["default"](this.indentString());
|
244 | this.inlineBlock = new _InlineBlock__WEBPACK_IMPORTED_MODULE_1__["default"](this.cfg.expressionWidth);
|
245 | this.aliasAs = new _AliasAs__WEBPACK_IMPORTED_MODULE_8__["default"](this.cfg.aliasAs, this);
|
246 | this.params = new _Params__WEBPACK_IMPORTED_MODULE_2__["default"](this.cfg.params);
|
247 | this.asTokenFactory = new _AsTokenFactory__WEBPACK_IMPORTED_MODULE_9__["default"](this.cfg.keywordCase);
|
248 | }
|
249 |
|
250 | _createClass(Formatter, [{
|
251 | key: "indentString",
|
252 | value: function indentString() {
|
253 | if (this.isTabularStyle()) {
|
254 | return ' '.repeat(10);
|
255 | }
|
256 |
|
257 | if (this.cfg.useTabs) {
|
258 | return '\t';
|
259 | }
|
260 |
|
261 | return ' '.repeat(this.cfg.tabWidth);
|
262 | }
|
263 | /**
|
264 | * SQL Tokenizer for this formatter, provided by subclasses.
|
265 | */
|
266 |
|
267 | }, {
|
268 | key: "tokenizer",
|
269 | value: function tokenizer() {
|
270 | throw new Error('tokenizer() not implemented by subclass');
|
271 | }
|
272 | /**
|
273 | * Reprocess and modify a token based on parsed context.
|
274 | * Subclasses can override this to modify tokens during formatting.
|
275 | * @param {Token} token - The token to modify
|
276 | * @return {Token} new token or the original
|
277 | */
|
278 |
|
279 | }, {
|
280 | key: "tokenOverride",
|
281 | value: function tokenOverride(token) {
|
282 | return token;
|
283 | }
|
284 | /**
|
285 | * Formats an SQL query.
|
286 | * @param {string} query - The SQL query string to be formatted
|
287 | * @return {string} The formatter query
|
288 | */
|
289 |
|
290 | }, {
|
291 | key: "format",
|
292 | value: function format(query) {
|
293 | this.tokens = this.tokenizer().tokenize(query);
|
294 | this.asTokenFactory = new _AsTokenFactory__WEBPACK_IMPORTED_MODULE_9__["default"](this.cfg.keywordCase, this.tokens);
|
295 | var formattedQuery = this.getFormattedQueryFromTokens();
|
296 | var finalQuery = this.postFormat(formattedQuery);
|
297 | return finalQuery.replace(/^\n*/, '').trimEnd();
|
298 | }
|
299 | /**
|
300 | * Does post-processing on the formatted query.
|
301 | */
|
302 |
|
303 | }, {
|
304 | key: "postFormat",
|
305 | value: function postFormat(query) {
|
306 | if (this.cfg.tabulateAlias) {
|
307 | query = (0,_formatAliasPositions__WEBPACK_IMPORTED_MODULE_6__["default"])(query);
|
308 | }
|
309 |
|
310 | if (this.cfg.commaPosition === 'before' || this.cfg.commaPosition === 'tabular') {
|
311 | query = (0,_formatCommaPositions__WEBPACK_IMPORTED_MODULE_5__["default"])(query, this.cfg.commaPosition, this.indentString());
|
312 | }
|
313 |
|
314 | return query;
|
315 | }
|
316 | /**
|
317 | * Performs main construction of query from token list, delegates to other methods for formatting based on token criteria
|
318 | */
|
319 |
|
320 | }, {
|
321 | key: "getFormattedQueryFromTokens",
|
322 | value: function getFormattedQueryFromTokens() {
|
323 | var formattedQuery = '';
|
324 |
|
325 | for (this.index = 0; this.index < this.tokens.length; this.index++) {
|
326 | var token = this.tokenOverride(this.tokens[this.index]); // if token is a Reserved Keyword, Command, Binary Command, Dependent Clause, Logical Operator
|
327 |
|
328 | if ((0,_token__WEBPACK_IMPORTED_MODULE_4__.isReserved)(token)) {
|
329 | this.previousReservedToken = token;
|
330 |
|
331 | if (token.type !== _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_KEYWORD && token.type !== _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_JOIN_CONDITION) {
|
332 | // convert Reserved Command or Logical Operator to tabular format if needed
|
333 | token = (0,_tabularStyle__WEBPACK_IMPORTED_MODULE_7__.toTabularToken)(token, this.cfg.indentStyle);
|
334 | }
|
335 |
|
336 | if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_COMMAND) {
|
337 | this.previousCommandToken = token;
|
338 | }
|
339 | }
|
340 |
|
341 | if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.LINE_COMMENT) {
|
342 | formattedQuery = this.formatLineComment(token, formattedQuery);
|
343 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_COMMENT) {
|
344 | formattedQuery = this.formatBlockComment(token, formattedQuery);
|
345 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_COMMAND) {
|
346 | this.currentNewline = this.checkNewline(token);
|
347 | formattedQuery = this.formatCommand(token, formattedQuery);
|
348 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_BINARY_COMMAND) {
|
349 | formattedQuery = this.formatBinaryCommand(token, formattedQuery);
|
350 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_DEPENDENT_CLAUSE) {
|
351 | formattedQuery = this.formatDependentClause(token, formattedQuery);
|
352 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_JOIN_CONDITION) {
|
353 | formattedQuery = this.formatJoinCondition(token, formattedQuery);
|
354 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_LOGICAL_OPERATOR) {
|
355 | formattedQuery = this.formatLogicalOperator(token, formattedQuery);
|
356 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_KEYWORD) {
|
357 | formattedQuery = this.formatKeyword(token, formattedQuery);
|
358 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START) {
|
359 | formattedQuery = this.formatBlockStart(token, formattedQuery);
|
360 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_END) {
|
361 | formattedQuery = this.formatBlockEnd(token, formattedQuery);
|
362 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.PLACEHOLDER) {
|
363 | formattedQuery = this.formatPlaceholder(token, formattedQuery);
|
364 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.OPERATOR) {
|
365 | formattedQuery = this.formatOperator(token, formattedQuery);
|
366 | } else {
|
367 | formattedQuery = this.formatWord(token, formattedQuery);
|
368 | }
|
369 | }
|
370 |
|
371 | return (0,_tabularStyle__WEBPACK_IMPORTED_MODULE_7__.replaceTabularPlaceholders)(formattedQuery);
|
372 | }
|
373 | /**
|
374 | * Formats word tokens + any potential AS tokens for aliases
|
375 | */
|
376 |
|
377 | }, {
|
378 | key: "formatWord",
|
379 | value: function formatWord(token, query) {
|
380 | var finalQuery = query;
|
381 |
|
382 | if (this.aliasAs.shouldAddBefore(token)) {
|
383 | finalQuery = this.formatWithSpaces(this.asTokenFactory.token(), finalQuery);
|
384 | }
|
385 |
|
386 | finalQuery = this.formatWithSpaces(token, finalQuery);
|
387 |
|
388 | if (this.aliasAs.shouldAddAfter()) {
|
389 | finalQuery = this.formatWithSpaces(this.asTokenFactory.token(), finalQuery);
|
390 | }
|
391 |
|
392 | return finalQuery;
|
393 | }
|
394 | /**
|
395 | * Checks if a newline should currently be inserted
|
396 | */
|
397 |
|
398 | }, {
|
399 | key: "checkNewline",
|
400 | value: function checkNewline(token) {
|
401 | var nextTokens = this.tokensUntilNextCommandOrQueryEnd(); // auto break if SELECT includes CASE statements
|
402 |
|
403 | if (this.isWithinSelect() && nextTokens.some(_token__WEBPACK_IMPORTED_MODULE_4__.isToken.CASE)) {
|
404 | return true;
|
405 | }
|
406 |
|
407 | switch (this.cfg.multilineLists) {
|
408 | case 'always':
|
409 | return true;
|
410 |
|
411 | case 'avoid':
|
412 | return false;
|
413 |
|
414 | case 'expressionWidth':
|
415 | return this.inlineWidth(token, nextTokens) > this.cfg.expressionWidth;
|
416 |
|
417 | default:
|
418 | // multilineLists mode is a number
|
419 | return this.countClauses(nextTokens) > this.cfg.multilineLists || this.inlineWidth(token, nextTokens) > this.cfg.expressionWidth;
|
420 | }
|
421 | }
|
422 | }, {
|
423 | key: "inlineWidth",
|
424 | value: function inlineWidth(token, tokens) {
|
425 | var tokensString = tokens.map(function (_ref) {
|
426 | var value = _ref.value;
|
427 | return value === ',' ? value + ' ' : value;
|
428 | }).join('');
|
429 | return "".concat(token.whitespaceBefore).concat(token.value, " ").concat(tokensString).length;
|
430 | }
|
431 | /**
|
432 | * Counts comma-separated clauses (doesn't count commas inside blocks)
|
433 | * Note: There's always at least one clause.
|
434 | */
|
435 |
|
436 | }, {
|
437 | key: "countClauses",
|
438 | value: function countClauses(tokens) {
|
439 | var count = 1;
|
440 | var openBlocks = 0;
|
441 |
|
442 | var _iterator = _createForOfIteratorHelper(tokens),
|
443 | _step;
|
444 |
|
445 | try {
|
446 | for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
447 | var _step$value = _step.value,
|
448 | type = _step$value.type,
|
449 | value = _step$value.value;
|
450 |
|
451 | if (value === ',' && openBlocks === 0) {
|
452 | count++;
|
453 | }
|
454 |
|
455 | if (type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START) {
|
456 | openBlocks++;
|
457 | }
|
458 |
|
459 | if (type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_END) {
|
460 | openBlocks--;
|
461 | }
|
462 | }
|
463 | } catch (err) {
|
464 | _iterator.e(err);
|
465 | } finally {
|
466 | _iterator.f();
|
467 | }
|
468 |
|
469 | return count;
|
470 | }
|
471 | /** get all tokens between current token and next Reserved Command or query end */
|
472 |
|
473 | }, {
|
474 | key: "tokensUntilNextCommandOrQueryEnd",
|
475 | value: function tokensUntilNextCommandOrQueryEnd() {
|
476 | var tail = this.tokens.slice(this.index + 1);
|
477 | return tail.slice(0, tail.length ? tail.findIndex(function (token) {
|
478 | return (0,_token__WEBPACK_IMPORTED_MODULE_4__.isCommand)(token) || token.value === ';';
|
479 | }) : undefined);
|
480 | }
|
481 | /** Formats a line comment onto query */
|
482 |
|
483 | }, {
|
484 | key: "formatLineComment",
|
485 | value: function formatLineComment(token, query) {
|
486 | return this.addNewline(query + this.show(token));
|
487 | }
|
488 | /** Formats a block comment onto query */
|
489 |
|
490 | }, {
|
491 | key: "formatBlockComment",
|
492 | value: function formatBlockComment(token, query) {
|
493 | return this.addNewline(this.addNewline(query) + this.indentComment(token.value));
|
494 | }
|
495 | /** Aligns comment to current indentation level */
|
496 |
|
497 | }, {
|
498 | key: "indentComment",
|
499 | value: function indentComment(comment) {
|
500 | return comment.replace(/\n[\t ]*/g, '\n' + this.indentation.getIndent() + ' ');
|
501 | }
|
502 | /**
|
503 | * Formats a Reserved Command onto query, increasing indentation level where necessary
|
504 | */
|
505 |
|
506 | }, {
|
507 | key: "formatCommand",
|
508 | value: function formatCommand(token, query) {
|
509 | this.indentation.decreaseTopLevel();
|
510 | query = this.addNewline(query); // indent tabular formats, except when preceding a (
|
511 |
|
512 | if (this.isTabularStyle()) {
|
513 | if (this.tokenLookAhead().value !== '(') {
|
514 | this.indentation.increaseTopLevel();
|
515 | }
|
516 | } else {
|
517 | this.indentation.increaseTopLevel();
|
518 | }
|
519 |
|
520 | query += this.equalizeWhitespace(this.show(token)); // print token onto query
|
521 |
|
522 | if (this.currentNewline && !this.isTabularStyle()) {
|
523 | query = this.addNewline(query);
|
524 | } else {
|
525 | query += ' ';
|
526 | }
|
527 |
|
528 | return query;
|
529 | }
|
530 | /**
|
531 | * Formats a Reserved Binary Command onto query, joining neighbouring tokens
|
532 | */
|
533 |
|
534 | }, {
|
535 | key: "formatBinaryCommand",
|
536 | value: function formatBinaryCommand(token, query) {
|
537 | var isJoin = /JOIN/i.test(token.value); // check if token contains JOIN
|
538 |
|
539 | if (!isJoin || this.isTabularStyle()) {
|
540 | // decrease for boolean set operators or in tabular mode
|
541 | this.indentation.decreaseTopLevel();
|
542 | }
|
543 |
|
544 | query = this.addNewline(query) + this.equalizeWhitespace(this.show(token));
|
545 | return isJoin ? query + ' ' : this.addNewline(query);
|
546 | }
|
547 | /**
|
548 | * Formats a Reserved Keyword onto query, skipping AS if disabled
|
549 | */
|
550 |
|
551 | }, {
|
552 | key: "formatKeyword",
|
553 | value: function formatKeyword(token, query) {
|
554 | if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.AS(token) && this.aliasAs.shouldRemove()) {
|
555 | return query;
|
556 | }
|
557 |
|
558 | return this.formatWithSpaces(token, query);
|
559 | }
|
560 | /**
|
561 | * Formats a Reserved Dependent Clause token onto query, supporting the keyword that precedes it
|
562 | */
|
563 |
|
564 | }, {
|
565 | key: "formatDependentClause",
|
566 | value: function formatDependentClause(token, query) {
|
567 | return this.addNewline(query) + this.equalizeWhitespace(this.show(token)) + ' ';
|
568 | } // Formats ON and USING keywords
|
569 |
|
570 | }, {
|
571 | key: "formatJoinCondition",
|
572 | value: function formatJoinCondition(token, query) {
|
573 | return query + this.equalizeWhitespace(this.show(token)) + ' ';
|
574 | }
|
575 | /**
|
576 | * Formats an Operator onto query, following rules for specific characters
|
577 | */
|
578 |
|
579 | }, {
|
580 | key: "formatOperator",
|
581 | value: function formatOperator(token, query) {
|
582 | // special operator
|
583 | if (token.value === ',') {
|
584 | return this.formatComma(token, query);
|
585 | } else if (token.value === ';') {
|
586 | return this.formatQuerySeparator(token, query);
|
587 | } else if (['$', '['].includes(token.value)) {
|
588 | return this.formatWithSpaces(token, query, 'before');
|
589 | } else if ([':', ']'].includes(token.value)) {
|
590 | return this.formatWithSpaces(token, query, 'after');
|
591 | } else if (['.', '{', '}', '`'].includes(token.value)) {
|
592 | return this.formatWithoutSpaces(token, query);
|
593 | } // regular operator
|
594 |
|
595 |
|
596 | if (this.cfg.denseOperators && this.tokenLookBehind().type !== _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.RESERVED_COMMAND) {
|
597 | // do not trim whitespace if SELECT *
|
598 | return this.formatWithoutSpaces(token, query);
|
599 | }
|
600 |
|
601 | return this.formatWithSpaces(token, query);
|
602 | }
|
603 | /**
|
604 | * Formats a Logical Operator onto query, joining boolean conditions
|
605 | */
|
606 |
|
607 | }, {
|
608 | key: "formatLogicalOperator",
|
609 | value: function formatLogicalOperator(token, query) {
|
610 | // ignore AND when BETWEEN x [AND] y
|
611 | if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.AND(token) && _token__WEBPACK_IMPORTED_MODULE_4__.isToken.BETWEEN(this.tokenLookBehind(2))) {
|
612 | return this.formatWithSpaces(token, query);
|
613 | }
|
614 |
|
615 | if (this.isTabularStyle()) {
|
616 | this.indentation.decreaseTopLevel();
|
617 | }
|
618 |
|
619 | if (this.cfg.logicalOperatorNewline === 'before') {
|
620 | return (this.currentNewline ? this.addNewline(query) : query) + this.equalizeWhitespace(this.show(token)) + ' ';
|
621 | } else {
|
622 | query += this.show(token);
|
623 | return this.currentNewline ? this.addNewline(query) : query;
|
624 | }
|
625 | }
|
626 | /** Replace any sequence of whitespace characters with single space */
|
627 |
|
628 | }, {
|
629 | key: "equalizeWhitespace",
|
630 | value: function equalizeWhitespace(string) {
|
631 | return string.replace(/[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g, ' ');
|
632 | }
|
633 | /**
|
634 | * Formats a Block Start token (left paren/bracket/brace, CASE) onto query, beginning an Inline Block or increasing indentation where necessary
|
635 | */
|
636 |
|
637 | }, {
|
638 | key: "formatBlockStart",
|
639 | value: function formatBlockStart(token, query) {
|
640 | var _a;
|
641 |
|
642 | if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.CASE(token)) {
|
643 | query = this.formatWithSpaces(token, query);
|
644 | } else {
|
645 | // Take out the preceding space unless there was whitespace there in the original query
|
646 | // or another opening parens or line comment
|
647 | var preserveWhitespaceFor = [_token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START, _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.LINE_COMMENT, _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.OPERATOR];
|
648 |
|
649 | if (((_a = token.whitespaceBefore) === null || _a === void 0 ? void 0 : _a.length) === 0 && !preserveWhitespaceFor.includes(this.tokenLookBehind().type)) {
|
650 | query = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query);
|
651 | } else if (!this.cfg.newlineBeforeOpenParen) {
|
652 | query = query.trimEnd() + ' ';
|
653 | }
|
654 |
|
655 | query += this.show(token);
|
656 | this.inlineBlock.beginIfPossible(this.tokens, this.index);
|
657 | }
|
658 |
|
659 | if (!this.inlineBlock.isActive()) {
|
660 | this.indentation.increaseBlockLevel();
|
661 |
|
662 | if (!_token__WEBPACK_IMPORTED_MODULE_4__.isToken.CASE(token) || this.cfg.multilineLists === 'always') {
|
663 | query = this.addNewline(query);
|
664 | }
|
665 | }
|
666 |
|
667 | return query;
|
668 | }
|
669 | /**
|
670 | * Formats a Block End token (right paren/bracket/brace, END) onto query, closing an Inline Block or decreasing indentation where necessary
|
671 | */
|
672 |
|
673 | }, {
|
674 | key: "formatBlockEnd",
|
675 | value: function formatBlockEnd(token, query) {
|
676 | if (this.inlineBlock.isActive()) {
|
677 | this.inlineBlock.end();
|
678 |
|
679 | if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.END(token)) {
|
680 | return this.formatWithSpaces(token, query); // add space before END when closing inline block
|
681 | }
|
682 |
|
683 | return this.formatWithSpaces(token, query, 'after'); // do not add space before )
|
684 | } else {
|
685 | this.indentation.decreaseBlockLevel();
|
686 |
|
687 | if (this.isTabularStyle()) {
|
688 | // +1 extra indentation step for the closing paren
|
689 | query = this.addNewline(query) + this.indentation.getSingleIndent();
|
690 | } else if (this.cfg.newlineBeforeCloseParen) {
|
691 | query = this.addNewline(query);
|
692 | } else {
|
693 | query = query.trimEnd() + ' ';
|
694 | }
|
695 |
|
696 | return this.formatWithSpaces(token, query);
|
697 | }
|
698 | }
|
699 | /**
|
700 | * Formats a Placeholder item onto query, to be replaced with the value of the placeholder
|
701 | */
|
702 |
|
703 | }, {
|
704 | key: "formatPlaceholder",
|
705 | value: function formatPlaceholder(token, query) {
|
706 | return query + this.params.get(token) + ' ';
|
707 | }
|
708 | /**
|
709 | * Formats a comma Operator onto query, ending line unless in an Inline Block
|
710 | */
|
711 |
|
712 | }, {
|
713 | key: "formatComma",
|
714 | value: function formatComma(token, query) {
|
715 | query = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query) + this.show(token) + ' ';
|
716 |
|
717 | if (this.inlineBlock.isActive()) {
|
718 | return query;
|
719 | } else if (_token__WEBPACK_IMPORTED_MODULE_4__.isToken.LIMIT(this.getPreviousReservedToken())) {
|
720 | return query;
|
721 | } else if (this.currentNewline) {
|
722 | return this.addNewline(query);
|
723 | } else {
|
724 | return query;
|
725 | }
|
726 | }
|
727 | /** Simple append of token onto query */
|
728 |
|
729 | }, {
|
730 | key: "formatWithoutSpaces",
|
731 | value: function formatWithoutSpaces(token, query) {
|
732 | return (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query) + this.show(token);
|
733 | }
|
734 | /**
|
735 | * Add token onto query with spaces - either before, after, or both
|
736 | */
|
737 |
|
738 | }, {
|
739 | key: "formatWithSpaces",
|
740 | value: function formatWithSpaces(token, query) {
|
741 | var addSpace = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'both';
|
742 | var before = addSpace === 'after' ? (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query) : query;
|
743 | var after = addSpace === 'before' ? '' : ' ';
|
744 | return before + this.show(token) + after;
|
745 | }
|
746 | }, {
|
747 | key: "formatQuerySeparator",
|
748 | value: function formatQuerySeparator(token, query) {
|
749 | this.indentation.resetIndentation();
|
750 | return [(0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query), this.cfg.newlineBeforeSemicolon ? '\n' : '', this.show(token), '\n'.repeat(this.cfg.linesBetweenQueries + 1)].join('');
|
751 | }
|
752 | /** Converts token to string, uppercasing if enabled */
|
753 |
|
754 | }, {
|
755 | key: "show",
|
756 | value: function show(token) {
|
757 | if ((0,_token__WEBPACK_IMPORTED_MODULE_4__.isReserved)(token) || token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_START || token.type === _token__WEBPACK_IMPORTED_MODULE_4__.TokenType.BLOCK_END) {
|
758 | switch (this.cfg.keywordCase) {
|
759 | case 'preserve':
|
760 | return token.value;
|
761 |
|
762 | case 'upper':
|
763 | return token.value.toUpperCase();
|
764 |
|
765 | case 'lower':
|
766 | return token.value.toLowerCase();
|
767 | }
|
768 | } else {
|
769 | return token.value;
|
770 | }
|
771 | }
|
772 | /** Inserts a newline onto the query */
|
773 |
|
774 | }, {
|
775 | key: "addNewline",
|
776 | value: function addNewline(query) {
|
777 | query = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.trimSpacesEnd)(query);
|
778 |
|
779 | if (!query.endsWith('\n')) {
|
780 | query += '\n';
|
781 | }
|
782 |
|
783 | return query + this.indentation.getIndent();
|
784 | }
|
785 | }, {
|
786 | key: "isTabularStyle",
|
787 | value: function isTabularStyle() {
|
788 | return this.cfg.indentStyle === 'tabularLeft' || this.cfg.indentStyle === 'tabularRight';
|
789 | }
|
790 | /** Returns the latest encountered reserved keyword token */
|
791 |
|
792 | }, {
|
793 | key: "getPreviousReservedToken",
|
794 | value: function getPreviousReservedToken() {
|
795 | return this.previousReservedToken;
|
796 | }
|
797 | /** True when currently within SELECT command */
|
798 |
|
799 | }, {
|
800 | key: "isWithinSelect",
|
801 | value: function isWithinSelect() {
|
802 | return _token__WEBPACK_IMPORTED_MODULE_4__.isToken.SELECT(this.previousCommandToken);
|
803 | }
|
804 | /** Fetches nth previous token from the token stream */
|
805 |
|
806 | }, {
|
807 | key: "tokenLookBehind",
|
808 | value: function tokenLookBehind() {
|
809 | var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
810 | return this.tokens[this.index - n] || _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
|
811 | }
|
812 | /** Fetches nth next token from the token stream */
|
813 |
|
814 | }, {
|
815 | key: "tokenLookAhead",
|
816 | value: function tokenLookAhead() {
|
817 | var n = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
818 | return this.tokens[this.index + n] || _token__WEBPACK_IMPORTED_MODULE_4__.EOF_TOKEN;
|
819 | }
|
820 | }]);
|
821 |
|
822 | return Formatter;
|
823 | }();
|
824 |
|
825 |
|
826 |
|
827 | /***/ }),
|
828 |
|
829 | /***/ "./src/core/Indentation.ts":
|
830 | /*!*********************************!*\
|
831 | !*** ./src/core/Indentation.ts ***!
|
832 | \*********************************/
|
833 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
834 |
|
835 | __webpack_require__.r(__webpack_exports__);
|
836 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
837 | /* harmony export */ "default": () => (/* binding */ Indentation)
|
838 | /* harmony export */ });
|
839 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
840 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
841 |
|
842 | 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); } }
|
843 |
|
844 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
845 |
|
846 |
|
847 | var INDENT_TYPE_TOP_LEVEL = 'top-level';
|
848 | var INDENT_TYPE_BLOCK_LEVEL = 'block-level';
|
849 | /**
|
850 | * Manages indentation levels.
|
851 | *
|
852 | * There are two types of indentation levels:
|
853 | *
|
854 | * - BLOCK_LEVEL : increased by open-parenthesis
|
855 | * - TOP_LEVEL : increased by RESERVED_COMMAND words
|
856 | */
|
857 |
|
858 | var Indentation = /*#__PURE__*/function () {
|
859 | /**
|
860 | * @param {string} indent A string to indent with
|
861 | */
|
862 | function Indentation(indent) {
|
863 | _classCallCheck(this, Indentation);
|
864 |
|
865 | this.indent = indent;
|
866 | this.indentTypes = [];
|
867 | }
|
868 | /**
|
869 | * Returns indentation string for single indentation step.
|
870 | */
|
871 |
|
872 |
|
873 | _createClass(Indentation, [{
|
874 | key: "getSingleIndent",
|
875 | value: function getSingleIndent() {
|
876 | return this.indent;
|
877 | }
|
878 | /**
|
879 | * Returns current indentation string.
|
880 | * @return {string} indentation string based on indentTypes
|
881 | */
|
882 |
|
883 | }, {
|
884 | key: "getIndent",
|
885 | value: function getIndent() {
|
886 | return this.indent.repeat(this.indentTypes.length);
|
887 | }
|
888 | /**
|
889 | * Increases indentation by one top-level indent.
|
890 | */
|
891 |
|
892 | }, {
|
893 | key: "increaseTopLevel",
|
894 | value: function increaseTopLevel() {
|
895 | this.indentTypes.push(INDENT_TYPE_TOP_LEVEL);
|
896 | }
|
897 | /**
|
898 | * Increases indentation by one block-level indent.
|
899 | */
|
900 |
|
901 | }, {
|
902 | key: "increaseBlockLevel",
|
903 | value: function increaseBlockLevel() {
|
904 | this.indentTypes.push(INDENT_TYPE_BLOCK_LEVEL);
|
905 | }
|
906 | /**
|
907 | * Decreases indentation by one top-level indent.
|
908 | * Does nothing when the previous indent is not top-level.
|
909 | */
|
910 |
|
911 | }, {
|
912 | key: "decreaseTopLevel",
|
913 | value: function decreaseTopLevel() {
|
914 | if (this.indentTypes.length > 0 && (0,_utils__WEBPACK_IMPORTED_MODULE_0__.last)(this.indentTypes) === INDENT_TYPE_TOP_LEVEL) {
|
915 | this.indentTypes.pop();
|
916 | }
|
917 | }
|
918 | /**
|
919 | * Decreases indentation by one block-level indent.
|
920 | * If there are top-level indents within the block-level indent,
|
921 | * throws away these as well.
|
922 | */
|
923 |
|
924 | }, {
|
925 | key: "decreaseBlockLevel",
|
926 | value: function decreaseBlockLevel() {
|
927 | while (this.indentTypes.length > 0) {
|
928 | var type = this.indentTypes.pop();
|
929 |
|
930 | if (type !== INDENT_TYPE_TOP_LEVEL) {
|
931 | break;
|
932 | }
|
933 | }
|
934 | }
|
935 | /** Clears all indentation */
|
936 |
|
937 | }, {
|
938 | key: "resetIndentation",
|
939 | value: function resetIndentation() {
|
940 | this.indentTypes = [];
|
941 | }
|
942 | }]);
|
943 |
|
944 | return Indentation;
|
945 | }();
|
946 |
|
947 |
|
948 |
|
949 | /***/ }),
|
950 |
|
951 | /***/ "./src/core/InlineBlock.ts":
|
952 | /*!*********************************!*\
|
953 | !*** ./src/core/InlineBlock.ts ***!
|
954 | \*********************************/
|
955 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
956 |
|
957 | __webpack_require__.r(__webpack_exports__);
|
958 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
959 | /* harmony export */ "default": () => (/* binding */ InlineBlock)
|
960 | /* harmony export */ });
|
961 | /* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
|
962 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
963 |
|
964 | 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); } }
|
965 |
|
966 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
967 |
|
968 |
|
969 | /**
|
970 | * Bookkeeper for inline blocks.
|
971 | *
|
972 | * Inline blocks are parenthesised expressions that are shorter than INLINE_MAX_LENGTH.
|
973 | * These blocks are formatted on a single line, unlike longer parenthesised
|
974 | * expressions where open-parenthesis causes newline and increase of indentation.
|
975 | */
|
976 |
|
977 | var InlineBlock = /*#__PURE__*/function () {
|
978 | function InlineBlock(expressionWidth) {
|
979 | _classCallCheck(this, InlineBlock);
|
980 |
|
981 | this.level = 0;
|
982 | this.expressionWidth = expressionWidth;
|
983 | }
|
984 | /**
|
985 | * Begins inline block when lookahead through upcoming tokens determines
|
986 | * that the block would be smaller than INLINE_MAX_LENGTH.
|
987 | * @param {Token[]} tokens Array of all tokens
|
988 | * @param {Number} index Current token position
|
989 | */
|
990 |
|
991 |
|
992 | _createClass(InlineBlock, [{
|
993 | key: "beginIfPossible",
|
994 | value: function beginIfPossible(tokens, index) {
|
995 | if (this.level === 0 && this.isInlineBlock(tokens, index)) {
|
996 | this.level = 1;
|
997 | } else if (this.level > 0) {
|
998 | this.level++;
|
999 | } else {
|
1000 | this.level = 0;
|
1001 | }
|
1002 | }
|
1003 | /**
|
1004 | * Finishes current inline block.
|
1005 | * There might be several nested ones.
|
1006 | */
|
1007 |
|
1008 | }, {
|
1009 | key: "end",
|
1010 | value: function end() {
|
1011 | this.level--;
|
1012 | }
|
1013 | /**
|
1014 | * True when inside an inline block
|
1015 | */
|
1016 |
|
1017 | }, {
|
1018 | key: "isActive",
|
1019 | value: function isActive() {
|
1020 | return this.level > 0;
|
1021 | }
|
1022 | /**
|
1023 | * Check if this should be an inline parentheses block
|
1024 | * Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
|
1025 | */
|
1026 |
|
1027 | }, {
|
1028 | key: "isInlineBlock",
|
1029 | value: function isInlineBlock(tokens, index) {
|
1030 | var length = 0;
|
1031 | var level = 0;
|
1032 |
|
1033 | for (var i = index; i < tokens.length; i++) {
|
1034 | var token = tokens[i];
|
1035 | length += token.value.length;
|
1036 |
|
1037 | if (this.isForbiddenToken(token)) {
|
1038 | return false;
|
1039 | } // Overran max length
|
1040 |
|
1041 |
|
1042 | if (length > this.expressionWidth) {
|
1043 | return false;
|
1044 | }
|
1045 |
|
1046 | if (token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.BLOCK_START) {
|
1047 | level++;
|
1048 | } else if (token.type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.BLOCK_END) {
|
1049 | level--;
|
1050 |
|
1051 | if (level === 0) {
|
1052 | return true;
|
1053 | }
|
1054 | }
|
1055 | }
|
1056 |
|
1057 | return false;
|
1058 | } // Reserved words that cause newlines, comments and semicolons
|
1059 | // are not allowed inside inline parentheses block
|
1060 |
|
1061 | }, {
|
1062 | key: "isForbiddenToken",
|
1063 | value: function isForbiddenToken(_ref) {
|
1064 | var type = _ref.type,
|
1065 | value = _ref.value;
|
1066 | return type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_COMMAND || type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.RESERVED_LOGICAL_OPERATOR || // type === TokenType.LINE_COMMENT ||
|
1067 | type === _token__WEBPACK_IMPORTED_MODULE_0__.TokenType.BLOCK_COMMENT || value === ';' || _token__WEBPACK_IMPORTED_MODULE_0__.isToken.CASE({
|
1068 | type: type,
|
1069 | value: value
|
1070 | }) // CASE cannot have inline blocks
|
1071 | ;
|
1072 | }
|
1073 | }]);
|
1074 |
|
1075 | return InlineBlock;
|
1076 | }();
|
1077 |
|
1078 |
|
1079 |
|
1080 | /***/ }),
|
1081 |
|
1082 | /***/ "./src/core/Params.ts":
|
1083 | /*!****************************!*\
|
1084 | !*** ./src/core/Params.ts ***!
|
1085 | \****************************/
|
1086 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1087 |
|
1088 | __webpack_require__.r(__webpack_exports__);
|
1089 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1090 | /* harmony export */ "default": () => (/* binding */ Params)
|
1091 | /* harmony export */ });
|
1092 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
1093 |
|
1094 | 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); } }
|
1095 |
|
1096 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
1097 |
|
1098 | /**
|
1099 | * Handles placeholder replacement with given params.
|
1100 | */
|
1101 | var Params = /*#__PURE__*/function () {
|
1102 | function Params(params) {
|
1103 | _classCallCheck(this, Params);
|
1104 |
|
1105 | this.params = params;
|
1106 | this.index = 0;
|
1107 | }
|
1108 | /**
|
1109 | * Returns param value that matches given placeholder with param key.
|
1110 | * @param {Token} token
|
1111 | * @return {string} param or token.value when params are missing
|
1112 | */
|
1113 |
|
1114 |
|
1115 | _createClass(Params, [{
|
1116 | key: "get",
|
1117 | value: function get(_ref) {
|
1118 | var key = _ref.key,
|
1119 | value = _ref.value;
|
1120 |
|
1121 | if (!this.params) {
|
1122 | return value;
|
1123 | }
|
1124 |
|
1125 | if (key) {
|
1126 | return this.params[key];
|
1127 | }
|
1128 |
|
1129 | return this.params[this.index++];
|
1130 | }
|
1131 | }]);
|
1132 |
|
1133 | return Params;
|
1134 | }();
|
1135 |
|
1136 |
|
1137 |
|
1138 | /***/ }),
|
1139 |
|
1140 | /***/ "./src/core/Tokenizer.ts":
|
1141 | /*!*******************************!*\
|
1142 | !*** ./src/core/Tokenizer.ts ***!
|
1143 | \*******************************/
|
1144 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1145 |
|
1146 | __webpack_require__.r(__webpack_exports__);
|
1147 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1148 | /* harmony export */ "WHITESPACE_REGEX": () => (/* binding */ WHITESPACE_REGEX),
|
1149 | /* harmony export */ "default": () => (/* binding */ Tokenizer)
|
1150 | /* harmony export */ });
|
1151 | /* harmony import */ var _regexFactory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./regexFactory */ "./src/core/regexFactory.ts");
|
1152 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
1153 | /* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
|
1154 | function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
1155 |
|
1156 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
1157 |
|
1158 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
1159 |
|
1160 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
1161 |
|
1162 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
1163 |
|
1164 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
1165 |
|
1166 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
1167 |
|
1168 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
1169 |
|
1170 | 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); } }
|
1171 |
|
1172 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
1173 |
|
1174 |
|
1175 |
|
1176 | // convert to partial type import in TS 4.5
|
1177 |
|
1178 | var WHITESPACE_REGEX = /^([\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+)/;
|
1179 | var NULL_REGEX = /(?!)/; // zero-width negative lookahead, matches nothing
|
1180 |
|
1181 | /** Converts SQL language string into a token stream */
|
1182 |
|
1183 | var Tokenizer = /*#__PURE__*/function () {
|
1184 | /**
|
1185 | * @param {TokenizerOptions} cfg
|
1186 | * @param {string[]} cfg.reservedKeywords - Reserved words in SQL
|
1187 | * @param {string[]} cfg.reservedDependentClauses - Words that following a specific Statement and must have data attached
|
1188 | * @param {string[]} cfg.reservedLogicalOperators - Words that are set to newline
|
1189 | * @param {string[]} cfg.reservedCommands - Words that are set to new line separately
|
1190 | * @param {string[]} cfg.reservedBinaryCommands - Words that are top level but have no indentation
|
1191 | * @param {string[]} cfg.reservedJoinConditions - ON and USING
|
1192 | * @param {string[]} cfg.stringTypes - string types to enable - "", '', ``, [], N''
|
1193 | * @param {string[]} cfg.blockStart - Opening parentheses to enable, like (, [
|
1194 | * @param {string[]} cfg.blockEnd - Closing parentheses to enable, like ), ]
|
1195 | * @param {string[]} cfg.indexedPlaceholderTypes - Prefixes for indexed placeholders, like ?
|
1196 | * @param {string[]} cfg.namedPlaceholderTypes - Prefixes for named placeholders, like @ and :
|
1197 | * @param {string[]} cfg.lineCommentTypes - Line comments to enable, like # and --
|
1198 | * @param {string[]} cfg.specialWordChars - Special chars that can be found inside of words, like @ and #
|
1199 | * @param {string[]} cfg.operators - Additional operators to recognize
|
1200 | */
|
1201 | function Tokenizer(cfg) {
|
1202 | var _this = this,
|
1203 | _this$REGEX_MAP;
|
1204 |
|
1205 | _classCallCheck(this, Tokenizer);
|
1206 |
|
1207 | var _a, _b, _c, _d;
|
1208 | /** Curried function of `getTokenOnFirstMatch` that allows token type to be passed first */
|
1209 |
|
1210 |
|
1211 | this.matchToken = function (tokenType) {
|
1212 | return function (input) {
|
1213 | return _this.getTokenOnFirstMatch({
|
1214 | input: input,
|
1215 | type: tokenType,
|
1216 | regex: _this.REGEX_MAP[tokenType]
|
1217 | });
|
1218 | };
|
1219 | };
|
1220 |
|
1221 | var specialWordCharsAll = Object.values((_a = cfg.specialWordChars) !== null && _a !== void 0 ? _a : {}).join('');
|
1222 | this.REGEX_MAP = (_this$REGEX_MAP = {}, _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createWordRegex(cfg.specialWordChars)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.STRING, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createStringRegex(cfg.stringTypes)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedKeywords, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_DEPENDENT_CLAUSE, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex((_b = cfg.reservedDependentClauses) !== null && _b !== void 0 ? _b : [], specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_LOGICAL_OPERATOR, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedLogicalOperators, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_COMMAND, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedCommands, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_BINARY_COMMAND, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedBinaryCommands, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_JOIN_CONDITION, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createReservedWordRegex(cfg.reservedJoinConditions, specialWordCharsAll)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.OPERATOR, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createOperatorRegex('+-/*%&|^><=.,;[]{}`:$', ['<>', '<=', '>=', '!='].concat(_toConsumableArray((_c = cfg.operators) !== null && _c !== void 0 ? _c : [])))), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_START, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createParenRegex(cfg.blockStart)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_END, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createParenRegex(cfg.blockEnd)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.LINE_COMMENT, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createLineCommentRegex(cfg.lineCommentTypes)), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_COMMENT, /^(\/\*(?:(?![])[\s\S])*?(?:\*\/|$))/), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.NUMBER, /^(0x[0-9A-Fa-f]+|0b[01]+|(\x2D[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]*)?[0-9]+(\.[0-9]*)?([Ee][\+\x2D]?[0-9]+(\.[0-9]+)?)?)/), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.PLACEHOLDER, NULL_REGEX), _defineProperty(_this$REGEX_MAP, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.EOF, NULL_REGEX), _this$REGEX_MAP);
|
1223 | this.INDEXED_PLACEHOLDER_REGEX = _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createPlaceholderRegex((_d = cfg.indexedPlaceholderTypes) !== null && _d !== void 0 ? _d : [], '[0-9]*');
|
1224 | this.IDENT_NAMED_PLACEHOLDER_REGEX = _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createPlaceholderRegex(cfg.namedPlaceholderTypes, '[a-zA-Z0-9._$]+');
|
1225 | this.STRING_NAMED_PLACEHOLDER_REGEX = _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createPlaceholderRegex(cfg.namedPlaceholderTypes, _regexFactory__WEBPACK_IMPORTED_MODULE_0__.createStringPattern(cfg.stringTypes));
|
1226 | }
|
1227 | /**
|
1228 | * Takes a SQL string and breaks it into tokens.
|
1229 | * Each token is an object with type and value.
|
1230 | *
|
1231 | * @param {string} input - The SQL string
|
1232 | * @returns {Token[]} output token stream
|
1233 | */
|
1234 |
|
1235 |
|
1236 | _createClass(Tokenizer, [{
|
1237 | key: "tokenize",
|
1238 | value: function tokenize(input) {
|
1239 | var tokens = [];
|
1240 | var token; // Keep processing the string until it is empty
|
1241 |
|
1242 | while (input.length) {
|
1243 | // grab any preceding whitespace
|
1244 | var whitespaceBefore = this.getWhitespace(input);
|
1245 | input = input.substring(whitespaceBefore.length);
|
1246 |
|
1247 | if (input.length) {
|
1248 | // Get the next token and the token type
|
1249 | token = this.getNextToken(input, token); // Advance the string
|
1250 |
|
1251 | input = input.substring(token.value.length);
|
1252 | tokens.push(Object.assign(Object.assign({}, token), {
|
1253 | whitespaceBefore: whitespaceBefore
|
1254 | }));
|
1255 | }
|
1256 | }
|
1257 |
|
1258 | return tokens;
|
1259 | }
|
1260 | /** Matches preceding whitespace if present */
|
1261 |
|
1262 | }, {
|
1263 | key: "getWhitespace",
|
1264 | value: function getWhitespace(input) {
|
1265 | var matches = input.match(WHITESPACE_REGEX);
|
1266 | return matches ? matches[1] : '';
|
1267 | }
|
1268 | /** Attempts to match next token from input string, tests RegExp patterns in decreasing priority */
|
1269 |
|
1270 | }, {
|
1271 | key: "getNextToken",
|
1272 | value: function getNextToken(input, previousToken) {
|
1273 | return this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.LINE_COMMENT)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_COMMENT)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.STRING)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_START)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_END)(input) || this.getPlaceholderToken(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.NUMBER)(input) || this.getReservedWordToken(input, previousToken) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD)(input) || this.matchToken(_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.OPERATOR)(input);
|
1274 | }
|
1275 | /**
|
1276 | * Attempts to match a placeholder token pattern
|
1277 | * @return {Token | undefined} - The placeholder token if found, otherwise undefined
|
1278 | */
|
1279 |
|
1280 | }, {
|
1281 | key: "getPlaceholderToken",
|
1282 | value: function getPlaceholderToken(input) {
|
1283 | var _this2 = this;
|
1284 |
|
1285 | var _a, _b, _c;
|
1286 |
|
1287 | var placeholderTokenRegexMap = [// pattern for placeholder with identifier name
|
1288 | {
|
1289 | regex: (_a = this.IDENT_NAMED_PLACEHOLDER_REGEX) !== null && _a !== void 0 ? _a : NULL_REGEX,
|
1290 | parseKey: function parseKey(v) {
|
1291 | return v.slice(1);
|
1292 | }
|
1293 | }, // pattern for placeholder with string name
|
1294 | {
|
1295 | regex: (_b = this.STRING_NAMED_PLACEHOLDER_REGEX) !== null && _b !== void 0 ? _b : NULL_REGEX,
|
1296 | parseKey: function parseKey(v) {
|
1297 | return _this2.getEscapedPlaceholderKey({
|
1298 | key: v.slice(2, -1),
|
1299 | quoteChar: v.slice(-1)
|
1300 | });
|
1301 | }
|
1302 | }, // pattern for placeholder with numeric index
|
1303 | {
|
1304 | regex: (_c = this.INDEXED_PLACEHOLDER_REGEX) !== null && _c !== void 0 ? _c : NULL_REGEX,
|
1305 | parseKey: function parseKey(v) {
|
1306 | return v.slice(1);
|
1307 | }
|
1308 | }];
|
1309 | return placeholderTokenRegexMap.reduce(function (acc, _ref) {
|
1310 | var regex = _ref.regex,
|
1311 | parseKey = _ref.parseKey;
|
1312 |
|
1313 | var token = _this2.getTokenOnFirstMatch({
|
1314 | input: input,
|
1315 | regex: regex,
|
1316 | type: _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.PLACEHOLDER
|
1317 | });
|
1318 |
|
1319 | return token ? Object.assign(Object.assign({}, token), {
|
1320 | key: parseKey(token.value)
|
1321 | }) : acc;
|
1322 | }, undefined);
|
1323 | }
|
1324 | }, {
|
1325 | key: "getEscapedPlaceholderKey",
|
1326 | value: function getEscapedPlaceholderKey(_ref2) {
|
1327 | var key = _ref2.key,
|
1328 | quoteChar = _ref2.quoteChar;
|
1329 | return key.replace(new RegExp((0,_utils__WEBPACK_IMPORTED_MODULE_1__.escapeRegExp)('\\' + quoteChar), 'gu'), quoteChar);
|
1330 | }
|
1331 | /**
|
1332 | * Attempts to match a Reserved word token pattern, avoiding edge cases of Reserved words within string tokens
|
1333 | * @return {Token | undefined} - The Reserved word token if found, otherwise undefined
|
1334 | */
|
1335 |
|
1336 | }, {
|
1337 | key: "getReservedWordToken",
|
1338 | value: function getReservedWordToken(input, previousToken) {
|
1339 | var _this3 = this;
|
1340 |
|
1341 | // A reserved word cannot be preceded by a '.'
|
1342 | // this makes it so in "mytable.from", "from" is not considered a reserved word
|
1343 | if ((previousToken === null || previousToken === void 0 ? void 0 : previousToken.value) === '.') {
|
1344 | return undefined;
|
1345 | } // prioritised list of Reserved token types
|
1346 |
|
1347 |
|
1348 | var reservedTokenList = [_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_COMMAND, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_BINARY_COMMAND, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_DEPENDENT_CLAUSE, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_LOGICAL_OPERATOR, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD, _token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_JOIN_CONDITION];
|
1349 | return reservedTokenList.reduce(function (matchedToken, tokenType) {
|
1350 | return matchedToken || _this3.matchToken(tokenType)(input);
|
1351 | }, undefined);
|
1352 | }
|
1353 | /**
|
1354 | * Attempts to match RegExp from head of input, returning undefined if not found
|
1355 | * @param {string} _.input - The string to match
|
1356 | * @param {TokenType} _.type - The type of token to match against
|
1357 | * @param {RegExp} _.regex - The regex to match
|
1358 | * @return {Token | undefined} - The matched token if found, otherwise undefined
|
1359 | */
|
1360 |
|
1361 | }, {
|
1362 | key: "getTokenOnFirstMatch",
|
1363 | value: function getTokenOnFirstMatch(_ref3) {
|
1364 | var input = _ref3.input,
|
1365 | type = _ref3.type,
|
1366 | regex = _ref3.regex;
|
1367 | var matches = input.match(regex);
|
1368 | return matches ? {
|
1369 | type: type,
|
1370 | value: matches[1]
|
1371 | } : undefined;
|
1372 | }
|
1373 | }]);
|
1374 |
|
1375 | return Tokenizer;
|
1376 | }();
|
1377 |
|
1378 |
|
1379 |
|
1380 | /***/ }),
|
1381 |
|
1382 | /***/ "./src/core/formatAliasPositions.ts":
|
1383 | /*!******************************************!*\
|
1384 | !*** ./src/core/formatAliasPositions.ts ***!
|
1385 | \******************************************/
|
1386 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1387 |
|
1388 | __webpack_require__.r(__webpack_exports__);
|
1389 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1390 | /* harmony export */ "default": () => (/* binding */ formatAliasPositions)
|
1391 | /* harmony export */ });
|
1392 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
1393 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
1394 |
|
1395 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
1396 |
|
1397 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
1398 |
|
1399 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
1400 |
|
1401 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
1402 |
|
1403 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
1404 |
|
1405 |
|
1406 | /**
|
1407 | * Handles select alias placement - tabulates if enabled
|
1408 | */
|
1409 |
|
1410 | function formatAliasPositions(query) {
|
1411 | var lines = query.split('\n');
|
1412 | var newQuery = [];
|
1413 |
|
1414 | for (var i = 0; i < lines.length; i++) {
|
1415 | // find SELECT rows with trailing comma, if no comma (only one row) - no-op
|
1416 | if (lines[i].match(/^\s*SELECT/i)) {
|
1417 | var _ret = function () {
|
1418 | var aliasLines = [];
|
1419 |
|
1420 | if (lines[i].match(/.*,$/)) {
|
1421 | aliasLines = [lines[i]]; // add select to aliasLines in case of tabular formats
|
1422 | } else {
|
1423 | newQuery.push(lines[i]); // add select to new query
|
1424 |
|
1425 | if (lines[i].match(/^\s*SELECT\s+.+(?!,$)/i)) {
|
1426 | return "continue";
|
1427 | }
|
1428 |
|
1429 | aliasLines.push(lines[++i]);
|
1430 | } // get all lines in SELECT clause
|
1431 |
|
1432 |
|
1433 | while (lines[i++].match(/.*,$/)) {
|
1434 | aliasLines.push(lines[i]);
|
1435 | } // break lines into alias with optional AS, and all preceding text
|
1436 |
|
1437 |
|
1438 | var splitLines = aliasLines.map(function (line) {
|
1439 | return {
|
1440 | line: line,
|
1441 | matches: line.match(/(^.*?\S) (AS )?(\S+,?$)/i)
|
1442 | };
|
1443 | }).map(function (_ref) {
|
1444 | var line = _ref.line,
|
1445 | matches = _ref.matches;
|
1446 |
|
1447 | if (!matches) {
|
1448 | return {
|
1449 | precedingText: line
|
1450 | };
|
1451 | }
|
1452 |
|
1453 | return {
|
1454 | precedingText: matches[1],
|
1455 | as: matches[2],
|
1456 | alias: matches[3]
|
1457 | };
|
1458 | }); // get longest of precedingText, trim trailing comma for non-alias columns
|
1459 |
|
1460 | var aliasMaxLength = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.maxLength)(splitLines.map(function (_ref2) {
|
1461 | var precedingText = _ref2.precedingText;
|
1462 | return precedingText.replace(/\s*,\s*$/, '');
|
1463 | })); // re-construct line, aligning by inserting space before AS or alias
|
1464 |
|
1465 | aliasLines = splitLines.map(function (_ref3) {
|
1466 | var precedingText = _ref3.precedingText,
|
1467 | as = _ref3.as,
|
1468 | alias = _ref3.alias;
|
1469 | return precedingText + (alias ? ' '.repeat(aliasMaxLength - precedingText.length + 1) + (as !== null && as !== void 0 ? as : '') + alias : '');
|
1470 | });
|
1471 | newQuery = [].concat(_toConsumableArray(newQuery), _toConsumableArray(aliasLines));
|
1472 | }();
|
1473 |
|
1474 | if (_ret === "continue") continue;
|
1475 | }
|
1476 |
|
1477 | newQuery.push(lines[i]);
|
1478 | }
|
1479 |
|
1480 | return newQuery.join('\n');
|
1481 | }
|
1482 |
|
1483 | /***/ }),
|
1484 |
|
1485 | /***/ "./src/core/formatCommaPositions.ts":
|
1486 | /*!******************************************!*\
|
1487 | !*** ./src/core/formatCommaPositions.ts ***!
|
1488 | \******************************************/
|
1489 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1490 |
|
1491 | __webpack_require__.r(__webpack_exports__);
|
1492 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1493 | /* harmony export */ "default": () => (/* binding */ formatCommaPositions)
|
1494 | /* harmony export */ });
|
1495 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
1496 | /* harmony import */ var _Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Tokenizer */ "./src/core/Tokenizer.ts");
|
1497 | function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
|
1498 |
|
1499 | function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
1500 |
|
1501 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
1502 |
|
1503 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
1504 |
|
1505 | function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
1506 |
|
1507 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
1508 |
|
1509 |
|
1510 |
|
1511 | /**
|
1512 | * Handles comma placement - either before, after or tabulated
|
1513 | */
|
1514 |
|
1515 | function formatCommaPositions(query, commaPosition, indent) {
|
1516 | return groupCommaDelimitedLines(query.split('\n')).flatMap(function (commaLines) {
|
1517 | if (commaLines.length === 1) {
|
1518 | return commaLines;
|
1519 | } else if (commaPosition === 'tabular') {
|
1520 | return formatTabular(commaLines);
|
1521 | } else if (commaPosition === 'before') {
|
1522 | return formatBefore(commaLines, indent);
|
1523 | } else {
|
1524 | throw new Error("Unexpected commaPosition: ".concat(commaPosition));
|
1525 | }
|
1526 | }).join('\n');
|
1527 | }
|
1528 | /**
|
1529 | * Given lines like this:
|
1530 | *
|
1531 | * [
|
1532 | * 'SELECT',
|
1533 | * ' foo,',
|
1534 | * ' bar,',
|
1535 | * ' baz',
|
1536 | * 'FROM'
|
1537 | * ]
|
1538 | *
|
1539 | * Returns groups like this:
|
1540 | *
|
1541 | * [
|
1542 | * ['SELECT'],
|
1543 | * [' foo,', ' bar,', ' baz'],
|
1544 | * ['FROM']
|
1545 | * ]
|
1546 | */
|
1547 |
|
1548 | function groupCommaDelimitedLines(lines) {
|
1549 | var groups = [];
|
1550 |
|
1551 | for (var i = 0; i < lines.length; i++) {
|
1552 | var group = [lines[i]]; // when line ends with comma,
|
1553 | // gather together all following lines that also end with comma,
|
1554 | // plus one (which doesn't end with comma)
|
1555 |
|
1556 | while (lines[i].match(/.*,$/)) {
|
1557 | i++;
|
1558 | group.push(lines[i]);
|
1559 | }
|
1560 |
|
1561 | groups.push(group);
|
1562 | }
|
1563 |
|
1564 | return groups;
|
1565 | } // makes all lines the same length by appending spaces before comma
|
1566 |
|
1567 |
|
1568 | function formatTabular(commaLines) {
|
1569 | var maxLineLength = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.maxLength)(commaLines);
|
1570 | return trimTrailingCommas(commaLines).map(function (line, i) {
|
1571 | if (i === commaLines.length - 1) {
|
1572 | return line; // do not add comma for last item
|
1573 | }
|
1574 |
|
1575 | return line + ' '.repeat(maxLineLength - line.length - 1) + ',';
|
1576 | });
|
1577 | }
|
1578 |
|
1579 | function formatBefore(commaLines, indent) {
|
1580 | return trimTrailingCommas(commaLines).map(function (line, i) {
|
1581 | if (i === 0) {
|
1582 | return line; // do not add comma for first item
|
1583 | }
|
1584 |
|
1585 | var _ref = line.match(_Tokenizer__WEBPACK_IMPORTED_MODULE_1__.WHITESPACE_REGEX) || [''],
|
1586 | _ref2 = _slicedToArray(_ref, 1),
|
1587 | whitespace = _ref2[0];
|
1588 |
|
1589 | return removeLastIndent(whitespace, indent) + indent.replace(/ {2}$/, ', ') + // add comma to the end of last indent
|
1590 | line.trimStart();
|
1591 | });
|
1592 | }
|
1593 |
|
1594 | function removeLastIndent(whitespace, indent) {
|
1595 | return whitespace.replace(new RegExp(indent + '$'), '');
|
1596 | }
|
1597 |
|
1598 | function trimTrailingCommas(lines) {
|
1599 | return lines.map(function (line) {
|
1600 | return line.replace(/,$/, '');
|
1601 | });
|
1602 | }
|
1603 |
|
1604 | /***/ }),
|
1605 |
|
1606 | /***/ "./src/core/regexFactory.ts":
|
1607 | /*!**********************************!*\
|
1608 | !*** ./src/core/regexFactory.ts ***!
|
1609 | \**********************************/
|
1610 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1611 |
|
1612 | __webpack_require__.r(__webpack_exports__);
|
1613 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1614 | /* harmony export */ "createLineCommentRegex": () => (/* binding */ createLineCommentRegex),
|
1615 | /* harmony export */ "createOperatorRegex": () => (/* binding */ createOperatorRegex),
|
1616 | /* harmony export */ "createParenRegex": () => (/* binding */ createParenRegex),
|
1617 | /* harmony export */ "createPlaceholderRegex": () => (/* binding */ createPlaceholderRegex),
|
1618 | /* harmony export */ "createReservedWordRegex": () => (/* binding */ createReservedWordRegex),
|
1619 | /* harmony export */ "createStringPattern": () => (/* binding */ createStringPattern),
|
1620 | /* harmony export */ "createStringRegex": () => (/* binding */ createStringRegex),
|
1621 | /* harmony export */ "createWordRegex": () => (/* binding */ createWordRegex)
|
1622 | /* harmony export */ });
|
1623 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
1624 |
|
1625 | /**
|
1626 | * Builds a RegExp containing all operators for a SQL dialect
|
1627 | * @param {string} monadOperators - concatenated string of all 1-length operators
|
1628 | * @param {string[]} polyadOperators - list of strings of all >1-length operators
|
1629 | */
|
1630 |
|
1631 | var createOperatorRegex = function createOperatorRegex(monadOperators, polyadOperators) {
|
1632 | return new RegExp("^(".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.sortByLengthDesc)(polyadOperators).map(_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp).join('|'), "|") + "[".concat(monadOperators.split('').map(_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp).join(''), "])"), 'u');
|
1633 | };
|
1634 | /**
|
1635 | * Builds a RegExp for valid line comments in a SQL dialect
|
1636 | * @param {string[]} lineCommentTypes - list of character strings that denote line comments
|
1637 | */
|
1638 |
|
1639 | var createLineCommentRegex = function createLineCommentRegex(lineCommentTypes) {
|
1640 | return new RegExp("^((?:".concat(lineCommentTypes.map(function (c) {
|
1641 | return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)(c);
|
1642 | }).join('|'), ").*?)(?:\r\n|\r|\n|$)"), 'u');
|
1643 | };
|
1644 | /**
|
1645 | * Builds a RegExp for all Reserved Keywords in a SQL dialect
|
1646 | * @param {string[]} reservedKeywords - list of strings of all Reserved Keywords
|
1647 | * @param {string} specialWordChars - concatenated string of all special chars that can appear in valid identifiers (and not in Reserved Keywords)
|
1648 | */
|
1649 |
|
1650 | var createReservedWordRegex = function createReservedWordRegex(reservedKeywords) {
|
1651 | var specialWordChars = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
1652 |
|
1653 | if (reservedKeywords.length === 0) {
|
1654 | return /^\b$/;
|
1655 | }
|
1656 |
|
1657 | var reservedKeywordsPattern = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.sortByLengthDesc)(reservedKeywords).join('|').replace(/ /g, '\\s+');
|
1658 | return new RegExp("^(".concat(reservedKeywordsPattern, ")(?![").concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)(specialWordChars), "]+)\\b"), 'iu');
|
1659 | };
|
1660 | /**
|
1661 | * Builds a RegExp for valid identifiers in a SQL dialect
|
1662 | * @param {Object} specialChars
|
1663 | * @param {string} specialChars.any - concatenated string of chars that can appear anywhere in a valid identifier
|
1664 | * @param {string} specialChars.prefix - concatenated string of chars that only appear at the beginning of a valid identifier
|
1665 | * @param {string} specialChars.suffix - concatenated string of chars that only appear at the end of a valid identifier
|
1666 | */
|
1667 |
|
1668 | var createWordRegex = function createWordRegex() {
|
1669 | var specialChars = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
1670 |
|
1671 | var _a, _b, _c;
|
1672 |
|
1673 | var prefixLookBehind = "[".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)((_a = specialChars.prefix) !== null && _a !== void 0 ? _a : ''), "]*");
|
1674 | var suffixLookAhead = "[".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)((_b = specialChars.suffix) !== null && _b !== void 0 ? _b : ''), "]*");
|
1675 | var unicodeWordChar = '\\p{Alphabetic}\\p{Mark}\\p{Decimal_Number}\\p{Connector_Punctuation}\\p{Join_Control}';
|
1676 | var specialWordChars = "".concat((0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)((_c = specialChars.any) !== null && _c !== void 0 ? _c : ''));
|
1677 | var arrayAccessor = '\\[\\d\\]';
|
1678 | var mapAccessor = "\\[['\"][".concat(unicodeWordChar, "]+['\"]\\]");
|
1679 | return new RegExp("^((".concat(prefixLookBehind, "([").concat(unicodeWordChar).concat(specialWordChars, "]+)").concat(suffixLookAhead, ")(").concat(arrayAccessor, "|").concat(mapAccessor, ")?)"), 'u');
|
1680 | }; // This enables the following string patterns:
|
1681 | // 1. backtick quoted string using `` to escape
|
1682 | // 2. square bracket quoted string (SQL Server) using ]] to escape
|
1683 | // 3. double quoted string using "" or \" to escape
|
1684 | // 4. single quoted string using '' or \' to escape
|
1685 | // 5. national character quoted string using N'' or N\' to escape
|
1686 | // 6. Unicode single-quoted string using \' to escape
|
1687 | // 7. Unicode double-quoted string using \" to escape
|
1688 | // 8. PostgreSQL dollar-quoted strings
|
1689 |
|
1690 | var patterns = {
|
1691 | '``': '((`[^`]*($|`))+)',
|
1692 | '{}': '((\\{[^\\}]*($|\\}))+)',
|
1693 | '[]': '((\\[[^\\]]*($|\\]))(\\][^\\]]*($|\\]))*)',
|
1694 | '""': '(("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',
|
1695 | "''": "(('[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
|
1696 | "N''": "((N'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
|
1697 | "x''": "(([xX]'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
|
1698 | "E''": "((E'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
|
1699 | "U&''": "((U&'[^'\\\\]*(?:\\\\.[^'\\\\]*)*('|$))+)",
|
1700 | 'U&""': '((U&"[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)',
|
1701 | '$$': '((?<tag>\\$\\w*\\$)[\\s\\S]*?(?:\\k<tag>|$))'
|
1702 | };
|
1703 | /**
|
1704 | * Builds a string pattern for matching string patterns for all given string types
|
1705 | * @param {StringPatternType[]} stringTypes - list of strings that denote string patterns
|
1706 | */
|
1707 |
|
1708 | var createStringPattern = function createStringPattern(stringTypes) {
|
1709 | return stringTypes.map(function (t) {
|
1710 | return patterns[t];
|
1711 | }).join('|');
|
1712 | };
|
1713 | /**
|
1714 | * Builds a RegExp for matching string patterns using `createStringPattern`
|
1715 | * @param {StringPatternType[]} stringTypes - list of strings that denote string patterns
|
1716 | */
|
1717 |
|
1718 | var createStringRegex = function createStringRegex(stringTypes) {
|
1719 | return new RegExp('^(' + createStringPattern(stringTypes) + ')', 'u');
|
1720 | };
|
1721 | /** Escapes paren characters for RegExp patterns */
|
1722 |
|
1723 | var escapeParen = function escapeParen(paren) {
|
1724 | if (paren.length === 1) {
|
1725 | // A single punctuation character
|
1726 | return (0,_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp)(paren);
|
1727 | } else {
|
1728 | // longer word
|
1729 | return '\\b' + paren + '\\b';
|
1730 | }
|
1731 | };
|
1732 | /**
|
1733 | * Builds a RegExp for matching parenthesis patterns, escaping them with `escapeParen`
|
1734 | * @param {string[]} parens - list of strings that denote parenthesis patterns
|
1735 | */
|
1736 |
|
1737 |
|
1738 | var createParenRegex = function createParenRegex(parens) {
|
1739 | return new RegExp('^(' + parens.map(escapeParen).join('|') + ')', 'iu');
|
1740 | };
|
1741 | /**
|
1742 | * Builds a RegExp for placeholder patterns
|
1743 | * @param {string[]} types - list of strings that denote placeholder types
|
1744 | * @param {string} pattern - string that denotes placeholder pattern
|
1745 | */
|
1746 |
|
1747 | var createPlaceholderRegex = function createPlaceholderRegex(types, pattern) {
|
1748 | if ((0,_utils__WEBPACK_IMPORTED_MODULE_0__.isEmpty)(types)) {
|
1749 | return undefined;
|
1750 | }
|
1751 |
|
1752 | var typesRegex = types.map(_utils__WEBPACK_IMPORTED_MODULE_0__.escapeRegExp).join('|');
|
1753 | return new RegExp("^((?:".concat(typesRegex, ")(?:").concat(pattern, "))"), 'u');
|
1754 | };
|
1755 |
|
1756 | /***/ }),
|
1757 |
|
1758 | /***/ "./src/core/tabularStyle.ts":
|
1759 | /*!**********************************!*\
|
1760 | !*** ./src/core/tabularStyle.ts ***!
|
1761 | \**********************************/
|
1762 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1763 |
|
1764 | __webpack_require__.r(__webpack_exports__);
|
1765 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1766 | /* harmony export */ "replaceTabularPlaceholders": () => (/* binding */ replaceTabularPlaceholders),
|
1767 | /* harmony export */ "toTabularToken": () => (/* binding */ toTabularToken)
|
1768 | /* harmony export */ });
|
1769 | /* harmony import */ var _token__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./token */ "./src/core/token.ts");
|
1770 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
1771 |
|
1772 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
1773 |
|
1774 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
1775 |
|
1776 | function _toArray(arr) { return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); }
|
1777 |
|
1778 | function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
1779 |
|
1780 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
1781 |
|
1782 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
1783 |
|
1784 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
1785 |
|
1786 | function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
1787 |
|
1788 |
|
1789 | /**
|
1790 | * When tabular style enabled,
|
1791 | * produces a 10-char wide version of reserved token.
|
1792 | *
|
1793 | * It'll be padded by zero-width space characters
|
1794 | * instead of normal spaces, so that these spaces will survive
|
1795 | * trimming of spaces in other parts of formatter.
|
1796 | * They'll be converted to normal spaces in the end of
|
1797 | * all the normal formatting with the replaceTabularPlaceholders()
|
1798 | */
|
1799 |
|
1800 | function toTabularToken(token, indentStyle) {
|
1801 | if (indentStyle === 'standard') {
|
1802 | return token;
|
1803 | }
|
1804 |
|
1805 | var bufferItem = token.value; // store which part of keyword receives 10-space buffer
|
1806 |
|
1807 | var tail = []; // rest of keyword
|
1808 |
|
1809 | if (bufferItem.length >= 10 && bufferItem.includes(' ')) {
|
1810 | // split for long keywords like INNER JOIN or UNION DISTINCT
|
1811 | var _bufferItem$split = bufferItem.split(' ');
|
1812 |
|
1813 | var _bufferItem$split2 = _toArray(_bufferItem$split);
|
1814 |
|
1815 | bufferItem = _bufferItem$split2[0];
|
1816 | tail = _bufferItem$split2.slice(1);
|
1817 | }
|
1818 |
|
1819 | if (indentStyle === 'tabularLeft') {
|
1820 | bufferItem = bufferItem.padEnd(9, _token__WEBPACK_IMPORTED_MODULE_0__.ZWS);
|
1821 | } else {
|
1822 | bufferItem = bufferItem.padStart(9, _token__WEBPACK_IMPORTED_MODULE_0__.ZWS);
|
1823 | }
|
1824 |
|
1825 | return Object.assign(Object.assign({}, token), {
|
1826 | value: bufferItem + [''].concat(_toConsumableArray(tail)).join(' ')
|
1827 | });
|
1828 | }
|
1829 | /**
|
1830 | * Replaces zero-width-spaces added by the above function
|
1831 | */
|
1832 |
|
1833 | function replaceTabularPlaceholders(query) {
|
1834 | return query.replace(new RegExp(_token__WEBPACK_IMPORTED_MODULE_0__.ZWS, 'ugim'), ' ');
|
1835 | }
|
1836 |
|
1837 | /***/ }),
|
1838 |
|
1839 | /***/ "./src/core/token.ts":
|
1840 | /*!***************************!*\
|
1841 | !*** ./src/core/token.ts ***!
|
1842 | \***************************/
|
1843 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1844 |
|
1845 | __webpack_require__.r(__webpack_exports__);
|
1846 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1847 | /* harmony export */ "EOF_TOKEN": () => (/* binding */ EOF_TOKEN),
|
1848 | /* harmony export */ "TokenType": () => (/* binding */ TokenType),
|
1849 | /* harmony export */ "ZWS": () => (/* binding */ ZWS),
|
1850 | /* harmony export */ "isCommand": () => (/* binding */ isCommand),
|
1851 | /* harmony export */ "isReserved": () => (/* binding */ isReserved),
|
1852 | /* harmony export */ "isToken": () => (/* binding */ isToken),
|
1853 | /* harmony export */ "testToken": () => (/* binding */ testToken)
|
1854 | /* harmony export */ });
|
1855 | /** Token type enum for all possible Token categories */
|
1856 | var TokenType;
|
1857 |
|
1858 | (function (TokenType) {
|
1859 | TokenType["WORD"] = "WORD";
|
1860 | TokenType["STRING"] = "STRING";
|
1861 | TokenType["RESERVED_KEYWORD"] = "RESERVED_KEYWORD";
|
1862 | TokenType["RESERVED_LOGICAL_OPERATOR"] = "RESERVED_LOGICAL_OPERATOR";
|
1863 | TokenType["RESERVED_DEPENDENT_CLAUSE"] = "RESERVED_DEPENDENT_CLAUSE";
|
1864 | TokenType["RESERVED_BINARY_COMMAND"] = "RESERVED_BINARY_COMMAND";
|
1865 | TokenType["RESERVED_COMMAND"] = "RESERVED_COMMAND";
|
1866 | TokenType["RESERVED_JOIN_CONDITION"] = "RESERVED_JOIN_CONDITION";
|
1867 | TokenType["OPERATOR"] = "OPERATOR";
|
1868 | TokenType["BLOCK_START"] = "BLOCK_START";
|
1869 | TokenType["BLOCK_END"] = "BLOCK_END";
|
1870 | TokenType["LINE_COMMENT"] = "LINE_COMMENT";
|
1871 | TokenType["BLOCK_COMMENT"] = "BLOCK_COMMENT";
|
1872 | TokenType["NUMBER"] = "NUMBER";
|
1873 | TokenType["PLACEHOLDER"] = "PLACEHOLDER";
|
1874 | TokenType["EOF"] = "EOF";
|
1875 | })(TokenType || (TokenType = {}));
|
1876 | /**
|
1877 | * For use as a "missing token"
|
1878 | * e.g. in lookAhead and lookBehind to avoid dealing with null values
|
1879 | */
|
1880 |
|
1881 |
|
1882 | var EOF_TOKEN = {
|
1883 | type: TokenType.EOF,
|
1884 | value: '«EOF»'
|
1885 | };
|
1886 | /** Special Unicode character to serve as a placeholder for tabular formats as \w whitespace is unavailable */
|
1887 |
|
1888 | var ZWS = ''; // uses zero-width space (​ / U+200B)
|
1889 |
|
1890 | var ZWS_REGEX = "\u200B";
|
1891 | var spaces = "[".concat(ZWS_REGEX, "\\s]");
|
1892 | /** Checks if two tokens are equivalent */
|
1893 |
|
1894 | var testToken = function testToken(compareToken) {
|
1895 | return function (token) {
|
1896 | return token.type === compareToken.type && new RegExp("^".concat(spaces, "*").concat(compareToken.value).concat(spaces, "*$"), 'iu').test(token.value);
|
1897 | };
|
1898 | };
|
1899 | /** Util object that allows for easy checking of Reserved Keywords */
|
1900 |
|
1901 | var isToken = {
|
1902 | AS: testToken({
|
1903 | value: 'AS',
|
1904 | type: TokenType.RESERVED_KEYWORD
|
1905 | }),
|
1906 | AND: testToken({
|
1907 | value: 'AND',
|
1908 | type: TokenType.RESERVED_LOGICAL_OPERATOR
|
1909 | }),
|
1910 | BETWEEN: testToken({
|
1911 | value: 'BETWEEN',
|
1912 | type: TokenType.RESERVED_KEYWORD
|
1913 | }),
|
1914 | CASE: testToken({
|
1915 | value: 'CASE',
|
1916 | type: TokenType.BLOCK_START
|
1917 | }),
|
1918 | CAST: testToken({
|
1919 | value: 'CAST',
|
1920 | type: TokenType.RESERVED_KEYWORD
|
1921 | }),
|
1922 | BY: testToken({
|
1923 | value: 'BY',
|
1924 | type: TokenType.RESERVED_KEYWORD
|
1925 | }),
|
1926 | END: testToken({
|
1927 | value: 'END',
|
1928 | type: TokenType.BLOCK_END
|
1929 | }),
|
1930 | FROM: testToken({
|
1931 | value: 'FROM',
|
1932 | type: TokenType.RESERVED_COMMAND
|
1933 | }),
|
1934 | LIMIT: testToken({
|
1935 | value: 'LIMIT',
|
1936 | type: TokenType.RESERVED_COMMAND
|
1937 | }),
|
1938 | SELECT: testToken({
|
1939 | value: 'SELECT',
|
1940 | type: TokenType.RESERVED_COMMAND
|
1941 | }),
|
1942 | SET: testToken({
|
1943 | value: 'SET',
|
1944 | type: TokenType.RESERVED_COMMAND
|
1945 | }),
|
1946 | TABLE: testToken({
|
1947 | value: 'TABLE',
|
1948 | type: TokenType.RESERVED_KEYWORD
|
1949 | }),
|
1950 | WINDOW: testToken({
|
1951 | value: 'WINDOW',
|
1952 | type: TokenType.RESERVED_COMMAND
|
1953 | }),
|
1954 | WITH: testToken({
|
1955 | value: 'WITH',
|
1956 | type: TokenType.RESERVED_COMMAND
|
1957 | })
|
1958 | };
|
1959 | /** Checks if token is a Reserved Command or Reserved Binary Command */
|
1960 |
|
1961 | var isCommand = function isCommand(token) {
|
1962 | return token.type === TokenType.RESERVED_COMMAND || token.type === TokenType.RESERVED_BINARY_COMMAND;
|
1963 | };
|
1964 | /** Checks if token is any Reserved Keyword or Command */
|
1965 |
|
1966 | var isReserved = function isReserved(token) {
|
1967 | return token.type === TokenType.RESERVED_KEYWORD || token.type === TokenType.RESERVED_LOGICAL_OPERATOR || token.type === TokenType.RESERVED_DEPENDENT_CLAUSE || token.type === TokenType.RESERVED_JOIN_CONDITION || token.type === TokenType.RESERVED_COMMAND || token.type === TokenType.RESERVED_BINARY_COMMAND;
|
1968 | };
|
1969 |
|
1970 | /***/ }),
|
1971 |
|
1972 | /***/ "./src/languages/bigquery.formatter.ts":
|
1973 | /*!*********************************************!*\
|
1974 | !*** ./src/languages/bigquery.formatter.ts ***!
|
1975 | \*********************************************/
|
1976 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
1977 |
|
1978 | __webpack_require__.r(__webpack_exports__);
|
1979 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
1980 | /* harmony export */ "default": () => (/* binding */ BigQueryFormatter)
|
1981 | /* harmony export */ });
|
1982 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
1983 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
1984 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
1985 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
1986 |
|
1987 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
1988 |
|
1989 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
1990 |
|
1991 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
1992 |
|
1993 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
1994 |
|
1995 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
1996 |
|
1997 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
1998 |
|
1999 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
2000 |
|
2001 | 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); } }
|
2002 |
|
2003 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
2004 |
|
2005 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
2006 |
|
2007 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
2008 |
|
2009 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
2010 |
|
2011 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
2012 |
|
2013 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
2014 |
|
2015 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
2016 |
|
2017 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
2018 |
|
2019 |
|
2020 |
|
2021 |
|
2022 | /**
|
2023 | * Priority 5 (last)
|
2024 | * Full list of reserved functions
|
2025 | * distinct from Keywords due to interaction with parentheses
|
2026 | */
|
2027 |
|
2028 | var reservedFunctions = {
|
2029 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/aead_encryption_functions
|
2030 | aead: ['KEYS.NEW_KEYSET', 'KEYS.ADD_KEY_FROM_RAW_BYTES', 'AEAD.DECRYPT_BYTES', 'AEAD.DECRYPT_STRING', 'AEAD.ENCRYPT', 'KEYS.KEYSET_CHAIN', 'KEYS.KEYSET_FROM_JSON', 'KEYS.KEYSET_TO_JSON', 'KEYS.ROTATE_KEYSET', 'KEYS.KEYSET_LENGTH'],
|
2031 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_analytic_functions
|
2032 | aggregateAnalytic: ['ANY_VALUE', 'ARRAY_AGG', 'AVG', 'CORR', 'COUNT', 'COUNTIF', 'COVAR_POP', 'COVAR_SAMP', 'MAX', 'MIN', 'ST_CLUSTERDBSCAN', 'STDDEV_POP', 'STDDEV_SAMP', 'STRING_AGG', 'SUM', 'VAR_POP', 'VAR_SAMP'],
|
2033 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/aggregate_functions
|
2034 | aggregate: ['ANY_VALUE', 'ARRAY_AGG', 'ARRAY_CONCAT_AGG', 'AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'COUNT', 'COUNTIF', 'LOGICAL_AND', 'LOGICAL_OR', 'MAX', 'MIN', 'STRING_AGG', 'SUM'],
|
2035 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/approximate_aggregate_functions
|
2036 | approximateAggregate: ['APPROX_COUNT_DISTINCT', 'APPROX_QUANTILES', 'APPROX_TOP_COUNT', 'APPROX_TOP_SUM'],
|
2037 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions
|
2038 | array: ['ARRAY', 'ARRAY_CONCAT', 'ARRAY_LENGTH', 'ARRAY_TO_STRING', 'GENERATE_ARRAY', 'GENERATE_DATE_ARRAY', 'GENERATE_TIMESTAMP_ARRAY', 'ARRAY_REVERSE', 'OFFSET', 'SAFE_OFFSET', 'ORDINAL', 'SAFE_ORDINAL'],
|
2039 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/bit_functions
|
2040 | bitwise: ['BIT_COUNT'],
|
2041 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions
|
2042 | conversion: ['CASE', 'PARSE_BIGNUMERIC', 'PARSE_NUMERIC', 'SAFE_CAST'],
|
2043 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions
|
2044 | date: ['CURRENT_DATE', 'EXTRACT', 'DATE', 'DATE_ADD', 'DATE_SUB', 'DATE_DIFF', 'DATE_TRUNC', 'DATE_FROM_UNIX_DATE', 'FORMAT_DATE', 'LAST_DAY', 'PARSE_DATE', 'UNIX_DATE'],
|
2045 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/datetime_functions
|
2046 | datetime: ['CURRENT_DATETIME', 'DATETIME', 'EXTRACT', 'DATETIME_ADD', 'DATETIME_SUB', 'DATETIME_DIFF', 'DATETIME_TRUNC', 'FORMAT_DATETIME', 'LAST_DAY', 'PARSE_DATETIME'],
|
2047 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging_functions
|
2048 | debugging: ['ERROR'],
|
2049 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/federated_query_functions
|
2050 | federatedQuery: ['EXTERNAL_QUERY'],
|
2051 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/geography_functions
|
2052 | geography: ['S2_CELLIDFROMPOINT', 'S2_COVERINGCELLIDS', 'ST_ANGLE', 'ST_AREA', 'ST_ASBINARY', 'ST_ASGEOJSON', 'ST_ASTEXT', 'ST_AZIMUTH', 'ST_BOUNDARY', 'ST_BOUNDINGBOX', 'ST_BUFFER', 'ST_BUFFERWITHTOLERANCE', 'ST_CENTROID', 'ST_CENTROID_AGG', 'ST_CLOSESTPOINT', 'ST_CLUSTERDBSCAN', 'ST_CONTAINS', 'ST_CONVEXHULL', 'ST_COVEREDBY', 'ST_COVERS', 'ST_DIFFERENCE', 'ST_DIMENSION', 'ST_DISJOINT', 'ST_DISTANCE', 'ST_DUMP', 'ST_DWITHIN', 'ST_ENDPOINT', 'ST_EQUALS', 'ST_EXTENT', 'ST_EXTERIORRING', 'ST_GEOGFROM', 'ST_GEOGFROMGEOJSON', 'ST_GEOGFROMTEXT', 'ST_GEOGFROMWKB', 'ST_GEOGPOINT', 'ST_GEOGPOINTFROMGEOHASH', 'ST_GEOHASH', 'ST_GEOMETRYTYPE', 'ST_INTERIORRINGS', 'ST_INTERSECTION', 'ST_INTERSECTS', 'ST_INTERSECTSBOX', 'ST_ISCOLLECTION', 'ST_ISEMPTY', 'ST_LENGTH', 'ST_MAKELINE', 'ST_MAKEPOLYGON', 'ST_MAKEPOLYGONORIENTED', 'ST_MAXDISTANCE', 'ST_NPOINTS', 'ST_NUMGEOMETRIES', 'ST_NUMPOINTS', 'ST_PERIMETER', 'ST_POINTN', 'ST_SIMPLIFY', 'ST_SNAPTOGRID', 'ST_STARTPOINT', 'ST_TOUCHES', 'ST_UNION', 'ST_UNION_AGG', 'ST_WITHIN', 'ST_X', 'ST_Y'],
|
2053 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/hash_functions
|
2054 | hash: ['FARM_FINGERPRINT', 'MD5', 'SHA1', 'SHA256', 'SHA512'],
|
2055 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/hll_functions
|
2056 | hll: ['HLL_COUNT.INIT', 'HLL_COUNT.MERGE', 'HLL_COUNT.MERGE_PARTIAL', 'HLL_COUNT.EXTRACT'],
|
2057 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/interval_functions
|
2058 | interval: ['MAKE_INTERVAL', 'EXTRACT', 'JUSTIFY_DAYS', 'JUSTIFY_HOURS', 'JUSTIFY_INTERVAL'],
|
2059 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/json_functions
|
2060 | json: ['JSON_EXTRACT', 'JSON_QUERY', 'JSON_EXTRACT_SCALAR', 'JSON_VALUE', 'JSON_EXTRACT_ARRAY', 'JSON_QUERY_ARRAY', 'JSON_EXTRACT_STRING_ARRAY', 'JSON_VALUE_ARRAY', 'TO_JSON_STRING'],
|
2061 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/mathematical_functions
|
2062 | math: ['ABS', 'SIGN', 'IS_INF', 'IS_NAN', 'IEEE_DIVIDE', 'RAND', 'SQRT', 'POW', 'POWER', 'EXP', 'LN', 'LOG', 'LOG10', 'GREATEST', 'LEAST', 'DIV', 'SAFE_DIVIDE', 'SAFE_MULTIPLY', 'SAFE_NEGATE', 'SAFE_ADD', 'SAFE_SUBTRACT', 'MOD', 'ROUND', 'TRUNC', 'CEIL', 'CEILING', 'FLOOR', 'COS', 'COSH', 'ACOS', 'ACOSH', 'SIN', 'SINH', 'ASIN', 'ASINH', 'TAN', 'TANH', 'ATAN', 'ATANH', 'ATAN2', 'RANGE_BUCKET'],
|
2063 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions
|
2064 | navigation: ['FIRST_VALUE', 'LAST_VALUE', 'NTH_VALUE', 'LEAD', 'LAG', 'PERCENTILE_CONT', 'PERCENTILE_DISC'],
|
2065 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/net_functions
|
2066 | net: ['NET.IP_FROM_STRING', 'NET.SAFE_IP_FROM_STRING', 'NET.IP_TO_STRING', 'NET.IP_NET_MASK', 'NET.IP_TRUNC', 'NET.IPV4_FROM_INT64', 'NET.IPV4_TO_INT64', 'NET.HOST', 'NET.PUBLIC_SUFFIX', 'NET.REG_DOMAIN'],
|
2067 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/numbering_functions
|
2068 | numbering: ['RANK', 'DENSE_RANK', 'PERCENT_RANK', 'CUME_DIST', 'NTILE', 'ROW_NUMBER'],
|
2069 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/security_functions
|
2070 | security: ['SESSION_USER'],
|
2071 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/statistical_aggregate_functions
|
2072 | statisticalAggregate: ['CORR', 'COVAR_POP', 'COVAR_SAMP', 'STDDEV_POP', 'STDDEV_SAMP', 'STDDEV', 'VAR_POP', 'VAR_SAMP', 'VARIANCE'],
|
2073 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions
|
2074 | string: ['ASCII', 'BYTE_LENGTH', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHR', 'CODE_POINTS_TO_BYTES', 'CODE_POINTS_TO_STRING', 'CONCAT', 'CONTAINS_SUBSTR', 'ENDS_WITH', 'FORMAT', 'FROM_BASE32', 'FROM_BASE64', 'FROM_HEX', 'INITCAP', 'INSTR', 'LEFT', 'LENGTH', 'LPAD', 'LOWER', 'LTRIM', 'NORMALIZE', 'NORMALIZE_AND_CASEFOLD', 'OCTET_LENGTH', 'REGEXP_CONTAINS', 'REGEXP_EXTRACT', 'REGEXP_EXTRACT_ALL', 'REGEXP_INSTR', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'REPLACE', 'REPEAT', 'REVERSE', 'RIGHT', 'RPAD', 'RTRIM', 'SAFE_CONVERT_BYTES_TO_STRING', 'SOUNDEX', 'SPLIT', 'STARTS_WITH', 'STRPOS', 'SUBSTR', 'SUBSTRING', 'TO_BASE32', 'TO_BASE64', 'TO_CODE_POINTS', 'TO_HEX', 'TRANSLATE', 'TRIM', 'UNICODE', 'UPPER'],
|
2075 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/time_functions
|
2076 | time: ['CURRENT_TIME', 'TIME', 'EXTRACT', 'TIME_ADD', 'TIME_SUB', 'TIME_DIFF', 'TIME_TRUNC', 'FORMAT_TIME', 'PARSE_TIME'],
|
2077 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions
|
2078 | timestamp: ['CURRENT_TIMESTAMP', 'EXTRACT', 'STRING', 'TIMESTAMP', 'TIMESTAMP_ADD', 'TIMESTAMP_SUB', 'TIMESTAMP_DIFF', 'TIMESTAMP_TRUNC', 'FORMAT_TIMESTAMP', 'PARSE_TIMESTAMP', 'TIMESTAMP_SECONDS', 'TIMESTAMP_MILLIS', 'TIMESTAMP_MICROS', 'UNIX_SECONDS', 'UNIX_MILLIS', 'UNIX_MICROS'],
|
2079 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/uuid_functions
|
2080 | uuid: ['GENERATE_UUID'],
|
2081 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions
|
2082 | conditional: ['COALESCE', 'IF', 'IFNULL', 'NULLIF'],
|
2083 | // https://cloud.google.com/bigquery/docs/reference/legacy-sql
|
2084 | legacyAggregate: ['AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'CORR', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'EXACT_COUNT_DISTINCT', 'FIRST', 'GROUP_CONCAT', 'GROUP_CONCAT_UNQUOTED', 'LAST', 'MAX', 'MIN', 'NEST', 'NTH', 'QUANTILES', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'SUM', 'TOP', 'UNIQUE', 'VARIANCE', 'VAR_POP', 'VAR_SAMP'],
|
2085 | legacyBitwise: ['BIT_COUNT'],
|
2086 | legacyCasting: ['BOOLEAN', 'BYTES', 'CAST', 'FLOAT', 'HEX_STRING', 'INTEGER', 'STRING'],
|
2087 | legacyComparison: [// expr 'IN',
|
2088 | 'COALESCE', 'GREATEST', 'IFNULL', 'IS_INF', 'IS_NAN', 'IS_EXPLICITLY_DEFINED', 'LEAST', 'NVL'],
|
2089 | legacyDatetime: ['CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATE', 'DATE_ADD', 'DATEDIFF', 'DAY', 'DAYOFWEEK', 'DAYOFYEAR', 'FORMAT_UTC_USEC', 'HOUR', 'MINUTE', 'MONTH', 'MSEC_TO_TIMESTAMP', 'NOW', 'PARSE_UTC_USEC', 'QUARTER', 'SEC_TO_TIMESTAMP', 'SECOND', 'STRFTIME_UTC_USEC', 'TIME', 'TIMESTAMP', 'TIMESTAMP_TO_MSEC', 'TIMESTAMP_TO_SEC', 'TIMESTAMP_TO_USEC', 'USEC_TO_TIMESTAMP', 'UTC_USEC_TO_DAY', 'UTC_USEC_TO_HOUR', 'UTC_USEC_TO_MONTH', 'UTC_USEC_TO_WEEK', 'UTC_USEC_TO_YEAR', 'WEEK', 'YEAR'],
|
2090 | legacyIp: ['FORMAT_IP', 'PARSE_IP', 'FORMAT_PACKED_IP', 'PARSE_PACKED_IP'],
|
2091 | legacyJson: ['JSON_EXTRACT', 'JSON_EXTRACT_SCALAR'],
|
2092 | legacyMath: ['ABS', 'ACOS', 'ACOSH', 'ASIN', 'ASINH', 'ATAN', 'ATANH', 'ATAN2', 'CEIL', 'COS', 'COSH', 'DEGREES', 'EXP', 'FLOOR', 'LN', 'LOG', 'LOG2', 'LOG10', 'PI', 'POW', 'RADIANS', 'RAND', 'ROUND', 'SIN', 'SINH', 'SQRT', 'TAN', 'TANH'],
|
2093 | legacyRegex: ['REGEXP_MATCH', 'REGEXP_EXTRACT', 'REGEXP_REPLACE'],
|
2094 | legacyString: ['CONCAT', // expr CONTAINS 'str'
|
2095 | 'INSTR', 'LEFT', 'LENGTH', 'LOWER', 'LPAD', 'LTRIM', 'REPLACE', 'RIGHT', 'RPAD', 'RTRIM', 'SPLIT', 'SUBSTR', 'UPPER'],
|
2096 | legacyTableWildcard: ['TABLE_DATE_RANGE', 'TABLE_DATE_RANGE_STRICT', 'TABLE_QUERY'],
|
2097 | legacyUrl: ['HOST', 'DOMAIN', 'TLD'],
|
2098 | legacyWindow: ['AVG', 'COUNT', 'MAX', 'MIN', 'STDDEV', 'SUM', 'CUME_DIST', 'DENSE_RANK', 'FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'RANK', 'RATIO_TO_REPORT', 'ROW_NUMBER'],
|
2099 | legacyMisc: ['CURRENT_USER', 'EVERY', 'FROM_BASE64', 'HASH', 'FARM_FINGERPRINT', 'IF', 'POSITION', 'SHA1', 'SOME', 'TO_BASE64'],
|
2100 | other: ['BQ.JOBS.CANCEL', 'BQ.REFRESH_MATERIALIZED_VIEW']
|
2101 | };
|
2102 | /**
|
2103 | * Priority 5 (last)
|
2104 | * Full list of reserved words
|
2105 | * any words that are in a higher priority are removed
|
2106 | */
|
2107 |
|
2108 | var reservedKeywords = {
|
2109 | keywords: ['ALL', // 'AND',
|
2110 | 'ANY', // 'ARRAY',
|
2111 | 'AS', 'ASC', 'ASSERT_ROWS_MODIFIED', 'AT', 'BETWEEN', 'BY', // 'CASE',
|
2112 | 'CAST', 'COLLATE', 'CONTAINS', // 'CREATE',
|
2113 | // 'CROSS',
|
2114 | 'CUBE', 'CURRENT', 'DEFAULT', 'DEFINE', 'DESC', 'DISTINCT', // 'ELSE',
|
2115 | // 'END',
|
2116 | 'ENUM', 'ESCAPE', // 'EXCEPT',
|
2117 | // 'EXCLUDE',
|
2118 | 'EXISTS', 'EXTRACT', 'FALSE', // 'FETCH',
|
2119 | 'FOLLOWING', 'FOR', // 'FROM',
|
2120 | 'FULL', // 'GROUP',
|
2121 | 'GROUPING', 'GROUPS', 'HASH', // 'HAVING',
|
2122 | 'IF', 'IGNORE', 'IN', // 'INNER',
|
2123 | // 'INTERSECT',
|
2124 | // 'INTERVAL',
|
2125 | 'INTO', 'IS', // 'JOIN',
|
2126 | // 'LATERAL',
|
2127 | // 'LEFT',
|
2128 | 'LIKE', // 'LIMIT',
|
2129 | 'LOOKUP', // 'MERGE',
|
2130 | // 'NATURAL',
|
2131 | 'NEW', 'NO', 'NOT', 'NULL', 'NULLS', 'OF', // 'ON',
|
2132 | // 'OR',
|
2133 | // 'ORDER',
|
2134 | // 'OUTER',
|
2135 | 'OVER', 'PARTITION', 'PRECEDING', 'PROTO', 'RANGE', 'RECURSIVE', 'RESPECT', // 'RIGHT',
|
2136 | 'ROLLUP', 'ROWS', // 'SELECT',
|
2137 | // 'SET',
|
2138 | 'SOME', // 'STRUCT',
|
2139 | 'TABLE', // 'TABLESAMPLE',
|
2140 | 'THEN', 'TO', 'TREAT', 'TRUE', 'UNBOUNDED', // 'UNION',
|
2141 | // 'UNNEST',
|
2142 | // 'USING',
|
2143 | // 'WHEN',
|
2144 | // 'WHERE',
|
2145 | // 'WINDOW',
|
2146 | // 'WITH',
|
2147 | 'WITHIN'],
|
2148 | datatypes: ['ARRAY', 'BOOL', 'BYTES', 'DATE', 'DATETIME', 'GEOGRAPHY', 'INTERVAL', 'INT64', 'INT', 'SMALLINT', 'INTEGER', 'BIGINT', 'TINYINT', 'BYTEINT', 'NUMERIC', 'DECIMAL', 'BIGNUMERIC', 'BIGDECIMAL', 'FLOAT64', 'STRING', 'STRUCT', 'TIME', 'TIMEZONE'],
|
2149 | // https://cloud.google.com/bigquery/docs/reference/standard-sql/conversion_functions#formatting_syntax
|
2150 | stringFormat: ['HEX', 'BASEX', 'BASE64M', 'ASCII', 'UTF-8', 'UTF8'],
|
2151 | misc: ['SAFE']
|
2152 | };
|
2153 | /**
|
2154 | * Priority 1 (first)
|
2155 | * keywords that begin a new statement
|
2156 | * will begin new indented block
|
2157 | */
|
2158 |
|
2159 | var reservedCommands = [// DQL, https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax
|
2160 | 'SELECT', 'FROM', 'UNNEST', 'PIVOT', 'UNPIVOT', 'TABLESAMPLE SYSTEM', 'WHERE', 'GROUP BY', 'HAVING', 'ORDER BY', 'QUALIFY', 'WINDOW', 'LIMIT', 'OFFSET', 'WITH', 'OMIT RECORD IF', // DML, https://cloud.google.com/bigquery/docs/reference/standard-sql/dml-syntax
|
2161 | 'INSERT', 'INSERT INTO', 'VALUES', 'DELETE', // 'DELETE FROM',
|
2162 | 'TRUNCATE TABLE', 'UPDATE', 'MERGE', 'MERGE INTO', // 'USING',
|
2163 | // DDL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-definition-language
|
2164 | 'SET SCHEMA', 'CREATE SCHEMA', 'CREATE TABLE', 'CREATE TABLE LIKE', 'CREATE TABLE COPY', 'CREATE SNAPSHOT TABLE', 'CREATE TABLE CLONE', 'CREATE VIEW', 'CREATE MATERIALIZED VIEW', 'CREATE EXTERNAL TABLE', 'CREATE FUNCTION', 'CREATE TABLE FUNCTION', 'CREATE PROCEDURE', 'CREATE ROW ACCESS POLICY', 'ALTER SCHEMA SET OPTIONS', 'ALTER TABLE SET OPTIONS', 'ALTER TABLE ADD COLUMN', 'ALTER TABLE RENAME TO', 'ALTER TABLE DROP COLUMN', 'ALTER COLUMN SET OPTIONS', 'ALTER COLUMN DROP NOT NULL', 'ALTER COLUMN SET DATA TYPE', 'ALTER VIEW SET OPTIONS', 'ALTER MATERIALIZED VIEW SET OPTIONS', 'DROP SCHEMA', 'DROP TABLE', 'DROP SNAPSHOT TABLE', 'DROP EXTERNAL TABLE', 'DROP VIEW', 'DROP MATERIALIZED VIEW', 'DROP FUNCTION', 'DROP TABLE FUNCTION', 'DROP PROCEDURE', 'DROP ROW ACCESS POLICY', // DCL, https://cloud.google.com/bigquery/docs/reference/standard-sql/data-control-language
|
2165 | 'GRANT', 'REVOKE', 'CREATE CAPACITY', 'CREATE RESERVATION', 'CREATE ASSIGNMENT', 'DROP CAPACITY', 'DROP RESERVATION', 'DROP ASSIGNMENT', // Script, https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting
|
2166 | 'DECLARE', 'SET', 'EXECUTE IMMEDIATE', 'LOOP', 'END LOOP', 'REPEAT', 'END REPEAT', 'WHILE', 'END WHILE', 'BREAK', 'LEAVE', 'CONTINUE', 'ITERATE', 'FOR', 'END FOR', 'BEGIN', 'BEGIN TRANSACTION', 'COMMIT TRANSACTION', 'ROLLBACK TRANSACTION', 'RAISE', 'RETURN', 'CALL', // Debug, https://cloud.google.com/bigquery/docs/reference/standard-sql/debugging-statements
|
2167 | 'ASSERT', // Other, https://cloud.google.com/bigquery/docs/reference/standard-sql/other-statements
|
2168 | 'EXPORT DATA'];
|
2169 | /**
|
2170 | * Priority 2
|
2171 | * commands that operate on two tables or subqueries
|
2172 | * two main categories: joins and boolean set operators
|
2173 | */
|
2174 |
|
2175 | var reservedBinaryCommands = [// set booleans
|
2176 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
|
2177 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN'];
|
2178 | /**
|
2179 | * Priority 3
|
2180 | * keywords that follow a previous Statement, must be attached to subsequent data
|
2181 | * can be fully inline or on newline with optional indent
|
2182 | */
|
2183 |
|
2184 | var reservedDependentClauses = ['WHEN', 'ELSE']; // https://cloud.google.com/bigquery/docs/reference/#standard-sql-reference
|
2185 |
|
2186 | var BigQueryFormatter = /*#__PURE__*/function (_Formatter) {
|
2187 | _inherits(BigQueryFormatter, _Formatter);
|
2188 |
|
2189 | var _super = _createSuper(BigQueryFormatter);
|
2190 |
|
2191 | function BigQueryFormatter() {
|
2192 | _classCallCheck(this, BigQueryFormatter);
|
2193 |
|
2194 | return _super.apply(this, arguments);
|
2195 | }
|
2196 |
|
2197 | _createClass(BigQueryFormatter, [{
|
2198 | key: "tokenizer",
|
2199 | value: // TODO: handle trailing comma in select clause
|
2200 | function tokenizer() {
|
2201 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
2202 | reservedCommands: BigQueryFormatter.reservedCommands,
|
2203 | reservedBinaryCommands: BigQueryFormatter.reservedBinaryCommands,
|
2204 | reservedDependentClauses: BigQueryFormatter.reservedDependentClauses,
|
2205 | reservedJoinConditions: BigQueryFormatter.reservedJoinConditions,
|
2206 | reservedLogicalOperators: BigQueryFormatter.reservedLogicalOperators,
|
2207 | reservedKeywords: BigQueryFormatter.fullReservedWords,
|
2208 | stringTypes: BigQueryFormatter.stringTypes,
|
2209 | blockStart: BigQueryFormatter.blockStart,
|
2210 | blockEnd: BigQueryFormatter.blockEnd,
|
2211 | indexedPlaceholderTypes: BigQueryFormatter.indexedPlaceholderTypes,
|
2212 | namedPlaceholderTypes: BigQueryFormatter.namedPlaceholderTypes,
|
2213 | lineCommentTypes: BigQueryFormatter.lineCommentTypes,
|
2214 | specialWordChars: BigQueryFormatter.specialWordChars,
|
2215 | operators: BigQueryFormatter.operators
|
2216 | });
|
2217 | }
|
2218 | }, {
|
2219 | key: "tokenOverride",
|
2220 | value: function tokenOverride(token) {
|
2221 | if ((/ARRAY/i.test(token.value) || /STRUCT/i.test(token.value)) && this.tokenLookAhead().value === '<') {
|
2222 | var level = 0;
|
2223 | var finalToken = token.value;
|
2224 |
|
2225 | do {
|
2226 | var nextToken = this.tokenLookAhead();
|
2227 |
|
2228 | if (nextToken.value === '>' || nextToken.value === '>>') {
|
2229 | level -= nextToken.value.length;
|
2230 | } else if (nextToken.value === '<') {
|
2231 | level++;
|
2232 | }
|
2233 |
|
2234 | finalToken += this.tokens.splice(this.index + 1, 1)[0].value;
|
2235 | } while (level > 0);
|
2236 |
|
2237 | return Object.assign(Object.assign({}, token), {
|
2238 | value: finalToken
|
2239 | });
|
2240 | }
|
2241 |
|
2242 | return token;
|
2243 | }
|
2244 | }]);
|
2245 |
|
2246 | return BigQueryFormatter;
|
2247 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
2248 |
|
2249 |
|
2250 | BigQueryFormatter.reservedCommands = reservedCommands;
|
2251 | BigQueryFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
2252 | BigQueryFormatter.reservedDependentClauses = reservedDependentClauses;
|
2253 | BigQueryFormatter.reservedJoinConditions = ['ON', 'USING'];
|
2254 | BigQueryFormatter.reservedLogicalOperators = ['AND', 'OR'];
|
2255 | BigQueryFormatter.fullReservedWords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
|
2256 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
2257 | }, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
|
2258 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
2259 | }, []))));
|
2260 | BigQueryFormatter.stringTypes = ['""', "''", '``']; // add: '''''', """""" ; prefixes: r, b
|
2261 |
|
2262 | BigQueryFormatter.blockStart = ['(', 'CASE'];
|
2263 | BigQueryFormatter.blockEnd = [')', 'END'];
|
2264 | BigQueryFormatter.indexedPlaceholderTypes = ['?'];
|
2265 | BigQueryFormatter.namedPlaceholderTypes = [];
|
2266 | BigQueryFormatter.lineCommentTypes = ['--', '#'];
|
2267 | BigQueryFormatter.specialWordChars = {
|
2268 | any: '_@$-'
|
2269 | };
|
2270 | BigQueryFormatter.operators = ['>>', '<<', '||'];
|
2271 |
|
2272 | /***/ }),
|
2273 |
|
2274 | /***/ "./src/languages/db2.formatter.ts":
|
2275 | /*!****************************************!*\
|
2276 | !*** ./src/languages/db2.formatter.ts ***!
|
2277 | \****************************************/
|
2278 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
2279 |
|
2280 | __webpack_require__.r(__webpack_exports__);
|
2281 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
2282 | /* harmony export */ "default": () => (/* binding */ Db2Formatter)
|
2283 | /* harmony export */ });
|
2284 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
2285 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
2286 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
2287 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
2288 |
|
2289 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
2290 |
|
2291 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
2292 |
|
2293 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
2294 |
|
2295 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
2296 |
|
2297 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
2298 |
|
2299 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
2300 |
|
2301 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
2302 |
|
2303 | 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); } }
|
2304 |
|
2305 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
2306 |
|
2307 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
2308 |
|
2309 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
2310 |
|
2311 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
2312 |
|
2313 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
2314 |
|
2315 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
2316 |
|
2317 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
2318 |
|
2319 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
2320 |
|
2321 |
|
2322 |
|
2323 |
|
2324 | /**
|
2325 | * Priority 5 (last)
|
2326 | * Full list of reserved functions
|
2327 | * distinct from Keywords due to interaction with parentheses
|
2328 | */
|
2329 |
|
2330 | var reservedFunctions = {
|
2331 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-aggregate
|
2332 | aggregate: ['ARRAY_AGG', 'AVG', 'CORR', 'CORRELATION', 'COUNT', 'COUNT_BIG', 'COVAR_POP', 'COVARIANCE', 'COVAR', 'COVAR_SAMP', 'COVARIANCE_SAMP', 'CUME_DIST', 'GROUPING', 'LISTAGG', 'MAX', 'MEDIAN', 'MIN', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_ICPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'STDDEV_POP', 'STDDEV', 'STDDEV_SAMP', 'SUM', 'VAR_POP', 'VARIANCE', 'VAR', 'VAR_SAMP', 'VARIANCE_SAMP', 'XMLAGG'],
|
2333 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-scalar
|
2334 | scalar: ['ABS', 'ABSVAL', 'ACOS', 'ADD_DAYS', 'ADD_MONTHS', 'ARRAY_DELETE', 'ARRAY_FIRST', 'ARRAY_LAST', 'ARRAY_NEXT', 'ARRAY_PRIOR', 'ARRAY_TRIM', 'ASCII', 'ASCII_CHR', 'ASCII_STR', 'ASCIISTR', 'ASIN', 'ATAN', 'ATANH', 'ATAN2', 'BIGINT', 'BINARY', 'BITAND', 'BITANDNOT', 'BITOR', 'BITXOR', 'BITNOT', 'BLOB', 'BTRIM', 'CARDINALITY', 'CCSID_ENCODING', 'CEILING', 'CEIL', 'CHAR', 'CHAR9', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHR', 'CLOB', 'COALESCE', 'COLLATION_KEY', 'COMPARE_DECFLOAT', 'CONCAT', 'CONTAINS', 'COS', 'COSH', 'DATE', 'DAY', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFWEEK_ISO', 'DAYOFYEAR', 'DAYS', 'DAYS_BETWEEN', 'DBCLOB', 'DECFLOAT', 'DECFLOAT_FORMAT', 'DECFLOAT_SORTKEY', 'DECIMAL', 'DEC', 'DECODE', 'DECRYPT_BINARY', 'DECRYPT_BIT', 'DECRYPT_CHAR', 'DECRYPT_DB', 'DECRYPT_DATAKEY_BIGINT', 'DECRYPT_DATAKEY_BIT', 'DECRYPT_DATAKEY_CLOB', 'DECRYPT_DATAKEY_DBCLOB', 'DECRYPT_DATAKEY_DECIMAL', 'DECRYPT_DATAKEY_INTEGER', 'DECRYPT_DATAKEY_VARCHAR', 'DECRYPT_DATAKEY_VARGRAPHIC', 'DEGREES', 'DIFFERENCE', 'DIGITS', 'DOUBLE_PRECISION', 'DOUBLE', 'DSN_XMLVALIDATE', 'EBCDIC_CHR', 'EBCDIC_STR', 'ENCRYPT_DATAKEY', 'ENCRYPT_TDES', 'EXP', 'EXTRACT', 'FLOAT', 'FLOOR', 'GENERATE_UNIQUE', 'GENERATE_UNIQUE_BINARY', 'GETHINT', 'GETVARIABLE', 'GRAPHIC', 'GREATEST', 'HASH', 'HASH_CRC32', 'HASH_MD5', 'HASH_SHA1', 'HASH_SHA256', 'HEX', 'HOUR', 'IDENTITY_VAL_LOCAL', 'IFNULL', 'INSERT', 'INSTR', 'INTEGER', 'INT', 'JULIAN_DAY', 'LAST_DAY', 'LCASE', 'LEAST', 'LEFT', 'LENGTH', 'LN', 'LOCATE', 'LOCATE_IN_STRING', 'LOG10', 'LOWER', 'LPAD', 'LTRIM', 'MAX', 'MAX_CARDINALITY', 'MICROSECOND', 'MIDNIGHT_SECONDS', 'MIN', 'MINUTE', 'MOD', 'MONTH', 'MONTHS_BETWEEN', 'MQREAD', 'MQREADCLOB', 'MQRECEIVE', 'MQRECEIVECLOB', 'MQSEND', 'MULTIPLY_ALT', 'NEXT_DAY', 'NEXT_MONTH', 'NORMALIZE_DECFLOAT', 'NORMALIZE_STRING', 'NULLIF', 'NVL', 'OVERLAY', 'PACK', 'POSITION', 'POSSTR', 'POWER', 'POW', 'QUANTIZE', 'QUARTER', 'RADIANS', 'RAISE_ERROR', 'RANDOM', 'RAND', 'REAL', 'REGEXP_COUNT', 'REGEXP_INSTR', 'REGEXP_LIKE', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'REPEAT', 'REPLACE', 'RID', 'RIGHT', 'ROUND', 'ROUND_TIMESTAMP', 'ROWID', 'RPAD', 'RTRIM', 'SCORE', 'SECOND', 'SIGN', 'SIN', 'SINH', 'SMALLINT', 'SOUNDEX', 'SOAPHTTPC', 'SOAPHTTPV', 'SOAPHTTPNC', 'SOAPHTTPNV', 'SPACE', 'SQRT', 'STRIP', 'STRLEFT', 'STRPOS', 'STRRIGHT', 'SUBSTR', 'SUBSTRING', 'TAN', 'TANH', 'TIME', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TIMESTAMP_FORMAT', 'TIMESTAMP_ISO', 'TIMESTAMP_TZ', 'TO_CHAR', 'TO_CLOB', 'TO_DATE', 'TO_NUMBER', 'TOTALORDER', 'TO_TIMESTAMP', 'TRANSLATE', 'TRIM', 'TRIM_ARRAY', 'TRUNCATE', 'TRUNC', 'TRUNC_TIMESTAMP', 'UCASE', 'UNICODE', 'UNICODE_STR', 'UNISTR', 'UPPER', 'VALUE', 'VARBINARY', 'VARCHAR', 'VARCHAR9', 'VARCHAR_BIT_FORMAT', 'VARCHAR_FORMAT', 'VARGRAPHIC', 'VERIFY_GROUP_FOR_USER', 'VERIFY_ROLE_FOR_USER', 'VERIFY_TRUSTED_CONTEXT_ROLE_FOR_USER', 'WEEK', 'WEEK_ISO', 'WRAP', 'XMLATTRIBUTES', 'XMLCOMMENT', 'XMLCONCAT', 'XMLDOCUMENT', 'XMLELEMENT', 'XMLFOREST', 'XMLMODIFY', 'XMLNAMESPACES', 'XMLPARSE', 'XMLPI', 'XMLQUERY', 'XMLSERIALIZE', 'XMLTEXT', 'XMLXSROBJECTID', 'XSLTRANSFORM', 'YEAR'],
|
2335 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-table
|
2336 | table: ['ADMIN_TASK_LIST', 'ADMIN_TASK_OUTPUT', 'ADMIN_TASK_STATUS', 'BLOCKING_THREADS', 'MQREADALL', 'MQREADALLCLOB', 'MQRECEIVEALL', 'MQRECEIVEALLCLOB', 'XMLTABLE'],
|
2337 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=functions-row
|
2338 | row: ['UNPACK'],
|
2339 | // https://www.ibm.com/docs/en/db2-for-zos/12?topic=expressions-olap-specification
|
2340 | olap: ['FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTH_VALUE', 'NTILE', 'RATIO_TO_REPORT']
|
2341 | };
|
2342 | /**
|
2343 | * Priority 5 (last)
|
2344 | * Full list of reserved words
|
2345 | * any words that are in a higher priority are removed
|
2346 | */
|
2347 |
|
2348 | var reservedKeywords = {
|
2349 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=words-reserved#db2z_reservedwords__newresword
|
2350 | standard: ['ALL', 'ALLOCATE', 'ALLOW', 'ALTERAND', 'ANY', 'AS', 'ARRAY', 'ARRAY_EXISTS', 'ASENSITIVE', 'ASSOCIATE', 'ASUTIME', 'AT', 'AUDIT', 'AUX', 'AUXILIARY', 'BEFORE', 'BEGIN', 'BETWEEN', 'BUFFERPOOL', 'BY', 'CAPTURE', 'CASCADED', 'CASE', 'CAST', 'CCSID', 'CHARACTER', 'CHECK', 'CLONE', 'CLUSTER', 'COLLECTION', 'COLLID', 'COLUMN', 'CONDITION', 'CONNECTION', 'CONSTRAINT', 'CONTENT', 'CONTINUE', 'CREATE', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_LC_CTYPE', 'CURRENT_PATH', 'CURRENT_SCHEMA', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRVAL', 'CURSOR', 'DATA', 'DATABASE', 'DBINFO', 'DECLARE', 'DEFAULT', 'DESCRIPTOR', 'DETERMINISTIC', 'DISABLE', 'DISALLOW', 'DISTINCT', 'DO', 'DOCUMENT', 'DSSIZE', 'DYNAMIC', 'EDITPROC', 'ENCODING', 'ENCRYPTION', 'ENDING', 'END-EXEC', 'ERASE', 'ESCAPE', 'EXCEPTION', 'EXISTS', 'EXIT', 'EXTERNAL', 'FENCED', 'FIELDPROC', 'FINAL', 'FIRST', 'FOR', 'FREE', 'FULL', 'FUNCTION', 'GENERATED', 'GET', 'GLOBAL', 'GOTO', 'GROUP', 'HANDLER', 'HOLD', 'HOURS', 'IF', 'IMMEDIATE', 'IN', 'INCLUSIVE', 'INDEX', 'INHERIT', 'INNER', 'INOUT', 'INSENSITIVE', 'INTO', 'IS', 'ISOBID', 'ITERATE', 'JAR', 'KEEP', 'KEY', 'LANGUAGE', 'LAST', 'LC_CTYPE', 'LEAVE', 'LIKE', 'LOCAL', 'LOCALE', 'LOCATOR', 'LOCATORS', 'LOCK', 'LOCKMAX', 'LOCKSIZE', 'LONG', 'LOOP', 'MAINTAINED', 'MATERIALIZED', 'MICROSECONDS', 'MINUTEMINUTES', 'MODIFIES', 'MONTHS', 'NEXT', 'NEXTVAL', 'NO', 'NONE', 'NOT', 'NULL', 'NULLS', 'NUMPARTS', 'OBID', 'OF', 'OLD', 'ON DELETE', 'ON UPDATE', 'OPTIMIZATION', 'OPTIMIZE', 'ORDER', 'ORGANIZATION', 'OUT', 'OUTER', 'PACKAGE', 'PARAMETER', 'PART', 'PADDED', 'PARTITION', 'PARTITIONED', 'PARTITIONING', 'PATH', 'PIECESIZE', 'PERIOD', 'PLAN', 'PRECISION', 'PREVVAL', 'PRIOR', 'PRIQTY', 'PRIVILEGES', 'PROCEDURE', 'PROGRAM', 'PSID', 'PUBLIC', 'QUERY', 'QUERYNO', 'READS', 'REFERENCES', 'RESIGNAL', 'RESTRICT', 'RESULT', 'RESULT_SET_LOCATOR', 'RETURN', 'RETURNS', 'ROLE', 'ROLLUP', 'ROUND_CEILING', 'ROUND_DOWN', 'ROUND_FLOOR', 'ROUND_HALF_DOWN', 'ROUND_HALF_EVEN', 'ROUND_HALF_UP', 'ROUND_UP', 'ROW', 'ROWSET', 'SCHEMA', 'SCRATCHPAD', 'SECONDS', 'SECQTY', 'SECURITY', 'SEQUENCE', 'SENSITIVE', 'SESSION_USER', 'SIMPLE', 'SOME', 'SOURCE', 'SPECIFIC', 'STANDARD', 'STATIC', 'STATEMENT', 'STAY', 'STOGROUP', 'STORES', 'STYLE', 'SUMMARY', 'SYNONYM', 'SYSDATE', 'SYSTEM', 'SYSTIMESTAMP', 'TABLE', 'TABLESPACE', 'THEN', 'TO', 'TRIGGER', 'TYPE', 'UNDO', 'UNIQUE', 'UNTIL', 'USER', 'VALIDPROC', 'VARIABLE', 'VARIANT', 'VCAT', 'VERSIONING', 'VIEW', 'VOLATILE', 'VOLUMES', 'WHILE', 'WLM', 'XMLEXISTS', 'XMLCAST', 'YEARS', 'ZONE'],
|
2351 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=utilities-db2-online
|
2352 | onlineUtilies: ['BACKUP SYSTEM', 'CATENFM', 'CATMAINT', 'CHECK DATA', 'CHECK INDEX', 'CHECK LOB', 'COPY', 'COPYTOCOPY', 'DIAGNOSE', 'EXEC SQL', 'LISTDEF', 'LOAD', 'MERGECOPY', 'MODIFY RECOVERY', 'MODIFY STATISTICS', 'OPTIONS', 'QUIESCE', 'REBUILD INDEX', 'RECOVER', 'REORG INDEX', 'REORG TABLESPACE', 'REPAIR', 'REPORT', 'RESTORE SYSTEM', 'RUNSTATS', 'STOSPACE', 'TEMPLATE', 'UNLOAD'],
|
2353 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=db2-commands
|
2354 | commands: ['ABEND', 'ACCESS DATABASE', 'ALTER BUFFERPOOL', 'ALTER GROUPBUFFERPOOL', 'ALTER UTILITY', 'ARCHIVE LOG', 'BIND PACKAGE', 'BIND PLAN', 'BIND QUERY', 'BIND SERVICE', 'BIND', 'REBIND', 'CANCEL THREAD', 'DCLGEN', 'DISPLAY ACCEL', 'DISPLAY ARCHIVE', 'DISPLAY BLOCKERS', 'DISPLAY BUFFERPOOL', 'DISPLAY DATABASE', 'DISPLAY DDF', 'DISPLAY FUNCTION SPECIFIC', 'DISPLAY GROUP', 'DISPLAY GROUPBUFFERPOOL', 'DISPLAY LOCATION', 'DISPLAY LOG', 'DISPLAY PROCEDURE', 'DISPLAY PROFILE', 'DISPLAY RLIMIT', 'DISPLAY RESTSVC', 'DISPLAY THREAD', 'DISPLAY TRACE', 'DISPLAY UTILITY', 'DSN', 'DSNH', 'END', 'FREE PACKAGE', 'FREE PLAN', 'FREE QUERY', 'FREE SERVICE', 'MODIFY admtproc,APPL=SHUTDOWN', 'MODIFY admtproc,APPL=TRACE', 'MODIFY DDF', 'MODIFY irlmproc,ABEND', 'MODIFY irlmproc,DIAG', 'MODIFY irlmproc,PURGE', 'MODIFY irlmproc,SET', 'MODIFY irlmproc,STATUS', 'MODIFY TRACE', 'REBIND PACKAGE', 'REBIND PLAN', 'REBIND TRIGGER PACKAGE', 'RECOVER BSDS', 'RECOVER INDOUBT', 'RECOVER POSTPONED', 'REFRESH DB2,EARLY', 'RESET GENERICLU', 'RESET INDOUBT', 'RUN', 'SET ARCHIVE', 'SET LOG', 'SET SYSPARM', 'SPUFI', 'START ACCEL', 'START admtproc', 'START CDDS', 'START DATABASE', 'START DB2', 'START DDF', 'START FUNCTION SPECIFIC', 'START irlmproc', 'START PROCEDURE', 'START PROFILE', 'START RLIMIT', 'START RESTSVC', 'START TRACE', 'STOP ACCEL', 'STOP admtproc', 'STOP CDDS', 'STOP DATABASE', 'STOP DB2', 'STOP DDF', 'STOP FUNCTION SPECIFIC', 'STOP irlmproc', 'STOP PROCEDURE', 'STOP PROFILE', 'STOP RLIMIT', 'STOP RESTSVC', 'STOP TRACE', 'TERM UTILITY', 'TRACE CT']
|
2355 | };
|
2356 | /**
|
2357 | * Priority 1 (first)
|
2358 | * keywords that begin a new statement
|
2359 | * will begin new indented block
|
2360 | */
|
2361 | // https://www.ibm.com/docs/en/db2-for-zos/11?topic=statements-list-supported
|
2362 |
|
2363 | var reservedCommands = ['ALLOCATE CURSOR', 'ALTER DATABASE', 'ALTER FUNCTION', 'ALTER INDEX', 'ALTER MASK', 'ALTER PERMISSION', 'ALTER PROCEDURE', 'ALTER SEQUENCE', 'ALTER STOGROUP', 'ALTER TABLE', 'ALTER TABLESPACE', 'ALTER TRIGGER', 'ALTER TRUSTED CONTEXT', 'ALTER VIEW', 'ASSOCIATE LOCATORS', 'BEGIN DECLARE SECTION', 'CALL', 'CLOSE', 'COMMENT', 'COMMIT', 'CONNECT', 'CREATE ALIAS', 'CREATE AUXILIARY TABLE', 'CREATE DATABASE', 'CREATE FUNCTION', 'CREATE GLOBAL TEMPORARY TABLE', 'CREATE INDEX', 'CREATE LOB TABLESPACE', 'CREATE MASK', 'CREATE PERMISSION', 'CREATE PROCEDURE', 'CREATE ROLE', 'CREATE SEQUENCE', 'CREATE STOGROUP', 'CREATE SYNONYM', 'CREATE TABLE', 'CREATE TABLESPACE', 'CREATE TRIGGER', 'CREATE TRUSTED CONTEXT', 'CREATE TYPE', 'CREATE VARIABLE', 'CREATE VIEW', 'DECLARE CURSOR', 'DECLARE GLOBAL TEMPORARY TABLE', 'DECLARE STATEMENT', 'DECLARE TABLE', 'DECLARE VARIABLE', 'DELETE', 'DESCRIBE CURSOR', 'DESCRIBE INPUT', 'DESCRIBE OUTPUT', 'DESCRIBE PROCEDURE', 'DESCRIBE TABLE', 'DROP', 'END DECLARE SECTION', 'EXCHANGE', 'EXECUTE', 'EXECUTE IMMEDIATE', 'EXPLAIN', 'FETCH', 'FREE LOCATOR', 'GET DIAGNOSTICS', 'GRANT', 'HOLD LOCATOR', 'INCLUDE', 'INSERT', 'LABEL', 'LOCK TABLE', 'MERGE', 'OPEN', 'PREPARE', 'REFRESH', 'RELEASE', 'RELEASE SAVEPOINT', 'RENAME', 'REVOKE', 'ROLLBACK', 'SAVEPOINT', 'SELECT', 'SELECT INTO', 'SET CONNECTION', 'SET', 'SET CURRENT ACCELERATOR', 'SET CURRENT APPLICATION COMPATIBILITY', 'SET CURRENT APPLICATION ENCODING SCHEME', 'SET CURRENT DEBUG MODE', 'SET CURRENT DECFLOAT ROUNDING MODE', 'SET CURRENT DEGREE', 'SET CURRENT EXPLAIN MODE', 'SET CURRENT GET_ACCEL_ARCHIVE', 'SET CURRENT LOCALE LC_CTYPE', 'SET CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION', 'SET CURRENT OPTIMIZATION HINT', 'SET CURRENT PACKAGE PATH', 'SET CURRENT PACKAGESET', 'SET CURRENT PRECISION', 'SET CURRENT QUERY ACCELERATION', 'SET CURRENT QUERY ACCELERATION WAITFORDATA', 'SET CURRENT REFRESH AGE', 'SET CURRENT ROUTINE VERSION', 'SET CURRENT RULES', 'SET CURRENT SQLID', 'SET CURRENT TEMPORAL BUSINESS_TIME', 'SET CURRENT TEMPORAL SYSTEM_TIME', 'SET ENCRYPTION PASSWORD', 'SET PATH', 'SET SCHEMA', 'SET SESSION TIME ZONE', 'SIGNAL', 'TRUNCATE', 'UPDATE', 'VALUES', 'VALUES INTO', 'WHENEVER', // other
|
2364 | 'ADD', 'ALTER COLUMN', 'AFTER', 'DROP TABLE', 'FETCH FIRST', 'FROM', 'GROUP BY', 'GO', 'HAVING', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'SET CURRENT SCHEMA', 'WHERE', 'WITH'];
|
2365 | /**
|
2366 | * Priority 2
|
2367 | * commands that operate on two tables or subqueries
|
2368 | * two main categories: joins and boolean set operators
|
2369 | */
|
2370 |
|
2371 | var reservedBinaryCommands = [// set booleans
|
2372 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
|
2373 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
|
2374 | /**
|
2375 | * Priority 3
|
2376 | * keywords that follow a previous Statement, must be attached to subsequent data
|
2377 | * can be fully inline or on newline with optional indent
|
2378 | */
|
2379 |
|
2380 | var reservedDependentClauses = ['WHEN', 'ELSE', 'ELSEIF']; // https://www.ibm.com/support/knowledgecenter/en/ssw_ibm_i_72/db2/rbafzintro.htm
|
2381 |
|
2382 | var Db2Formatter = /*#__PURE__*/function (_Formatter) {
|
2383 | _inherits(Db2Formatter, _Formatter);
|
2384 |
|
2385 | var _super = _createSuper(Db2Formatter);
|
2386 |
|
2387 | function Db2Formatter() {
|
2388 | _classCallCheck(this, Db2Formatter);
|
2389 |
|
2390 | return _super.apply(this, arguments);
|
2391 | }
|
2392 |
|
2393 | _createClass(Db2Formatter, [{
|
2394 | key: "tokenizer",
|
2395 | value: function tokenizer() {
|
2396 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
2397 | reservedCommands: Db2Formatter.reservedCommands,
|
2398 | reservedBinaryCommands: Db2Formatter.reservedBinaryCommands,
|
2399 | reservedDependentClauses: Db2Formatter.reservedDependentClauses,
|
2400 | reservedJoinConditions: Db2Formatter.reservedJoinConditions,
|
2401 | reservedLogicalOperators: Db2Formatter.reservedLogicalOperators,
|
2402 | reservedKeywords: Db2Formatter.fullReservedWords,
|
2403 | stringTypes: Db2Formatter.stringTypes,
|
2404 | blockStart: Db2Formatter.blockStart,
|
2405 | blockEnd: Db2Formatter.blockEnd,
|
2406 | indexedPlaceholderTypes: Db2Formatter.indexedPlaceholderTypes,
|
2407 | namedPlaceholderTypes: Db2Formatter.namedPlaceholderTypes,
|
2408 | lineCommentTypes: Db2Formatter.lineCommentTypes,
|
2409 | specialWordChars: Db2Formatter.specialWordChars,
|
2410 | operators: Db2Formatter.operators
|
2411 | });
|
2412 | }
|
2413 | }]);
|
2414 |
|
2415 | return Db2Formatter;
|
2416 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
2417 |
|
2418 |
|
2419 | Db2Formatter.reservedCommands = reservedCommands;
|
2420 | Db2Formatter.reservedBinaryCommands = reservedBinaryCommands;
|
2421 | Db2Formatter.reservedDependentClauses = reservedDependentClauses;
|
2422 | Db2Formatter.reservedJoinConditions = ['ON', 'USING'];
|
2423 | Db2Formatter.reservedLogicalOperators = ['AND', 'OR'];
|
2424 | Db2Formatter.fullReservedWords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
|
2425 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
2426 | }, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
|
2427 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
2428 | }, []))));
|
2429 | Db2Formatter.stringTypes = ["\"\"", "''", '``', '[]', "x''"];
|
2430 | Db2Formatter.blockStart = ['('];
|
2431 | Db2Formatter.blockEnd = [')'];
|
2432 | Db2Formatter.indexedPlaceholderTypes = ['?'];
|
2433 | Db2Formatter.namedPlaceholderTypes = [':'];
|
2434 | Db2Formatter.lineCommentTypes = ['--'];
|
2435 | Db2Formatter.specialWordChars = {
|
2436 | any: '#@'
|
2437 | };
|
2438 | Db2Formatter.operators = ['**', '!>', '!<', '||'];
|
2439 |
|
2440 | /***/ }),
|
2441 |
|
2442 | /***/ "./src/languages/hive.formatter.ts":
|
2443 | /*!*****************************************!*\
|
2444 | !*** ./src/languages/hive.formatter.ts ***!
|
2445 | \*****************************************/
|
2446 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
2447 |
|
2448 | __webpack_require__.r(__webpack_exports__);
|
2449 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
2450 | /* harmony export */ "default": () => (/* binding */ HiveFormatter)
|
2451 | /* harmony export */ });
|
2452 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
2453 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
2454 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
2455 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
2456 |
|
2457 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
2458 |
|
2459 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
2460 |
|
2461 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
2462 |
|
2463 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
2464 |
|
2465 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
2466 |
|
2467 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
2468 |
|
2469 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
2470 |
|
2471 | 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); } }
|
2472 |
|
2473 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
2474 |
|
2475 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
2476 |
|
2477 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
2478 |
|
2479 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
2480 |
|
2481 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
2482 |
|
2483 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
2484 |
|
2485 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
2486 |
|
2487 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
2488 |
|
2489 |
|
2490 |
|
2491 |
|
2492 | /**
|
2493 | * Priority 5 (last)
|
2494 | * Full list of reserved functions
|
2495 | * distinct from Keywords due to interaction with parentheses
|
2496 | */
|
2497 | // https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
|
2498 |
|
2499 | var reservedFunctions = {
|
2500 | math: ['ABS', 'ACOS', 'ASIN', 'ATAN', 'BIN', 'BROUND', 'CBRT', 'CEIL', 'CEILING', 'CONV', 'COS', 'DEGREES', // 'E',
|
2501 | 'EXP', 'FACTORIAL', 'FLOOR', 'GREATEST', 'HEX', 'LEAST', 'LN', 'LOG', 'LOG10', 'LOG2', 'NEGATIVE', 'PI', 'PMOD', 'POSITIVE', 'POW', 'POWER', 'RADIANS', 'RAND', 'ROUND', 'SHIFTLEFT', 'SHIFTRIGHT', 'SHIFTRIGHTUNSIGNED', 'SIGN', 'SIN', 'SQRT', 'TAN', 'UNHEX', 'WIDTH_BUCKET'],
|
2502 | array: ['ARRAY_CONTAINS', 'MAP_KEYS', 'MAP_VALUES', 'SIZE', 'SORT_ARRAY'],
|
2503 | conversion: ['BINARY', 'CAST'],
|
2504 | date: ['ADD_MONTHS', 'DATE', 'DATE_ADD', 'DATE_FORMAT', 'DATE_SUB', 'DATEDIFF', 'DAY', 'DAYNAME', 'DAYOFMONTH', 'DAYOFYEAR', 'EXTRACT', 'FROM_UNIXTIME', 'FROM_UTC_TIMESTAMP', 'HOUR', 'LAST_DAY', 'MINUTE', 'MONTH', 'MONTHS_BETWEEN', 'NEXT_DAY', 'QUARTER', 'SECOND', 'TIMESTAMP', 'TO_DATE', 'TO_UTC_TIMESTAMP', 'TRUNC', 'UNIX_TIMESTAMP', 'WEEKOFYEAR', 'YEAR'],
|
2505 | conditional: ['ASSERT_TRUE', 'COALESCE', 'IF', 'ISNOTNULL', 'ISNULL', 'NULLIF', 'NVL'],
|
2506 | string: ['ASCII', 'BASE64', 'CHARACTER_LENGTH', 'CHR', 'CONCAT', 'CONCAT_WS', 'CONTEXT_NGRAMS', 'DECODE', 'ELT', 'ENCODE', 'FIELD', 'FIND_IN_SET', 'FORMAT_NUMBER', 'GET_JSON_OBJECT', 'IN_FILE', 'INITCAP', 'INSTR', 'LCASE', 'LENGTH', 'LEVENSHTEIN', 'LOCATE', 'LOWER', 'LPAD', 'LTRIM', 'NGRAMS', 'OCTET_LENGTH', 'PARSE_URL', 'PRINTF', 'QUOTE', 'REGEXP_EXTRACT', 'REGEXP_REPLACE', 'REPEAT', 'REVERSE', 'RPAD', 'RTRIM', 'SENTENCES', 'SOUNDEX', 'SPACE', 'SPLIT', 'STR_TO_MAP', 'SUBSTR', 'SUBSTRING', 'TRANSLATE', 'TRIM', 'UCASE', 'UNBASE64', 'UPPER'],
|
2507 | masking: ['MASK', 'MASK_FIRST_N', 'MASK_HASH', 'MASK_LAST_N', 'MASK_SHOW_FIRST_N', 'MASK_SHOW_LAST_N'],
|
2508 | misc: ['AES_DECRYPT', 'AES_ENCRYPT', 'CRC32', 'CURRENT_DATABASE', 'CURRENT_USER', 'HASH', 'JAVA_METHOD', 'LOGGED_IN_USER', 'MD5', 'REFLECT', 'SHA', 'SHA1', 'SHA2', 'SURROGATE_KEY', 'VERSION'],
|
2509 | aggregate: ['AVG', 'COLLECT_LIST', 'COLLECT_SET', 'CORR', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'HISTOGRAM_NUMERIC', 'MAX', 'MIN', 'NTILE', 'PERCENTILE', 'PERCENTILE_APPROX', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'STDDEV_POP', 'STDDEV_SAMP', 'SUM', 'VAR_POP', 'VAR_SAMP', 'VARIANCE'],
|
2510 | table: ['EXPLODE', 'INLINE', 'JSON_TUPLE', 'PARSE_URL_TUPLE', 'POSEXPLODE', 'STACK']
|
2511 | };
|
2512 | /**
|
2513 | * Priority 5 (last)
|
2514 | * Full list of reserved words
|
2515 | * any words that are in a higher priority are removed
|
2516 | */
|
2517 | // https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl
|
2518 |
|
2519 | var reservedKeywords = {
|
2520 | // Non-reserved keywords have proscribed meanings in. HiveQL, but can still be used as table or column names
|
2521 | nonReserved: ['ADD', 'ADMIN', 'AFTER', 'ANALYZE', 'ARCHIVE', 'ASC', 'BEFORE', 'BUCKET', 'BUCKETS', 'CASCADE', 'CHANGE', 'CLUSTER', 'CLUSTERED', 'CLUSTERSTATUS', 'COLLECTION', 'COLUMNS', 'COMMENT', 'COMPACT', 'COMPACTIONS', 'COMPUTE', 'CONCATENATE', 'CONTINUE', 'DATA', 'DATABASES', 'DATETIME', 'DAY', 'DBPROPERTIES', 'DEFERRED', 'DEFINED', 'DELIMITED', 'DEPENDENCY', 'DESC', 'DIRECTORIES', 'DIRECTORY', 'DISABLE', 'DISTRIBUTE', 'ELEM_TYPE', 'ENABLE', 'ESCAPED', 'EXCLUSIVE', 'EXPLAIN', 'EXPORT', 'FIELDS', 'FILE', 'FILEFORMAT', 'FIRST', 'FORMAT', 'FORMATTED', 'FUNCTIONS', 'HOLD_DDLTIME', 'HOUR', 'IDXPROPERTIES', 'IGNORE', 'INDEX', 'INDEXES', 'INPATH', 'INPUTDRIVER', 'INPUTFORMAT', 'ITEMS', 'JAR', 'KEYS', 'KEY_TYPE', 'LIMIT', 'LINES', 'LOAD', 'LOCATION', 'LOCK', 'LOCKS', 'LOGICAL', 'LONG', 'MAPJOIN', 'MATERIALIZED', 'METADATA', 'MINUS', 'MINUTE', 'MONTH', 'MSCK', 'NOSCAN', 'NO_DROP', 'OFFLINE', 'OPTION', 'OUTPUTDRIVER', 'OUTPUTFORMAT', 'OVERWRITE', 'OWNER', 'PARTITIONED', 'PARTITIONS', 'PLUS', 'PRETTY', 'PRINCIPALS', 'PROTECTION', 'PURGE', 'READ', 'READONLY', 'REBUILD', 'RECORDREADER', 'RECORDWRITER', 'RELOAD', 'RENAME', 'REPAIR', 'REPLACE', 'REPLICATION', 'RESTRICT', 'REWRITE', 'ROLE', 'ROLES', 'SCHEMA', 'SCHEMAS', 'SECOND', 'SEMI', 'SERDE', 'SERDEPROPERTIES', 'SERVER', 'SETS', 'SHARED', 'SHOW', 'SHOW_DATABASE', 'SKEWED', 'SORT', 'SORTED', 'SSL', 'STATISTICS', 'STORED', 'STREAMTABLE', 'STRING', 'STRUCT', 'TABLES', 'TBLPROPERTIES', 'TEMPORARY', 'TERMINATED', 'TINYINT', 'TOUCH', 'TRANSACTIONS', 'UNARCHIVE', 'UNDO', 'UNIONTYPE', 'UNLOCK', 'UNSET', 'UNSIGNED', 'URI', // 'USE',
|
2522 | 'UTC', 'UTCTIMESTAMP', 'VALUE_TYPE', 'VIEW', 'WHILE', 'YEAR', 'AUTOCOMMIT', 'ISOLATION', 'LEVEL', 'OFFSET', 'SNAPSHOT', 'TRANSACTION', 'WORK', 'WRITE', 'ABORT', 'KEY', 'LAST', 'NORELY', 'NOVALIDATE', 'NULLS', 'RELY', 'VALIDATE', 'DETAIL', 'DOW', 'EXPRESSION', 'OPERATOR', 'QUARTER', 'SUMMARY', 'VECTORIZATION', 'WEEK', 'YEARS', 'MONTHS', 'WEEKS', 'DAYS', 'HOURS', 'MINUTES', 'SECONDS', 'TIMESTAMPTZ', 'ZONE'],
|
2523 | reserved: [// reserved
|
2524 | 'ALL', // 'ALTER',
|
2525 | // 'AND',
|
2526 | 'ARRAY', 'AS', 'AUTHORIZATION', 'BETWEEN', 'BIGINT', 'BINARY', 'BOOLEAN', 'BOTH', 'BY', // 'CASE',
|
2527 | 'CAST', 'CHAR', 'COLUMN', 'CONF', // 'CREATE',
|
2528 | 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIMESTAMP', 'CURSOR', 'DATABASE', 'DATE', 'DECIMAL', 'DELETE', // 'DESCRIBE',
|
2529 | 'DISTINCT', 'DOUBLE', // 'DROP',
|
2530 | // 'ELSE',
|
2531 | // 'END',
|
2532 | 'EXCHANGE', 'EXISTS', 'EXTENDED', 'EXTERNAL', 'FALSE', // 'FETCH',
|
2533 | 'FLOAT', 'FOLLOWING', 'FOR', // 'FROM',
|
2534 | 'FULL', 'FUNCTION', 'GRANT', // 'GROUP',
|
2535 | 'GROUPING', // 'HAVING',
|
2536 | 'IF', 'IMPORT', 'IN', 'INNER', // 'INSERT',
|
2537 | 'INT', // 'INTERSECT',
|
2538 | 'INTERVAL', 'INTO', 'IS', // 'JOIN',
|
2539 | 'LATERAL', 'LEFT', 'LESS', 'LIKE', 'LOCAL', 'MACRO', 'MAP', 'MORE', 'NONE', 'NOT', 'NULL', 'OF', // 'ON',
|
2540 | // 'OR',
|
2541 | 'ORDER', 'OUT', 'OUTER', 'OVER', 'PARTIALSCAN', 'PARTITION', 'PERCENT', 'PRECEDING', 'PRESERVE', 'PROCEDURE', 'RANGE', 'READS', 'REDUCE', 'REVOKE', 'RIGHT', 'ROLLUP', 'ROW', 'ROWS', // 'SELECT',
|
2542 | 'SET', 'SMALLINT', 'TABLE', 'TABLESAMPLE', 'THEN', 'TIMESTAMP', 'TO', 'TRANSFORM', 'TRIGGER', 'TRUE', // 'TRUNCATE',
|
2543 | 'UNBOUNDED', // 'UNION',
|
2544 | 'UNIQUEJOIN', // 'UPDATE',
|
2545 | 'USER', 'UTC_TMESTAMP', // 'VALUES',
|
2546 | 'VARCHAR', // 'WHEN',
|
2547 | // 'WHERE',
|
2548 | 'WINDOW', // 'WITH',
|
2549 | 'COMMIT', 'ONLY', 'REGEXP', 'RLIKE', 'ROLLBACK', 'START', 'CACHE', 'CONSTRAINT', 'FOREIGN', 'PRIMARY', 'REFERENCES', 'DAYOFWEEK', 'EXTRACT', 'FLOOR', 'INTEGER', 'PRECISION', 'VIEWS', 'TIME', 'NUMERIC', 'SYNC'],
|
2550 | fileTypes: ['TEXTFILE', 'SEQUENCEFILE', 'ORC', 'CSV', 'TSV', 'PARQUET', 'AVRO', 'RCFILE', 'JSONFILE', 'INPUTFORMAT', 'OUTPUTFORMAT']
|
2551 | };
|
2552 | /**
|
2553 | * Priority 1 (first)
|
2554 | * keywords that begin a new statement
|
2555 | * will begin new indented block
|
2556 | */
|
2557 |
|
2558 | var reservedCommands = [// commands
|
2559 | 'ALTER', 'ALTER COLUMN', 'ALTER TABLE', 'CREATE', 'CREATE TABLE', 'USE', 'DESCRIBE', 'DROP', 'DROP TABLE', 'FETCH', 'FROM', 'GROUP BY', 'HAVING', 'INSERT', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'SET', 'SET SCHEMA', 'SHOW', 'SORT BY', 'TRUNCATE', 'UPDATE', 'VALUES', 'WHERE', 'WITH', // newline keywords
|
2560 | 'STORED AS', 'STORED BY', 'ROW FORMAT'];
|
2561 | /**
|
2562 | * Priority 2
|
2563 | * commands that operate on two tables or subqueries
|
2564 | * two main categories: joins and boolean set operators
|
2565 | */
|
2566 |
|
2567 | var reservedBinaryCommands = [// set booleans
|
2568 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', // joins
|
2569 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN'];
|
2570 | /**
|
2571 | * Priority 3
|
2572 | * keywords that follow a previous 'Statement', must be attached to subsequent data
|
2573 | * can be fully inline or on newline with optional indent
|
2574 | */
|
2575 |
|
2576 | var reservedDependentClauses = ['WHEN', 'ELSE']; // https://cwiki.apache.org/confluence/display/Hive/LanguageManual
|
2577 |
|
2578 | var HiveFormatter = /*#__PURE__*/function (_Formatter) {
|
2579 | _inherits(HiveFormatter, _Formatter);
|
2580 |
|
2581 | var _super = _createSuper(HiveFormatter);
|
2582 |
|
2583 | function HiveFormatter() {
|
2584 | _classCallCheck(this, HiveFormatter);
|
2585 |
|
2586 | return _super.apply(this, arguments);
|
2587 | }
|
2588 |
|
2589 | _createClass(HiveFormatter, [{
|
2590 | key: "tokenizer",
|
2591 | value: function tokenizer() {
|
2592 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
2593 | reservedCommands: HiveFormatter.reservedCommands,
|
2594 | reservedBinaryCommands: HiveFormatter.reservedBinaryCommands,
|
2595 | reservedDependentClauses: HiveFormatter.reservedDependentClauses,
|
2596 | reservedJoinConditions: HiveFormatter.reservedJoinConditions,
|
2597 | reservedLogicalOperators: HiveFormatter.reservedLogicalOperators,
|
2598 | reservedKeywords: HiveFormatter.fullReservedWords,
|
2599 | stringTypes: HiveFormatter.stringTypes,
|
2600 | blockStart: HiveFormatter.blockStart,
|
2601 | blockEnd: HiveFormatter.blockEnd,
|
2602 | indexedPlaceholderTypes: HiveFormatter.indexedPlaceholderTypes,
|
2603 | namedPlaceholderTypes: HiveFormatter.namedPlaceholderTypes,
|
2604 | lineCommentTypes: HiveFormatter.lineCommentTypes,
|
2605 | specialWordChars: HiveFormatter.specialWordChars,
|
2606 | operators: HiveFormatter.operators
|
2607 | });
|
2608 | }
|
2609 | }]);
|
2610 |
|
2611 | return HiveFormatter;
|
2612 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
2613 |
|
2614 |
|
2615 | HiveFormatter.reservedCommands = reservedCommands;
|
2616 | HiveFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
2617 | HiveFormatter.reservedDependentClauses = reservedDependentClauses;
|
2618 | HiveFormatter.reservedJoinConditions = ['ON', 'USING'];
|
2619 | HiveFormatter.reservedLogicalOperators = ['AND', 'OR'];
|
2620 | HiveFormatter.fullReservedWords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
|
2621 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
2622 | }, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
|
2623 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
2624 | }, []))));
|
2625 | HiveFormatter.stringTypes = ['""', "''", '``'];
|
2626 | HiveFormatter.blockStart = ['(', 'CASE'];
|
2627 | HiveFormatter.blockEnd = [')', 'END'];
|
2628 | HiveFormatter.indexedPlaceholderTypes = ['?'];
|
2629 | HiveFormatter.namedPlaceholderTypes = [];
|
2630 | HiveFormatter.lineCommentTypes = ['--'];
|
2631 | HiveFormatter.specialWordChars = {};
|
2632 | HiveFormatter.operators = ['<=>', '==', '||'];
|
2633 |
|
2634 | /***/ }),
|
2635 |
|
2636 | /***/ "./src/languages/mariadb.formatter.ts":
|
2637 | /*!********************************************!*\
|
2638 | !*** ./src/languages/mariadb.formatter.ts ***!
|
2639 | \********************************************/
|
2640 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
2641 |
|
2642 | __webpack_require__.r(__webpack_exports__);
|
2643 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
2644 | /* harmony export */ "default": () => (/* binding */ MariaDbFormatter)
|
2645 | /* harmony export */ });
|
2646 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
2647 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
2648 | /* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
|
2649 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
2650 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
2651 |
|
2652 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
2653 |
|
2654 | 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); } }
|
2655 |
|
2656 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
2657 |
|
2658 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
2659 |
|
2660 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
2661 |
|
2662 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
2663 |
|
2664 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
2665 |
|
2666 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
2667 |
|
2668 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
2669 |
|
2670 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
2671 |
|
2672 |
|
2673 |
|
2674 |
|
2675 |
|
2676 | /**
|
2677 | * Priority 5 (last)
|
2678 | * Full list of reserved functions
|
2679 | * distinct from Keywords due to interaction with parentheses
|
2680 | */
|
2681 | // https://mariadb.com/kb/en/information-schema-sql_functions-table/
|
2682 |
|
2683 | var reservedFunctions = ['ADDDATE', 'ADD_MONTHS', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'CAST', 'COUNT', 'CUME_DIST', 'CURDATE', 'CURTIME', 'DATE_ADD', 'DATE_SUB', 'DATE_FORMAT', 'DECODE', 'DENSE_RANK', 'EXTRACT', 'FIRST_VALUE', 'GROUP_CONCAT', 'JSON_ARRAYAGG', 'JSON_OBJECTAGG', 'LAG', 'LEAD', 'MAX', 'MEDIAN', 'MID', 'MIN', 'NOW', 'NTH_VALUE', 'NTILE', 'POSITION', 'PERCENT_RANK', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'RANK', 'ROW_NUMBER', 'SESSION_USER', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'SUBDATE', 'SUBSTR', 'SUBSTRING', 'SUM', 'SYSTEM_USER', 'TRIM', 'TRIM_ORACLE', 'VARIANCE', 'VAR_POP', 'VAR_SAMP', 'ABS', 'ACOS', 'ADDTIME', 'AES_DECRYPT', 'AES_ENCRYPT', 'ASIN', 'ATAN', 'ATAN2', 'BENCHMARK', 'BIN', 'BINLOG_GTID_POS', 'BIT_COUNT', 'BIT_LENGTH', 'CEIL', 'CEILING', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHR', 'COERCIBILITY', 'COLUMN_CHECK', 'COLUMN_EXISTS', 'COLUMN_LIST', 'COLUMN_JSON', 'COMPRESS', 'CONCAT', 'CONCAT_OPERATOR_ORACLE', 'CONCAT_WS', 'CONNECTION_ID', 'CONV', 'CONVERT_TZ', 'COS', 'COT', 'CRC32', 'DATEDIFF', 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'DEGREES', 'DECODE_HISTOGRAM', 'DECODE_ORACLE', 'DES_DECRYPT', 'DES_ENCRYPT', 'ELT', 'ENCODE', 'ENCRYPT', 'EXP', 'EXPORT_SET', 'EXTRACTVALUE', 'FIELD', 'FIND_IN_SET', 'FLOOR', 'FORMAT', 'FOUND_ROWS', 'FROM_BASE64', 'FROM_DAYS', 'FROM_UNIXTIME', 'GET_LOCK', 'GREATEST', 'HEX', 'IFNULL', 'INSTR', 'ISNULL', 'IS_FREE_LOCK', 'IS_USED_LOCK', 'JSON_ARRAY', 'JSON_ARRAY_APPEND', 'JSON_ARRAY_INSERT', 'JSON_COMPACT', 'JSON_CONTAINS', 'JSON_CONTAINS_PATH', 'JSON_DEPTH', 'JSON_DETAILED', 'JSON_EXISTS', 'JSON_EXTRACT', 'JSON_INSERT', 'JSON_KEYS', 'JSON_LENGTH', 'JSON_LOOSE', 'JSON_MERGE', 'JSON_MERGE_PATCH', 'JSON_MERGE_PRESERVE', 'JSON_QUERY', 'JSON_QUOTE', 'JSON_OBJECT', 'JSON_REMOVE', 'JSON_REPLACE', 'JSON_SET', 'JSON_SEARCH', 'JSON_TYPE', 'JSON_UNQUOTE', 'JSON_VALID', 'JSON_VALUE', 'LAST_DAY', 'LAST_INSERT_ID', 'LCASE', 'LEAST', 'LENGTH', 'LENGTHB', 'LN', 'LOAD_FILE', 'LOCATE', 'LOG', 'LOG10', 'LOG2', 'LOWER', 'LPAD', 'LPAD_ORACLE', 'LTRIM', 'LTRIM_ORACLE', 'MAKEDATE', 'MAKETIME', 'MAKE_SET', 'MASTER_GTID_WAIT', 'MASTER_POS_WAIT', 'MD5', 'MONTHNAME', 'NAME_CONST', 'NVL', 'NVL2', 'NULLIF', 'OCT', 'OCTET_LENGTH', 'ORD', 'PERIOD_ADD', 'PERIOD_DIFF', 'PI', 'POW', 'POWER', 'QUOTE', 'REGEXP_INSTR', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'RADIANS', 'RAND', 'RELEASE_ALL_LOCKS', 'RELEASE_LOCK', 'REPLACE_ORACLE', 'REVERSE', 'ROUND', 'RPAD', 'RPAD_ORACLE', 'RTRIM', 'RTRIM_ORACLE', 'SEC_TO_TIME', 'SHA', 'SHA1', 'SHA2', 'SIGN', 'SIN', 'SLEEP', 'SOUNDEX', 'SPACE', 'SQRT', 'STRCMP', 'STR_TO_DATE', 'SUBSTR_ORACLE', 'SUBSTRING_INDEX', 'SUBTIME', 'SYS_GUID', 'TAN', 'TIMEDIFF', 'TIME_FORMAT', 'TIME_TO_SEC', 'TO_BASE64', 'TO_CHAR', 'TO_DAYS', 'TO_SECONDS', 'UCASE', 'UNCOMPRESS', 'UNCOMPRESSED_LENGTH', 'UNHEX', 'UNIX_TIMESTAMP', 'UPDATEXML', 'UPPER', 'UUID', 'UUID_SHORT', 'VERSION', 'WEEKDAY', 'WEEKOFYEAR', 'WSREP_LAST_WRITTEN_GTID', 'WSREP_LAST_SEEN_GTID', 'WSREP_SYNC_WAIT_UPTO_GTID', 'YEARWEEK'];
|
2684 | /**
|
2685 | * Priority 5 (last)
|
2686 | * Full list of reserved words
|
2687 | * any words that are in a higher priority are removed
|
2688 | */
|
2689 | // https://mariadb.com/kb/en/information-schema-keywords-table/
|
2690 |
|
2691 | var reservedKeywords = ['ACCESSIBLE', 'ACCOUNT', 'ACTION', 'ADMIN', 'AFTER', 'AGAINST', 'AGGREGATE', 'ALL', 'ALGORITHM', 'ALTER', 'ALWAYS', 'ANY', 'AS', 'ASC', 'ASCII', 'ASENSITIVE', 'AT', 'ATOMIC', 'AUTHORS', 'AUTO_INCREMENT', 'AUTOEXTEND_SIZE', 'AUTO', 'AVG', 'AVG_ROW_LENGTH', 'BACKUP', 'BEFORE', 'BETWEEN', 'BIGINT', 'BINARY', 'BIT', 'BLOB', 'BLOCK', 'BODY', 'BOOL', 'BOOLEAN', 'BOTH', 'BTREE', 'BY', 'BYTE', 'CACHE', 'CASCADE', 'CASCADED', 'CATALOG_NAME', 'CHAIN', 'CHANGE', 'CHANGED', 'CHAR', 'CHARACTER', 'CHARACTER SET', 'CHARSET', 'CHECK', 'CHECKPOINT', 'CHECKSUM', 'CIPHER', 'CLASS_ORIGIN', 'CLIENT', 'CLOB', 'CLOSE', 'COALESCE', 'CODE', 'COLLATE', 'COLLATION', 'COLUMN', 'COLUMN_NAME', 'COLUMNS', 'COLUMN_ADD', 'COLUMN_CREATE', 'COLUMN_DELETE', 'COLUMN_GET', 'COMMENT', 'COMMITTED', 'COMPACT', 'COMPLETION', 'COMPRESSED', 'CONCURRENT', 'CONDITION', 'CONNECTION', 'CONSISTENT', 'CONSTRAINT', 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONTAINS', 'CONTEXT', 'CONTINUE', 'CONTRIBUTORS', 'CONVERT', 'CPU', 'CREATE', 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_POS', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'CURSOR_NAME', 'CYCLE', 'DATA', 'DATABASE', 'DATABASES', 'DATAFILE', 'DATE', 'DATETIME', 'DAY', 'DAY_HOUR', 'DAY_MICROSECOND', 'DAY_MINUTE', 'DAY_SECOND', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFINER', 'DELAYED', 'DELAY_KEY_WRITE', 'DELETE_DOMAIN_ID', 'DES_KEY_FILE', 'DETERMINISTIC', 'DIAGNOSTICS', 'DIRECTORY', 'DISABLE', 'DISCARD', 'DISK', 'DISTINCT', 'DISTINCTROW', 'DIV', 'DOUBLE', 'DO_DOMAIN_IDS', 'DROP', 'DUAL', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'EACH', 'EMPTY', 'ENABLE', 'ENCLOSED', 'ENDS', 'ENGINE', 'ENGINES', 'ENUM', 'ERROR', 'ERRORS', 'ESCAPE', 'ESCAPED', 'EVENT', 'EVENTS', 'EVERY', 'EXAMINED', 'EXCHANGE', 'EXCLUDE', 'EXCEPTION', 'EXISTS', 'EXIT', 'EXPANSION', 'EXPIRE', 'EXPORT', 'EXTENDED', 'EXTENT_SIZE', 'FALSE', 'FAST', 'FAULTS', 'FEDERATED', 'FETCH', 'FIELDS', 'FILE', 'FIRST', 'FIXED', 'FLOAT', 'FLOAT4', 'FLOAT8', 'FOLLOWING', 'FOLLOWS', 'FOR', 'FORCE', 'FOREIGN', 'FOUND', 'FULL', 'FULLTEXT', 'FUNCTION', 'GENERAL', 'GENERATED', 'GET_FORMAT', 'GET', 'GLOBAL', 'GOTO', 'GRANTS', 'GROUP', 'HARD', 'HASH', 'HIGH_PRIORITY', 'HISTORY', 'HOST', 'HOSTS', 'HOUR', 'HOUR_MICROSECOND', 'HOUR_MINUTE', 'HOUR_SECOND', // 'ID',
|
2692 | 'IDENTIFIED', 'IF', 'IGNORE', 'IGNORED', 'IGNORE_DOMAIN_IDS', 'IGNORE_SERVER_IDS', 'IMMEDIATE', 'IMPORT', 'IN', 'INCREMENT', 'INDEX', 'INDEXES', 'INFILE', 'INITIAL_SIZE', 'INNER', 'INOUT', 'INSENSITIVE', 'INSERT_METHOD', 'INSTALL', 'INT', 'INT1', 'INT2', 'INT3', 'INT4', 'INT8', 'INTEGER', 'INTERVAL', 'INVISIBLE', 'INTO', 'IO', 'IO_THREAD', 'IPC', 'IS', 'ISOLATION', 'ISOPEN', 'ISSUER', 'ITERATE', 'INVOKER', 'JSON', 'JSON_TABLE', 'KEY', 'KEYS', 'KEY_BLOCK_SIZE', 'LANGUAGE', 'LAST', 'LAST_VALUE', 'LASTVAL', 'LEADING', 'LEAVE', 'LEAVES', 'LEFT', 'LESS', 'LEVEL', 'LIKE', 'LINEAR', 'LINES', 'LIST', 'LOAD', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCK', 'LOCKED', 'LOCKS', 'LOGFILE', 'LOGS', 'LONG', 'LONGBLOB', 'LONGTEXT', 'LOOP', 'LOW_PRIORITY', 'MASTER', 'MASTER_CONNECT_RETRY', 'MASTER_DELAY', 'MASTER_GTID_POS', 'MASTER_HOST', 'MASTER_LOG_FILE', 'MASTER_LOG_POS', 'MASTER_PASSWORD', 'MASTER_PORT', 'MASTER_SERVER_ID', 'MASTER_SSL', 'MASTER_SSL_CA', 'MASTER_SSL_CAPATH', 'MASTER_SSL_CERT', 'MASTER_SSL_CIPHER', 'MASTER_SSL_CRL', 'MASTER_SSL_CRLPATH', 'MASTER_SSL_KEY', 'MASTER_SSL_VERIFY_SERVER_CERT', 'MASTER_USER', 'MASTER_USE_GTID', 'MASTER_HEARTBEAT_PERIOD', 'MATCH', 'MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR', 'MAX_ROWS', 'MAX_SIZE', 'MAX_STATEMENT_TIME', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS', 'MAXVALUE', 'MEDIUM', 'MEDIUMBLOB', 'MEDIUMINT', 'MEDIUMTEXT', 'MEMORY', 'MERGE', 'MESSAGE_TEXT', 'MICROSECOND', 'MIDDLEINT', 'MIGRATE', 'MINUS', 'MINUTE', 'MINUTE_MICROSECOND', 'MINUTE_SECOND', 'MINVALUE', 'MIN_ROWS', 'MOD', 'MODE', 'MODIFIES', 'MODIFY', 'MONITOR', 'MONTH', 'MUTEX', 'MYSQL', 'MYSQL_ERRNO', 'NAME', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NESTED', 'NEVER', 'NEW', 'NEXT', 'NEXTVAL', 'NO', 'NOMAXVALUE', 'NOMINVALUE', 'NOCACHE', 'NOCYCLE', 'NO_WAIT', 'NOWAIT', 'NODEGROUP', 'NONE', 'NOT', 'NOTFOUND', 'NO_WRITE_TO_BINLOG', 'NULL', 'NUMBER', 'NUMERIC', 'NVARCHAR', 'OF', 'OFFSET', 'OLD_PASSWORD', 'ON DELETE', 'ON UPDATE', 'ONE', 'ONLINE', 'ONLY', 'OPEN', 'OPTIMIZE', 'OPTIONS', 'OPTION', 'OPTIONALLY', 'ORDER', 'ORDINALITY', 'OTHERS', 'OUT', 'OUTER', 'OUTFILE', 'OVER', 'OVERLAPS', 'OWNER', 'PACKAGE', 'PACK_KEYS', 'PAGE', 'PAGE_CHECKSUM', 'PARSER', 'PARSE_VCOL_EXPR', 'PATH', 'PERIOD', 'PARTIAL', 'PARTITION', 'PARTITIONING', 'PARTITIONS', 'PASSWORD', 'PERSISTENT', 'PHASE', 'PLUGIN', 'PLUGINS', 'PORT', 'PORTION', 'PRECEDES', 'PRECEDING', 'PRECISION', 'PRESERVE', 'PREV', 'PREVIOUS', 'PRIMARY', 'PRIVILEGES', 'PROCEDURE', 'PROCESS', 'PROCESSLIST', 'PROFILE', 'PROFILES', 'PROXY', 'PURGE', 'QUARTER', 'QUERY', 'QUICK', 'RAISE', 'RANGE', 'RAW', 'READ', 'READ_ONLY', 'READ_WRITE', 'READS', 'REAL', 'REBUILD', 'RECOVER', 'RECURSIVE', 'REDO_BUFFER_SIZE', 'REDOFILE', 'REDUNDANT', 'REFERENCES', 'REGEXP', 'RELAY', 'RELAYLOG', 'RELAY_LOG_FILE', 'RELAY_LOG_POS', 'RELAY_THREAD', 'RELEASE', 'RELOAD', 'REMOVE', 'RENAME', 'REORGANIZE', 'REPAIR', 'REPEATABLE', 'REPLAY', 'REPLICA', 'REPLICAS', 'REPLICA_POS', 'REPLICATION', 'REPEAT', 'REQUIRE', 'RESET', 'RESTART', 'RESTORE', 'RESTRICT', 'RESUME', 'RETURNED_SQLSTATE', 'RETURN', 'RETURNS', 'REUSE', 'RIGHT', 'RLIKE', 'ROLE', 'ROLLUP', 'ROUTINE', 'ROW', 'ROWCOUNT', 'ROWNUM', 'ROWS', 'ROWTYPE', 'ROW_COUNT', 'ROW_FORMAT', 'RTREE', 'SCHEDULE', 'SCHEMA', 'SCHEMA_NAME', 'SCHEMAS', 'SECOND', 'SECOND_MICROSECOND', 'SECURITY', 'SENSITIVE', 'SEPARATOR', 'SEQUENCE', 'SERIAL', 'SERIALIZABLE', 'SESSION', 'SERVER', 'SETVAL', 'SHARE', 'SIGNED', 'SIMPLE', 'SKIP', 'SLAVE', 'SLAVES', 'SLAVE_POS', 'SLOW', 'SNAPSHOT', 'SMALLINT', 'SOCKET', 'SOFT', 'SOME', 'SONAME', 'SOUNDS', 'SOURCE', 'STAGE', 'STORED', 'SPATIAL', 'SPECIFIC', 'REF_SYSTEM_ID', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'SQL_BIG_RESULT', 'SQL_BUFFER_RESULT', 'SQL_CACHE', 'SQL_CALC_FOUND_ROWS', 'SQL_NO_CACHE', 'SQL_SMALL_RESULT', 'SQL_THREAD', 'SQL_TSI_SECOND', 'SQL_TSI_MINUTE', 'SQL_TSI_HOUR', 'SQL_TSI_DAY', 'SQL_TSI_WEEK', 'SQL_TSI_MONTH', 'SQL_TSI_QUARTER', 'SQL_TSI_YEAR', 'SSL', 'START', 'STARTING', 'STARTS', 'STATEMENT', 'STATS_AUTO_RECALC', 'STATS_PERSISTENT', 'STATS_SAMPLE_PAGES', 'STATUS', 'STOP', 'STORAGE', 'STRING', 'SUBCLASS_ORIGIN', 'SUBJECT', 'SUBPARTITION', 'SUBPARTITIONS', 'SUPER', 'SUSPEND', 'SWAPS', 'SWITCHES', 'SYSDATE', 'SYSTEM', 'SYSTEM_TIME', 'TABLE', 'TABLE_NAME', 'TABLES', 'TABLESPACE', 'TABLE_CHECKSUM', 'TEMPORARY', 'TEMPTABLE', 'TERMINATED', 'TEXT', 'THAN', 'THEN', 'TIES', 'TIME', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TINYBLOB', 'TINYINT', 'TINYTEXT', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSACTIONAL', 'THREADS', 'TRIGGER', 'TRIGGERS', 'TRUE', 'TYPE', 'TYPES', 'UNBOUNDED', 'UNCOMMITTED', 'UNDEFINED', 'UNDO_BUFFER_SIZE', 'UNDOFILE', 'UNDO', 'UNICODE', 'UNIQUE', 'UNKNOWN', 'UNLOCK', 'UNINSTALL', 'UNSIGNED', 'UNTIL', 'UPGRADE', 'USAGE', 'USER', 'USER_RESOURCES', 'USE_FRM', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP', 'VALUE', 'VARBINARY', 'VARCHAR', 'VARCHARACTER', 'VARCHAR2', 'VARIABLES', 'VARYING', 'VIA', 'VIEW', 'VIRTUAL', 'VISIBLE', 'VERSIONING', 'WAIT', 'WARNINGS', 'WEEK', 'WEIGHT_STRING', 'WHILE', 'WINDOW', 'WITHIN', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', 'X509', 'XA', 'XML', 'YEAR', 'YEAR_MONTH', 'ZEROFILL'];
|
2693 | /**
|
2694 | * Priority 1 (first)
|
2695 | * keywords that begin a new statement
|
2696 | * will begin new indented block
|
2697 | */
|
2698 | // https://mariadb.com/docs/reference/mdb/sql-statements/
|
2699 |
|
2700 | var reservedCommands = ['ALTER DATABASE', 'ALTER DATABASE COMMENT', 'ALTER EVENT', 'ALTER FUNCTION', 'ALTER PROCEDURE', 'ALTER SCHEMA', 'ALTER SCHEMA COMMENT', 'ALTER SEQUENCE', 'ALTER SERVER', 'ALTER TABLE', 'ALTER USER', 'ALTER VIEW', 'ANALYZE', 'ANALYZE TABLE', 'BACKUP LOCK', 'BACKUP STAGE', 'BACKUP UNLOCK', 'BEGIN', 'BINLOG', 'CACHE INDEX', 'CALL', 'CHANGE MASTER TO', 'CHECK TABLE', 'CHECK VIEW', 'CHECKSUM TABLE', 'COMMIT', 'CREATE AGGREGATE FUNCTION', 'CREATE DATABASE', 'CREATE EVENT', 'CREATE FUNCTION', 'CREATE INDEX', 'CREATE PROCEDURE', 'CREATE ROLE', 'CREATE SEQUENCE', 'CREATE SERVER', 'CREATE SPATIAL INDEX', 'CREATE TABLE', 'CREATE TRIGGER', 'CREATE UNIQUE INDEX', 'CREATE USER', 'CREATE VIEW', 'DEALLOCATE PREPARE', 'DELETE', 'DESC', 'DESCRIBE', 'DO', 'DROP DATABASE', 'DROP EVENT', 'DROP FUNCTION', 'DROP INDEX', 'DROP PREPARE', 'DROP PROCEDURE', 'DROP ROLE', 'DROP SEQUENCE', 'DROP SERVER', 'DROP TABLE', 'DROP TRIGGER', 'DROP USER', 'DROP VIEW', 'EXECUTE', 'EXPLAIN', 'FLUSH', 'GET DIAGNOSTICS', 'GET DIAGNOSTICS CONDITION', 'GRANT', 'HANDLER', 'HELP', 'INSERT', 'INSTALL PLUGIN', 'INSTALL SONAME', 'KILL', 'LOAD DATA INFILE', 'LOAD INDEX INTO CACHE', 'LOAD XML INFILE', 'LOCK TABLE', 'OPTIMIZE TABLE', 'PREPARE', 'PURGE BINARY LOGS', 'PURGE MASTER LOGS', 'RELEASE SAVEPOINT', 'RENAME TABLE', 'RENAME USER', 'REPAIR TABLE', 'REPAIR VIEW', 'REPLACE', 'RESET MASTER', 'RESET QUERY CACHE', 'RESET REPLICA', 'RESET SLAVE', 'RESIGNAL', 'RETURNING', 'REVOKE', 'ROLLBACK', 'SAVEPOINT', 'SELECT', 'SET', 'SET CHARACTER SET', 'SET DEFAULT ROLE', 'SET GLOBAL TRANSACTION', 'SET NAMES', 'SET PASSWORD', 'SET ROLE', 'SET STATEMENT', 'SET TRANSACTION', 'SHOW', 'SHOW ALL REPLICAS STATUS', 'SHOW ALL SLAVES STATUS', 'SHOW AUTHORS', 'SHOW BINARY LOGS', 'SHOW BINLOG EVENTS', 'SHOW BINLOG STATUS', 'SHOW CHARACTER SET', 'SHOW CLIENT_STATISTICS', 'SHOW COLLATION', 'SHOW COLUMNS', 'SHOW CONTRIBUTORS', 'SHOW CREATE DATABASE', 'SHOW CREATE EVENT', 'SHOW CREATE FUNCTION', 'SHOW CREATE PACKAGE', 'SHOW CREATE PACKAGE BODY', 'SHOW CREATE PROCEDURE', 'SHOW CREATE SEQUENCE', 'SHOW CREATE TABLE', 'SHOW CREATE TRIGGER', 'SHOW CREATE USER', 'SHOW CREATE VIEW', 'SHOW DATABASES', 'SHOW ENGINE', 'SHOW ENGINE INNODB STATUS', 'SHOW ENGINES', 'SHOW ERRORS', 'SHOW EVENTS', 'SHOW EXPLAIN', 'SHOW FUNCTION CODE', 'SHOW FUNCTION STATUS', 'SHOW GRANTS', 'SHOW INDEX', 'SHOW INDEXES', 'SHOW INDEX_STATISTICS', 'SHOW KEYS', 'SHOW LOCALES', 'SHOW MASTER LOGS', 'SHOW MASTER STATUS', 'SHOW OPEN TABLES', 'SHOW PACKAGE BODY CODE', 'SHOW PACKAGE BODY STATUS', 'SHOW PACKAGE STATUS', 'SHOW PLUGINS', 'SHOW PLUGINS SONAME', 'SHOW PRIVILEGES', 'SHOW PROCEDURE CODE', 'SHOW PROCEDURE STATUS', 'SHOW PROCESSLIST', 'SHOW PROFILE', 'SHOW PROFILES', 'SHOW QUERY_RESPONSE_TIME', 'SHOW RELAYLOG EVENTS', 'SHOW REPLICA', 'SHOW REPLICA HOSTS', 'SHOW REPLICA STATUS', 'SHOW SCHEMAS', 'SHOW SLAVE', 'SHOW SLAVE HOSTS', 'SHOW SLAVE STATUS', 'SHOW STATUS', 'SHOW STORAGE ENGINES', 'SHOW TABLE STATUS', 'SHOW TABLES', 'SHOW TRIGGERS', 'SHOW USER_STATISTICS', 'SHOW VARIABLES', 'SHOW WARNINGS', 'SHOW WSREP_MEMBERSHIP', 'SHOW WSREP_STATUS', 'SHUTDOWN', 'SIGNAL', 'START ALL REPLICAS', 'START ALL SLAVES', 'START REPLICA', 'START SLAVE', 'START TRANSACTION', 'STOP ALL REPLICAS', 'STOP ALL SLAVES', 'STOP REPLICA', 'STOP SLAVE', 'TRUNCATE', 'TRUNCATE TABLE', 'UNINSTALL PLUGIN', 'UNINSTALL SONAME', 'UNLOCK TABLE', 'UPDATE', 'USE', 'WITH', 'XA BEGIN', 'XA COMMIT', 'XA END', 'XA PREPARE', 'XA RECOVER', 'XA ROLLBACK', 'XA START', // other
|
2701 | 'ADD', 'ALTER COLUMN', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'INSERT', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'VALUES', 'WHERE'];
|
2702 | /**
|
2703 | * Priority 2
|
2704 | * commands that operate on two tables or subqueries
|
2705 | * two main categories: joins and boolean set operators
|
2706 | */
|
2707 |
|
2708 | var reservedBinaryCommands = [// set booleans
|
2709 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
|
2710 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // non-standard joins
|
2711 | 'STRAIGHT_JOIN', 'NATURAL LEFT JOIN', 'NATURAL LEFT OUTER JOIN', 'NATURAL RIGHT JOIN', 'NATURAL RIGHT OUTER JOIN'];
|
2712 | /**
|
2713 | * Priority 3
|
2714 | * keywords that follow a previous Statement, must be attached to subsequent data
|
2715 | * can be fully inline or on newline with optional indent
|
2716 | */
|
2717 |
|
2718 | var reservedDependentClauses = ['WHEN', 'ELSE', 'ELSEIF', 'ELSIF']; // For reference: https://mariadb.com/kb/en/sql-statements-structure/
|
2719 |
|
2720 | var MariaDbFormatter = /*#__PURE__*/function (_Formatter) {
|
2721 | _inherits(MariaDbFormatter, _Formatter);
|
2722 |
|
2723 | var _super = _createSuper(MariaDbFormatter);
|
2724 |
|
2725 | function MariaDbFormatter() {
|
2726 | _classCallCheck(this, MariaDbFormatter);
|
2727 |
|
2728 | return _super.apply(this, arguments);
|
2729 | }
|
2730 |
|
2731 | _createClass(MariaDbFormatter, [{
|
2732 | key: "tokenizer",
|
2733 | value: function tokenizer() {
|
2734 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
2735 | reservedCommands: MariaDbFormatter.reservedCommands,
|
2736 | reservedBinaryCommands: MariaDbFormatter.reservedBinaryCommands,
|
2737 | reservedDependentClauses: MariaDbFormatter.reservedDependentClauses,
|
2738 | reservedJoinConditions: MariaDbFormatter.reservedJoinConditions,
|
2739 | reservedLogicalOperators: MariaDbFormatter.reservedLogicalOperators,
|
2740 | reservedKeywords: MariaDbFormatter.reservedKeywords,
|
2741 | stringTypes: MariaDbFormatter.stringTypes,
|
2742 | blockStart: MariaDbFormatter.blockStart,
|
2743 | blockEnd: MariaDbFormatter.blockEnd,
|
2744 | indexedPlaceholderTypes: MariaDbFormatter.indexedPlaceholderTypes,
|
2745 | namedPlaceholderTypes: MariaDbFormatter.namedPlaceholderTypes,
|
2746 | lineCommentTypes: MariaDbFormatter.lineCommentTypes,
|
2747 | specialWordChars: MariaDbFormatter.specialWordChars,
|
2748 | operators: MariaDbFormatter.operators
|
2749 | });
|
2750 | }
|
2751 | }, {
|
2752 | key: "tokenOverride",
|
2753 | value: function tokenOverride(token) {
|
2754 | // [SET] ( ...
|
2755 | if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.SET(token) && this.tokenLookAhead().value === '(') {
|
2756 | // This is SET datatype, not SET statement
|
2757 | return {
|
2758 | type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
|
2759 | value: token.value
|
2760 | };
|
2761 | }
|
2762 |
|
2763 | return token;
|
2764 | }
|
2765 | }]);
|
2766 |
|
2767 | return MariaDbFormatter;
|
2768 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
2769 |
|
2770 |
|
2771 | MariaDbFormatter.reservedCommands = reservedCommands;
|
2772 | MariaDbFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
2773 | MariaDbFormatter.reservedJoinConditions = ['ON', 'USING'];
|
2774 | MariaDbFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
|
2775 | MariaDbFormatter.reservedDependentClauses = reservedDependentClauses;
|
2776 | MariaDbFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)([].concat(reservedKeywords, reservedFunctions));
|
2777 | MariaDbFormatter.stringTypes = ['``', "''", '""'];
|
2778 | MariaDbFormatter.blockStart = ['(', 'CASE'];
|
2779 | MariaDbFormatter.blockEnd = [')', 'END'];
|
2780 | MariaDbFormatter.indexedPlaceholderTypes = ['?'];
|
2781 | MariaDbFormatter.namedPlaceholderTypes = [];
|
2782 | MariaDbFormatter.lineCommentTypes = ['--', '#'];
|
2783 | MariaDbFormatter.specialWordChars = {
|
2784 | prefix: '@'
|
2785 | };
|
2786 | MariaDbFormatter.operators = [':=', '<<', '>>', '<=>', '&&', '||'];
|
2787 |
|
2788 | /***/ }),
|
2789 |
|
2790 | /***/ "./src/languages/mysql.formatter.ts":
|
2791 | /*!******************************************!*\
|
2792 | !*** ./src/languages/mysql.formatter.ts ***!
|
2793 | \******************************************/
|
2794 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
2795 |
|
2796 | __webpack_require__.r(__webpack_exports__);
|
2797 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
2798 | /* harmony export */ "default": () => (/* binding */ MySqlFormatter)
|
2799 | /* harmony export */ });
|
2800 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
2801 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
2802 | /* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
|
2803 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
2804 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
2805 |
|
2806 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
2807 |
|
2808 | 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); } }
|
2809 |
|
2810 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
2811 |
|
2812 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
2813 |
|
2814 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
2815 |
|
2816 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
2817 |
|
2818 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
2819 |
|
2820 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
2821 |
|
2822 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
2823 |
|
2824 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
2825 |
|
2826 |
|
2827 |
|
2828 |
|
2829 | // TODO: split this into object with function categories
|
2830 |
|
2831 | /**
|
2832 | * Priority 5 (last)
|
2833 | * Full list of reserved functions
|
2834 | * distinct from Keywords due to interaction with parentheses
|
2835 | */
|
2836 | // https://dev.mysql.com/doc/refman/8.0/en/built-in-function-reference.html
|
2837 |
|
2838 | var reservedFunctions = ['ABS', 'ACOS', 'ADDDATE', 'ADDTIME', 'AES_DECRYPT', 'AES_ENCRYPT', 'AND', 'ANY_VALUE', 'ASCII', 'ASIN', 'ATAN', 'ATAN2', 'AVG', 'BENCHMARK', 'BIN', 'BIN_TO_UUID', 'BINARY', 'BIT_AND', 'BIT_COUNT', 'BIT_LENGTH', 'BIT_OR', 'BIT_XOR', 'CAN_ACCESS_COLUMN', 'CAN_ACCESS_DATABASE', 'CAN_ACCESS_TABLE', 'CAN_ACCESS_USER', 'CAN_ACCESS_VIEW', 'CASE', 'CAST', 'CEIL', 'CEILING', 'CHAR', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHARSET', 'COALESCE', 'COERCIBILITY', 'COLLATION', 'COMPRESS', 'CONCAT', 'CONCAT_WS', 'CONNECTION_ID', 'CONV', 'CONVERT', 'CONVERT_TZ', 'COS', 'COT', 'COUNT', 'CRC32', 'CUME_DIST', 'CURDATE', 'CURRENT_DATE', 'CURRENT_ROLE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURTIME', 'DATABASE', 'DATE', 'DATE_ADD', 'DATE_FORMAT', 'DATE_SUB', 'DATEDIFF', 'DAY', 'DAYNAME', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'DEFAULT', 'DEGREES', 'DENSE_RANK', 'DIV', 'ELT', 'EXP', 'EXPORT_SET', 'EXTRACT', 'ExtractValue', 'FIELD', 'FIND_IN_SET', 'FIRST_VALUE', 'FLOOR', 'FORMAT', 'FORMAT_BYTES', 'FORMAT_PICO_TIME', 'FOUND_ROWS', 'FROM_BASE64', 'FROM_DAYS', 'FROM_UNIXTIME', 'GeomCollection', 'GeometryCollection', 'GET_DD_COLUMN_PRIVILEGES', 'GET_DD_CREATE_OPTIONS', 'GET_DD_INDEX_SUB_PART_LENGTH', 'GET_FORMAT', 'GET_LOCK', 'GREATEST', 'GROUP_CONCAT', 'GROUPING', 'GTID_SUBSET', 'GTID_SUBTRACT', 'HEX', 'HOUR', 'ICU_VERSION', 'IF', 'IFNULL', 'IN', 'INET_ATON', 'INET_NTOA', 'INET6_ATON', 'INET6_NTOA', 'INSERT', 'INSTR', 'INTERNAL_AUTO_INCREMENT', 'INTERNAL_AVG_ROW_LENGTH', 'INTERNAL_CHECK_TIME', 'INTERNAL_CHECKSUM', 'INTERNAL_DATA_FREE', 'INTERNAL_DATA_LENGTH', 'INTERNAL_DD_CHAR_LENGTH', 'INTERNAL_GET_COMMENT_OR_ERROR', 'INTERNAL_GET_ENABLED_ROLE_JSON', 'INTERNAL_GET_HOSTNAME', 'INTERNAL_GET_USERNAME', 'INTERNAL_GET_VIEW_WARNING_OR_ERROR', 'INTERNAL_INDEX_COLUMN_CARDINALITY', 'INTERNAL_INDEX_LENGTH', 'INTERNAL_IS_ENABLED_ROLE', 'INTERNAL_IS_MANDATORY_ROLE', 'INTERNAL_KEYS_DISABLED', 'INTERNAL_MAX_DATA_LENGTH', 'INTERNAL_TABLE_ROWS', 'INTERNAL_UPDATE_TIME', 'INTERVAL', 'IS', 'IS_FREE_LOCK', 'IS_IPV4', 'IS_IPV4_COMPAT', 'IS_IPV4_MAPPED', 'IS_IPV6', 'IS NOT', 'IS NOT NULL', 'IS NULL', 'IS_USED_LOCK', 'IS_UUID', 'ISNULL', 'JSON_ARRAY', 'JSON_ARRAY_APPEND', 'JSON_ARRAY_INSERT', 'JSON_ARRAYAGG', 'JSON_CONTAINS', 'JSON_CONTAINS_PATH', 'JSON_DEPTH', 'JSON_EXTRACT', 'JSON_INSERT', 'JSON_KEYS', 'JSON_LENGTH', 'JSON_MERGE', 'JSON_MERGE_PATCH', 'JSON_MERGE_PRESERVE', 'JSON_OBJECT', 'JSON_OBJECTAGG', 'JSON_OVERLAPS', 'JSON_PRETTY', 'JSON_QUOTE', 'JSON_REMOVE', 'JSON_REPLACE', 'JSON_SCHEMA_VALID', 'JSON_SCHEMA_VALIDATION_REPORT', 'JSON_SEARCH', 'JSON_SET', 'JSON_STORAGE_FREE', 'JSON_STORAGE_SIZE', 'JSON_TABLE', 'JSON_TYPE', 'JSON_UNQUOTE', 'JSON_VALID', 'JSON_VALUE', 'LAG', 'LAST_DAY', 'LAST_INSERT_ID', 'LAST_VALUE', 'LCASE', 'LEAD', 'LEAST', 'LEFT', 'LENGTH', 'LIKE', 'LineString', 'LN', 'LOAD_FILE', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATE', 'LOG', 'LOG10', 'LOG2', 'LOWER', 'LPAD', 'LTRIM', 'MAKE_SET', 'MAKEDATE', 'MAKETIME', 'MASTER_POS_WAIT', 'MATCH', 'MAX', 'MBRContains', 'MBRCoveredBy', 'MBRCovers', 'MBRDisjoint', 'MBREquals', 'MBRIntersects', 'MBROverlaps', 'MBRTouches', 'MBRWithin', 'MD5', 'MEMBER OF', 'MICROSECOND', 'MID', 'MIN', 'MINUTE', 'MOD', 'MONTH', 'MONTHNAME', 'MultiLineString', 'MultiPoint', 'MultiPolygon', 'NAME_CONST', 'NOT', 'NOT IN', 'NOT LIKE', 'NOT REGEXP', 'NOW', 'NTH_VALUE', 'NTILE', 'NULLIF', 'OCT', 'OCTET_LENGTH', 'OR', 'ORD', 'PERCENT_RANK', 'PERIOD_ADD', 'PERIOD_DIFF', 'PI', 'Point', 'Polygon', 'POSITION', 'POW', 'POWER', 'PS_CURRENT_THREAD_ID', 'PS_THREAD_ID', 'QUARTER', 'QUOTE', 'RADIANS', 'RAND', 'RANDOM_BYTES', 'RANK', 'REGEXP', 'REGEXP_INSTR', 'REGEXP_LIKE', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'RELEASE_ALL_LOCKS', 'RELEASE_LOCK', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'RLIKE', 'ROLES_GRAPHML', 'ROUND', 'ROW_COUNT', 'ROW_NUMBER', 'RPAD', 'RTRIM', 'SCHEMA', 'SEC_TO_TIME', 'SECOND', 'SESSION_USER', 'SHA1', 'SHA2', 'SIGN', 'SIN', 'SLEEP', 'SOUNDEX', 'SOUNDS LIKE', 'SOURCE_POS_WAIT', 'SPACE', 'SQRT', 'ST_Area', 'ST_AsBinary', 'ST_AsGeoJSON', 'ST_AsText', 'ST_Buffer', 'ST_Buffer_Strategy', 'ST_Centroid', 'ST_Collect', 'ST_Contains', 'ST_ConvexHull', 'ST_Crosses', 'ST_Difference', 'ST_Dimension', 'ST_Disjoint', 'ST_Distance', 'ST_Distance_Sphere', 'ST_EndPoint', 'ST_Envelope', 'ST_Equals', 'ST_ExteriorRing', 'ST_FrechetDistance', 'ST_GeoHash', 'ST_GeomCollFromText', 'ST_GeomCollFromWKB', 'ST_GeometryN', 'ST_GeometryType', 'ST_GeomFromGeoJSON', 'ST_GeomFromText', 'ST_GeomFromWKB', 'ST_HausdorffDistance', 'ST_InteriorRingN', 'ST_Intersection', 'ST_Intersects', 'ST_IsClosed', 'ST_IsEmpty', 'ST_IsSimple', 'ST_IsValid', 'ST_LatFromGeoHash', 'ST_Latitude', 'ST_Length', 'ST_LineFromText', 'ST_LineFromWKB', 'ST_LineInterpolatePoint', 'ST_LineInterpolatePoints', 'ST_LongFromGeoHash', 'ST_Longitude', 'ST_MakeEnvelope', 'ST_MLineFromText', 'ST_MLineFromWKB', 'ST_MPointFromText', 'ST_MPointFromWKB', 'ST_MPolyFromText', 'ST_MPolyFromWKB', 'ST_NumGeometries', 'ST_NumInteriorRing', 'ST_NumPoints', 'ST_Overlaps', 'ST_PointAtDistance', 'ST_PointFromGeoHash', 'ST_PointFromText', 'ST_PointFromWKB', 'ST_PointN', 'ST_PolyFromText', 'ST_PolyFromWKB', 'ST_Simplify', 'ST_SRID', 'ST_StartPoint', 'ST_SwapXY', 'ST_SymDifference', 'ST_Touches', 'ST_Transform', 'ST_Union', 'ST_Validate', 'ST_Within', 'ST_X', 'ST_Y', 'STATEMENT_DIGEST', 'STATEMENT_DIGEST_TEXT', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'STR_TO_DATE', 'STRCMP', 'SUBDATE', 'SUBSTR', 'SUBSTRING', 'SUBSTRING_INDEX', 'SUBTIME', 'SUM', 'SYSDATE', 'SYSTEM_USER', 'TAN', 'TIME', 'TIME_FORMAT', 'TIME_TO_SEC', 'TIMEDIFF', 'TIMESTAMP', 'TIMESTAMPADD', 'TIMESTAMPDIFF', 'TO_BASE64', 'TO_DAYS', 'TO_SECONDS', 'TRIM', 'TRUNCATE', 'UCASE', 'UNCOMPRESS', 'UNCOMPRESSED_LENGTH', 'UNHEX', 'UNIX_TIMESTAMP', 'UpdateXML', 'UPPER', 'USER', 'UTC_DATE', 'UTC_TIME', 'UTC_TIMESTAMP', 'UUID', 'UUID_SHORT', 'UUID_TO_BIN', 'VALIDATE_PASSWORD_STRENGTH', 'VALUES', 'VAR_POP', 'VAR_SAMP', 'VARIANCE', 'VERSION', 'WAIT_FOR_EXECUTED_GTID_SET', 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS', 'WEEK', 'WEEKDAY', 'WEEKOFYEAR', 'WEIGHT_STRING', 'XOR', 'YEAR', 'YEARWEEK'];
|
2839 | /**
|
2840 | * Priority 5 (last)
|
2841 | * Full list of reserved words
|
2842 | * any words that are in a higher priority are removed
|
2843 | */
|
2844 | // https://dev.mysql.com/doc/refman/8.0/en/keywords.html
|
2845 |
|
2846 | var reservedKeywords = ['ACCESSIBLE', 'ACCOUNT', 'ACTION', 'ACTIVE', 'ADMIN', 'AFTER', 'AGAINST', 'AGGREGATE', 'ALGORITHM', 'ALL', 'ALTER', 'ALWAYS', 'ANALYSE', 'ANALYZE', 'ANY', 'ARRAY', 'AS', 'ASC', 'ASENSITIVE', 'AT', 'ATTRIBUTE', 'AUTHENTICATION', 'AUTOEXTEND_SIZE', 'AUTO_INCREMENT', 'AVG_ROW_LENGTH', 'BACKUP', 'BEFORE', 'BEGIN', 'BETWEEN', 'BIGINT', 'BIT', 'BLOB', 'BLOCK', 'BOOL', 'BOOLEAN', 'BOTH', 'BTREE', 'BUCKETS', 'BY', 'BYTE', 'CACHE', 'CASCADE', 'CASCADED', 'CATALOG_NAME', 'CHAIN', 'CHALLENGE_RESPONSE', 'CHANGE', 'CHANGED', 'CHANNEL', 'CHARACTER', 'CHARACTER SET', 'CHECK', 'CHECKSUM', 'CIPHER', 'CLASS_ORIGIN', 'CLIENT', 'CLOSE', 'CODE', 'COLLATE', 'COLUMN', 'COLUMNS', 'COLUMN_FORMAT', 'COLUMN_NAME', 'COMMENT', 'COMMITTED', 'COMPACT', 'COMPLETION', 'COMPONENT', 'COMPRESSED', 'COMPRESSION', 'CONCURRENT', 'CONDITION', 'CONNECTION', 'CONSISTENT', 'CONSTRAINT', 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONTAINS', 'CONTEXT', 'CONTINUE', 'CPU', 'CREATE', 'CROSS', 'CUBE', 'CURRENT', 'CURSOR', 'CURSOR_NAME', 'DATA', 'DATABASES', 'DATAFILE', 'DATETIME', 'DAY_HOUR', 'DAY_MICROSECOND', 'DAY_MINUTE', 'DAY_SECOND', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT_AUTH', 'DEFINER', 'DEFINITION', 'DELAYED', 'DELAY_KEY_WRITE', 'DESC', 'DESCRIPTION', 'DES_KEY_FILE', 'DETERMINISTIC', 'DIAGNOSTICS', 'DIRECTORY', 'DISABLE', 'DISCARD', 'DISK', 'DISTINCT', 'DISTINCTROW', 'DOUBLE', 'DROP', 'DUAL', 'DUMPFILE', 'DUPLICATE', 'DYNAMIC', 'EACH', 'EMPTY', 'ENABLE', 'ENCLOSED', 'ENCRYPTION', 'ENDS', 'ENFORCED', 'ENGINE', 'ENGINES', 'ENGINE_ATTRIBUTE', 'ENUM', 'ERROR', 'ERRORS', 'ESCAPE', 'ESCAPED', 'EVENT', 'EVENTS', 'EVERY', 'EXCHANGE', 'EXCLUDE', 'EXISTS', 'EXIT', 'EXPANSION', 'EXPIRE', 'EXPORT', 'EXTENDED', 'EXTENT_SIZE', 'FACTOR', 'FAILED_LOGIN_ATTEMPTS', 'FALSE', 'FAST', 'FAULTS', 'FETCH', 'FIELDS', 'FILE', 'FILE_BLOCK_SIZE', 'FILTER', 'FINISH', 'FIRST', 'FIXED', 'FLOAT', 'FLOAT4', 'FLOAT8', 'FOLLOWING', 'FOLLOWS', 'FOR', 'FORCE', 'FOREIGN', 'FOUND', 'FULL', 'FULLTEXT', 'FUNCTION', 'GENERAL', 'GENERATED', 'GEOMCOLLECTION', 'GEOMETRY', 'GEOMETRYCOLLECTION', 'GET', 'GET_MASTER_PUBLIC_KEY', 'GET_SOURCE_PUBLIC_KEY', 'GLOBAL', '@@GLOBAL', 'GRANTS', 'GROUP', 'GROUPS', 'GROUP_REPLICATION', 'GTID_ONLY', 'HASH', 'HIGH_PRIORITY', 'HISTOGRAM', 'HISTORY', 'HOST', 'HOSTS', 'HOUR_MICROSECOND', 'HOUR_MINUTE', 'HOUR_SECOND', 'IDENTIFIED', 'IGNORE', 'IGNORE_SERVER_IDS', 'IMPORT', 'INACTIVE', 'INDEX', 'INDEXES', 'INFILE', 'INITIAL', 'INITIAL_SIZE', 'INITIATE', 'INNER', 'INOUT', 'INSENSITIVE', 'INSERT_METHOD', 'INSTALL', 'INSTANCE', 'INT', 'INT1', 'INT2', 'INT3', 'INT4', 'INT8', 'INTEGER', 'INTO', 'INVISIBLE', 'INVOKER', 'IO', 'IO_AFTER_GTIDS', 'IO_BEFORE_GTIDS', 'IO_THREAD', 'IPC', 'ISOLATION', 'ISSUER', 'ITERATE', 'JSON', 'KEY', 'KEYRING', 'KEYS', 'KEY_BLOCK_SIZE', 'LANGUAGE', 'LAST', 'LATERAL', 'LEADING', 'LEAVE', 'LEAVES', 'LESS', 'LEVEL', 'LINEAR', 'LINES', 'LINESTRING', 'LIST', 'LOAD', 'LOCAL', 'LOCK', 'LOCKED', 'LOCKS', 'LOGFILE', 'LOGS', 'LONG', 'LONGBLOB', 'LONGTEXT', 'LOOP', 'LOW_PRIORITY', 'MASTER', 'MASTER_AUTO_POSITION', 'MASTER_BIND', 'MASTER_COMPRESSION_ALGORITHMS', 'MASTER_CONNECT_RETRY', 'MASTER_DELAY', 'MASTER_HEARTBEAT_PERIOD', 'MASTER_HOST', 'MASTER_LOG_FILE', 'MASTER_LOG_POS', 'MASTER_PASSWORD', 'MASTER_PORT', 'MASTER_PUBLIC_KEY_PATH', 'MASTER_RETRY_COUNT', 'MASTER_SERVER_ID', 'MASTER_SSL', 'MASTER_SSL_CA', 'MASTER_SSL_CAPATH', 'MASTER_SSL_CERT', 'MASTER_SSL_CIPHER', 'MASTER_SSL_CRL', 'MASTER_SSL_CRLPATH', 'MASTER_SSL_KEY', 'MASTER_SSL_VERIFY_SERVER_CERT', 'MASTER_TLS_CIPHERSUITES', 'MASTER_TLS_VERSION', 'MASTER_USER', 'MASTER_ZSTD_COMPRESSION_LEVEL', 'MAXVALUE', 'MAX_CONNECTIONS_PER_HOUR', 'MAX_QUERIES_PER_HOUR', 'MAX_ROWS', 'MAX_SIZE', 'MAX_UPDATES_PER_HOUR', 'MAX_USER_CONNECTIONS', 'MEDIUM', 'MEDIUMBLOB', 'MEDIUMINT', 'MEDIUMTEXT', 'MEMBER', 'MEMORY', 'MERGE', 'MESSAGE_TEXT', 'MIDDLEINT', 'MIGRATE', 'MINUTE_MICROSECOND', 'MINUTE_SECOND', 'MIN_ROWS', 'MODE', 'MODIFIES', 'MODIFY', 'MULTILINESTRING', 'MULTIPOINT', 'MULTIPOLYGON', 'MUTEX', 'MYSQL_ERRNO', 'NAME', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NDB', 'NDBCLUSTER', 'NESTED', 'NETWORK_NAMESPACE', 'NEVER', 'NEW', 'NEXT', 'NO', 'NODEGROUP', 'NONE', 'NOWAIT', 'NO_WAIT', 'NO_WRITE_TO_BINLOG', 'NULL', 'NULLS', 'NUMBER', 'NUMERIC', 'NVARCHAR', 'OF', 'OFF', 'OFFSET', 'OJ', 'OLD', 'ON DELETE', 'ON UPDATE', 'ONE', 'ONLY', 'OPEN', 'OPTIMIZE', 'OPTIMIZER_COSTS', 'OPTION', 'OPTIONAL', 'OPTIONALLY', 'OPTIONS', 'ORDER', 'ORDINALITY', 'ORGANIZATION', 'OTHERS', 'OUT', 'OUTER', 'OUTFILE', 'OVER', 'OWNER', 'PACK_KEYS', 'PAGE', 'PARSER', 'PARSE_GCOL_EXPR', 'PARTIAL', 'PARTITION', 'PARTITIONING', 'PARTITIONS', 'PASSWORD', 'PASSWORD_LOCK_TIME', 'PATH', 'PERSIST', '@@PERSIST', 'PERSIST_ONLY', '@@PERSIST_ONLY', 'PHASE', 'PLUGIN', 'PLUGINS', 'PLUGIN_DIR', 'POINT', 'POLYGON', 'PORT', 'PRECEDES', 'PRECEDING', 'PRECISION', 'PRESERVE', 'PREV', 'PRIMARY', 'PRIVILEGES', 'PRIVILEGE_CHECKS_USER', 'PROCEDURE', 'PROCESS', 'PROCESSLIST', 'PROFILE', 'PROFILES', 'PROXY', 'PURGE', 'QUERY', 'QUICK', 'RANDOM', 'RANGE', 'READ', 'READS', 'READ_ONLY', 'READ_WRITE', 'REAL', 'REBUILD', 'RECOVER', 'RECURSIVE', 'REDOFILE', 'REDO_BUFFER_SIZE', 'REDUNDANT', 'REFERENCE', 'REFERENCES', 'REGISTRATION', 'RELAY', 'RELAYLOG', 'RELAY_LOG_FILE', 'RELAY_LOG_POS', 'RELAY_THREAD', 'RELEASE', 'RELOAD', 'REMOTE', 'REMOVE', 'RENAME', 'REORGANIZE', 'REPAIR', 'REPEATABLE', 'REPLICA', 'REPLICAS', 'REPLICATE_DO_DB', 'REPLICATE_DO_TABLE', 'REPLICATE_IGNORE_DB', 'REPLICATE_IGNORE_TABLE', 'REPLICATE_REWRITE_DB', 'REPLICATE_WILD_DO_TABLE', 'REPLICATE_WILD_IGNORE_TABLE', 'REPLICATION', 'REQUIRE', 'REQUIRE_ROW_FORMAT', 'RESIGNAL', 'RESOURCE', 'RESPECT', 'RESTORE', 'RESTRICT', 'RESUME', 'RETAIN', 'RETURN', 'RETURNED_SQLSTATE', 'RETURNING', 'RETURNS', 'REUSE', 'ROLE', 'ROLLUP', 'ROTATE', 'ROUTINE', 'ROW', 'ROWS', 'ROW_FORMAT', 'RTREE', 'SCHEDULE', 'SCHEMAS', 'SCHEMA_NAME', 'SECONDARY', 'SECONDARY_ENGINE', 'SECONDARY_ENGINE_ATTRIBUTE', 'SECONDARY_LOAD', 'SECONDARY_UNLOAD', 'SECOND_MICROSECOND', 'SECURITY', 'SENSITIVE', 'SEPARATOR', 'SERIAL', 'SERIALIZABLE', 'SERVER', 'SESSION', '@@SESSION', 'SHARE', 'SIGNAL', 'SIGNED', 'SIMPLE', 'SKIP', 'SLAVE', 'SLOW', 'SMALLINT', 'SNAPSHOT', 'SOCKET', 'SOME', 'SONAME', 'SOUNDS', 'SOURCE', 'SOURCE_AUTO_POSITION', 'SOURCE_BIND', 'SOURCE_COMPRESSION_ALGORITHMS', 'SOURCE_CONNECT_RETRY', 'SOURCE_DELAY', 'SOURCE_HEARTBEAT_PERIOD', 'SOURCE_HOST', 'SOURCE_LOG_FILE', 'SOURCE_LOG_POS', 'SOURCE_PASSWORD', 'SOURCE_PORT', 'SOURCE_PUBLIC_KEY_PATH', 'SOURCE_RETRY_COUNT', 'SOURCE_SSL', 'SOURCE_SSL_CA', 'SOURCE_SSL_CAPATH', 'SOURCE_SSL_CERT', 'SOURCE_SSL_CIPHER', 'SOURCE_SSL_CRL', 'SOURCE_SSL_CRLPATH', 'SOURCE_SSL_KEY', 'SOURCE_SSL_VERIFY_SERVER_CERT', 'SOURCE_TLS_CIPHERSUITES', 'SOURCE_TLS_VERSION', 'SOURCE_USER', 'SOURCE_ZSTD_COMPRESSION_LEVEL', 'SPATIAL', 'SPECIFIC', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'SQL_AFTER_GTIDS', 'SQL_AFTER_MTS_GAPS', 'SQL_BEFORE_GTIDS', 'SQL_BIG_RESULT', 'SQL_BUFFER_RESULT', 'SQL_CACHE', 'SQL_CALC_FOUND_ROWS', 'SQL_NO_CACHE', 'SQL_SMALL_RESULT', 'SQL_THREAD', 'SQL_TSI_DAY', 'SQL_TSI_HOUR', 'SQL_TSI_MINUTE', 'SQL_TSI_MONTH', 'SQL_TSI_QUARTER', 'SQL_TSI_SECOND', 'SQL_TSI_WEEK', 'SQL_TSI_YEAR', 'SRID', 'SSL', 'STACKED', 'START', 'STARTING', 'STARTS', 'STATS_AUTO_RECALC', 'STATS_PERSISTENT', 'STATS_SAMPLE_PAGES', 'STATUS', 'STOP', 'STORAGE', 'STORED', 'STREAM', 'STRING', 'SUBCLASS_ORIGIN', 'SUBJECT', 'SUBPARTITION', 'SUBPARTITIONS', 'SUPER', 'SUSPEND', 'SWAPS', 'SWITCHES', 'SYSTEM', 'TABLES', 'TABLESPACE', 'TABLE_CHECKSUM', 'TABLE_NAME', 'TEMPORARY', 'TEMPTABLE', 'TERMINATED', 'TEXT', 'THAN', 'THEN', 'THREAD_PRIORITY', 'TIES', 'TINYBLOB', 'TINYINT', 'TINYTEXT', 'TLS', 'TO', 'TRAILING', 'TRANSACTION', 'TRIGGER', 'TRIGGERS', 'TRUE', 'TYPE', 'TYPES', 'UNBOUNDED', 'UNCOMMITTED', 'UNDEFINED', 'UNDO', 'UNDOFILE', 'UNDO_BUFFER_SIZE', 'UNICODE', 'UNINSTALL', 'UNIQUE', 'UNKNOWN', 'UNLOCK', 'UNREGISTER', 'UNSIGNED', 'UNTIL', 'UPGRADE', 'USAGE', 'USER_RESOURCES', 'USE_FRM', 'VALIDATION', 'VALUE', 'VARBINARY', 'VARCHAR', 'VARCHARACTER', 'VARIABLES', 'VARYING', 'VCPU', 'VIEW', 'VIRTUAL', 'VISIBLE', 'WAIT', 'WARNINGS', 'WHILE', 'WINDOW', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', 'X509', 'XID', 'XML', 'YEAR_MONTH', 'ZEROFILL', 'ZONE'];
|
2847 | /**
|
2848 | * Priority 1 (first)
|
2849 | * keywords that begin a new statement
|
2850 | * will begin new indented block
|
2851 | */
|
2852 | // https://dev.mysql.com/doc/refman/8.0/en/sql-statements.html
|
2853 |
|
2854 | var reservedCommands = ['ALTER DATABASE', 'ALTER EVENT', 'ALTER FUNCTION', 'ALTER INSTANCE', 'ALTER LOGFILE GROUP', 'ALTER PROCEDURE', 'ALTER RESOURCE GROUP', 'ALTER SERVER', 'ALTER TABLE', 'ALTER TABLESPACE', 'ALTER USER', 'ALTER VIEW', 'ANALYZE TABLE', 'BINLOG', 'CACHE INDEX', 'CALL', 'CHANGE MASTER TO', 'CHANGE REPLICATION FILTER', 'CHANGE REPLICATION SOURCE TO', 'CHECK TABLE', 'CHECKSUM TABLE', 'CLONE', 'COMMIT', 'CREATE DATABASE', 'CREATE EVENT', 'CREATE FUNCTION', 'CREATE FUNCTION', 'CREATE INDEX', 'CREATE LOGFILE GROUP', 'CREATE PROCEDURE', 'CREATE RESOURCE GROUP', 'CREATE ROLE', 'CREATE SERVER', 'CREATE SPATIAL REFERENCE SYSTEM', 'CREATE TABLE', 'CREATE TABLESPACE', 'CREATE TRIGGER', 'CREATE USER', 'CREATE VIEW', 'DEALLOCATE PREPARE', 'DELETE', 'DESCRIBE', 'DO', 'DROP DATABASE', 'DROP EVENT', 'DROP FUNCTION', 'DROP FUNCTION', 'DROP INDEX', 'DROP LOGFILE GROUP', 'DROP PROCEDURE', 'DROP RESOURCE GROUP', 'DROP ROLE', 'DROP SERVER', 'DROP SPATIAL REFERENCE SYSTEM', 'DROP TABLE', 'DROP TABLESPACE', 'DROP TRIGGER', 'DROP USER', 'DROP VIEW', 'EXECUTE', 'EXPLAIN', 'FLUSH', 'GRANT', 'HANDLER', 'HELP', 'IMPORT TABLE', 'INSERT', 'INSTALL COMPONENT', 'INSTALL PLUGIN', 'KILL', 'LOAD DATA', 'LOAD INDEX INTO CACHE', 'LOAD XML', 'LOCK INSTANCE FOR BACKUP', 'LOCK TABLES', 'MASTER_POS_WAIT', 'OPTIMIZE TABLE', 'PREPARE', 'PURGE BINARY LOGS', 'RELEASE SAVEPOINT', 'RENAME TABLE', 'RENAME USER', 'REPAIR TABLE', 'REPLACE', 'RESET', 'RESET MASTER', 'RESET PERSIST', 'RESET REPLICA', 'RESET SLAVE', 'RESTART', 'REVOKE', 'ROLLBACK', 'ROLLBACK TO SAVEPOINT', 'SAVEPOINT', 'SELECT', 'SET', 'SET CHARACTER SET', 'SET DEFAULT ROLE', 'SET NAMES', 'SET PASSWORD', 'SET RESOURCE GROUP', 'SET ROLE', 'SET TRANSACTION', 'SHOW', 'SHOW BINARY LOGS', 'SHOW BINLOG EVENTS', 'SHOW CHARACTER SET', 'SHOW COLLATION', 'SHOW COLUMNS', 'SHOW CREATE DATABASE', 'SHOW CREATE EVENT', 'SHOW CREATE FUNCTION', 'SHOW CREATE PROCEDURE', 'SHOW CREATE TABLE', 'SHOW CREATE TRIGGER', 'SHOW CREATE USER', 'SHOW CREATE VIEW', 'SHOW DATABASES', 'SHOW ENGINE', 'SHOW ENGINES', 'SHOW ERRORS', 'SHOW EVENTS', 'SHOW FUNCTION CODE', 'SHOW FUNCTION STATUS', 'SHOW GRANTS', 'SHOW INDEX', 'SHOW MASTER STATUS', 'SHOW OPEN TABLES', 'SHOW PLUGINS', 'SHOW PRIVILEGES', 'SHOW PROCEDURE CODE', 'SHOW PROCEDURE STATUS', 'SHOW PROCESSLIST', 'SHOW PROFILE', 'SHOW PROFILES', 'SHOW RELAYLOG EVENTS', 'SHOW REPLICA STATUS', 'SHOW REPLICAS', 'SHOW SLAVE', 'SHOW SLAVE HOSTS', 'SHOW STATUS', 'SHOW TABLE STATUS', 'SHOW TABLES', 'SHOW TRIGGERS', 'SHOW VARIABLES', 'SHOW WARNINGS', 'SHUTDOWN', 'SOURCE_POS_WAIT', 'START GROUP_REPLICATION', 'START REPLICA', 'START SLAVE', 'START TRANSACTION', 'STOP GROUP_REPLICATION', 'STOP REPLICA', 'STOP SLAVE', 'TABLE', 'TRUNCATE TABLE', 'UNINSTALL COMPONENT', 'UNINSTALL PLUGIN', 'UNLOCK INSTANCE', 'UNLOCK TABLES', 'UPDATE', 'USE', 'VALUES', 'WITH', 'XA', // flow control
|
2855 | // 'IF',
|
2856 | 'ITERATE', 'LEAVE', 'LOOP', 'REPEAT', 'RETURN', 'WHILE', // other
|
2857 | 'ADD', 'ALTER COLUMN', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'WHERE'];
|
2858 | /**
|
2859 | * Priority 2
|
2860 | * commands that operate on two tables or subqueries
|
2861 | * two main categories: joins and boolean set operators
|
2862 | */
|
2863 |
|
2864 | var reservedBinaryCommands = [// set booleans
|
2865 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
|
2866 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // non-standard joins
|
2867 | 'STRAIGHT_JOIN', 'NATURAL LEFT JOIN', 'NATURAL LEFT OUTER JOIN', 'NATURAL RIGHT JOIN', 'NATURAL RIGHT OUTER JOIN'];
|
2868 | /**
|
2869 | * Priority 3
|
2870 | * keywords that follow a previous Statement, must be attached to subsequent data
|
2871 | * can be fully inline or on newline with optional indent
|
2872 | */
|
2873 |
|
2874 | var reservedDependentClauses = ['WHEN', 'ELSE', 'ELSEIF']; // https://dev.mysql.com/doc/refman/8.0/en/
|
2875 |
|
2876 | var MySqlFormatter = /*#__PURE__*/function (_Formatter) {
|
2877 | _inherits(MySqlFormatter, _Formatter);
|
2878 |
|
2879 | var _super = _createSuper(MySqlFormatter);
|
2880 |
|
2881 | function MySqlFormatter() {
|
2882 | _classCallCheck(this, MySqlFormatter);
|
2883 |
|
2884 | return _super.apply(this, arguments);
|
2885 | }
|
2886 |
|
2887 | _createClass(MySqlFormatter, [{
|
2888 | key: "tokenizer",
|
2889 | value: function tokenizer() {
|
2890 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
2891 | reservedCommands: MySqlFormatter.reservedCommands,
|
2892 | reservedBinaryCommands: MySqlFormatter.reservedBinaryCommands,
|
2893 | reservedDependentClauses: MySqlFormatter.reservedDependentClauses,
|
2894 | reservedJoinConditions: MySqlFormatter.reservedJoinConditions,
|
2895 | reservedLogicalOperators: MySqlFormatter.reservedLogicalOperators,
|
2896 | reservedKeywords: MySqlFormatter.reservedKeywords,
|
2897 | stringTypes: MySqlFormatter.stringTypes,
|
2898 | blockStart: MySqlFormatter.blockStart,
|
2899 | blockEnd: MySqlFormatter.blockEnd,
|
2900 | indexedPlaceholderTypes: MySqlFormatter.indexedPlaceholderTypes,
|
2901 | namedPlaceholderTypes: MySqlFormatter.namedPlaceholderTypes,
|
2902 | lineCommentTypes: MySqlFormatter.lineCommentTypes,
|
2903 | specialWordChars: MySqlFormatter.specialWordChars,
|
2904 | operators: MySqlFormatter.operators
|
2905 | });
|
2906 | }
|
2907 | }, {
|
2908 | key: "tokenOverride",
|
2909 | value: function tokenOverride(token) {
|
2910 | // [SET] ( ...
|
2911 | if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.SET(token) && this.tokenLookAhead().value === '(') {
|
2912 | // This is SET datatype, not SET statement
|
2913 | return {
|
2914 | type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
|
2915 | value: token.value
|
2916 | };
|
2917 | }
|
2918 |
|
2919 | return token;
|
2920 | }
|
2921 | }]);
|
2922 |
|
2923 | return MySqlFormatter;
|
2924 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
2925 |
|
2926 |
|
2927 | MySqlFormatter.reservedCommands = reservedCommands;
|
2928 | MySqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
2929 | MySqlFormatter.reservedDependentClauses = reservedDependentClauses;
|
2930 | MySqlFormatter.reservedJoinConditions = ['ON', 'USING'];
|
2931 | MySqlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
|
2932 | MySqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)([].concat(reservedKeywords, reservedFunctions));
|
2933 | MySqlFormatter.stringTypes = ['``', "''", '""'];
|
2934 | MySqlFormatter.blockStart = ['(', 'CASE'];
|
2935 | MySqlFormatter.blockEnd = [')', 'END'];
|
2936 | MySqlFormatter.indexedPlaceholderTypes = ['?'];
|
2937 | MySqlFormatter.namedPlaceholderTypes = [];
|
2938 | MySqlFormatter.lineCommentTypes = ['--', '#'];
|
2939 | MySqlFormatter.specialWordChars = {
|
2940 | prefix: '@:'
|
2941 | };
|
2942 | MySqlFormatter.operators = [':=', '<<', '>>', '<=>', '&&', '||', '->', '->>'];
|
2943 |
|
2944 | /***/ }),
|
2945 |
|
2946 | /***/ "./src/languages/n1ql.formatter.ts":
|
2947 | /*!*****************************************!*\
|
2948 | !*** ./src/languages/n1ql.formatter.ts ***!
|
2949 | \*****************************************/
|
2950 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
2951 |
|
2952 | __webpack_require__.r(__webpack_exports__);
|
2953 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
2954 | /* harmony export */ "default": () => (/* binding */ N1qlFormatter)
|
2955 | /* harmony export */ });
|
2956 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
2957 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
2958 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
2959 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
2960 |
|
2961 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
2962 |
|
2963 | 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); } }
|
2964 |
|
2965 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
2966 |
|
2967 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
2968 |
|
2969 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
2970 |
|
2971 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
2972 |
|
2973 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
2974 |
|
2975 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
2976 |
|
2977 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
2978 |
|
2979 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
2980 |
|
2981 |
|
2982 |
|
2983 | // TODO: split this into object with function categories
|
2984 |
|
2985 | /**
|
2986 | * Priority 5 (last)
|
2987 | * Full list of reserved functions
|
2988 | * distinct from Keywords due to interaction with parentheses
|
2989 | */
|
2990 | // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/functions.html
|
2991 |
|
2992 | var reservedFunctions = ['ABORT', 'ABS', 'ACOS', 'ADVISOR', 'ARRAY_AGG', 'ARRAY_AGG', 'ARRAY_APPEND', 'ARRAY_AVG', 'ARRAY_BINARY_SEARCH', 'ARRAY_CONCAT', 'ARRAY_CONTAINS', 'ARRAY_COUNT', 'ARRAY_DISTINCT', 'ARRAY_EXCEPT', 'ARRAY_FLATTEN', 'ARRAY_IFNULL', 'ARRAY_INSERT', 'ARRAY_INTERSECT', 'ARRAY_LENGTH', 'ARRAY_MAX', 'ARRAY_MIN', 'ARRAY_MOVE', 'ARRAY_POSITION', 'ARRAY_PREPEND', 'ARRAY_PUT', 'ARRAY_RANGE', 'ARRAY_REMOVE', 'ARRAY_REPEAT', 'ARRAY_REPLACE', 'ARRAY_REVERSE', 'ARRAY_SORT', 'ARRAY_STAR', 'ARRAY_SUM', 'ARRAY_SYMDIFF', 'ARRAY_SYMDIFF1', 'ARRAY_SYMDIFFN', 'ARRAY_UNION', 'ASIN', 'ATAN', 'ATAN2', 'AVG', 'BASE64', 'BASE64_DECODE', 'BASE64_ENCODE', 'BITAND ', 'BITCLEAR ', 'BITNOT ', 'BITOR ', 'BITSET ', 'BITSHIFT ', 'BITTEST ', 'BITXOR ', 'CEIL', 'CLOCK_LOCAL', 'CLOCK_MILLIS', 'CLOCK_STR', 'CLOCK_TZ', 'CLOCK_UTC', 'COALESCE', 'CONCAT', 'CONCAT2', 'CONTAINS', 'CONTAINS_TOKEN', 'CONTAINS_TOKEN_LIKE', 'CONTAINS_TOKEN_REGEXP', 'COS', 'COUNT', 'COUNT', 'COUNTN', 'CUME_DIST', 'CURL', 'DATE_ADD_MILLIS', 'DATE_ADD_STR', 'DATE_DIFF_MILLIS', 'DATE_DIFF_STR', 'DATE_FORMAT_STR', 'DATE_PART_MILLIS', 'DATE_PART_STR', 'DATE_RANGE_MILLIS', 'DATE_RANGE_STR', 'DATE_TRUNC_MILLIS', 'DATE_TRUNC_STR', 'DECODE', 'DECODE_JSON', 'DEGREES', 'DENSE_RANK', 'DURATION_TO_STR', // 'E',
|
2993 | 'ENCODED_SIZE', 'ENCODE_JSON', 'EXP', 'FIRST_VALUE', 'FLOOR', 'GREATEST', 'HAS_TOKEN', 'IFINF', 'IFMISSING', 'IFMISSINGORNULL', 'IFNAN', 'IFNANORINF', 'IFNULL', 'INITCAP', 'ISARRAY', 'ISATOM', 'ISBITSET', 'ISBOOLEAN', 'ISNUMBER', 'ISOBJECT', 'ISSTRING', 'LAG', 'LAST_VALUE', 'LEAD', 'LEAST', 'LENGTH', 'LN', 'LOG', 'LOWER', 'LTRIM', 'MAX', 'MEAN', 'MEDIAN', 'META', 'MILLIS', 'MILLIS_TO_LOCAL', 'MILLIS_TO_STR', 'MILLIS_TO_TZ', 'MILLIS_TO_UTC', 'MILLIS_TO_ZONE_NAME', 'MIN', 'MISSINGIF', 'NANIF', 'NEGINFIF', 'NOW_LOCAL', 'NOW_MILLIS', 'NOW_STR', 'NOW_TZ', 'NOW_UTC', 'NTH_VALUE', 'NTILE', 'NULLIF', 'NVL', 'NVL2', 'OBJECT_ADD', 'OBJECT_CONCAT', 'OBJECT_INNER_PAIRS', 'OBJECT_INNER_VALUES', 'OBJECT_LENGTH', 'OBJECT_NAMES', 'OBJECT_PAIRS', 'OBJECT_PUT', 'OBJECT_REMOVE', 'OBJECT_RENAME', 'OBJECT_REPLACE', 'OBJECT_UNWRAP', 'OBJECT_VALUES', 'PAIRS', 'PERCENT_RANK', 'PI', 'POLY_LENGTH', 'POSINFIF', 'POSITION', 'POWER', 'RADIANS', 'RANDOM', 'RANK', 'RATIO_TO_REPORT', 'REGEXP_CONTAINS', 'REGEXP_LIKE', 'REGEXP_MATCHES', 'REGEXP_POSITION', 'REGEXP_REPLACE', 'REGEXP_SPLIT', 'REGEX_CONTAINS', 'REGEX_LIKE', 'REGEX_MATCHES', 'REGEX_POSITION', 'REGEX_REPLACE', 'REGEX_SPLIT', 'REPEAT', 'REPLACE', 'REVERSE', 'ROUND', 'ROW_NUMBER', 'RTRIM', 'SEARCH', 'SEARCH_META', 'SEARCH_SCORE', 'SIGN', 'SIN', 'SPLIT', 'SQRT', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'STR_TO_DURATION', 'STR_TO_MILLIS', 'STR_TO_TZ', 'STR_TO_UTC', 'STR_TO_ZONE_NAME', 'SUBSTR', 'SUFFIXES', 'SUM', 'TAN', 'TITLE', 'TOARRAY', 'TOATOM', 'TOBOOLEAN', 'TOKENS', 'TOKENS', 'TONUMBER', 'TOOBJECT', 'TOSTRING', 'TRIM', 'TRUNC', // 'TYPE', // disabled
|
2994 | 'UPPER', 'UUID', 'VARIANCE', 'VARIANCE_POP', 'VARIANCE_SAMP', 'VAR_POP', 'VAR_SAMP', 'WEEKDAY_MILLIS', 'WEEKDAY_STR'];
|
2995 | /**
|
2996 | * Priority 5 (last)
|
2997 | * Full list of reserved words
|
2998 | * any words that are in a higher priority are removed
|
2999 | */
|
3000 | // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html
|
3001 |
|
3002 | var reservedKeywords = ['ALL', 'ALTER', 'ANALYZE', 'ANY', 'ARRAY', 'AS', 'ASC', 'AT', 'BEGIN', 'BETWEEN', 'BINARY', 'BOOLEAN', 'BREAK', 'BUCKET', 'BUILD', 'BY', 'CALL', 'CAST', 'CHAR', 'CLUSTER', 'COLLATE', 'COLLECTION', 'COMMIT', 'COMMITTED', 'CONNECT', 'CONTINUE', 'CORRELATE', 'CORRELATED', 'COVER', 'CREATE', 'CURRENT', 'DATABASE', 'DATASET', 'DATASTORE', 'DECLARE', 'DECREMENT', 'DERIVED', 'DESC', 'DESCRIBE', 'DISTINCT', 'DO', 'DROP', 'EACH', 'ELEMENT', 'EVERY', 'EXCLUDE', 'EXISTS', 'FALSE', 'FETCH', 'FILTER', 'FIRST', 'FLATTEN', 'FLUSH', 'FOLLOWING', 'FOR', 'FORCE', 'FTS', 'FUNCTION', 'GOLANG', 'GROUP', 'GROUPS', 'GSI', 'HASH', 'IF', 'IGNORE', 'ILIKE', 'IN', 'INCLUDE', 'INCREMENT', 'INDEX', 'INLINE', 'INNER', 'INTO', 'IS', 'ISOLATION', 'JAVASCRIPT', 'KEY', 'KEYS', 'KEYSPACE', 'KNOWN', 'LANGUAGE', 'LAST', 'LEFT', 'LETTING', 'LEVEL', 'LIKE', 'LSM', 'MAP', 'MAPPING', 'MATCHED', 'MATERIALIZED', 'MISSING', 'NAMESPACE', 'NL', 'NO', 'NOT', 'NULL', 'NULLS', 'NUMBER', 'OBJECT', 'OFFSET', 'OPTION', 'OPTIONS', 'ORDER', 'OTHERS', 'OUTER', 'OVER', 'PARSE', 'PARTITION', 'PASSWORD', 'PATH', 'POOL', 'PRECEDING', 'PRIMARY', 'PRIVATE', 'PRIVILEGE', 'PROBE', 'PROCEDURE', 'PUBLIC', 'RANGE', 'RAW', 'REALM', 'REDUCE', 'RENAME', 'RESPECT', 'RETURN', 'RIGHT', 'ROLE', 'ROLLBACK', 'ROW', 'ROWS', 'SATISFIES', 'SCHEMA', 'SCOPE', 'SELF', 'SEMI', 'SOME', 'START', 'STATISTICS', 'STRING', 'SYSTEM', 'THEN', 'TIES', 'TO', 'TRAN', 'TRANSACTION', 'TRIGGER', 'TRUE', 'TRUNCATE', 'UNBOUNDED', 'UNDER', 'UNIQUE', 'UNKNOWN', 'UNSET', 'USE', 'USER', 'VALIDATE', 'VALUE', 'VALUED', 'VIA', 'VIEW', 'WHILE', 'WINDOW', 'WITHIN', 'WORK'];
|
3003 | /**
|
3004 | * Priority 1 (first)
|
3005 | * keywords that begin a new statement
|
3006 | * will begin new indented block
|
3007 | */
|
3008 | // https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/reservedwords.html
|
3009 |
|
3010 | var reservedCommands = ['ADVISE', 'ALTER INDEX', 'BEGIN TRANSACTION', 'BUILD INDEX', 'COMMIT TRANSACTION', 'CREATE COLLECTION', 'CREATE FUNCTION', 'CREATE INDEX', 'CREATE PRIMARY INDEX', 'CREATE SCOPE', 'CREATE TABLE', 'DELETE', 'DROP COLLECTION', 'DROP FUNCTION', 'DROP INDEX', 'DROP PRIMARY INDEX', 'DROP SCOPE', 'EXECUTE', 'EXECUTE FUNCTION', 'EXPLAIN', 'GRANT', 'INFER', 'INSERT', 'MERGE', 'PREPARE', 'RETURNING', 'REVOKE', 'ROLLBACK TRANSACTION', 'SAVEPOINT', 'SELECT', 'SET TRANSACTION', 'UPDATE', 'UPDATE STATISTICS', 'UPSERT', // other
|
3011 | 'DROP TABLE', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'LET', 'LIMIT', 'OFFSET', 'NEST', 'ORDER BY', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'SHOW', 'UNNEST', 'USE KEYS', 'VALUES', 'WHERE', 'WITH'];
|
3012 | /**
|
3013 | * Priority 2
|
3014 | * commands that operate on two tables or subqueries
|
3015 | * two main categories: joins and boolean set operators
|
3016 | */
|
3017 |
|
3018 | var reservedBinaryCommands = [// set booleans
|
3019 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
|
3020 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN'];
|
3021 | /**
|
3022 | * Priority 3
|
3023 | * keywords that follow a previous Statement, must be attached to subsequent data
|
3024 | * can be fully inline or on newline with optional indent
|
3025 | */
|
3026 |
|
3027 | var reservedDependentClauses = ['WHEN', 'ELSE']; // For reference: http://docs.couchbase.com.s3-website-us-west-1.amazonaws.com/server/6.0/n1ql/n1ql-language-reference/index.html
|
3028 |
|
3029 | var N1qlFormatter = /*#__PURE__*/function (_Formatter) {
|
3030 | _inherits(N1qlFormatter, _Formatter);
|
3031 |
|
3032 | var _super = _createSuper(N1qlFormatter);
|
3033 |
|
3034 | function N1qlFormatter() {
|
3035 | _classCallCheck(this, N1qlFormatter);
|
3036 |
|
3037 | return _super.apply(this, arguments);
|
3038 | }
|
3039 |
|
3040 | _createClass(N1qlFormatter, [{
|
3041 | key: "tokenizer",
|
3042 | value: function tokenizer() {
|
3043 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
3044 | reservedCommands: N1qlFormatter.reservedCommands,
|
3045 | reservedBinaryCommands: N1qlFormatter.reservedBinaryCommands,
|
3046 | reservedDependentClauses: N1qlFormatter.reservedDependentClauses,
|
3047 | reservedJoinConditions: N1qlFormatter.reservedJoinConditions,
|
3048 | reservedLogicalOperators: N1qlFormatter.reservedLogicalOperators,
|
3049 | reservedKeywords: N1qlFormatter.reservedKeywords,
|
3050 | stringTypes: N1qlFormatter.stringTypes,
|
3051 | blockStart: N1qlFormatter.blockStart,
|
3052 | blockEnd: N1qlFormatter.blockEnd,
|
3053 | namedPlaceholderTypes: N1qlFormatter.namedPlaceholderTypes,
|
3054 | lineCommentTypes: N1qlFormatter.lineCommentTypes,
|
3055 | operators: N1qlFormatter.operators
|
3056 | });
|
3057 | }
|
3058 | }]);
|
3059 |
|
3060 | return N1qlFormatter;
|
3061 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
3062 |
|
3063 |
|
3064 | N1qlFormatter.reservedCommands = reservedCommands;
|
3065 | N1qlFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
3066 | N1qlFormatter.reservedDependentClauses = reservedDependentClauses;
|
3067 | N1qlFormatter.reservedJoinConditions = ['ON', 'USING'];
|
3068 | N1qlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
|
3069 | N1qlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(reservedKeywords, reservedFunctions));
|
3070 | N1qlFormatter.stringTypes = ["\"\"", "''", '``'];
|
3071 | N1qlFormatter.blockStart = ['(', '[', '{', 'CASE'];
|
3072 | N1qlFormatter.blockEnd = [')', ']', '}', 'END'];
|
3073 | N1qlFormatter.namedPlaceholderTypes = ['$'];
|
3074 | N1qlFormatter.lineCommentTypes = ['#', '--'];
|
3075 | N1qlFormatter.operators = ['=='];
|
3076 |
|
3077 | /***/ }),
|
3078 |
|
3079 | /***/ "./src/languages/plsql.formatter.ts":
|
3080 | /*!******************************************!*\
|
3081 | !*** ./src/languages/plsql.formatter.ts ***!
|
3082 | \******************************************/
|
3083 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
3084 |
|
3085 | __webpack_require__.r(__webpack_exports__);
|
3086 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
3087 | /* harmony export */ "default": () => (/* binding */ PlSqlFormatter)
|
3088 | /* harmony export */ });
|
3089 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
3090 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
3091 | /* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
|
3092 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
3093 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
3094 |
|
3095 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
3096 |
|
3097 | 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); } }
|
3098 |
|
3099 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
3100 |
|
3101 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
3102 |
|
3103 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
3104 |
|
3105 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
3106 |
|
3107 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
3108 |
|
3109 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
3110 |
|
3111 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
3112 |
|
3113 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
3114 |
|
3115 |
|
3116 |
|
3117 | // convert to partial type import in TS 4.5
|
3118 |
|
3119 |
|
3120 | /**
|
3121 | * Priority 5 (last)
|
3122 | * Full list of reserved words
|
3123 | * any words that are in a higher priority are removed
|
3124 | */
|
3125 |
|
3126 | var reservedKeywords = [// 'A',
|
3127 | 'ACCESSIBLE', 'AGENT', 'AGGREGATE', 'ALL', 'ALTER', 'ANY', 'ARRAY', 'AS', 'ASC', 'AT', 'ATTRIBUTE', 'AUTHID', 'AVG', 'BETWEEN', 'BFILE_BASE', 'BINARY', 'BINARY_INTEGER', 'BLOB_BASE', 'BLOCK', 'BODY', 'BOOLEAN', 'BOTH', 'BOUND', 'BREADTH', 'BULK', 'BY', 'BYTE', // 'C',
|
3128 | 'CALL', 'CALLING', 'CASCADE', 'CAST', 'CHAR', 'CHARACTER', 'CHARSET', 'CHARSETFORM', 'CHARSETID', 'CHAR_BASE', 'CHECK', 'CLOB_BASE', 'CLONE', 'CLOSE', 'CLUSTER', 'CLUSTERS', 'COALESCE', 'COLAUTH', 'COLLECT', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMMITTED', 'COMPILED', 'COMPRESS', 'CONNECT', 'CONSTANT', 'CONSTRUCTOR', 'CONTEXT', 'CONTINUE', 'CONVERT', 'COUNT', 'CRASH', 'CREATE', 'CREDENTIAL', 'CURRENT', 'CURRVAL', 'CURSOR', 'CUSTOMDATUM', 'DANGLING', 'DATA', 'DATE', 'DATE_BASE', 'DAY', 'DECIMAL', 'DEFAULT', 'DEFINE', 'DEPTH', 'DESC', 'DETERMINISTIC', 'DIRECTORY', 'DISTINCT', 'DO', 'DOUBLE', 'DROP', 'DURATION', 'ELEMENT', 'ELSIF', 'EMPTY', 'ESCAPE', 'EXCEPTIONS', 'EXCLUSIVE', 'EXECUTE', 'EXISTS', 'EXIT', 'EXTENDS', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FINAL', 'FIRST', 'FIXED', 'FLOAT', 'FOR', 'FORALL', 'FORCE', 'FUNCTION', 'GENERAL', 'GOTO', 'GRANT', 'GROUP', 'HASH', 'HEAP', 'HIDDEN', 'HOUR', 'IDENTIFIED', 'IF', 'IMMEDIATE', 'IN', 'INCLUDING', 'INDEX', 'INDEXES', 'INDICATOR', 'INDICES', 'INFINITE', 'INSTANTIABLE', 'INT', 'INTEGER', 'INTERFACE', 'INTERVAL', 'INTO', 'INVALIDATE', 'IS', 'ISOLATION', 'JAVA', 'LANGUAGE', 'LARGE', 'LEADING', 'LENGTH', 'LEVEL', 'LIBRARY', 'LIKE', 'LIKE2', 'LIKE4', 'LIKEC', 'LIMITED', 'LOCAL', 'LOCK', 'LONG', 'MAP', 'MAX', 'MAXLEN', 'MEMBER', 'MERGE', 'MIN', 'MINUTE', 'MLSLABEL', 'MOD', 'MODE', 'MONTH', 'MULTISET', 'NAME', 'NAN', 'NATIONAL', 'NATIVE', 'NATURAL', 'NATURALN', 'NCHAR', 'NEW', 'NEXTVAL', 'NOCOMPRESS', 'NOCOPY', 'NOT', 'NOWAIT', 'NULL', 'NULLIF', 'NUMBER', 'NUMBER_BASE', 'OBJECT', 'OCICOLL', 'OCIDATE', 'OCIDATETIME', 'OCIDURATION', 'OCIINTERVAL', 'OCILOBLOCATOR', 'OCINUMBER', 'OCIRAW', 'OCIREF', 'OCIREFCURSOR', 'OCIROWID', 'OCISTRING', 'OCITYPE', 'OF', 'OLD', 'ON DELETE', 'ON UPDATE', 'ONLY', 'OPAQUE', 'OPEN', 'OPERATOR', 'OPTION', 'ORACLE', 'ORADATA', 'ORDER', 'ORGANIZATION', 'ORLANY', 'ORLVARY', 'OTHERS', 'OUT', 'OVERLAPS', 'OVERRIDING', 'PACKAGE', 'PARALLEL_ENABLE', 'PARAMETER', 'PARAMETERS', 'PARENT', 'PARTITION', 'PASCAL', 'PCTFREE', 'PIPE', 'PIPELINED', 'PLS_INTEGER', 'PLUGGABLE', 'POSITIVE', 'POSITIVEN', 'PRAGMA', 'PRECISION', 'PRIOR', 'PRIVATE', 'PROCEDURE', 'PUBLIC', 'RAISE', 'RANGE', 'RAW', 'READ', 'REAL', 'RECORD', 'REF', 'REFERENCE', 'RELEASE', 'RELIES_ON', 'REM', 'REMAINDER', 'RENAME', 'RESOURCE', 'RESULT', 'RESULT_CACHE', 'RETURN', 'REVERSE', 'REVOKE', 'ROLLBACK', 'ROW', 'ROWID', 'ROWNUM', 'ROWTYPE', 'SAMPLE', 'SAVE', 'SAVEPOINT', 'SB1', 'SB2', 'SB4', 'SEARCH', 'SECOND', 'SEGMENT', 'SELF', 'SEPARATE', 'SEQUENCE', 'SERIALIZABLE', 'SHARE', 'SHORT', 'SIZE', 'SIZE_T', 'SMALLINT', 'SOME', 'SPACE', 'SPARSE', 'SQL', 'SQLCODE', 'SQLDATA', 'SQLERRM', 'SQLNAME', 'SQLSTATE', 'STANDARD', 'START', 'STATIC', 'STDDEV', 'STORED', 'STRING', 'STRUCT', 'STYLE', 'SUBMULTISET', 'SUBPARTITION', 'SUBSTITUTABLE', 'SUBTYPE', 'SUCCESSFUL', 'SUM', 'SYNONYM', 'SYSDATE', 'TABAUTH', 'TABLE', 'TDO', 'THE', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_ABBR', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TIMEZONE_REGION', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSACTIONAL', 'TRIGGER', 'TRUE', 'TRUSTED', 'TYPE', 'UB1', 'UB2', 'UB4', 'UID', 'UNDER', 'UNIQUE', 'UNPLUG', 'UNSIGNED', 'UNTRUSTED', 'USE', 'USER', 'VALIDATE', 'VALIST', 'VALUE', 'VARCHAR', 'VARCHAR2', 'VARIABLE', 'VARIANCE', 'VARRAY', 'VARYING', 'VIEW', 'VIEWS', 'VOID', 'WHENEVER', 'WHILE', 'WORK', 'WRAPPED', 'WRITE', 'YEAR', 'ZONE'];
|
3129 | /**
|
3130 | * Priority 1 (first)
|
3131 | * keywords that begin a new statement
|
3132 | * will begin new indented block
|
3133 | */
|
3134 |
|
3135 | var reservedCommands = ['ADD', 'ALTER COLUMN', 'ALTER TABLE', 'BEGIN', 'CONNECT BY', 'CREATE TABLE', 'DROP TABLE', 'DECLARE', // 'DELETE FROM', // disabled
|
3136 | 'DELETE', 'END', 'EXCEPT', 'EXCEPTION', 'FETCH FIRST', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'INSERT', 'LIMIT', 'OFFSET', 'LOOP', 'MODIFY', 'ORDER BY', 'RETURNING', 'SELECT', 'SET CURRENT SCHEMA', 'SET SCHEMA', 'SET', 'START WITH', 'UPDATE', 'VALUES', 'WHERE', 'WITH'];
|
3137 | /**
|
3138 | * Priority 2
|
3139 | * commands that operate on two tables or subqueries
|
3140 | * two main categories: joins and boolean set operators
|
3141 | */
|
3142 |
|
3143 | var reservedBinaryCommands = [// set booleans
|
3144 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
|
3145 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // apply
|
3146 | 'CROSS APPLY', 'OUTER APPLY'];
|
3147 | /**
|
3148 | * Priority 3
|
3149 | * keywords that follow a previous Statement, must be attached to subsequent data
|
3150 | * can be fully inline or on newline with optional indent
|
3151 | */
|
3152 |
|
3153 | var reservedDependentClauses = ['WHEN', 'ELSE'];
|
3154 |
|
3155 | var PlSqlFormatter = /*#__PURE__*/function (_Formatter) {
|
3156 | _inherits(PlSqlFormatter, _Formatter);
|
3157 |
|
3158 | var _super = _createSuper(PlSqlFormatter);
|
3159 |
|
3160 | function PlSqlFormatter() {
|
3161 | _classCallCheck(this, PlSqlFormatter);
|
3162 |
|
3163 | return _super.apply(this, arguments);
|
3164 | }
|
3165 |
|
3166 | _createClass(PlSqlFormatter, [{
|
3167 | key: "tokenizer",
|
3168 | value: function tokenizer() {
|
3169 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
3170 | reservedCommands: PlSqlFormatter.reservedCommands,
|
3171 | reservedBinaryCommands: PlSqlFormatter.reservedBinaryCommands,
|
3172 | reservedDependentClauses: PlSqlFormatter.reservedDependentClauses,
|
3173 | reservedJoinConditions: PlSqlFormatter.reservedJoinConditions,
|
3174 | reservedLogicalOperators: PlSqlFormatter.reservedLogicalOperators,
|
3175 | reservedKeywords: PlSqlFormatter.reservedKeywords,
|
3176 | stringTypes: PlSqlFormatter.stringTypes,
|
3177 | blockStart: PlSqlFormatter.blockStart,
|
3178 | blockEnd: PlSqlFormatter.blockEnd,
|
3179 | indexedPlaceholderTypes: PlSqlFormatter.indexedPlaceholderTypes,
|
3180 | namedPlaceholderTypes: PlSqlFormatter.namedPlaceholderTypes,
|
3181 | lineCommentTypes: PlSqlFormatter.lineCommentTypes,
|
3182 | specialWordChars: PlSqlFormatter.specialWordChars,
|
3183 | operators: PlSqlFormatter.operators
|
3184 | });
|
3185 | }
|
3186 | }, {
|
3187 | key: "tokenOverride",
|
3188 | value: function tokenOverride(token) {
|
3189 | // `table`[.]`column`
|
3190 | if (token.value === '.' && this.tokenLookAhead().value.startsWith('`') && this.tokenLookBehind().value.endsWith('`')) {
|
3191 | // This is an operator, do not insert spaces
|
3192 | return {
|
3193 | type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.OPERATOR,
|
3194 | value: token.value
|
3195 | };
|
3196 | } // BY [SET]
|
3197 |
|
3198 |
|
3199 | if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.SET(token) && _core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.BY(this.getPreviousReservedToken())) {
|
3200 | return {
|
3201 | type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
|
3202 | value: token.value
|
3203 | };
|
3204 | }
|
3205 |
|
3206 | return token;
|
3207 | }
|
3208 | }]);
|
3209 |
|
3210 | return PlSqlFormatter;
|
3211 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
3212 |
|
3213 |
|
3214 | PlSqlFormatter.reservedCommands = reservedCommands;
|
3215 | PlSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
3216 | PlSqlFormatter.reservedDependentClauses = reservedDependentClauses;
|
3217 | PlSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
|
3218 | PlSqlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
|
3219 | PlSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)(reservedKeywords);
|
3220 | PlSqlFormatter.stringTypes = ["\"\"", "N''", "''", '``'];
|
3221 | PlSqlFormatter.blockStart = ['(', 'CASE'];
|
3222 | PlSqlFormatter.blockEnd = [')', 'END'];
|
3223 | PlSqlFormatter.indexedPlaceholderTypes = ['?'];
|
3224 | PlSqlFormatter.namedPlaceholderTypes = [':'];
|
3225 | PlSqlFormatter.lineCommentTypes = ['--'];
|
3226 | PlSqlFormatter.specialWordChars = {
|
3227 | any: '_$#.@'
|
3228 | };
|
3229 | PlSqlFormatter.operators = ['||', '**', ':=', '~=', '^=', '>>', '<<', '=>' // '..' // breaks operator test, handled by .
|
3230 | ];
|
3231 |
|
3232 | /***/ }),
|
3233 |
|
3234 | /***/ "./src/languages/postgresql.formatter.ts":
|
3235 | /*!***********************************************!*\
|
3236 | !*** ./src/languages/postgresql.formatter.ts ***!
|
3237 | \***********************************************/
|
3238 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
3239 |
|
3240 | __webpack_require__.r(__webpack_exports__);
|
3241 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
3242 | /* harmony export */ "default": () => (/* binding */ PostgreSqlFormatter)
|
3243 | /* harmony export */ });
|
3244 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
3245 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
3246 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
3247 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
3248 |
|
3249 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
3250 |
|
3251 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
3252 |
|
3253 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
3254 |
|
3255 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
3256 |
|
3257 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
3258 |
|
3259 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
3260 |
|
3261 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
3262 |
|
3263 | 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); } }
|
3264 |
|
3265 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
3266 |
|
3267 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
3268 |
|
3269 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
3270 |
|
3271 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
3272 |
|
3273 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
3274 |
|
3275 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
3276 |
|
3277 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
3278 |
|
3279 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
3280 |
|
3281 |
|
3282 |
|
3283 |
|
3284 | /**
|
3285 | * Priority 5 (last)
|
3286 | * Full list of reserved functions
|
3287 | * distinct from Keywords due to interaction with parentheses
|
3288 | */
|
3289 | // https://www.postgresql.org/docs/14/functions.html
|
3290 |
|
3291 | var reservedFunctions = {
|
3292 | // https://www.postgresql.org/docs/14/functions-math.html
|
3293 | math: ['ABS', 'ACOS', 'ACOSD', 'ACOSH', 'ASIN', 'ASIND', 'ASINH', 'ATAN', 'ATAN2', 'ATAN2D', 'ATAND', 'ATANH', 'CBRT', 'CEIL', 'CEILING', 'COS', 'COSD', 'COSH', 'COT', 'COTD', 'DEGREES', 'DIV', 'EXP', 'FACTORIAL', 'FLOOR', 'GCD', 'LCM', 'LN', 'LOG', 'LOG10', 'MIN_SCALE', 'MOD', 'PI', 'POWER', 'RADIANS', 'RANDOM', 'ROUND', 'SCALE', 'SETSEED', 'SIGN', 'SIN', 'SIND', 'SINH', 'SQRT', 'TAN', 'TAND', 'TANH', 'TRIM_SCALE', 'TRUNC', 'WIDTH_BUCKET'],
|
3294 | // https://www.postgresql.org/docs/14/functions-string.html
|
3295 | string: ['ABS', 'ASCII', 'BIT_LENGTH', 'BTRIM', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHR', 'CONCAT', 'CONCAT_WS', 'FORMAT', 'INITCAP', 'LEFT', 'LENGTH', 'LOWER', 'LPAD', 'LTRIM', 'MD5', 'NORMALIZE', 'OCTET_LENGTH', 'OVERLAY', 'PARSE_IDENT', 'PG_CLIENT_ENCODING', 'POSITION', 'QUOTE_IDENT', 'QUOTE_LITERAL', 'QUOTE_NULLABLE', 'REGEXP_MATCH', 'REGEXP_MATCHES', 'REGEXP_REPLACE', 'REGEXP_SPLIT_TO_ARRAY', 'REGEXP_SPLIT_TO_TABLE', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'RPAD', 'RTRIM', 'SPLIT_PART', 'SPRINTF', 'STARTS_WITH', 'STRING_AGG', 'STRING_TO_ARRAY', 'STRING_TO_TABLE', 'STRPOS', 'SUBSTR', 'SUBSTRING', 'TO_ASCII', 'TO_HEX', 'TRANSLATE', 'TRIM', 'UNISTR', 'UPPER'],
|
3296 | // https://www.postgresql.org/docs/14/functions-binarystring.html
|
3297 | binary: ['BIT_COUNT', 'BIT_LENGTH', 'BTRIM', 'CONVERT', 'CONVERT_FROM', 'CONVERT_TO', 'DECODE', 'ENCODE', 'GET_BIT', 'GET_BYTE', 'LENGTH', 'LTRIM', 'MD5', 'OCTET_LENGTH', 'OVERLAY', 'POSITION', 'RTRIM', 'SET_BIT', 'SET_BYTE', 'SHA224', 'SHA256', 'SHA384', 'SHA512', 'STRING_AGG', 'SUBSTR', 'SUBSTRING', 'TRIM'],
|
3298 | // https://www.postgresql.org/docs/14/functions-bitstring.html
|
3299 | bitstring: ['BIT_COUNT', 'BIT_LENGTH', 'GET_BIT', 'LENGTH', 'OCTET_LENGTH', 'OVERLAY', 'POSITION', 'SET_BIT', 'SUBSTRING'],
|
3300 | // https://www.postgresql.org/docs/14/functions-matching.html
|
3301 | pattern: ['REGEXP_MATCH', 'REGEXP_MATCHES', 'REGEXP_REPLACE', 'REGEXP_SPLIT_TO_ARRAY', 'REGEXP_SPLIT_TO_TABLE'],
|
3302 | // https://www.postgresql.org/docs/14/functions-formatting.html
|
3303 | datatype: ['TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TO_TIMESTAMP'],
|
3304 | // https://www.postgresql.org/docs/14/functions-datetime.html
|
3305 | datetime: [// 'AGE',
|
3306 | 'CLOCK_TIMESTAMP', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATE_BIN', 'DATE_PART', 'DATE_TRUNC', 'EXTRACT', 'ISFINITE', 'JUSTIFY_DAYS', 'JUSTIFY_HOURS', 'JUSTIFY_INTERVAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'MAKE_DATE', 'MAKE_INTERVAL', 'MAKE_TIME', 'MAKE_TIMESTAMP', 'MAKE_TIMESTAMPTZ', 'NOW', 'PG_SLEEP', 'PG_SLEEP_FOR', 'PG_SLEEP_UNTIL', 'STATEMENT_TIMESTAMP', 'TIMEOFDAY', 'TO_TIMESTAMP', 'TRANSACTION_TIMESTAMP'],
|
3307 | // https://www.postgresql.org/docs/14/functions-enum.html
|
3308 | "enum": ['ENUM_FIRST', 'ENUM_LAST', 'ENUM_RANGE'],
|
3309 | // https://www.postgresql.org/docs/14/functions-geometry.html
|
3310 | geometry: ['AREA', 'BOUND_BOX', 'BOX', 'CENTER', 'CIRCLE', 'DIAGONAL', 'DIAMETER', 'HEIGHT', 'ISCLOSED', 'ISOPEN', 'LENGTH', 'LINE', 'LSEG', 'NPOINTS', 'PATH', 'PCLOSE', 'POINT', 'POLYGON', 'POPEN', 'RADIUS', 'SLOPE', 'WIDTH'],
|
3311 | // https://www.postgresql.org/docs/14/functions-net.html
|
3312 | network: ['ABBREV', 'BROADCAST', 'FAMILY', 'HOST', 'HOSTMASK', 'INET_MERGE', 'INET_SAME_FAMILY', 'MACADDR8_SET7BIT', 'MASKLEN', 'NETMASK', 'NETWORK', 'SET_MASKLEN', 'TEXT', 'TRUNC'],
|
3313 | // https://www.postgresql.org/docs/14/functions-textsearch.html
|
3314 | textsearch: ['ARRAY_TO_TSVECTOR', 'GET_CURRENT_TS_CONFIG', 'JSONB_TO_TSVECTOR', 'JSON_TO_TSVECTOR', 'LENGTH', 'NUMNODE', 'PHRASETO_TSQUERY', 'PLAINTO_TSQUERY', 'QUERYTREE', 'SETWEIGHT', 'STRIP', 'TO_TSQUERY', 'TO_TSVECTOR', 'TSQUERY_PHRASE', 'TSVECTOR_TO_ARRAY', 'TS_DEBUG', 'TS_DELETE', 'TS_FILTER', 'TS_HEADLINE', 'TS_LEXIZE', 'TS_PARSE', 'TS_RANK', 'TS_RANK_CD', 'TS_REWRITE', 'TS_STAT', 'TS_TOKEN_TYPE', 'WEBSEARCH_TO_TSQUERY'],
|
3315 | // https://www.postgresql.org/docs/14/functions-uuid.html
|
3316 | uuid: ['UUID'],
|
3317 | // https://www.postgresql.org/docs/14/functions-xml.html
|
3318 | xml: ['CURSOR_TO_XML', 'CURSOR_TO_XMLSCHEMA', 'DATABASE_TO_XML', 'DATABASE_TO_XMLSCHEMA', 'DATABASE_TO_XML_AND_XMLSCHEMA', 'NEXTVAL', 'QUERY_TO_XML', 'QUERY_TO_XMLSCHEMA', 'QUERY_TO_XML_AND_XMLSCHEMA', 'SCHEMA_TO_XML', 'SCHEMA_TO_XMLSCHEMA', 'SCHEMA_TO_XML_AND_XMLSCHEMA', 'STRING', 'TABLE_TO_XML', 'TABLE_TO_XMLSCHEMA', 'TABLE_TO_XML_AND_XMLSCHEMA', 'XMLAGG', 'XMLCOMMENT', 'XMLCONCAT', 'XMLELEMENT', 'XMLEXISTS', 'XMLFOREST', 'XMLPARSE', 'XMLPI', 'XMLROOT', 'XMLSERIALIZE', 'XMLTABLE', 'XML_IS_WELL_FORMED', 'XML_IS_WELL_FORMED_CONTENT', 'XML_IS_WELL_FORMED_DOCUMENT', 'XPATH', 'XPATH_EXISTS'],
|
3319 | // https://www.postgresql.org/docs/14/functions-json.html
|
3320 | json: ['ARRAY_TO_JSON', 'JSONB_AGG', 'JSONB_ARRAY_ELEMENTS', 'JSONB_ARRAY_ELEMENTS_TEXT', 'JSONB_ARRAY_LENGTH', 'JSONB_BUILD_ARRAY', 'JSONB_BUILD_OBJECT', 'JSONB_EACH', 'JSONB_EACH_TEXT', 'JSONB_EXTRACT_PATH', 'JSONB_EXTRACT_PATH_TEXT', 'JSONB_INSERT', 'JSONB_OBJECT', 'JSONB_OBJECT_AGG', 'JSONB_OBJECT_KEYS', 'JSONB_PATH_EXISTS', 'JSONB_PATH_EXISTS_TZ', 'JSONB_PATH_MATCH', 'JSONB_PATH_MATCH_TZ', 'JSONB_PATH_QUERY', 'JSONB_PATH_QUERY_ARRAY', 'JSONB_PATH_QUERY_ARRAY_TZ', 'JSONB_PATH_QUERY_FIRST', 'JSONB_PATH_QUERY_FIRST_TZ', 'JSONB_PATH_QUERY_TZ', 'JSONB_POPULATE_RECORD', 'JSONB_POPULATE_RECORDSET', 'JSONB_PRETTY', 'JSONB_SET', 'JSONB_SET_LAX', 'JSONB_STRIP_NULLS', 'JSONB_TO_RECORD', 'JSONB_TO_RECORDSET', 'JSONB_TYPEOF', 'JSON_AGG', 'JSON_ARRAY_ELEMENTS', 'JSON_ARRAY_ELEMENTS_TEXT', 'JSON_ARRAY_LENGTH', 'JSON_BUILD_ARRAY', 'JSON_BUILD_OBJECT', 'JSON_EACH', 'JSON_EACH_TEXT', 'JSON_EXTRACT_PATH', 'JSON_EXTRACT_PATH_TEXT', 'JSON_OBJECT', 'JSON_OBJECT_AGG', 'JSON_OBJECT_KEYS', 'JSON_POPULATE_RECORD', 'JSON_POPULATE_RECORDSET', 'JSON_STRIP_NULLS', 'JSON_TO_RECORD', 'JSON_TO_RECORDSET', 'JSON_TYPEOF', 'ROW_TO_JSON', 'TO_JSON', 'TO_JSONB', 'TO_TIMESTAMP'],
|
3321 | // https://www.postgresql.org/docs/14/functions-sequence.html
|
3322 | sequence: ['CURRVAL', 'LASTVAL', 'NEXTVAL', 'SETVAL'],
|
3323 | // https://www.postgresql.org/docs/14/functions-conditional.html
|
3324 | conditional: [// 'CASE',
|
3325 | 'COALESCE', 'GREATEST', 'LEAST', 'NULLIF'],
|
3326 | // https://www.postgresql.org/docs/14/functions-array.html
|
3327 | array: ['ARRAY_AGG', 'ARRAY_APPEND', 'ARRAY_CAT', 'ARRAY_DIMS', 'ARRAY_FILL', 'ARRAY_LENGTH', 'ARRAY_LOWER', 'ARRAY_NDIMS', 'ARRAY_POSITION', 'ARRAY_POSITIONS', 'ARRAY_PREPEND', 'ARRAY_REMOVE', 'ARRAY_REPLACE', 'ARRAY_TO_STRING', 'ARRAY_UPPER', 'CARDINALITY', 'STRING_TO_ARRAY', 'TRIM_ARRAY', 'UNNEST'],
|
3328 | // https://www.postgresql.org/docs/14/functions-range.html
|
3329 | range: ['ISEMPTY', 'LOWER', 'LOWER_INC', 'LOWER_INF', 'MULTIRANGE', 'RANGE_MERGE', 'UPPER', 'UPPER_INC', 'UPPER_INF'],
|
3330 | // https://www.postgresql.org/docs/14/functions-aggregate.html
|
3331 | aggregate: ['ANY', 'ARRAY_AGG', 'AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'BOOL_AND', 'BOOL_OR', 'COALESCE', 'CORR', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'CUME_DIST', 'DENSE_RANK', 'EVERY', 'GROUPING', 'JSONB_AGG', 'JSONB_OBJECT_AGG', 'JSON_AGG', 'JSON_OBJECT_AGG', 'MAX', 'MIN', 'MODE', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'RANGE_AGG', 'RANGE_INTERSECT_AGG', 'RANK', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'SOME', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'STRING_AGG', 'SUM', 'TO_JSON', 'TO_JSONB', 'VARIANCE', 'VAR_POP', 'VAR_SAMP', 'XMLAGG'],
|
3332 | // https://www.postgresql.org/docs/14/functions-window.html
|
3333 | window: ['CUME_DIST', 'DENSE_RANK', 'FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'RANK', 'ROW_NUMBER'],
|
3334 | // https://www.postgresql.org/docs/14/functions-srf.html
|
3335 | set: ['GENERATE_SERIES', 'GENERATE_SUBSCRIPTS'],
|
3336 | // https://www.postgresql.org/docs/14/functions-info.html
|
3337 | sysInfo: ['ACLDEFAULT', 'ACLEXPLODE', 'COL_DESCRIPTION', 'CURRENT_CATALOG', 'CURRENT_DATABASE', 'CURRENT_QUERY', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_SCHEMAS', 'CURRENT_USER', 'FORMAT_TYPE', 'HAS_ANY_COLUMN_PRIVILEGE', 'HAS_COLUMN_PRIVILEGE', 'HAS_DATABASE_PRIVILEGE', 'HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE', 'HAS_FUNCTION_PRIVILEGE', 'HAS_LANGUAGE_PRIVILEGE', 'HAS_SCHEMA_PRIVILEGE', 'HAS_SEQUENCE_PRIVILEGE', 'HAS_SERVER_PRIVILEGE', 'HAS_TABLESPACE_PRIVILEGE', 'HAS_TABLE_PRIVILEGE', 'HAS_TYPE_PRIVILEGE', 'INET_CLIENT_ADDR', 'INET_CLIENT_PORT', 'INET_SERVER_ADDR', 'INET_SERVER_PORT', 'MAKEACLITEM', 'OBJ_DESCRIPTION', 'PG_BACKEND_PID', 'PG_BLOCKING_PIDS', 'PG_COLLATION_IS_VISIBLE', 'PG_CONF_LOAD_TIME', 'PG_CONTROL_CHECKPOINT', 'PG_CONTROL_INIT', 'PG_CONTROL_SYSTEM', 'PG_CONVERSION_IS_VISIBLE', 'PG_CURRENT_LOGFILE', 'PG_CURRENT_SNAPSHOT', 'PG_CURRENT_XACT_ID', 'PG_CURRENT_XACT_ID_IF_ASSIGNED', 'PG_DESCRIBE_OBJECT', 'PG_FUNCTION_IS_VISIBLE', 'PG_GET_CATALOG_FOREIGN_KEYS', 'PG_GET_CONSTRAINTDEF', 'PG_GET_EXPR', 'PG_GET_FUNCTIONDEF', 'PG_GET_FUNCTION_ARGUMENTS', 'PG_GET_FUNCTION_IDENTITY_ARGUMENTS', 'PG_GET_FUNCTION_RESULT', 'PG_GET_INDEXDEF', 'PG_GET_KEYWORDS', 'PG_GET_OBJECT_ADDRESS', 'PG_GET_OWNED_SEQUENCE', 'PG_GET_RULEDEF', 'PG_GET_SERIAL_SEQUENCE', 'PG_GET_STATISTICSOBJDEF', 'PG_GET_TRIGGERDEF', 'PG_GET_USERBYID', 'PG_GET_VIEWDEF', 'PG_HAS_ROLE', 'PG_IDENTIFY_OBJECT', 'PG_IDENTIFY_OBJECT_AS_ADDRESS', 'PG_INDEXAM_HAS_PROPERTY', 'PG_INDEX_COLUMN_HAS_PROPERTY', 'PG_INDEX_HAS_PROPERTY', 'PG_IS_OTHER_TEMP_SCHEMA', 'PG_JIT_AVAILABLE', 'PG_LAST_COMMITTED_XACT', 'PG_LISTENING_CHANNELS', 'PG_MY_TEMP_SCHEMA', 'PG_NOTIFICATION_QUEUE_USAGE', 'PG_OPCLASS_IS_VISIBLE', 'PG_OPERATOR_IS_VISIBLE', 'PG_OPFAMILY_IS_VISIBLE', 'PG_OPTIONS_TO_TABLE', 'PG_POSTMASTER_START_TIME', 'PG_SAFE_SNAPSHOT_BLOCKING_PIDS', 'PG_SNAPSHOT_XIP', 'PG_SNAPSHOT_XMAX', 'PG_SNAPSHOT_XMIN', 'PG_STATISTICS_OBJ_IS_VISIBLE', 'PG_TABLESPACE_DATABASES', 'PG_TABLESPACE_LOCATION', 'PG_TABLE_IS_VISIBLE', 'PG_TRIGGER_DEPTH', 'PG_TS_CONFIG_IS_VISIBLE', 'PG_TS_DICT_IS_VISIBLE', 'PG_TS_PARSER_IS_VISIBLE', 'PG_TS_TEMPLATE_IS_VISIBLE', 'PG_TYPEOF', 'PG_TYPE_IS_VISIBLE', 'PG_VISIBLE_IN_SNAPSHOT', 'PG_XACT_COMMIT_TIMESTAMP', 'PG_XACT_COMMIT_TIMESTAMP_ORIGIN', 'PG_XACT_STATUS', 'PQSERVERVERSION', 'ROW_SECURITY_ACTIVE', 'SESSION_USER', 'SHOBJ_DESCRIPTION', 'TO_REGCLASS', 'TO_REGCOLLATION', 'TO_REGNAMESPACE', 'TO_REGOPER', 'TO_REGOPERATOR', 'TO_REGPROC', 'TO_REGPROCEDURE', 'TO_REGROLE', 'TO_REGTYPE', 'TXID_CURRENT', 'TXID_CURRENT_IF_ASSIGNED', 'TXID_CURRENT_SNAPSHOT', 'TXID_SNAPSHOT_XIP', 'TXID_SNAPSHOT_XMAX', 'TXID_SNAPSHOT_XMIN', 'TXID_STATUS', 'TXID_VISIBLE_IN_SNAPSHOT', 'USER', 'VERSION'],
|
3338 | // https://www.postgresql.org/docs/14/functions-admin.html
|
3339 | sysAdmin: ['BRIN_DESUMMARIZE_RANGE', 'BRIN_SUMMARIZE_NEW_VALUES', 'BRIN_SUMMARIZE_RANGE', 'CONVERT_FROM', 'CURRENT_SETTING', 'GIN_CLEAN_PENDING_LIST', 'PG_ADVISORY_LOCK', 'PG_ADVISORY_LOCK_SHARED', 'PG_ADVISORY_UNLOCK', 'PG_ADVISORY_UNLOCK_ALL', 'PG_ADVISORY_UNLOCK_SHARED', 'PG_ADVISORY_XACT_LOCK', 'PG_ADVISORY_XACT_LOCK_SHARED', 'PG_BACKUP_START_TIME', 'PG_CANCEL_BACKEND', 'PG_COLLATION_ACTUAL_VERSION', 'PG_COLUMN_COMPRESSION', 'PG_COLUMN_SIZE', 'PG_COPY_LOGICAL_REPLICATION_SLOT', 'PG_COPY_PHYSICAL_REPLICATION_SLOT', 'PG_CREATE_LOGICAL_REPLICATION_SLOT', 'PG_CREATE_PHYSICAL_REPLICATION_SLOT', 'PG_CREATE_RESTORE_POINT', 'PG_CURRENT_WAL_FLUSH_LSN', 'PG_CURRENT_WAL_INSERT_LSN', 'PG_CURRENT_WAL_LSN', 'PG_DATABASE_SIZE', 'PG_DROP_REPLICATION_SLOT', 'PG_EXPORT_SNAPSHOT', 'PG_FILENODE_RELATION', 'PG_GET_WAL_REPLAY_PAUSE_STATE', 'PG_IMPORT_SYSTEM_COLLATIONS', 'PG_INDEXES_SIZE', 'PG_IS_IN_BACKUP', 'PG_IS_IN_RECOVERY', 'PG_IS_WAL_REPLAY_PAUSED', 'PG_LAST_WAL_RECEIVE_LSN', 'PG_LAST_WAL_REPLAY_LSN', 'PG_LAST_XACT_REPLAY_TIMESTAMP', 'PG_LOGICAL_EMIT_MESSAGE', 'PG_LOGICAL_SLOT_GET_BINARY_CHANGES', 'PG_LOGICAL_SLOT_GET_CHANGES', 'PG_LOGICAL_SLOT_PEEK_BINARY_CHANGES', 'PG_LOGICAL_SLOT_PEEK_CHANGES', 'PG_LOG_BACKEND_MEMORY_CONTEXTS', 'PG_LS_ARCHIVE_STATUSDIR', 'PG_LS_DIR', 'PG_LS_LOGDIR', 'PG_LS_TMPDIR', 'PG_LS_WALDIR', 'PG_PARTITION_ANCESTORS', 'PG_PARTITION_ROOT', 'PG_PARTITION_TREE', 'PG_PROMOTE', 'PG_READ_BINARY_FILE', 'PG_READ_FILE', 'PG_RELATION_FILENODE', 'PG_RELATION_FILEPATH', 'PG_RELATION_SIZE', 'PG_RELOAD_CONF', 'PG_REPLICATION_ORIGIN_ADVANCE', 'PG_REPLICATION_ORIGIN_CREATE', 'PG_REPLICATION_ORIGIN_DROP', 'PG_REPLICATION_ORIGIN_OID', 'PG_REPLICATION_ORIGIN_PROGRESS', 'PG_REPLICATION_ORIGIN_SESSION_IS_SETUP', 'PG_REPLICATION_ORIGIN_SESSION_PROGRESS', 'PG_REPLICATION_ORIGIN_SESSION_RESET', 'PG_REPLICATION_ORIGIN_SESSION_SETUP', 'PG_REPLICATION_ORIGIN_XACT_RESET', 'PG_REPLICATION_ORIGIN_XACT_SETUP', 'PG_REPLICATION_SLOT_ADVANCE', 'PG_ROTATE_LOGFILE', 'PG_SIZE_BYTES', 'PG_SIZE_PRETTY', 'PG_START_BACKUP', 'PG_STAT_FILE', 'PG_STOP_BACKUP', 'PG_SWITCH_WAL', 'PG_TABLESPACE_SIZE', 'PG_TABLE_SIZE', 'PG_TERMINATE_BACKEND', 'PG_TOTAL_RELATION_SIZE', 'PG_TRY_ADVISORY_LOCK', 'PG_TRY_ADVISORY_LOCK_SHARED', 'PG_TRY_ADVISORY_XACT_LOCK', 'PG_TRY_ADVISORY_XACT_LOCK_SHARED', 'PG_WALFILE_NAME', 'PG_WALFILE_NAME_OFFSET', 'PG_WAL_LSN_DIFF', 'PG_WAL_REPLAY_PAUSE', 'PG_WAL_REPLAY_RESUME', 'SET_CONFIG'],
|
3340 | // https://www.postgresql.org/docs/14/functions-trigger.html
|
3341 | trigger: ['SUPPRESS_REDUNDANT_UPDATES_TRIGGER', 'TSVECTOR_UPDATE_TRIGGER', 'TSVECTOR_UPDATE_TRIGGER_COLUMN'],
|
3342 | // https://www.postgresql.org/docs/14/functions-event-triggers.html
|
3343 | eventTrigger: ['PG_EVENT_TRIGGER_DDL_COMMANDS', 'PG_EVENT_TRIGGER_DROPPED_OBJECTS', 'PG_EVENT_TRIGGER_TABLE_REWRITE_OID', 'PG_EVENT_TRIGGER_TABLE_REWRITE_REASON', 'PG_GET_OBJECT_ADDRESS'],
|
3344 | // https://www.postgresql.org/docs/14/functions-statistics.html
|
3345 | stats: ['PG_MCV_LIST_ITEMS']
|
3346 | };
|
3347 | /**
|
3348 | * Priority 5 (last)
|
3349 | * Full list of reserved words
|
3350 | * any words that are in a higher priority are removed
|
3351 | */
|
3352 | // https://www.postgresql.org/docs/14/sql-keywords-appendix.html
|
3353 |
|
3354 | var reservedKeywords = ['ABSENT', 'ABSOLUTE', 'ACCESS', 'ACCORDING', 'ACTION', 'ADA', 'ADMIN', 'AGGREGATE', 'ALL', 'ALLOCATE', 'ALSO', 'ALTER', 'ALWAYS', 'ANALYSE', 'ARE', 'ARRAY', 'ARRAY_MAX_CARDINALITY', 'AS', 'ASC', 'ASENSITIVE', 'ASSERTION', 'ASSIGNMENT', 'ASYMMETRIC', 'AT', 'ATOMIC', 'ATTACH', 'ATTRIBUTE', 'ATTRIBUTES', 'AUTHORIZATION', 'BACKWARD', 'BASE64', 'BEFORE', 'BEGIN_FRAME', 'BEGIN_PARTITION', 'BERNOULLI', 'BETWEEN', 'BIGINT', 'BINARY', 'BIT', 'BLOB', 'BLOCKED', 'BOM', 'BOOLEAN', 'BOTH', 'BREADTH', 'BY', 'CACHE', 'CALLED', 'CASCADE', 'CASCADED', 'CAST', 'CATALOG', 'CATALOG_NAME', 'CHAIN', 'CHAINING', 'CHAR', 'CHARACTER', 'CHARACTERISTICS', 'CHARACTERS', 'CHARACTER_SET_CATALOG', 'CHARACTER_SET_NAME', 'CHARACTER_SET_SCHEMA', 'CHECK', 'CLASS', 'CLASSIFIER', 'CLASS_ORIGIN', 'CLOB', 'COBOL', 'COLLATE', 'COLLATION', 'COLLATION_CATALOG', 'COLLATION_NAME', 'COLLATION_SCHEMA', 'COLLECT', 'COLUMN', 'COLUMNS', 'COLUMN_NAME', 'COMMAND_FUNCTION', 'COMMAND_FUNCTION_CODE', 'COMMENTS', 'COMMITTED', 'COMPRESSION', 'CONCURRENTLY', 'CONDITION', 'CONDITIONAL', 'CONDITION_NUMBER', 'CONFIGURATION', 'CONFLICT', 'CONNECT', 'CONNECTION', 'CONNECTION_NAME', 'CONSTRAINT', 'CONSTRAINTS', 'CONSTRAINT_CATALOG', 'CONSTRAINT_NAME', 'CONSTRAINT_SCHEMA', 'CONSTRUCTOR', 'CONTAINS', 'CONTENT', 'CONTINUE', 'CONTROL', 'CONVERSION', 'CORRESPONDING', 'COST', 'CREATE', 'CROSS', 'CSV', 'CUBE', 'CURRENT', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_PATH', 'CURRENT_ROW', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CURSOR', 'CURSOR_NAME', 'CYCLE', 'DATA', 'DATABASE', 'DATALINK', 'DATE', 'DATETIME_INTERVAL_CODE', 'DATETIME_INTERVAL_PRECISION', 'DAY', 'DB', 'DEC', 'DECFLOAT', 'DECIMAL', 'DEFAULT', 'DEFAULTS', 'DEFERRABLE', 'DEFERRED', 'DEFINE', 'DEFINED', 'DEFINER', 'DEGREE', 'DELIMITER', 'DELIMITERS', 'DEPENDS', 'DEPTH', 'DEREF', 'DERIVED', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DETACH', 'DETERMINISTIC', 'DIAGNOSTICS', 'DICTIONARY', 'DISABLE', 'DISCONNECT', 'DISPATCH', 'DISTINCT', 'DLNEWCOPY', 'DLPREVIOUSCOPY', 'DLURLCOMPLETE', 'DLURLCOMPLETEONLY', 'DLURLCOMPLETEWRITE', 'DLURLPATH', 'DLURLPATHONLY', 'DLURLPATHWRITE', 'DLURLSCHEME', 'DLURLSERVER', 'DLVALUE', 'DOCUMENT', 'DOMAIN', 'DOUBLE', 'DROP', 'DYNAMIC', 'DYNAMIC_FUNCTION', 'DYNAMIC_FUNCTION_CODE', 'EACH', 'ELEMENT', 'EMPTY', 'ENABLE', 'ENCODING', 'ENCRYPTED', 'END-EXEC', 'END_FRAME', 'END_PARTITION', 'ENFORCED', 'ENUM', 'EQUALS', 'ERROR', 'ESCAPE', 'EVENT', 'EXCEPTION', 'EXCLUDE', 'EXCLUDING', 'EXCLUSIVE', 'EXEC', 'EXISTS', 'EXPRESSION', 'EXTENSION', 'EXTERNAL', 'FALSE', 'FILE', 'FILTER', 'FINAL', 'FINALIZE', 'FINISH', 'FIRST', 'FLAG', 'FLOAT', 'FOLLOWING', 'FOR', 'FORCE', 'FOREIGN', 'FORTRAN', 'FORWARD', 'FOUND', 'FRAME_ROW', 'FREE', 'FREEZE', 'FS', 'FULFILL', 'FULL', 'FUNCTION', 'FUNCTIONS', 'FUSION', 'GENERAL', 'GENERATED', 'GET', 'GLOBAL', 'GO', 'GOTO', 'GRANTED', 'GROUP', 'GROUPS', 'HANDLER', 'HEADER', 'HEX', 'HIERARCHY', 'HOLD', 'HOUR', // 'ID',
|
3355 | 'IDENTITY', 'IF', 'IGNORE', 'ILIKE', 'IMMEDIATE', 'IMMEDIATELY', 'IMMUTABLE', 'IMPLEMENTATION', 'IMPLICIT', 'IMPORT', 'IN', 'INCLUDE', 'INCLUDING', 'INCREMENT', 'INDENT', 'INDEX', 'INDEXES', 'INDICATOR', 'INHERIT', 'INHERITS', 'INITIAL', 'INITIALLY', 'INLINE', 'INNER', 'INOUT', 'INPUT', 'INSENSITIVE', 'INSTANCE', 'INSTANTIABLE', 'INSTEAD', 'INT', 'INTEGER', 'INTEGRITY', 'INTERSECTION', 'INTERVAL', 'INTO', 'INVOKER', 'IS', 'ISNULL', 'ISOLATION', 'JSON', 'JSON_ARRAY', 'JSON_ARRAYAGG', 'JSON_EXISTS', 'JSON_OBJECTAGG', 'JSON_QUERY', 'JSON_TABLE', 'JSON_TABLE_PRIMITIVE', 'JSON_VALUE', 'KEEP', 'KEY', 'KEYS', 'KEY_MEMBER', 'KEY_TYPE', 'LABEL', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LEAKPROOF', 'LEVEL', 'LIBRARY', 'LIKE', 'LIKE_REGEX', 'LINK', 'LISTAGG', 'LOCAL', 'LOCATION', 'LOCATOR', 'LOCKED', 'LOGGED', 'MAP', 'MAPPING', 'MATCH', 'MATCHED', 'MATCHES', 'MATCH_NUMBER', 'MATCH_RECOGNIZE', 'MATERIALIZED', 'MAXVALUE', 'MEASURES', 'MEMBER', 'MERGE', 'MESSAGE_LENGTH', 'MESSAGE_OCTET_LENGTH', 'MESSAGE_TEXT', 'METHOD', 'MINUTE', 'MINVALUE', 'MODIFIES', 'MODULE', 'MONTH', 'MORE', 'MULTISET', 'MUMPS', 'NAME', 'NAMES', 'NAMESPACE', 'NATIONAL', 'NATURAL', 'NCHAR', 'NCLOB', 'NESTED', 'NESTING', 'NEW', 'NEXT', 'NFC', 'NFD', 'NFKC', 'NFKD', 'NIL', 'NO', 'NONE', 'NORMALIZED', 'NOT', 'NOTHING', 'NOTNULL', 'NOWAIT', 'NULL', 'NULLABLE', 'NULLS', 'NUMBER', 'NUMERIC', 'OBJECT', 'OCCURRENCES_REGEX', 'OCTETS', 'OF', 'OFF', 'OFFSET', 'OIDS', 'OLD', 'OMIT', 'ON COMMIT', 'ON DELETE', 'ON UPDATE', 'ONE', 'ONLY', 'OPEN', 'OPERATOR', 'OPTION', 'OPTIONS', 'ORDER', 'ORDERING', 'ORDINALITY', 'OTHERS', 'OUT', 'OUTER', 'OUTPUT', 'OVER', 'OVERFLOW', 'OVERLAPS', 'OVERRIDING', 'OWNED', 'OWNER', 'PAD', 'PARALLEL', 'PARAMETER', 'PARAMETER_MODE', 'PARAMETER_NAME', 'PARAMETER_ORDINAL_POSITION', 'PARAMETER_SPECIFIC_CATALOG', 'PARAMETER_SPECIFIC_NAME', 'PARAMETER_SPECIFIC_SCHEMA', 'PARSER', 'PARTIAL', 'PARTITION', 'PASCAL', 'PASS', 'PASSING', 'PASSTHROUGH', 'PASSWORD', 'PAST', 'PATTERN', 'PER', 'PERCENT', 'PERIOD', 'PERMISSION', 'PERMUTE', 'PLACING', 'PLAN', 'PLANS', 'PLI', 'POLICY', 'PORTION', 'POSITION_REGEX', 'PRECEDES', 'PRECEDING', 'PRECISION', 'PREPARED', 'PRESERVE', 'PRIMARY', 'PRIOR', 'PRIVATE', 'PRIVILEGES', 'PROCEDURAL', 'PROCEDURE', 'PROCEDURES', 'PROGRAM', 'PRUNE', 'PTF', 'PUBLIC', 'PUBLICATION', 'QUOTE', 'QUOTES', 'RANGE', 'READ', 'READS', 'REAL', 'REASSIGN', 'RECHECK', 'RECOVERY', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'REFRESH', 'RELATIVE', 'RELEASE', 'RENAME', 'REPEATABLE', 'REPLICA', 'REQUIRING', 'RESPECT', 'RESTART', 'RESTORE', 'RESTRICT', 'RESULT', 'RETURN', 'RETURNED_CARDINALITY', 'RETURNED_LENGTH', 'RETURNED_OCTET_LENGTH', 'RETURNED_SQLSTATE', 'RETURNS', 'ROLE', 'ROLLUP', 'ROUTINE', 'ROUTINES', 'ROUTINE_CATALOG', 'ROUTINE_NAME', 'ROUTINE_SCHEMA', 'ROW', 'ROWS', 'ROW_COUNT', 'RULE', 'RUNNING', 'SCALAR', 'SCHEMA', 'SCHEMAS', 'SCHEMA_NAME', 'SCOPE', 'SCOPE_CATALOG', 'SCOPE_NAME', 'SCOPE_SCHEMA', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SECURITY', 'SEEK', 'SELECTIVE', 'SELF', 'SENSITIVE', 'SEQUENCE', 'SEQUENCES', 'SERIALIZABLE', 'SERVER', 'SERVER_NAME', 'SESSION', 'SETOF', 'SETS', 'SHARE', 'SIMILAR', 'SIMPLE', 'SIZE', 'SKIP', 'SMALLINT', 'SNAPSHOT', 'SOURCE', 'SPACE', 'SPECIFIC', 'SPECIFICTYPE', 'SPECIFIC_NAME', 'SQL', 'SQLCODE', 'SQLERROR', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'STABLE', 'STANDALONE', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STATISTICS', 'STDIN', 'STDOUT', 'STORAGE', 'STORED', 'STRICT', 'STRUCTURE', 'STYLE', 'SUBCLASS_ORIGIN', 'SUBMULTISET', 'SUBSCRIPTION', 'SUBSET', 'SUBSTRING_REGEX', 'SUCCEEDS', 'SUPPORT', 'SYMMETRIC', 'SYSID', 'SYSTEM', 'SYSTEM_TIME', 'SYSTEM_USER', 'TABLE', 'TABLES', 'TABLESAMPLE', 'TABLESPACE', 'TABLE_NAME', 'TEMP', 'TEMPLATE', 'TEMPORARY', 'THEN', 'THROUGH', 'TIES', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TOKEN', 'TOP_LEVEL_COUNT', 'TRAILING', 'TRANSACTION', 'TRANSACTIONS_COMMITTED', 'TRANSACTIONS_ROLLED_BACK', 'TRANSACTION_ACTIVE', 'TRANSFORM', 'TRANSFORMS', 'TRANSLATE_REGEX', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRIGGER_CATALOG', 'TRIGGER_NAME', 'TRIGGER_SCHEMA', 'TRUE', 'TRUSTED', 'TYPE', 'TYPES', 'UESCAPE', 'UNBOUNDED', 'UNCOMMITTED', 'UNCONDITIONAL', 'UNDER', 'UNENCRYPTED', 'UNIQUE', 'UNKNOWN', 'UNLINK', 'UNLOGGED', 'UNMATCHED', 'UNNAMED', 'UNTIL', 'UNTYPED', 'URI', 'USAGE', 'USER_DEFINED_TYPE_CATALOG', 'USER_DEFINED_TYPE_CODE', 'USER_DEFINED_TYPE_NAME', 'USER_DEFINED_TYPE_SCHEMA', 'UTF16', 'UTF32', 'UTF8', 'VALID', 'VALIDATE', 'VALIDATOR', 'VALUE', 'VALUE_OF', 'VARBINARY', 'VARCHAR', 'VARIADIC', 'VARYING', 'VERBOSE', 'VERSIONING', 'VIEW', 'VIEWS', 'VOLATILE', 'WHENEVER', 'WHITESPACE', 'WINDOW', 'WITHIN', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', 'XML', 'XMLATTRIBUTES', 'XMLBINARY', 'XMLCAST', 'XMLDECLARATION', 'XMLDOCUMENT', 'XMLITERATE', 'XMLNAMESPACES', 'XMLQUERY', 'XMLSCHEMA', 'XMLTEXT', 'XMLVALIDATE', 'YEAR', 'YES', 'ZONE'];
|
3356 | /**
|
3357 | * Priority 1 (first)
|
3358 | * keywords that begin a new statement
|
3359 | * will begin new indented block
|
3360 | */
|
3361 | // https://www.postgresql.org/docs/14/sql-commands.html
|
3362 |
|
3363 | var reservedCommands = ['ABORT', 'ALTER AGGREGATE', 'ALTER COLLATION', 'ALTER CONVERSION', 'ALTER DATABASE', 'ALTER DEFAULT PRIVILEGES', 'ALTER DOMAIN', 'ALTER EVENT TRIGGER', 'ALTER EXTENSION', 'ALTER FOREIGN DATA WRAPPER', 'ALTER FOREIGN TABLE', 'ALTER FUNCTION', 'ALTER GROUP', 'ALTER INDEX', 'ALTER LANGUAGE', 'ALTER LARGE OBJECT', 'ALTER MATERIALIZED VIEW', 'ALTER OPERATOR', 'ALTER OPERATOR CLASS', 'ALTER OPERATOR FAMILY', 'ALTER POLICY', 'ALTER PROCEDURE', 'ALTER PUBLICATION', 'ALTER ROLE', 'ALTER ROUTINE', 'ALTER RULE', 'ALTER SCHEMA', 'ALTER SEQUENCE', 'ALTER SERVER', 'ALTER STATISTICS', 'ALTER SUBSCRIPTION', 'ALTER SYSTEM', 'ALTER TABLE', 'ALTER TABLESPACE', 'ALTER TEXT SEARCH CONFIGURATION', 'ALTER TEXT SEARCH DICTIONARY', 'ALTER TEXT SEARCH PARSER', 'ALTER TEXT SEARCH TEMPLATE', 'ALTER TRIGGER', 'ALTER TYPE', 'ALTER USER', 'ALTER USER MAPPING', 'ALTER VIEW', 'ANALYZE', 'BEGIN', 'CALL', 'CHECKPOINT', 'CLOSE', 'CLUSTER', 'COMMENT', 'COMMIT', 'COMMIT PREPARED', 'COPY', 'CREATE ACCESS METHOD', 'CREATE AGGREGATE', 'CREATE CAST', 'CREATE COLLATION', 'CREATE CONVERSION', 'CREATE DATABASE', 'CREATE DOMAIN', 'CREATE EVENT TRIGGER', 'CREATE EXTENSION', 'CREATE FOREIGN DATA WRAPPER', 'CREATE FOREIGN TABLE', 'CREATE FUNCTION', 'CREATE GROUP', 'CREATE INDEX', 'CREATE LANGUAGE', 'CREATE MATERIALIZED VIEW', 'CREATE OPERATOR', 'CREATE OPERATOR CLASS', 'CREATE OPERATOR FAMILY', 'CREATE POLICY', 'CREATE PROCEDURE', 'CREATE PUBLICATION', 'CREATE ROLE', 'CREATE RULE', 'CREATE SCHEMA', 'CREATE SEQUENCE', 'CREATE SERVER', 'CREATE STATISTICS', 'CREATE SUBSCRIPTION', 'CREATE TABLE', 'CREATE TABLE AS', 'CREATE TABLESPACE', 'CREATE TEXT SEARCH CONFIGURATION', 'CREATE TEXT SEARCH DICTIONARY', 'CREATE TEXT SEARCH PARSER', 'CREATE TEXT SEARCH TEMPLATE', 'CREATE TRANSFORM', 'CREATE TRIGGER', 'CREATE TYPE', 'CREATE USER', 'CREATE USER MAPPING', 'CREATE VIEW', 'DEALLOCATE', 'DECLARE', 'DELETE', 'DISCARD', 'DO', 'DROP ACCESS METHOD', 'DROP AGGREGATE', 'DROP CAST', 'DROP COLLATION', 'DROP CONVERSION', 'DROP DATABASE', 'DROP DOMAIN', 'DROP EVENT TRIGGER', 'DROP EXTENSION', 'DROP FOREIGN DATA WRAPPER', 'DROP FOREIGN TABLE', 'DROP FUNCTION', 'DROP GROUP', 'DROP INDEX', 'DROP LANGUAGE', 'DROP MATERIALIZED VIEW', 'DROP OPERATOR', 'DROP OPERATOR CLASS', 'DROP OPERATOR FAMILY', 'DROP OWNED', 'DROP POLICY', 'DROP PROCEDURE', 'DROP PUBLICATION', 'DROP ROLE', 'DROP ROUTINE', 'DROP RULE', 'DROP SCHEMA', 'DROP SEQUENCE', 'DROP SERVER', 'DROP STATISTICS', 'DROP SUBSCRIPTION', 'DROP TABLE', 'DROP TABLESPACE', 'DROP TEXT SEARCH CONFIGURATION', 'DROP TEXT SEARCH DICTIONARY', 'DROP TEXT SEARCH PARSER', 'DROP TEXT SEARCH TEMPLATE', 'DROP TRANSFORM', 'DROP TRIGGER', 'DROP TYPE', 'DROP USER', 'DROP USER MAPPING', 'DROP VIEW', 'END', 'EXECUTE', 'EXPLAIN', 'FETCH', 'GRANT', 'IMPORT FOREIGN SCHEMA', 'INSERT', 'LISTEN', 'LOAD', 'LOCK', 'MOVE', 'NOTIFY', 'PREPARE', 'PREPARE TRANSACTION', 'REASSIGN OWNED', 'REFRESH MATERIALIZED VIEW', 'REINDEX', 'RELEASE SAVEPOINT', 'RESET', 'RETURNING', 'REVOKE', 'ROLLBACK', 'ROLLBACK PREPARED', 'ROLLBACK TO SAVEPOINT', 'SAVEPOINT', 'SECURITY LABEL', 'SELECT', 'SELECT INTO', 'SET', 'SET CONSTRAINTS', 'SET ROLE', 'SET SESSION AUTHORIZATION', 'SET TRANSACTION', 'SHOW', 'START TRANSACTION', 'TRUNCATE', 'UNLISTEN', 'UPDATE', 'VACUUM', 'VALUES', // other
|
3364 | 'ADD', 'AFTER', 'ALTER COLUMN', 'INSERT INTO', 'SET SCHEMA', 'FROM', 'GROUP BY', 'HAVING', 'LIMIT', 'OFFSET', 'ORDER BY', 'WHERE', 'WITH'];
|
3365 | /**
|
3366 | * Priority 2
|
3367 | * commands that operate on two tables or subqueries
|
3368 | * two main categories: joins and boolean set operators
|
3369 | */
|
3370 |
|
3371 | var reservedBinaryCommands = [// set booleans
|
3372 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
|
3373 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
|
3374 | /**
|
3375 | * Priority 3
|
3376 | * keywords that follow a previous Statement, must be attached to subsequent data
|
3377 | * can be fully inline or on newline with optional indent
|
3378 | */
|
3379 |
|
3380 | var reservedDependentClauses = ['WHEN', 'ELSE'];
|
3381 | var binaryOperators = ['<<', '>>', '||/', '|/', '::', ':=', '->>', '->', '=>', '~~*', '~~', '!~~*', '!~~', '~*', '!~*', '!~', '!!', '||', '@-@', '@@', '##', '<->', '&&', '&<', '&>', '<<|', '&<|', '|>>', '|&>', '<^', '^>', '?#', '?-', '?|', '?-|', '?||', '@>', '<@', '~=', '>>=', '<<=', '@@@']; // https://www.postgresql.org/docs/14/index.html
|
3382 |
|
3383 | var PostgreSqlFormatter = /*#__PURE__*/function (_Formatter) {
|
3384 | _inherits(PostgreSqlFormatter, _Formatter);
|
3385 |
|
3386 | var _super = _createSuper(PostgreSqlFormatter);
|
3387 |
|
3388 | function PostgreSqlFormatter() {
|
3389 | _classCallCheck(this, PostgreSqlFormatter);
|
3390 |
|
3391 | return _super.apply(this, arguments);
|
3392 | }
|
3393 |
|
3394 | _createClass(PostgreSqlFormatter, [{
|
3395 | key: "tokenizer",
|
3396 | value: function tokenizer() {
|
3397 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
3398 | reservedCommands: PostgreSqlFormatter.reservedCommands,
|
3399 | reservedBinaryCommands: PostgreSqlFormatter.reservedBinaryCommands,
|
3400 | reservedDependentClauses: PostgreSqlFormatter.reservedDependentClauses,
|
3401 | reservedJoinConditions: PostgreSqlFormatter.reservedJoinConditions,
|
3402 | reservedLogicalOperators: PostgreSqlFormatter.reservedLogicalOperators,
|
3403 | reservedKeywords: PostgreSqlFormatter.reservedKeywords,
|
3404 | stringTypes: PostgreSqlFormatter.stringTypes,
|
3405 | blockStart: PostgreSqlFormatter.blockStart,
|
3406 | blockEnd: PostgreSqlFormatter.blockEnd,
|
3407 | indexedPlaceholderTypes: PostgreSqlFormatter.indexedPlaceholderTypes,
|
3408 | namedPlaceholderTypes: PostgreSqlFormatter.namedPlaceholderTypes,
|
3409 | lineCommentTypes: PostgreSqlFormatter.lineCommentTypes,
|
3410 | operators: PostgreSqlFormatter.operators
|
3411 | });
|
3412 | }
|
3413 | }]);
|
3414 |
|
3415 | return PostgreSqlFormatter;
|
3416 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
3417 |
|
3418 |
|
3419 | PostgreSqlFormatter.reservedCommands = reservedCommands;
|
3420 | PostgreSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
3421 | PostgreSqlFormatter.reservedDependentClauses = reservedDependentClauses;
|
3422 | PostgreSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
|
3423 | PostgreSqlFormatter.reservedLogicalOperators = ['AND', 'OR'];
|
3424 | PostgreSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
|
3425 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
3426 | }, [])), reservedKeywords));
|
3427 | PostgreSqlFormatter.stringTypes = ["\"\"", "''", "U&''", 'U&""', '$$', '``', "E''"];
|
3428 | PostgreSqlFormatter.blockStart = ['(', 'CASE'];
|
3429 | PostgreSqlFormatter.blockEnd = [')', 'END'];
|
3430 | PostgreSqlFormatter.indexedPlaceholderTypes = ['$'];
|
3431 | PostgreSqlFormatter.namedPlaceholderTypes = [':'];
|
3432 | PostgreSqlFormatter.lineCommentTypes = ['--'];
|
3433 | PostgreSqlFormatter.operators = binaryOperators;
|
3434 |
|
3435 | /***/ }),
|
3436 |
|
3437 | /***/ "./src/languages/redshift.formatter.ts":
|
3438 | /*!*********************************************!*\
|
3439 | !*** ./src/languages/redshift.formatter.ts ***!
|
3440 | \*********************************************/
|
3441 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
3442 |
|
3443 | __webpack_require__.r(__webpack_exports__);
|
3444 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
3445 | /* harmony export */ "default": () => (/* binding */ RedshiftFormatter)
|
3446 | /* harmony export */ });
|
3447 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
3448 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
3449 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
3450 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
3451 |
|
3452 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
3453 |
|
3454 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
3455 |
|
3456 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
3457 |
|
3458 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
3459 |
|
3460 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
3461 |
|
3462 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
3463 |
|
3464 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
3465 |
|
3466 | 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); } }
|
3467 |
|
3468 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
3469 |
|
3470 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
3471 |
|
3472 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
3473 |
|
3474 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
3475 |
|
3476 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
3477 |
|
3478 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
3479 |
|
3480 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
3481 |
|
3482 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
3483 |
|
3484 |
|
3485 |
|
3486 |
|
3487 | /**
|
3488 | * Priority 5 (last)
|
3489 | * Full list of reserved functions
|
3490 | * distinct from Keywords due to interaction with parentheses
|
3491 | */
|
3492 |
|
3493 | var reservedFunctions = {
|
3494 | // https://docs.aws.amazon.com/redshift/latest/dg/c_Aggregate_Functions.html
|
3495 | aggregate: ['ANY_VALUE', 'APPROXIMATE PERCENTILE_DISC', 'AVG', 'COUNT', 'LISTAGG', 'MAX', 'MEDIAN', 'MIN', 'PERCENTILE_CONT', 'STDDEV_SAMP', 'STDDEV_POP', 'SUM', 'VAR_SAMP', 'VAR_POP'],
|
3496 | // https://docs.aws.amazon.com/redshift/latest/dg/c_Array_Functions.html
|
3497 | array: ['array', 'array_concat', 'array_flatten', 'get_array_length', 'split_to_array', 'subarray'],
|
3498 | // https://docs.aws.amazon.com/redshift/latest/dg/c_bitwise_aggregate_functions.html
|
3499 | bitwise: ['BIT_AND', 'BIT_OR', 'BOOL_AND', 'BOOL_OR'],
|
3500 | // https://docs.aws.amazon.com/redshift/latest/dg/c_conditional_expressions.html
|
3501 | conditional: ['CASE', 'COALESCE', 'DECODE', 'GREATEST', 'LEAST', 'NVL', 'NVL2', 'NULLIF'],
|
3502 | // https://docs.aws.amazon.com/redshift/latest/dg/Date_functions_header.html
|
3503 | dateTime: ['ADD_MONTHS', 'AT TIME ZONE', 'CONVERT_TIMEZONE', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'DATE_CMP', 'DATE_CMP_TIMESTAMP', 'DATE_CMP_TIMESTAMPTZ', 'DATE_PART_YEAR', 'DATEADD', 'DATEDIFF', 'DATE_PART', 'DATE_TRUNC', 'EXTRACT', 'GETDATE', 'INTERVAL_CMP', 'LAST_DAY', 'MONTHS_BETWEEN', 'NEXT_DAY', 'SYSDATE', 'TIMEOFDAY', 'TIMESTAMP_CMP', 'TIMESTAMP_CMP_DATE', 'TIMESTAMP_CMP_TIMESTAMPTZ', 'TIMESTAMPTZ_CMP', 'TIMESTAMPTZ_CMP_DATE', 'TIMESTAMPTZ_CMP_TIMESTAMP', 'TIMEZONE', 'TO_TIMESTAMP', 'TRUNC'],
|
3504 | // https://docs.aws.amazon.com/redshift/latest/dg/geospatial-functions.html
|
3505 | spatial: ['AddBBox', 'DropBBox', 'GeometryType', 'ST_AddPoint', 'ST_Angle', 'ST_Area', 'ST_AsBinary', 'ST_AsEWKB', 'ST_AsEWKT', 'ST_AsGeoJSON', 'ST_AsText', 'ST_Azimuth', 'ST_Boundary', 'ST_Collect', 'ST_Contains', 'ST_ContainsProperly', 'ST_ConvexHull', 'ST_CoveredBy', 'ST_Covers', 'ST_Crosses', 'ST_Dimension', 'ST_Disjoint', 'ST_Distance', 'ST_DistanceSphere', 'ST_DWithin', 'ST_EndPoint', 'ST_Envelope', 'ST_Equals', 'ST_ExteriorRing', 'ST_Force2D', 'ST_Force3D', 'ST_Force3DM', 'ST_Force3DZ', 'ST_Force4D', 'ST_GeometryN', 'ST_GeometryType', 'ST_GeomFromEWKB', 'ST_GeomFromEWKT', 'ST_GeomFromText', 'ST_GeomFromWKB', 'ST_InteriorRingN', 'ST_Intersects', 'ST_IsPolygonCCW', 'ST_IsPolygonCW', 'ST_IsClosed', 'ST_IsCollection', 'ST_IsEmpty', 'ST_IsSimple', 'ST_IsValid', 'ST_Length', 'ST_LengthSphere', 'ST_Length2D', 'ST_LineFromMultiPoint', 'ST_LineInterpolatePoint', 'ST_M', 'ST_MakeEnvelope', 'ST_MakeLine', 'ST_MakePoint', 'ST_MakePolygon', 'ST_MemSize', 'ST_MMax', 'ST_MMin', 'ST_Multi', 'ST_NDims', 'ST_NPoints', 'ST_NRings', 'ST_NumGeometries', 'ST_NumInteriorRings', 'ST_NumPoints', 'ST_Perimeter', 'ST_Perimeter2D', 'ST_Point', 'ST_PointN', 'ST_Points', 'ST_Polygon', 'ST_RemovePoint', 'ST_Reverse', 'ST_SetPoint', 'ST_SetSRID', 'ST_Simplify', 'ST_SRID', 'ST_StartPoint', 'ST_Touches', 'ST_Within', 'ST_X', 'ST_XMax', 'ST_XMin', 'ST_Y', 'ST_YMax', 'ST_YMin', 'ST_Z', 'ST_ZMax', 'ST_ZMin', 'SupportsBBox'],
|
3506 | // https://docs.aws.amazon.com/redshift/latest/dg/hash-functions.html
|
3507 | hash: ['CHECKSUM', 'FUNC_SHA1', 'FNV_HASH', 'MD5', 'SHA', 'SHA1', 'SHA2'],
|
3508 | // https://docs.aws.amazon.com/redshift/latest/dg/hyperloglog-functions.html
|
3509 | hyperLogLog: ['HLL', 'HLL_CREATE_SKETCH', 'HLL_CARDINALITY', 'HLL_COMBINE'],
|
3510 | // https://docs.aws.amazon.com/redshift/latest/dg/json-functions.html
|
3511 | json: ['IS_VALID_JSON', 'IS_VALID_JSON_ARRAY', 'JSON_ARRAY_LENGTH', 'JSON_EXTRACT_ARRAY_ELEMENT_TEXT', 'JSON_EXTRACT_PATH_TEXT', 'JSON_PARSE', 'JSON_SERIALIZE'],
|
3512 | // https://docs.aws.amazon.com/redshift/latest/dg/Math_functions.html
|
3513 | math: ['ABS', 'ACOS', 'ASIN', 'ATAN', 'ATAN2', 'CBRT', 'CEILING', 'CEIL', 'COS', 'COT', 'DEGREES', 'DEXP', 'DLOG1', 'DLOG10', 'EXP', 'FLOOR', 'LN', 'LOG', 'MOD', 'PI', 'POWER', 'RADIANS', 'RANDOM', 'ROUND', 'SIN', 'SIGN', 'SQRT', 'TAN', 'TO_HEX', 'TRUNC'],
|
3514 | // https://docs.aws.amazon.com/redshift/latest/dg/ml-function.html
|
3515 | machineLearning: ['EXPLAIN_MODEL'],
|
3516 | // https://docs.aws.amazon.com/redshift/latest/dg/String_functions_header.html
|
3517 | string: ['ASCII', 'BPCHARCMP', 'BTRIM', 'BTTEXT_PATTERN_CMP', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHARINDEX', 'CHR', 'COLLATE', 'CONCAT', 'CRC32', 'DIFFERENCE', 'INITCAP', 'LEFT', 'RIGHT', 'LEN', 'LENGTH', 'LOWER', 'LPAD', 'RPAD', 'LTRIM', 'OCTETINDEX', 'OCTET_LENGTH', 'POSITION', 'QUOTE_IDENT', 'QUOTE_LITERAL', 'REGEXP_COUNT', 'REGEXP_INSTR', 'REGEXP_REPLACE', 'REGEXP_SUBSTR', 'REPEAT', 'REPLACE', 'REPLICATE', 'REVERSE', 'RTRIM', 'SOUNDEX', 'SPLIT_PART', 'STRPOS', 'STRTOL', 'SUBSTRING', 'TEXTLEN', 'TRANSLATE', 'TRIM', 'UPPER'],
|
3518 | // https://docs.aws.amazon.com/redshift/latest/dg/c_Type_Info_Functions.html
|
3519 | superType: ['decimal_precision', 'decimal_scale', 'is_array', 'is_bigint', 'is_boolean', 'is_char', 'is_decimal', 'is_float', 'is_integer', 'is_object', 'is_scalar', 'is_smallint', 'is_varchar', 'json_typeof'],
|
3520 | // https://docs.aws.amazon.com/redshift/latest/dg/c_Window_functions.html
|
3521 | window: ['AVG', 'COUNT', 'CUME_DIST', 'DENSE_RANK', 'FIRST_VALUE', 'LAST_VALUE', 'LAG', 'LEAD', 'LISTAGG', 'MAX', 'MEDIAN', 'MIN', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'RANK', 'RATIO_TO_REPORT', 'ROW_NUMBER', 'STDDEV_SAMP', 'STDDEV_POP', 'SUM', 'VAR_SAMP', 'VAR_POP'],
|
3522 | // https://docs.aws.amazon.com/redshift/latest/dg/r_Data_type_formatting.html
|
3523 | dataType: ['CAST', 'CONVERT', 'TO_CHAR', 'TO_DATE', 'TO_NUMBER', 'TEXT_TO_INT_ALT', 'TEXT_TO_NUMERIC_ALT'],
|
3524 | // https://docs.aws.amazon.com/redshift/latest/dg/r_System_administration_functions.html
|
3525 | sysAdmin: ['CHANGE_QUERY_PRIORITY', 'CHANGE_SESSION_PRIORITY', 'CHANGE_USER_PRIORITY', 'CURRENT_SETTING', 'PG_CANCEL_BACKEND', 'PG_TERMINATE_BACKEND', 'REBOOT_CLUSTER', 'SET_CONFIG'],
|
3526 | // https://docs.aws.amazon.com/redshift/latest/dg/r_System_information_functions.html
|
3527 | sysInfo: ['CURRENT_AWS_ACCOUNT', 'CURRENT_DATABASE', 'CURRENT_NAMESPACE', 'CURRENT_SCHEMA', 'CURRENT_SCHEMAS', 'CURRENT_USER', 'CURRENT_USER_ID', 'HAS_ASSUMEROLE_PRIVILEGE', 'HAS_DATABASE_PRIVILEGE', 'HAS_SCHEMA_PRIVILEGE', 'HAS_TABLE_PRIVILEGE', 'PG_BACKEND_PID', 'PG_GET_COLS', 'PG_GET_GRANTEE_BY_IAM_ROLE', 'PG_GET_IAM_ROLE_BY_USER', 'PG_GET_LATE_BINDING_VIEW_COLS', 'PG_LAST_COPY_COUNT', 'PG_LAST_COPY_ID', 'PG_LAST_UNLOAD_ID', 'PG_LAST_QUERY_ID', 'PG_LAST_UNLOAD_COUNT', 'SESSION_USER', 'SLICE_NUM', 'USER', 'VERSION']
|
3528 | };
|
3529 | /**
|
3530 | * Priority 5 (last)
|
3531 | * Full list of reserved words
|
3532 | * any words that are in a higher priority are removed
|
3533 | */
|
3534 |
|
3535 | var reservedKeywords = {
|
3536 | // https://docs.aws.amazon.com/redshift/latest/dg/r_pg_keywords.html
|
3537 | standard: ['AES128', 'AES256', 'ALL', 'ALLOWOVERWRITE', 'ANY', 'ARRAY', 'AS', 'ASC', 'AUTHORIZATION', 'BACKUP', 'BETWEEN', 'BINARY', 'BOTH', 'CHECK', 'COLUMN', 'CONSTRAINT', 'CREATE', 'CROSS', 'DEFAULT', 'DEFERRABLE', 'DEFLATE', 'DEFRAG', 'DESC', 'DISABLE', 'DISTINCT', 'DO', 'ENABLE', 'ENCODE', 'ENCRYPT', 'ENCRYPTION', 'EXPLICIT', 'FALSE', 'FOR', 'FOREIGN', 'FREEZE', 'FROM', 'FULL', 'GLOBALDICT256', 'GLOBALDICT64K', 'GROUP', 'IDENTITY', 'IGNORE', 'ILIKE', 'IN', 'INITIALLY', 'INNER', 'INTO', 'IS', 'ISNULL', 'LANGUAGE', 'LEADING', 'LIKE', 'LIMIT', 'LOCALTIME', 'LOCALTIMESTAMP', 'LUN', 'LUNS', 'MINUS', 'NATURAL', 'NEW', 'NOT', 'NOTNULL', 'NULL', 'NULLS', 'OFF', 'OFFLINE', 'OFFSET', 'OID', 'OLD', 'ONLY', 'OPEN', 'ORDER', 'OUTER', 'OVERLAPS', 'PARALLEL', 'PARTITION', 'PERCENT', 'PERMISSIONS', 'PLACING', 'PRIMARY', 'RECOVER', 'REFERENCES', 'REJECTLOG', 'RESORT', 'RESPECT', 'RESTORE', 'SIMILAR', 'SNAPSHOT', 'SOME', 'SYSTEM', 'TABLE', 'TAG', 'TDES', 'THEN', 'TIMESTAMP', 'TO', 'TOP', 'TRAILING', 'TRUE', 'UNIQUE', 'VERBOSE', 'WALLET', 'WITHOUT'],
|
3538 | // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html
|
3539 | dataConversionParams: ['ACCEPTANYDATE', 'ACCEPTINVCHARS', 'BLANKSASNULL', 'DATEFORMAT', 'EMPTYASNULL', 'ENCODING', 'ESCAPE', 'EXPLICIT_IDS', 'FILLRECORD', 'IGNOREBLANKLINES', 'IGNOREHEADER', 'NULL AS', 'REMOVEQUOTES', 'ROUNDEC', 'TIMEFORMAT', 'TRIMBLANKS', 'TRUNCATECOLUMNS'],
|
3540 | // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-load.html
|
3541 | dataLoadParams: ['COMPROWS', 'COMPUPDATE', 'MAXERROR', 'NOLOAD', 'STATUPDATE'],
|
3542 | // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html
|
3543 | dataFormatParams: ['FORMAT', 'CSV', 'DELIMITER', 'FIXEDWIDTH', 'SHAPEFILE', 'AVRO', 'JSON', 'PARQUET', 'ORC'],
|
3544 | // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-authorization.html
|
3545 | copyAuthParams: ['ACCESS_KEY_ID', 'CREDENTIALS', 'ENCRYPTED', 'IAM_ROLE', 'MASTER_SYMMETRIC_KEY', 'SECRET_ACCESS_KEY', 'SESSION_TOKEN'],
|
3546 | // https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-file-compression.html
|
3547 | copyCompressionParams: ['BZIP2', 'GZIP', 'LZOP', 'ZSTD'],
|
3548 | // https://docs.aws.amazon.com/redshift/latest/dg/r_COPY-alphabetical-parm-list.html
|
3549 | copyMiscParams: ['MANIFEST', 'READRATIO', 'REGION', 'SSH'],
|
3550 | // https://docs.aws.amazon.com/redshift/latest/dg/c_Compression_encodings.html
|
3551 | compressionEncodings: ['RAW', 'AZ64', 'BYTEDICT', 'DELTA', 'DELTA32K', 'LZO', 'MOSTLY8', 'MOSTLY16', 'MOSTLY32', 'RUNLENGTH', 'TEXT255', 'TEXT32K'],
|
3552 | misc: [// CREATE EXTERNAL SCHEMA (https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_SCHEMA.html)
|
3553 | 'CATALOG_ROLE', 'SECRET_ARN', 'EXTERNAL', 'HIVE METASTORE', // https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html
|
3554 | 'AUTO', 'EVEN', 'KEY', 'PREDICATE', // unknown
|
3555 | 'COMPRESSION', 'DATA CATALOG'],
|
3556 |
|
3557 | /**
|
3558 | * Other keywords not included:
|
3559 | * STL: https://docs.aws.amazon.com/redshift/latest/dg/c_intro_STL_tables.html
|
3560 | * SVCS: https://docs.aws.amazon.com/redshift/latest/dg/svcs_views.html
|
3561 | * SVL: https://docs.aws.amazon.com/redshift/latest/dg/svl_views.html
|
3562 | * SVV: https://docs.aws.amazon.com/redshift/latest/dg/svv_views.html
|
3563 | */
|
3564 | dataTypes: ['CHAR', 'CHARACTER', 'NCHAR', 'VARCHAR', 'CHARACTER VARYING', 'NVARCHAR', 'BPCHAR', 'TEXT']
|
3565 | };
|
3566 | /**
|
3567 | * Priority 1 (first)
|
3568 | * keywords that begin a new statement
|
3569 | * will begin new indented block
|
3570 | */
|
3571 | // https://docs.aws.amazon.com/redshift/latest/dg/c_SQL_commands.html
|
3572 |
|
3573 | var reservedCommands = ['ABORT', 'ALTER DATABASE', 'ALTER DATASHARE', 'ALTER DEFAULT PRIVILEGES', 'ALTER GROUP', 'ALTER MATERIALIZED VIEW', 'ALTER PROCEDURE', 'ALTER SCHEMA', 'ALTER TABLE', 'ALTER TABLE APPEND', 'ALTER USER', 'ANALYSE', 'ANALYZE', 'ANALYSE COMPRESSION', 'ANALYZE COMPRESSION', 'BEGIN', 'CALL', 'CANCEL', 'CLOSE', 'COMMENT', 'COMMIT', 'COPY', 'CREATE DATABASE', 'CREATE DATASHARE', 'CREATE EXTERNAL FUNCTION', 'CREATE EXTERNAL SCHEMA', 'CREATE EXTERNAL TABLE', 'CREATE FUNCTION', 'CREATE GROUP', 'CREATE LIBRARY', 'CREATE MATERIALIZED VIEW', 'CREATE MODEL', 'CREATE PROCEDURE', 'CREATE SCHEMA', 'CREATE TABLE', 'CREATE TABLE AS', 'CREATE USER', 'CREATE VIEW', 'DEALLOCATE', 'DECLARE', 'DELETE', 'DESC DATASHARE', 'DROP DATABASE', 'DROP DATASHARE', 'DROP FUNCTION', 'DROP GROUP', 'DROP LIBRARY', 'DROP MODEL', 'DROP MATERIALIZED VIEW', 'DROP PROCEDURE', 'DROP SCHEMA', 'DROP TABLE', 'DROP USER', 'DROP VIEW', 'DROP', 'END', 'EXECUTE', 'EXPLAIN', 'FETCH', 'FROM', 'GRANT', 'HAVING', 'INSERT', 'LOCK', 'PREPARE', 'REFRESH MATERIALIZED VIEW', 'RESET', 'REVOKE', 'ROLLBACK', 'SELECT', 'SELECT INTO', 'SET', 'SET SESSION AUTHORIZATION', 'SET SESSION CHARACTERISTICS', 'SHOW', 'SHOW EXTERNAL TABLE', 'SHOW MODEL', 'SHOW DATASHARES', 'SHOW PROCEDURE', 'SHOW TABLE', 'SHOW VIEW', 'START TRANSACTION', 'TRUNCATE', 'UNLOAD', 'UPDATE', 'VACUUM', 'WHERE', 'WITH', // other
|
3574 | 'GROUP BY', 'ORDER BY', 'LIMIT', 'OFFSET', 'VALUES', 'MODIFY', 'INSERT INTO', 'ALTER COLUMN', 'SET SCHEMA' // verify
|
3575 | ];
|
3576 | /**
|
3577 | * Priority 2
|
3578 | * commands that operate on two tables or subqueries
|
3579 | * two main categories: joins and boolean set operators
|
3580 | */
|
3581 |
|
3582 | var reservedBinaryCommands = [// set booleans
|
3583 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
|
3584 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
|
3585 | /**
|
3586 | * Priority 3
|
3587 | * keywords that follow a previous Statement, must be attached to subsequent data
|
3588 | * can be fully inline or on newline with optional indent
|
3589 | */
|
3590 |
|
3591 | var reservedDependentClauses = ['WHEN', 'ELSE']; // https://docs.aws.amazon.com/redshift/latest/dg/cm_chap_SQLCommandRef.html
|
3592 |
|
3593 | var RedshiftFormatter = /*#__PURE__*/function (_Formatter) {
|
3594 | _inherits(RedshiftFormatter, _Formatter);
|
3595 |
|
3596 | var _super = _createSuper(RedshiftFormatter);
|
3597 |
|
3598 | function RedshiftFormatter() {
|
3599 | _classCallCheck(this, RedshiftFormatter);
|
3600 |
|
3601 | return _super.apply(this, arguments);
|
3602 | }
|
3603 |
|
3604 | _createClass(RedshiftFormatter, [{
|
3605 | key: "tokenizer",
|
3606 | value: function tokenizer() {
|
3607 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
3608 | reservedCommands: RedshiftFormatter.reservedCommands,
|
3609 | reservedBinaryCommands: RedshiftFormatter.reservedBinaryCommands,
|
3610 | reservedDependentClauses: RedshiftFormatter.reservedDependentClauses,
|
3611 | reservedJoinConditions: RedshiftFormatter.reservedJoinConditions,
|
3612 | reservedLogicalOperators: RedshiftFormatter.reservedLogicalOperators,
|
3613 | reservedKeywords: RedshiftFormatter.reservedKeywords,
|
3614 | stringTypes: RedshiftFormatter.stringTypes,
|
3615 | blockStart: RedshiftFormatter.blockStart,
|
3616 | blockEnd: RedshiftFormatter.blockEnd,
|
3617 | indexedPlaceholderTypes: RedshiftFormatter.indexedPlaceholderTypes,
|
3618 | namedPlaceholderTypes: RedshiftFormatter.namedPlaceholderTypes,
|
3619 | lineCommentTypes: RedshiftFormatter.lineCommentTypes,
|
3620 | operators: RedshiftFormatter.operators
|
3621 | });
|
3622 | }
|
3623 | }]);
|
3624 |
|
3625 | return RedshiftFormatter;
|
3626 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
3627 |
|
3628 |
|
3629 | RedshiftFormatter.reservedCommands = reservedCommands;
|
3630 | RedshiftFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
3631 | RedshiftFormatter.reservedDependentClauses = reservedDependentClauses;
|
3632 | RedshiftFormatter.reservedJoinConditions = ['ON', 'USING'];
|
3633 | RedshiftFormatter.reservedLogicalOperators = ['AND', 'OR'];
|
3634 | RedshiftFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
|
3635 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
3636 | }, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
|
3637 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
3638 | }, []))));
|
3639 | RedshiftFormatter.stringTypes = ["\"\"", "''", '``'];
|
3640 | RedshiftFormatter.blockStart = ['('];
|
3641 | RedshiftFormatter.blockEnd = [')'];
|
3642 | RedshiftFormatter.indexedPlaceholderTypes = ['?'];
|
3643 | RedshiftFormatter.namedPlaceholderTypes = ['@', '#', '$'];
|
3644 | RedshiftFormatter.lineCommentTypes = ['--'];
|
3645 | RedshiftFormatter.operators = ['|/', '||/', '<<', '>>', '||'];
|
3646 |
|
3647 | /***/ }),
|
3648 |
|
3649 | /***/ "./src/languages/sparksql.formatter.ts":
|
3650 | /*!*********************************************!*\
|
3651 | !*** ./src/languages/sparksql.formatter.ts ***!
|
3652 | \*********************************************/
|
3653 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
3654 |
|
3655 | __webpack_require__.r(__webpack_exports__);
|
3656 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
3657 | /* harmony export */ "default": () => (/* binding */ SparkSqlFormatter)
|
3658 | /* harmony export */ });
|
3659 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
3660 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
3661 | /* harmony import */ var _core_token__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/token */ "./src/core/token.ts");
|
3662 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
3663 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
3664 |
|
3665 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
3666 |
|
3667 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
3668 |
|
3669 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
3670 |
|
3671 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
3672 |
|
3673 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
3674 |
|
3675 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
3676 |
|
3677 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
3678 |
|
3679 | 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); } }
|
3680 |
|
3681 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
3682 |
|
3683 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
3684 |
|
3685 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
3686 |
|
3687 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
3688 |
|
3689 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
3690 |
|
3691 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
3692 |
|
3693 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
3694 |
|
3695 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
3696 |
|
3697 |
|
3698 |
|
3699 | // convert to partial type import in TS 4.5
|
3700 |
|
3701 |
|
3702 | /**
|
3703 | * Priority 5 (last)
|
3704 | * Full list of reserved functions
|
3705 | * distinct from Keywords due to interaction with parentheses
|
3706 | */
|
3707 | // http://spark.apache.org/docs/latest/sql-ref-functions.html
|
3708 |
|
3709 | var reservedFunctions = {
|
3710 | // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#aggregate-functions
|
3711 | aggregate: ['ANY', 'APPROX_COUNT_DISTINCT', 'APPROX_PERCENTILE', 'AVG', 'BIT_AND', 'BIT_OR', 'BIT_XOR', 'BOOL_AND', 'BOOL_OR', 'COLLECT_LIST', 'COLLECT_SET', 'CORR', 'COUNT', 'COUNT', 'COUNT', 'COUNT_IF', 'COUNT_MIN_SKETCH', 'COVAR_POP', 'COVAR_SAMP', 'EVERY', 'FIRST', 'FIRST_VALUE', 'GROUPING', 'GROUPING_ID', 'KURTOSIS', 'LAST', 'LAST_VALUE', 'MAX', 'MAX_BY', 'MEAN', 'MIN', 'MIN_BY', 'PERCENTILE', 'PERCENTILE', 'PERCENTILE_APPROX', 'SKEWNESS', 'SOME', 'STD', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', 'SUM', 'VAR_POP', 'VAR_SAMP', 'VARIANCE'],
|
3712 | // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#window-functions
|
3713 | window: ['CUME_DIST', 'DENSE_RANK', 'LAG', 'LEAD', 'NTH_VALUE', 'NTILE', 'PERCENT_RANK', 'RANK', 'ROW_NUMBER'],
|
3714 | // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#array-functions
|
3715 | array: ['ARRAY', 'ARRAY_CONTAINS', 'ARRAY_DISTINCT', 'ARRAY_EXCEPT', 'ARRAY_INTERSECT', 'ARRAY_JOIN', 'ARRAY_MAX', 'ARRAY_MIN', 'ARRAY_POSITION', 'ARRAY_REMOVE', 'ARRAY_REPEAT', 'ARRAY_UNION', 'ARRAYS_OVERLAP', 'ARRAYS_ZIP', 'FLATTEN', 'SEQUENCE', 'SHUFFLE', 'SLICE', 'SORT_ARRAY'],
|
3716 | // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#map-functions
|
3717 | map: ['ELEMENT_AT', 'ELEMENT_AT', 'MAP', 'MAP_CONCAT', 'MAP_ENTRIES', 'MAP_FROM_ARRAYS', 'MAP_FROM_ENTRIES', 'MAP_KEYS', 'MAP_VALUES', 'STR_TO_MAP'],
|
3718 | // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#date-and-timestamp-functions
|
3719 | datetime: ['ADD_MONTHS', 'CURRENT_DATE', 'CURRENT_DATE', 'CURRENT_TIMESTAMP', 'CURRENT_TIMESTAMP', 'CURRENT_TIMEZONE', 'DATE_ADD', 'DATE_FORMAT', 'DATE_FROM_UNIX_DATE', 'DATE_PART', 'DATE_SUB', 'DATE_TRUNC', 'DATEDIFF', 'DAY', 'DAYOFMONTH', 'DAYOFWEEK', 'DAYOFYEAR', 'EXTRACT', 'FROM_UNIXTIME', 'FROM_UTC_TIMESTAMP', 'HOUR', 'LAST_DAY', 'MAKE_DATE', 'MAKE_DT_INTERVAL', 'MAKE_INTERVAL', 'MAKE_TIMESTAMP', 'MAKE_YM_INTERVAL', 'MINUTE', 'MONTH', 'MONTHS_BETWEEN', 'NEXT_DAY', 'NOW', 'QUARTER', 'SECOND', 'SESSION_WINDOW', 'TIMESTAMP_MICROS', 'TIMESTAMP_MILLIS', 'TIMESTAMP_SECONDS', 'TO_DATE', 'TO_TIMESTAMP', 'TO_UNIX_TIMESTAMP', 'TO_UTC_TIMESTAMP', 'TRUNC', 'UNIX_DATE', 'UNIX_MICROS', 'UNIX_MILLIS', 'UNIX_SECONDS', 'UNIX_TIMESTAMP', 'WEEKDAY', 'WEEKOFYEAR', 'WINDOW', 'YEAR'],
|
3720 | // http://spark.apache.org/docs/latest/sql-ref-functions-builtin.html#json-functions
|
3721 | json: ['FROM_JSON', 'GET_JSON_OBJECT', 'JSON_ARRAY_LENGTH', 'JSON_OBJECT_KEYS', 'JSON_TUPLE', 'SCHEMA_OF_JSON', 'TO_JSON'],
|
3722 | // http://spark.apache.org/docs/latest/api/sql/index.html
|
3723 | misc: ['ABS', 'ACOS', 'ACOSH', 'AGGREGATE', 'ARRAY_SORT', 'ASCII', 'ASIN', 'ASINH', 'ASSERT_TRUE', 'ATAN', 'ATAN2', 'ATANH', 'BASE64', 'BIGINT', 'BIN', 'BINARY', 'BIT_COUNT', 'BIT_GET', 'BIT_LENGTH', 'BOOLEAN', 'BROUND', 'BTRIM', 'CARDINALITY', 'CBRT', 'CEIL', 'CEILING', 'CHAR', 'CHAR_LENGTH', 'CHARACTER_LENGTH', 'CHR', 'CONCAT', 'CONCAT_WS', 'CONV', 'COS', 'COSH', 'COT', 'CRC32', 'CURRENT_CATALOG', 'CURRENT_DATABASE', 'CURRENT_USER', 'DATE', 'DECIMAL', 'DEGREES', 'DOUBLE', // 'E',
|
3724 | 'ELT', 'EXP', 'EXPM1', 'FACTORIAL', 'FIND_IN_SET', 'FLOAT', 'FLOOR', 'FORALL', 'FORMAT_NUMBER', 'FORMAT_STRING', 'FROM_CSV', 'GETBIT', 'HASH', 'HEX', 'HYPOT', 'INITCAP', 'INLINE', 'INLINE_OUTER', 'INPUT_FILE_BLOCK_LENGTH', 'INPUT_FILE_BLOCK_START', 'INPUT_FILE_NAME', 'INSTR', 'INT', 'ISNAN', 'ISNOTNULL', 'ISNULL', 'JAVA_METHOD', 'LCASE', 'LEFT', 'LENGTH', 'LEVENSHTEIN', 'LN', 'LOCATE', 'LOG', 'LOG10', 'LOG1P', 'LOG2', 'LOWER', 'LPAD', 'LTRIM', 'MAP_FILTER', 'MAP_ZIP_WITH', 'MD5', 'MOD', 'MONOTONICALLY_INCREASING_ID', 'NAMED_STRUCT', 'NANVL', 'NEGATIVE', 'NVL', 'NVL2', 'OCTET_LENGTH', 'OVERLAY', 'PARSE_URL', 'PI', 'PMOD', 'POSEXPLODE', 'POSEXPLODE_OUTER', 'POSITION', 'POSITIVE', 'POW', 'POWER', 'PRINTF', 'RADIANS', 'RAISE_ERROR', 'RAND', 'RANDN', 'RANDOM', 'REFLECT', 'REGEXP_EXTRACT', 'REGEXP_EXTRACT_ALL', 'REGEXP_LIKE', 'REGEXP_REPLACE', 'REPEAT', 'REPLACE', 'REVERSE', 'RIGHT', 'RINT', 'ROUND', 'RPAD', 'RTRIM', 'SCHEMA_OF_CSV', 'SENTENCES', 'SHA', 'SHA1', 'SHA2', 'SHIFTLEFT', 'SHIFTRIGHT', 'SHIFTRIGHTUNSIGNED', 'SIGN', 'SIGNUM', 'SIN', 'SINH', 'SMALLINT', 'SOUNDEX', 'SPACE', 'SPARK_PARTITION_ID', 'SPLIT', 'SQRT', 'STACK', 'SUBSTR', 'SUBSTRING', 'SUBSTRING_INDEX', 'TAN', 'TANH', 'TIMESTAMP', 'TINYINT', 'TO_CSV', 'TRANSFORM_KEYS', 'TRANSFORM_VALUES', 'TRANSLATE', 'TRIM', 'TRY_ADD', 'TRY_DIVIDE', 'TYPEOF', 'UCASE', 'UNBASE64', 'UNHEX', 'UPPER', 'UUID', 'VERSION', 'WIDTH_BUCKET', 'XPATH', 'XPATH_BOOLEAN', 'XPATH_DOUBLE', 'XPATH_FLOAT', 'XPATH_INT', 'XPATH_LONG', 'XPATH_NUMBER', 'XPATH_SHORT', 'XPATH_STRING', 'XXHASH64', 'ZIP_WITH']
|
3725 | };
|
3726 | /**
|
3727 | * Priority 5 (last)
|
3728 | * Full list of reserved words
|
3729 | * any words that are in a higher priority are removed
|
3730 | */
|
3731 | // https://deepkb.com/CO_000013/en/kb/IMPORT-fbfa59f0-2bf1-31fe-bb7b-0f9efe9932c6/spark-sql-keywords
|
3732 |
|
3733 | var reservedKeywords = ['ADD', 'AFTER', 'ALL', 'ALTER', 'ANALYZE', 'AND', 'ANTI', 'ANY', 'ARCHIVE', 'ARRAY', 'AS', 'ASC', 'AT', 'AUTHORIZATION', 'BETWEEN', 'BOTH', 'BUCKET', 'BUCKETS', 'BY', 'CACHE', 'CASCADE', 'CAST', 'CHANGE', 'CHECK', 'CLEAR', 'CLUSTER', 'CLUSTERED', 'CODEGEN', 'COLLATE', 'COLLECTION', 'COLUMN', 'COLUMNS', 'COMMENT', 'COMMIT', 'COMPACT', 'COMPACTIONS', 'COMPUTE', 'CONCATENATE', 'CONSTRAINT', 'COST', 'CREATE', 'CROSS', 'CUBE', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'DATA', 'DATABASE', 'DATABASES', 'DAY', 'DBPROPERTIES', 'DEFINED', 'DELETE', 'DELIMITED', 'DESC', 'DESCRIBE', 'DFS', 'DIRECTORIES', 'DIRECTORY', 'DISTINCT', 'DISTRIBUTE', 'DIV', 'DROP', 'ESCAPE', 'ESCAPED', 'EXCEPT', 'EXCHANGE', 'EXISTS', 'EXPORT', 'EXTENDED', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FIELDS', 'FILTER', 'FILEFORMAT', 'FIRST', 'FIRST_VALUE', 'FOLLOWING', 'FOR', 'FOREIGN', 'FORMAT', 'FORMATTED', 'FULL', 'FUNCTION', 'FUNCTIONS', 'GLOBAL', 'GRANT', 'GROUP', 'GROUPING', 'HOUR', 'IF', 'IGNORE', 'IMPORT', 'IN', 'INDEX', 'INDEXES', 'INNER', 'INPATH', 'INPUTFORMAT', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ITEMS', 'KEYS', 'LAST', 'LAST_VALUE', 'LATERAL', 'LAZY', 'LEADING', 'LEFT', 'LIKE', 'LINES', 'LIST', 'LOCAL', 'LOCATION', 'LOCK', 'LOCKS', 'LOGICAL', 'MACRO', 'MAP', 'MATCHED', 'MERGE', 'MINUTE', 'MONTH', 'MSCK', 'NAMESPACE', 'NAMESPACES', 'NATURAL', 'NO', 'NOT', 'NULL', 'NULLS', 'OF', 'ONLY', 'OPTION', 'OPTIONS', 'OR', 'ORDER', 'OUT', 'OUTER', 'OUTPUTFORMAT', 'OVER', 'OVERLAPS', 'OVERLAY', 'OVERWRITE', 'OWNER', 'PARTITION', 'PARTITIONED', 'PARTITIONS', 'PERCENT', 'PLACING', 'POSITION', 'PRECEDING', 'PRIMARY', 'PRINCIPALS', 'PROPERTIES', 'PURGE', 'QUERY', 'RANGE', 'RECORDREADER', 'RECORDWRITER', 'RECOVER', 'REDUCE', 'REFERENCES', 'RENAME', 'REPAIR', 'REPLACE', 'RESPECT', 'RESTRICT', 'REVOKE', 'RIGHT', 'RLIKE', 'ROLE', 'ROLES', 'ROLLBACK', 'ROLLUP', 'ROW', 'ROWS', 'SCHEMA', 'SECOND', 'SELECT', 'SEMI', 'SEPARATED', 'SERDE', 'SERDEPROPERTIES', 'SESSION_USER', 'SETS', 'SHOW', 'SKEWED', 'SOME', 'SORT', 'SORTED', 'START', 'STATISTICS', 'STORED', 'STRATIFY', 'STRUCT', 'SUBSTR', 'SUBSTRING', 'TABLE', 'TABLES', 'TBLPROPERTIES', 'TEMPORARY', 'TERMINATED', 'THEN', 'TO', 'TOUCH', 'TRAILING', 'TRANSACTION', 'TRANSACTIONS', 'TRIM', 'TRUE', 'TRUNCATE', 'UNARCHIVE', 'UNBOUNDED', 'UNCACHE', 'UNIQUE', 'UNKNOWN', 'UNLOCK', 'UNSET', 'USE', 'USER', 'VIEW', 'WINDOW', 'YEAR', // other
|
3734 | 'ANALYSE', 'ARRAY_ZIP', 'COALESCE', 'CONTAINS', 'CONVERT', 'CURRENT ROW', 'DAYS', 'DAY_HOUR', 'DAY_MINUTE', 'DAY_SECOND', 'DECODE', 'DEFAULT', 'DISTINCTROW', 'ENCODE', 'EXPLODE', 'EXPLODE_OUTER', 'FIXED', 'GREATEST', 'GROUP_CONCAT', 'HOURS', 'HOUR_MINUTE', 'HOUR_SECOND', 'IFNULL', 'LEAST', 'LEVEL', 'MINUTE_SECOND', 'NULLIF', 'OFFSET', 'ON DELETE', 'ON UPDATE', 'OPTIMIZE', 'REGEXP', 'SEPARATOR', 'SIZE', 'STRING', 'TYPE', 'TYPES', 'UNSIGNED', 'VARIABLES', 'YEAR_MONTH'];
|
3735 | /**
|
3736 | * Priority 1 (first)
|
3737 | * keywords that begin a new statement
|
3738 | * will begin new indented block
|
3739 | */
|
3740 | // http://spark.apache.org/docs/latest/sql-ref-syntax.html
|
3741 |
|
3742 | var reservedCommands = [// DDL
|
3743 | 'ALTER COLUMN', 'ALTER DATABASE', 'ALTER TABLE', 'ALTER VIEW', 'CREATE DATABASE', 'CREATE FUNCTION', 'CREATE TABLE', 'CREATE VIEW', 'DROP DATABASE', 'DROP FUNCTION', 'DROP TABLE', 'DROP VIEW', 'REPAIR TABLE', 'TRUNCATE TABLE', 'USE DATABASE', // DML
|
3744 | 'INSERT INTO', 'INSERT OVERWRITE', 'INSERT OVERWRITE DIRECTORY', 'LOAD', // Data Retrieval
|
3745 | 'SELECT', 'WITH', 'CLUSTER BY', 'DISTRIBUTE BY', 'PARTITION BY', 'GROUP BY', 'HAVING', 'VALUES', 'LIMIT', 'OFFSET', 'ORDER BY', 'SORT BY', 'TABLESAMPLE', 'WHERE', 'PIVOT', 'TRANSFORM', 'EXPLAIN', // Auxiliary
|
3746 | 'ADD FILE', 'ADD JAR', 'ANALYZE TABLE', 'CACHE TABLE', 'CLEAR CACHE', 'DESCRIBE DATABASE', 'DESCRIBE FUNCTION', 'DESCRIBE QUERY', 'DESCRIBE TABLE', 'LIST FILE', 'LIST JAR', 'REFRESH', 'REFRESH TABLE', 'REFRESH FUNCTION', 'RESET', 'SET', 'SET SCHEMA', 'SHOW COLUMNS', 'SHOW CREATE TABLE', 'SHOW DATABASES', 'SHOW FUNCTIONS', 'SHOW PARTITIONS', 'SHOW TABLE EXTENDED', 'SHOW TABLES', 'SHOW TBLPROPERTIES', 'SHOW VIEWS', 'UNCACHE TABLE', // other
|
3747 | 'FROM', 'INSERT', 'LATERAL VIEW', 'UPDATE', 'WINDOW' // verify
|
3748 | ];
|
3749 | /**
|
3750 | * Priority 2
|
3751 | * commands that operate on two tables or subqueries
|
3752 | * two main categories: joins and boolean set operators
|
3753 | */
|
3754 |
|
3755 | var reservedBinaryCommands = [// set booleans
|
3756 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
|
3757 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN', // apply
|
3758 | 'CROSS APPLY', 'OUTER APPLY', // non-standard-joins
|
3759 | 'ANTI JOIN', 'SEMI JOIN', 'LEFT ANTI JOIN', 'LEFT SEMI JOIN', 'RIGHT OUTER JOIN', 'RIGHT SEMI JOIN', 'NATURAL ANTI JOIN', 'NATURAL FULL OUTER JOIN', 'NATURAL INNER JOIN', 'NATURAL LEFT ANTI JOIN', 'NATURAL LEFT OUTER JOIN', 'NATURAL LEFT SEMI JOIN', 'NATURAL OUTER JOIN', 'NATURAL RIGHT OUTER JOIN', 'NATURAL RIGHT SEMI JOIN', 'NATURAL SEMI JOIN', 'CROSS APPLY', 'OUTER APPLY'];
|
3760 | /**
|
3761 | * Priority 3
|
3762 | * keywords that follow a previous Statement, must be attached to subsequent data
|
3763 | * can be fully inline or on newline with optional indent
|
3764 | */
|
3765 |
|
3766 | var reservedDependentClauses = ['WHEN', 'ELSE']; // http://spark.apache.org/docs/latest/sql-programming-guide.html
|
3767 |
|
3768 | var SparkSqlFormatter = /*#__PURE__*/function (_Formatter) {
|
3769 | _inherits(SparkSqlFormatter, _Formatter);
|
3770 |
|
3771 | var _super = _createSuper(SparkSqlFormatter);
|
3772 |
|
3773 | function SparkSqlFormatter() {
|
3774 | _classCallCheck(this, SparkSqlFormatter);
|
3775 |
|
3776 | return _super.apply(this, arguments);
|
3777 | }
|
3778 |
|
3779 | _createClass(SparkSqlFormatter, [{
|
3780 | key: "tokenizer",
|
3781 | value: function tokenizer() {
|
3782 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
3783 | reservedCommands: SparkSqlFormatter.reservedCommands,
|
3784 | reservedBinaryCommands: SparkSqlFormatter.reservedBinaryCommands,
|
3785 | reservedDependentClauses: SparkSqlFormatter.reservedDependentClauses,
|
3786 | reservedJoinConditions: SparkSqlFormatter.reservedJoinConditions,
|
3787 | reservedLogicalOperators: SparkSqlFormatter.reservedLogicalOperators,
|
3788 | reservedKeywords: SparkSqlFormatter.reservedKeywords,
|
3789 | stringTypes: SparkSqlFormatter.stringTypes,
|
3790 | blockStart: SparkSqlFormatter.blockStart,
|
3791 | blockEnd: SparkSqlFormatter.blockEnd,
|
3792 | indexedPlaceholderTypes: SparkSqlFormatter.indexedPlaceholderTypes,
|
3793 | namedPlaceholderTypes: SparkSqlFormatter.namedPlaceholderTypes,
|
3794 | lineCommentTypes: SparkSqlFormatter.lineCommentTypes,
|
3795 | operators: SparkSqlFormatter.operators
|
3796 | });
|
3797 | }
|
3798 | }, {
|
3799 | key: "tokenOverride",
|
3800 | value: function tokenOverride(token) {
|
3801 | // [WINDOW](...)
|
3802 | if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.WINDOW(token) && this.tokenLookAhead().type === _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.BLOCK_START) {
|
3803 | // This is a function call, treat it as a reserved word
|
3804 | return {
|
3805 | type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD,
|
3806 | value: token.value
|
3807 | };
|
3808 | } // .[END]
|
3809 |
|
3810 |
|
3811 | if (_core_token__WEBPACK_IMPORTED_MODULE_2__.isToken.END(token) && this.tokenLookBehind().value === '.') {
|
3812 | // This is window().end (or similar) not CASE ... END
|
3813 | return {
|
3814 | type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD,
|
3815 | value: token.value
|
3816 | };
|
3817 | } // TODO: deprecate this once ITEMS is merged with COLLECTION
|
3818 |
|
3819 |
|
3820 | if (/ITEMS/i.test(token.value) && token.type === _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.RESERVED_KEYWORD) {
|
3821 | if (!(/COLLECTION/i.test(this.tokenLookBehind().value) && /TERMINATED/i.test(this.tokenLookAhead().value))) {
|
3822 | // this is a word and not COLLECTION ITEMS
|
3823 | return {
|
3824 | type: _core_token__WEBPACK_IMPORTED_MODULE_2__.TokenType.WORD,
|
3825 | value: token.value
|
3826 | };
|
3827 | }
|
3828 | }
|
3829 |
|
3830 | return token;
|
3831 | }
|
3832 | }]);
|
3833 |
|
3834 | return SparkSqlFormatter;
|
3835 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
3836 |
|
3837 |
|
3838 | SparkSqlFormatter.reservedCommands = reservedCommands;
|
3839 | SparkSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
3840 | SparkSqlFormatter.reservedDependentClauses = reservedDependentClauses;
|
3841 | SparkSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
|
3842 | SparkSqlFormatter.reservedLogicalOperators = ['AND', 'OR', 'XOR'];
|
3843 | SparkSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_3__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
|
3844 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
3845 | }, [])), reservedKeywords));
|
3846 | SparkSqlFormatter.stringTypes = ["\"\"", "''", '``', '{}'];
|
3847 | SparkSqlFormatter.blockStart = ['(', 'CASE'];
|
3848 | SparkSqlFormatter.blockEnd = [')', 'END'];
|
3849 | SparkSqlFormatter.indexedPlaceholderTypes = ['?'];
|
3850 | SparkSqlFormatter.namedPlaceholderTypes = ['$'];
|
3851 | SparkSqlFormatter.lineCommentTypes = ['--'];
|
3852 | SparkSqlFormatter.operators = ['<=>', '&&', '||', '==', '->'];
|
3853 |
|
3854 | /***/ }),
|
3855 |
|
3856 | /***/ "./src/languages/standardsql.formatter.ts":
|
3857 | /*!************************************************!*\
|
3858 | !*** ./src/languages/standardsql.formatter.ts ***!
|
3859 | \************************************************/
|
3860 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
3861 |
|
3862 | __webpack_require__.r(__webpack_exports__);
|
3863 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
3864 | /* harmony export */ "default": () => (/* binding */ StandardSqlFormatter)
|
3865 | /* harmony export */ });
|
3866 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
3867 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
3868 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
3869 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
3870 |
|
3871 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
3872 |
|
3873 | 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); } }
|
3874 |
|
3875 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
3876 |
|
3877 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
3878 |
|
3879 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
3880 |
|
3881 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
3882 |
|
3883 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
3884 |
|
3885 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
3886 |
|
3887 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
3888 |
|
3889 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
3890 |
|
3891 |
|
3892 |
|
3893 |
|
3894 | /**
|
3895 | * Priority 5 (last)
|
3896 | * Full list of reserved words
|
3897 | * any words that are in a higher priority are removed
|
3898 | */
|
3899 | // https://jakewheat.github.io/sql-overview/sql-2008-foundation-grammar.html#reserved-word
|
3900 |
|
3901 | var reservedKeywords = ['ABS', 'ALL', 'ALLOCATE', 'ALTER', 'ANY', 'ARE', 'ARRAY', 'AS', 'ASENSITIVE', 'ASYMMETRIC', 'AT', 'ATOMIC', 'AUTHORIZATION', 'AVG', 'BEGIN', 'BETWEEN', 'BIGINT', 'BINARY', 'BLOB', 'BOOLEAN', 'BOTH', 'BY', 'CALL', 'CALLED', 'CARDINALITY', 'CASCADED', 'CAST', 'CEIL', 'CEILING', 'CHAR', 'CHARACTER', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHECK', 'CLOB', 'CLOSE', 'COALESCE', 'COLLATE', 'COLLECT', 'COLUMN', 'COMMIT', 'CONDITION', 'CONNECT', 'CONSTRAINT', 'CONVERT', 'CORR', 'CORRESPONDING', 'COUNT', 'COVAR_POP', 'COVAR_SAMP', 'CREATE', 'CROSS', 'CUBE', 'CUME_DIST', 'CURRENT', 'CURRENT_CATALOG', 'CURRENT_DATE', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CURRENT_USER', 'CURSOR', 'CYCLE', 'DATE', 'DAY', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DELETE', 'DENSE_RANK', 'DEREF', 'DESCRIBE', 'DETERMINISTIC', 'DISCONNECT', 'DISTINCT', 'DOUBLE', 'DROP', 'DYNAMIC', 'EACH', 'ELEMENT', 'END-EXEC', 'ESCAPE', 'EVERY', 'EXCEPT', 'EXEC', 'EXECUTE', 'EXISTS', 'EXP', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FILTER', 'FLOAT', 'FLOOR', 'FOR', 'FOREIGN', 'FREE', 'FROM', 'FULL', 'FUNCTION', 'FUSION', 'GET', 'GLOBAL', 'GRANT', 'GROUP', 'GROUPING', 'HAVING', 'HOLD', 'HOUR', 'IDENTITY', 'IN', 'INDICATOR', 'INNER', 'INOUT', 'INSENSITIVE', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERSECTION', 'INTERVAL', 'INTO', 'IS', 'LANGUAGE', 'LARGE', 'LATERAL', 'LEADING', 'LEFT', 'LIKE', 'LIKE_REGEX', 'LN', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOWER', 'MATCH', 'MAX', 'MEMBER', 'MERGE', 'METHOD', 'MIN', 'MINUTE', 'MOD', 'MODIFIES', 'MODULE', 'MONTH', 'MULTISET', 'NATIONAL', 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NO', 'NONE', 'NORMALIZE', 'NOT', 'NULL', 'NULLIF', 'NUMERIC', 'OCCURRENCES_REGEX', 'OCTET_LENGTH', 'OF', 'OLD', 'ON DELETE', 'ON UPDATE', 'ONLY', 'OPEN', 'ORDER', 'OUT', 'OUTER', 'OVER', 'OVERLAPS', 'OVERLAY', 'PARAMETER', 'PARTITION', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'POSITION', 'POSITION_REGEX', 'POWER', 'PRECISION', 'PREPARE', 'PRIMARY', 'PROCEDURE', 'RANGE', 'RANK', 'READS', 'REAL', 'RECURSIVE', 'REF', 'REFERENCES', 'REFERENCING', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'RELEASE', 'RESULT', 'RETURN', 'RETURNS', 'REVOKE', 'RIGHT', 'ROLLBACK', 'ROLLUP', 'ROW', 'ROWS', 'ROW_NUMBER', 'SAVEPOINT', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SELECT', 'SENSITIVE', 'SESSION_USER', 'SET', 'SIMILAR', 'SMALLINT', 'SOME', 'SPECIFIC', 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'SQRT', 'START', 'STATIC', 'STDDEV_POP', 'STDDEV_SAMP', 'SUBMULTISET', 'SUBSTRING', 'SUBSTRING_REGEX', 'SUM', 'SYMMETRIC', 'SYSTEM', 'SYSTEM_USER', 'TABLE', 'TABLESAMPLE', 'THEN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TRAILING', 'TRANSLATE', 'TRANSLATE_REGEX', 'TRANSLATION', 'TREAT', 'TRIGGER', 'TRIM', 'TRUE', 'UESCAPE', 'UNION', 'UNIQUE', 'UNKNOWN', 'UNNEST', 'UPDATE', 'UPPER', 'USER', 'VALUE', 'VALUES', 'VARBINARY', 'VARCHAR', 'VARYING', 'VAR_POP', 'VAR_SAMP', 'WHENEVER', 'WIDTH_BUCKET', 'WINDOW', 'WITHIN', 'WITHOUT', 'YEAR'];
|
3902 | /**
|
3903 | * Priority 1 (first)
|
3904 | * keywords that begin a new statement
|
3905 | * will begin new indented block
|
3906 | */
|
3907 |
|
3908 | var reservedCommands = ['ADD', 'ALTER COLUMN', 'ALTER TABLE', 'CREATE TABLE', 'DROP TABLE', 'END', 'FETCH FIRST', 'FETCH NEXT', 'FETCH PRIOR', 'FETCH LAST', 'FETCH ABSOLUTE', 'FETCH RELATIVE', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'SET SCHEMA', 'SET', 'UPDATE', 'VALUES', 'WHERE', 'WITH'];
|
3909 | /**
|
3910 | * Priority 2
|
3911 | * commands that operate on two tables or subqueries
|
3912 | * two main categories: joins and boolean set operators
|
3913 | */
|
3914 |
|
3915 | var reservedBinaryCommands = [// set booleans
|
3916 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', // joins
|
3917 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN', 'NATURAL JOIN'];
|
3918 | /**
|
3919 | * Priority 3
|
3920 | * keywords that follow a previous Statement, must be attached to subsequent data
|
3921 | * can be fully inline or on newline with optional indent
|
3922 | */
|
3923 |
|
3924 | var reservedDependentClauses = ['WHEN', 'ELSE'];
|
3925 |
|
3926 | var StandardSqlFormatter = /*#__PURE__*/function (_Formatter) {
|
3927 | _inherits(StandardSqlFormatter, _Formatter);
|
3928 |
|
3929 | var _super = _createSuper(StandardSqlFormatter);
|
3930 |
|
3931 | function StandardSqlFormatter() {
|
3932 | _classCallCheck(this, StandardSqlFormatter);
|
3933 |
|
3934 | return _super.apply(this, arguments);
|
3935 | }
|
3936 |
|
3937 | _createClass(StandardSqlFormatter, [{
|
3938 | key: "tokenizer",
|
3939 | value: function tokenizer() {
|
3940 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
3941 | reservedCommands: StandardSqlFormatter.reservedCommands,
|
3942 | reservedBinaryCommands: StandardSqlFormatter.reservedBinaryCommands,
|
3943 | reservedDependentClauses: StandardSqlFormatter.reservedDependentClauses,
|
3944 | reservedJoinConditions: StandardSqlFormatter.reservedJoinConditions,
|
3945 | reservedLogicalOperators: StandardSqlFormatter.reservedLogicalOperators,
|
3946 | reservedKeywords: StandardSqlFormatter.reservedKeywords,
|
3947 | stringTypes: StandardSqlFormatter.stringTypes,
|
3948 | blockStart: StandardSqlFormatter.blockStart,
|
3949 | blockEnd: StandardSqlFormatter.blockEnd,
|
3950 | indexedPlaceholderTypes: StandardSqlFormatter.indexedPlaceholderTypes,
|
3951 | namedPlaceholderTypes: StandardSqlFormatter.namedPlaceholderTypes,
|
3952 | lineCommentTypes: StandardSqlFormatter.lineCommentTypes
|
3953 | });
|
3954 | }
|
3955 | }]);
|
3956 |
|
3957 | return StandardSqlFormatter;
|
3958 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
3959 |
|
3960 |
|
3961 | StandardSqlFormatter.reservedCommands = reservedCommands;
|
3962 | StandardSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
3963 | StandardSqlFormatter.reservedDependentClauses = reservedDependentClauses;
|
3964 | StandardSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
|
3965 | StandardSqlFormatter.reservedLogicalOperators = ['AND', 'OR'];
|
3966 | StandardSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)(reservedKeywords);
|
3967 | StandardSqlFormatter.stringTypes = ["\"\"", "''", '``'];
|
3968 | StandardSqlFormatter.blockStart = ['(', 'CASE'];
|
3969 | StandardSqlFormatter.blockEnd = [')', 'END'];
|
3970 | StandardSqlFormatter.indexedPlaceholderTypes = ['?'];
|
3971 | StandardSqlFormatter.namedPlaceholderTypes = [];
|
3972 | StandardSqlFormatter.lineCommentTypes = ['--'];
|
3973 | StandardSqlFormatter.operators = [];
|
3974 |
|
3975 | /***/ }),
|
3976 |
|
3977 | /***/ "./src/languages/tsql.formatter.ts":
|
3978 | /*!*****************************************!*\
|
3979 | !*** ./src/languages/tsql.formatter.ts ***!
|
3980 | \*****************************************/
|
3981 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
3982 |
|
3983 | __webpack_require__.r(__webpack_exports__);
|
3984 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
3985 | /* harmony export */ "default": () => (/* binding */ TSqlFormatter)
|
3986 | /* harmony export */ });
|
3987 | /* harmony import */ var _core_Formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/Formatter */ "./src/core/Formatter.ts");
|
3988 | /* harmony import */ var _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/Tokenizer */ "./src/core/Tokenizer.ts");
|
3989 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils */ "./src/utils.ts");
|
3990 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
3991 |
|
3992 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
3993 |
|
3994 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
3995 |
|
3996 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
3997 |
|
3998 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
3999 |
|
4000 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
4001 |
|
4002 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
4003 |
|
4004 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
4005 |
|
4006 | 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); } }
|
4007 |
|
4008 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
4009 |
|
4010 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
4011 |
|
4012 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
4013 |
|
4014 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
4015 |
|
4016 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
4017 |
|
4018 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
4019 |
|
4020 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
4021 |
|
4022 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
4023 |
|
4024 |
|
4025 |
|
4026 |
|
4027 | /**
|
4028 | * Priority 5 (last)
|
4029 | * Full list of reserved functions
|
4030 | * distinct from Keywords due to interaction with parentheses
|
4031 | */
|
4032 | // https://docs.microsoft.com/en-us/sql/t-sql/functions/functions?view=sql-server-ver15
|
4033 |
|
4034 | var reservedFunctions = {
|
4035 | aggregate: ['APPROX_COUNT_DISTINCT', 'AVG', 'CHECKSUM_AGG', 'COUNT', 'COUNT_BIG', 'GROUPING', 'GROUPING_ID', 'MAX', 'MIN', 'STDEV', 'STDEVP', 'SUM', 'VAR', 'VARP'],
|
4036 | analytic: ['CUME_DIST', 'FIRST_VALUE', 'LAG', 'LAST_VALUE', 'LEAD', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'Collation - COLLATIONPROPERTY', 'Collation - TERTIARY_WEIGHTS'],
|
4037 | configuration: ['@@DBTS', '@@LANGID', '@@LANGUAGE', '@@LOCK_TIMEOUT', '@@MAX_CONNECTIONS', '@@MAX_PRECISION', '@@NESTLEVEL', '@@OPTIONS', '@@REMSERVER', '@@SERVERNAME', '@@SERVICENAME', '@@SPID', '@@TEXTSIZE', '@@VERSION'],
|
4038 | conversion: ['CAST', 'CONVERT', 'PARSE', 'TRY_CAST', 'TRY_CONVERT', 'TRY_PARSE'],
|
4039 | cryptographic: ['ASYMKEY_ID', 'ASYMKEYPROPERTY', 'CERTPROPERTY', 'CERT_ID', 'CRYPT_GEN_RANDOM', 'DECRYPTBYASYMKEY', 'DECRYPTBYCERT', 'DECRYPTBYKEY', 'DECRYPTBYKEYAUTOASYMKEY', 'DECRYPTBYKEYAUTOCERT', 'DECRYPTBYPASSPHRASE', 'ENCRYPTBYASYMKEY', 'ENCRYPTBYCERT', 'ENCRYPTBYKEY', 'ENCRYPTBYPASSPHRASE', 'HASHBYTES', 'IS_OBJECTSIGNED', 'KEY_GUID', 'KEY_ID', 'KEY_NAME', 'SIGNBYASYMKEY', 'SIGNBYCERT', 'SYMKEYPROPERTY', 'VERIFYSIGNEDBYCERT', 'VERIFYSIGNEDBYASYMKEY'],
|
4040 | cursor: ['@@CURSOR_ROWS', '@@FETCH_STATUS', 'CURSOR_STATUS'],
|
4041 | dataType: ['DATALENGTH', 'IDENT_CURRENT', 'IDENT_INCR', 'IDENT_SEED', 'IDENTITY', 'SQL_VARIANT_PROPERTY'],
|
4042 | datetime: ['@@DATEFIRST', 'CURRENT_TIMESTAMP', 'CURRENT_TIMEZONE', 'CURRENT_TIMEZONE_ID', 'DATEADD', 'DATEDIFF', 'DATEDIFF_BIG', 'DATEFROMPARTS', 'DATENAME', 'DATEPART', 'DATETIME2FROMPARTS', 'DATETIMEFROMPARTS', 'DATETIMEOFFSETFROMPARTS', 'DAY', 'EOMONTH', 'GETDATE', 'GETUTCDATE', 'ISDATE', 'MONTH', 'SMALLDATETIMEFROMPARTS', 'SWITCHOFFSET', 'SYSDATETIME', 'SYSDATETIMEOFFSET', 'SYSUTCDATETIME', 'TIMEFROMPARTS', 'TODATETIMEOFFSET', 'YEAR', 'JSON', 'ISJSON', 'JSON_VALUE', 'JSON_QUERY', 'JSON_MODIFY'],
|
4043 | mathematical: ['ABS', 'ACOS', 'ASIN', 'ATAN', 'ATN2', 'CEILING', 'COS', 'COT', 'DEGREES', 'EXP', 'FLOOR', 'LOG', 'LOG10', 'PI', 'POWER', 'RADIANS', 'RAND', 'ROUND', 'SIGN', 'SIN', 'SQRT', 'SQUARE', 'TAN', 'CHOOSE', 'GREATEST', 'IIF', 'LEAST'],
|
4044 | metadata: ['@@PROCID', 'APP_NAME', 'APPLOCK_MODE', 'APPLOCK_TEST', 'ASSEMBLYPROPERTY', 'COL_LENGTH', 'COL_NAME', 'COLUMNPROPERTY', 'DATABASEPROPERTYEX', 'DB_ID', 'DB_NAME', 'FILE_ID', 'FILE_IDEX', 'FILE_NAME', 'FILEGROUP_ID', 'FILEGROUP_NAME', 'FILEGROUPPROPERTY', 'FILEPROPERTY', 'FILEPROPERTYEX', 'FULLTEXTCATALOGPROPERTY', 'FULLTEXTSERVICEPROPERTY', 'INDEX_COL', 'INDEXKEY_PROPERTY', 'INDEXPROPERTY', 'NEXT VALUE FOR', 'OBJECT_DEFINITION', 'OBJECT_ID', 'OBJECT_NAME', 'OBJECT_SCHEMA_NAME', 'OBJECTPROPERTY', 'OBJECTPROPERTYEX', 'ORIGINAL_DB_NAME', 'PARSENAME', 'SCHEMA_ID', 'SCHEMA_NAME', 'SCOPE_IDENTITY', 'SERVERPROPERTY', 'STATS_DATE', 'TYPE_ID', 'TYPE_NAME', 'TYPEPROPERTY'],
|
4045 | ranking: ['DENSE_RANK', 'NTILE', 'RANK', 'ROW_NUMBER', 'PUBLISHINGSERVERNAME'],
|
4046 | security: ['CERTENCODED', 'CERTPRIVATEKEY', 'CURRENT_USER', 'DATABASE_PRINCIPAL_ID', 'HAS_DBACCESS', 'HAS_PERMS_BY_NAME', 'IS_MEMBER', 'IS_ROLEMEMBER', 'IS_SRVROLEMEMBER', 'LOGINPROPERTY', 'ORIGINAL_LOGIN', 'PERMISSIONS', 'PWDENCRYPT', 'PWDCOMPARE', 'SESSION_USER', 'SESSIONPROPERTY', 'SUSER_ID', 'SUSER_NAME', 'SUSER_SID', 'SUSER_SNAME', 'SYSTEM_USER', 'USER', 'USER_ID', 'USER_NAME'],
|
4047 | string: ['ASCII', 'CHAR', 'CHARINDEX', 'CONCAT', 'CONCAT_WS', 'DIFFERENCE', 'FORMAT', 'LEFT', 'LEN', 'LOWER', 'LTRIM', 'NCHAR', 'PATINDEX', 'QUOTENAME', 'REPLACE', 'REPLICATE', 'REVERSE', 'RIGHT', 'RTRIM', 'SOUNDEX', 'SPACE', 'STR', 'STRING_AGG', 'STRING_ESCAPE', 'STUFF', 'SUBSTRING', 'TRANSLATE', 'TRIM', 'UNICODE', 'UPPER'],
|
4048 | system: ['$PARTITION', '@@ERROR', '@@IDENTITY', '@@PACK_RECEIVED', '@@ROWCOUNT', '@@TRANCOUNT', 'BINARY_CHECKSUM', 'CHECKSUM', 'COMPRESS', 'CONNECTIONPROPERTY', 'CONTEXT_INFO', 'CURRENT_REQUEST_ID', 'CURRENT_TRANSACTION_ID', 'DECOMPRESS', 'ERROR_LINE', 'ERROR_MESSAGE', 'ERROR_NUMBER', 'ERROR_PROCEDURE', 'ERROR_SEVERITY', 'ERROR_STATE', 'FORMATMESSAGE', 'GET_FILESTREAM_TRANSACTION_CONTEXT', 'GETANSINULL', 'HOST_ID', 'HOST_NAME', 'ISNULL', 'ISNUMERIC', 'MIN_ACTIVE_ROWVERSION', 'NEWID', 'NEWSEQUENTIALID', 'ROWCOUNT_BIG', 'SESSION_CONTEXT', 'XACT_STATE'],
|
4049 | statistical: ['@@CONNECTIONS', '@@CPU_BUSY', '@@IDLE', '@@IO_BUSY', '@@PACK_SENT', '@@PACKET_ERRORS', '@@TIMETICKS', '@@TOTAL_ERRORS', '@@TOTAL_READ', '@@TOTAL_WRITE', 'TEXTPTR', 'TEXTVALID'],
|
4050 | trigger: ['COLUMNS_UPDATED', 'EVENTDATA', 'TRIGGER_NESTLEVEL', 'UPDATE']
|
4051 | }; // TODO: dedupe these reserved word lists
|
4052 | // https://docs.microsoft.com/en-us/sql/t-sql/language-elements/reserved-keywords-transact-sql?view=sql-server-ver15
|
4053 |
|
4054 | /**
|
4055 | * Priority 5 (last)
|
4056 | * Full list of reserved words
|
4057 | * any words that are in a higher priority are removed
|
4058 | */
|
4059 |
|
4060 | var reservedKeywords = {
|
4061 | standard: ['ADD', 'ALL', 'ALTER', 'AND', 'ANY', 'AS', 'ASC', 'AUTHORIZATION', 'BACKUP', 'BEGIN', 'BETWEEN', 'BREAK', 'BROWSE', 'BULK', 'BY', 'CASCADE', 'CASE', 'CHECK', 'CHECKPOINT', 'CLOSE', 'CLUSTERED', 'COALESCE', 'COLLATE', 'COLUMN', 'COMMIT', 'COMPUTE', 'CONSTRAINT', 'CONTAINS', 'CONTAINSTABLE', 'CONTINUE', 'CONVERT', 'CREATE', 'CROSS', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'DATABASE', 'DBCC', 'DEALLOCATE', 'DECLARE', 'DEFAULT', 'DELETE', 'DENY', 'DESC', 'DISK', 'DISTINCT', 'DISTRIBUTED', 'DOUBLE', 'DROP', 'DUMP', 'ERRLVL', 'ESCAPE', 'EXEC', 'EXECUTE', 'EXISTS', 'EXIT', 'EXTERNAL', 'FETCH', 'FILE', 'FILLFACTOR', 'FOR', 'FOREIGN', 'FREETEXT', 'FREETEXTTABLE', 'FROM', 'FULL', 'FUNCTION', 'GOTO', 'GRANT', 'GROUP', 'HAVING', 'HOLDLOCK', 'IDENTITY', 'IDENTITYCOL', 'IDENTITY_INSERT', 'IF', 'IN', 'INDEX', 'INNER', 'INSERT', 'INTERSECT', 'INTO', 'IS', 'JOIN', 'KEY', 'KILL', 'LEFT', 'LIKE', 'LINENO', 'LOAD', 'MERGE', 'NATIONAL', 'NOCHECK', 'NONCLUSTERED', 'NOT', 'NULL', 'NULLIF', 'OF', 'OFF', 'OFFSETS', 'ON DELETE', 'ON UPDATE', 'OPEN', 'OPENDATASOURCE', 'OPENQUERY', 'OPENROWSET', 'OPENXML', 'OPTION', 'OR', 'ORDER', 'OUTER', 'OVER', 'PERCENT', 'PIVOT', 'PLAN', 'PRECISION', 'PRIMARY', 'PRINT', 'PROC', 'PROCEDURE', 'PUBLIC', 'RAISERROR', 'READ', 'READTEXT', 'RECONFIGURE', 'REFERENCES', 'REPLICATION', 'RESTORE', 'RESTRICT', 'RETURN', 'REVERT', 'REVOKE', 'RIGHT', 'ROLLBACK', 'ROWCOUNT', 'ROWGUIDCOL', 'RULE', 'SAVE', 'SCHEMA', 'SECURITYAUDIT', 'SELECT', 'SEMANTICKEYPHRASETABLE', 'SEMANTICSIMILARITYDETAILSTABLE', 'SEMANTICSIMILARITYTABLE', 'SESSION_USER', 'SET', 'SETUSER', 'SHUTDOWN', 'SOME', 'STATISTICS', 'SYSTEM_USER', 'TABLE', 'TABLESAMPLE', 'TEXTSIZE', 'THEN', 'TO', 'TOP', 'TRAN', 'TRANSACTION', 'TRIGGER', 'TRUNCATE', 'TRY_CONVERT', 'TSEQUAL', 'UNION', 'UNIQUE', 'UNPIVOT', 'UPDATE', 'UPDATETEXT', 'USE', 'USER', 'VALUES', 'VARYING', 'VIEW', 'WAITFOR', 'WHERE', 'WHILE', 'WITH', 'WITHIN GROUP', 'WRITETEXT'],
|
4062 | odbc: ['ABSOLUTE', 'ACTION', 'ADA', 'ADD', 'ALL', 'ALLOCATE', 'ALTER', 'AND', 'ANY', 'ARE', 'AS', 'ASC', 'ASSERTION', 'AT', 'AUTHORIZATION', 'AVG', 'BEGIN', 'BETWEEN', 'BIT', 'BIT_LENGTH', 'BOTH', 'BY', 'CASCADE', 'CASCADED', 'CASE', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CHARACTER_LENGTH', 'CHAR_LENGTH', 'CHECK', 'CLOSE', 'COALESCE', 'COLLATE', 'COLLATION', 'COLUMN', 'COMMIT', 'CONNECT', 'CONNECTION', 'CONSTRAINT', 'CONSTRAINTS', 'CONTINUE', 'CONVERT', 'CORRESPONDING', 'COUNT', 'CREATE', 'CROSS', 'CURRENT', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', 'CURSOR', 'DATE', 'DAY', 'DEALLOCATE', 'DEC', 'DECIMAL', 'DECLARE', 'DEFAULT', 'DEFERRABLE', 'DEFERRED', 'DELETE', 'DESC', 'DESCRIBE', 'DESCRIPTOR', 'DIAGNOSTICS', 'DISCONNECT', 'DISTINCT', 'DOMAIN', 'DOUBLE', 'DROP', 'END-EXEC', 'ESCAPE', 'EXCEPTION', 'EXEC', 'EXECUTE', 'EXISTS', 'EXTERNAL', 'EXTRACT', 'FALSE', 'FETCH', 'FIRST', 'FLOAT', 'FOR', 'FOREIGN', 'FORTRAN', 'FOUND', 'FROM', 'FULL', 'GET', 'GLOBAL', 'GO', 'GOTO', 'GRANT', 'GROUP', 'HAVING', 'HOUR', 'IDENTITY', 'IMMEDIATE', 'IN', 'INCLUDE', 'INDEX', 'INDICATOR', 'INITIALLY', 'INNER', 'INPUT', 'INSENSITIVE', 'INSERT', 'INT', 'INTEGER', 'INTERSECT', 'INTERVAL', 'INTO', 'IS', 'ISOLATION', 'JOIN', 'KEY', 'LANGUAGE', 'LAST', 'LEADING', 'LEFT', 'LEVEL', 'LIKE', 'LOCAL', 'LOWER', 'MATCH', 'MAX', 'MIN', 'MINUTE', 'MODULE', 'MONTH', 'NAMES', 'NATIONAL', 'NATURAL', 'NCHAR', 'NEXT', 'NO', 'NONE', 'NOT', 'NULL', 'NULLIF', 'NUMERIC', 'OCTET_LENGTH', 'OF', 'ONLY', 'OPEN', 'OPTION', 'OR', 'ORDER', 'OUTER', 'OUTPUT', 'OVERLAPS', 'PAD', 'PARTIAL', 'PASCAL', 'POSITION', 'PRECISION', 'PREPARE', 'PRESERVE', 'PRIMARY', 'PRIOR', 'PRIVILEGES', 'PROCEDURE', 'PUBLIC', 'READ', 'REAL', 'REFERENCES', 'RELATIVE', 'RESTRICT', 'REVOKE', 'RIGHT', 'ROLLBACK', 'ROWS', 'SCHEMA', 'SCROLL', 'SECOND', 'SECTION', 'SELECT', 'SESSION', 'SESSION_USER', 'SET', 'SIZE', 'SMALLINT', 'SOME', 'SPACE', 'SQL', 'SQLCA', 'SQLCODE', 'SQLERROR', 'SQLSTATE', 'SQLWARNING', 'SUBSTRING', 'SUM', 'SYSTEM_USER', 'TABLE', 'TEMPORARY', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TO', 'TRAILING', 'TRANSACTION', 'TRANSLATE', 'TRANSLATION', 'TRIM', 'TRUE', 'UNION', 'UNIQUE', 'UNKNOWN', 'UPDATE', 'UPPER', 'USAGE', 'USER', 'VALUE', 'VALUES', 'VARCHAR', 'VARYING', 'VIEW', 'WHENEVER', 'WHERE', 'WITH', 'WORK', 'WRITE', 'YEAR', 'ZONE'],
|
4063 | future: ['ABSOLUTE', 'ACTION', 'ADMIN', 'AFTER', 'AGGREGATE', 'ALIAS', 'ALLOCATE', 'ARE', 'ARRAY', 'ASENSITIVE', 'ASSERTION', 'ASYMMETRIC', 'AT', 'ATOMIC', 'BEFORE', 'BINARY', 'BIT', 'BLOB', 'BOOLEAN', 'BOTH', 'BREADTH', 'CALL', 'CALLED', 'CARDINALITY', 'CASCADED', 'CAST', 'CATALOG', 'CHAR', 'CHARACTER', 'CLASS', 'CLOB', 'COLLATION', 'COLLECT', 'COMPLETION', 'CONDITION', 'CONNECT', 'CONNECTION', 'CONSTRAINTS', 'CONSTRUCTOR', 'CORR', 'CORRESPONDING', 'COVAR_POP', 'COVAR_SAMP', 'CUBE', 'CUME_DIST', 'CURRENT_CATALOG', 'CURRENT_DEFAULT_TRANSFORM_GROUP', 'CURRENT_PATH', 'CURRENT_ROLE', 'CURRENT_SCHEMA', 'CURRENT_TRANSFORM_GROUP_FOR_TYPE', 'CYCLE', 'DATA', 'DATE', 'DAY', 'DEC', 'DECIMAL', 'DEFERRABLE', 'DEFERRED', 'DEPTH', 'DEREF', 'DESCRIBE', 'DESCRIPTOR', 'DESTROY', 'DESTRUCTOR', 'DETERMINISTIC', 'DIAGNOSTICS', 'DICTIONARY', 'DISCONNECT', 'DOMAIN', 'DYNAMIC', 'EACH', 'ELEMENT', 'END-EXEC', 'EQUALS', 'EVERY', 'FALSE', 'FILTER', 'FIRST', 'FLOAT', 'FOUND', 'FREE', 'FULLTEXTTABLE', 'FUSION', 'GENERAL', 'GET', 'GLOBAL', 'GO', 'GROUPING', 'HOLD', 'HOST', 'HOUR', 'IGNORE', 'IMMEDIATE', 'INDICATOR', 'INITIALIZE', 'INITIALLY', 'INOUT', 'INPUT', 'INT', 'INTEGER', 'INTERSECTION', 'INTERVAL', 'ISOLATION', 'ITERATE', 'LANGUAGE', 'LARGE', 'LAST', 'LATERAL', 'LEADING', 'LESS', 'LEVEL', 'LIKE_REGEX', 'LIMIT', 'LN', 'LOCAL', 'LOCALTIME', 'LOCALTIMESTAMP', 'LOCATOR', 'MAP', 'MATCH', 'MEMBER', 'METHOD', 'MINUTE', 'MOD', 'MODIFIES', 'MODIFY', 'MODULE', 'MONTH', 'MULTISET', 'NAMES', 'NATURAL', 'NCHAR', 'NCLOB', 'NEW', 'NEXT', 'NO', 'NONE', 'NORMALIZE', 'NUMERIC', 'OBJECT', 'OCCURRENCES_REGEX', 'OLD', 'ONLY', 'OPERATION', 'ORDINALITY', 'OUT', 'OUTPUT', 'OVERLAY', 'PAD', 'PARAMETER', 'PARAMETERS', 'PARTIAL', 'PARTITION', 'PATH', 'PERCENTILE_CONT', 'PERCENTILE_DISC', 'PERCENT_RANK', 'POSITION_REGEX', 'POSTFIX', 'PREFIX', 'PREORDER', 'PREPARE', 'PRESERVE', 'PRIOR', 'PRIVILEGES', 'RANGE', 'READS', 'REAL', 'RECURSIVE', 'REF', 'REFERENCING', 'REGR_AVGX', 'REGR_AVGY', 'REGR_COUNT', 'REGR_INTERCEPT', 'REGR_R2', 'REGR_SLOPE', 'REGR_SXX', 'REGR_SXY', 'REGR_SYY', 'RELATIVE', 'RELEASE', 'RESULT', 'RETURNS', 'ROLE', 'ROLLUP', 'ROUTINE', 'ROW', 'ROWS', 'SAVEPOINT', 'SCOPE', 'SCROLL', 'SEARCH', 'SECOND', 'SECTION', 'SENSITIVE', 'SEQUENCE', 'SESSION', 'SETS', 'SIMILAR', 'SIZE', 'SMALLINT', 'SPACE', 'SPECIFIC', 'SPECIFICTYPE', 'SQL', 'SQLEXCEPTION', 'SQLSTATE', 'SQLWARNING', 'START', 'STATE', 'STATEMENT', 'STATIC', 'STDDEV_POP', 'STDDEV_SAMP', 'STRUCTURE', 'SUBMULTISET', 'SUBSTRING_REGEX', 'SYMMETRIC', 'SYSTEM', 'TEMPORARY', 'TERMINATE', 'THAN', 'TIME', 'TIMESTAMP', 'TIMEZONE_HOUR', 'TIMEZONE_MINUTE', 'TRAILING', 'TRANSLATE_REGEX', 'TRANSLATION', 'TREAT', 'TRUE', 'UESCAPE', 'UNDER', 'UNKNOWN', 'UNNEST', 'USAGE', 'USING', 'VALUE', 'VARCHAR', 'VARIABLE', 'VAR_POP', 'VAR_SAMP', 'WHENEVER', 'WIDTH_BUCKET', 'WINDOW', 'WITHIN', 'WITHOUT', 'WORK', 'WRITE', 'XMLAGG', 'XMLATTRIBUTES', 'XMLBINARY', 'XMLCAST', 'XMLCOMMENT', 'XMLCONCAT', 'XMLDOCUMENT', 'XMLELEMENT', 'XMLEXISTS', 'XMLFOREST', 'XMLITERATE', 'XMLNAMESPACES', 'XMLPARSE', 'XMLPI', 'XMLQUERY', 'XMLSERIALIZE', 'XMLTABLE', 'XMLTEXT', 'XMLVALIDATE', 'YEAR', 'ZONE']
|
4064 | };
|
4065 | /**
|
4066 | * Priority 1 (first)
|
4067 | * keywords that begin a new statement
|
4068 | * will begin new indented block
|
4069 | */
|
4070 | // https://docs.microsoft.com/en-us/sql/t-sql/statements/statements?view=sql-server-ver15
|
4071 |
|
4072 | var reservedCommands = ['ADD SENSITIVITY CLASSIFICATION', 'ADD SIGNATURE', 'AGGREGATE', 'ANSI_DEFAULTS', 'ANSI_NULLS', 'ANSI_NULL_DFLT_OFF', 'ANSI_NULL_DFLT_ON', 'ANSI_PADDING', 'ANSI_WARNINGS', 'APPLICATION ROLE', 'ARITHABORT', 'ARITHIGNORE', 'ASSEMBLY', 'ASYMMETRIC KEY', 'AUTHORIZATION', 'AVAILABILITY GROUP', 'BACKUP', 'BACKUP CERTIFICATE', 'BACKUP MASTER KEY', 'BACKUP SERVICE MASTER KEY', 'BEGIN CONVERSATION TIMER', 'BEGIN DIALOG CONVERSATION', 'BROKER PRIORITY', 'BULK INSERT', 'CERTIFICATE', 'CLOSE MASTER KEY', 'CLOSE SYMMETRIC KEY', 'COLLATE', 'COLUMN ENCRYPTION KEY', 'COLUMN MASTER KEY', 'COLUMNSTORE INDEX', 'CONCAT_NULL_YIELDS_NULL', 'CONTEXT_INFO', 'CONTRACT', 'CREDENTIAL', 'CRYPTOGRAPHIC PROVIDER', 'CURSOR_CLOSE_ON_COMMIT', 'DATABASE', 'DATABASE AUDIT SPECIFICATION', 'DATABASE ENCRYPTION KEY', 'DATABASE HADR', 'DATABASE SCOPED CONFIGURATION', 'DATABASE SCOPED CREDENTIAL', 'DATABASE SET', 'DATEFIRST', 'DATEFORMAT', 'DEADLOCK_PRIORITY', 'DEFAULT', 'DELETE', 'DENY', 'DENY XML', 'DISABLE TRIGGER', 'ENABLE TRIGGER', 'END CONVERSATION', 'ENDPOINT', 'EVENT NOTIFICATION', 'EVENT SESSION', 'EXECUTE AS', 'EXTERNAL DATA SOURCE', 'EXTERNAL FILE FORMAT', 'EXTERNAL LANGUAGE', 'EXTERNAL LIBRARY', 'EXTERNAL RESOURCE POOL', 'EXTERNAL TABLE', 'FIPS_FLAGGER', 'FMTONLY', 'FORCEPLAN', 'FULLTEXT CATALOG', 'FULLTEXT INDEX', 'FULLTEXT STOPLIST', 'FUNCTION', 'GET CONVERSATION GROUP', 'GET_TRANSMISSION_STATUS', 'GRANT', 'GRANT XML', 'IDENTITY_INSERT', 'IMPLICIT_TRANSACTIONS', 'INDEX', 'INSERT', 'LANGUAGE', 'LOCK_TIMEOUT', 'LOGIN', 'MASTER KEY', 'MERGE', 'MESSAGE TYPE', 'MOVE CONVERSATION', 'NOCOUNT', 'NOEXEC', 'NUMERIC_ROUNDABORT', 'OFFSETS', 'OPEN MASTER KEY', 'OPEN SYMMETRIC KEY', 'PARSEONLY', 'PARTITION FUNCTION', 'PARTITION SCHEME', 'PROCEDURE', 'QUERY_GOVERNOR_COST_LIMIT', 'QUEUE', 'QUOTED_IDENTIFIER', 'RECEIVE', 'REMOTE SERVICE BINDING', 'REMOTE_PROC_TRANSACTIONS', 'RESOURCE GOVERNOR', 'RESOURCE POOL', 'RESTORE', 'RESTORE FILELISTONLY', 'RESTORE HEADERONLY', 'RESTORE LABELONLY', 'RESTORE MASTER KEY', 'RESTORE REWINDONLY', 'RESTORE SERVICE MASTER KEY', 'RESTORE VERIFYONLY', 'REVERT', 'REVOKE', 'REVOKE XML', 'ROLE', 'ROUTE', 'ROWCOUNT', 'RULE', 'SCHEMA', 'SEARCH PROPERTY LIST', 'SECURITY POLICY', 'SELECTIVE XML INDEX', 'SEND', 'SENSITIVITY CLASSIFICATION', 'SEQUENCE', 'SERVER AUDIT', 'SERVER AUDIT SPECIFICATION', 'SERVER CONFIGURATION', 'SERVER ROLE', 'SERVICE', 'SERVICE MASTER KEY', 'SET', 'SETUSER', 'SHOWPLAN_ALL', 'SHOWPLAN_TEXT', 'SHOWPLAN_XML', 'SIGNATURE', 'SPATIAL INDEX', 'STATISTICS', 'STATISTICS IO', 'STATISTICS PROFILE', 'STATISTICS TIME', 'STATISTICS XML', 'SYMMETRIC KEY', 'SYNONYM', 'TABLE', 'TABLE IDENTITY', 'TEXTSIZE', 'TRANSACTION ISOLATION LEVEL', 'TRIGGER', 'TRUNCATE TABLE', 'TYPE', 'UPDATE', 'UPDATE STATISTICS', 'USER', 'VIEW', 'WORKLOAD GROUP', 'XACT_ABORT', 'XML INDEX', 'XML SCHEMA COLLECTION', // other
|
4073 | 'ALTER COLUMN', 'ALTER TABLE', 'CREATE TABLE', 'FROM', 'GROUP BY', 'HAVING', 'INSERT INTO', 'DROP TABLE', 'SET SCHEMA', 'LIMIT', 'OFFSET', 'ORDER BY', 'SELECT', 'VALUES', 'WHERE', 'WITH'];
|
4074 | /**
|
4075 | * Priority 2
|
4076 | * commands that operate on two tables or subqueries
|
4077 | * two main categories: joins and boolean set operators
|
4078 | */
|
4079 |
|
4080 | var reservedBinaryCommands = [// set booleans
|
4081 | 'INTERSECT', 'INTERSECT ALL', 'INTERSECT DISTINCT', 'UNION', 'UNION ALL', 'UNION DISTINCT', 'EXCEPT', 'EXCEPT ALL', 'EXCEPT DISTINCT', 'MINUS', 'MINUS ALL', 'MINUS DISTINCT', // joins
|
4082 | 'JOIN', 'INNER JOIN', 'LEFT JOIN', 'LEFT OUTER JOIN', 'RIGHT JOIN', 'RIGHT OUTER JOIN', 'FULL JOIN', 'FULL OUTER JOIN', 'CROSS JOIN'];
|
4083 | /**
|
4084 | * Priority 3
|
4085 | * keywords that follow a previous Statement, must be attached to subsequent data
|
4086 | * can be fully inline or on newline with optional indent
|
4087 | */
|
4088 |
|
4089 | var reservedDependentClauses = ['WHEN', 'ELSE']; // https://docs.microsoft.com/en-us/sql/t-sql/language-reference?view=sql-server-ver15
|
4090 |
|
4091 | var TSqlFormatter = /*#__PURE__*/function (_Formatter) {
|
4092 | _inherits(TSqlFormatter, _Formatter);
|
4093 |
|
4094 | var _super = _createSuper(TSqlFormatter);
|
4095 |
|
4096 | function TSqlFormatter() {
|
4097 | _classCallCheck(this, TSqlFormatter);
|
4098 |
|
4099 | return _super.apply(this, arguments);
|
4100 | }
|
4101 |
|
4102 | _createClass(TSqlFormatter, [{
|
4103 | key: "tokenizer",
|
4104 | value: function tokenizer() {
|
4105 | return new _core_Tokenizer__WEBPACK_IMPORTED_MODULE_1__["default"]({
|
4106 | reservedCommands: TSqlFormatter.reservedCommands,
|
4107 | reservedBinaryCommands: TSqlFormatter.reservedBinaryCommands,
|
4108 | reservedDependentClauses: TSqlFormatter.reservedDependentClauses,
|
4109 | reservedJoinConditions: TSqlFormatter.reservedJoinConditions,
|
4110 | reservedLogicalOperators: TSqlFormatter.reservedLogicalOperators,
|
4111 | reservedKeywords: TSqlFormatter.reservedKeywords,
|
4112 | stringTypes: TSqlFormatter.stringTypes,
|
4113 | blockStart: TSqlFormatter.blockStart,
|
4114 | blockEnd: TSqlFormatter.blockEnd,
|
4115 | indexedPlaceholderTypes: TSqlFormatter.indexedPlaceholderTypes,
|
4116 | namedPlaceholderTypes: TSqlFormatter.namedPlaceholderTypes,
|
4117 | lineCommentTypes: TSqlFormatter.lineCommentTypes,
|
4118 | specialWordChars: TSqlFormatter.specialWordChars,
|
4119 | operators: TSqlFormatter.operators // TODO: Support for money constants
|
4120 |
|
4121 | });
|
4122 | }
|
4123 | }]);
|
4124 |
|
4125 | return TSqlFormatter;
|
4126 | }(_core_Formatter__WEBPACK_IMPORTED_MODULE_0__["default"]);
|
4127 |
|
4128 |
|
4129 | TSqlFormatter.reservedCommands = reservedCommands;
|
4130 | TSqlFormatter.reservedBinaryCommands = reservedBinaryCommands;
|
4131 | TSqlFormatter.reservedDependentClauses = reservedDependentClauses;
|
4132 | TSqlFormatter.reservedJoinConditions = ['ON', 'USING'];
|
4133 | TSqlFormatter.reservedLogicalOperators = ['AND', 'OR'];
|
4134 | TSqlFormatter.reservedKeywords = (0,_utils__WEBPACK_IMPORTED_MODULE_2__.dedupe)([].concat(_toConsumableArray(Object.values(reservedFunctions).reduce(function (acc, arr) {
|
4135 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
4136 | }, [])), _toConsumableArray(Object.values(reservedKeywords).reduce(function (acc, arr) {
|
4137 | return [].concat(_toConsumableArray(acc), _toConsumableArray(arr));
|
4138 | }, []))));
|
4139 | TSqlFormatter.stringTypes = ["\"\"", "N''", "''", '[]', '``'];
|
4140 | TSqlFormatter.blockStart = ['(', 'CASE'];
|
4141 | TSqlFormatter.blockEnd = [')', 'END'];
|
4142 | TSqlFormatter.indexedPlaceholderTypes = [];
|
4143 | TSqlFormatter.namedPlaceholderTypes = ['@'];
|
4144 | TSqlFormatter.lineCommentTypes = ['--'];
|
4145 | TSqlFormatter.specialWordChars = {
|
4146 | any: '#@'
|
4147 | };
|
4148 | TSqlFormatter.operators = ['!<', '!>', '+=', '-=', '*=', '/=', '%=', '|=', '&=', '^=', '::'];
|
4149 |
|
4150 | /***/ }),
|
4151 |
|
4152 | /***/ "./src/sqlFormatter.ts":
|
4153 | /*!*****************************!*\
|
4154 | !*** ./src/sqlFormatter.ts ***!
|
4155 | \*****************************/
|
4156 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
4157 |
|
4158 | __webpack_require__.r(__webpack_exports__);
|
4159 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
4160 | /* harmony export */ "ConfigError": () => (/* binding */ ConfigError),
|
4161 | /* harmony export */ "format": () => (/* binding */ format),
|
4162 | /* harmony export */ "formatters": () => (/* binding */ formatters),
|
4163 | /* harmony export */ "supportedDialects": () => (/* binding */ supportedDialects)
|
4164 | /* harmony export */ });
|
4165 | /* harmony import */ var _languages_bigquery_formatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./languages/bigquery.formatter */ "./src/languages/bigquery.formatter.ts");
|
4166 | /* harmony import */ var _languages_db2_formatter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./languages/db2.formatter */ "./src/languages/db2.formatter.ts");
|
4167 | /* harmony import */ var _languages_hive_formatter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./languages/hive.formatter */ "./src/languages/hive.formatter.ts");
|
4168 | /* harmony import */ var _languages_mariadb_formatter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./languages/mariadb.formatter */ "./src/languages/mariadb.formatter.ts");
|
4169 | /* harmony import */ var _languages_mysql_formatter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./languages/mysql.formatter */ "./src/languages/mysql.formatter.ts");
|
4170 | /* harmony import */ var _languages_n1ql_formatter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./languages/n1ql.formatter */ "./src/languages/n1ql.formatter.ts");
|
4171 | /* harmony import */ var _languages_plsql_formatter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./languages/plsql.formatter */ "./src/languages/plsql.formatter.ts");
|
4172 | /* harmony import */ var _languages_postgresql_formatter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./languages/postgresql.formatter */ "./src/languages/postgresql.formatter.ts");
|
4173 | /* harmony import */ var _languages_redshift_formatter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./languages/redshift.formatter */ "./src/languages/redshift.formatter.ts");
|
4174 | /* harmony import */ var _languages_sparksql_formatter__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./languages/sparksql.formatter */ "./src/languages/sparksql.formatter.ts");
|
4175 | /* harmony import */ var _languages_standardsql_formatter__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./languages/standardsql.formatter */ "./src/languages/standardsql.formatter.ts");
|
4176 | /* harmony import */ var _languages_tsql_formatter__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./languages/tsql.formatter */ "./src/languages/tsql.formatter.ts");
|
4177 | /* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./utils */ "./src/utils.ts");
|
4178 | 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); } }
|
4179 |
|
4180 | function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
|
4181 |
|
4182 | function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
4183 |
|
4184 | function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
4185 |
|
4186 | function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
4187 |
|
4188 | function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
|
4189 |
|
4190 | function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
4191 |
|
4192 | function _wrapNativeSuper(Class) { var _cache = typeof Map === "function" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== "function") { throw new TypeError("Super expression must either be null or a function"); } if (typeof _cache !== "undefined") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }
|
4193 |
|
4194 | function _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }
|
4195 |
|
4196 | function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
4197 |
|
4198 | function _isNativeFunction(fn) { return Function.toString.call(fn).indexOf("[native code]") !== -1; }
|
4199 |
|
4200 | function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
4201 |
|
4202 | function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
4203 |
|
4204 | function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
4205 |
|
4206 |
|
4207 |
|
4208 |
|
4209 |
|
4210 |
|
4211 |
|
4212 |
|
4213 |
|
4214 |
|
4215 |
|
4216 |
|
4217 |
|
4218 |
|
4219 | var formatters = {
|
4220 | bigquery: _languages_bigquery_formatter__WEBPACK_IMPORTED_MODULE_0__["default"],
|
4221 | db2: _languages_db2_formatter__WEBPACK_IMPORTED_MODULE_1__["default"],
|
4222 | hive: _languages_hive_formatter__WEBPACK_IMPORTED_MODULE_2__["default"],
|
4223 | mariadb: _languages_mariadb_formatter__WEBPACK_IMPORTED_MODULE_3__["default"],
|
4224 | mysql: _languages_mysql_formatter__WEBPACK_IMPORTED_MODULE_4__["default"],
|
4225 | n1ql: _languages_n1ql_formatter__WEBPACK_IMPORTED_MODULE_5__["default"],
|
4226 | plsql: _languages_plsql_formatter__WEBPACK_IMPORTED_MODULE_6__["default"],
|
4227 | postgresql: _languages_postgresql_formatter__WEBPACK_IMPORTED_MODULE_7__["default"],
|
4228 | redshift: _languages_redshift_formatter__WEBPACK_IMPORTED_MODULE_8__["default"],
|
4229 | spark: _languages_sparksql_formatter__WEBPACK_IMPORTED_MODULE_9__["default"],
|
4230 | sql: _languages_standardsql_formatter__WEBPACK_IMPORTED_MODULE_10__["default"],
|
4231 | tsql: _languages_tsql_formatter__WEBPACK_IMPORTED_MODULE_11__["default"]
|
4232 | };
|
4233 | var supportedDialects = Object.keys(formatters);
|
4234 | var defaultOptions = {
|
4235 | language: 'sql',
|
4236 | tabWidth: 2,
|
4237 | useTabs: false,
|
4238 | keywordCase: 'preserve',
|
4239 | indentStyle: 'standard',
|
4240 | multilineLists: 'always',
|
4241 | logicalOperatorNewline: 'before',
|
4242 | aliasAs: 'preserve',
|
4243 | tabulateAlias: false,
|
4244 | commaPosition: 'after',
|
4245 | newlineBeforeOpenParen: true,
|
4246 | newlineBeforeCloseParen: true,
|
4247 | expressionWidth: 50,
|
4248 | linesBetweenQueries: 1,
|
4249 | denseOperators: false,
|
4250 | newlineBeforeSemicolon: false
|
4251 | };
|
4252 | /**
|
4253 | * Format whitespace in a query to make it easier to read.
|
4254 | *
|
4255 | * @param {string} query - input SQL query string
|
4256 | * @param {FormatOptions} cfg Configuration options (see docs in README)
|
4257 | * @return {string} formatted query
|
4258 | */
|
4259 |
|
4260 | var format = function format(query) {
|
4261 | var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
4262 |
|
4263 | if (typeof query !== 'string') {
|
4264 | throw new Error('Invalid query argument. Expected string, instead got ' + _typeof(query));
|
4265 | }
|
4266 |
|
4267 | var options = validateConfig(Object.assign(Object.assign({}, defaultOptions), cfg));
|
4268 | var Formatter = formatters[options.language];
|
4269 | return new Formatter(options).format(query);
|
4270 | };
|
4271 | var ConfigError = /*#__PURE__*/function (_Error) {
|
4272 | _inherits(ConfigError, _Error);
|
4273 |
|
4274 | var _super = _createSuper(ConfigError);
|
4275 |
|
4276 | function ConfigError() {
|
4277 | _classCallCheck(this, ConfigError);
|
4278 |
|
4279 | return _super.apply(this, arguments);
|
4280 | }
|
4281 |
|
4282 | return _createClass(ConfigError);
|
4283 | }( /*#__PURE__*/_wrapNativeSuper(Error));
|
4284 |
|
4285 | function validateConfig(cfg) {
|
4286 | if (!supportedDialects.includes(cfg.language)) {
|
4287 | throw new ConfigError("Unsupported SQL dialect: ".concat(cfg.language));
|
4288 | }
|
4289 |
|
4290 | if ((0,_utils__WEBPACK_IMPORTED_MODULE_12__.isNumber)(cfg.multilineLists) && cfg.multilineLists <= 0) {
|
4291 | throw new ConfigError('multilineLists config must be a positive number.');
|
4292 | }
|
4293 |
|
4294 | if (cfg.expressionWidth <= 0) {
|
4295 | throw new ConfigError("expressionWidth config must be positive number. Received ".concat(cfg.expressionWidth, " instead."));
|
4296 | }
|
4297 |
|
4298 | if (cfg.commaPosition === 'before' && cfg.useTabs) {
|
4299 | throw new ConfigError('commaPosition: before does not work when tabs are used for indentation.');
|
4300 | }
|
4301 |
|
4302 | return cfg;
|
4303 | }
|
4304 |
|
4305 | /***/ }),
|
4306 |
|
4307 | /***/ "./src/types.ts":
|
4308 | /*!**********************!*\
|
4309 | !*** ./src/types.ts ***!
|
4310 | \**********************/
|
4311 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
4312 |
|
4313 | __webpack_require__.r(__webpack_exports__);
|
4314 |
|
4315 |
|
4316 | /***/ }),
|
4317 |
|
4318 | /***/ "./src/utils.ts":
|
4319 | /*!**********************!*\
|
4320 | !*** ./src/utils.ts ***!
|
4321 | \**********************/
|
4322 | /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
4323 |
|
4324 | __webpack_require__.r(__webpack_exports__);
|
4325 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
4326 | /* harmony export */ "dedupe": () => (/* binding */ dedupe),
|
4327 | /* harmony export */ "escapeRegExp": () => (/* binding */ escapeRegExp),
|
4328 | /* harmony export */ "isEmpty": () => (/* binding */ isEmpty),
|
4329 | /* harmony export */ "isNumber": () => (/* binding */ isNumber),
|
4330 | /* harmony export */ "last": () => (/* binding */ last),
|
4331 | /* harmony export */ "maxLength": () => (/* binding */ maxLength),
|
4332 | /* harmony export */ "sortByLengthDesc": () => (/* binding */ sortByLengthDesc),
|
4333 | /* harmony export */ "trimSpacesEnd": () => (/* binding */ trimSpacesEnd)
|
4334 | /* harmony export */ });
|
4335 | function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
4336 |
|
4337 | function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
4338 |
|
4339 | function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
4340 |
|
4341 | function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
4342 |
|
4343 | function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
4344 |
|
4345 | function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
4346 |
|
4347 | var dedupe = function dedupe(arr) {
|
4348 | return _toConsumableArray(new Set(arr));
|
4349 | }; // Only removes spaces, not newlines
|
4350 |
|
4351 | var trimSpacesEnd = function trimSpacesEnd(str) {
|
4352 | return str.replace(/[\t ]+$/, '');
|
4353 | }; // Last element from array
|
4354 |
|
4355 | var last = function last(arr) {
|
4356 | return arr[arr.length - 1];
|
4357 | }; // True array is empty, or it's not an array at all
|
4358 |
|
4359 | var isEmpty = function isEmpty(arr) {
|
4360 | return !Array.isArray(arr) || arr.length === 0;
|
4361 | }; // Escapes regex special chars
|
4362 |
|
4363 | var escapeRegExp = function escapeRegExp(string) {
|
4364 | return string.replace(/[\$\(-\+\.\?\[-\^\{-\}]/g, '\\$&');
|
4365 | }; // Sorts strings by length, so that longer ones are first
|
4366 | // Also sorts alphabetically after sorting by length.
|
4367 |
|
4368 | var sortByLengthDesc = function sortByLengthDesc(strings) {
|
4369 | return strings.sort(function (a, b) {
|
4370 | return b.length - a.length || a.localeCompare(b);
|
4371 | });
|
4372 | };
|
4373 | /** Get length of longest string in list of strings */
|
4374 |
|
4375 | var maxLength = function maxLength(strings) {
|
4376 | return strings.reduce(function (max, cur) {
|
4377 | return Math.max(max, cur.length);
|
4378 | }, 0);
|
4379 | };
|
4380 | var isNumber = function isNumber(value) {
|
4381 | return typeof value === 'number';
|
4382 | };
|
4383 |
|
4384 | /***/ })
|
4385 |
|
4386 | /******/ });
|
4387 | /************************************************************************/
|
4388 | /******/ // The module cache
|
4389 | /******/ var __webpack_module_cache__ = {};
|
4390 | /******/
|
4391 | /******/ // The require function
|
4392 | /******/ function __webpack_require__(moduleId) {
|
4393 | /******/ // Check if module is in cache
|
4394 | /******/ var cachedModule = __webpack_module_cache__[moduleId];
|
4395 | /******/ if (cachedModule !== undefined) {
|
4396 | /******/ return cachedModule.exports;
|
4397 | /******/ }
|
4398 | /******/ // Create a new module (and put it into the cache)
|
4399 | /******/ var module = __webpack_module_cache__[moduleId] = {
|
4400 | /******/ // no module.id needed
|
4401 | /******/ // no module.loaded needed
|
4402 | /******/ exports: {}
|
4403 | /******/ };
|
4404 | /******/
|
4405 | /******/ // Execute the module function
|
4406 | /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
|
4407 | /******/
|
4408 | /******/ // Return the exports of the module
|
4409 | /******/ return module.exports;
|
4410 | /******/ }
|
4411 | /******/
|
4412 | /************************************************************************/
|
4413 | /******/ /* webpack/runtime/define property getters */
|
4414 | /******/ (() => {
|
4415 | /******/ // define getter functions for harmony exports
|
4416 | /******/ __webpack_require__.d = (exports, definition) => {
|
4417 | /******/ for(var key in definition) {
|
4418 | /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
|
4419 | /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
|
4420 | /******/ }
|
4421 | /******/ }
|
4422 | /******/ };
|
4423 | /******/ })();
|
4424 | /******/
|
4425 | /******/ /* webpack/runtime/hasOwnProperty shorthand */
|
4426 | /******/ (() => {
|
4427 | /******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
|
4428 | /******/ })();
|
4429 | /******/
|
4430 | /******/ /* webpack/runtime/make namespace object */
|
4431 | /******/ (() => {
|
4432 | /******/ // define __esModule on exports
|
4433 | /******/ __webpack_require__.r = (exports) => {
|
4434 | /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
|
4435 | /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
4436 | /******/ }
|
4437 | /******/ Object.defineProperty(exports, '__esModule', { value: true });
|
4438 | /******/ };
|
4439 | /******/ })();
|
4440 | /******/
|
4441 | /************************************************************************/
|
4442 | var __webpack_exports__ = {};
|
4443 | // This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
|
4444 | (() => {
|
4445 | /*!**********************!*\
|
4446 | !*** ./src/index.ts ***!
|
4447 | \**********************/
|
4448 | __webpack_require__.r(__webpack_exports__);
|
4449 | /* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
4450 | /* harmony export */ "ConfigError": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.ConfigError),
|
4451 | /* harmony export */ "format": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.format),
|
4452 | /* harmony export */ "formatters": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.formatters),
|
4453 | /* harmony export */ "supportedDialects": () => (/* reexport safe */ _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__.supportedDialects)
|
4454 | /* harmony export */ });
|
4455 | /* harmony import */ var _sqlFormatter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./sqlFormatter */ "./src/sqlFormatter.ts");
|
4456 | /* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./types */ "./src/types.ts");
|
4457 |
|
4458 |
|
4459 | })();
|
4460 |
|
4461 | /******/ return __webpack_exports__;
|
4462 | /******/ })()
|
4463 | ;
|
4464 | });
|
4465 | //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QW1CUixZQW5CUSxFQW9CUixJQXBCUSxFQXFCUixTQXJCUSxFQXNCUixVQXRCUSxFQXVCUixNQXZCUSxFQXdCUixNQXhCUSxFQXlCUixPQXpCUSxFQTBCUixXQTFCUSxFQTJCUixPQTNCUSxFQTRCUixPQTVCUSxFQTZCUixTQTdCUSxFQThCUixZQTlCUSxFQStCUixRQS9CUSxFQWdDUixRQWhDUSxFQWlDUixXQWpDUSxFQWtDUixZQWxDUSxFQW1DUixZQW5DUSxFQW9DUixTQXBDUSxFQXFDUixVQXJDUSxFQXNDUixRQXRDUSxFQXVDUixNQXZDUSxFQXdDUixTQXhDUSxFQXlDUixjQXpDUSxFQTBDUixrQkExQ1EsRUEyQ1IsY0EzQ1EsRUE0Q1IsZ0JBNUNRLEVBNkNSLGNBN0NRLEVBOENSLG1CQTlDUSxFQStDUixTQS9DUSxFQWdEUixRQWhEUSxFQWlEUixNQWpEUSxFQWtEUixVQWxEUSxFQW1EUixRQW5EUSxFQW9EUixTQXBEUSxFQXFEUixTQXJEUSxFQXNEUixZQXREUSxFQXVEUixlQXZEUSxFQXdEUixTQXhEUSxFQXlEUixVQXpEUSxFQTBEUixVQTFEUSxFQTJEUixJQTNEUSxFQTREUixVQTVEUSxFQTZEUixRQTdEUSxFQThEUixTQTlEUSxFQStEUixVQS9EUSxFQWdFUixVQWhFUSxFQWlFUixZQWpFUSxFQWtFUixRQWxFUSxFQW1FUixVQW5FUSxFQW9FUixPQXBFUSxFQXFFUixRQXJFUSxFQXNFUixXQXRFUSxFQXVFUixRQXZFUSxFQXdFUixNQXhFUSxFQXlFUixVQXpFUSxFQTBFUixRQTFFUSxFQTJFUixXQTNFUSxFQTRFUixPQTVFUSxFQTZFUixPQTdFUSxFQThFUixLQTlFUSxFQStFUixNQS9FUSxFQWdGUixNQWhGUSxFQWlGUixVQWpGUSxFQWtGUixXQWxGUSxFQW1GUixLQW5GUSxFQW9GUixRQXBGUSxFQXFGUixNQXJGUSxFQXNGUixPQXRGUSxFQXVGUixTQXZGUSxFQXdGUixNQXhGUSxFQXlGUixPQXpGUSxFQTBGUixJQTFGUSxFQTJGUixXQTNGUSxFQTRGUixJQTVGUSxFQTZGUixXQTdGUSxFQThGUixPQTlGUSxFQStGUixTQS9GUSxFQWdHUixPQWhHUSxFQWlHUixPQWpHUSxFQWtHUixhQWxHUSxFQW1HUixNQW5HUSxFQW9HUixJQXBHUSxFQXFHUixRQXJHUSxFQXNHUixTQXRHUSxFQXVHUixLQXZHUSxFQXdHUixNQXhHUSxFQXlHUixLQXpHUSxFQTBHUixVQTFHUSxFQTJHUixNQTNHUSxFQTRHUixVQTVHUSxFQTZHUixPQTdHUSxFQThHUixNQTlHUSxFQStHUixPQS9HUSxFQWdIUixRQWhIUSxFQWlIUixTQWpIUSxFQWtIUixVQWxIUSxFQW1IUixNQW5IUSxFQW9IUixTQXBIUSxFQXFIUixVQXJIUSxFQXNIUixNQXRIUSxFQXVIUixNQXZIUSxFQXdIUixZQXhIUSxFQXlIUixjQXpIUSxFQTBIUixjQTFIUSxFQTJIUixlQTNIUSxFQTRIUixVQTVIUSxFQTZIUixRQTdIUSxFQThIUixNQTlIUSxFQStIUixTQS9IUSxFQWdJUixJQWhJUSxFQWlJUixNQWpJUSxFQWtJUixLQWxJUSxFQW1JUixNQW5JUSxFQW9JUixPQXBJUSxFQXFJUixVQXJJUSxFQXNJUixNQXRJUSxFQXVJUixJQXZJUSxFQXdJUixLQXhJUSxFQXlJUixXQXpJUSxFQTBJUixXQTFJUSxFQTJJUixjQTNJUSxFQTRJUixVQTVJUSxFQTZJUixPQTdJUSxFQThJUixjQTlJUSxFQStJUixLQS9JUSxFQWdKUixPQWhKUSxFQWlKUixTQWpKUSxFQWtKUixXQWxKUSxFQW1KUixNQW5KUSxFQW9KUixRQXBKUSxFQXFKUixXQXJKUSxFQXNKUixhQXRKUSxFQXVKUixjQXZKUSxFQXdKUixNQXhKUSxFQXlKUixXQXpKUSxFQTBKUixRQTFKUSxFQTJKUixNQTNKUSxFQTRKUixXQTVKUSxFQTZKUixTQTdKUSxFQThKUixPQTlKUSxFQStKUixRQS9KUSxFQWdLUixZQWhLUSxFQWlLUixXQWpLUSxFQWtLUixTQWxLUSxFQW1LUixNQW5LUSxFQW9LUixRQXBLUSxFQXFLUixPQXJLUSxFQXNLUixTQXRLUSxFQXVLUixPQXZLUSxFQXdLUixZQXhL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aEdJLEVBaUdKLE9BakdJLEVBa0dKLFFBbEdJLEVBbUdKLE1BbkdJLEVBb0dKLFVBcEdJLEVBcUdKLFdBckdJLEVBc0dKLElBdEdJLEVBdUdKLFNBdkdJLEVBd0dKLE9BeEdJLEVBeUdKLFdBekdJLEVBMEdKLFdBMUdJLEVBMkdKLE9BM0dJLEVBNEdKLE9BNUdJLEVBNkdKLGFBN0dJLEVBOEdKLFFBOUdJLEVBK0dKLEtBL0dJLEVBZ0hKLFNBaEhJLEVBaUhKLFdBakhJLEVBa0hKLFVBbEhJLEVBbUhKLE1BbkhJLEVBb0hKLElBcEhJLEVBcUhKLFdBckhJLEVBc0hKLE1BdEhJLEVBdUhKLEtBdkhJLEVBd0hKLFVBeEhJLEVBeUhKLE1BekhJLEVBMEhKLFNBMUhJLEVBMkhKLE1BM0hJLEVBNEhKLE9BNUhJLEVBNkhKLE1BN0hJLEVBOEhKLE9BOUhJLEVBK0hKLE9BL0hJLEVBZ0lKLE9BaElJLEVBaUlKLEtBaklJLEVBa0lKLEtBbElJLEVBbUlKLFFBbklJLEVBb0lKLFFBcElJLEVBcUlKLE9BcklJLEVBc0lKLE9BdElJLEVBdUlKLFVBdklJLEVBd0lKLFNBeElJLEVBeUlKLE9BeklJLEVBMElKLE1BMUlJLEVBMklKLElBM0lJLEVBNElKLE1BNUlJLEVBNklKLEtBN0lJLEVBOElKLE1BOUlJLEVBK0lKLFFBL0lJLEVBZ0pKLFNBaEpJLEVBaUpKLGNBakpJLEVBa0pKLElBbEpJLEVBbUpKLE1BbkpJLEVBb0pKLE1BcEpJLEVBcUpKLFFBckpJLEVBc0pKLElBdEpJLEVBdUpKLE9BdkpJLEVBd0pKLE9BeEpJLEVBeUpKLFFBekpJLEVBMEpKLFVBMUpJLEVBMkpKLEtBM0pJLEVBNEpKLFNBNUpJLEVBNkpKLFFBN0pJLEVBOEpKLFVBOUpJLEVBK0pKLFdBL0pJLEVBZ0tKLFNBaEtJLEVBaUtKLFVBaktJLEVBa0tKLFNBbEtJLEVBbUtKLE9BbktJLEVBb0tKLFlBcEtJLEVBcUtKLFdBcktJLEVBc0tKLFFBdEtJLEVBdUtKLE1BdktJLEVBd0tKLE1BeEtJLEVBeUtKLFlBektJLEVBMEtKLFVBMUtJLEVBMktKLFVB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QTtVQUNBOztVQUVBO1VBQ0E7VUFDQTs7Ozs7V0N0QkE7V0FDQTtXQUNBO1dBQ0E7V0FDQSx5Q0FBeUMsd0NBQXdDO1dBQ2pGO1dBQ0E7V0FDQTs7Ozs7V0NQQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNOQSIsInNvdXJjZXMiOlsid2VicGFjazovL3NxbEZvcm1hdHRlci93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvQWxpYXNBcy50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9Bc1Rva2VuRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9Gb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvSW5kZW50YXRpb24udHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvSW5saW5lQmxvY2sudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvUGFyYW1zLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9jb3JlL1Rva2VuaXplci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9mb3JtYXRBbGlhc1Bvc2l0aW9ucy50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9mb3JtYXRDb21tYVBvc2l0aW9ucy50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvY29yZS9yZWdleEZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2NvcmUvdGFidWxhclN0eWxlLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9jb3JlL3Rva2VuLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvYmlncXVlcnkuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvZGIyLmZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvbGFuZ3VhZ2VzL2hpdmUuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvbWFyaWFkYi5mb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2xhbmd1YWdlcy9teXNxbC5mb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2xhbmd1YWdlcy9uMXFsLmZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvbGFuZ3VhZ2VzL3Bsc3FsLmZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvbGFuZ3VhZ2VzL3Bvc3RncmVzcWwuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvcmVkc2hpZnQuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvc3BhcmtzcWwuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvc3RhbmRhcmRzcWwuZm9ybWF0dGVyLnRzIiwid2VicGFjazovL3NxbEZvcm1hdHRlci8uL3NyYy9sYW5ndWFnZXMvdHNxbC5mb3JtYXR0ZXIudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL3NxbEZvcm1hdHRlci50cyIsIndlYnBhY2s6Ly9zcWxGb3JtYXR0ZXIvLi9zcmMvdXRpbHMudHMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3NxbEZvcm1hdHRlci93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vc3FsRm9ybWF0dGVyLy4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInNxbEZvcm1hdHRlclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJzcWxGb3JtYXR0ZXJcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwiaW1wb3J0IHsgQWxpYXNNb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNDb21tYW5kLCBpc1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5TdHJlYW0ge1xuICBpc1dpdGhpblNlbGVjdCgpOiBib29sZWFuO1xuICBnZXRQcmV2aW91c1Jlc2VydmVkVG9rZW4oKTogVG9rZW47XG4gIHRva2VuTG9va0JlaGluZChuPzogbnVtYmVyKTogVG9rZW47XG4gIHRva2VuTG9va0FoZWFkKG4/OiBudW1iZXIpOiBUb2tlbjtcbn1cblxuLyoqIERlY2lkZXMgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgQVMgdG9rZW5zICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBbGlhc0FzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBhbGlhc0FzOiBBbGlhc01vZGUsIHByaXZhdGUgZm9ybWF0dGVyOiBUb2tlblN0cmVhbSkge31cblxuICAvKiogVHJ1ZSB3aGVuIEFTIGtleXdvcmQgc2hvdWxkIGJlIGFkZGVkICpiZWZvcmUqIGN1cnJlbnQgdG9rZW4gKi9cbiAgcHVibGljIHNob3VsZEFkZEJlZm9yZSh0b2tlbjogVG9rZW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc01pc3NpbmdUYWJsZUFsaWFzKHRva2VuKSB8fCB0aGlzLmlzTWlzc2luZ1NlbGVjdENvbHVtbkFsaWFzKHRva2VuKTtcbiAgfVxuXG4gIC8vIGlmIHRhYmxlIGFsaWFzIGlzIG1pc3NpbmcgYW5kIHNob3VsZCBiZSBhZGRlZFxuICBwcml2YXRlIGlzTWlzc2luZ1RhYmxlQWxpYXModG9rZW46IFRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuYWxpYXNBcyA9PT0gJ2Fsd2F5cycgJiYgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLldPUkQgJiYgdGhpcy5sb29rQmVoaW5kKCkudmFsdWUgPT09ICcpJ1xuICAgICk7XG4gIH1cblxuICAvLyBpZiBzZWxlY3QgY29sdW1uIGFsaWFzIGlzIG1pc3NpbmcgYW5kIHNob3VsZCBiZSBhZGRlZFxuICBwcml2YXRlIGlzTWlzc2luZ1NlbGVjdENvbHVtbkFsaWFzKHRva2VuOiBUb2tlbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZUb2tlbiA9IHRoaXMubG9va0JlaGluZCgpO1xuICAgIGNvbnN0IG5leHRUb2tlbiA9IHRoaXMubG9va0FoZWFkKCk7XG4gICAgcmV0dXJuIChcbiAgICAgICh0aGlzLmFsaWFzQXMgPT09ICdhbHdheXMnIHx8IHRoaXMuYWxpYXNBcyA9PT0gJ3NlbGVjdCcpICYmXG4gICAgICB0aGlzLmZvcm1hdHRlci5pc1dpdGhpblNlbGVjdCgpICYmXG4gICAgICB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuV09SRCAmJlxuICAgICAgKGlzVG9rZW4uRU5EKHByZXZUb2tlbikgfHxcbiAgICAgICAgKChwcmV2VG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLldPUkQgfHwgcHJldlRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5OVU1CRVIpICYmXG4gICAgICAgICAgKG5leHRUb2tlbi52YWx1ZSA9PT0gJywnIHx8IGlzQ29tbWFuZChuZXh0VG9rZW4pKSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gQVMga2V5d29yZCBzaG91bGQgYmUgYWRkZWQgKmFmdGVyKiBjdXJyZW50IHRva2VuICovXG4gIHB1YmxpYyBzaG91bGRBZGRBZnRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0VkZ2VDYXNlQ1RFKCkgfHwgdGhpcy5pc0VkZ2VDYXNlQ3JlYXRlVGFibGUoKSB8fCB0aGlzLmlzTWlzc2luZ1R5cGVDYXN0QXMoKTtcbiAgfVxuXG4gIC8vIGNoZWNrcyBmb3IgQ0FTVCjCq2V4cHJlc3Npb27CuyBbQVNdIHR5cGUpXG4gIHByaXZhdGUgaXNNaXNzaW5nVHlwZUNhc3RBcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGlhc0FzID09PSAnbmV2ZXInICYmXG4gICAgICB0aGlzLmZvcm1hdHRlci5pc1dpdGhpblNlbGVjdCgpICYmXG4gICAgICBpc1Rva2VuLkNBU1QodGhpcy5mb3JtYXR0ZXIuZ2V0UHJldmlvdXNSZXNlcnZlZFRva2VuKCkpICYmXG4gICAgICBpc1Rva2VuLkFTKHRoaXMubG9va0FoZWFkKCkpICYmXG4gICAgICAodGhpcy5sb29rQWhlYWQoMikudHlwZSA9PT0gVG9rZW5UeXBlLldPUkQgfHxcbiAgICAgICAgdGhpcy5sb29rQWhlYWQoMikudHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQpICYmXG4gICAgICB0aGlzLmxvb2tBaGVhZCgzKS52YWx1ZSA9PT0gJyknXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNoZWNrcyBmb3IgV0lUSCBgdGFibGVgIFtBU10gKFxuICBwcml2YXRlIGlzRWRnZUNhc2VDVEUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFRva2VuID0gdGhpcy5sb29rQWhlYWQoKTtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5hbGlhc0FzID09PSAnbmV2ZXInICYmXG4gICAgICBpc1Rva2VuLldJVEgodGhpcy5sb29rQmVoaW5kKCkpICYmXG4gICAgICAobmV4dFRva2VuLnZhbHVlID09PSAnKCcgfHwgKGlzVG9rZW4uQVMobmV4dFRva2VuKSAmJiB0aGlzLmxvb2tBaGVhZCgyKS52YWx1ZSA9PT0gJygnKSlcbiAgICApO1xuICB9XG5cbiAgLy8gY2hlY2tzIGZvciBDUkVBVEUgVEFCTEUgYHRhYmxlYCBbQVNdIFdJVEggKFxuICBwcml2YXRlIGlzRWRnZUNhc2VDcmVhdGVUYWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2VG9rZW4gPSB0aGlzLmxvb2tCZWhpbmQoKTtcbiAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLmxvb2tBaGVhZCgpO1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmFsaWFzQXMgPT09ICduZXZlcicgJiZcbiAgICAgIChpc1Rva2VuLlRBQkxFKHByZXZUb2tlbikgfHwgcHJldlRva2VuLnZhbHVlLmVuZHNXaXRoKCdUQUJMRScpKSAmJlxuICAgICAgKGlzVG9rZW4uV0lUSChuZXh0VG9rZW4pIHx8IChpc1Rva2VuLkFTKG5leHRUb2tlbikgJiYgaXNUb2tlbi5XSVRIKHRoaXMubG9va0FoZWFkKDIpKSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qIFRydWUgd2hlbiB0aGUgY3VycmVudCBBUyB0b2tlbiBzaG91bGQgYmUgZGlzY2FyZGVkICovXG4gIHB1YmxpYyBzaG91bGRSZW1vdmUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuYWxpYXNBcyA9PT0gJ25ldmVyJyB8fCAodGhpcy5hbGlhc0FzID09PSAnc2VsZWN0JyAmJiB0aGlzLmlzUmVtb3ZhYmxlTm9uU2VsZWN0QXMoKSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVtb3ZhYmxlTm9uU2VsZWN0QXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMubG9va0JlaGluZCgpLnZhbHVlID09PSAnKScgJiYgLy8gKSBbQVNdIGFsaWFzIGJ1dCBub3QgU0VMRUNUIChhKSBbQVNdIGFscGhhXG4gICAgICAhdGhpcy5mb3JtYXR0ZXIuaXNXaXRoaW5TZWxlY3QoKSAmJlxuICAgICAgdGhpcy5sb29rQWhlYWQoKS52YWx1ZSAhPT0gJygnIC8vIHNraXAgV0lUSCBmb28gW0FTXSAoIC4uLlxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGxvb2tCZWhpbmQobj86IG51bWJlcik6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXIudG9rZW5Mb29rQmVoaW5kKG4pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb29rQWhlYWQobj86IG51bWJlcik6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXR0ZXIudG9rZW5Mb29rQWhlYWQobik7XG4gIH1cbn1cbiIsImltcG9ydCB7IEtleXdvcmRDYXNlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgaXNUb2tlbiwgVG9rZW4sIFRva2VuVHlwZSB9IGZyb20gJy4vdG9rZW4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBc1Rva2VuRmFjdG9yeSB7XG4gIHByaXZhdGUgZGV0ZWN0ZWRDYXNlOiBLZXl3b3JkQ2FzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGtleXdvcmRDYXNlOiBLZXl3b3JkQ2FzZSwgdG9rZW5zOiBUb2tlbltdID0gW10pIHtcbiAgICB0aGlzLmRldGVjdGVkQ2FzZSA9IHRoaXMuYXV0b0RldGVjdENhc2UodG9rZW5zKTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0b0RldGVjdENhc2UodG9rZW5zOiBUb2tlbltdKSB7XG4gICAgY29uc3QgYXNUb2tlbnMgPSB0b2tlbnMuZmlsdGVyKGlzVG9rZW4uQVMpO1xuICAgIGNvbnN0IHVwcGVyQXNUb2tlbnMgPSBhc1Rva2Vucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09ICdBUycpO1xuICAgIHJldHVybiB1cHBlckFzVG9rZW5zLmxlbmd0aCA+IGFzVG9rZW5zLmxlbmd0aCAvIDIgPyAndXBwZXInIDogJ2xvd2VyJztcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIEFTIHRva2VuIHdpdGggZWl0aGVyIHVwcGVyLSBvciBsb3dlcmNhc2UgdGV4dCAqL1xuICBwdWJsaWMgdG9rZW4oKTogVG9rZW4ge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCxcbiAgICAgIHZhbHVlOiB0aGlzLmFzVG9rZW5WYWx1ZSgpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGFzVG9rZW5WYWx1ZSgpOiAnQVMnIHwgJ2FzJyB7XG4gICAgY29uc3Qga2V5d29yZENhc2UgPSB0aGlzLmtleXdvcmRDYXNlID09PSAncHJlc2VydmUnID8gdGhpcy5kZXRlY3RlZENhc2UgOiB0aGlzLmtleXdvcmRDYXNlO1xuICAgIHJldHVybiBrZXl3b3JkQ2FzZSA9PT0gJ3VwcGVyJyA/ICdBUycgOiAnYXMnO1xuICB9XG59XG4iLCJpbXBvcnQgSW5kZW50YXRpb24gZnJvbSAnLi9JbmRlbnRhdGlvbic7XG5pbXBvcnQgSW5saW5lQmxvY2sgZnJvbSAnLi9JbmxpbmVCbG9jayc7XG5pbXBvcnQgUGFyYW1zIGZyb20gJy4vUGFyYW1zJztcbmltcG9ydCB7IHRyaW1TcGFjZXNFbmQgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBpc1Jlc2VydmVkLCBpc0NvbW1hbmQsIGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUsIEVPRl9UT0tFTiB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuL1Rva2VuaXplcic7XG5pbXBvcnQgeyBGb3JtYXRPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IGZvcm1hdENvbW1hUG9zaXRpb25zIGZyb20gJy4vZm9ybWF0Q29tbWFQb3NpdGlvbnMnO1xuaW1wb3J0IGZvcm1hdEFsaWFzUG9zaXRpb25zIGZyb20gJy4vZm9ybWF0QWxpYXNQb3NpdGlvbnMnO1xuaW1wb3J0IHsgdG9UYWJ1bGFyVG9rZW4sIHJlcGxhY2VUYWJ1bGFyUGxhY2Vob2xkZXJzIH0gZnJvbSAnLi90YWJ1bGFyU3R5bGUnO1xuaW1wb3J0IEFsaWFzQXMgZnJvbSAnLi9BbGlhc0FzJztcbmltcG9ydCBBc1Rva2VuRmFjdG9yeSBmcm9tICcuL0FzVG9rZW5GYWN0b3J5JztcblxuLyoqIE1haW4gZm9ybWF0dGVyIGNsYXNzIHRoYXQgcHJvZHVjZXMgYSBmaW5hbCBvdXRwdXQgc3RyaW5nIGZyb20gbGlzdCBvZiB0b2tlbnMgKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcm1hdHRlciB7XG4gIHByaXZhdGUgY2ZnOiBGb3JtYXRPcHRpb25zO1xuICBwcml2YXRlIGluZGVudGF0aW9uOiBJbmRlbnRhdGlvbjtcbiAgcHJpdmF0ZSBpbmxpbmVCbG9jazogSW5saW5lQmxvY2s7XG4gIHByaXZhdGUgYWxpYXNBczogQWxpYXNBcztcbiAgcHJpdmF0ZSBwYXJhbXM6IFBhcmFtcztcbiAgcHJpdmF0ZSBhc1Rva2VuRmFjdG9yeTogQXNUb2tlbkZhY3Rvcnk7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TmV3bGluZSA9IHRydWU7XG4gIHByaXZhdGUgcHJldmlvdXNSZXNlcnZlZFRva2VuOiBUb2tlbiA9IEVPRl9UT0tFTjtcbiAgcHJpdmF0ZSBwcmV2aW91c0NvbW1hbmRUb2tlbjogVG9rZW4gPSBFT0ZfVE9LRU47XG4gIHByb3RlY3RlZCB0b2tlbnM6IFRva2VuW10gPSBbXTtcbiAgcHJvdGVjdGVkIGluZGV4ID0gLTE7XG5cbiAgY29uc3RydWN0b3IoY2ZnOiBGb3JtYXRPcHRpb25zKSB7XG4gICAgdGhpcy5jZmcgPSBjZmc7XG4gICAgdGhpcy5pbmRlbnRhdGlvbiA9IG5ldyBJbmRlbnRhdGlvbih0aGlzLmluZGVudFN0cmluZygpKTtcbiAgICB0aGlzLmlubGluZUJsb2NrID0gbmV3IElubGluZUJsb2NrKHRoaXMuY2ZnLmV4cHJlc3Npb25XaWR0aCk7XG4gICAgdGhpcy5hbGlhc0FzID0gbmV3IEFsaWFzQXModGhpcy5jZmcuYWxpYXNBcywgdGhpcyk7XG4gICAgdGhpcy5wYXJhbXMgPSBuZXcgUGFyYW1zKHRoaXMuY2ZnLnBhcmFtcyk7XG4gICAgdGhpcy5hc1Rva2VuRmFjdG9yeSA9IG5ldyBBc1Rva2VuRmFjdG9yeSh0aGlzLmNmZy5rZXl3b3JkQ2FzZSk7XG4gIH1cblxuICBwcml2YXRlIGluZGVudFN0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmlzVGFidWxhclN0eWxlKCkpIHtcbiAgICAgIHJldHVybiAnICcucmVwZWF0KDEwKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2ZnLnVzZVRhYnMpIHtcbiAgICAgIHJldHVybiAnXFx0JztcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQodGhpcy5jZmcudGFiV2lkdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNRTCBUb2tlbml6ZXIgZm9yIHRoaXMgZm9ybWF0dGVyLCBwcm92aWRlZCBieSBzdWJjbGFzc2VzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHRva2VuaXplcigpOiBUb2tlbml6ZXIge1xuICAgIHRocm93IG5ldyBFcnJvcigndG9rZW5pemVyKCkgbm90IGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzJyk7XG4gIH1cblxuICAvKipcbiAgICogUmVwcm9jZXNzIGFuZCBtb2RpZnkgYSB0b2tlbiBiYXNlZCBvbiBwYXJzZWQgY29udGV4dC5cbiAgICogU3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBtb2RpZnkgdG9rZW5zIGR1cmluZyBmb3JtYXR0aW5nLlxuICAgKiBAcGFyYW0ge1Rva2VufSB0b2tlbiAtIFRoZSB0b2tlbiB0byBtb2RpZnlcbiAgICogQHJldHVybiB7VG9rZW59IG5ldyB0b2tlbiBvciB0aGUgb3JpZ2luYWxcbiAgICovXG4gIHByb3RlY3RlZCB0b2tlbk92ZXJyaWRlKHRva2VuOiBUb2tlbik6IFRva2VuIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhbiBTUUwgcXVlcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSAtIFRoZSBTUUwgcXVlcnkgc3RyaW5nIHRvIGJlIGZvcm1hdHRlZFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZXIgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmb3JtYXQocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy50b2tlbnMgPSB0aGlzLnRva2VuaXplcigpLnRva2VuaXplKHF1ZXJ5KTtcbiAgICB0aGlzLmFzVG9rZW5GYWN0b3J5ID0gbmV3IEFzVG9rZW5GYWN0b3J5KHRoaXMuY2ZnLmtleXdvcmRDYXNlLCB0aGlzLnRva2Vucyk7XG4gICAgY29uc3QgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmdldEZvcm1hdHRlZFF1ZXJ5RnJvbVRva2VucygpO1xuICAgIGNvbnN0IGZpbmFsUXVlcnkgPSB0aGlzLnBvc3RGb3JtYXQoZm9ybWF0dGVkUXVlcnkpO1xuXG4gICAgcmV0dXJuIGZpbmFsUXVlcnkucmVwbGFjZSgvXlxcbiovdSwgJycpLnRyaW1FbmQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEb2VzIHBvc3QtcHJvY2Vzc2luZyBvbiB0aGUgZm9ybWF0dGVkIHF1ZXJ5LlxuICAgKi9cbiAgcHJpdmF0ZSBwb3N0Rm9ybWF0KHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLmNmZy50YWJ1bGF0ZUFsaWFzKSB7XG4gICAgICBxdWVyeSA9IGZvcm1hdEFsaWFzUG9zaXRpb25zKHF1ZXJ5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2ZnLmNvbW1hUG9zaXRpb24gPT09ICdiZWZvcmUnIHx8IHRoaXMuY2ZnLmNvbW1hUG9zaXRpb24gPT09ICd0YWJ1bGFyJykge1xuICAgICAgcXVlcnkgPSBmb3JtYXRDb21tYVBvc2l0aW9ucyhxdWVyeSwgdGhpcy5jZmcuY29tbWFQb3NpdGlvbiwgdGhpcy5pbmRlbnRTdHJpbmcoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm1zIG1haW4gY29uc3RydWN0aW9uIG9mIHF1ZXJ5IGZyb20gdG9rZW4gbGlzdCwgZGVsZWdhdGVzIHRvIG90aGVyIG1ldGhvZHMgZm9yIGZvcm1hdHRpbmcgYmFzZWQgb24gdG9rZW4gY3JpdGVyaWFcbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9ybWF0dGVkUXVlcnlGcm9tVG9rZW5zKCk6IHN0cmluZyB7XG4gICAgbGV0IGZvcm1hdHRlZFF1ZXJ5ID0gJyc7XG5cbiAgICBmb3IgKHRoaXMuaW5kZXggPSAwOyB0aGlzLmluZGV4IDwgdGhpcy50b2tlbnMubGVuZ3RoOyB0aGlzLmluZGV4KyspIHtcbiAgICAgIGxldCB0b2tlbiA9IHRoaXMudG9rZW5PdmVycmlkZSh0aGlzLnRva2Vuc1t0aGlzLmluZGV4XSk7XG5cbiAgICAgIC8vIGlmIHRva2VuIGlzIGEgUmVzZXJ2ZWQgS2V5d29yZCwgQ29tbWFuZCwgQmluYXJ5IENvbW1hbmQsIERlcGVuZGVudCBDbGF1c2UsIExvZ2ljYWwgT3BlcmF0b3JcbiAgICAgIGlmIChpc1Jlc2VydmVkKHRva2VuKSkge1xuICAgICAgICB0aGlzLnByZXZpb3VzUmVzZXJ2ZWRUb2tlbiA9IHRva2VuO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdG9rZW4udHlwZSAhPT0gVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQgJiZcbiAgICAgICAgICB0b2tlbi50eXBlICE9PSBUb2tlblR5cGUuUkVTRVJWRURfSk9JTl9DT05ESVRJT05cbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gY29udmVydCBSZXNlcnZlZCBDb21tYW5kIG9yIExvZ2ljYWwgT3BlcmF0b3IgdG8gdGFidWxhciBmb3JtYXQgaWYgbmVlZGVkXG4gICAgICAgICAgdG9rZW4gPSB0b1RhYnVsYXJUb2tlbih0b2tlbiwgdGhpcy5jZmcuaW5kZW50U3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCkge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNDb21tYW5kVG9rZW4gPSB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkxJTkVfQ09NTUVOVCkge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0TGluZUNvbW1lbnQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX0NPTU1FTlQpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEJsb2NrQ29tbWVudCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCkge1xuICAgICAgICB0aGlzLmN1cnJlbnROZXdsaW5lID0gdGhpcy5jaGVja05ld2xpbmUodG9rZW4pO1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0Q29tbWFuZCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQklOQVJZX0NPTU1BTkQpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEJpbmFyeUNvbW1hbmQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0RFUEVOREVOVF9DTEFVU0UpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdERlcGVuZGVudENsYXVzZSh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfSk9JTl9DT05ESVRJT04pIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEpvaW5Db25kaXRpb24odG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdExvZ2ljYWxPcGVyYXRvcih0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCkge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0S2V5d29yZCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuQkxPQ0tfU1RBUlQpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdEJsb2NrU3RhcnQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX0VORCkge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0QmxvY2tFbmQodG9rZW4sIGZvcm1hdHRlZFF1ZXJ5KTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlBMQUNFSE9MREVSKSB7XG4gICAgICAgIGZvcm1hdHRlZFF1ZXJ5ID0gdGhpcy5mb3JtYXRQbGFjZWhvbGRlcih0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuT1BFUkFUT1IpIHtcbiAgICAgICAgZm9ybWF0dGVkUXVlcnkgPSB0aGlzLmZvcm1hdE9wZXJhdG9yKHRva2VuLCBmb3JtYXR0ZWRRdWVyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3JtYXR0ZWRRdWVyeSA9IHRoaXMuZm9ybWF0V29yZCh0b2tlbiwgZm9ybWF0dGVkUXVlcnkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVwbGFjZVRhYnVsYXJQbGFjZWhvbGRlcnMoZm9ybWF0dGVkUXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgd29yZCB0b2tlbnMgKyBhbnkgcG90ZW50aWFsIEFTIHRva2VucyBmb3IgYWxpYXNlc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRXb3JkKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGZpbmFsUXVlcnkgPSBxdWVyeTtcbiAgICBpZiAodGhpcy5hbGlhc0FzLnNob3VsZEFkZEJlZm9yZSh0b2tlbikpIHtcbiAgICAgIGZpbmFsUXVlcnkgPSB0aGlzLmZvcm1hdFdpdGhTcGFjZXModGhpcy5hc1Rva2VuRmFjdG9yeS50b2tlbigpLCBmaW5hbFF1ZXJ5KTtcbiAgICB9XG5cbiAgICBmaW5hbFF1ZXJ5ID0gdGhpcy5mb3JtYXRXaXRoU3BhY2VzKHRva2VuLCBmaW5hbFF1ZXJ5KTtcblxuICAgIGlmICh0aGlzLmFsaWFzQXMuc2hvdWxkQWRkQWZ0ZXIoKSkge1xuICAgICAgZmluYWxRdWVyeSA9IHRoaXMuZm9ybWF0V2l0aFNwYWNlcyh0aGlzLmFzVG9rZW5GYWN0b3J5LnRva2VuKCksIGZpbmFsUXVlcnkpO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5hbFF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIG5ld2xpbmUgc2hvdWxkIGN1cnJlbnRseSBiZSBpbnNlcnRlZFxuICAgKi9cbiAgcHJpdmF0ZSBjaGVja05ld2xpbmUodG9rZW46IFRva2VuKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFRva2VucyA9IHRoaXMudG9rZW5zVW50aWxOZXh0Q29tbWFuZE9yUXVlcnlFbmQoKTtcblxuICAgIC8vIGF1dG8gYnJlYWsgaWYgU0VMRUNUIGluY2x1ZGVzIENBU0Ugc3RhdGVtZW50c1xuICAgIGlmICh0aGlzLmlzV2l0aGluU2VsZWN0KCkgJiYgbmV4dFRva2Vucy5zb21lKGlzVG9rZW4uQ0FTRSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5jZmcubXVsdGlsaW5lTGlzdHMpIHtcbiAgICAgIGNhc2UgJ2Fsd2F5cyc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYXZvaWQnOlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICBjYXNlICdleHByZXNzaW9uV2lkdGgnOlxuICAgICAgICByZXR1cm4gdGhpcy5pbmxpbmVXaWR0aCh0b2tlbiwgbmV4dFRva2VucykgPiB0aGlzLmNmZy5leHByZXNzaW9uV2lkdGg7XG4gICAgICBkZWZhdWx0OiAvLyBtdWx0aWxpbmVMaXN0cyBtb2RlIGlzIGEgbnVtYmVyXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdGhpcy5jb3VudENsYXVzZXMobmV4dFRva2VucykgPiB0aGlzLmNmZy5tdWx0aWxpbmVMaXN0cyB8fFxuICAgICAgICAgIHRoaXMuaW5saW5lV2lkdGgodG9rZW4sIG5leHRUb2tlbnMpID4gdGhpcy5jZmcuZXhwcmVzc2lvbldpZHRoXG4gICAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbmxpbmVXaWR0aCh0b2tlbjogVG9rZW4sIHRva2VuczogVG9rZW5bXSk6IG51bWJlciB7XG4gICAgY29uc3QgdG9rZW5zU3RyaW5nID0gdG9rZW5zLm1hcCgoeyB2YWx1ZSB9KSA9PiAodmFsdWUgPT09ICcsJyA/IHZhbHVlICsgJyAnIDogdmFsdWUpKS5qb2luKCcnKTtcbiAgICByZXR1cm4gYCR7dG9rZW4ud2hpdGVzcGFjZUJlZm9yZX0ke3Rva2VuLnZhbHVlfSAke3Rva2Vuc1N0cmluZ31gLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudHMgY29tbWEtc2VwYXJhdGVkIGNsYXVzZXMgKGRvZXNuJ3QgY291bnQgY29tbWFzIGluc2lkZSBibG9ja3MpXG4gICAqIE5vdGU6IFRoZXJlJ3MgYWx3YXlzIGF0IGxlYXN0IG9uZSBjbGF1c2UuXG4gICAqL1xuICBwcml2YXRlIGNvdW50Q2xhdXNlcyh0b2tlbnM6IFRva2VuW10pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDE7XG4gICAgbGV0IG9wZW5CbG9ja3MgPSAwO1xuICAgIGZvciAoY29uc3QgeyB0eXBlLCB2YWx1ZSB9IG9mIHRva2Vucykge1xuICAgICAgaWYgKHZhbHVlID09PSAnLCcgJiYgb3BlbkJsb2NrcyA9PT0gMCkge1xuICAgICAgICBjb3VudCsrO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19TVEFSVCkge1xuICAgICAgICBvcGVuQmxvY2tzKys7XG4gICAgICB9XG4gICAgICBpZiAodHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX0VORCkge1xuICAgICAgICBvcGVuQmxvY2tzLS07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIC8qKiBnZXQgYWxsIHRva2VucyBiZXR3ZWVuIGN1cnJlbnQgdG9rZW4gYW5kIG5leHQgUmVzZXJ2ZWQgQ29tbWFuZCBvciBxdWVyeSBlbmQgKi9cbiAgcHJpdmF0ZSB0b2tlbnNVbnRpbE5leHRDb21tYW5kT3JRdWVyeUVuZCgpOiBUb2tlbltdIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50b2tlbnMuc2xpY2UodGhpcy5pbmRleCArIDEpO1xuICAgIHJldHVybiB0YWlsLnNsaWNlKFxuICAgICAgMCxcbiAgICAgIHRhaWwubGVuZ3RoID8gdGFpbC5maW5kSW5kZXgodG9rZW4gPT4gaXNDb21tYW5kKHRva2VuKSB8fCB0b2tlbi52YWx1ZSA9PT0gJzsnKSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKiogRm9ybWF0cyBhIGxpbmUgY29tbWVudCBvbnRvIHF1ZXJ5ICovXG4gIHByaXZhdGUgZm9ybWF0TGluZUNvbW1lbnQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5ICsgdGhpcy5zaG93KHRva2VuKSk7XG4gIH1cblxuICAvKiogRm9ybWF0cyBhIGJsb2NrIGNvbW1lbnQgb250byBxdWVyeSAqL1xuICBwcml2YXRlIGZvcm1hdEJsb2NrQ29tbWVudCh0b2tlbjogVG9rZW4sIHF1ZXJ5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmFkZE5ld2xpbmUodGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSArIHRoaXMuaW5kZW50Q29tbWVudCh0b2tlbi52YWx1ZSkpO1xuICB9XG5cbiAgLyoqIEFsaWducyBjb21tZW50IHRvIGN1cnJlbnQgaW5kZW50YXRpb24gbGV2ZWwgKi9cbiAgcHJpdmF0ZSBpbmRlbnRDb21tZW50KGNvbW1lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbW1lbnQucmVwbGFjZSgvXFxuWyBcXHRdKi9ndSwgJ1xcbicgKyB0aGlzLmluZGVudGF0aW9uLmdldEluZGVudCgpICsgJyAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgUmVzZXJ2ZWQgQ29tbWFuZCBvbnRvIHF1ZXJ5LCBpbmNyZWFzaW5nIGluZGVudGF0aW9uIGxldmVsIHdoZXJlIG5lY2Vzc2FyeVxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRDb21tYW5kKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pbmRlbnRhdGlvbi5kZWNyZWFzZVRvcExldmVsKCk7XG5cbiAgICBxdWVyeSA9IHRoaXMuYWRkTmV3bGluZShxdWVyeSk7XG5cbiAgICAvLyBpbmRlbnQgdGFidWxhciBmb3JtYXRzLCBleGNlcHQgd2hlbiBwcmVjZWRpbmcgYSAoXG4gICAgaWYgKHRoaXMuaXNUYWJ1bGFyU3R5bGUoKSkge1xuICAgICAgaWYgKHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZSAhPT0gJygnKSB7XG4gICAgICAgIHRoaXMuaW5kZW50YXRpb24uaW5jcmVhc2VUb3BMZXZlbCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZGVudGF0aW9uLmluY3JlYXNlVG9wTGV2ZWwoKTtcbiAgICB9XG5cbiAgICBxdWVyeSArPSB0aGlzLmVxdWFsaXplV2hpdGVzcGFjZSh0aGlzLnNob3codG9rZW4pKTsgLy8gcHJpbnQgdG9rZW4gb250byBxdWVyeVxuICAgIGlmICh0aGlzLmN1cnJlbnROZXdsaW5lICYmICF0aGlzLmlzVGFidWxhclN0eWxlKCkpIHtcbiAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVlcnkgKz0gJyAnO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhIFJlc2VydmVkIEJpbmFyeSBDb21tYW5kIG9udG8gcXVlcnksIGpvaW5pbmcgbmVpZ2hib3VyaW5nIHRva2Vuc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRCaW5hcnlDb21tYW5kKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaXNKb2luID0gL0pPSU4vaS50ZXN0KHRva2VuLnZhbHVlKTsgLy8gY2hlY2sgaWYgdG9rZW4gY29udGFpbnMgSk9JTlxuICAgIGlmICghaXNKb2luIHx8IHRoaXMuaXNUYWJ1bGFyU3R5bGUoKSkge1xuICAgICAgLy8gZGVjcmVhc2UgZm9yIGJvb2xlYW4gc2V0IG9wZXJhdG9ycyBvciBpbiB0YWJ1bGFyIG1vZGVcbiAgICAgIHRoaXMuaW5kZW50YXRpb24uZGVjcmVhc2VUb3BMZXZlbCgpO1xuICAgIH1cbiAgICBxdWVyeSA9IHRoaXMuYWRkTmV3bGluZShxdWVyeSkgKyB0aGlzLmVxdWFsaXplV2hpdGVzcGFjZSh0aGlzLnNob3codG9rZW4pKTtcbiAgICByZXR1cm4gaXNKb2luID8gcXVlcnkgKyAnICcgOiB0aGlzLmFkZE5ld2xpbmUocXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBSZXNlcnZlZCBLZXl3b3JkIG9udG8gcXVlcnksIHNraXBwaW5nIEFTIGlmIGRpc2FibGVkXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEtleXdvcmQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUb2tlbi5BUyh0b2tlbikgJiYgdGhpcy5hbGlhc0FzLnNob3VsZFJlbW92ZSgpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFNwYWNlcyh0b2tlbiwgcXVlcnkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBSZXNlcnZlZCBEZXBlbmRlbnQgQ2xhdXNlIHRva2VuIG9udG8gcXVlcnksIHN1cHBvcnRpbmcgdGhlIGtleXdvcmQgdGhhdCBwcmVjZWRlcyBpdFxuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXREZXBlbmRlbnRDbGF1c2UodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSArIHRoaXMuZXF1YWxpemVXaGl0ZXNwYWNlKHRoaXMuc2hvdyh0b2tlbikpICsgJyAnO1xuICB9XG5cbiAgLy8gRm9ybWF0cyBPTiBhbmQgVVNJTkcga2V5d29yZHNcbiAgcHJpdmF0ZSBmb3JtYXRKb2luQ29uZGl0aW9uKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHF1ZXJ5ICsgdGhpcy5lcXVhbGl6ZVdoaXRlc3BhY2UodGhpcy5zaG93KHRva2VuKSkgKyAnICc7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0cyBhbiBPcGVyYXRvciBvbnRvIHF1ZXJ5LCBmb2xsb3dpbmcgcnVsZXMgZm9yIHNwZWNpZmljIGNoYXJhY3RlcnNcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0T3BlcmF0b3IodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBzcGVjaWFsIG9wZXJhdG9yXG4gICAgaWYgKHRva2VuLnZhbHVlID09PSAnLCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdENvbW1hKHRva2VuLCBxdWVyeSk7XG4gICAgfSBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJzsnKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRRdWVyeVNlcGFyYXRvcih0b2tlbiwgcXVlcnkpO1xuICAgIH0gZWxzZSBpZiAoWyckJywgJ1snXS5pbmNsdWRlcyh0b2tlbi52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5LCAnYmVmb3JlJyk7XG4gICAgfSBlbHNlIGlmIChbJzonLCAnXSddLmluY2x1ZGVzKHRva2VuLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFNwYWNlcyh0b2tlbiwgcXVlcnksICdhZnRlcicpO1xuICAgIH0gZWxzZSBpZiAoWycuJywgJ3snLCAnfScsICdgJ10uaW5jbHVkZXModG9rZW4udmFsdWUpKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRob3V0U3BhY2VzKHRva2VuLCBxdWVyeSk7XG4gICAgfVxuXG4gICAgLy8gcmVndWxhciBvcGVyYXRvclxuICAgIGlmICh0aGlzLmNmZy5kZW5zZU9wZXJhdG9ycyAmJiB0aGlzLnRva2VuTG9va0JlaGluZCgpLnR5cGUgIT09IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EKSB7XG4gICAgICAvLyBkbyBub3QgdHJpbSB3aGl0ZXNwYWNlIGlmIFNFTEVDVCAqXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRob3V0U3BhY2VzKHRva2VuLCBxdWVyeSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIGEgTG9naWNhbCBPcGVyYXRvciBvbnRvIHF1ZXJ5LCBqb2luaW5nIGJvb2xlYW4gY29uZGl0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRMb2dpY2FsT3BlcmF0b3IodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBpZ25vcmUgQU5EIHdoZW4gQkVUV0VFTiB4IFtBTkRdIHlcbiAgICBpZiAoaXNUb2tlbi5BTkQodG9rZW4pICYmIGlzVG9rZW4uQkVUV0VFTih0aGlzLnRva2VuTG9va0JlaGluZCgyKSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1RhYnVsYXJTdHlsZSgpKSB7XG4gICAgICB0aGlzLmluZGVudGF0aW9uLmRlY3JlYXNlVG9wTGV2ZWwoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jZmcubG9naWNhbE9wZXJhdG9yTmV3bGluZSA9PT0gJ2JlZm9yZScpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmN1cnJlbnROZXdsaW5lID8gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSA6IHF1ZXJ5KSArXG4gICAgICAgIHRoaXMuZXF1YWxpemVXaGl0ZXNwYWNlKHRoaXMuc2hvdyh0b2tlbikpICtcbiAgICAgICAgJyAnXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeSArPSB0aGlzLnNob3codG9rZW4pO1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE5ld2xpbmUgPyB0aGlzLmFkZE5ld2xpbmUocXVlcnkpIDogcXVlcnk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlcGxhY2UgYW55IHNlcXVlbmNlIG9mIHdoaXRlc3BhY2UgY2hhcmFjdGVycyB3aXRoIHNpbmdsZSBzcGFjZSAqL1xuICBwcml2YXRlIGVxdWFsaXplV2hpdGVzcGFjZShzdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9cXHMrL2d1LCAnICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBCbG9jayBTdGFydCB0b2tlbiAobGVmdCBwYXJlbi9icmFja2V0L2JyYWNlLCBDQVNFKSBvbnRvIHF1ZXJ5LCBiZWdpbm5pbmcgYW4gSW5saW5lIEJsb2NrIG9yIGluY3JlYXNpbmcgaW5kZW50YXRpb24gd2hlcmUgbmVjZXNzYXJ5XG4gICAqL1xuICBwcml2YXRlIGZvcm1hdEJsb2NrU3RhcnQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoaXNUb2tlbi5DQVNFKHRva2VuKSkge1xuICAgICAgcXVlcnkgPSB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGFrZSBvdXQgdGhlIHByZWNlZGluZyBzcGFjZSB1bmxlc3MgdGhlcmUgd2FzIHdoaXRlc3BhY2UgdGhlcmUgaW4gdGhlIG9yaWdpbmFsIHF1ZXJ5XG4gICAgICAvLyBvciBhbm90aGVyIG9wZW5pbmcgcGFyZW5zIG9yIGxpbmUgY29tbWVudFxuICAgICAgY29uc3QgcHJlc2VydmVXaGl0ZXNwYWNlRm9yID0gW1xuICAgICAgICBUb2tlblR5cGUuQkxPQ0tfU1RBUlQsXG4gICAgICAgIFRva2VuVHlwZS5MSU5FX0NPTU1FTlQsXG4gICAgICAgIFRva2VuVHlwZS5PUEVSQVRPUixcbiAgICAgIF07XG4gICAgICBpZiAoXG4gICAgICAgIHRva2VuLndoaXRlc3BhY2VCZWZvcmU/Lmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAhcHJlc2VydmVXaGl0ZXNwYWNlRm9yLmluY2x1ZGVzKHRoaXMudG9rZW5Mb29rQmVoaW5kKCkudHlwZSlcbiAgICAgICkge1xuICAgICAgICBxdWVyeSA9IHRyaW1TcGFjZXNFbmQocXVlcnkpO1xuICAgICAgfSBlbHNlIGlmICghdGhpcy5jZmcubmV3bGluZUJlZm9yZU9wZW5QYXJlbikge1xuICAgICAgICBxdWVyeSA9IHF1ZXJ5LnRyaW1FbmQoKSArICcgJztcbiAgICAgIH1cbiAgICAgIHF1ZXJ5ICs9IHRoaXMuc2hvdyh0b2tlbik7XG4gICAgICB0aGlzLmlubGluZUJsb2NrLmJlZ2luSWZQb3NzaWJsZSh0aGlzLnRva2VucywgdGhpcy5pbmRleCk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmlubGluZUJsb2NrLmlzQWN0aXZlKCkpIHtcbiAgICAgIHRoaXMuaW5kZW50YXRpb24uaW5jcmVhc2VCbG9ja0xldmVsKCk7XG4gICAgICBpZiAoIWlzVG9rZW4uQ0FTRSh0b2tlbikgfHwgdGhpcy5jZmcubXVsdGlsaW5lTGlzdHMgPT09ICdhbHdheXMnKSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBCbG9jayBFbmQgdG9rZW4gKHJpZ2h0IHBhcmVuL2JyYWNrZXQvYnJhY2UsIEVORCkgb250byBxdWVyeSwgY2xvc2luZyBhbiBJbmxpbmUgQmxvY2sgb3IgZGVjcmVhc2luZyBpbmRlbnRhdGlvbiB3aGVyZSBuZWNlc3NhcnlcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QmxvY2tFbmQodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5pbmxpbmVCbG9jay5pc0FjdGl2ZSgpKSB7XG4gICAgICB0aGlzLmlubGluZUJsb2NrLmVuZCgpO1xuICAgICAgaWYgKGlzVG9rZW4uRU5EKHRva2VuKSkge1xuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRoU3BhY2VzKHRva2VuLCBxdWVyeSk7IC8vIGFkZCBzcGFjZSBiZWZvcmUgRU5EIHdoZW4gY2xvc2luZyBpbmxpbmUgYmxvY2tcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmZvcm1hdFdpdGhTcGFjZXModG9rZW4sIHF1ZXJ5LCAnYWZ0ZXInKTsgLy8gZG8gbm90IGFkZCBzcGFjZSBiZWZvcmUgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluZGVudGF0aW9uLmRlY3JlYXNlQmxvY2tMZXZlbCgpO1xuXG4gICAgICBpZiAodGhpcy5pc1RhYnVsYXJTdHlsZSgpKSB7XG4gICAgICAgIC8vICsxIGV4dHJhIGluZGVudGF0aW9uIHN0ZXAgZm9yIHRoZSBjbG9zaW5nIHBhcmVuXG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KSArIHRoaXMuaW5kZW50YXRpb24uZ2V0U2luZ2xlSW5kZW50KCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2ZnLm5ld2xpbmVCZWZvcmVDbG9zZVBhcmVuKSB7XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkudHJpbUVuZCgpICsgJyAnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRXaXRoU3BhY2VzKHRva2VuLCBxdWVyeSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBQbGFjZWhvbGRlciBpdGVtIG9udG8gcXVlcnksIHRvIGJlIHJlcGxhY2VkIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBwbGFjZWhvbGRlclxuICAgKi9cbiAgZm9ybWF0UGxhY2Vob2xkZXIodG9rZW46IFRva2VuLCBxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gcXVlcnkgKyB0aGlzLnBhcmFtcy5nZXQodG9rZW4pICsgJyAnO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBjb21tYSBPcGVyYXRvciBvbnRvIHF1ZXJ5LCBlbmRpbmcgbGluZSB1bmxlc3MgaW4gYW4gSW5saW5lIEJsb2NrXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdENvbW1hKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcXVlcnkgPSB0cmltU3BhY2VzRW5kKHF1ZXJ5KSArIHRoaXMuc2hvdyh0b2tlbikgKyAnICc7XG5cbiAgICBpZiAodGhpcy5pbmxpbmVCbG9jay5pc0FjdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfSBlbHNlIGlmIChpc1Rva2VuLkxJTUlUKHRoaXMuZ2V0UHJldmlvdXNSZXNlcnZlZFRva2VuKCkpKSB7XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnROZXdsaW5lKSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGROZXdsaW5lKHF1ZXJ5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTaW1wbGUgYXBwZW5kIG9mIHRva2VuIG9udG8gcXVlcnkgKi9cbiAgcHJpdmF0ZSBmb3JtYXRXaXRob3V0U3BhY2VzKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRyaW1TcGFjZXNFbmQocXVlcnkpICsgdGhpcy5zaG93KHRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgdG9rZW4gb250byBxdWVyeSB3aXRoIHNwYWNlcyAtIGVpdGhlciBiZWZvcmUsIGFmdGVyLCBvciBib3RoXG4gICAqL1xuICBwcml2YXRlIGZvcm1hdFdpdGhTcGFjZXMoXG4gICAgdG9rZW46IFRva2VuLFxuICAgIHF1ZXJ5OiBzdHJpbmcsXG4gICAgYWRkU3BhY2U6ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICdib3RoJyA9ICdib3RoJ1xuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGJlZm9yZSA9IGFkZFNwYWNlID09PSAnYWZ0ZXInID8gdHJpbVNwYWNlc0VuZChxdWVyeSkgOiBxdWVyeTtcbiAgICBjb25zdCBhZnRlciA9IGFkZFNwYWNlID09PSAnYmVmb3JlJyA/ICcnIDogJyAnO1xuICAgIHJldHVybiBiZWZvcmUgKyB0aGlzLnNob3codG9rZW4pICsgYWZ0ZXI7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFF1ZXJ5U2VwYXJhdG9yKHRva2VuOiBUb2tlbiwgcXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pbmRlbnRhdGlvbi5yZXNldEluZGVudGF0aW9uKCk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHRyaW1TcGFjZXNFbmQocXVlcnkpLFxuICAgICAgdGhpcy5jZmcubmV3bGluZUJlZm9yZVNlbWljb2xvbiA/ICdcXG4nIDogJycsXG4gICAgICB0aGlzLnNob3codG9rZW4pLFxuICAgICAgJ1xcbicucmVwZWF0KHRoaXMuY2ZnLmxpbmVzQmV0d2VlblF1ZXJpZXMgKyAxKSxcbiAgICBdLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqIENvbnZlcnRzIHRva2VuIHRvIHN0cmluZywgdXBwZXJjYXNpbmcgaWYgZW5hYmxlZCAqL1xuICBwcml2YXRlIHNob3codG9rZW46IFRva2VuKTogc3RyaW5nIHtcbiAgICBpZiAoXG4gICAgICBpc1Jlc2VydmVkKHRva2VuKSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkJMT0NLX1NUQVJUIHx8XG4gICAgICB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuQkxPQ0tfRU5EXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHRoaXMuY2ZnLmtleXdvcmRDYXNlKSB7XG4gICAgICAgIGNhc2UgJ3ByZXNlcnZlJzpcbiAgICAgICAgICByZXR1cm4gdG9rZW4udmFsdWU7XG4gICAgICAgIGNhc2UgJ3VwcGVyJzpcbiAgICAgICAgICByZXR1cm4gdG9rZW4udmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgY2FzZSAnbG93ZXInOlxuICAgICAgICAgIHJldHVybiB0b2tlbi52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLyoqIEluc2VydHMgYSBuZXdsaW5lIG9udG8gdGhlIHF1ZXJ5ICovXG4gIHByaXZhdGUgYWRkTmV3bGluZShxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBxdWVyeSA9IHRyaW1TcGFjZXNFbmQocXVlcnkpO1xuICAgIGlmICghcXVlcnkuZW5kc1dpdGgoJ1xcbicpKSB7XG4gICAgICBxdWVyeSArPSAnXFxuJztcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5ICsgdGhpcy5pbmRlbnRhdGlvbi5nZXRJbmRlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUYWJ1bGFyU3R5bGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2ZnLmluZGVudFN0eWxlID09PSAndGFidWxhckxlZnQnIHx8IHRoaXMuY2ZnLmluZGVudFN0eWxlID09PSAndGFidWxhclJpZ2h0JztcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBsYXRlc3QgZW5jb3VudGVyZWQgcmVzZXJ2ZWQga2V5d29yZCB0b2tlbiAqL1xuICBwdWJsaWMgZ2V0UHJldmlvdXNSZXNlcnZlZFRva2VuKCk6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5wcmV2aW91c1Jlc2VydmVkVG9rZW47XG4gIH1cblxuICAvKiogVHJ1ZSB3aGVuIGN1cnJlbnRseSB3aXRoaW4gU0VMRUNUIGNvbW1hbmQgKi9cbiAgcHVibGljIGlzV2l0aGluU2VsZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1Rva2VuLlNFTEVDVCh0aGlzLnByZXZpb3VzQ29tbWFuZFRva2VuKTtcbiAgfVxuXG4gIC8qKiBGZXRjaGVzIG50aCBwcmV2aW91cyB0b2tlbiBmcm9tIHRoZSB0b2tlbiBzdHJlYW0gKi9cbiAgcHVibGljIHRva2VuTG9va0JlaGluZChuID0gMSk6IFRva2VuIHtcbiAgICByZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCAtIG5dIHx8IEVPRl9UT0tFTjtcbiAgfVxuXG4gIC8qKiBGZXRjaGVzIG50aCBuZXh0IHRva2VuIGZyb20gdGhlIHRva2VuIHN0cmVhbSAqL1xuICBwdWJsaWMgdG9rZW5Mb29rQWhlYWQobiA9IDEpOiBUb2tlbiB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXggKyBuXSB8fCBFT0ZfVE9LRU47XG4gIH1cbn1cbiIsImltcG9ydCB7IGxhc3QgfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IElOREVOVF9UWVBFX1RPUF9MRVZFTCA9ICd0b3AtbGV2ZWwnO1xuY29uc3QgSU5ERU5UX1RZUEVfQkxPQ0tfTEVWRUwgPSAnYmxvY2stbGV2ZWwnO1xuXG4vKipcbiAqIE1hbmFnZXMgaW5kZW50YXRpb24gbGV2ZWxzLlxuICpcbiAqIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW5kZW50YXRpb24gbGV2ZWxzOlxuICpcbiAqIC0gQkxPQ0tfTEVWRUwgOiBpbmNyZWFzZWQgYnkgb3Blbi1wYXJlbnRoZXNpc1xuICogLSBUT1BfTEVWRUwgOiBpbmNyZWFzZWQgYnkgUkVTRVJWRURfQ09NTUFORCB3b3Jkc1xuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRlbnRhdGlvbiB7XG4gIHByaXZhdGUgaW5kZW50VHlwZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRlbnQgQSBzdHJpbmcgdG8gaW5kZW50IHdpdGhcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW5kZW50OiBzdHJpbmcpIHt9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgaW5kZW50YXRpb24gc3RyaW5nIGZvciBzaW5nbGUgaW5kZW50YXRpb24gc3RlcC5cbiAgICovXG4gIGdldFNpbmdsZUluZGVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmluZGVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgaW5kZW50YXRpb24gc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGluZGVudGF0aW9uIHN0cmluZyBiYXNlZCBvbiBpbmRlbnRUeXBlc1xuICAgKi9cbiAgZ2V0SW5kZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZW50LnJlcGVhdCh0aGlzLmluZGVudFR5cGVzLmxlbmd0aCk7XG4gIH1cblxuICAvKipcbiAgICogSW5jcmVhc2VzIGluZGVudGF0aW9uIGJ5IG9uZSB0b3AtbGV2ZWwgaW5kZW50LlxuICAgKi9cbiAgaW5jcmVhc2VUb3BMZXZlbCgpIHtcbiAgICB0aGlzLmluZGVudFR5cGVzLnB1c2goSU5ERU5UX1RZUEVfVE9QX0xFVkVMKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZWFzZXMgaW5kZW50YXRpb24gYnkgb25lIGJsb2NrLWxldmVsIGluZGVudC5cbiAgICovXG4gIGluY3JlYXNlQmxvY2tMZXZlbCgpIHtcbiAgICB0aGlzLmluZGVudFR5cGVzLnB1c2goSU5ERU5UX1RZUEVfQkxPQ0tfTEVWRUwpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY3JlYXNlcyBpbmRlbnRhdGlvbiBieSBvbmUgdG9wLWxldmVsIGluZGVudC5cbiAgICogRG9lcyBub3RoaW5nIHdoZW4gdGhlIHByZXZpb3VzIGluZGVudCBpcyBub3QgdG9wLWxldmVsLlxuICAgKi9cbiAgZGVjcmVhc2VUb3BMZXZlbCgpIHtcbiAgICBpZiAodGhpcy5pbmRlbnRUeXBlcy5sZW5ndGggPiAwICYmIGxhc3QodGhpcy5pbmRlbnRUeXBlcykgPT09IElOREVOVF9UWVBFX1RPUF9MRVZFTCkge1xuICAgICAgdGhpcy5pbmRlbnRUeXBlcy5wb3AoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjcmVhc2VzIGluZGVudGF0aW9uIGJ5IG9uZSBibG9jay1sZXZlbCBpbmRlbnQuXG4gICAqIElmIHRoZXJlIGFyZSB0b3AtbGV2ZWwgaW5kZW50cyB3aXRoaW4gdGhlIGJsb2NrLWxldmVsIGluZGVudCxcbiAgICogdGhyb3dzIGF3YXkgdGhlc2UgYXMgd2VsbC5cbiAgICovXG4gIGRlY3JlYXNlQmxvY2tMZXZlbCgpIHtcbiAgICB3aGlsZSAodGhpcy5pbmRlbnRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0eXBlID0gdGhpcy5pbmRlbnRUeXBlcy5wb3AoKTtcbiAgICAgIGlmICh0eXBlICE9PSBJTkRFTlRfVFlQRV9UT1BfTEVWRUwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIENsZWFycyBhbGwgaW5kZW50YXRpb24gKi9cbiAgcmVzZXRJbmRlbnRhdGlvbigpIHtcbiAgICB0aGlzLmluZGVudFR5cGVzID0gW107XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUgfSBmcm9tICcuL3Rva2VuJztcblxuLyoqXG4gKiBCb29ra2VlcGVyIGZvciBpbmxpbmUgYmxvY2tzLlxuICpcbiAqIElubGluZSBibG9ja3MgYXJlIHBhcmVudGhlc2lzZWQgZXhwcmVzc2lvbnMgdGhhdCBhcmUgc2hvcnRlciB0aGFuIElOTElORV9NQVhfTEVOR1RILlxuICogVGhlc2UgYmxvY2tzIGFyZSBmb3JtYXR0ZWQgb24gYSBzaW5nbGUgbGluZSwgdW5saWtlIGxvbmdlciBwYXJlbnRoZXNpc2VkXG4gKiBleHByZXNzaW9ucyB3aGVyZSBvcGVuLXBhcmVudGhlc2lzIGNhdXNlcyBuZXdsaW5lIGFuZCBpbmNyZWFzZSBvZiBpbmRlbnRhdGlvbi5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW5saW5lQmxvY2sge1xuICBsZXZlbDogbnVtYmVyO1xuICBleHByZXNzaW9uV2lkdGg6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihleHByZXNzaW9uV2lkdGg6IG51bWJlcikge1xuICAgIHRoaXMubGV2ZWwgPSAwO1xuICAgIHRoaXMuZXhwcmVzc2lvbldpZHRoID0gZXhwcmVzc2lvbldpZHRoO1xuICB9XG5cbiAgLyoqXG4gICAqIEJlZ2lucyBpbmxpbmUgYmxvY2sgd2hlbiBsb29rYWhlYWQgdGhyb3VnaCB1cGNvbWluZyB0b2tlbnMgZGV0ZXJtaW5lc1xuICAgKiB0aGF0IHRoZSBibG9jayB3b3VsZCBiZSBzbWFsbGVyIHRoYW4gSU5MSU5FX01BWF9MRU5HVEguXG4gICAqIEBwYXJhbSAge1Rva2VuW119IHRva2VucyBBcnJheSBvZiBhbGwgdG9rZW5zXG4gICAqIEBwYXJhbSAge051bWJlcn0gaW5kZXggQ3VycmVudCB0b2tlbiBwb3NpdGlvblxuICAgKi9cbiAgYmVnaW5JZlBvc3NpYmxlKHRva2VuczogVG9rZW5bXSwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmxldmVsID09PSAwICYmIHRoaXMuaXNJbmxpbmVCbG9jayh0b2tlbnMsIGluZGV4KSkge1xuICAgICAgdGhpcy5sZXZlbCA9IDE7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxldmVsID4gMCkge1xuICAgICAgdGhpcy5sZXZlbCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxldmVsID0gMDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluaXNoZXMgY3VycmVudCBpbmxpbmUgYmxvY2suXG4gICAqIFRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgbmVzdGVkIG9uZXMuXG4gICAqL1xuICBlbmQoKSB7XG4gICAgdGhpcy5sZXZlbC0tO1xuICB9XG5cbiAgLyoqXG4gICAqIFRydWUgd2hlbiBpbnNpZGUgYW4gaW5saW5lIGJsb2NrXG4gICAqL1xuICBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5sZXZlbCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyBzaG91bGQgYmUgYW4gaW5saW5lIHBhcmVudGhlc2VzIGJsb2NrXG4gICAqIEV4YW1wbGVzIGFyZSBcIk5PVygpXCIsIFwiQ09VTlQoKilcIiwgXCJpbnQoMTApXCIsIGtleShgc29tZWNvbHVtbmApLCBERUNJTUFMKDcsMilcbiAgICovXG4gIGlzSW5saW5lQmxvY2sodG9rZW5zOiBUb2tlbltdLCBpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgbGV0IGxlbmd0aCA9IDA7XG4gICAgbGV0IGxldmVsID0gMDtcblxuICAgIGZvciAobGV0IGkgPSBpbmRleDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICBsZW5ndGggKz0gdG9rZW4udmFsdWUubGVuZ3RoO1xuXG4gICAgICBpZiAodGhpcy5pc0ZvcmJpZGRlblRva2VuKHRva2VuKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIE92ZXJyYW4gbWF4IGxlbmd0aFxuICAgICAgaWYgKGxlbmd0aCA+IHRoaXMuZXhwcmVzc2lvbldpZHRoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19TVEFSVCkge1xuICAgICAgICBsZXZlbCsrO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSBUb2tlblR5cGUuQkxPQ0tfRU5EKSB7XG4gICAgICAgIGxldmVsLS07XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIFJlc2VydmVkIHdvcmRzIHRoYXQgY2F1c2UgbmV3bGluZXMsIGNvbW1lbnRzIGFuZCBzZW1pY29sb25zXG4gIC8vIGFyZSBub3QgYWxsb3dlZCBpbnNpZGUgaW5saW5lIHBhcmVudGhlc2VzIGJsb2NrXG4gIGlzRm9yYmlkZGVuVG9rZW4oeyB0eXBlLCB2YWx1ZSB9OiBUb2tlbikge1xuICAgIHJldHVybiAoXG4gICAgICB0eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCB8fFxuICAgICAgdHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IgfHxcbiAgICAgIC8vIHR5cGUgPT09IFRva2VuVHlwZS5MSU5FX0NPTU1FTlQgfHxcbiAgICAgIHR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19DT01NRU5UIHx8XG4gICAgICB2YWx1ZSA9PT0gJzsnIHx8XG4gICAgICBpc1Rva2VuLkNBU0UoeyB0eXBlLCB2YWx1ZSB9KSAvLyBDQVNFIGNhbm5vdCBoYXZlIGlubGluZSBibG9ja3NcbiAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRva2VuIH0gZnJvbSAnLi90b2tlbic7XG5cbmV4cG9ydCB0eXBlIFBhcmFtSXRlbXMgPSB7IFtrOiBzdHJpbmddOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBIYW5kbGVzIHBsYWNlaG9sZGVyIHJlcGxhY2VtZW50IHdpdGggZ2l2ZW4gcGFyYW1zLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXJhbXMge1xuICAvKipcbiAgICogQHBhcmFtIHtQYXJhbUl0ZW1zfSBwYXJhbXNcbiAgICovXG4gIHBhcmFtczogUGFyYW1JdGVtcyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuICBpbmRleDogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogUGFyYW1JdGVtcyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy5pbmRleCA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBwYXJhbSB2YWx1ZSB0aGF0IG1hdGNoZXMgZ2l2ZW4gcGxhY2Vob2xkZXIgd2l0aCBwYXJhbSBrZXkuXG4gICAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gcGFyYW0gb3IgdG9rZW4udmFsdWUgd2hlbiBwYXJhbXMgYXJlIG1pc3NpbmdcbiAgICovXG4gIGdldCh7IGtleSwgdmFsdWUgfTogVG9rZW4pOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5wYXJhbXMpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICByZXR1cm4gKHRoaXMucGFyYW1zIGFzIFBhcmFtSXRlbXMpW2tleV07XG4gICAgfVxuICAgIHJldHVybiAodGhpcy5wYXJhbXMgYXMgc3RyaW5nW10pW3RoaXMuaW5kZXgrK107XG4gIH1cbn1cbiIsImltcG9ydCAqIGFzIHJlZ2V4RmFjdG9yeSBmcm9tICcuL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi90b2tlbic7IC8vIGNvbnZlcnQgdG8gcGFydGlhbCB0eXBlIGltcG9ydCBpbiBUUyA0LjVcblxuZXhwb3J0IGNvbnN0IFdISVRFU1BBQ0VfUkVHRVggPSAvXihcXHMrKS91O1xuY29uc3QgTlVMTF9SRUdFWCA9IC8oPyEpLzsgLy8gemVyby13aWR0aCBuZWdhdGl2ZSBsb29rYWhlYWQsIG1hdGNoZXMgbm90aGluZ1xuXG4vKiogU3RydWN0IHRoYXQgZGVmaW5lcyBob3cgYSBTUUwgbGFuZ3VhZ2UgY2FuIGJlIGJyb2tlbiBpbnRvIHRva2VucyAqL1xuaW50ZXJmYWNlIFRva2VuaXplck9wdGlvbnMge1xuICByZXNlcnZlZEtleXdvcmRzOiBzdHJpbmdbXTtcbiAgcmVzZXJ2ZWRDb21tYW5kczogc3RyaW5nW107XG4gIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogc3RyaW5nW107XG4gIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogc3RyaW5nW107XG4gIHJlc2VydmVkQmluYXJ5Q29tbWFuZHM6IHN0cmluZ1tdO1xuICByZXNlcnZlZEpvaW5Db25kaXRpb25zOiBzdHJpbmdbXTtcbiAgc3RyaW5nVHlwZXM6IHJlZ2V4RmFjdG9yeS5TdHJpbmdQYXR0ZXJuVHlwZVtdO1xuICBibG9ja1N0YXJ0OiBzdHJpbmdbXTtcbiAgYmxvY2tFbmQ6IHN0cmluZ1tdO1xuICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlcz86IHN0cmluZ1tdO1xuICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IHN0cmluZ1tdO1xuICBsaW5lQ29tbWVudFR5cGVzOiBzdHJpbmdbXTtcbiAgc3BlY2lhbFdvcmRDaGFycz86IHsgcHJlZml4Pzogc3RyaW5nOyBhbnk/OiBzdHJpbmc7IHN1ZmZpeD86IHN0cmluZyB9O1xuICBvcGVyYXRvcnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIENvbnZlcnRzIFNRTCBsYW5ndWFnZSBzdHJpbmcgaW50byBhIHRva2VuIHN0cmVhbSAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5pemVyIHtcbiAgUkVHRVhfTUFQOiB7IFt0b2tlblR5cGUgaW4gVG9rZW5UeXBlXTogUmVnRXhwIH07XG5cbiAgSU5ERVhFRF9QTEFDRUhPTERFUl9SRUdFWD86IFJlZ0V4cDtcbiAgSURFTlRfTkFNRURfUExBQ0VIT0xERVJfUkVHRVg/OiBSZWdFeHA7XG4gIFNUUklOR19OQU1FRF9QTEFDRUhPTERFUl9SRUdFWD86IFJlZ0V4cDtcblxuICAvKipcbiAgICogQHBhcmFtIHtUb2tlbml6ZXJPcHRpb25zfSBjZmdcbiAgICogIEBwYXJhbSB7c3RyaW5nW119IGNmZy5yZXNlcnZlZEtleXdvcmRzIC0gUmVzZXJ2ZWQgd29yZHMgaW4gU1FMXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzIC0gV29yZHMgdGhhdCBmb2xsb3dpbmcgYSBzcGVjaWZpYyBTdGF0ZW1lbnQgYW5kIG11c3QgaGF2ZSBkYXRhIGF0dGFjaGVkXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzIC0gV29yZHMgdGhhdCBhcmUgc2V0IHRvIG5ld2xpbmVcbiAgICogIEBwYXJhbSB7c3RyaW5nW119IGNmZy5yZXNlcnZlZENvbW1hbmRzIC0gV29yZHMgdGhhdCBhcmUgc2V0IHRvIG5ldyBsaW5lIHNlcGFyYXRlbHlcbiAgICogIEBwYXJhbSB7c3RyaW5nW119IGNmZy5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzIC0gV29yZHMgdGhhdCBhcmUgdG9wIGxldmVsIGJ1dCBoYXZlIG5vIGluZGVudGF0aW9uXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyAtIE9OIGFuZCBVU0lOR1xuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLnN0cmluZ1R5cGVzIC0gc3RyaW5nIHR5cGVzIHRvIGVuYWJsZSAtIFwiXCIsICcnLCBgYCwgW10sIE4nJ1xuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLmJsb2NrU3RhcnQgLSBPcGVuaW5nIHBhcmVudGhlc2VzIHRvIGVuYWJsZSwgbGlrZSAoLCBbXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcuYmxvY2tFbmQgLSBDbG9zaW5nIHBhcmVudGhlc2VzIHRvIGVuYWJsZSwgbGlrZSApLCBdXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgLSBQcmVmaXhlcyBmb3IgaW5kZXhlZCBwbGFjZWhvbGRlcnMsIGxpa2UgP1xuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyAtIFByZWZpeGVzIGZvciBuYW1lZCBwbGFjZWhvbGRlcnMsIGxpa2UgQCBhbmQgOlxuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLmxpbmVDb21tZW50VHlwZXMgLSBMaW5lIGNvbW1lbnRzIHRvIGVuYWJsZSwgbGlrZSAjIGFuZCAtLVxuICAgKiAgQHBhcmFtIHtzdHJpbmdbXX0gY2ZnLnNwZWNpYWxXb3JkQ2hhcnMgLSBTcGVjaWFsIGNoYXJzIHRoYXQgY2FuIGJlIGZvdW5kIGluc2lkZSBvZiB3b3JkcywgbGlrZSBAIGFuZCAjXG4gICAqICBAcGFyYW0ge3N0cmluZ1tdfSBjZmcub3BlcmF0b3JzIC0gQWRkaXRpb25hbCBvcGVyYXRvcnMgdG8gcmVjb2duaXplXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjZmc6IFRva2VuaXplck9wdGlvbnMpIHtcbiAgICBjb25zdCBzcGVjaWFsV29yZENoYXJzQWxsID0gT2JqZWN0LnZhbHVlcyhjZmcuc3BlY2lhbFdvcmRDaGFycyA/PyB7fSkuam9pbignJyk7XG4gICAgdGhpcy5SRUdFWF9NQVAgPSB7XG4gICAgICBbVG9rZW5UeXBlLldPUkRdOiByZWdleEZhY3RvcnkuY3JlYXRlV29yZFJlZ2V4KGNmZy5zcGVjaWFsV29yZENoYXJzKSxcbiAgICAgIFtUb2tlblR5cGUuU1RSSU5HXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVN0cmluZ1JlZ2V4KGNmZy5zdHJpbmdUeXBlcyksXG4gICAgICBbVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkRdOiByZWdleEZhY3RvcnkuY3JlYXRlUmVzZXJ2ZWRXb3JkUmVnZXgoXG4gICAgICAgIGNmZy5yZXNlcnZlZEtleXdvcmRzLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9ERVBFTkRFTlRfQ0xBVVNFXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVJlc2VydmVkV29yZFJlZ2V4KFxuICAgICAgICBjZmcucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID8/IFtdLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVJlc2VydmVkV29yZFJlZ2V4KFxuICAgICAgICBjZmcucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVJlc2VydmVkV29yZFJlZ2V4KFxuICAgICAgICBjZmcucmVzZXJ2ZWRDb21tYW5kcyxcbiAgICAgICAgc3BlY2lhbFdvcmRDaGFyc0FsbFxuICAgICAgKSxcbiAgICAgIFtUb2tlblR5cGUuUkVTRVJWRURfQklOQVJZX0NPTU1BTkRdOiByZWdleEZhY3RvcnkuY3JlYXRlUmVzZXJ2ZWRXb3JkUmVnZXgoXG4gICAgICAgIGNmZy5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzLFxuICAgICAgICBzcGVjaWFsV29yZENoYXJzQWxsXG4gICAgICApLFxuICAgICAgW1Rva2VuVHlwZS5SRVNFUlZFRF9KT0lOX0NPTkRJVElPTl06IHJlZ2V4RmFjdG9yeS5jcmVhdGVSZXNlcnZlZFdvcmRSZWdleChcbiAgICAgICAgY2ZnLnJlc2VydmVkSm9pbkNvbmRpdGlvbnMsXG4gICAgICAgIHNwZWNpYWxXb3JkQ2hhcnNBbGxcbiAgICAgICksXG4gICAgICBbVG9rZW5UeXBlLk9QRVJBVE9SXTogcmVnZXhGYWN0b3J5LmNyZWF0ZU9wZXJhdG9yUmVnZXgoJystLyolJnxePjw9Liw7W117fWA6JCcsIFtcbiAgICAgICAgJzw+JyxcbiAgICAgICAgJzw9JyxcbiAgICAgICAgJz49JyxcbiAgICAgICAgJyE9JyxcbiAgICAgICAgLi4uKGNmZy5vcGVyYXRvcnMgPz8gW10pLFxuICAgICAgXSksXG4gICAgICBbVG9rZW5UeXBlLkJMT0NLX1NUQVJUXTogcmVnZXhGYWN0b3J5LmNyZWF0ZVBhcmVuUmVnZXgoY2ZnLmJsb2NrU3RhcnQpLFxuICAgICAgW1Rva2VuVHlwZS5CTE9DS19FTkRdOiByZWdleEZhY3RvcnkuY3JlYXRlUGFyZW5SZWdleChjZmcuYmxvY2tFbmQpLFxuICAgICAgW1Rva2VuVHlwZS5MSU5FX0NPTU1FTlRdOiByZWdleEZhY3RvcnkuY3JlYXRlTGluZUNvbW1lbnRSZWdleChjZmcubGluZUNvbW1lbnRUeXBlcyksXG4gICAgICBbVG9rZW5UeXBlLkJMT0NLX0NPTU1FTlRdOiAvXihcXC9cXCpbXl0qPyg/OlxcKlxcL3wkKSkvdSxcbiAgICAgIFtUb2tlblR5cGUuTlVNQkVSXTpcbiAgICAgICAgL14oMHhbMC05YS1mQS1GXSt8MGJbMDFdK3woLVxccyopP1swLTldKyhcXC5bMC05XSopPyhbZUVdWy0rXT9bMC05XSsoXFwuWzAtOV0rKT8pPykvdSxcbiAgICAgIFtUb2tlblR5cGUuUExBQ0VIT0xERVJdOiBOVUxMX1JFR0VYLCAvLyBtYXRjaGVzIG5vdGhpbmdcbiAgICAgIFtUb2tlblR5cGUuRU9GXTogTlVMTF9SRUdFWCwgLy8gbWF0Y2hlcyBub3RoaW5nXG4gICAgfTtcblxuICAgIHRoaXMuSU5ERVhFRF9QTEFDRUhPTERFUl9SRUdFWCA9IHJlZ2V4RmFjdG9yeS5jcmVhdGVQbGFjZWhvbGRlclJlZ2V4KFxuICAgICAgY2ZnLmluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID8/IFtdLFxuICAgICAgJ1swLTldKidcbiAgICApO1xuICAgIHRoaXMuSURFTlRfTkFNRURfUExBQ0VIT0xERVJfUkVHRVggPSByZWdleEZhY3RvcnkuY3JlYXRlUGxhY2Vob2xkZXJSZWdleChcbiAgICAgIGNmZy5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICAnW2EtekEtWjAtOS5fJF0rJ1xuICAgICk7XG4gICAgdGhpcy5TVFJJTkdfTkFNRURfUExBQ0VIT0xERVJfUkVHRVggPSByZWdleEZhY3RvcnkuY3JlYXRlUGxhY2Vob2xkZXJSZWdleChcbiAgICAgIGNmZy5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICByZWdleEZhY3RvcnkuY3JlYXRlU3RyaW5nUGF0dGVybihjZmcuc3RyaW5nVHlwZXMpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlcyBhIFNRTCBzdHJpbmcgYW5kIGJyZWFrcyBpdCBpbnRvIHRva2Vucy5cbiAgICogRWFjaCB0b2tlbiBpcyBhbiBvYmplY3Qgd2l0aCB0eXBlIGFuZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIFNRTCBzdHJpbmdcbiAgICogQHJldHVybnMge1Rva2VuW119IG91dHB1dCB0b2tlbiBzdHJlYW1cbiAgICovXG4gIHRva2VuaXplKGlucHV0OiBzdHJpbmcpOiBUb2tlbltdIHtcbiAgICBjb25zdCB0b2tlbnM6IFRva2VuW10gPSBbXTtcbiAgICBsZXQgdG9rZW46IFRva2VuIHwgdW5kZWZpbmVkO1xuXG4gICAgLy8gS2VlcCBwcm9jZXNzaW5nIHRoZSBzdHJpbmcgdW50aWwgaXQgaXMgZW1wdHlcbiAgICB3aGlsZSAoaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyBncmFiIGFueSBwcmVjZWRpbmcgd2hpdGVzcGFjZVxuICAgICAgY29uc3Qgd2hpdGVzcGFjZUJlZm9yZSA9IHRoaXMuZ2V0V2hpdGVzcGFjZShpbnB1dCk7XG4gICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZyh3aGl0ZXNwYWNlQmVmb3JlLmxlbmd0aCk7XG5cbiAgICAgIGlmIChpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBuZXh0IHRva2VuIGFuZCB0aGUgdG9rZW4gdHlwZVxuICAgICAgICB0b2tlbiA9IHRoaXMuZ2V0TmV4dFRva2VuKGlucHV0LCB0b2tlbik7XG4gICAgICAgIC8vIEFkdmFuY2UgdGhlIHN0cmluZ1xuICAgICAgICBpbnB1dCA9IGlucHV0LnN1YnN0cmluZyh0b2tlbi52YWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIHRva2Vucy5wdXNoKHsgLi4udG9rZW4sIHdoaXRlc3BhY2VCZWZvcmUgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0b2tlbnM7XG4gIH1cblxuICAvKiogTWF0Y2hlcyBwcmVjZWRpbmcgd2hpdGVzcGFjZSBpZiBwcmVzZW50ICovXG4gIGdldFdoaXRlc3BhY2UoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoKFdISVRFU1BBQ0VfUkVHRVgpO1xuICAgIHJldHVybiBtYXRjaGVzID8gbWF0Y2hlc1sxXSA6ICcnO1xuICB9XG5cbiAgLyoqIEN1cnJpZWQgZnVuY3Rpb24gb2YgYGdldFRva2VuT25GaXJzdE1hdGNoYCB0aGF0IGFsbG93cyB0b2tlbiB0eXBlIHRvIGJlIHBhc3NlZCBmaXJzdCAqL1xuICBtYXRjaFRva2VuID1cbiAgICAodG9rZW5UeXBlOiBUb2tlblR5cGUpID0+XG4gICAgKGlucHV0OiBzdHJpbmcpOiBUb2tlbiB8IHVuZGVmaW5lZCA9PlxuICAgICAgdGhpcy5nZXRUb2tlbk9uRmlyc3RNYXRjaCh7XG4gICAgICAgIGlucHV0LFxuICAgICAgICB0eXBlOiB0b2tlblR5cGUsXG4gICAgICAgIHJlZ2V4OiB0aGlzLlJFR0VYX01BUFt0b2tlblR5cGVdLFxuICAgICAgfSk7XG5cbiAgLyoqIEF0dGVtcHRzIHRvIG1hdGNoIG5leHQgdG9rZW4gZnJvbSBpbnB1dCBzdHJpbmcsIHRlc3RzIFJlZ0V4cCBwYXR0ZXJucyBpbiBkZWNyZWFzaW5nIHByaW9yaXR5ICovXG4gIGdldE5leHRUb2tlbihpbnB1dDogc3RyaW5nLCBwcmV2aW91c1Rva2VuPzogVG9rZW4pIHtcbiAgICByZXR1cm4gKHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuTElORV9DT01NRU5UKShpbnB1dCkgfHxcbiAgICAgIHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuQkxPQ0tfQ09NTUVOVCkoaW5wdXQpIHx8XG4gICAgICB0aGlzLm1hdGNoVG9rZW4oVG9rZW5UeXBlLlNUUklORykoaW5wdXQpIHx8XG4gICAgICB0aGlzLm1hdGNoVG9rZW4oVG9rZW5UeXBlLkJMT0NLX1NUQVJUKShpbnB1dCkgfHxcbiAgICAgIHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuQkxPQ0tfRU5EKShpbnB1dCkgfHxcbiAgICAgIHRoaXMuZ2V0UGxhY2Vob2xkZXJUb2tlbihpbnB1dCkgfHxcbiAgICAgIHRoaXMubWF0Y2hUb2tlbihUb2tlblR5cGUuTlVNQkVSKShpbnB1dCkgfHxcbiAgICAgIHRoaXMuZ2V0UmVzZXJ2ZWRXb3JkVG9rZW4oaW5wdXQsIHByZXZpb3VzVG9rZW4pIHx8XG4gICAgICB0aGlzLm1hdGNoVG9rZW4oVG9rZW5UeXBlLldPUkQpKGlucHV0KSB8fFxuICAgICAgdGhpcy5tYXRjaFRva2VuKFRva2VuVHlwZS5PUEVSQVRPUikoaW5wdXQpKSBhcyBUb2tlbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdHRlbXB0cyB0byBtYXRjaCBhIHBsYWNlaG9sZGVyIHRva2VuIHBhdHRlcm5cbiAgICogQHJldHVybiB7VG9rZW4gfCB1bmRlZmluZWR9IC0gVGhlIHBsYWNlaG9sZGVyIHRva2VuIGlmIGZvdW5kLCBvdGhlcndpc2UgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRQbGFjZWhvbGRlclRva2VuKGlucHV0OiBzdHJpbmcpOiBUb2tlbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJUb2tlblJlZ2V4TWFwOiB7IHJlZ2V4OiBSZWdFeHA7IHBhcnNlS2V5OiAoczogc3RyaW5nKSA9PiBzdHJpbmcgfVtdID0gW1xuICAgICAgLy8gcGF0dGVybiBmb3IgcGxhY2Vob2xkZXIgd2l0aCBpZGVudGlmaWVyIG5hbWVcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IHRoaXMuSURFTlRfTkFNRURfUExBQ0VIT0xERVJfUkVHRVggPz8gTlVMTF9SRUdFWCxcbiAgICAgICAgcGFyc2VLZXk6IHYgPT4gdi5zbGljZSgxKSxcbiAgICAgIH0sXG4gICAgICAvLyBwYXR0ZXJuIGZvciBwbGFjZWhvbGRlciB3aXRoIHN0cmluZyBuYW1lXG4gICAgICB7XG4gICAgICAgIHJlZ2V4OiB0aGlzLlNUUklOR19OQU1FRF9QTEFDRUhPTERFUl9SRUdFWCA/PyBOVUxMX1JFR0VYLFxuICAgICAgICBwYXJzZUtleTogdiA9PlxuICAgICAgICAgIHRoaXMuZ2V0RXNjYXBlZFBsYWNlaG9sZGVyS2V5KHsga2V5OiB2LnNsaWNlKDIsIC0xKSwgcXVvdGVDaGFyOiB2LnNsaWNlKC0xKSB9KSxcbiAgICAgIH0sXG4gICAgICAvLyBwYXR0ZXJuIGZvciBwbGFjZWhvbGRlciB3aXRoIG51bWVyaWMgaW5kZXhcbiAgICAgIHtcbiAgICAgICAgcmVnZXg6IHRoaXMuSU5ERVhFRF9QTEFDRUhPTERFUl9SRUdFWCA/PyBOVUxMX1JFR0VYLFxuICAgICAgICBwYXJzZUtleTogdiA9PiB2LnNsaWNlKDEpLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHBsYWNlaG9sZGVyVG9rZW5SZWdleE1hcC5yZWR1Y2UoKGFjYywgeyByZWdleCwgcGFyc2VLZXkgfSkgPT4ge1xuICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuT25GaXJzdE1hdGNoKHsgaW5wdXQsIHJlZ2V4LCB0eXBlOiBUb2tlblR5cGUuUExBQ0VIT0xERVIgfSk7XG4gICAgICByZXR1cm4gdG9rZW4gPyB7IC4uLnRva2VuLCBrZXk6IHBhcnNlS2V5KHRva2VuLnZhbHVlKSB9IDogYWNjO1xuICAgIH0sIHVuZGVmaW5lZCBhcyBUb2tlbiB8IHVuZGVmaW5lZCk7XG4gIH1cblxuICBnZXRFc2NhcGVkUGxhY2Vob2xkZXJLZXkoeyBrZXksIHF1b3RlQ2hhciB9OiB7IGtleTogc3RyaW5nOyBxdW90ZUNoYXI6IHN0cmluZyB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UobmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoJ1xcXFwnICsgcXVvdGVDaGFyKSwgJ2d1JyksIHF1b3RlQ2hhcik7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gbWF0Y2ggYSBSZXNlcnZlZCB3b3JkIHRva2VuIHBhdHRlcm4sIGF2b2lkaW5nIGVkZ2UgY2FzZXMgb2YgUmVzZXJ2ZWQgd29yZHMgd2l0aGluIHN0cmluZyB0b2tlbnNcbiAgICogQHJldHVybiB7VG9rZW4gfCB1bmRlZmluZWR9IC0gVGhlIFJlc2VydmVkIHdvcmQgdG9rZW4gaWYgZm91bmQsIG90aGVyd2lzZSB1bmRlZmluZWRcbiAgICovXG4gIGdldFJlc2VydmVkV29yZFRva2VuKGlucHV0OiBzdHJpbmcsIHByZXZpb3VzVG9rZW4/OiBUb2tlbik6IFRva2VuIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBBIHJlc2VydmVkIHdvcmQgY2Fubm90IGJlIHByZWNlZGVkIGJ5IGEgJy4nXG4gICAgLy8gdGhpcyBtYWtlcyBpdCBzbyBpbiBcIm15dGFibGUuZnJvbVwiLCBcImZyb21cIiBpcyBub3QgY29uc2lkZXJlZCBhIHJlc2VydmVkIHdvcmRcbiAgICBpZiAocHJldmlvdXNUb2tlbj8udmFsdWUgPT09ICcuJykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBwcmlvcml0aXNlZCBsaXN0IG9mIFJlc2VydmVkIHRva2VuIHR5cGVzXG4gICAgY29uc3QgcmVzZXJ2ZWRUb2tlbkxpc3QgPSBbXG4gICAgICBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCxcbiAgICAgIFRva2VuVHlwZS5SRVNFUlZFRF9CSU5BUllfQ09NTUFORCxcbiAgICAgIFRva2VuVHlwZS5SRVNFUlZFRF9ERVBFTkRFTlRfQ0xBVVNFLFxuICAgICAgVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IsXG4gICAgICBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCxcbiAgICAgIFRva2VuVHlwZS5SRVNFUlZFRF9KT0lOX0NPTkRJVElPTixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHJlc2VydmVkVG9rZW5MaXN0LnJlZHVjZShcbiAgICAgIChtYXRjaGVkVG9rZW4sIHRva2VuVHlwZSkgPT4gbWF0Y2hlZFRva2VuIHx8IHRoaXMubWF0Y2hUb2tlbih0b2tlblR5cGUpKGlucHV0KSxcbiAgICAgIHVuZGVmaW5lZCBhcyBUb2tlbiB8IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gbWF0Y2ggUmVnRXhwIGZyb20gaGVhZCBvZiBpbnB1dCwgcmV0dXJuaW5nIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IF8uaW5wdXQgLSBUaGUgc3RyaW5nIHRvIG1hdGNoXG4gICAqIEBwYXJhbSB7VG9rZW5UeXBlfSBfLnR5cGUgLSBUaGUgdHlwZSBvZiB0b2tlbiB0byBtYXRjaCBhZ2FpbnN0XG4gICAqIEBwYXJhbSB7UmVnRXhwfSBfLnJlZ2V4IC0gVGhlIHJlZ2V4IHRvIG1hdGNoXG4gICAqIEByZXR1cm4ge1Rva2VuIHwgdW5kZWZpbmVkfSAtIFRoZSBtYXRjaGVkIHRva2VuIGlmIGZvdW5kLCBvdGhlcndpc2UgdW5kZWZpbmVkXG4gICAqL1xuICBnZXRUb2tlbk9uRmlyc3RNYXRjaCh7XG4gICAgaW5wdXQsXG4gICAgdHlwZSxcbiAgICByZWdleCxcbiAgfToge1xuICAgIGlucHV0OiBzdHJpbmc7XG4gICAgdHlwZTogVG9rZW5UeXBlO1xuICAgIHJlZ2V4OiBSZWdFeHA7XG4gIH0pOiBUb2tlbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoKHJlZ2V4KTtcbiAgICByZXR1cm4gbWF0Y2hlcyA/ICh7IHR5cGUsIHZhbHVlOiBtYXRjaGVzWzFdIH0gYXMgVG9rZW4pIDogdW5kZWZpbmVkO1xuICB9XG59XG4iLCJpbXBvcnQgeyBtYXhMZW5ndGggfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogSGFuZGxlcyBzZWxlY3QgYWxpYXMgcGxhY2VtZW50IC0gdGFidWxhdGVzIGlmIGVuYWJsZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0QWxpYXNQb3NpdGlvbnMocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxpbmVzID0gcXVlcnkuc3BsaXQoJ1xcbicpO1xuXG4gIGxldCBuZXdRdWVyeTogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykge1xuICAgIC8vIGZpbmQgU0VMRUNUIHJvd3Mgd2l0aCB0cmFpbGluZyBjb21tYSwgaWYgbm8gY29tbWEgKG9ubHkgb25lIHJvdykgLSBuby1vcFxuICAgIGlmIChsaW5lc1tpXS5tYXRjaCgvXlxccypTRUxFQ1QvaSkpIHtcbiAgICAgIGxldCBhbGlhc0xpbmVzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgaWYgKGxpbmVzW2ldLm1hdGNoKC8uKiwkLykpIHtcbiAgICAgICAgYWxpYXNMaW5lcyA9IFtsaW5lc1tpXV07IC8vIGFkZCBzZWxlY3QgdG8gYWxpYXNMaW5lcyBpbiBjYXNlIG9mIHRhYnVsYXIgZm9ybWF0c1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UXVlcnkucHVzaChsaW5lc1tpXSk7IC8vIGFkZCBzZWxlY3QgdG8gbmV3IHF1ZXJ5XG4gICAgICAgIGlmIChsaW5lc1tpXS5tYXRjaCgvXlxccypTRUxFQ1RcXHMrLisoPyEsJCkvaSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBhbGlhc0xpbmVzLnB1c2gobGluZXNbKytpXSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGdldCBhbGwgbGluZXMgaW4gU0VMRUNUIGNsYXVzZVxuICAgICAgd2hpbGUgKGxpbmVzW2krK10ubWF0Y2goLy4qLCQvKSkge1xuICAgICAgICBhbGlhc0xpbmVzLnB1c2gobGluZXNbaV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBicmVhayBsaW5lcyBpbnRvIGFsaWFzIHdpdGggb3B0aW9uYWwgQVMsIGFuZCBhbGwgcHJlY2VkaW5nIHRleHRcbiAgICAgIGNvbnN0IHNwbGl0TGluZXMgPSBhbGlhc0xpbmVzXG4gICAgICAgIC5tYXAobGluZSA9PiAoeyBsaW5lLCBtYXRjaGVzOiBsaW5lLm1hdGNoKC8oXi4qP1xcUykgKEFTICk/KFxcUyssPyQpL2kpIH0pKVxuICAgICAgICAubWFwKCh7IGxpbmUsIG1hdGNoZXMgfSkgPT4ge1xuICAgICAgICAgIGlmICghbWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHsgcHJlY2VkaW5nVGV4dDogbGluZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlY2VkaW5nVGV4dDogbWF0Y2hlc1sxXSxcbiAgICAgICAgICAgIGFzOiBtYXRjaGVzWzJdLFxuICAgICAgICAgICAgYWxpYXM6IG1hdGNoZXNbM10sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgIC8vIGdldCBsb25nZXN0IG9mIHByZWNlZGluZ1RleHQsIHRyaW0gdHJhaWxpbmcgY29tbWEgZm9yIG5vbi1hbGlhcyBjb2x1bW5zXG4gICAgICBjb25zdCBhbGlhc01heExlbmd0aCA9IG1heExlbmd0aChcbiAgICAgICAgc3BsaXRMaW5lcy5tYXAoKHsgcHJlY2VkaW5nVGV4dCB9KSA9PiBwcmVjZWRpbmdUZXh0LnJlcGxhY2UoL1xccyosXFxzKiQvLCAnJykpXG4gICAgICApO1xuICAgICAgLy8gcmUtY29uc3RydWN0IGxpbmUsIGFsaWduaW5nIGJ5IGluc2VydGluZyBzcGFjZSBiZWZvcmUgQVMgb3IgYWxpYXNcbiAgICAgIGFsaWFzTGluZXMgPSBzcGxpdExpbmVzLm1hcChcbiAgICAgICAgKHsgcHJlY2VkaW5nVGV4dCwgYXMsIGFsaWFzIH0pID0+XG4gICAgICAgICAgcHJlY2VkaW5nVGV4dCArXG4gICAgICAgICAgKGFsaWFzID8gJyAnLnJlcGVhdChhbGlhc01heExlbmd0aCAtIHByZWNlZGluZ1RleHQubGVuZ3RoICsgMSkgKyAoYXMgPz8gJycpICsgYWxpYXMgOiAnJylcbiAgICAgICk7XG4gICAgICBuZXdRdWVyeSA9IFsuLi5uZXdRdWVyeSwgLi4uYWxpYXNMaW5lc107XG4gICAgfVxuICAgIG5ld1F1ZXJ5LnB1c2gobGluZXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIG5ld1F1ZXJ5LmpvaW4oJ1xcbicpO1xufVxuIiwiaW1wb3J0IHsgQ29tbWFQb3NpdGlvbiB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IG1heExlbmd0aCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IFdISVRFU1BBQ0VfUkVHRVggfSBmcm9tICcuL1Rva2VuaXplcic7XG5cbi8qKlxuICogSGFuZGxlcyBjb21tYSBwbGFjZW1lbnQgLSBlaXRoZXIgYmVmb3JlLCBhZnRlciBvciB0YWJ1bGF0ZWRcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0Q29tbWFQb3NpdGlvbnMoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIGNvbW1hUG9zaXRpb246IENvbW1hUG9zaXRpb24sXG4gIGluZGVudDogc3RyaW5nXG4pOiBzdHJpbmcge1xuICByZXR1cm4gZ3JvdXBDb21tYURlbGltaXRlZExpbmVzKHF1ZXJ5LnNwbGl0KCdcXG4nKSlcbiAgICAuZmxhdE1hcChjb21tYUxpbmVzID0+IHtcbiAgICAgIGlmIChjb21tYUxpbmVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gY29tbWFMaW5lcztcbiAgICAgIH0gZWxzZSBpZiAoY29tbWFQb3NpdGlvbiA9PT0gJ3RhYnVsYXInKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRUYWJ1bGFyKGNvbW1hTGluZXMpO1xuICAgICAgfSBlbHNlIGlmIChjb21tYVBvc2l0aW9uID09PSAnYmVmb3JlJykge1xuICAgICAgICByZXR1cm4gZm9ybWF0QmVmb3JlKGNvbW1hTGluZXMsIGluZGVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgY29tbWFQb3NpdGlvbjogJHtjb21tYVBvc2l0aW9ufWApO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmpvaW4oJ1xcbicpO1xufVxuXG4vKipcbiAqIEdpdmVuIGxpbmVzIGxpa2UgdGhpczpcbiAqXG4gKiAgICAgW1xuICogICAgICAgJ1NFTEVDVCcsXG4gKiAgICAgICAnICBmb28sJyxcbiAqICAgICAgICcgIGJhciwnLFxuICogICAgICAgJyAgYmF6JyxcbiAqICAgICAgICdGUk9NJ1xuICogICAgIF1cbiAqXG4gKiBSZXR1cm5zIGdyb3VwcyBsaWtlIHRoaXM6XG4gKlxuICogICAgIFtcbiAqICAgICAgIFsnU0VMRUNUJ10sXG4gKiAgICAgICBbJyAgZm9vLCcsICcgIGJhciwnLCAnICBiYXonXSxcbiAqICAgICAgIFsnRlJPTSddXG4gKiAgICAgXVxuICovXG5mdW5jdGlvbiBncm91cENvbW1hRGVsaW1pdGVkTGluZXMobGluZXM6IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGdyb3Vwczogc3RyaW5nW11bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZ3JvdXAgPSBbbGluZXNbaV1dO1xuICAgIC8vIHdoZW4gbGluZSBlbmRzIHdpdGggY29tbWEsXG4gICAgLy8gZ2F0aGVyIHRvZ2V0aGVyIGFsbCBmb2xsb3dpbmcgbGluZXMgdGhhdCBhbHNvIGVuZCB3aXRoIGNvbW1hLFxuICAgIC8vIHBsdXMgb25lICh3aGljaCBkb2Vzbid0IGVuZCB3aXRoIGNvbW1hKVxuICAgIHdoaWxlIChsaW5lc1tpXS5tYXRjaCgvLiosJC8pKSB7XG4gICAgICBpKys7XG4gICAgICBncm91cC5wdXNoKGxpbmVzW2ldKTtcbiAgICB9XG4gICAgZ3JvdXBzLnB1c2goZ3JvdXApO1xuICB9XG4gIHJldHVybiBncm91cHM7XG59XG5cbi8vIG1ha2VzIGFsbCBsaW5lcyB0aGUgc2FtZSBsZW5ndGggYnkgYXBwZW5kaW5nIHNwYWNlcyBiZWZvcmUgY29tbWFcbmZ1bmN0aW9uIGZvcm1hdFRhYnVsYXIoY29tbWFMaW5lczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG1heExpbmVMZW5ndGggPSBtYXhMZW5ndGgoY29tbWFMaW5lcyk7XG4gIHJldHVybiB0cmltVHJhaWxpbmdDb21tYXMoY29tbWFMaW5lcykubWFwKChsaW5lLCBpKSA9PiB7XG4gICAgaWYgKGkgPT09IGNvbW1hTGluZXMubGVuZ3RoIC0gMSkge1xuICAgICAgcmV0dXJuIGxpbmU7IC8vIGRvIG5vdCBhZGQgY29tbWEgZm9yIGxhc3QgaXRlbVxuICAgIH1cbiAgICByZXR1cm4gbGluZSArICcgJy5yZXBlYXQobWF4TGluZUxlbmd0aCAtIGxpbmUubGVuZ3RoIC0gMSkgKyAnLCc7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRCZWZvcmUoY29tbWFMaW5lczogc3RyaW5nW10sIGluZGVudDogc3RyaW5nKTogc3RyaW5nW10ge1xuICByZXR1cm4gdHJpbVRyYWlsaW5nQ29tbWFzKGNvbW1hTGluZXMpLm1hcCgobGluZSwgaSkgPT4ge1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICByZXR1cm4gbGluZTsgLy8gZG8gbm90IGFkZCBjb21tYSBmb3IgZmlyc3QgaXRlbVxuICAgIH1cbiAgICBjb25zdCBbd2hpdGVzcGFjZV0gPSBsaW5lLm1hdGNoKFdISVRFU1BBQ0VfUkVHRVgpIHx8IFsnJ107XG4gICAgcmV0dXJuIChcbiAgICAgIHJlbW92ZUxhc3RJbmRlbnQod2hpdGVzcGFjZSwgaW5kZW50KSArXG4gICAgICBpbmRlbnQucmVwbGFjZSgvIHsyfSQvLCAnLCAnKSArIC8vIGFkZCBjb21tYSB0byB0aGUgZW5kIG9mIGxhc3QgaW5kZW50XG4gICAgICBsaW5lLnRyaW1TdGFydCgpXG4gICAgKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUxhc3RJbmRlbnQod2hpdGVzcGFjZTogc3RyaW5nLCBpbmRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB3aGl0ZXNwYWNlLnJlcGxhY2UobmV3IFJlZ0V4cChpbmRlbnQgKyAnJCcpLCAnJyk7XG59XG5cbmZ1bmN0aW9uIHRyaW1UcmFpbGluZ0NvbW1hcyhsaW5lczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIHJldHVybiBsaW5lcy5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoLywkLywgJycpKTtcbn1cbiIsImltcG9ydCB7IGVzY2FwZVJlZ0V4cCwgaXNFbXB0eSwgc29ydEJ5TGVuZ3RoRGVzYyB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBCdWlsZHMgYSBSZWdFeHAgY29udGFpbmluZyBhbGwgb3BlcmF0b3JzIGZvciBhIFNRTCBkaWFsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbW9uYWRPcGVyYXRvcnMgLSBjb25jYXRlbmF0ZWQgc3RyaW5nIG9mIGFsbCAxLWxlbmd0aCBvcGVyYXRvcnNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBvbHlhZE9wZXJhdG9ycyAtIGxpc3Qgb2Ygc3RyaW5ncyBvZiBhbGwgPjEtbGVuZ3RoIG9wZXJhdG9yc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlT3BlcmF0b3JSZWdleCA9IChtb25hZE9wZXJhdG9yczogc3RyaW5nLCBwb2x5YWRPcGVyYXRvcnM6IHN0cmluZ1tdKTogUmVnRXhwID0+XG4gIG5ldyBSZWdFeHAoXG4gICAgYF4oJHtzb3J0QnlMZW5ndGhEZXNjKHBvbHlhZE9wZXJhdG9ycykubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignfCcpfXxgICtcbiAgICAgIGBbJHttb25hZE9wZXJhdG9ycy5zcGxpdCgnJykubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignJyl9XSlgLFxuICAgICd1J1xuICApO1xuXG4vKipcbiAqIEJ1aWxkcyBhIFJlZ0V4cCBmb3IgdmFsaWQgbGluZSBjb21tZW50cyBpbiBhIFNRTCBkaWFsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBsaW5lQ29tbWVudFR5cGVzIC0gbGlzdCBvZiBjaGFyYWN0ZXIgc3RyaW5ncyB0aGF0IGRlbm90ZSBsaW5lIGNvbW1lbnRzXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVMaW5lQ29tbWVudFJlZ2V4ID0gKGxpbmVDb21tZW50VHlwZXM6IHN0cmluZ1tdKTogUmVnRXhwID0+XG4gIG5ldyBSZWdFeHAoXG4gICAgYF4oKD86JHtsaW5lQ29tbWVudFR5cGVzLm1hcChjID0+IGVzY2FwZVJlZ0V4cChjKSkuam9pbignfCcpfSkuKj8pKD86XFxyXFxufFxccnxcXG58JClgLFxuICAgICd1J1xuICApO1xuXG4vKipcbiAqIEJ1aWxkcyBhIFJlZ0V4cCBmb3IgYWxsIFJlc2VydmVkIEtleXdvcmRzIGluIGEgU1FMIGRpYWxlY3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJlc2VydmVkS2V5d29yZHMgLSBsaXN0IG9mIHN0cmluZ3Mgb2YgYWxsIFJlc2VydmVkIEtleXdvcmRzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY2lhbFdvcmRDaGFycyAtIGNvbmNhdGVuYXRlZCBzdHJpbmcgb2YgYWxsIHNwZWNpYWwgY2hhcnMgdGhhdCBjYW4gYXBwZWFyIGluIHZhbGlkIGlkZW50aWZpZXJzIChhbmQgbm90IGluIFJlc2VydmVkIEtleXdvcmRzKVxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzZXJ2ZWRXb3JkUmVnZXggPSAoXG4gIHJlc2VydmVkS2V5d29yZHM6IHN0cmluZ1tdLFxuICBzcGVjaWFsV29yZENoYXJzOiBzdHJpbmcgPSAnJ1xuKTogUmVnRXhwID0+IHtcbiAgaWYgKHJlc2VydmVkS2V5d29yZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIC9eXFxiJC91O1xuICB9XG4gIGNvbnN0IHJlc2VydmVkS2V5d29yZHNQYXR0ZXJuID0gc29ydEJ5TGVuZ3RoRGVzYyhyZXNlcnZlZEtleXdvcmRzKVxuICAgIC5qb2luKCd8JylcbiAgICAucmVwbGFjZSgvIC9ndSwgJ1xcXFxzKycpO1xuICByZXR1cm4gbmV3IFJlZ0V4cChcbiAgICBgXigke3Jlc2VydmVkS2V5d29yZHNQYXR0ZXJufSkoPyFbJHtlc2NhcGVSZWdFeHAoc3BlY2lhbFdvcmRDaGFycyl9XSspXFxcXGJgLFxuICAgICdpdSdcbiAgKTtcbn07XG5cbi8qKlxuICogQnVpbGRzIGEgUmVnRXhwIGZvciB2YWxpZCBpZGVudGlmaWVycyBpbiBhIFNRTCBkaWFsZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc3BlY2lhbENoYXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gc3BlY2lhbENoYXJzLmFueSAtIGNvbmNhdGVuYXRlZCBzdHJpbmcgb2YgY2hhcnMgdGhhdCBjYW4gYXBwZWFyIGFueXdoZXJlIGluIGEgdmFsaWQgaWRlbnRpZmllclxuICogQHBhcmFtIHtzdHJpbmd9IHNwZWNpYWxDaGFycy5wcmVmaXggLSBjb25jYXRlbmF0ZWQgc3RyaW5nIG9mIGNoYXJzIHRoYXQgb25seSBhcHBlYXIgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHZhbGlkIGlkZW50aWZpZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBzcGVjaWFsQ2hhcnMuc3VmZml4IC0gY29uY2F0ZW5hdGVkIHN0cmluZyBvZiBjaGFycyB0aGF0IG9ubHkgYXBwZWFyIGF0IHRoZSBlbmQgb2YgYSB2YWxpZCBpZGVudGlmaWVyXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVXb3JkUmVnZXggPSAoXG4gIHNwZWNpYWxDaGFyczogeyBhbnk/OiBzdHJpbmc7IHByZWZpeD86IHN0cmluZzsgc3VmZml4Pzogc3RyaW5nIH0gPSB7fVxuKTogUmVnRXhwID0+IHtcbiAgY29uc3QgcHJlZml4TG9va0JlaGluZCA9IGBbJHtlc2NhcGVSZWdFeHAoc3BlY2lhbENoYXJzLnByZWZpeCA/PyAnJyl9XSpgO1xuICBjb25zdCBzdWZmaXhMb29rQWhlYWQgPSBgWyR7ZXNjYXBlUmVnRXhwKHNwZWNpYWxDaGFycy5zdWZmaXggPz8gJycpfV0qYDtcbiAgY29uc3QgdW5pY29kZVdvcmRDaGFyID1cbiAgICAnXFxcXHB7QWxwaGFiZXRpY31cXFxccHtNYXJrfVxcXFxwe0RlY2ltYWxfTnVtYmVyfVxcXFxwe0Nvbm5lY3Rvcl9QdW5jdHVhdGlvbn1cXFxccHtKb2luX0NvbnRyb2x9JztcbiAgY29uc3Qgc3BlY2lhbFdvcmRDaGFycyA9IGAke2VzY2FwZVJlZ0V4cChzcGVjaWFsQ2hhcnMuYW55ID8/ICcnKX1gO1xuXG4gIGNvbnN0IGFycmF5QWNjZXNzb3IgPSAnXFxcXFtcXFxcZFxcXFxdJztcbiAgY29uc3QgbWFwQWNjZXNzb3IgPSBgXFxcXFtbJ1wiXVske3VuaWNvZGVXb3JkQ2hhcn1dK1snXCJdXFxcXF1gO1xuXG4gIHJldHVybiBuZXcgUmVnRXhwKFxuICAgIGBeKCgke3ByZWZpeExvb2tCZWhpbmR9KFske3VuaWNvZGVXb3JkQ2hhcn0ke3NwZWNpYWxXb3JkQ2hhcnN9XSspJHtzdWZmaXhMb29rQWhlYWR9KSgke2FycmF5QWNjZXNzb3J9fCR7bWFwQWNjZXNzb3J9KT8pYCxcbiAgICAndSdcbiAgKTtcbn07XG5cbi8vIFRoaXMgZW5hYmxlcyB0aGUgZm9sbG93aW5nIHN0cmluZyBwYXR0ZXJuczpcbi8vIDEuIGJhY2t0aWNrIHF1b3RlZCBzdHJpbmcgdXNpbmcgYGAgdG8gZXNjYXBlXG4vLyAyLiBzcXVhcmUgYnJhY2tldCBxdW90ZWQgc3RyaW5nIChTUUwgU2VydmVyKSB1c2luZyBdXSB0byBlc2NhcGVcbi8vIDMuIGRvdWJsZSBxdW90ZWQgc3RyaW5nIHVzaW5nIFwiXCIgb3IgXFxcIiB0byBlc2NhcGVcbi8vIDQuIHNpbmdsZSBxdW90ZWQgc3RyaW5nIHVzaW5nICcnIG9yIFxcJyB0byBlc2NhcGVcbi8vIDUuIG5hdGlvbmFsIGNoYXJhY3RlciBxdW90ZWQgc3RyaW5nIHVzaW5nIE4nJyBvciBOXFwnIHRvIGVzY2FwZVxuLy8gNi4gVW5pY29kZSBzaW5nbGUtcXVvdGVkIHN0cmluZyB1c2luZyBcXCcgdG8gZXNjYXBlXG4vLyA3LiBVbmljb2RlIGRvdWJsZS1xdW90ZWQgc3RyaW5nIHVzaW5nIFxcXCIgdG8gZXNjYXBlXG4vLyA4LiBQb3N0Z3JlU1FMIGRvbGxhci1xdW90ZWQgc3RyaW5nc1xuY29uc3QgcGF0dGVybnMgPSB7XG4gICdgYCc6ICcoKGBbXmBdKigkfGApKSspJyxcbiAgJ3t9JzogJygoXFxcXHtbXlxcXFx9XSooJHxcXFxcfSkpKyknLFxuICAnW10nOiAnKChcXFxcW1teXFxcXF1dKigkfFxcXFxdKSkoXFxcXF1bXlxcXFxdXSooJHxcXFxcXSkpKiknLFxuICAnXCJcIic6ICcoKFwiW15cIlxcXFxcXFxcXSooPzpcXFxcXFxcXC5bXlwiXFxcXFxcXFxdKikqKFwifCQpKSspJyxcbiAgXCInJ1wiOiBcIigoJ1teJ1xcXFxcXFxcXSooPzpcXFxcXFxcXC5bXidcXFxcXFxcXF0qKSooJ3wkKSkrKVwiLFxuICBcIk4nJ1wiOiBcIigoTidbXidcXFxcXFxcXF0qKD86XFxcXFxcXFwuW14nXFxcXFxcXFxdKikqKCd8JCkpKylcIixcbiAgXCJ4JydcIjogXCIoKFt4WF0nW14nXFxcXFxcXFxdKig/OlxcXFxcXFxcLlteJ1xcXFxcXFxcXSopKignfCQpKSspXCIsXG4gIFwiRScnXCI6IFwiKChFJ1teJ1xcXFxcXFxcXSooPzpcXFxcXFxcXC5bXidcXFxcXFxcXF0qKSooJ3wkKSkrKVwiLFxuICBcIlUmJydcIjogXCIoKFUmJ1teJ1xcXFxcXFxcXSooPzpcXFxcXFxcXC5bXidcXFxcXFxcXF0qKSooJ3wkKSkrKVwiLFxuICAnVSZcIlwiJzogJygoVSZcIlteXCJcXFxcXFxcXF0qKD86XFxcXFxcXFwuW15cIlxcXFxcXFxcXSopKihcInwkKSkrKScsXG4gICckJCc6ICcoKD88dGFnPlxcXFwkXFxcXHcqXFxcXCQpW1xcXFxzXFxcXFNdKj8oPzpcXFxcazx0YWc+fCQpKScsXG59O1xuZXhwb3J0IHR5cGUgU3RyaW5nUGF0dGVyblR5cGUgPSBrZXlvZiB0eXBlb2YgcGF0dGVybnM7XG5cbi8qKlxuICogQnVpbGRzIGEgc3RyaW5nIHBhdHRlcm4gZm9yIG1hdGNoaW5nIHN0cmluZyBwYXR0ZXJucyBmb3IgYWxsIGdpdmVuIHN0cmluZyB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmdQYXR0ZXJuVHlwZVtdfSBzdHJpbmdUeXBlcyAtIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGRlbm90ZSBzdHJpbmcgcGF0dGVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVN0cmluZ1BhdHRlcm4gPSAoc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10pOiBzdHJpbmcgPT5cbiAgc3RyaW5nVHlwZXMubWFwKHQgPT4gcGF0dGVybnNbdF0pLmpvaW4oJ3wnKTtcblxuLyoqXG4gKiBCdWlsZHMgYSBSZWdFeHAgZm9yIG1hdGNoaW5nIHN0cmluZyBwYXR0ZXJucyB1c2luZyBgY3JlYXRlU3RyaW5nUGF0dGVybmBcbiAqIEBwYXJhbSB7U3RyaW5nUGF0dGVyblR5cGVbXX0gc3RyaW5nVHlwZXMgLSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBkZW5vdGUgc3RyaW5nIHBhdHRlcm5zXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVTdHJpbmdSZWdleCA9IChzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSk6IFJlZ0V4cCA9PlxuICBuZXcgUmVnRXhwKCdeKCcgKyBjcmVhdGVTdHJpbmdQYXR0ZXJuKHN0cmluZ1R5cGVzKSArICcpJywgJ3UnKTtcblxuLyoqIEVzY2FwZXMgcGFyZW4gY2hhcmFjdGVycyBmb3IgUmVnRXhwIHBhdHRlcm5zICovXG5jb25zdCBlc2NhcGVQYXJlbiA9IChwYXJlbjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgaWYgKHBhcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIEEgc2luZ2xlIHB1bmN0dWF0aW9uIGNoYXJhY3RlclxuICAgIHJldHVybiBlc2NhcGVSZWdFeHAocGFyZW4pO1xuICB9IGVsc2Uge1xuICAgIC8vIGxvbmdlciB3b3JkXG4gICAgcmV0dXJuICdcXFxcYicgKyBwYXJlbiArICdcXFxcYic7XG4gIH1cbn07XG5cbi8qKlxuICogQnVpbGRzIGEgUmVnRXhwIGZvciBtYXRjaGluZyBwYXJlbnRoZXNpcyBwYXR0ZXJucywgZXNjYXBpbmcgdGhlbSB3aXRoIGBlc2NhcGVQYXJlbmBcbiAqIEBwYXJhbSB7c3RyaW5nW119IHBhcmVucyAtIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGRlbm90ZSBwYXJlbnRoZXNpcyBwYXR0ZXJuc1xuICovXG5leHBvcnQgY29uc3QgY3JlYXRlUGFyZW5SZWdleCA9IChwYXJlbnM6IHN0cmluZ1tdKTogUmVnRXhwID0+XG4gIG5ldyBSZWdFeHAoJ14oJyArIHBhcmVucy5tYXAoZXNjYXBlUGFyZW4pLmpvaW4oJ3wnKSArICcpJywgJ2l1Jyk7XG5cbi8qKlxuICogQnVpbGRzIGEgUmVnRXhwIGZvciBwbGFjZWhvbGRlciBwYXR0ZXJuc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gdHlwZXMgLSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBkZW5vdGUgcGxhY2Vob2xkZXIgdHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuIC0gc3RyaW5nIHRoYXQgZGVub3RlcyBwbGFjZWhvbGRlciBwYXR0ZXJuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVQbGFjZWhvbGRlclJlZ2V4ID0gKHR5cGVzOiBzdHJpbmdbXSwgcGF0dGVybjogc3RyaW5nKTogUmVnRXhwIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKGlzRW1wdHkodHlwZXMpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB0eXBlc1JlZ2V4ID0gdHlwZXMubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignfCcpO1xuXG4gIHJldHVybiBuZXcgUmVnRXhwKGBeKCg/OiR7dHlwZXNSZWdleH0pKD86JHtwYXR0ZXJufSkpYCwgJ3UnKTtcbn07XG4iLCJpbXBvcnQgeyBJbmRlbnRTdHlsZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IFRva2VuLCBaV1MgfSBmcm9tICcuL3Rva2VuJztcblxuLyoqXG4gKiBXaGVuIHRhYnVsYXIgc3R5bGUgZW5hYmxlZCxcbiAqIHByb2R1Y2VzIGEgMTAtY2hhciB3aWRlIHZlcnNpb24gb2YgcmVzZXJ2ZWQgdG9rZW4uXG4gKlxuICogSXQnbGwgYmUgcGFkZGVkIGJ5IHplcm8td2lkdGggc3BhY2UgY2hhcmFjdGVyc1xuICogaW5zdGVhZCBvZiBub3JtYWwgc3BhY2VzLCBzbyB0aGF0IHRoZXNlIHNwYWNlcyB3aWxsIHN1cnZpdmVcbiAqIHRyaW1taW5nIG9mIHNwYWNlcyBpbiBvdGhlciBwYXJ0cyBvZiBmb3JtYXR0ZXIuXG4gKiBUaGV5J2xsIGJlIGNvbnZlcnRlZCB0byBub3JtYWwgc3BhY2VzIGluIHRoZSBlbmQgb2ZcbiAqIGFsbCB0aGUgbm9ybWFsIGZvcm1hdHRpbmcgd2l0aCB0aGUgcmVwbGFjZVRhYnVsYXJQbGFjZWhvbGRlcnMoKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9UYWJ1bGFyVG9rZW4odG9rZW46IFRva2VuLCBpbmRlbnRTdHlsZTogSW5kZW50U3R5bGUpOiBUb2tlbiB7XG4gIGlmIChpbmRlbnRTdHlsZSA9PT0gJ3N0YW5kYXJkJykge1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIGxldCBidWZmZXJJdGVtID0gdG9rZW4udmFsdWU7IC8vIHN0b3JlIHdoaWNoIHBhcnQgb2Yga2V5d29yZCByZWNlaXZlcyAxMC1zcGFjZSBidWZmZXJcbiAgbGV0IHRhaWwgPSBbXSBhcyBzdHJpbmdbXTsgLy8gcmVzdCBvZiBrZXl3b3JkXG4gIGlmIChidWZmZXJJdGVtLmxlbmd0aCA+PSAxMCAmJiBidWZmZXJJdGVtLmluY2x1ZGVzKCcgJykpIHtcbiAgICAvLyBzcGxpdCBmb3IgbG9uZyBrZXl3b3JkcyBsaWtlIElOTkVSIEpPSU4gb3IgVU5JT04gRElTVElOQ1RcbiAgICBbYnVmZmVySXRlbSwgLi4udGFpbF0gPSBidWZmZXJJdGVtLnNwbGl0KCcgJyk7XG4gIH1cblxuICBpZiAoaW5kZW50U3R5bGUgPT09ICd0YWJ1bGFyTGVmdCcpIHtcbiAgICBidWZmZXJJdGVtID0gYnVmZmVySXRlbS5wYWRFbmQoOSwgWldTKTtcbiAgfSBlbHNlIHtcbiAgICBidWZmZXJJdGVtID0gYnVmZmVySXRlbS5wYWRTdGFydCg5LCBaV1MpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICAuLi50b2tlbixcbiAgICB2YWx1ZTogYnVmZmVySXRlbSArIFsnJywgLi4udGFpbF0uam9pbignICcpLFxuICB9O1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIHplcm8td2lkdGgtc3BhY2VzIGFkZGVkIGJ5IHRoZSBhYm92ZSBmdW5jdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVRhYnVsYXJQbGFjZWhvbGRlcnMocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBxdWVyeS5yZXBsYWNlKG5ldyBSZWdFeHAoWldTLCAndWdpbScpLCAnICcpO1xufVxuIiwiLyoqIFRva2VuIHR5cGUgZW51bSBmb3IgYWxsIHBvc3NpYmxlIFRva2VuIGNhdGVnb3JpZXMgKi9cbmV4cG9ydCBlbnVtIFRva2VuVHlwZSB7XG4gIFdPUkQgPSAnV09SRCcsXG4gIFNUUklORyA9ICdTVFJJTkcnLFxuICBSRVNFUlZFRF9LRVlXT1JEID0gJ1JFU0VSVkVEX0tFWVdPUkQnLFxuICBSRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SID0gJ1JFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1InLFxuICBSRVNFUlZFRF9ERVBFTkRFTlRfQ0xBVVNFID0gJ1JFU0VSVkVEX0RFUEVOREVOVF9DTEFVU0UnLFxuICBSRVNFUlZFRF9CSU5BUllfQ09NTUFORCA9ICdSRVNFUlZFRF9CSU5BUllfQ09NTUFORCcsXG4gIFJFU0VSVkVEX0NPTU1BTkQgPSAnUkVTRVJWRURfQ09NTUFORCcsXG4gIFJFU0VSVkVEX0pPSU5fQ09ORElUSU9OID0gJ1JFU0VSVkVEX0pPSU5fQ09ORElUSU9OJyxcbiAgT1BFUkFUT1IgPSAnT1BFUkFUT1InLFxuICBCTE9DS19TVEFSVCA9ICdCTE9DS19TVEFSVCcsXG4gIEJMT0NLX0VORCA9ICdCTE9DS19FTkQnLFxuICBMSU5FX0NPTU1FTlQgPSAnTElORV9DT01NRU5UJyxcbiAgQkxPQ0tfQ09NTUVOVCA9ICdCTE9DS19DT01NRU5UJyxcbiAgTlVNQkVSID0gJ05VTUJFUicsXG4gIFBMQUNFSE9MREVSID0gJ1BMQUNFSE9MREVSJyxcbiAgRU9GID0gJ0VPRicsXG59XG5cbi8qKiBTdHJ1Y3QgdG8gc3RvcmUgdGhlIG1vc3QgYmFzaWMgY29oZXNpdmUgdW5pdCBvZiBsYW5ndWFnZSBncmFtbWFyICovXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgdHlwZTogVG9rZW5UeXBlO1xuICBrZXk/OiBzdHJpbmc7XG4gIHdoaXRlc3BhY2VCZWZvcmU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRm9yIHVzZSBhcyBhIFwibWlzc2luZyB0b2tlblwiXG4gKiBlLmcuIGluIGxvb2tBaGVhZCBhbmQgbG9va0JlaGluZCB0byBhdm9pZCBkZWFsaW5nIHdpdGggbnVsbCB2YWx1ZXNcbiAqL1xuZXhwb3J0IGNvbnN0IEVPRl9UT0tFTiA9IHsgdHlwZTogVG9rZW5UeXBlLkVPRiwgdmFsdWU6ICfCq0VPRsK7JyB9O1xuXG4vKiogU3BlY2lhbCBVbmljb2RlIGNoYXJhY3RlciB0byBzZXJ2ZSBhcyBhIHBsYWNlaG9sZGVyIGZvciB0YWJ1bGFyIGZvcm1hdHMgYXMgXFx3IHdoaXRlc3BhY2UgaXMgdW5hdmFpbGFibGUgKi9cbmV4cG9ydCBjb25zdCBaV1MgPSAn4oCLJzsgLy8gdXNlcyB6ZXJvLXdpZHRoIHNwYWNlICgmIzgyMDM7IC8gVSsyMDBCKVxuY29uc3QgWldTX1JFR0VYID0gJ1xcdTIwMGInO1xuY29uc3Qgc3BhY2VzID0gYFske1pXU19SRUdFWH1cXFxcc11gO1xuXG4vKiogQ2hlY2tzIGlmIHR3byB0b2tlbnMgYXJlIGVxdWl2YWxlbnQgKi9cbmV4cG9ydCBjb25zdCB0ZXN0VG9rZW4gPVxuICAoY29tcGFyZVRva2VuOiBUb2tlbikgPT5cbiAgKHRva2VuOiBUb2tlbik6IGJvb2xlYW4gPT5cbiAgICB0b2tlbi50eXBlID09PSBjb21wYXJlVG9rZW4udHlwZSAmJlxuICAgIG5ldyBSZWdFeHAoYF4ke3NwYWNlc30qJHtjb21wYXJlVG9rZW4udmFsdWV9JHtzcGFjZXN9KiRgLCAnaXUnKS50ZXN0KHRva2VuLnZhbHVlKTtcblxuLyoqIFV0aWwgb2JqZWN0IHRoYXQgYWxsb3dzIGZvciBlYXN5IGNoZWNraW5nIG9mIFJlc2VydmVkIEtleXdvcmRzICovXG5leHBvcnQgY29uc3QgaXNUb2tlbiA9IHtcbiAgQVM6IHRlc3RUb2tlbih7IHZhbHVlOiAnQVMnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgQU5EOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0FORCcsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SIH0pLFxuICBCRVRXRUVOOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0JFVFdFRU4nLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgQ0FTRTogdGVzdFRva2VuKHsgdmFsdWU6ICdDQVNFJywgdHlwZTogVG9rZW5UeXBlLkJMT0NLX1NUQVJUIH0pLFxuICBDQVNUOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0NBU1QnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgQlk6IHRlc3RUb2tlbih7IHZhbHVlOiAnQlknLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgRU5EOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ0VORCcsIHR5cGU6IFRva2VuVHlwZS5CTE9DS19FTkQgfSksXG4gIEZST006IHRlc3RUb2tlbih7IHZhbHVlOiAnRlJPTScsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIH0pLFxuICBMSU1JVDogdGVzdFRva2VuKHsgdmFsdWU6ICdMSU1JVCcsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIH0pLFxuICBTRUxFQ1Q6IHRlc3RUb2tlbih7IHZhbHVlOiAnU0VMRUNUJywgdHlwZTogVG9rZW5UeXBlLlJFU0VSVkVEX0NPTU1BTkQgfSksXG4gIFNFVDogdGVzdFRva2VuKHsgdmFsdWU6ICdTRVQnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCB9KSxcbiAgVEFCTEU6IHRlc3RUb2tlbih7IHZhbHVlOiAnVEFCTEUnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCB9KSxcbiAgV0lORE9XOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ1dJTkRPVycsIHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIH0pLFxuICBXSVRIOiB0ZXN0VG9rZW4oeyB2YWx1ZTogJ1dJVEgnLCB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfQ09NTUFORCB9KSxcbn07XG5cbi8qKiBDaGVja3MgaWYgdG9rZW4gaXMgYSBSZXNlcnZlZCBDb21tYW5kIG9yIFJlc2VydmVkIEJpbmFyeSBDb21tYW5kICovXG5leHBvcnQgY29uc3QgaXNDb21tYW5kID0gKHRva2VuOiBUb2tlbik6IGJvb2xlYW4gPT5cbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0NPTU1BTkQgfHwgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0JJTkFSWV9DT01NQU5EO1xuXG4vKiogQ2hlY2tzIGlmIHRva2VuIGlzIGFueSBSZXNlcnZlZCBLZXl3b3JkIG9yIENvbW1hbmQgKi9cbmV4cG9ydCBjb25zdCBpc1Jlc2VydmVkID0gKHRva2VuOiBUb2tlbik6IGJvb2xlYW4gPT5cbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQgfHxcbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0xPR0lDQUxfT1BFUkFUT1IgfHxcbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0RFUEVOREVOVF9DTEFVU0UgfHxcbiAgdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLlJFU0VSVkVEX0pPSU5fQ09ORElUSU9OIHx8XG4gIHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5SRVNFUlZFRF9DT01NQU5EIHx8XG4gIHRva2VuLnR5cGUgPT09IFRva2VuVHlwZS5SRVNFUlZFRF9CSU5BUllfQ09NTUFORDtcbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi9jb3JlL3Rva2VuJztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG5jb25zdCByZXNlcnZlZEZ1bmN0aW9ucyA9IHtcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9hZWFkX2VuY3J5cHRpb25fZnVuY3Rpb25zXG4gIGFlYWQ6IFtcbiAgICAnS0VZUy5ORVdfS0VZU0VUJyxcbiAgICAnS0VZUy5BRERfS0VZX0ZST01fUkFXX0JZVEVTJyxcbiAgICAnQUVBRC5ERUNSWVBUX0JZVEVTJyxcbiAgICAnQUVBRC5ERUNSWVBUX1NUUklORycsXG4gICAgJ0FFQUQuRU5DUllQVCcsXG4gICAgJ0tFWVMuS0VZU0VUX0NIQUlOJyxcbiAgICAnS0VZUy5LRVlTRVRfRlJPTV9KU09OJyxcbiAgICAnS0VZUy5LRVlTRVRfVE9fSlNPTicsXG4gICAgJ0tFWVMuUk9UQVRFX0tFWVNFVCcsXG4gICAgJ0tFWVMuS0VZU0VUX0xFTkdUSCcsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvYWdncmVnYXRlX2FuYWx5dGljX2Z1bmN0aW9uc1xuICBhZ2dyZWdhdGVBbmFseXRpYzogW1xuICAgICdBTllfVkFMVUUnLFxuICAgICdBUlJBWV9BR0cnLFxuICAgICdBVkcnLFxuICAgICdDT1JSJyxcbiAgICAnQ09VTlQnLFxuICAgICdDT1VOVElGJyxcbiAgICAnQ09WQVJfUE9QJyxcbiAgICAnQ09WQVJfU0FNUCcsXG4gICAgJ01BWCcsXG4gICAgJ01JTicsXG4gICAgJ1NUX0NMVVNURVJEQlNDQU4nLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1VNJyxcbiAgICAnVkFSX1BPUCcsXG4gICAgJ1ZBUl9TQU1QJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9hZ2dyZWdhdGVfZnVuY3Rpb25zXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBTllfVkFMVUUnLFxuICAgICdBUlJBWV9BR0cnLFxuICAgICdBUlJBWV9DT05DQVRfQUdHJyxcbiAgICAnQVZHJyxcbiAgICAnQklUX0FORCcsXG4gICAgJ0JJVF9PUicsXG4gICAgJ0JJVF9YT1InLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVU5USUYnLFxuICAgICdMT0dJQ0FMX0FORCcsXG4gICAgJ0xPR0lDQUxfT1InLFxuICAgICdNQVgnLFxuICAgICdNSU4nLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1VNJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9hcHByb3hpbWF0ZV9hZ2dyZWdhdGVfZnVuY3Rpb25zXG4gIGFwcHJveGltYXRlQWdncmVnYXRlOiBbXG4gICAgJ0FQUFJPWF9DT1VOVF9ESVNUSU5DVCcsXG4gICAgJ0FQUFJPWF9RVUFOVElMRVMnLFxuICAgICdBUFBST1hfVE9QX0NPVU5UJyxcbiAgICAnQVBQUk9YX1RPUF9TVU0nLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2FycmF5X2Z1bmN0aW9uc1xuICBhcnJheTogW1xuICAgICdBUlJBWScsXG4gICAgJ0FSUkFZX0NPTkNBVCcsXG4gICAgJ0FSUkFZX0xFTkdUSCcsXG4gICAgJ0FSUkFZX1RPX1NUUklORycsXG4gICAgJ0dFTkVSQVRFX0FSUkFZJyxcbiAgICAnR0VORVJBVEVfREFURV9BUlJBWScsXG4gICAgJ0dFTkVSQVRFX1RJTUVTVEFNUF9BUlJBWScsXG4gICAgJ0FSUkFZX1JFVkVSU0UnLFxuICAgICdPRkZTRVQnLFxuICAgICdTQUZFX09GRlNFVCcsXG4gICAgJ09SRElOQUwnLFxuICAgICdTQUZFX09SRElOQUwnLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2JpdF9mdW5jdGlvbnNcbiAgYml0d2lzZTogWydCSVRfQ09VTlQnXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9jb252ZXJzaW9uX2Z1bmN0aW9uc1xuICBjb252ZXJzaW9uOiBbJ0NBU0UnLCAnUEFSU0VfQklHTlVNRVJJQycsICdQQVJTRV9OVU1FUklDJywgJ1NBRkVfQ0FTVCddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2RhdGVfZnVuY3Rpb25zXG4gIGRhdGU6IFtcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ0RBVEUnLFxuICAgICdEQVRFX0FERCcsXG4gICAgJ0RBVEVfU1VCJyxcbiAgICAnREFURV9ESUZGJyxcbiAgICAnREFURV9UUlVOQycsXG4gICAgJ0RBVEVfRlJPTV9VTklYX0RBVEUnLFxuICAgICdGT1JNQVRfREFURScsXG4gICAgJ0xBU1RfREFZJyxcbiAgICAnUEFSU0VfREFURScsXG4gICAgJ1VOSVhfREFURScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvZGF0ZXRpbWVfZnVuY3Rpb25zXG4gIGRhdGV0aW1lOiBbXG4gICAgJ0NVUlJFTlRfREFURVRJTUUnLFxuICAgICdEQVRFVElNRScsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdEQVRFVElNRV9BREQnLFxuICAgICdEQVRFVElNRV9TVUInLFxuICAgICdEQVRFVElNRV9ESUZGJyxcbiAgICAnREFURVRJTUVfVFJVTkMnLFxuICAgICdGT1JNQVRfREFURVRJTUUnLFxuICAgICdMQVNUX0RBWScsXG4gICAgJ1BBUlNFX0RBVEVUSU1FJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9kZWJ1Z2dpbmdfZnVuY3Rpb25zXG4gIGRlYnVnZ2luZzogWydFUlJPUiddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2ZlZGVyYXRlZF9xdWVyeV9mdW5jdGlvbnNcbiAgZmVkZXJhdGVkUXVlcnk6IFsnRVhURVJOQUxfUVVFUlknXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9nZW9ncmFwaHlfZnVuY3Rpb25zXG4gIGdlb2dyYXBoeTogW1xuICAgICdTMl9DRUxMSURGUk9NUE9JTlQnLFxuICAgICdTMl9DT1ZFUklOR0NFTExJRFMnLFxuICAgICdTVF9BTkdMRScsXG4gICAgJ1NUX0FSRUEnLFxuICAgICdTVF9BU0JJTkFSWScsXG4gICAgJ1NUX0FTR0VPSlNPTicsXG4gICAgJ1NUX0FTVEVYVCcsXG4gICAgJ1NUX0FaSU1VVEgnLFxuICAgICdTVF9CT1VOREFSWScsXG4gICAgJ1NUX0JPVU5ESU5HQk9YJyxcbiAgICAnU1RfQlVGRkVSJyxcbiAgICAnU1RfQlVGRkVSV0lUSFRPTEVSQU5DRScsXG4gICAgJ1NUX0NFTlRST0lEJyxcbiAgICAnU1RfQ0VOVFJPSURfQUdHJyxcbiAgICAnU1RfQ0xPU0VTVFBPSU5UJyxcbiAgICAnU1RfQ0xVU1RFUkRCU0NBTicsXG4gICAgJ1NUX0NPTlRBSU5TJyxcbiAgICAnU1RfQ09OVkVYSFVMTCcsXG4gICAgJ1NUX0NPVkVSRURCWScsXG4gICAgJ1NUX0NPVkVSUycsXG4gICAgJ1NUX0RJRkZFUkVOQ0UnLFxuICAgICdTVF9ESU1FTlNJT04nLFxuICAgICdTVF9ESVNKT0lOVCcsXG4gICAgJ1NUX0RJU1RBTkNFJyxcbiAgICAnU1RfRFVNUCcsXG4gICAgJ1NUX0RXSVRISU4nLFxuICAgICdTVF9FTkRQT0lOVCcsXG4gICAgJ1NUX0VRVUFMUycsXG4gICAgJ1NUX0VYVEVOVCcsXG4gICAgJ1NUX0VYVEVSSU9SUklORycsXG4gICAgJ1NUX0dFT0dGUk9NJyxcbiAgICAnU1RfR0VPR0ZST01HRU9KU09OJyxcbiAgICAnU1RfR0VPR0ZST01URVhUJyxcbiAgICAnU1RfR0VPR0ZST01XS0InLFxuICAgICdTVF9HRU9HUE9JTlQnLFxuICAgICdTVF9HRU9HUE9JTlRGUk9NR0VPSEFTSCcsXG4gICAgJ1NUX0dFT0hBU0gnLFxuICAgICdTVF9HRU9NRVRSWVRZUEUnLFxuICAgICdTVF9JTlRFUklPUlJJTkdTJyxcbiAgICAnU1RfSU5URVJTRUNUSU9OJyxcbiAgICAnU1RfSU5URVJTRUNUUycsXG4gICAgJ1NUX0lOVEVSU0VDVFNCT1gnLFxuICAgICdTVF9JU0NPTExFQ1RJT04nLFxuICAgICdTVF9JU0VNUFRZJyxcbiAgICAnU1RfTEVOR1RIJyxcbiAgICAnU1RfTUFLRUxJTkUnLFxuICAgICdTVF9NQUtFUE9MWUdPTicsXG4gICAgJ1NUX01BS0VQT0xZR09OT1JJRU5URUQnLFxuICAgICdTVF9NQVhESVNUQU5DRScsXG4gICAgJ1NUX05QT0lOVFMnLFxuICAgICdTVF9OVU1HRU9NRVRSSUVTJyxcbiAgICAnU1RfTlVNUE9JTlRTJyxcbiAgICAnU1RfUEVSSU1FVEVSJyxcbiAgICAnU1RfUE9JTlROJyxcbiAgICAnU1RfU0lNUExJRlknLFxuICAgICdTVF9TTkFQVE9HUklEJyxcbiAgICAnU1RfU1RBUlRQT0lOVCcsXG4gICAgJ1NUX1RPVUNIRVMnLFxuICAgICdTVF9VTklPTicsXG4gICAgJ1NUX1VOSU9OX0FHRycsXG4gICAgJ1NUX1dJVEhJTicsXG4gICAgJ1NUX1gnLFxuICAgICdTVF9ZJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9oYXNoX2Z1bmN0aW9uc1xuICBoYXNoOiBbJ0ZBUk1fRklOR0VSUFJJTlQnLCAnTUQ1JywgJ1NIQTEnLCAnU0hBMjU2JywgJ1NIQTUxMiddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2hsbF9mdW5jdGlvbnNcbiAgaGxsOiBbJ0hMTF9DT1VOVC5JTklUJywgJ0hMTF9DT1VOVC5NRVJHRScsICdITExfQ09VTlQuTUVSR0VfUEFSVElBTCcsICdITExfQ09VTlQuRVhUUkFDVCddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2ludGVydmFsX2Z1bmN0aW9uc1xuICBpbnRlcnZhbDogWydNQUtFX0lOVEVSVkFMJywgJ0VYVFJBQ1QnLCAnSlVTVElGWV9EQVlTJywgJ0pVU1RJRllfSE9VUlMnLCAnSlVTVElGWV9JTlRFUlZBTCddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2pzb25fZnVuY3Rpb25zXG4gIGpzb246IFtcbiAgICAnSlNPTl9FWFRSQUNUJyxcbiAgICAnSlNPTl9RVUVSWScsXG4gICAgJ0pTT05fRVhUUkFDVF9TQ0FMQVInLFxuICAgICdKU09OX1ZBTFVFJyxcbiAgICAnSlNPTl9FWFRSQUNUX0FSUkFZJyxcbiAgICAnSlNPTl9RVUVSWV9BUlJBWScsXG4gICAgJ0pTT05fRVhUUkFDVF9TVFJJTkdfQVJSQVknLFxuICAgICdKU09OX1ZBTFVFX0FSUkFZJyxcbiAgICAnVE9fSlNPTl9TVFJJTkcnLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL21hdGhlbWF0aWNhbF9mdW5jdGlvbnNcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdTSUdOJyxcbiAgICAnSVNfSU5GJyxcbiAgICAnSVNfTkFOJyxcbiAgICAnSUVFRV9ESVZJREUnLFxuICAgICdSQU5EJyxcbiAgICAnU1FSVCcsXG4gICAgJ1BPVycsXG4gICAgJ1BPV0VSJyxcbiAgICAnRVhQJyxcbiAgICAnTE4nLFxuICAgICdMT0cnLFxuICAgICdMT0cxMCcsXG4gICAgJ0dSRUFURVNUJyxcbiAgICAnTEVBU1QnLFxuICAgICdESVYnLFxuICAgICdTQUZFX0RJVklERScsXG4gICAgJ1NBRkVfTVVMVElQTFknLFxuICAgICdTQUZFX05FR0FURScsXG4gICAgJ1NBRkVfQUREJyxcbiAgICAnU0FGRV9TVUJUUkFDVCcsXG4gICAgJ01PRCcsXG4gICAgJ1JPVU5EJyxcbiAgICAnVFJVTkMnLFxuICAgICdDRUlMJyxcbiAgICAnQ0VJTElORycsXG4gICAgJ0ZMT09SJyxcbiAgICAnQ09TJyxcbiAgICAnQ09TSCcsXG4gICAgJ0FDT1MnLFxuICAgICdBQ09TSCcsXG4gICAgJ1NJTicsXG4gICAgJ1NJTkgnLFxuICAgICdBU0lOJyxcbiAgICAnQVNJTkgnLFxuICAgICdUQU4nLFxuICAgICdUQU5IJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUQU5IJyxcbiAgICAnQVRBTjInLFxuICAgICdSQU5HRV9CVUNLRVQnLFxuICBdLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL25hdmlnYXRpb25fZnVuY3Rpb25zXG4gIG5hdmlnYXRpb246IFtcbiAgICAnRklSU1RfVkFMVUUnLFxuICAgICdMQVNUX1ZBTFVFJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTEVBRCcsXG4gICAgJ0xBRycsXG4gICAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICAgJ1BFUkNFTlRJTEVfRElTQycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvbmV0X2Z1bmN0aW9uc1xuICBuZXQ6IFtcbiAgICAnTkVULklQX0ZST01fU1RSSU5HJyxcbiAgICAnTkVULlNBRkVfSVBfRlJPTV9TVFJJTkcnLFxuICAgICdORVQuSVBfVE9fU1RSSU5HJyxcbiAgICAnTkVULklQX05FVF9NQVNLJyxcbiAgICAnTkVULklQX1RSVU5DJyxcbiAgICAnTkVULklQVjRfRlJPTV9JTlQ2NCcsXG4gICAgJ05FVC5JUFY0X1RPX0lOVDY0JyxcbiAgICAnTkVULkhPU1QnLFxuICAgICdORVQuUFVCTElDX1NVRkZJWCcsXG4gICAgJ05FVC5SRUdfRE9NQUlOJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9udW1iZXJpbmdfZnVuY3Rpb25zXG4gIG51bWJlcmluZzogWydSQU5LJywgJ0RFTlNFX1JBTksnLCAnUEVSQ0VOVF9SQU5LJywgJ0NVTUVfRElTVCcsICdOVElMRScsICdST1dfTlVNQkVSJ10sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvc2VjdXJpdHlfZnVuY3Rpb25zXG4gIHNlY3VyaXR5OiBbJ1NFU1NJT05fVVNFUiddLFxuICAvLyBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL3N0YXRpc3RpY2FsX2FnZ3JlZ2F0ZV9mdW5jdGlvbnNcbiAgc3RhdGlzdGljYWxBZ2dyZWdhdGU6IFtcbiAgICAnQ09SUicsXG4gICAgJ0NPVkFSX1BPUCcsXG4gICAgJ0NPVkFSX1NBTVAnLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVERERVYnLFxuICAgICdWQVJfUE9QJyxcbiAgICAnVkFSX1NBTVAnLFxuICAgICdWQVJJQU5DRScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvc3RyaW5nX2Z1bmN0aW9uc1xuICBzdHJpbmc6IFtcbiAgICAnQVNDSUknLFxuICAgICdCWVRFX0xFTkdUSCcsXG4gICAgJ0NIQVJfTEVOR1RIJyxcbiAgICAnQ0hBUkFDVEVSX0xFTkdUSCcsXG4gICAgJ0NIUicsXG4gICAgJ0NPREVfUE9JTlRTX1RPX0JZVEVTJyxcbiAgICAnQ09ERV9QT0lOVFNfVE9fU1RSSU5HJyxcbiAgICAnQ09OQ0FUJyxcbiAgICAnQ09OVEFJTlNfU1VCU1RSJyxcbiAgICAnRU5EU19XSVRIJyxcbiAgICAnRk9STUFUJyxcbiAgICAnRlJPTV9CQVNFMzInLFxuICAgICdGUk9NX0JBU0U2NCcsXG4gICAgJ0ZST01fSEVYJyxcbiAgICAnSU5JVENBUCcsXG4gICAgJ0lOU1RSJyxcbiAgICAnTEVGVCcsXG4gICAgJ0xFTkdUSCcsXG4gICAgJ0xQQUQnLFxuICAgICdMT1dFUicsXG4gICAgJ0xUUklNJyxcbiAgICAnTk9STUFMSVpFJyxcbiAgICAnTk9STUFMSVpFX0FORF9DQVNFRk9MRCcsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ1JFR0VYUF9DT05UQUlOUycsXG4gICAgJ1JFR0VYUF9FWFRSQUNUJyxcbiAgICAnUkVHRVhQX0VYVFJBQ1RfQUxMJyxcbiAgICAnUkVHRVhQX0lOU1RSJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRUdFWFBfU1VCU1RSJyxcbiAgICAnUkVQTEFDRScsXG4gICAgJ1JFUEVBVCcsXG4gICAgJ1JFVkVSU0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JQQUQnLFxuICAgICdSVFJJTScsXG4gICAgJ1NBRkVfQ09OVkVSVF9CWVRFU19UT19TVFJJTkcnLFxuICAgICdTT1VOREVYJyxcbiAgICAnU1BMSVQnLFxuICAgICdTVEFSVFNfV0lUSCcsXG4gICAgJ1NUUlBPUycsXG4gICAgJ1NVQlNUUicsXG4gICAgJ1NVQlNUUklORycsXG4gICAgJ1RPX0JBU0UzMicsXG4gICAgJ1RPX0JBU0U2NCcsXG4gICAgJ1RPX0NPREVfUE9JTlRTJyxcbiAgICAnVE9fSEVYJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VOSUNPREUnLFxuICAgICdVUFBFUicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvdGltZV9mdW5jdGlvbnNcbiAgdGltZTogW1xuICAgICdDVVJSRU5UX1RJTUUnLFxuICAgICdUSU1FJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ1RJTUVfQUREJyxcbiAgICAnVElNRV9TVUInLFxuICAgICdUSU1FX0RJRkYnLFxuICAgICdUSU1FX1RSVU5DJyxcbiAgICAnRk9STUFUX1RJTUUnLFxuICAgICdQQVJTRV9USU1FJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC90aW1lc3RhbXBfZnVuY3Rpb25zXG4gIHRpbWVzdGFtcDogW1xuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdTVFJJTkcnLFxuICAgICdUSU1FU1RBTVAnLFxuICAgICdUSU1FU1RBTVBfQUREJyxcbiAgICAnVElNRVNUQU1QX1NVQicsXG4gICAgJ1RJTUVTVEFNUF9ESUZGJyxcbiAgICAnVElNRVNUQU1QX1RSVU5DJyxcbiAgICAnRk9STUFUX1RJTUVTVEFNUCcsXG4gICAgJ1BBUlNFX1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVTVEFNUF9TRUNPTkRTJyxcbiAgICAnVElNRVNUQU1QX01JTExJUycsXG4gICAgJ1RJTUVTVEFNUF9NSUNST1MnLFxuICAgICdVTklYX1NFQ09ORFMnLFxuICAgICdVTklYX01JTExJUycsXG4gICAgJ1VOSVhfTUlDUk9TJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC91dWlkX2Z1bmN0aW9uc1xuICB1dWlkOiBbJ0dFTkVSQVRFX1VVSUQnXSxcbiAgLy8gaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9jb25kaXRpb25hbF9leHByZXNzaW9uc1xuICBjb25kaXRpb25hbDogWydDT0FMRVNDRScsICdJRicsICdJRk5VTEwnLCAnTlVMTElGJ10sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9sZWdhY3ktc3FsXG4gIGxlZ2FjeUFnZ3JlZ2F0ZTogW1xuICAgICdBVkcnLFxuICAgICdCSVRfQU5EJyxcbiAgICAnQklUX09SJyxcbiAgICAnQklUX1hPUicsXG4gICAgJ0NPUlInLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVkFSX1BPUCcsXG4gICAgJ0NPVkFSX1NBTVAnLFxuICAgICdFWEFDVF9DT1VOVF9ESVNUSU5DVCcsXG4gICAgJ0ZJUlNUJyxcbiAgICAnR1JPVVBfQ09OQ0FUJyxcbiAgICAnR1JPVVBfQ09OQ0FUX1VOUVVPVEVEJyxcbiAgICAnTEFTVCcsXG4gICAgJ01BWCcsXG4gICAgJ01JTicsXG4gICAgJ05FU1QnLFxuICAgICdOVEgnLFxuICAgICdRVUFOVElMRVMnLFxuICAgICdTVERERVYnLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVU0nLFxuICAgICdUT1AnLFxuICAgICdVTklRVUUnLFxuICAgICdWQVJJQU5DRScsXG4gICAgJ1ZBUl9QT1AnLFxuICAgICdWQVJfU0FNUCcsXG4gIF0sXG4gIGxlZ2FjeUJpdHdpc2U6IFsnQklUX0NPVU5UJ10sXG4gIGxlZ2FjeUNhc3Rpbmc6IFsnQk9PTEVBTicsICdCWVRFUycsICdDQVNUJywgJ0ZMT0FUJywgJ0hFWF9TVFJJTkcnLCAnSU5URUdFUicsICdTVFJJTkcnXSxcbiAgbGVnYWN5Q29tcGFyaXNvbjogW1xuICAgIC8vIGV4cHIgJ0lOJyxcbiAgICAnQ09BTEVTQ0UnLFxuICAgICdHUkVBVEVTVCcsXG4gICAgJ0lGTlVMTCcsXG4gICAgJ0lTX0lORicsXG4gICAgJ0lTX05BTicsXG4gICAgJ0lTX0VYUExJQ0lUTFlfREVGSU5FRCcsXG4gICAgJ0xFQVNUJyxcbiAgICAnTlZMJyxcbiAgXSxcbiAgbGVnYWN5RGF0ZXRpbWU6IFtcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdEQVRFJyxcbiAgICAnREFURV9BREQnLFxuICAgICdEQVRFRElGRicsXG4gICAgJ0RBWScsXG4gICAgJ0RBWU9GV0VFSycsXG4gICAgJ0RBWU9GWUVBUicsXG4gICAgJ0ZPUk1BVF9VVENfVVNFQycsXG4gICAgJ0hPVVInLFxuICAgICdNSU5VVEUnLFxuICAgICdNT05USCcsXG4gICAgJ01TRUNfVE9fVElNRVNUQU1QJyxcbiAgICAnTk9XJyxcbiAgICAnUEFSU0VfVVRDX1VTRUMnLFxuICAgICdRVUFSVEVSJyxcbiAgICAnU0VDX1RPX1RJTUVTVEFNUCcsXG4gICAgJ1NFQ09ORCcsXG4gICAgJ1NUUkZUSU1FX1VUQ19VU0VDJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVTVEFNUF9UT19NU0VDJyxcbiAgICAnVElNRVNUQU1QX1RPX1NFQycsXG4gICAgJ1RJTUVTVEFNUF9UT19VU0VDJyxcbiAgICAnVVNFQ19UT19USU1FU1RBTVAnLFxuICAgICdVVENfVVNFQ19UT19EQVknLFxuICAgICdVVENfVVNFQ19UT19IT1VSJyxcbiAgICAnVVRDX1VTRUNfVE9fTU9OVEgnLFxuICAgICdVVENfVVNFQ19UT19XRUVLJyxcbiAgICAnVVRDX1VTRUNfVE9fWUVBUicsXG4gICAgJ1dFRUsnLFxuICAgICdZRUFSJyxcbiAgXSxcbiAgbGVnYWN5SXA6IFsnRk9STUFUX0lQJywgJ1BBUlNFX0lQJywgJ0ZPUk1BVF9QQUNLRURfSVAnLCAnUEFSU0VfUEFDS0VEX0lQJ10sXG4gIGxlZ2FjeUpzb246IFsnSlNPTl9FWFRSQUNUJywgJ0pTT05fRVhUUkFDVF9TQ0FMQVInXSxcbiAgbGVnYWN5TWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQUNPU0gnLFxuICAgICdBU0lOJyxcbiAgICAnQVNJTkgnLFxuICAgICdBVEFOJyxcbiAgICAnQVRBTkgnLFxuICAgICdBVEFOMicsXG4gICAgJ0NFSUwnLFxuICAgICdDT1MnLFxuICAgICdDT1NIJyxcbiAgICAnREVHUkVFUycsXG4gICAgJ0VYUCcsXG4gICAgJ0ZMT09SJyxcbiAgICAnTE4nLFxuICAgICdMT0cnLFxuICAgICdMT0cyJyxcbiAgICAnTE9HMTAnLFxuICAgICdQSScsXG4gICAgJ1BPVycsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQU5EJyxcbiAgICAnUk9VTkQnLFxuICAgICdTSU4nLFxuICAgICdTSU5IJyxcbiAgICAnU1FSVCcsXG4gICAgJ1RBTicsXG4gICAgJ1RBTkgnLFxuICBdLFxuICBsZWdhY3lSZWdleDogWydSRUdFWFBfTUFUQ0gnLCAnUkVHRVhQX0VYVFJBQ1QnLCAnUkVHRVhQX1JFUExBQ0UnXSxcbiAgbGVnYWN5U3RyaW5nOiBbXG4gICAgJ0NPTkNBVCcsXG4gICAgLy8gZXhwciBDT05UQUlOUyAnc3RyJ1xuICAgICdJTlNUUicsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdMVFJJTScsXG4gICAgJ1JFUExBQ0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JQQUQnLFxuICAgICdSVFJJTScsXG4gICAgJ1NQTElUJyxcbiAgICAnU1VCU1RSJyxcbiAgICAnVVBQRVInLFxuICBdLFxuICBsZWdhY3lUYWJsZVdpbGRjYXJkOiBbJ1RBQkxFX0RBVEVfUkFOR0UnLCAnVEFCTEVfREFURV9SQU5HRV9TVFJJQ1QnLCAnVEFCTEVfUVVFUlknXSxcbiAgbGVnYWN5VXJsOiBbJ0hPU1QnLCAnRE9NQUlOJywgJ1RMRCddLFxuICBsZWdhY3lXaW5kb3c6IFtcbiAgICAnQVZHJyxcbiAgICAnQ09VTlQnLFxuICAgICdNQVgnLFxuICAgICdNSU4nLFxuICAgICdTVERERVYnLFxuICAgICdTVU0nLFxuICAgICdDVU1FX0RJU1QnLFxuICAgICdERU5TRV9SQU5LJyxcbiAgICAnRklSU1RfVkFMVUUnLFxuICAgICdMQUcnLFxuICAgICdMQVNUX1ZBTFVFJyxcbiAgICAnTEVBRCcsXG4gICAgJ05USF9WQUxVRScsXG4gICAgJ05USUxFJyxcbiAgICAnUEVSQ0VOVF9SQU5LJyxcbiAgICAnUEVSQ0VOVElMRV9DT05UJyxcbiAgICAnUEVSQ0VOVElMRV9ESVNDJyxcbiAgICAnUkFOSycsXG4gICAgJ1JBVElPX1RPX1JFUE9SVCcsXG4gICAgJ1JPV19OVU1CRVInLFxuICBdLFxuICBsZWdhY3lNaXNjOiBbXG4gICAgJ0NVUlJFTlRfVVNFUicsXG4gICAgJ0VWRVJZJyxcbiAgICAnRlJPTV9CQVNFNjQnLFxuICAgICdIQVNIJyxcbiAgICAnRkFSTV9GSU5HRVJQUklOVCcsXG4gICAgJ0lGJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdTSEExJyxcbiAgICAnU09NRScsXG4gICAgJ1RPX0JBU0U2NCcsXG4gIF0sXG4gIG90aGVyOiBbJ0JRLkpPQlMuQ0FOQ0VMJywgJ0JRLlJFRlJFU0hfTUFURVJJQUxJWkVEX1ZJRVcnXSxcbn07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIGtleXdvcmRzOiBbXG4gICAgJ0FMTCcsXG4gICAgLy8gJ0FORCcsXG4gICAgJ0FOWScsXG4gICAgLy8gJ0FSUkFZJyxcbiAgICAnQVMnLFxuICAgICdBU0MnLFxuICAgICdBU1NFUlRfUk9XU19NT0RJRklFRCcsXG4gICAgJ0FUJyxcbiAgICAnQkVUV0VFTicsXG4gICAgJ0JZJyxcbiAgICAvLyAnQ0FTRScsXG4gICAgJ0NBU1QnLFxuICAgICdDT0xMQVRFJyxcbiAgICAnQ09OVEFJTlMnLFxuICAgIC8vICdDUkVBVEUnLFxuICAgIC8vICdDUk9TUycsXG4gICAgJ0NVQkUnLFxuICAgICdDVVJSRU5UJyxcbiAgICAnREVGQVVMVCcsXG4gICAgJ0RFRklORScsXG4gICAgJ0RFU0MnLFxuICAgICdESVNUSU5DVCcsXG4gICAgLy8gJ0VMU0UnLFxuICAgIC8vICdFTkQnLFxuICAgICdFTlVNJyxcbiAgICAnRVNDQVBFJyxcbiAgICAvLyAnRVhDRVBUJyxcbiAgICAvLyAnRVhDTFVERScsXG4gICAgJ0VYSVNUUycsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdGQUxTRScsXG4gICAgLy8gJ0ZFVENIJyxcbiAgICAnRk9MTE9XSU5HJyxcbiAgICAnRk9SJyxcbiAgICAvLyAnRlJPTScsXG4gICAgJ0ZVTEwnLFxuICAgIC8vICdHUk9VUCcsXG4gICAgJ0dST1VQSU5HJyxcbiAgICAnR1JPVVBTJyxcbiAgICAnSEFTSCcsXG4gICAgLy8gJ0hBVklORycsXG4gICAgJ0lGJyxcbiAgICAnSUdOT1JFJyxcbiAgICAnSU4nLFxuICAgIC8vICdJTk5FUicsXG4gICAgLy8gJ0lOVEVSU0VDVCcsXG4gICAgLy8gJ0lOVEVSVkFMJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAvLyAnSk9JTicsXG4gICAgLy8gJ0xBVEVSQUwnLFxuICAgIC8vICdMRUZUJyxcbiAgICAnTElLRScsXG4gICAgLy8gJ0xJTUlUJyxcbiAgICAnTE9PS1VQJyxcbiAgICAvLyAnTUVSR0UnLFxuICAgIC8vICdOQVRVUkFMJyxcbiAgICAnTkVXJyxcbiAgICAnTk8nLFxuICAgICdOT1QnLFxuICAgICdOVUxMJyxcbiAgICAnTlVMTFMnLFxuICAgICdPRicsXG4gICAgLy8gJ09OJyxcbiAgICAvLyAnT1InLFxuICAgIC8vICdPUkRFUicsXG4gICAgLy8gJ09VVEVSJyxcbiAgICAnT1ZFUicsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BSRUNFRElORycsXG4gICAgJ1BST1RPJyxcbiAgICAnUkFOR0UnLFxuICAgICdSRUNVUlNJVkUnLFxuICAgICdSRVNQRUNUJyxcbiAgICAvLyAnUklHSFQnLFxuICAgICdST0xMVVAnLFxuICAgICdST1dTJyxcbiAgICAvLyAnU0VMRUNUJyxcbiAgICAvLyAnU0VUJyxcbiAgICAnU09NRScsXG4gICAgLy8gJ1NUUlVDVCcsXG4gICAgJ1RBQkxFJyxcbiAgICAvLyAnVEFCTEVTQU1QTEUnLFxuICAgICdUSEVOJyxcbiAgICAnVE8nLFxuICAgICdUUkVBVCcsXG4gICAgJ1RSVUUnLFxuICAgICdVTkJPVU5ERUQnLFxuICAgIC8vICdVTklPTicsXG4gICAgLy8gJ1VOTkVTVCcsXG4gICAgLy8gJ1VTSU5HJyxcbiAgICAvLyAnV0hFTicsXG4gICAgLy8gJ1dIRVJFJyxcbiAgICAvLyAnV0lORE9XJyxcbiAgICAvLyAnV0lUSCcsXG4gICAgJ1dJVEhJTicsXG4gIF0sXG4gIGRhdGF0eXBlczogW1xuICAgICdBUlJBWScsIC8vIHBhcmFtZXRyaWMsIEFSUkFZPFQ+XG4gICAgJ0JPT0wnLFxuICAgICdCWVRFUycsIC8vIHBhcmFtZXRlcmlzZWQsIEJZVEVTKExlbmd0aClcbiAgICAnREFURScsXG4gICAgJ0RBVEVUSU1FJyxcbiAgICAnR0VPR1JBUEhZJyxcbiAgICAnSU5URVJWQUwnLFxuICAgICdJTlQ2NCcsXG4gICAgJ0lOVCcsXG4gICAgJ1NNQUxMSU5UJyxcbiAgICAnSU5URUdFUicsXG4gICAgJ0JJR0lOVCcsXG4gICAgJ1RJTllJTlQnLFxuICAgICdCWVRFSU5UJyxcbiAgICAnTlVNRVJJQycsIC8vIHBhcmFtZXRlcmlzZWQsIE5VTUVSSUMoUHJlY2lzaW9uWywgU2NhbGVdKVxuICAgICdERUNJTUFMJywgLy8gcGFyYW1ldGVyaXNlZCwgREVDSU1BTChQcmVjaXNpb25bLCBTY2FsZV0pXG4gICAgJ0JJR05VTUVSSUMnLCAvLyBwYXJhbWV0ZXJpc2VkLCBCSUdOVU1FUklDKFByZWNpc2lvblssIFNjYWxlXSlcbiAgICAnQklHREVDSU1BTCcsIC8vIHBhcmFtZXRlcmlzZWQsIEJJR0RFQ0lNQUwoUHJlY2lzaW9uWywgU2NhbGVdKVxuICAgICdGTE9BVDY0JyxcbiAgICAnU1RSSU5HJywgLy8gcGFyYW1ldGVyaXNlZCwgU1RSSU5HKExlbmd0aClcbiAgICAnU1RSVUNUJywgLy8gcGFyYW1ldHJpYywgU1RSVUNUPFQ+XG4gICAgJ1RJTUUnLFxuICAgICdUSU1FWk9ORScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvY29udmVyc2lvbl9mdW5jdGlvbnMjZm9ybWF0dGluZ19zeW50YXhcbiAgc3RyaW5nRm9ybWF0OiBbJ0hFWCcsICdCQVNFWCcsICdCQVNFNjRNJywgJ0FTQ0lJJywgJ1VURi04JywgJ1VURjgnXSxcbiAgbWlzYzogWydTQUZFJ10sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gIC8vIERRTCwgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9xdWVyeS1zeW50YXhcbiAgJ1NFTEVDVCcsXG4gICdGUk9NJyxcbiAgJ1VOTkVTVCcsXG4gICdQSVZPVCcsXG4gICdVTlBJVk9UJyxcbiAgJ1RBQkxFU0FNUExFIFNZU1RFTScsXG4gICdXSEVSRScsXG4gICdHUk9VUCBCWScsXG4gICdIQVZJTkcnLFxuICAnT1JERVIgQlknLFxuICAnUVVBTElGWScsXG4gICdXSU5ET1cnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ1dJVEgnLFxuICAnT01JVCBSRUNPUkQgSUYnLCAvLyBsZWdhY3lcbiAgLy8gRE1MLCBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2RtbC1zeW50YXhcbiAgJ0lOU0VSVCcsXG4gICdJTlNFUlQgSU5UTycsXG4gICdWQUxVRVMnLFxuICAnREVMRVRFJyxcbiAgLy8gJ0RFTEVURSBGUk9NJyxcbiAgJ1RSVU5DQVRFIFRBQkxFJyxcbiAgJ1VQREFURScsXG4gICdNRVJHRScsXG4gICdNRVJHRSBJTlRPJyxcbiAgLy8gJ1VTSU5HJyxcbiAgLy8gRERMLCBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL2RhdGEtZGVmaW5pdGlvbi1sYW5ndWFnZVxuICAnU0VUIFNDSEVNQScsIC8vIGFkZGVkXG4gICdDUkVBVEUgU0NIRU1BJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEUgTElLRScsXG4gICdDUkVBVEUgVEFCTEUgQ09QWScsXG4gICdDUkVBVEUgU05BUFNIT1QgVEFCTEUnLFxuICAnQ1JFQVRFIFRBQkxFIENMT05FJyxcbiAgJ0NSRUFURSBWSUVXJyxcbiAgJ0NSRUFURSBNQVRFUklBTElaRUQgVklFVycsXG4gICdDUkVBVEUgRVhURVJOQUwgVEFCTEUnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBUQUJMRSBGVU5DVElPTicsXG4gICdDUkVBVEUgUFJPQ0VEVVJFJyxcbiAgJ0NSRUFURSBST1cgQUNDRVNTIFBPTElDWScsXG4gICdBTFRFUiBTQ0hFTUEgU0VUIE9QVElPTlMnLFxuICAnQUxURVIgVEFCTEUgU0VUIE9QVElPTlMnLFxuICAnQUxURVIgVEFCTEUgQUREIENPTFVNTicsXG4gICdBTFRFUiBUQUJMRSBSRU5BTUUgVE8nLFxuICAnQUxURVIgVEFCTEUgRFJPUCBDT0xVTU4nLFxuICAnQUxURVIgQ09MVU1OIFNFVCBPUFRJT05TJyxcbiAgJ0FMVEVSIENPTFVNTiBEUk9QIE5PVCBOVUxMJyxcbiAgJ0FMVEVSIENPTFVNTiBTRVQgREFUQSBUWVBFJyxcbiAgJ0FMVEVSIFZJRVcgU0VUIE9QVElPTlMnLFxuICAnQUxURVIgTUFURVJJQUxJWkVEIFZJRVcgU0VUIE9QVElPTlMnLFxuICAnRFJPUCBTQ0hFTUEnLFxuICAnRFJPUCBUQUJMRScsXG4gICdEUk9QIFNOQVBTSE9UIFRBQkxFJyxcbiAgJ0RST1AgRVhURVJOQUwgVEFCTEUnLFxuICAnRFJPUCBWSUVXJyxcbiAgJ0RST1AgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnRFJPUCBGVU5DVElPTicsXG4gICdEUk9QIFRBQkxFIEZVTkNUSU9OJyxcbiAgJ0RST1AgUFJPQ0VEVVJFJyxcbiAgJ0RST1AgUk9XIEFDQ0VTUyBQT0xJQ1knLFxuICAvLyBEQ0wsIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvZGF0YS1jb250cm9sLWxhbmd1YWdlXG4gICdHUkFOVCcsXG4gICdSRVZPS0UnLFxuICAnQ1JFQVRFIENBUEFDSVRZJyxcbiAgJ0NSRUFURSBSRVNFUlZBVElPTicsXG4gICdDUkVBVEUgQVNTSUdOTUVOVCcsXG4gICdEUk9QIENBUEFDSVRZJyxcbiAgJ0RST1AgUkVTRVJWQVRJT04nLFxuICAnRFJPUCBBU1NJR05NRU5UJyxcbiAgLy8gU2NyaXB0LCBodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vYmlncXVlcnkvZG9jcy9yZWZlcmVuY2Uvc3RhbmRhcmQtc3FsL3NjcmlwdGluZ1xuICAnREVDTEFSRScsXG4gICdTRVQnLFxuICAnRVhFQ1VURSBJTU1FRElBVEUnLFxuICAnTE9PUCcsXG4gICdFTkQgTE9PUCcsXG4gICdSRVBFQVQnLFxuICAnRU5EIFJFUEVBVCcsXG4gICdXSElMRScsXG4gICdFTkQgV0hJTEUnLFxuICAnQlJFQUsnLFxuICAnTEVBVkUnLFxuICAnQ09OVElOVUUnLFxuICAnSVRFUkFURScsXG4gICdGT1InLFxuICAnRU5EIEZPUicsXG4gICdCRUdJTicsXG4gICdCRUdJTiBUUkFOU0FDVElPTicsXG4gICdDT01NSVQgVFJBTlNBQ1RJT04nLFxuICAnUk9MTEJBQ0sgVFJBTlNBQ1RJT04nLFxuICAnUkFJU0UnLFxuICAnUkVUVVJOJyxcbiAgJ0NBTEwnLFxuICAvLyBEZWJ1ZywgaHR0cHM6Ly9jbG91ZC5nb29nbGUuY29tL2JpZ3F1ZXJ5L2RvY3MvcmVmZXJlbmNlL3N0YW5kYXJkLXNxbC9kZWJ1Z2dpbmctc3RhdGVtZW50c1xuICAnQVNTRVJUJyxcbiAgLy8gT3RoZXIsIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS9zdGFuZGFyZC1zcWwvb3RoZXItc3RhdGVtZW50c1xuICAnRVhQT1JUIERBVEEnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAvLyBqb2luc1xuICAnSk9JTicsXG4gICdJTk5FUiBKT0lOJyxcbiAgJ0xFRlQgSk9JTicsXG4gICdMRUZUIE9VVEVSIEpPSU4nLFxuICAnUklHSFQgSk9JTicsXG4gICdSSUdIVCBPVVRFUiBKT0lOJyxcbiAgJ0ZVTEwgSk9JTicsXG4gICdGVUxMIE9VVEVSIEpPSU4nLFxuICAnQ1JPU1MgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vY2xvdWQuZ29vZ2xlLmNvbS9iaWdxdWVyeS9kb2NzL3JlZmVyZW5jZS8jc3RhbmRhcmQtc3FsLXJlZmVyZW5jZVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmlnUXVlcnlGb3JtYXR0ZXIgZXh0ZW5kcyBGb3JtYXR0ZXIge1xuICBzdGF0aWMgcmVzZXJ2ZWRDb21tYW5kcyA9IHJlc2VydmVkQ29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcztcbiAgc3RhdGljIHJlc2VydmVkSm9pbkNvbmRpdGlvbnMgPSBbJ09OJywgJ1VTSU5HJ107XG4gIHN0YXRpYyByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMgPSBbJ0FORCcsICdPUiddO1xuICBzdGF0aWMgZnVsbFJlc2VydmVkV29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5PYmplY3QudmFsdWVzKHJlc2VydmVkS2V5d29yZHMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgXSk7XG5cbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gWydcIlwiJywgXCInJ1wiLCAnYGAnXTsgLy8gYWRkOiAnJycnJycsIFwiXCJcIlwiXCJcIiA7IHByZWZpeGVzOiByLCBiXG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ0NBU0UnXTtcbiAgc3RhdGljIGJsb2NrRW5kID0gWycpJywgJ0VORCddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbJz8nXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFtdO1xuICBzdGF0aWMgbGluZUNvbW1lbnRUeXBlcyA9IFsnLS0nLCAnIyddO1xuICBzdGF0aWMgc3BlY2lhbFdvcmRDaGFycyA9IHsgYW55OiAnX0AkLScgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnPj4nLCAnPDwnLCAnfHwnXTtcbiAgLy8gVE9ETzogaGFuZGxlIHRyYWlsaW5nIGNvbW1hIGluIHNlbGVjdCBjbGF1c2VcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogQmlnUXVlcnlGb3JtYXR0ZXIucmVzZXJ2ZWRDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkQmluYXJ5Q29tbWFuZHM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkQmluYXJ5Q29tbWFuZHMsXG4gICAgICByZXNlcnZlZERlcGVuZGVudENsYXVzZXM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkSm9pbkNvbmRpdGlvbnMsXG4gICAgICByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyxcbiAgICAgIHJlc2VydmVkS2V5d29yZHM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLmZ1bGxSZXNlcnZlZFdvcmRzLFxuICAgICAgc3RyaW5nVHlwZXM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnN0cmluZ1R5cGVzLFxuICAgICAgYmxvY2tTdGFydDogQmlnUXVlcnlGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBCaWdRdWVyeUZvcm1hdHRlci5ibG9ja0VuZCxcbiAgICAgIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzOiBCaWdRdWVyeUZvcm1hdHRlci5pbmRleGVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIG5hbWVkUGxhY2Vob2xkZXJUeXBlczogQmlnUXVlcnlGb3JtYXR0ZXIubmFtZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbGluZUNvbW1lbnRUeXBlczogQmlnUXVlcnlGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIHNwZWNpYWxXb3JkQ2hhcnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLnNwZWNpYWxXb3JkQ2hhcnMsXG4gICAgICBvcGVyYXRvcnM6IEJpZ1F1ZXJ5Rm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxuXG4gIHRva2VuT3ZlcnJpZGUodG9rZW46IFRva2VuKSB7XG4gICAgaWYgKFxuICAgICAgKC9BUlJBWS9pLnRlc3QodG9rZW4udmFsdWUpIHx8IC9TVFJVQ1QvaS50ZXN0KHRva2VuLnZhbHVlKSkgJiZcbiAgICAgIHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZSA9PT0gJzwnXG4gICAgKSB7XG4gICAgICBsZXQgbGV2ZWwgPSAwO1xuICAgICAgbGV0IGZpbmFsVG9rZW4gPSB0b2tlbi52YWx1ZTtcblxuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBuZXh0VG9rZW4gPSB0aGlzLnRva2VuTG9va0FoZWFkKCk7XG4gICAgICAgIGlmIChuZXh0VG9rZW4udmFsdWUgPT09ICc+JyB8fCBuZXh0VG9rZW4udmFsdWUgPT09ICc+PicpIHtcbiAgICAgICAgICBsZXZlbCAtPSBuZXh0VG9rZW4udmFsdWUubGVuZ3RoO1xuICAgICAgICB9IGVsc2UgaWYgKG5leHRUb2tlbi52YWx1ZSA9PT0gJzwnKSB7XG4gICAgICAgICAgbGV2ZWwrKztcbiAgICAgICAgfVxuICAgICAgICBmaW5hbFRva2VuICs9IHRoaXMudG9rZW5zLnNwbGljZSh0aGlzLmluZGV4ICsgMSwgMSlbMF0udmFsdWU7XG4gICAgICB9IHdoaWxlIChsZXZlbCA+IDApO1xuXG4gICAgICByZXR1cm4geyAuLi50b2tlbiwgdmFsdWU6IGZpbmFsVG9rZW4gfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0ge1xuICAvLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9ZnVuY3Rpb25zLWFnZ3JlZ2F0ZVxuICBhZ2dyZWdhdGU6IFtcbiAgICAnQVJSQVlfQUdHJyxcbiAgICAnQVZHJyxcbiAgICAnQ09SUicsXG4gICAgJ0NPUlJFTEFUSU9OJyxcbiAgICAnQ09VTlQnLFxuICAgICdDT1VOVF9CSUcnLFxuICAgICdDT1ZBUl9QT1AnLFxuICAgICdDT1ZBUklBTkNFJyxcbiAgICAnQ09WQVInLFxuICAgICdDT1ZBUl9TQU1QJyxcbiAgICAnQ09WQVJJQU5DRV9TQU1QJyxcbiAgICAnQ1VNRV9ESVNUJyxcbiAgICAnR1JPVVBJTkcnLFxuICAgICdMSVNUQUdHJyxcbiAgICAnTUFYJyxcbiAgICAnTUVESUFOJyxcbiAgICAnTUlOJyxcbiAgICAnUEVSQ0VOVElMRV9DT05UJyxcbiAgICAnUEVSQ0VOVElMRV9ESVNDJyxcbiAgICAnUEVSQ0VOVF9SQU5LJyxcbiAgICAnUkVHUl9BVkdYJyxcbiAgICAnUkVHUl9BVkdZJyxcbiAgICAnUkVHUl9DT1VOVCcsXG4gICAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgICAnUkVHUl9JQ1BUJyxcbiAgICAnUkVHUl9SMicsXG4gICAgJ1JFR1JfU0xPUEUnLFxuICAgICdSRUdSX1NYWCcsXG4gICAgJ1JFR1JfU1hZJyxcbiAgICAnUkVHUl9TWVknLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVU0nLFxuICAgICdWQVJfUE9QJyxcbiAgICAnVkFSSUFOQ0UnLFxuICAgICdWQVInLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1ZBUklBTkNFX1NBTVAnLFxuICAgICdYTUxBR0cnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9ZnVuY3Rpb25zLXNjYWxhclxuICBzY2FsYXI6IFtcbiAgICAnQUJTJyxcbiAgICAnQUJTVkFMJyxcbiAgICAnQUNPUycsXG4gICAgJ0FERF9EQVlTJyxcbiAgICAnQUREX01PTlRIUycsXG4gICAgJ0FSUkFZX0RFTEVURScsXG4gICAgJ0FSUkFZX0ZJUlNUJyxcbiAgICAnQVJSQVlfTEFTVCcsXG4gICAgJ0FSUkFZX05FWFQnLFxuICAgICdBUlJBWV9QUklPUicsXG4gICAgJ0FSUkFZX1RSSU0nLFxuICAgICdBU0NJSScsXG4gICAgJ0FTQ0lJX0NIUicsXG4gICAgJ0FTQ0lJX1NUUicsXG4gICAgJ0FTQ0lJU1RSJyxcbiAgICAnQVNJTicsXG4gICAgJ0FUQU4nLFxuICAgICdBVEFOSCcsXG4gICAgJ0FUQU4yJyxcbiAgICAnQklHSU5UJyxcbiAgICAnQklOQVJZJyxcbiAgICAnQklUQU5EJyxcbiAgICAnQklUQU5ETk9UJyxcbiAgICAnQklUT1InLFxuICAgICdCSVRYT1InLFxuICAgICdCSVROT1QnLFxuICAgICdCTE9CJyxcbiAgICAnQlRSSU0nLFxuICAgICdDQVJESU5BTElUWScsXG4gICAgJ0NDU0lEX0VOQ09ESU5HJyxcbiAgICAnQ0VJTElORycsXG4gICAgJ0NFSUwnLFxuICAgICdDSEFSJyxcbiAgICAnQ0hBUjknLFxuICAgICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgICAnQ0hBUl9MRU5HVEgnLFxuICAgICdDSFInLFxuICAgICdDTE9CJyxcbiAgICAnQ09BTEVTQ0UnLFxuICAgICdDT0xMQVRJT05fS0VZJyxcbiAgICAnQ09NUEFSRV9ERUNGTE9BVCcsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NPTlRBSU5TJyxcbiAgICAnQ09TJyxcbiAgICAnQ09TSCcsXG4gICAgJ0RBVEUnLFxuICAgICdEQVknLFxuICAgICdEQVlPRk1PTlRIJyxcbiAgICAnREFZT0ZXRUVLJyxcbiAgICAnREFZT0ZXRUVLX0lTTycsXG4gICAgJ0RBWU9GWUVBUicsXG4gICAgJ0RBWVMnLFxuICAgICdEQVlTX0JFVFdFRU4nLFxuICAgICdEQkNMT0InLFxuICAgICdERUNGTE9BVCcsXG4gICAgJ0RFQ0ZMT0FUX0ZPUk1BVCcsXG4gICAgJ0RFQ0ZMT0FUX1NPUlRLRVknLFxuICAgICdERUNJTUFMJyxcbiAgICAnREVDJyxcbiAgICAnREVDT0RFJyxcbiAgICAnREVDUllQVF9CSU5BUlknLFxuICAgICdERUNSWVBUX0JJVCcsXG4gICAgJ0RFQ1JZUFRfQ0hBUicsXG4gICAgJ0RFQ1JZUFRfREInLFxuICAgICdERUNSWVBUX0RBVEFLRVlfQklHSU5UJyxcbiAgICAnREVDUllQVF9EQVRBS0VZX0JJVCcsXG4gICAgJ0RFQ1JZUFRfREFUQUtFWV9DTE9CJyxcbiAgICAnREVDUllQVF9EQVRBS0VZX0RCQ0xPQicsXG4gICAgJ0RFQ1JZUFRfREFUQUtFWV9ERUNJTUFMJyxcbiAgICAnREVDUllQVF9EQVRBS0VZX0lOVEVHRVInLFxuICAgICdERUNSWVBUX0RBVEFLRVlfVkFSQ0hBUicsXG4gICAgJ0RFQ1JZUFRfREFUQUtFWV9WQVJHUkFQSElDJyxcbiAgICAnREVHUkVFUycsXG4gICAgJ0RJRkZFUkVOQ0UnLFxuICAgICdESUdJVFMnLFxuICAgICdET1VCTEVfUFJFQ0lTSU9OJyxcbiAgICAnRE9VQkxFJyxcbiAgICAnRFNOX1hNTFZBTElEQVRFJyxcbiAgICAnRUJDRElDX0NIUicsXG4gICAgJ0VCQ0RJQ19TVFInLFxuICAgICdFTkNSWVBUX0RBVEFLRVknLFxuICAgICdFTkNSWVBUX1RERVMnLFxuICAgICdFWFAnLFxuICAgICdFWFRSQUNUJyxcbiAgICAnRkxPQVQnLFxuICAgICdGTE9PUicsXG4gICAgJ0dFTkVSQVRFX1VOSVFVRScsXG4gICAgJ0dFTkVSQVRFX1VOSVFVRV9CSU5BUlknLFxuICAgICdHRVRISU5UJyxcbiAgICAnR0VUVkFSSUFCTEUnLFxuICAgICdHUkFQSElDJyxcbiAgICAnR1JFQVRFU1QnLFxuICAgICdIQVNIJyxcbiAgICAnSEFTSF9DUkMzMicsXG4gICAgJ0hBU0hfTUQ1JyxcbiAgICAnSEFTSF9TSEExJyxcbiAgICAnSEFTSF9TSEEyNTYnLFxuICAgICdIRVgnLFxuICAgICdIT1VSJyxcbiAgICAnSURFTlRJVFlfVkFMX0xPQ0FMJyxcbiAgICAnSUZOVUxMJyxcbiAgICAnSU5TRVJUJyxcbiAgICAnSU5TVFInLFxuICAgICdJTlRFR0VSJyxcbiAgICAnSU5UJyxcbiAgICAnSlVMSUFOX0RBWScsXG4gICAgJ0xBU1RfREFZJyxcbiAgICAnTENBU0UnLFxuICAgICdMRUFTVCcsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMTicsXG4gICAgJ0xPQ0FURScsXG4gICAgJ0xPQ0FURV9JTl9TVFJJTkcnLFxuICAgICdMT0cxMCcsXG4gICAgJ0xPV0VSJyxcbiAgICAnTFBBRCcsXG4gICAgJ0xUUklNJyxcbiAgICAnTUFYJyxcbiAgICAnTUFYX0NBUkRJTkFMSVRZJyxcbiAgICAnTUlDUk9TRUNPTkQnLFxuICAgICdNSUROSUdIVF9TRUNPTkRTJyxcbiAgICAnTUlOJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9EJyxcbiAgICAnTU9OVEgnLFxuICAgICdNT05USFNfQkVUV0VFTicsXG4gICAgJ01RUkVBRCcsXG4gICAgJ01RUkVBRENMT0InLFxuICAgICdNUVJFQ0VJVkUnLFxuICAgICdNUVJFQ0VJVkVDTE9CJyxcbiAgICAnTVFTRU5EJyxcbiAgICAnTVVMVElQTFlfQUxUJyxcbiAgICAnTkVYVF9EQVknLFxuICAgICdORVhUX01PTlRIJyxcbiAgICAnTk9STUFMSVpFX0RFQ0ZMT0FUJyxcbiAgICAnTk9STUFMSVpFX1NUUklORycsXG4gICAgJ05VTExJRicsXG4gICAgJ05WTCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQUNLJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdQT1NTVFInLFxuICAgICdQT1dFUicsXG4gICAgJ1BPVycsXG4gICAgJ1FVQU5USVpFJyxcbiAgICAnUVVBUlRFUicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQUlTRV9FUlJPUicsXG4gICAgJ1JBTkRPTScsXG4gICAgJ1JBTkQnLFxuICAgICdSRUFMJyxcbiAgICAnUkVHRVhQX0NPVU5UJyxcbiAgICAnUkVHRVhQX0lOU1RSJyxcbiAgICAnUkVHRVhQX0xJS0UnLFxuICAgICdSRUdFWFBfUkVQTEFDRScsXG4gICAgJ1JFR0VYUF9TVUJTVFInLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUklEJyxcbiAgICAnUklHSFQnLFxuICAgICdST1VORCcsXG4gICAgJ1JPVU5EX1RJTUVTVEFNUCcsXG4gICAgJ1JPV0lEJyxcbiAgICAnUlBBRCcsXG4gICAgJ1JUUklNJyxcbiAgICAnU0NPUkUnLFxuICAgICdTRUNPTkQnLFxuICAgICdTSUdOJyxcbiAgICAnU0lOJyxcbiAgICAnU0lOSCcsXG4gICAgJ1NNQUxMSU5UJyxcbiAgICAnU09VTkRFWCcsXG4gICAgJ1NPQVBIVFRQQycsXG4gICAgJ1NPQVBIVFRQVicsXG4gICAgJ1NPQVBIVFRQTkMnLFxuICAgICdTT0FQSFRUUE5WJyxcbiAgICAnU1BBQ0UnLFxuICAgICdTUVJUJyxcbiAgICAnU1RSSVAnLFxuICAgICdTVFJMRUZUJyxcbiAgICAnU1RSUE9TJyxcbiAgICAnU1RSUklHSFQnLFxuICAgICdTVUJTVFInLFxuICAgICdTVUJTVFJJTkcnLFxuICAgICdUQU4nLFxuICAgICdUQU5IJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVTVEFNUEFERCcsXG4gICAgJ1RJTUVTVEFNUERJRkYnLFxuICAgICdUSU1FU1RBTVBfRk9STUFUJyxcbiAgICAnVElNRVNUQU1QX0lTTycsXG4gICAgJ1RJTUVTVEFNUF9UWicsXG4gICAgJ1RPX0NIQVInLFxuICAgICdUT19DTE9CJyxcbiAgICAnVE9fREFURScsXG4gICAgJ1RPX05VTUJFUicsXG4gICAgJ1RPVEFMT1JERVInLFxuICAgICdUT19USU1FU1RBTVAnLFxuICAgICdUUkFOU0xBVEUnLFxuICAgICdUUklNJyxcbiAgICAnVFJJTV9BUlJBWScsXG4gICAgJ1RSVU5DQVRFJyxcbiAgICAnVFJVTkMnLFxuICAgICdUUlVOQ19USU1FU1RBTVAnLFxuICAgICdVQ0FTRScsXG4gICAgJ1VOSUNPREUnLFxuICAgICdVTklDT0RFX1NUUicsXG4gICAgJ1VOSVNUUicsXG4gICAgJ1VQUEVSJyxcbiAgICAnVkFMVUUnLFxuICAgICdWQVJCSU5BUlknLFxuICAgICdWQVJDSEFSJyxcbiAgICAnVkFSQ0hBUjknLFxuICAgICdWQVJDSEFSX0JJVF9GT1JNQVQnLFxuICAgICdWQVJDSEFSX0ZPUk1BVCcsXG4gICAgJ1ZBUkdSQVBISUMnLFxuICAgICdWRVJJRllfR1JPVVBfRk9SX1VTRVInLFxuICAgICdWRVJJRllfUk9MRV9GT1JfVVNFUicsXG4gICAgJ1ZFUklGWV9UUlVTVEVEX0NPTlRFWFRfUk9MRV9GT1JfVVNFUicsXG4gICAgJ1dFRUsnLFxuICAgICdXRUVLX0lTTycsXG4gICAgJ1dSQVAnLFxuICAgICdYTUxBVFRSSUJVVEVTJyxcbiAgICAnWE1MQ09NTUVOVCcsXG4gICAgJ1hNTENPTkNBVCcsXG4gICAgJ1hNTERPQ1VNRU5UJyxcbiAgICAnWE1MRUxFTUVOVCcsXG4gICAgJ1hNTEZPUkVTVCcsXG4gICAgJ1hNTE1PRElGWScsXG4gICAgJ1hNTE5BTUVTUEFDRVMnLFxuICAgICdYTUxQQVJTRScsXG4gICAgJ1hNTFBJJyxcbiAgICAnWE1MUVVFUlknLFxuICAgICdYTUxTRVJJQUxJWkUnLFxuICAgICdYTUxURVhUJyxcbiAgICAnWE1MWFNST0JKRUNUSUQnLFxuICAgICdYU0xUUkFOU0ZPUk0nLFxuICAgICdZRUFSJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cuaWJtLmNvbS9kb2NzL2VuL2RiMi1mb3Item9zLzExP3RvcGljPWZ1bmN0aW9ucy10YWJsZVxuICB0YWJsZTogW1xuICAgICdBRE1JTl9UQVNLX0xJU1QnLFxuICAgICdBRE1JTl9UQVNLX09VVFBVVCcsXG4gICAgJ0FETUlOX1RBU0tfU1RBVFVTJyxcbiAgICAnQkxPQ0tJTkdfVEhSRUFEUycsXG4gICAgJ01RUkVBREFMTCcsXG4gICAgJ01RUkVBREFMTENMT0InLFxuICAgICdNUVJFQ0VJVkVBTEwnLFxuICAgICdNUVJFQ0VJVkVBTExDTE9CJyxcbiAgICAnWE1MVEFCTEUnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9ZnVuY3Rpb25zLXJvd1xuICByb3c6IFsnVU5QQUNLJ10sXG4gIC8vIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9kYjItZm9yLXpvcy8xMj90b3BpYz1leHByZXNzaW9ucy1vbGFwLXNwZWNpZmljYXRpb25cbiAgb2xhcDogWydGSVJTVF9WQUxVRScsICdMQUcnLCAnTEFTVF9WQUxVRScsICdMRUFEJywgJ05USF9WQUxVRScsICdOVElMRScsICdSQVRJT19UT19SRVBPUlQnXSxcbn07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIC8vIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9kYjItZm9yLXpvcy8xMT90b3BpYz13b3Jkcy1yZXNlcnZlZCNkYjJ6X3Jlc2VydmVkd29yZHNfX25ld3Jlc3dvcmRcbiAgc3RhbmRhcmQ6IFtcbiAgICAnQUxMJyxcbiAgICAnQUxMT0NBVEUnLFxuICAgICdBTExPVycsXG4gICAgJ0FMVEVSQU5EJyxcbiAgICAnQU5ZJyxcbiAgICAnQVMnLFxuICAgICdBUlJBWScsXG4gICAgJ0FSUkFZX0VYSVNUUycsXG4gICAgJ0FTRU5TSVRJVkUnLFxuICAgICdBU1NPQ0lBVEUnLFxuICAgICdBU1VUSU1FJyxcbiAgICAnQVQnLFxuICAgICdBVURJVCcsXG4gICAgJ0FVWCcsXG4gICAgJ0FVWElMSUFSWScsXG4gICAgJ0JFRk9SRScsXG4gICAgJ0JFR0lOJyxcbiAgICAnQkVUV0VFTicsXG4gICAgJ0JVRkZFUlBPT0wnLFxuICAgICdCWScsXG4gICAgJ0NBUFRVUkUnLFxuICAgICdDQVNDQURFRCcsXG4gICAgJ0NBU0UnLFxuICAgICdDQVNUJyxcbiAgICAnQ0NTSUQnLFxuICAgICdDSEFSQUNURVInLFxuICAgICdDSEVDSycsXG4gICAgJ0NMT05FJyxcbiAgICAnQ0xVU1RFUicsXG4gICAgJ0NPTExFQ1RJT04nLFxuICAgICdDT0xMSUQnLFxuICAgICdDT0xVTU4nLFxuICAgICdDT05ESVRJT04nLFxuICAgICdDT05ORUNUSU9OJyxcbiAgICAnQ09OU1RSQUlOVCcsXG4gICAgJ0NPTlRFTlQnLFxuICAgICdDT05USU5VRScsXG4gICAgJ0NSRUFURScsXG4gICAgJ0NVQkUnLFxuICAgICdDVVJSRU5UJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9MQ19DVFlQRScsXG4gICAgJ0NVUlJFTlRfUEFUSCcsXG4gICAgJ0NVUlJFTlRfU0NIRU1BJyxcbiAgICAnQ1VSUkVOVF9USU1FJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJSVkFMJyxcbiAgICAnQ1VSU09SJyxcbiAgICAnREFUQScsXG4gICAgJ0RBVEFCQVNFJyxcbiAgICAnREJJTkZPJyxcbiAgICAnREVDTEFSRScsXG4gICAgJ0RFRkFVTFQnLFxuICAgICdERVNDUklQVE9SJyxcbiAgICAnREVURVJNSU5JU1RJQycsXG4gICAgJ0RJU0FCTEUnLFxuICAgICdESVNBTExPVycsXG4gICAgJ0RJU1RJTkNUJyxcbiAgICAnRE8nLFxuICAgICdET0NVTUVOVCcsXG4gICAgJ0RTU0laRScsXG4gICAgJ0RZTkFNSUMnLFxuICAgICdFRElUUFJPQycsXG4gICAgJ0VOQ09ESU5HJyxcbiAgICAnRU5DUllQVElPTicsXG4gICAgJ0VORElORycsXG4gICAgJ0VORC1FWEVDJyxcbiAgICAnRVJBU0UnLFxuICAgICdFU0NBUEUnLFxuICAgICdFWENFUFRJT04nLFxuICAgICdFWElTVFMnLFxuICAgICdFWElUJyxcbiAgICAnRVhURVJOQUwnLFxuICAgICdGRU5DRUQnLFxuICAgICdGSUVMRFBST0MnLFxuICAgICdGSU5BTCcsXG4gICAgJ0ZJUlNUJyxcbiAgICAnRk9SJyxcbiAgICAnRlJFRScsXG4gICAgJ0ZVTEwnLFxuICAgICdGVU5DVElPTicsXG4gICAgJ0dFTkVSQVRFRCcsXG4gICAgJ0dFVCcsXG4gICAgJ0dMT0JBTCcsXG4gICAgJ0dPVE8nLFxuICAgICdHUk9VUCcsXG4gICAgJ0hBTkRMRVInLFxuICAgICdIT0xEJyxcbiAgICAnSE9VUlMnLFxuICAgICdJRicsXG4gICAgJ0lNTUVESUFURScsXG4gICAgJ0lOJyxcbiAgICAnSU5DTFVTSVZFJyxcbiAgICAnSU5ERVgnLFxuICAgICdJTkhFUklUJyxcbiAgICAnSU5ORVInLFxuICAgICdJTk9VVCcsXG4gICAgJ0lOU0VOU0lUSVZFJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAnSVNPQklEJyxcbiAgICAnSVRFUkFURScsXG4gICAgJ0pBUicsXG4gICAgJ0tFRVAnLFxuICAgICdLRVknLFxuICAgICdMQU5HVUFHRScsXG4gICAgJ0xBU1QnLFxuICAgICdMQ19DVFlQRScsXG4gICAgJ0xFQVZFJyxcbiAgICAnTElLRScsXG4gICAgJ0xPQ0FMJyxcbiAgICAnTE9DQUxFJyxcbiAgICAnTE9DQVRPUicsXG4gICAgJ0xPQ0FUT1JTJyxcbiAgICAnTE9DSycsXG4gICAgJ0xPQ0tNQVgnLFxuICAgICdMT0NLU0laRScsXG4gICAgJ0xPTkcnLFxuICAgICdMT09QJyxcbiAgICAnTUFJTlRBSU5FRCcsXG4gICAgJ01BVEVSSUFMSVpFRCcsXG4gICAgJ01JQ1JPU0VDT05EUycsXG4gICAgJ01JTlVURU1JTlVURVMnLFxuICAgICdNT0RJRklFUycsXG4gICAgJ01PTlRIUycsXG4gICAgJ05FWFQnLFxuICAgICdORVhUVkFMJyxcbiAgICAnTk8nLFxuICAgICdOT05FJyxcbiAgICAnTk9UJyxcbiAgICAnTlVMTCcsXG4gICAgJ05VTExTJyxcbiAgICAnTlVNUEFSVFMnLFxuICAgICdPQklEJyxcbiAgICAnT0YnLFxuICAgICdPTEQnLFxuICAgICdPTiBERUxFVEUnLFxuICAgICdPTiBVUERBVEUnLFxuICAgICdPUFRJTUlaQVRJT04nLFxuICAgICdPUFRJTUlaRScsXG4gICAgJ09SREVSJyxcbiAgICAnT1JHQU5JWkFUSU9OJyxcbiAgICAnT1VUJyxcbiAgICAnT1VURVInLFxuICAgICdQQUNLQUdFJyxcbiAgICAnUEFSQU1FVEVSJyxcbiAgICAnUEFSVCcsXG4gICAgJ1BBRERFRCcsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BBUlRJVElPTkVEJyxcbiAgICAnUEFSVElUSU9OSU5HJyxcbiAgICAnUEFUSCcsXG4gICAgJ1BJRUNFU0laRScsXG4gICAgJ1BFUklPRCcsXG4gICAgJ1BMQU4nLFxuICAgICdQUkVDSVNJT04nLFxuICAgICdQUkVWVkFMJyxcbiAgICAnUFJJT1InLFxuICAgICdQUklRVFknLFxuICAgICdQUklWSUxFR0VTJyxcbiAgICAnUFJPQ0VEVVJFJyxcbiAgICAnUFJPR1JBTScsXG4gICAgJ1BTSUQnLFxuICAgICdQVUJMSUMnLFxuICAgICdRVUVSWScsXG4gICAgJ1FVRVJZTk8nLFxuICAgICdSRUFEUycsXG4gICAgJ1JFRkVSRU5DRVMnLFxuICAgICdSRVNJR05BTCcsXG4gICAgJ1JFU1RSSUNUJyxcbiAgICAnUkVTVUxUJyxcbiAgICAnUkVTVUxUX1NFVF9MT0NBVE9SJyxcbiAgICAnUkVUVVJOJyxcbiAgICAnUkVUVVJOUycsXG4gICAgJ1JPTEUnLFxuICAgICdST0xMVVAnLFxuICAgICdST1VORF9DRUlMSU5HJyxcbiAgICAnUk9VTkRfRE9XTicsXG4gICAgJ1JPVU5EX0ZMT09SJyxcbiAgICAnUk9VTkRfSEFMRl9ET1dOJyxcbiAgICAnUk9VTkRfSEFMRl9FVkVOJyxcbiAgICAnUk9VTkRfSEFMRl9VUCcsXG4gICAgJ1JPVU5EX1VQJyxcbiAgICAnUk9XJyxcbiAgICAnUk9XU0VUJyxcbiAgICAnU0NIRU1BJyxcbiAgICAnU0NSQVRDSFBBRCcsXG4gICAgJ1NFQ09ORFMnLFxuICAgICdTRUNRVFknLFxuICAgICdTRUNVUklUWScsXG4gICAgJ1NFUVVFTkNFJyxcbiAgICAnU0VOU0lUSVZFJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0lNUExFJyxcbiAgICAnU09NRScsXG4gICAgJ1NPVVJDRScsXG4gICAgJ1NQRUNJRklDJyxcbiAgICAnU1RBTkRBUkQnLFxuICAgICdTVEFUSUMnLFxuICAgICdTVEFURU1FTlQnLFxuICAgICdTVEFZJyxcbiAgICAnU1RPR1JPVVAnLFxuICAgICdTVE9SRVMnLFxuICAgICdTVFlMRScsXG4gICAgJ1NVTU1BUlknLFxuICAgICdTWU5PTllNJyxcbiAgICAnU1lTREFURScsXG4gICAgJ1NZU1RFTScsXG4gICAgJ1NZU1RJTUVTVEFNUCcsXG4gICAgJ1RBQkxFJyxcbiAgICAnVEFCTEVTUEFDRScsXG4gICAgJ1RIRU4nLFxuICAgICdUTycsXG4gICAgJ1RSSUdHRVInLFxuICAgICdUWVBFJyxcbiAgICAnVU5ETycsXG4gICAgJ1VOSVFVRScsXG4gICAgJ1VOVElMJyxcbiAgICAnVVNFUicsXG4gICAgJ1ZBTElEUFJPQycsXG4gICAgJ1ZBUklBQkxFJyxcbiAgICAnVkFSSUFOVCcsXG4gICAgJ1ZDQVQnLFxuICAgICdWRVJTSU9OSU5HJyxcbiAgICAnVklFVycsXG4gICAgJ1ZPTEFUSUxFJyxcbiAgICAnVk9MVU1FUycsXG4gICAgJ1dISUxFJyxcbiAgICAnV0xNJyxcbiAgICAnWE1MRVhJU1RTJyxcbiAgICAnWE1MQ0FTVCcsXG4gICAgJ1lFQVJTJyxcbiAgICAnWk9ORScsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LmlibS5jb20vZG9jcy9lbi9kYjItZm9yLXpvcy8xMT90b3BpYz11dGlsaXRpZXMtZGIyLW9ubGluZVxuICBvbmxpbmVVdGlsaWVzOiBbXG4gICAgJ0JBQ0tVUCBTWVNURU0nLFxuICAgICdDQVRFTkZNJyxcbiAgICAnQ0FUTUFJTlQnLFxuICAgICdDSEVDSyBEQVRBJyxcbiAgICAnQ0hFQ0sgSU5ERVgnLFxuICAgICdDSEVDSyBMT0InLFxuICAgICdDT1BZJyxcbiAgICAnQ09QWVRPQ09QWScsXG4gICAgJ0RJQUdOT1NFJyxcbiAgICAnRVhFQyBTUUwnLFxuICAgICdMSVNUREVGJyxcbiAgICAnTE9BRCcsXG4gICAgJ01FUkdFQ09QWScsXG4gICAgJ01PRElGWSBSRUNPVkVSWScsXG4gICAgJ01PRElGWSBTVEFUSVNUSUNTJyxcbiAgICAnT1BUSU9OUycsXG4gICAgJ1FVSUVTQ0UnLFxuICAgICdSRUJVSUxEIElOREVYJyxcbiAgICAnUkVDT1ZFUicsXG4gICAgJ1JFT1JHIElOREVYJyxcbiAgICAnUkVPUkcgVEFCTEVTUEFDRScsXG4gICAgJ1JFUEFJUicsXG4gICAgJ1JFUE9SVCcsXG4gICAgJ1JFU1RPUkUgU1lTVEVNJyxcbiAgICAnUlVOU1RBVFMnLFxuICAgICdTVE9TUEFDRScsXG4gICAgJ1RFTVBMQVRFJyxcbiAgICAnVU5MT0FEJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cuaWJtLmNvbS9kb2NzL2VuL2RiMi1mb3Item9zLzExP3RvcGljPWRiMi1jb21tYW5kc1xuICBjb21tYW5kczogW1xuICAgICdBQkVORCcsXG4gICAgJ0FDQ0VTUyBEQVRBQkFTRScsXG4gICAgJ0FMVEVSIEJVRkZFUlBPT0wnLFxuICAgICdBTFRFUiBHUk9VUEJVRkZFUlBPT0wnLFxuICAgICdBTFRFUiBVVElMSVRZJyxcbiAgICAnQVJDSElWRSBMT0cnLFxuICAgICdCSU5EIFBBQ0tBR0UnLFxuICAgICdCSU5EIFBMQU4nLFxuICAgICdCSU5EIFFVRVJZJyxcbiAgICAnQklORCBTRVJWSUNFJyxcbiAgICAnQklORCcsXG4gICAgJ1JFQklORCcsXG4gICAgJ0NBTkNFTCBUSFJFQUQnLFxuICAgICdEQ0xHRU4nLFxuICAgICdESVNQTEFZIEFDQ0VMJyxcbiAgICAnRElTUExBWSBBUkNISVZFJyxcbiAgICAnRElTUExBWSBCTE9DS0VSUycsXG4gICAgJ0RJU1BMQVkgQlVGRkVSUE9PTCcsXG4gICAgJ0RJU1BMQVkgREFUQUJBU0UnLFxuICAgICdESVNQTEFZIERERicsXG4gICAgJ0RJU1BMQVkgRlVOQ1RJT04gU1BFQ0lGSUMnLFxuICAgICdESVNQTEFZIEdST1VQJyxcbiAgICAnRElTUExBWSBHUk9VUEJVRkZFUlBPT0wnLFxuICAgICdESVNQTEFZIExPQ0FUSU9OJyxcbiAgICAnRElTUExBWSBMT0cnLFxuICAgICdESVNQTEFZIFBST0NFRFVSRScsXG4gICAgJ0RJU1BMQVkgUFJPRklMRScsXG4gICAgJ0RJU1BMQVkgUkxJTUlUJyxcbiAgICAnRElTUExBWSBSRVNUU1ZDJyxcbiAgICAnRElTUExBWSBUSFJFQUQnLFxuICAgICdESVNQTEFZIFRSQUNFJyxcbiAgICAnRElTUExBWSBVVElMSVRZJyxcbiAgICAnRFNOJyxcbiAgICAnRFNOSCcsXG4gICAgJ0VORCcsXG4gICAgJ0ZSRUUgUEFDS0FHRScsXG4gICAgJ0ZSRUUgUExBTicsXG4gICAgJ0ZSRUUgUVVFUlknLFxuICAgICdGUkVFIFNFUlZJQ0UnLFxuICAgICdNT0RJRlkgYWRtdHByb2MsQVBQTD1TSFVURE9XTicsXG4gICAgJ01PRElGWSBhZG10cHJvYyxBUFBMPVRSQUNFJyxcbiAgICAnTU9ESUZZIERERicsXG4gICAgJ01PRElGWSBpcmxtcHJvYyxBQkVORCcsXG4gICAgJ01PRElGWSBpcmxtcHJvYyxESUFHJyxcbiAgICAnTU9ESUZZIGlybG1wcm9jLFBVUkdFJyxcbiAgICAnTU9ESUZZIGlybG1wcm9jLFNFVCcsXG4gICAgJ01PRElGWSBpcmxtcHJvYyxTVEFUVVMnLFxuICAgICdNT0RJRlkgVFJBQ0UnLFxuICAgICdSRUJJTkQgUEFDS0FHRScsXG4gICAgJ1JFQklORCBQTEFOJyxcbiAgICAnUkVCSU5EIFRSSUdHRVIgUEFDS0FHRScsXG4gICAgJ1JFQ09WRVIgQlNEUycsXG4gICAgJ1JFQ09WRVIgSU5ET1VCVCcsXG4gICAgJ1JFQ09WRVIgUE9TVFBPTkVEJyxcbiAgICAnUkVGUkVTSCBEQjIsRUFSTFknLFxuICAgICdSRVNFVCBHRU5FUklDTFUnLFxuICAgICdSRVNFVCBJTkRPVUJUJyxcbiAgICAnUlVOJyxcbiAgICAnU0VUIEFSQ0hJVkUnLFxuICAgICdTRVQgTE9HJyxcbiAgICAnU0VUIFNZU1BBUk0nLFxuICAgICdTUFVGSScsXG4gICAgJ1NUQVJUIEFDQ0VMJyxcbiAgICAnU1RBUlQgYWRtdHByb2MnLFxuICAgICdTVEFSVCBDRERTJyxcbiAgICAnU1RBUlQgREFUQUJBU0UnLFxuICAgICdTVEFSVCBEQjInLFxuICAgICdTVEFSVCBEREYnLFxuICAgICdTVEFSVCBGVU5DVElPTiBTUEVDSUZJQycsXG4gICAgJ1NUQVJUIGlybG1wcm9jJyxcbiAgICAnU1RBUlQgUFJPQ0VEVVJFJyxcbiAgICAnU1RBUlQgUFJPRklMRScsXG4gICAgJ1NUQVJUIFJMSU1JVCcsXG4gICAgJ1NUQVJUIFJFU1RTVkMnLFxuICAgICdTVEFSVCBUUkFDRScsXG4gICAgJ1NUT1AgQUNDRUwnLFxuICAgICdTVE9QIGFkbXRwcm9jJyxcbiAgICAnU1RPUCBDRERTJyxcbiAgICAnU1RPUCBEQVRBQkFTRScsXG4gICAgJ1NUT1AgREIyJyxcbiAgICAnU1RPUCBEREYnLFxuICAgICdTVE9QIEZVTkNUSU9OIFNQRUNJRklDJyxcbiAgICAnU1RPUCBpcmxtcHJvYycsXG4gICAgJ1NUT1AgUFJPQ0VEVVJFJyxcbiAgICAnU1RPUCBQUk9GSUxFJyxcbiAgICAnU1RPUCBSTElNSVQnLFxuICAgICdTVE9QIFJFU1RTVkMnLFxuICAgICdTVE9QIFRSQUNFJyxcbiAgICAnVEVSTSBVVElMSVRZJyxcbiAgICAnVFJBQ0UgQ1QnLFxuICBdLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL3d3dy5pYm0uY29tL2RvY3MvZW4vZGIyLWZvci16b3MvMTE/dG9waWM9c3RhdGVtZW50cy1saXN0LXN1cHBvcnRlZFxuY29uc3QgcmVzZXJ2ZWRDb21tYW5kcyA9IFtcbiAgJ0FMTE9DQVRFIENVUlNPUicsXG4gICdBTFRFUiBEQVRBQkFTRScsXG4gICdBTFRFUiBGVU5DVElPTicsXG4gICdBTFRFUiBJTkRFWCcsXG4gICdBTFRFUiBNQVNLJyxcbiAgJ0FMVEVSIFBFUk1JU1NJT04nLFxuICAnQUxURVIgUFJPQ0VEVVJFJyxcbiAgJ0FMVEVSIFNFUVVFTkNFJyxcbiAgJ0FMVEVSIFNUT0dST1VQJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFRBQkxFU1BBQ0UnLFxuICAnQUxURVIgVFJJR0dFUicsXG4gICdBTFRFUiBUUlVTVEVEIENPTlRFWFQnLFxuICAnQUxURVIgVklFVycsXG4gICdBU1NPQ0lBVEUgTE9DQVRPUlMnLFxuICAnQkVHSU4gREVDTEFSRSBTRUNUSU9OJyxcbiAgJ0NBTEwnLFxuICAnQ0xPU0UnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVQnLFxuICAnQ09OTkVDVCcsXG4gICdDUkVBVEUgQUxJQVMnLFxuICAnQ1JFQVRFIEFVWElMSUFSWSBUQUJMRScsXG4gICdDUkVBVEUgREFUQUJBU0UnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBHTE9CQUwgVEVNUE9SQVJZIFRBQkxFJyxcbiAgJ0NSRUFURSBJTkRFWCcsXG4gICdDUkVBVEUgTE9CIFRBQkxFU1BBQ0UnLFxuICAnQ1JFQVRFIE1BU0snLFxuICAnQ1JFQVRFIFBFUk1JU1NJT04nLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgUk9MRScsXG4gICdDUkVBVEUgU0VRVUVOQ0UnLFxuICAnQ1JFQVRFIFNUT0dST1VQJyxcbiAgJ0NSRUFURSBTWU5PTllNJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEVTUEFDRScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVFJVU1RFRCBDT05URVhUJyxcbiAgJ0NSRUFURSBUWVBFJyxcbiAgJ0NSRUFURSBWQVJJQUJMRScsXG4gICdDUkVBVEUgVklFVycsXG4gICdERUNMQVJFIENVUlNPUicsXG4gICdERUNMQVJFIEdMT0JBTCBURU1QT1JBUlkgVEFCTEUnLFxuICAnREVDTEFSRSBTVEFURU1FTlQnLFxuICAnREVDTEFSRSBUQUJMRScsXG4gICdERUNMQVJFIFZBUklBQkxFJyxcbiAgJ0RFTEVURScsXG4gICdERVNDUklCRSBDVVJTT1InLFxuICAnREVTQ1JJQkUgSU5QVVQnLFxuICAnREVTQ1JJQkUgT1VUUFVUJyxcbiAgJ0RFU0NSSUJFIFBST0NFRFVSRScsXG4gICdERVNDUklCRSBUQUJMRScsXG4gICdEUk9QJyxcbiAgJ0VORCBERUNMQVJFIFNFQ1RJT04nLFxuICAnRVhDSEFOR0UnLFxuICAnRVhFQ1VURScsXG4gICdFWEVDVVRFIElNTUVESUFURScsXG4gICdFWFBMQUlOJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZSRUUgTE9DQVRPUicsXG4gICdHRVQgRElBR05PU1RJQ1MnLFxuICAnR1JBTlQnLFxuICAnSE9MRCBMT0NBVE9SJyxcbiAgJ0lOQ0xVREUnLFxuICAnSU5TRVJUJyxcbiAgJ0xBQkVMJyxcbiAgJ0xPQ0sgVEFCTEUnLFxuICAnTUVSR0UnLFxuICAnT1BFTicsXG4gICdQUkVQQVJFJyxcbiAgJ1JFRlJFU0gnLFxuICAnUkVMRUFTRScsXG4gICdSRUxFQVNFIFNBVkVQT0lOVCcsXG4gICdSRU5BTUUnLFxuICAnUkVWT0tFJyxcbiAgJ1JPTExCQUNLJyxcbiAgJ1NBVkVQT0lOVCcsXG4gICdTRUxFQ1QnLFxuICAnU0VMRUNUIElOVE8nLFxuICAnU0VUIENPTk5FQ1RJT04nLFxuICAnU0VUJyxcbiAgJ1NFVCBDVVJSRU5UIEFDQ0VMRVJBVE9SJyxcbiAgJ1NFVCBDVVJSRU5UIEFQUExJQ0FUSU9OIENPTVBBVElCSUxJVFknLFxuICAnU0VUIENVUlJFTlQgQVBQTElDQVRJT04gRU5DT0RJTkcgU0NIRU1FJyxcbiAgJ1NFVCBDVVJSRU5UIERFQlVHIE1PREUnLFxuICAnU0VUIENVUlJFTlQgREVDRkxPQVQgUk9VTkRJTkcgTU9ERScsXG4gICdTRVQgQ1VSUkVOVCBERUdSRUUnLFxuICAnU0VUIENVUlJFTlQgRVhQTEFJTiBNT0RFJyxcbiAgJ1NFVCBDVVJSRU5UIEdFVF9BQ0NFTF9BUkNISVZFJyxcbiAgJ1NFVCBDVVJSRU5UIExPQ0FMRSBMQ19DVFlQRScsXG4gICdTRVQgQ1VSUkVOVCBNQUlOVEFJTkVEIFRBQkxFIFRZUEVTIEZPUiBPUFRJTUlaQVRJT04nLFxuICAnU0VUIENVUlJFTlQgT1BUSU1JWkFUSU9OIEhJTlQnLFxuICAnU0VUIENVUlJFTlQgUEFDS0FHRSBQQVRIJyxcbiAgJ1NFVCBDVVJSRU5UIFBBQ0tBR0VTRVQnLFxuICAnU0VUIENVUlJFTlQgUFJFQ0lTSU9OJyxcbiAgJ1NFVCBDVVJSRU5UIFFVRVJZIEFDQ0VMRVJBVElPTicsXG4gICdTRVQgQ1VSUkVOVCBRVUVSWSBBQ0NFTEVSQVRJT04gV0FJVEZPUkRBVEEnLFxuICAnU0VUIENVUlJFTlQgUkVGUkVTSCBBR0UnLFxuICAnU0VUIENVUlJFTlQgUk9VVElORSBWRVJTSU9OJyxcbiAgJ1NFVCBDVVJSRU5UIFJVTEVTJyxcbiAgJ1NFVCBDVVJSRU5UIFNRTElEJyxcbiAgJ1NFVCBDVVJSRU5UIFRFTVBPUkFMIEJVU0lORVNTX1RJTUUnLFxuICAnU0VUIENVUlJFTlQgVEVNUE9SQUwgU1lTVEVNX1RJTUUnLFxuICAnU0VUIEVOQ1JZUFRJT04gUEFTU1dPUkQnLFxuICAnU0VUIFBBVEgnLFxuICAnU0VUIFNDSEVNQScsXG4gICdTRVQgU0VTU0lPTiBUSU1FIFpPTkUnLFxuICAnU0lHTkFMJyxcbiAgJ1RSVU5DQVRFJyxcbiAgJ1VQREFURScsXG4gICdWQUxVRVMnLFxuICAnVkFMVUVTIElOVE8nLFxuICAnV0hFTkVWRVInLFxuICAvLyBvdGhlclxuICAnQUREJyxcbiAgJ0FMVEVSIENPTFVNTicsIC8vIHZlcmlmeVxuICAnQUZURVInLFxuICAnRFJPUCBUQUJMRScsIC8vIHZlcmlmeVxuICAnRkVUQ0ggRklSU1QnLFxuICAnRlJPTScsXG4gICdHUk9VUCBCWScsXG4gICdHTycsXG4gICdIQVZJTkcnLFxuICAnSU5TRVJUIElOVE8nLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1NFTEVDVCcsXG4gICdTRVQgQ1VSUkVOVCBTQ0hFTUEnLFxuICAnV0hFUkUnLFxuICAnV0lUSCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJywgJ0VMU0VJRiddO1xuXG4vLyBodHRwczovL3d3dy5pYm0uY29tL3N1cHBvcnQva25vd2xlZGdlY2VudGVyL2VuL3Nzd19pYm1faV83Mi9kYjIvcmJhZnppbnRyby5odG1cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERiMkZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJ107XG4gIHN0YXRpYyBmdWxsUmVzZXJ2ZWRXb3JkcyA9IGRlZHVwZShbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhyZXNlcnZlZEZ1bmN0aW9ucykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRLZXl3b3JkcykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICBdKTtcblxuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbYFwiXCJgLCBcIicnXCIsICdgYCcsICdbXScsIFwieCcnXCJdO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCddO1xuICBzdGF0aWMgYmxvY2tFbmQgPSBbJyknXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJzonXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBhbnk6ICcjQCcgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnKionLCAnIT4nLCAnITwnLCAnfHwnXTtcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogRGIyRm9ybWF0dGVyLnJlc2VydmVkQ29tbWFuZHMsXG4gICAgICByZXNlcnZlZEJpbmFyeUNvbW1hbmRzOiBEYjJGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogRGIyRm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IERiMkZvcm1hdHRlci5yZXNlcnZlZEpvaW5Db25kaXRpb25zLFxuICAgICAgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzOiBEYjJGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogRGIyRm9ybWF0dGVyLmZ1bGxSZXNlcnZlZFdvcmRzLFxuICAgICAgc3RyaW5nVHlwZXM6IERiMkZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IERiMkZvcm1hdHRlci5ibG9ja1N0YXJ0LFxuICAgICAgYmxvY2tFbmQ6IERiMkZvcm1hdHRlci5ibG9ja0VuZCxcbiAgICAgIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzOiBEYjJGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IERiMkZvcm1hdHRlci5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBsaW5lQ29tbWVudFR5cGVzOiBEYjJGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIHNwZWNpYWxXb3JkQ2hhcnM6IERiMkZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBEYjJGb3JtYXR0ZXIub3BlcmF0b3JzLFxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgRm9ybWF0dGVyIGZyb20gJy4uL2NvcmUvRm9ybWF0dGVyJztcbmltcG9ydCBUb2tlbml6ZXIgZnJvbSAnLi4vY29yZS9Ub2tlbml6ZXInO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdQYXR0ZXJuVHlwZSB9IGZyb20gJy4uL2NvcmUvcmVnZXhGYWN0b3J5JztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG4vLyBodHRwczovL2N3aWtpLmFwYWNoZS5vcmcvY29uZmx1ZW5jZS9kaXNwbGF5L0hpdmUvTGFuZ3VhZ2VNYW51YWwrVURGXG5jb25zdCByZXNlcnZlZEZ1bmN0aW9ucyA9IHtcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQVNJTicsXG4gICAgJ0FUQU4nLFxuICAgICdCSU4nLFxuICAgICdCUk9VTkQnLFxuICAgICdDQlJUJyxcbiAgICAnQ0VJTCcsXG4gICAgJ0NFSUxJTkcnLFxuICAgICdDT05WJyxcbiAgICAnQ09TJyxcbiAgICAnREVHUkVFUycsXG4gICAgLy8gJ0UnLFxuICAgICdFWFAnLFxuICAgICdGQUNUT1JJQUwnLFxuICAgICdGTE9PUicsXG4gICAgJ0dSRUFURVNUJyxcbiAgICAnSEVYJyxcbiAgICAnTEVBU1QnLFxuICAgICdMTicsXG4gICAgJ0xPRycsXG4gICAgJ0xPRzEwJyxcbiAgICAnTE9HMicsXG4gICAgJ05FR0FUSVZFJyxcbiAgICAnUEknLFxuICAgICdQTU9EJyxcbiAgICAnUE9TSVRJVkUnLFxuICAgICdQT1cnLFxuICAgICdQT1dFUicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQU5EJyxcbiAgICAnUk9VTkQnLFxuICAgICdTSElGVExFRlQnLFxuICAgICdTSElGVFJJR0hUJyxcbiAgICAnU0hJRlRSSUdIVFVOU0lHTkVEJyxcbiAgICAnU0lHTicsXG4gICAgJ1NJTicsXG4gICAgJ1NRUlQnLFxuICAgICdUQU4nLFxuICAgICdVTkhFWCcsXG4gICAgJ1dJRFRIX0JVQ0tFVCcsXG4gIF0sXG4gIGFycmF5OiBbJ0FSUkFZX0NPTlRBSU5TJywgJ01BUF9LRVlTJywgJ01BUF9WQUxVRVMnLCAnU0laRScsICdTT1JUX0FSUkFZJ10sXG4gIGNvbnZlcnNpb246IFsnQklOQVJZJywgJ0NBU1QnXSxcbiAgZGF0ZTogW1xuICAgICdBRERfTU9OVEhTJyxcbiAgICAnREFURScsXG4gICAgJ0RBVEVfQUREJyxcbiAgICAnREFURV9GT1JNQVQnLFxuICAgICdEQVRFX1NVQicsXG4gICAgJ0RBVEVESUZGJyxcbiAgICAnREFZJyxcbiAgICAnREFZTkFNRScsXG4gICAgJ0RBWU9GTU9OVEgnLFxuICAgICdEQVlPRllFQVInLFxuICAgICdFWFRSQUNUJyxcbiAgICAnRlJPTV9VTklYVElNRScsXG4gICAgJ0ZST01fVVRDX1RJTUVTVEFNUCcsXG4gICAgJ0hPVVInLFxuICAgICdMQVNUX0RBWScsXG4gICAgJ01JTlVURScsXG4gICAgJ01PTlRIJyxcbiAgICAnTU9OVEhTX0JFVFdFRU4nLFxuICAgICdORVhUX0RBWScsXG4gICAgJ1FVQVJURVInLFxuICAgICdTRUNPTkQnLFxuICAgICdUSU1FU1RBTVAnLFxuICAgICdUT19EQVRFJyxcbiAgICAnVE9fVVRDX1RJTUVTVEFNUCcsXG4gICAgJ1RSVU5DJyxcbiAgICAnVU5JWF9USU1FU1RBTVAnLFxuICAgICdXRUVLT0ZZRUFSJyxcbiAgICAnWUVBUicsXG4gIF0sXG4gIGNvbmRpdGlvbmFsOiBbJ0FTU0VSVF9UUlVFJywgJ0NPQUxFU0NFJywgJ0lGJywgJ0lTTk9UTlVMTCcsICdJU05VTEwnLCAnTlVMTElGJywgJ05WTCddLFxuICBzdHJpbmc6IFtcbiAgICAnQVNDSUknLFxuICAgICdCQVNFNjQnLFxuICAgICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgICAnQ0hSJyxcbiAgICAnQ09OQ0FUJyxcbiAgICAnQ09OQ0FUX1dTJyxcbiAgICAnQ09OVEVYVF9OR1JBTVMnLFxuICAgICdERUNPREUnLFxuICAgICdFTFQnLFxuICAgICdFTkNPREUnLFxuICAgICdGSUVMRCcsXG4gICAgJ0ZJTkRfSU5fU0VUJyxcbiAgICAnRk9STUFUX05VTUJFUicsXG4gICAgJ0dFVF9KU09OX09CSkVDVCcsXG4gICAgJ0lOX0ZJTEUnLFxuICAgICdJTklUQ0FQJyxcbiAgICAnSU5TVFInLFxuICAgICdMQ0FTRScsXG4gICAgJ0xFTkdUSCcsXG4gICAgJ0xFVkVOU0hURUlOJyxcbiAgICAnTE9DQVRFJyxcbiAgICAnTE9XRVInLFxuICAgICdMUEFEJyxcbiAgICAnTFRSSU0nLFxuICAgICdOR1JBTVMnLFxuICAgICdPQ1RFVF9MRU5HVEgnLFxuICAgICdQQVJTRV9VUkwnLFxuICAgICdQUklOVEYnLFxuICAgICdRVU9URScsXG4gICAgJ1JFR0VYUF9FWFRSQUNUJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVZFUlNFJyxcbiAgICAnUlBBRCcsXG4gICAgJ1JUUklNJyxcbiAgICAnU0VOVEVOQ0VTJyxcbiAgICAnU09VTkRFWCcsXG4gICAgJ1NQQUNFJyxcbiAgICAnU1BMSVQnLFxuICAgICdTVFJfVE9fTUFQJyxcbiAgICAnU1VCU1RSJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VDQVNFJyxcbiAgICAnVU5CQVNFNjQnLFxuICAgICdVUFBFUicsXG4gIF0sXG4gIG1hc2tpbmc6IFtcbiAgICAnTUFTSycsXG4gICAgJ01BU0tfRklSU1RfTicsXG4gICAgJ01BU0tfSEFTSCcsXG4gICAgJ01BU0tfTEFTVF9OJyxcbiAgICAnTUFTS19TSE9XX0ZJUlNUX04nLFxuICAgICdNQVNLX1NIT1dfTEFTVF9OJyxcbiAgXSxcbiAgbWlzYzogW1xuICAgICdBRVNfREVDUllQVCcsXG4gICAgJ0FFU19FTkNSWVBUJyxcbiAgICAnQ1JDMzInLFxuICAgICdDVVJSRU5UX0RBVEFCQVNFJyxcbiAgICAnQ1VSUkVOVF9VU0VSJyxcbiAgICAnSEFTSCcsXG4gICAgJ0pBVkFfTUVUSE9EJyxcbiAgICAnTE9HR0VEX0lOX1VTRVInLFxuICAgICdNRDUnLFxuICAgICdSRUZMRUNUJyxcbiAgICAnU0hBJyxcbiAgICAnU0hBMScsXG4gICAgJ1NIQTInLFxuICAgICdTVVJST0dBVEVfS0VZJyxcbiAgICAnVkVSU0lPTicsXG4gIF0sXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBVkcnLFxuICAgICdDT0xMRUNUX0xJU1QnLFxuICAgICdDT0xMRUNUX1NFVCcsXG4gICAgJ0NPUlInLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVkFSX1BPUCcsXG4gICAgJ0NPVkFSX1NBTVAnLFxuICAgICdISVNUT0dSQU1fTlVNRVJJQycsXG4gICAgJ01BWCcsXG4gICAgJ01JTicsXG4gICAgJ05USUxFJyxcbiAgICAnUEVSQ0VOVElMRScsXG4gICAgJ1BFUkNFTlRJTEVfQVBQUk9YJyxcbiAgICAnUkVHUl9BVkdYJyxcbiAgICAnUkVHUl9BVkdZJyxcbiAgICAnUkVHUl9DT1VOVCcsXG4gICAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgICAnUkVHUl9SMicsXG4gICAgJ1JFR1JfU0xPUEUnLFxuICAgICdSRUdSX1NYWCcsXG4gICAgJ1JFR1JfU1hZJyxcbiAgICAnUkVHUl9TWVknLFxuICAgICdTVERERVZfUE9QJyxcbiAgICAnU1REREVWX1NBTVAnLFxuICAgICdTVU0nLFxuICAgICdWQVJfUE9QJyxcbiAgICAnVkFSX1NBTVAnLFxuICAgICdWQVJJQU5DRScsXG4gIF0sXG4gIHRhYmxlOiBbJ0VYUExPREUnLCAnSU5MSU5FJywgJ0pTT05fVFVQTEUnLCAnUEFSU0VfVVJMX1RVUExFJywgJ1BPU0VYUExPREUnLCAnU1RBQ0snXSxcbn07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbi8vIGh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvaGl2ZS9sYW5ndWFnZW1hbnVhbCtkZGxcbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIC8vIE5vbi1yZXNlcnZlZCBrZXl3b3JkcyBoYXZlIHByb3NjcmliZWQgbWVhbmluZ3MgaW4uIEhpdmVRTCwgYnV0IGNhbiBzdGlsbCBiZSB1c2VkIGFzIHRhYmxlIG9yIGNvbHVtbiBuYW1lc1xuICBub25SZXNlcnZlZDogW1xuICAgICdBREQnLFxuICAgICdBRE1JTicsXG4gICAgJ0FGVEVSJyxcbiAgICAnQU5BTFlaRScsXG4gICAgJ0FSQ0hJVkUnLFxuICAgICdBU0MnLFxuICAgICdCRUZPUkUnLFxuICAgICdCVUNLRVQnLFxuICAgICdCVUNLRVRTJyxcbiAgICAnQ0FTQ0FERScsXG4gICAgJ0NIQU5HRScsXG4gICAgJ0NMVVNURVInLFxuICAgICdDTFVTVEVSRUQnLFxuICAgICdDTFVTVEVSU1RBVFVTJyxcbiAgICAnQ09MTEVDVElPTicsXG4gICAgJ0NPTFVNTlMnLFxuICAgICdDT01NRU5UJyxcbiAgICAnQ09NUEFDVCcsXG4gICAgJ0NPTVBBQ1RJT05TJyxcbiAgICAnQ09NUFVURScsXG4gICAgJ0NPTkNBVEVOQVRFJyxcbiAgICAnQ09OVElOVUUnLFxuICAgICdEQVRBJyxcbiAgICAnREFUQUJBU0VTJyxcbiAgICAnREFURVRJTUUnLFxuICAgICdEQVknLFxuICAgICdEQlBST1BFUlRJRVMnLFxuICAgICdERUZFUlJFRCcsXG4gICAgJ0RFRklORUQnLFxuICAgICdERUxJTUlURUQnLFxuICAgICdERVBFTkRFTkNZJyxcbiAgICAnREVTQycsXG4gICAgJ0RJUkVDVE9SSUVTJyxcbiAgICAnRElSRUNUT1JZJyxcbiAgICAnRElTQUJMRScsXG4gICAgJ0RJU1RSSUJVVEUnLFxuICAgICdFTEVNX1RZUEUnLFxuICAgICdFTkFCTEUnLFxuICAgICdFU0NBUEVEJyxcbiAgICAnRVhDTFVTSVZFJyxcbiAgICAnRVhQTEFJTicsXG4gICAgJ0VYUE9SVCcsXG4gICAgJ0ZJRUxEUycsXG4gICAgJ0ZJTEUnLFxuICAgICdGSUxFRk9STUFUJyxcbiAgICAnRklSU1QnLFxuICAgICdGT1JNQVQnLFxuICAgICdGT1JNQVRURUQnLFxuICAgICdGVU5DVElPTlMnLFxuICAgICdIT0xEX0RETFRJTUUnLFxuICAgICdIT1VSJyxcbiAgICAnSURYUFJPUEVSVElFUycsXG4gICAgJ0lHTk9SRScsXG4gICAgJ0lOREVYJyxcbiAgICAnSU5ERVhFUycsXG4gICAgJ0lOUEFUSCcsXG4gICAgJ0lOUFVURFJJVkVSJyxcbiAgICAnSU5QVVRGT1JNQVQnLFxuICAgICdJVEVNUycsXG4gICAgJ0pBUicsXG4gICAgJ0tFWVMnLFxuICAgICdLRVlfVFlQRScsXG4gICAgJ0xJTUlUJyxcbiAgICAnTElORVMnLFxuICAgICdMT0FEJyxcbiAgICAnTE9DQVRJT04nLFxuICAgICdMT0NLJyxcbiAgICAnTE9DS1MnLFxuICAgICdMT0dJQ0FMJyxcbiAgICAnTE9ORycsXG4gICAgJ01BUEpPSU4nLFxuICAgICdNQVRFUklBTElaRUQnLFxuICAgICdNRVRBREFUQScsXG4gICAgJ01JTlVTJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9OVEgnLFxuICAgICdNU0NLJyxcbiAgICAnTk9TQ0FOJyxcbiAgICAnTk9fRFJPUCcsXG4gICAgJ09GRkxJTkUnLFxuICAgICdPUFRJT04nLFxuICAgICdPVVRQVVREUklWRVInLFxuICAgICdPVVRQVVRGT1JNQVQnLFxuICAgICdPVkVSV1JJVEUnLFxuICAgICdPV05FUicsXG4gICAgJ1BBUlRJVElPTkVEJyxcbiAgICAnUEFSVElUSU9OUycsXG4gICAgJ1BMVVMnLFxuICAgICdQUkVUVFknLFxuICAgICdQUklOQ0lQQUxTJyxcbiAgICAnUFJPVEVDVElPTicsXG4gICAgJ1BVUkdFJyxcbiAgICAnUkVBRCcsXG4gICAgJ1JFQURPTkxZJyxcbiAgICAnUkVCVUlMRCcsXG4gICAgJ1JFQ09SRFJFQURFUicsXG4gICAgJ1JFQ09SRFdSSVRFUicsXG4gICAgJ1JFTE9BRCcsXG4gICAgJ1JFTkFNRScsXG4gICAgJ1JFUEFJUicsXG4gICAgJ1JFUExBQ0UnLFxuICAgICdSRVBMSUNBVElPTicsXG4gICAgJ1JFU1RSSUNUJyxcbiAgICAnUkVXUklURScsXG4gICAgJ1JPTEUnLFxuICAgICdST0xFUycsXG4gICAgJ1NDSEVNQScsXG4gICAgJ1NDSEVNQVMnLFxuICAgICdTRUNPTkQnLFxuICAgICdTRU1JJyxcbiAgICAnU0VSREUnLFxuICAgICdTRVJERVBST1BFUlRJRVMnLFxuICAgICdTRVJWRVInLFxuICAgICdTRVRTJyxcbiAgICAnU0hBUkVEJyxcbiAgICAnU0hPVycsXG4gICAgJ1NIT1dfREFUQUJBU0UnLFxuICAgICdTS0VXRUQnLFxuICAgICdTT1JUJyxcbiAgICAnU09SVEVEJyxcbiAgICAnU1NMJyxcbiAgICAnU1RBVElTVElDUycsXG4gICAgJ1NUT1JFRCcsXG4gICAgJ1NUUkVBTVRBQkxFJyxcbiAgICAnU1RSSU5HJyxcbiAgICAnU1RSVUNUJyxcbiAgICAnVEFCTEVTJyxcbiAgICAnVEJMUFJPUEVSVElFUycsXG4gICAgJ1RFTVBPUkFSWScsXG4gICAgJ1RFUk1JTkFURUQnLFxuICAgICdUSU5ZSU5UJyxcbiAgICAnVE9VQ0gnLFxuICAgICdUUkFOU0FDVElPTlMnLFxuICAgICdVTkFSQ0hJVkUnLFxuICAgICdVTkRPJyxcbiAgICAnVU5JT05UWVBFJyxcbiAgICAnVU5MT0NLJyxcbiAgICAnVU5TRVQnLFxuICAgICdVTlNJR05FRCcsXG4gICAgJ1VSSScsXG4gICAgLy8gJ1VTRScsXG4gICAgJ1VUQycsXG4gICAgJ1VUQ1RJTUVTVEFNUCcsXG4gICAgJ1ZBTFVFX1RZUEUnLFxuICAgICdWSUVXJyxcbiAgICAnV0hJTEUnLFxuICAgICdZRUFSJyxcbiAgICAnQVVUT0NPTU1JVCcsXG4gICAgJ0lTT0xBVElPTicsXG4gICAgJ0xFVkVMJyxcbiAgICAnT0ZGU0VUJyxcbiAgICAnU05BUFNIT1QnLFxuICAgICdUUkFOU0FDVElPTicsXG4gICAgJ1dPUksnLFxuICAgICdXUklURScsXG4gICAgJ0FCT1JUJyxcbiAgICAnS0VZJyxcbiAgICAnTEFTVCcsXG4gICAgJ05PUkVMWScsXG4gICAgJ05PVkFMSURBVEUnLFxuICAgICdOVUxMUycsXG4gICAgJ1JFTFknLFxuICAgICdWQUxJREFURScsXG4gICAgJ0RFVEFJTCcsXG4gICAgJ0RPVycsXG4gICAgJ0VYUFJFU1NJT04nLFxuICAgICdPUEVSQVRPUicsXG4gICAgJ1FVQVJURVInLFxuICAgICdTVU1NQVJZJyxcbiAgICAnVkVDVE9SSVpBVElPTicsXG4gICAgJ1dFRUsnLFxuICAgICdZRUFSUycsXG4gICAgJ01PTlRIUycsXG4gICAgJ1dFRUtTJyxcbiAgICAnREFZUycsXG4gICAgJ0hPVVJTJyxcbiAgICAnTUlOVVRFUycsXG4gICAgJ1NFQ09ORFMnLFxuICAgICdUSU1FU1RBTVBUWicsXG4gICAgJ1pPTkUnLFxuICBdLFxuICByZXNlcnZlZDogW1xuICAgIC8vIHJlc2VydmVkXG4gICAgJ0FMTCcsXG4gICAgLy8gJ0FMVEVSJyxcbiAgICAvLyAnQU5EJyxcbiAgICAnQVJSQVknLFxuICAgICdBUycsXG4gICAgJ0FVVEhPUklaQVRJT04nLFxuICAgICdCRVRXRUVOJyxcbiAgICAnQklHSU5UJyxcbiAgICAnQklOQVJZJyxcbiAgICAnQk9PTEVBTicsXG4gICAgJ0JPVEgnLFxuICAgICdCWScsXG4gICAgLy8gJ0NBU0UnLFxuICAgICdDQVNUJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NPTFVNTicsXG4gICAgJ0NPTkYnLFxuICAgIC8vICdDUkVBVEUnLFxuICAgICdDUk9TUycsXG4gICAgJ0NVQkUnLFxuICAgICdDVVJSRU5UJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJTT1InLFxuICAgICdEQVRBQkFTRScsXG4gICAgJ0RBVEUnLFxuICAgICdERUNJTUFMJyxcbiAgICAnREVMRVRFJyxcbiAgICAvLyAnREVTQ1JJQkUnLFxuICAgICdESVNUSU5DVCcsXG4gICAgJ0RPVUJMRScsXG4gICAgLy8gJ0RST1AnLFxuICAgIC8vICdFTFNFJyxcbiAgICAvLyAnRU5EJyxcbiAgICAnRVhDSEFOR0UnLFxuICAgICdFWElTVFMnLFxuICAgICdFWFRFTkRFRCcsXG4gICAgJ0VYVEVSTkFMJyxcbiAgICAnRkFMU0UnLFxuICAgIC8vICdGRVRDSCcsXG4gICAgJ0ZMT0FUJyxcbiAgICAnRk9MTE9XSU5HJyxcbiAgICAnRk9SJyxcbiAgICAvLyAnRlJPTScsXG4gICAgJ0ZVTEwnLFxuICAgICdGVU5DVElPTicsXG4gICAgJ0dSQU5UJyxcbiAgICAvLyAnR1JPVVAnLFxuICAgICdHUk9VUElORycsXG4gICAgLy8gJ0hBVklORycsXG4gICAgJ0lGJyxcbiAgICAnSU1QT1JUJyxcbiAgICAnSU4nLFxuICAgICdJTk5FUicsXG4gICAgLy8gJ0lOU0VSVCcsXG4gICAgJ0lOVCcsXG4gICAgLy8gJ0lOVEVSU0VDVCcsXG4gICAgJ0lOVEVSVkFMJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAvLyAnSk9JTicsXG4gICAgJ0xBVEVSQUwnLFxuICAgICdMRUZUJyxcbiAgICAnTEVTUycsXG4gICAgJ0xJS0UnLFxuICAgICdMT0NBTCcsXG4gICAgJ01BQ1JPJyxcbiAgICAnTUFQJyxcbiAgICAnTU9SRScsXG4gICAgJ05PTkUnLFxuICAgICdOT1QnLFxuICAgICdOVUxMJyxcbiAgICAnT0YnLFxuICAgIC8vICdPTicsXG4gICAgLy8gJ09SJyxcbiAgICAnT1JERVInLFxuICAgICdPVVQnLFxuICAgICdPVVRFUicsXG4gICAgJ09WRVInLFxuICAgICdQQVJUSUFMU0NBTicsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BFUkNFTlQnLFxuICAgICdQUkVDRURJTkcnLFxuICAgICdQUkVTRVJWRScsXG4gICAgJ1BST0NFRFVSRScsXG4gICAgJ1JBTkdFJyxcbiAgICAnUkVBRFMnLFxuICAgICdSRURVQ0UnLFxuICAgICdSRVZPS0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JPTExVUCcsXG4gICAgJ1JPVycsXG4gICAgJ1JPV1MnLFxuICAgIC8vICdTRUxFQ1QnLFxuICAgICdTRVQnLFxuICAgICdTTUFMTElOVCcsXG4gICAgJ1RBQkxFJyxcbiAgICAnVEFCTEVTQU1QTEUnLFxuICAgICdUSEVOJyxcbiAgICAnVElNRVNUQU1QJyxcbiAgICAnVE8nLFxuICAgICdUUkFOU0ZPUk0nLFxuICAgICdUUklHR0VSJyxcbiAgICAnVFJVRScsXG4gICAgLy8gJ1RSVU5DQVRFJyxcbiAgICAnVU5CT1VOREVEJyxcbiAgICAvLyAnVU5JT04nLFxuICAgICdVTklRVUVKT0lOJyxcbiAgICAvLyAnVVBEQVRFJyxcbiAgICAnVVNFUicsXG4gICAgJ1VUQ19UTUVTVEFNUCcsXG4gICAgLy8gJ1ZBTFVFUycsXG4gICAgJ1ZBUkNIQVInLFxuICAgIC8vICdXSEVOJyxcbiAgICAvLyAnV0hFUkUnLFxuICAgICdXSU5ET1cnLFxuICAgIC8vICdXSVRIJyxcbiAgICAnQ09NTUlUJyxcbiAgICAnT05MWScsXG4gICAgJ1JFR0VYUCcsXG4gICAgJ1JMSUtFJyxcbiAgICAnUk9MTEJBQ0snLFxuICAgICdTVEFSVCcsXG4gICAgJ0NBQ0hFJyxcbiAgICAnQ09OU1RSQUlOVCcsXG4gICAgJ0ZPUkVJR04nLFxuICAgICdQUklNQVJZJyxcbiAgICAnUkVGRVJFTkNFUycsXG4gICAgJ0RBWU9GV0VFSycsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdGTE9PUicsXG4gICAgJ0lOVEVHRVInLFxuICAgICdQUkVDSVNJT04nLFxuICAgICdWSUVXUycsXG4gICAgJ1RJTUUnLFxuICAgICdOVU1FUklDJyxcbiAgICAnU1lOQycsXG4gIF0sXG4gIGZpbGVUeXBlczogW1xuICAgICdURVhURklMRScsXG4gICAgJ1NFUVVFTkNFRklMRScsXG4gICAgJ09SQycsXG4gICAgJ0NTVicsXG4gICAgJ1RTVicsXG4gICAgJ1BBUlFVRVQnLFxuICAgICdBVlJPJyxcbiAgICAnUkNGSUxFJyxcbiAgICAnSlNPTkZJTEUnLFxuICAgICdJTlBVVEZPUk1BVCcsXG4gICAgJ09VVFBVVEZPUk1BVCcsXG4gIF0sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gIC8vIGNvbW1hbmRzXG4gICdBTFRFUicsXG4gICdBTFRFUiBDT0xVTU4nLCAvLyBhZGRlZFxuICAnQUxURVIgVEFCTEUnLCAvLyBhZGRlZFxuICAnQ1JFQVRFJyxcbiAgJ0NSRUFURSBUQUJMRScsIC8vIGFkZGVkXG4gICdVU0UnLFxuICAnREVTQ1JJQkUnLFxuICAnRFJPUCcsXG4gICdEUk9QIFRBQkxFJywgLy8gYWRkZWRcbiAgJ0ZFVENIJyxcbiAgJ0ZST00nLFxuICAnR1JPVVAgQlknLFxuICAnSEFWSU5HJyxcbiAgJ0lOU0VSVCcsXG4gICdJTlNFUlQgSU5UTycsIC8vIGFkZGVkXG4gICdMSU1JVCcsXG4gICdPRkZTRVQnLFxuICAnT1JERVIgQlknLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCcsXG4gICdTRVQgU0NIRU1BJywgLy8gYWRkZWRcbiAgJ1NIT1cnLFxuICAnU09SVCBCWScsXG4gICdUUlVOQ0FURScsXG4gICdVUERBVEUnLFxuICAnVkFMVUVTJyxcbiAgJ1dIRVJFJyxcbiAgJ1dJVEgnLFxuXG4gIC8vIG5ld2xpbmUga2V5d29yZHNcbiAgJ1NUT1JFRCBBUycsXG4gICdTVE9SRUQgQlknLFxuICAnUk9XIEZPUk1BVCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdGVUxMIEpPSU4nLFxuICAnRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ0NST1NTIEpPSU4nLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAzXG4gKiBrZXl3b3JkcyB0aGF0IGZvbGxvdyBhIHByZXZpb3VzICdTdGF0ZW1lbnQnLCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vY3dpa2kuYXBhY2hlLm9yZy9jb25mbHVlbmNlL2Rpc3BsYXkvSGl2ZS9MYW5ndWFnZU1hbnVhbFxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSGl2ZUZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJ107XG4gIHN0YXRpYyBmdWxsUmVzZXJ2ZWRXb3JkcyA9IGRlZHVwZShbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhyZXNlcnZlZEZ1bmN0aW9ucykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRLZXl3b3JkcykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICBdKTtcblxuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbJ1wiXCInLCBcIicnXCIsICdgYCddO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0ge307XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBbJzw9PicsICc9PScsICd8fCddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBIaXZlRm9ybWF0dGVyLnJlc2VydmVkQ29tbWFuZHMsXG4gICAgICByZXNlcnZlZEJpbmFyeUNvbW1hbmRzOiBIaXZlRm9ybWF0dGVyLnJlc2VydmVkQmluYXJ5Q29tbWFuZHMsXG4gICAgICByZXNlcnZlZERlcGVuZGVudENsYXVzZXM6IEhpdmVGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogSGl2ZUZvcm1hdHRlci5yZXNlcnZlZEpvaW5Db25kaXRpb25zLFxuICAgICAgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzOiBIaXZlRm9ybWF0dGVyLnJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyxcbiAgICAgIHJlc2VydmVkS2V5d29yZHM6IEhpdmVGb3JtYXR0ZXIuZnVsbFJlc2VydmVkV29yZHMsXG4gICAgICBzdHJpbmdUeXBlczogSGl2ZUZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IEhpdmVGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBIaXZlRm9ybWF0dGVyLmJsb2NrRW5kLFxuICAgICAgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXM6IEhpdmVGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IEhpdmVGb3JtYXR0ZXIubmFtZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbGluZUNvbW1lbnRUeXBlczogSGl2ZUZvcm1hdHRlci5saW5lQ29tbWVudFR5cGVzLFxuICAgICAgc3BlY2lhbFdvcmRDaGFyczogSGl2ZUZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBIaXZlRm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IEZvcm1hdHRlciBmcm9tICcuLi9jb3JlL0Zvcm1hdHRlcic7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gJy4uL2NvcmUvVG9rZW5pemVyJztcbmltcG9ydCB7IGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUgfSBmcm9tICcuLi9jb3JlL3Rva2VuJztcbmltcG9ydCB0eXBlIHsgU3RyaW5nUGF0dGVyblR5cGUgfSBmcm9tICcuLi9jb3JlL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBkZWR1cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCBmdW5jdGlvbnNcbiAqIGRpc3RpbmN0IGZyb20gS2V5d29yZHMgZHVlIHRvIGludGVyYWN0aW9uIHdpdGggcGFyZW50aGVzZXNcbiAqL1xuLy8gaHR0cHM6Ly9tYXJpYWRiLmNvbS9rYi9lbi9pbmZvcm1hdGlvbi1zY2hlbWEtc3FsX2Z1bmN0aW9ucy10YWJsZS9cbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0gW1xuICAnQUREREFURScsXG4gICdBRERfTU9OVEhTJyxcbiAgJ0JJVF9BTkQnLFxuICAnQklUX09SJyxcbiAgJ0JJVF9YT1InLFxuICAnQ0FTVCcsXG4gICdDT1VOVCcsXG4gICdDVU1FX0RJU1QnLFxuICAnQ1VSREFURScsXG4gICdDVVJUSU1FJyxcbiAgJ0RBVEVfQUREJyxcbiAgJ0RBVEVfU1VCJyxcbiAgJ0RBVEVfRk9STUFUJyxcbiAgJ0RFQ09ERScsXG4gICdERU5TRV9SQU5LJyxcbiAgJ0VYVFJBQ1QnLFxuICAnRklSU1RfVkFMVUUnLFxuICAnR1JPVVBfQ09OQ0FUJyxcbiAgJ0pTT05fQVJSQVlBR0cnLFxuICAnSlNPTl9PQkpFQ1RBR0cnLFxuICAnTEFHJyxcbiAgJ0xFQUQnLFxuICAnTUFYJyxcbiAgJ01FRElBTicsXG4gICdNSUQnLFxuICAnTUlOJyxcbiAgJ05PVycsXG4gICdOVEhfVkFMVUUnLFxuICAnTlRJTEUnLFxuICAnUE9TSVRJT04nLFxuICAnUEVSQ0VOVF9SQU5LJyxcbiAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICdQRVJDRU5USUxFX0RJU0MnLFxuICAnUkFOSycsXG4gICdST1dfTlVNQkVSJyxcbiAgJ1NFU1NJT05fVVNFUicsXG4gICdTVEQnLFxuICAnU1REREVWJyxcbiAgJ1NURERFVl9QT1AnLFxuICAnU1REREVWX1NBTVAnLFxuICAnU1VCREFURScsXG4gICdTVUJTVFInLFxuICAnU1VCU1RSSU5HJyxcbiAgJ1NVTScsXG4gICdTWVNURU1fVVNFUicsXG4gICdUUklNJyxcbiAgJ1RSSU1fT1JBQ0xFJyxcbiAgJ1ZBUklBTkNFJyxcbiAgJ1ZBUl9QT1AnLFxuICAnVkFSX1NBTVAnLFxuICAnQUJTJyxcbiAgJ0FDT1MnLFxuICAnQUREVElNRScsXG4gICdBRVNfREVDUllQVCcsXG4gICdBRVNfRU5DUllQVCcsXG4gICdBU0lOJyxcbiAgJ0FUQU4nLFxuICAnQVRBTjInLFxuICAnQkVOQ0hNQVJLJyxcbiAgJ0JJTicsXG4gICdCSU5MT0dfR1RJRF9QT1MnLFxuICAnQklUX0NPVU5UJyxcbiAgJ0JJVF9MRU5HVEgnLFxuICAnQ0VJTCcsXG4gICdDRUlMSU5HJyxcbiAgJ0NIQVJBQ1RFUl9MRU5HVEgnLFxuICAnQ0hBUl9MRU5HVEgnLFxuICAnQ0hSJyxcbiAgJ0NPRVJDSUJJTElUWScsXG4gICdDT0xVTU5fQ0hFQ0snLFxuICAnQ09MVU1OX0VYSVNUUycsXG4gICdDT0xVTU5fTElTVCcsXG4gICdDT0xVTU5fSlNPTicsXG4gICdDT01QUkVTUycsXG4gICdDT05DQVQnLFxuICAnQ09OQ0FUX09QRVJBVE9SX09SQUNMRScsXG4gICdDT05DQVRfV1MnLFxuICAnQ09OTkVDVElPTl9JRCcsXG4gICdDT05WJyxcbiAgJ0NPTlZFUlRfVFonLFxuICAnQ09TJyxcbiAgJ0NPVCcsXG4gICdDUkMzMicsXG4gICdEQVRFRElGRicsXG4gICdEQVlOQU1FJyxcbiAgJ0RBWU9GTU9OVEgnLFxuICAnREFZT0ZXRUVLJyxcbiAgJ0RBWU9GWUVBUicsXG4gICdERUdSRUVTJyxcbiAgJ0RFQ09ERV9ISVNUT0dSQU0nLFxuICAnREVDT0RFX09SQUNMRScsXG4gICdERVNfREVDUllQVCcsXG4gICdERVNfRU5DUllQVCcsXG4gICdFTFQnLFxuICAnRU5DT0RFJyxcbiAgJ0VOQ1JZUFQnLFxuICAnRVhQJyxcbiAgJ0VYUE9SVF9TRVQnLFxuICAnRVhUUkFDVFZBTFVFJyxcbiAgJ0ZJRUxEJyxcbiAgJ0ZJTkRfSU5fU0VUJyxcbiAgJ0ZMT09SJyxcbiAgJ0ZPUk1BVCcsXG4gICdGT1VORF9ST1dTJyxcbiAgJ0ZST01fQkFTRTY0JyxcbiAgJ0ZST01fREFZUycsXG4gICdGUk9NX1VOSVhUSU1FJyxcbiAgJ0dFVF9MT0NLJyxcbiAgJ0dSRUFURVNUJyxcbiAgJ0hFWCcsXG4gICdJRk5VTEwnLFxuICAnSU5TVFInLFxuICAnSVNOVUxMJyxcbiAgJ0lTX0ZSRUVfTE9DSycsXG4gICdJU19VU0VEX0xPQ0snLFxuICAnSlNPTl9BUlJBWScsXG4gICdKU09OX0FSUkFZX0FQUEVORCcsXG4gICdKU09OX0FSUkFZX0lOU0VSVCcsXG4gICdKU09OX0NPTVBBQ1QnLFxuICAnSlNPTl9DT05UQUlOUycsXG4gICdKU09OX0NPTlRBSU5TX1BBVEgnLFxuICAnSlNPTl9ERVBUSCcsXG4gICdKU09OX0RFVEFJTEVEJyxcbiAgJ0pTT05fRVhJU1RTJyxcbiAgJ0pTT05fRVhUUkFDVCcsXG4gICdKU09OX0lOU0VSVCcsXG4gICdKU09OX0tFWVMnLFxuICAnSlNPTl9MRU5HVEgnLFxuICAnSlNPTl9MT09TRScsXG4gICdKU09OX01FUkdFJyxcbiAgJ0pTT05fTUVSR0VfUEFUQ0gnLFxuICAnSlNPTl9NRVJHRV9QUkVTRVJWRScsXG4gICdKU09OX1FVRVJZJyxcbiAgJ0pTT05fUVVPVEUnLFxuICAnSlNPTl9PQkpFQ1QnLFxuICAnSlNPTl9SRU1PVkUnLFxuICAnSlNPTl9SRVBMQUNFJyxcbiAgJ0pTT05fU0VUJyxcbiAgJ0pTT05fU0VBUkNIJyxcbiAgJ0pTT05fVFlQRScsXG4gICdKU09OX1VOUVVPVEUnLFxuICAnSlNPTl9WQUxJRCcsXG4gICdKU09OX1ZBTFVFJyxcbiAgJ0xBU1RfREFZJyxcbiAgJ0xBU1RfSU5TRVJUX0lEJyxcbiAgJ0xDQVNFJyxcbiAgJ0xFQVNUJyxcbiAgJ0xFTkdUSCcsXG4gICdMRU5HVEhCJyxcbiAgJ0xOJyxcbiAgJ0xPQURfRklMRScsXG4gICdMT0NBVEUnLFxuICAnTE9HJyxcbiAgJ0xPRzEwJyxcbiAgJ0xPRzInLFxuICAnTE9XRVInLFxuICAnTFBBRCcsXG4gICdMUEFEX09SQUNMRScsXG4gICdMVFJJTScsXG4gICdMVFJJTV9PUkFDTEUnLFxuICAnTUFLRURBVEUnLFxuICAnTUFLRVRJTUUnLFxuICAnTUFLRV9TRVQnLFxuICAnTUFTVEVSX0dUSURfV0FJVCcsXG4gICdNQVNURVJfUE9TX1dBSVQnLFxuICAnTUQ1JyxcbiAgJ01PTlRITkFNRScsXG4gICdOQU1FX0NPTlNUJyxcbiAgJ05WTCcsXG4gICdOVkwyJyxcbiAgJ05VTExJRicsXG4gICdPQ1QnLFxuICAnT0NURVRfTEVOR1RIJyxcbiAgJ09SRCcsXG4gICdQRVJJT0RfQUREJyxcbiAgJ1BFUklPRF9ESUZGJyxcbiAgJ1BJJyxcbiAgJ1BPVycsXG4gICdQT1dFUicsXG4gICdRVU9URScsXG4gICdSRUdFWFBfSU5TVFInLFxuICAnUkVHRVhQX1JFUExBQ0UnLFxuICAnUkVHRVhQX1NVQlNUUicsXG4gICdSQURJQU5TJyxcbiAgJ1JBTkQnLFxuICAnUkVMRUFTRV9BTExfTE9DS1MnLFxuICAnUkVMRUFTRV9MT0NLJyxcbiAgJ1JFUExBQ0VfT1JBQ0xFJyxcbiAgJ1JFVkVSU0UnLFxuICAnUk9VTkQnLFxuICAnUlBBRCcsXG4gICdSUEFEX09SQUNMRScsXG4gICdSVFJJTScsXG4gICdSVFJJTV9PUkFDTEUnLFxuICAnU0VDX1RPX1RJTUUnLFxuICAnU0hBJyxcbiAgJ1NIQTEnLFxuICAnU0hBMicsXG4gICdTSUdOJyxcbiAgJ1NJTicsXG4gICdTTEVFUCcsXG4gICdTT1VOREVYJyxcbiAgJ1NQQUNFJyxcbiAgJ1NRUlQnLFxuICAnU1RSQ01QJyxcbiAgJ1NUUl9UT19EQVRFJyxcbiAgJ1NVQlNUUl9PUkFDTEUnLFxuICAnU1VCU1RSSU5HX0lOREVYJyxcbiAgJ1NVQlRJTUUnLFxuICAnU1lTX0dVSUQnLFxuICAnVEFOJyxcbiAgJ1RJTUVESUZGJyxcbiAgJ1RJTUVfRk9STUFUJyxcbiAgJ1RJTUVfVE9fU0VDJyxcbiAgJ1RPX0JBU0U2NCcsXG4gICdUT19DSEFSJyxcbiAgJ1RPX0RBWVMnLFxuICAnVE9fU0VDT05EUycsXG4gICdVQ0FTRScsXG4gICdVTkNPTVBSRVNTJyxcbiAgJ1VOQ09NUFJFU1NFRF9MRU5HVEgnLFxuICAnVU5IRVgnLFxuICAnVU5JWF9USU1FU1RBTVAnLFxuICAnVVBEQVRFWE1MJyxcbiAgJ1VQUEVSJyxcbiAgJ1VVSUQnLFxuICAnVVVJRF9TSE9SVCcsXG4gICdWRVJTSU9OJyxcbiAgJ1dFRUtEQVknLFxuICAnV0VFS09GWUVBUicsXG4gICdXU1JFUF9MQVNUX1dSSVRURU5fR1RJRCcsXG4gICdXU1JFUF9MQVNUX1NFRU5fR1RJRCcsXG4gICdXU1JFUF9TWU5DX1dBSVRfVVBUT19HVElEJyxcbiAgJ1lFQVJXRUVLJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbi8vIGh0dHBzOi8vbWFyaWFkYi5jb20va2IvZW4vaW5mb3JtYXRpb24tc2NoZW1hLWtleXdvcmRzLXRhYmxlL1xuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FDQ0VTU0lCTEUnLFxuICAnQUNDT1VOVCcsXG4gICdBQ1RJT04nLFxuICAnQURNSU4nLFxuICAnQUZURVInLFxuICAnQUdBSU5TVCcsXG4gICdBR0dSRUdBVEUnLFxuICAnQUxMJyxcbiAgJ0FMR09SSVRITScsXG4gICdBTFRFUicsXG4gICdBTFdBWVMnLFxuICAnQU5ZJyxcbiAgJ0FTJyxcbiAgJ0FTQycsXG4gICdBU0NJSScsXG4gICdBU0VOU0lUSVZFJyxcbiAgJ0FUJyxcbiAgJ0FUT01JQycsXG4gICdBVVRIT1JTJyxcbiAgJ0FVVE9fSU5DUkVNRU5UJyxcbiAgJ0FVVE9FWFRFTkRfU0laRScsXG4gICdBVVRPJyxcbiAgJ0FWRycsXG4gICdBVkdfUk9XX0xFTkdUSCcsXG4gICdCQUNLVVAnLFxuICAnQkVGT1JFJyxcbiAgJ0JFVFdFRU4nLFxuICAnQklHSU5UJyxcbiAgJ0JJTkFSWScsXG4gICdCSVQnLFxuICAnQkxPQicsXG4gICdCTE9DSycsXG4gICdCT0RZJyxcbiAgJ0JPT0wnLFxuICAnQk9PTEVBTicsXG4gICdCT1RIJyxcbiAgJ0JUUkVFJyxcbiAgJ0JZJyxcbiAgJ0JZVEUnLFxuICAnQ0FDSEUnLFxuICAnQ0FTQ0FERScsXG4gICdDQVNDQURFRCcsXG4gICdDQVRBTE9HX05BTUUnLFxuICAnQ0hBSU4nLFxuICAnQ0hBTkdFJyxcbiAgJ0NIQU5HRUQnLFxuICAnQ0hBUicsXG4gICdDSEFSQUNURVInLFxuICAnQ0hBUkFDVEVSIFNFVCcsXG4gICdDSEFSU0VUJyxcbiAgJ0NIRUNLJyxcbiAgJ0NIRUNLUE9JTlQnLFxuICAnQ0hFQ0tTVU0nLFxuICAnQ0lQSEVSJyxcbiAgJ0NMQVNTX09SSUdJTicsXG4gICdDTElFTlQnLFxuICAnQ0xPQicsXG4gICdDTE9TRScsXG4gICdDT0FMRVNDRScsXG4gICdDT0RFJyxcbiAgJ0NPTExBVEUnLFxuICAnQ09MTEFUSU9OJyxcbiAgJ0NPTFVNTicsXG4gICdDT0xVTU5fTkFNRScsXG4gICdDT0xVTU5TJyxcbiAgJ0NPTFVNTl9BREQnLFxuICAnQ09MVU1OX0NSRUFURScsXG4gICdDT0xVTU5fREVMRVRFJyxcbiAgJ0NPTFVNTl9HRVQnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVRURUQnLFxuICAnQ09NUEFDVCcsXG4gICdDT01QTEVUSU9OJyxcbiAgJ0NPTVBSRVNTRUQnLFxuICAnQ09OQ1VSUkVOVCcsXG4gICdDT05ESVRJT04nLFxuICAnQ09OTkVDVElPTicsXG4gICdDT05TSVNURU5UJyxcbiAgJ0NPTlNUUkFJTlQnLFxuICAnQ09OU1RSQUlOVF9DQVRBTE9HJyxcbiAgJ0NPTlNUUkFJTlRfTkFNRScsXG4gICdDT05TVFJBSU5UX1NDSEVNQScsXG4gICdDT05UQUlOUycsXG4gICdDT05URVhUJyxcbiAgJ0NPTlRJTlVFJyxcbiAgJ0NPTlRSSUJVVE9SUycsXG4gICdDT05WRVJUJyxcbiAgJ0NQVScsXG4gICdDUkVBVEUnLFxuICAnQ1JPU1MnLFxuICAnQ1VCRScsXG4gICdDVVJSRU5UJyxcbiAgJ0NVUlJFTlRfREFURScsXG4gICdDVVJSRU5UX1BPUycsXG4gICdDVVJSRU5UX1JPTEUnLFxuICAnQ1VSUkVOVF9USU1FJyxcbiAgJ0NVUlJFTlRfVElNRVNUQU1QJyxcbiAgJ0NVUlJFTlRfVVNFUicsXG4gICdDVVJTT1InLFxuICAnQ1VSU09SX05BTUUnLFxuICAnQ1lDTEUnLFxuICAnREFUQScsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBQkFTRVMnLFxuICAnREFUQUZJTEUnLFxuICAnREFURScsXG4gICdEQVRFVElNRScsXG4gICdEQVknLFxuICAnREFZX0hPVVInLFxuICAnREFZX01JQ1JPU0VDT05EJyxcbiAgJ0RBWV9NSU5VVEUnLFxuICAnREFZX1NFQ09ORCcsXG4gICdERUFMTE9DQVRFJyxcbiAgJ0RFQycsXG4gICdERUNJTUFMJyxcbiAgJ0RFQ0xBUkUnLFxuICAnREVGQVVMVCcsXG4gICdERUZJTkVSJyxcbiAgJ0RFTEFZRUQnLFxuICAnREVMQVlfS0VZX1dSSVRFJyxcbiAgJ0RFTEVURV9ET01BSU5fSUQnLFxuICAnREVTX0tFWV9GSUxFJyxcbiAgJ0RFVEVSTUlOSVNUSUMnLFxuICAnRElBR05PU1RJQ1MnLFxuICAnRElSRUNUT1JZJyxcbiAgJ0RJU0FCTEUnLFxuICAnRElTQ0FSRCcsXG4gICdESVNLJyxcbiAgJ0RJU1RJTkNUJyxcbiAgJ0RJU1RJTkNUUk9XJyxcbiAgJ0RJVicsXG4gICdET1VCTEUnLFxuICAnRE9fRE9NQUlOX0lEUycsXG4gICdEUk9QJyxcbiAgJ0RVQUwnLFxuICAnRFVNUEZJTEUnLFxuICAnRFVQTElDQVRFJyxcbiAgJ0RZTkFNSUMnLFxuICAnRUFDSCcsXG4gICdFTVBUWScsXG4gICdFTkFCTEUnLFxuICAnRU5DTE9TRUQnLFxuICAnRU5EUycsXG4gICdFTkdJTkUnLFxuICAnRU5HSU5FUycsXG4gICdFTlVNJyxcbiAgJ0VSUk9SJyxcbiAgJ0VSUk9SUycsXG4gICdFU0NBUEUnLFxuICAnRVNDQVBFRCcsXG4gICdFVkVOVCcsXG4gICdFVkVOVFMnLFxuICAnRVZFUlknLFxuICAnRVhBTUlORUQnLFxuICAnRVhDSEFOR0UnLFxuICAnRVhDTFVERScsXG4gICdFWENFUFRJT04nLFxuICAnRVhJU1RTJyxcbiAgJ0VYSVQnLFxuICAnRVhQQU5TSU9OJyxcbiAgJ0VYUElSRScsXG4gICdFWFBPUlQnLFxuICAnRVhURU5ERUQnLFxuICAnRVhURU5UX1NJWkUnLFxuICAnRkFMU0UnLFxuICAnRkFTVCcsXG4gICdGQVVMVFMnLFxuICAnRkVERVJBVEVEJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJRUxEUycsXG4gICdGSUxFJyxcbiAgJ0ZJUlNUJyxcbiAgJ0ZJWEVEJyxcbiAgJ0ZMT0FUJyxcbiAgJ0ZMT0FUNCcsXG4gICdGTE9BVDgnLFxuICAnRk9MTE9XSU5HJyxcbiAgJ0ZPTExPV1MnLFxuICAnRk9SJyxcbiAgJ0ZPUkNFJyxcbiAgJ0ZPUkVJR04nLFxuICAnRk9VTkQnLFxuICAnRlVMTCcsXG4gICdGVUxMVEVYVCcsXG4gICdGVU5DVElPTicsXG4gICdHRU5FUkFMJyxcbiAgJ0dFTkVSQVRFRCcsXG4gICdHRVRfRk9STUFUJyxcbiAgJ0dFVCcsXG4gICdHTE9CQUwnLFxuICAnR09UTycsXG4gICdHUkFOVFMnLFxuICAnR1JPVVAnLFxuICAnSEFSRCcsXG4gICdIQVNIJyxcbiAgJ0hJR0hfUFJJT1JJVFknLFxuICAnSElTVE9SWScsXG4gICdIT1NUJyxcbiAgJ0hPU1RTJyxcbiAgJ0hPVVInLFxuICAnSE9VUl9NSUNST1NFQ09ORCcsXG4gICdIT1VSX01JTlVURScsXG4gICdIT1VSX1NFQ09ORCcsXG4gIC8vICdJRCcsXG4gICdJREVOVElGSUVEJyxcbiAgJ0lGJyxcbiAgJ0lHTk9SRScsXG4gICdJR05PUkVEJyxcbiAgJ0lHTk9SRV9ET01BSU5fSURTJyxcbiAgJ0lHTk9SRV9TRVJWRVJfSURTJyxcbiAgJ0lNTUVESUFURScsXG4gICdJTVBPUlQnLFxuICAnSU4nLFxuICAnSU5DUkVNRU5UJyxcbiAgJ0lOREVYJyxcbiAgJ0lOREVYRVMnLFxuICAnSU5GSUxFJyxcbiAgJ0lOSVRJQUxfU0laRScsXG4gICdJTk5FUicsXG4gICdJTk9VVCcsXG4gICdJTlNFTlNJVElWRScsXG4gICdJTlNFUlRfTUVUSE9EJyxcbiAgJ0lOU1RBTEwnLFxuICAnSU5UJyxcbiAgJ0lOVDEnLFxuICAnSU5UMicsXG4gICdJTlQzJyxcbiAgJ0lOVDQnLFxuICAnSU5UOCcsXG4gICdJTlRFR0VSJyxcbiAgJ0lOVEVSVkFMJyxcbiAgJ0lOVklTSUJMRScsXG4gICdJTlRPJyxcbiAgJ0lPJyxcbiAgJ0lPX1RIUkVBRCcsXG4gICdJUEMnLFxuICAnSVMnLFxuICAnSVNPTEFUSU9OJyxcbiAgJ0lTT1BFTicsXG4gICdJU1NVRVInLFxuICAnSVRFUkFURScsXG4gICdJTlZPS0VSJyxcbiAgJ0pTT04nLFxuICAnSlNPTl9UQUJMRScsXG4gICdLRVknLFxuICAnS0VZUycsXG4gICdLRVlfQkxPQ0tfU0laRScsXG4gICdMQU5HVUFHRScsXG4gICdMQVNUJyxcbiAgJ0xBU1RfVkFMVUUnLFxuICAnTEFTVFZBTCcsXG4gICdMRUFESU5HJyxcbiAgJ0xFQVZFJyxcbiAgJ0xFQVZFUycsXG4gICdMRUZUJyxcbiAgJ0xFU1MnLFxuICAnTEVWRUwnLFxuICAnTElLRScsXG4gICdMSU5FQVInLFxuICAnTElORVMnLFxuICAnTElTVCcsXG4gICdMT0FEJyxcbiAgJ0xPQ0FMJyxcbiAgJ0xPQ0FMVElNRScsXG4gICdMT0NBTFRJTUVTVEFNUCcsXG4gICdMT0NLJyxcbiAgJ0xPQ0tFRCcsXG4gICdMT0NLUycsXG4gICdMT0dGSUxFJyxcbiAgJ0xPR1MnLFxuICAnTE9ORycsXG4gICdMT05HQkxPQicsXG4gICdMT05HVEVYVCcsXG4gICdMT09QJyxcbiAgJ0xPV19QUklPUklUWScsXG4gICdNQVNURVInLFxuICAnTUFTVEVSX0NPTk5FQ1RfUkVUUlknLFxuICAnTUFTVEVSX0RFTEFZJyxcbiAgJ01BU1RFUl9HVElEX1BPUycsXG4gICdNQVNURVJfSE9TVCcsXG4gICdNQVNURVJfTE9HX0ZJTEUnLFxuICAnTUFTVEVSX0xPR19QT1MnLFxuICAnTUFTVEVSX1BBU1NXT1JEJyxcbiAgJ01BU1RFUl9QT1JUJyxcbiAgJ01BU1RFUl9TRVJWRVJfSUQnLFxuICAnTUFTVEVSX1NTTCcsXG4gICdNQVNURVJfU1NMX0NBJyxcbiAgJ01BU1RFUl9TU0xfQ0FQQVRIJyxcbiAgJ01BU1RFUl9TU0xfQ0VSVCcsXG4gICdNQVNURVJfU1NMX0NJUEhFUicsXG4gICdNQVNURVJfU1NMX0NSTCcsXG4gICdNQVNURVJfU1NMX0NSTFBBVEgnLFxuICAnTUFTVEVSX1NTTF9LRVknLFxuICAnTUFTVEVSX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnLFxuICAnTUFTVEVSX1VTRVInLFxuICAnTUFTVEVSX1VTRV9HVElEJyxcbiAgJ01BU1RFUl9IRUFSVEJFQVRfUEVSSU9EJyxcbiAgJ01BVENIJyxcbiAgJ01BWF9DT05ORUNUSU9OU19QRVJfSE9VUicsXG4gICdNQVhfUVVFUklFU19QRVJfSE9VUicsXG4gICdNQVhfUk9XUycsXG4gICdNQVhfU0laRScsXG4gICdNQVhfU1RBVEVNRU5UX1RJTUUnLFxuICAnTUFYX1VQREFURVNfUEVSX0hPVVInLFxuICAnTUFYX1VTRVJfQ09OTkVDVElPTlMnLFxuICAnTUFYVkFMVUUnLFxuICAnTUVESVVNJyxcbiAgJ01FRElVTUJMT0InLFxuICAnTUVESVVNSU5UJyxcbiAgJ01FRElVTVRFWFQnLFxuICAnTUVNT1JZJyxcbiAgJ01FUkdFJyxcbiAgJ01FU1NBR0VfVEVYVCcsXG4gICdNSUNST1NFQ09ORCcsXG4gICdNSURETEVJTlQnLFxuICAnTUlHUkFURScsXG4gICdNSU5VUycsXG4gICdNSU5VVEUnLFxuICAnTUlOVVRFX01JQ1JPU0VDT05EJyxcbiAgJ01JTlVURV9TRUNPTkQnLFxuICAnTUlOVkFMVUUnLFxuICAnTUlOX1JPV1MnLFxuICAnTU9EJyxcbiAgJ01PREUnLFxuICAnTU9ESUZJRVMnLFxuICAnTU9ESUZZJyxcbiAgJ01PTklUT1InLFxuICAnTU9OVEgnLFxuICAnTVVURVgnLFxuICAnTVlTUUwnLFxuICAnTVlTUUxfRVJSTk8nLFxuICAnTkFNRScsXG4gICdOQU1FUycsXG4gICdOQVRJT05BTCcsXG4gICdOQVRVUkFMJyxcbiAgJ05DSEFSJyxcbiAgJ05FU1RFRCcsXG4gICdORVZFUicsXG4gICdORVcnLFxuICAnTkVYVCcsXG4gICdORVhUVkFMJyxcbiAgJ05PJyxcbiAgJ05PTUFYVkFMVUUnLFxuICAnTk9NSU5WQUxVRScsXG4gICdOT0NBQ0hFJyxcbiAgJ05PQ1lDTEUnLFxuICAnTk9fV0FJVCcsXG4gICdOT1dBSVQnLFxuICAnTk9ERUdST1VQJyxcbiAgJ05PTkUnLFxuICAnTk9UJyxcbiAgJ05PVEZPVU5EJyxcbiAgJ05PX1dSSVRFX1RPX0JJTkxPRycsXG4gICdOVUxMJyxcbiAgJ05VTUJFUicsXG4gICdOVU1FUklDJyxcbiAgJ05WQVJDSEFSJyxcbiAgJ09GJyxcbiAgJ09GRlNFVCcsXG4gICdPTERfUEFTU1dPUkQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkUnLFxuICAnT05MSU5FJyxcbiAgJ09OTFknLFxuICAnT1BFTicsXG4gICdPUFRJTUlaRScsXG4gICdPUFRJT05TJyxcbiAgJ09QVElPTicsXG4gICdPUFRJT05BTExZJyxcbiAgJ09SREVSJyxcbiAgJ09SRElOQUxJVFknLFxuICAnT1RIRVJTJyxcbiAgJ09VVCcsXG4gICdPVVRFUicsXG4gICdPVVRGSUxFJyxcbiAgJ09WRVInLFxuICAnT1ZFUkxBUFMnLFxuICAnT1dORVInLFxuICAnUEFDS0FHRScsXG4gICdQQUNLX0tFWVMnLFxuICAnUEFHRScsXG4gICdQQUdFX0NIRUNLU1VNJyxcbiAgJ1BBUlNFUicsXG4gICdQQVJTRV9WQ09MX0VYUFInLFxuICAnUEFUSCcsXG4gICdQRVJJT0QnLFxuICAnUEFSVElBTCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFSVElUSU9OSU5HJyxcbiAgJ1BBUlRJVElPTlMnLFxuICAnUEFTU1dPUkQnLFxuICAnUEVSU0lTVEVOVCcsXG4gICdQSEFTRScsXG4gICdQTFVHSU4nLFxuICAnUExVR0lOUycsXG4gICdQT1JUJyxcbiAgJ1BPUlRJT04nLFxuICAnUFJFQ0VERVMnLFxuICAnUFJFQ0VESU5HJyxcbiAgJ1BSRUNJU0lPTicsXG4gICdQUkVTRVJWRScsXG4gICdQUkVWJyxcbiAgJ1BSRVZJT1VTJyxcbiAgJ1BSSU1BUlknLFxuICAnUFJJVklMRUdFUycsXG4gICdQUk9DRURVUkUnLFxuICAnUFJPQ0VTUycsXG4gICdQUk9DRVNTTElTVCcsXG4gICdQUk9GSUxFJyxcbiAgJ1BST0ZJTEVTJyxcbiAgJ1BST1hZJyxcbiAgJ1BVUkdFJyxcbiAgJ1FVQVJURVInLFxuICAnUVVFUlknLFxuICAnUVVJQ0snLFxuICAnUkFJU0UnLFxuICAnUkFOR0UnLFxuICAnUkFXJyxcbiAgJ1JFQUQnLFxuICAnUkVBRF9PTkxZJyxcbiAgJ1JFQURfV1JJVEUnLFxuICAnUkVBRFMnLFxuICAnUkVBTCcsXG4gICdSRUJVSUxEJyxcbiAgJ1JFQ09WRVInLFxuICAnUkVDVVJTSVZFJyxcbiAgJ1JFRE9fQlVGRkVSX1NJWkUnLFxuICAnUkVET0ZJTEUnLFxuICAnUkVEVU5EQU5UJyxcbiAgJ1JFRkVSRU5DRVMnLFxuICAnUkVHRVhQJyxcbiAgJ1JFTEFZJyxcbiAgJ1JFTEFZTE9HJyxcbiAgJ1JFTEFZX0xPR19GSUxFJyxcbiAgJ1JFTEFZX0xPR19QT1MnLFxuICAnUkVMQVlfVEhSRUFEJyxcbiAgJ1JFTEVBU0UnLFxuICAnUkVMT0FEJyxcbiAgJ1JFTU9WRScsXG4gICdSRU5BTUUnLFxuICAnUkVPUkdBTklaRScsXG4gICdSRVBBSVInLFxuICAnUkVQRUFUQUJMRScsXG4gICdSRVBMQVknLFxuICAnUkVQTElDQScsXG4gICdSRVBMSUNBUycsXG4gICdSRVBMSUNBX1BPUycsXG4gICdSRVBMSUNBVElPTicsXG4gICdSRVBFQVQnLFxuICAnUkVRVUlSRScsXG4gICdSRVNFVCcsXG4gICdSRVNUQVJUJyxcbiAgJ1JFU1RPUkUnLFxuICAnUkVTVFJJQ1QnLFxuICAnUkVTVU1FJyxcbiAgJ1JFVFVSTkVEX1NRTFNUQVRFJyxcbiAgJ1JFVFVSTicsXG4gICdSRVRVUk5TJyxcbiAgJ1JFVVNFJyxcbiAgJ1JJR0hUJyxcbiAgJ1JMSUtFJyxcbiAgJ1JPTEUnLFxuICAnUk9MTFVQJyxcbiAgJ1JPVVRJTkUnLFxuICAnUk9XJyxcbiAgJ1JPV0NPVU5UJyxcbiAgJ1JPV05VTScsXG4gICdST1dTJyxcbiAgJ1JPV1RZUEUnLFxuICAnUk9XX0NPVU5UJyxcbiAgJ1JPV19GT1JNQVQnLFxuICAnUlRSRUUnLFxuICAnU0NIRURVTEUnLFxuICAnU0NIRU1BJyxcbiAgJ1NDSEVNQV9OQU1FJyxcbiAgJ1NDSEVNQVMnLFxuICAnU0VDT05EJyxcbiAgJ1NFQ09ORF9NSUNST1NFQ09ORCcsXG4gICdTRUNVUklUWScsXG4gICdTRU5TSVRJVkUnLFxuICAnU0VQQVJBVE9SJyxcbiAgJ1NFUVVFTkNFJyxcbiAgJ1NFUklBTCcsXG4gICdTRVJJQUxJWkFCTEUnLFxuICAnU0VTU0lPTicsXG4gICdTRVJWRVInLFxuICAnU0VUVkFMJyxcbiAgJ1NIQVJFJyxcbiAgJ1NJR05FRCcsXG4gICdTSU1QTEUnLFxuICAnU0tJUCcsXG4gICdTTEFWRScsXG4gICdTTEFWRVMnLFxuICAnU0xBVkVfUE9TJyxcbiAgJ1NMT1cnLFxuICAnU05BUFNIT1QnLFxuICAnU01BTExJTlQnLFxuICAnU09DS0VUJyxcbiAgJ1NPRlQnLFxuICAnU09NRScsXG4gICdTT05BTUUnLFxuICAnU09VTkRTJyxcbiAgJ1NPVVJDRScsXG4gICdTVEFHRScsXG4gICdTVE9SRUQnLFxuICAnU1BBVElBTCcsXG4gICdTUEVDSUZJQycsXG4gICdSRUZfU1lTVEVNX0lEJyxcbiAgJ1NRTCcsXG4gICdTUUxFWENFUFRJT04nLFxuICAnU1FMU1RBVEUnLFxuICAnU1FMV0FSTklORycsXG4gICdTUUxfQklHX1JFU1VMVCcsXG4gICdTUUxfQlVGRkVSX1JFU1VMVCcsXG4gICdTUUxfQ0FDSEUnLFxuICAnU1FMX0NBTENfRk9VTkRfUk9XUycsXG4gICdTUUxfTk9fQ0FDSEUnLFxuICAnU1FMX1NNQUxMX1JFU1VMVCcsXG4gICdTUUxfVEhSRUFEJyxcbiAgJ1NRTF9UU0lfU0VDT05EJyxcbiAgJ1NRTF9UU0lfTUlOVVRFJyxcbiAgJ1NRTF9UU0lfSE9VUicsXG4gICdTUUxfVFNJX0RBWScsXG4gICdTUUxfVFNJX1dFRUsnLFxuICAnU1FMX1RTSV9NT05USCcsXG4gICdTUUxfVFNJX1FVQVJURVInLFxuICAnU1FMX1RTSV9ZRUFSJyxcbiAgJ1NTTCcsXG4gICdTVEFSVCcsXG4gICdTVEFSVElORycsXG4gICdTVEFSVFMnLFxuICAnU1RBVEVNRU5UJyxcbiAgJ1NUQVRTX0FVVE9fUkVDQUxDJyxcbiAgJ1NUQVRTX1BFUlNJU1RFTlQnLFxuICAnU1RBVFNfU0FNUExFX1BBR0VTJyxcbiAgJ1NUQVRVUycsXG4gICdTVE9QJyxcbiAgJ1NUT1JBR0UnLFxuICAnU1RSSU5HJyxcbiAgJ1NVQkNMQVNTX09SSUdJTicsXG4gICdTVUJKRUNUJyxcbiAgJ1NVQlBBUlRJVElPTicsXG4gICdTVUJQQVJUSVRJT05TJyxcbiAgJ1NVUEVSJyxcbiAgJ1NVU1BFTkQnLFxuICAnU1dBUFMnLFxuICAnU1dJVENIRVMnLFxuICAnU1lTREFURScsXG4gICdTWVNURU0nLFxuICAnU1lTVEVNX1RJTUUnLFxuICAnVEFCTEUnLFxuICAnVEFCTEVfTkFNRScsXG4gICdUQUJMRVMnLFxuICAnVEFCTEVTUEFDRScsXG4gICdUQUJMRV9DSEVDS1NVTScsXG4gICdURU1QT1JBUlknLFxuICAnVEVNUFRBQkxFJyxcbiAgJ1RFUk1JTkFURUQnLFxuICAnVEVYVCcsXG4gICdUSEFOJyxcbiAgJ1RIRU4nLFxuICAnVElFUycsXG4gICdUSU1FJyxcbiAgJ1RJTUVTVEFNUCcsXG4gICdUSU1FU1RBTVBBREQnLFxuICAnVElNRVNUQU1QRElGRicsXG4gICdUSU5ZQkxPQicsXG4gICdUSU5ZSU5UJyxcbiAgJ1RJTllURVhUJyxcbiAgJ1RPJyxcbiAgJ1RSQUlMSU5HJyxcbiAgJ1RSQU5TQUNUSU9OJyxcbiAgJ1RSQU5TQUNUSU9OQUwnLFxuICAnVEhSRUFEUycsXG4gICdUUklHR0VSJyxcbiAgJ1RSSUdHRVJTJyxcbiAgJ1RSVUUnLFxuICAnVFlQRScsXG4gICdUWVBFUycsXG4gICdVTkJPVU5ERUQnLFxuICAnVU5DT01NSVRURUQnLFxuICAnVU5ERUZJTkVEJyxcbiAgJ1VORE9fQlVGRkVSX1NJWkUnLFxuICAnVU5ET0ZJTEUnLFxuICAnVU5ETycsXG4gICdVTklDT0RFJyxcbiAgJ1VOSVFVRScsXG4gICdVTktOT1dOJyxcbiAgJ1VOTE9DSycsXG4gICdVTklOU1RBTEwnLFxuICAnVU5TSUdORUQnLFxuICAnVU5USUwnLFxuICAnVVBHUkFERScsXG4gICdVU0FHRScsXG4gICdVU0VSJyxcbiAgJ1VTRVJfUkVTT1VSQ0VTJyxcbiAgJ1VTRV9GUk0nLFxuICAnVVRDX0RBVEUnLFxuICAnVVRDX1RJTUUnLFxuICAnVVRDX1RJTUVTVEFNUCcsXG4gICdWQUxVRScsXG4gICdWQVJCSU5BUlknLFxuICAnVkFSQ0hBUicsXG4gICdWQVJDSEFSQUNURVInLFxuICAnVkFSQ0hBUjInLFxuICAnVkFSSUFCTEVTJyxcbiAgJ1ZBUllJTkcnLFxuICAnVklBJyxcbiAgJ1ZJRVcnLFxuICAnVklSVFVBTCcsXG4gICdWSVNJQkxFJyxcbiAgJ1ZFUlNJT05JTkcnLFxuICAnV0FJVCcsXG4gICdXQVJOSU5HUycsXG4gICdXRUVLJyxcbiAgJ1dFSUdIVF9TVFJJTkcnLFxuICAnV0hJTEUnLFxuICAnV0lORE9XJyxcbiAgJ1dJVEhJTicsXG4gICdXSVRIT1VUJyxcbiAgJ1dPUksnLFxuICAnV1JBUFBFUicsXG4gICdXUklURScsXG4gICdYNTA5JyxcbiAgJ1hBJyxcbiAgJ1hNTCcsXG4gICdZRUFSJyxcbiAgJ1lFQVJfTU9OVEgnLFxuICAnWkVST0ZJTEwnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL21hcmlhZGIuY29tL2RvY3MvcmVmZXJlbmNlL21kYi9zcWwtc3RhdGVtZW50cy9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBTFRFUiBEQVRBQkFTRScsXG4gICdBTFRFUiBEQVRBQkFTRSBDT01NRU5UJyxcbiAgJ0FMVEVSIEVWRU5UJyxcbiAgJ0FMVEVSIEZVTkNUSU9OJyxcbiAgJ0FMVEVSIFBST0NFRFVSRScsXG4gICdBTFRFUiBTQ0hFTUEnLFxuICAnQUxURVIgU0NIRU1BIENPTU1FTlQnLFxuICAnQUxURVIgU0VRVUVOQ0UnLFxuICAnQUxURVIgU0VSVkVSJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFVTRVInLFxuICAnQUxURVIgVklFVycsXG4gICdBTkFMWVpFJyxcbiAgJ0FOQUxZWkUgVEFCTEUnLFxuICAnQkFDS1VQIExPQ0snLFxuICAnQkFDS1VQIFNUQUdFJyxcbiAgJ0JBQ0tVUCBVTkxPQ0snLFxuICAnQkVHSU4nLFxuICAnQklOTE9HJyxcbiAgJ0NBQ0hFIElOREVYJyxcbiAgJ0NBTEwnLFxuICAnQ0hBTkdFIE1BU1RFUiBUTycsXG4gICdDSEVDSyBUQUJMRScsXG4gICdDSEVDSyBWSUVXJyxcbiAgJ0NIRUNLU1VNIFRBQkxFJyxcbiAgJ0NPTU1JVCcsXG4gICdDUkVBVEUgQUdHUkVHQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgRVZFTlQnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBJTkRFWCcsXG4gICdDUkVBVEUgUFJPQ0VEVVJFJyxcbiAgJ0NSRUFURSBST0xFJyxcbiAgJ0NSRUFURSBTRVFVRU5DRScsXG4gICdDUkVBVEUgU0VSVkVSJyxcbiAgJ0NSRUFURSBTUEFUSUFMIElOREVYJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVU5JUVVFIElOREVYJyxcbiAgJ0NSRUFURSBVU0VSJyxcbiAgJ0NSRUFURSBWSUVXJyxcbiAgJ0RFQUxMT0NBVEUgUFJFUEFSRScsXG4gICdERUxFVEUnLFxuICAnREVTQycsXG4gICdERVNDUklCRScsXG4gICdETycsXG4gICdEUk9QIERBVEFCQVNFJyxcbiAgJ0RST1AgRVZFTlQnLFxuICAnRFJPUCBGVU5DVElPTicsXG4gICdEUk9QIElOREVYJyxcbiAgJ0RST1AgUFJFUEFSRScsXG4gICdEUk9QIFBST0NFRFVSRScsXG4gICdEUk9QIFJPTEUnLFxuICAnRFJPUCBTRVFVRU5DRScsXG4gICdEUk9QIFNFUlZFUicsXG4gICdEUk9QIFRBQkxFJyxcbiAgJ0RST1AgVFJJR0dFUicsXG4gICdEUk9QIFVTRVInLFxuICAnRFJPUCBWSUVXJyxcbiAgJ0VYRUNVVEUnLFxuICAnRVhQTEFJTicsXG4gICdGTFVTSCcsXG4gICdHRVQgRElBR05PU1RJQ1MnLFxuICAnR0VUIERJQUdOT1NUSUNTIENPTkRJVElPTicsXG4gICdHUkFOVCcsXG4gICdIQU5ETEVSJyxcbiAgJ0hFTFAnLFxuICAnSU5TRVJUJyxcbiAgJ0lOU1RBTEwgUExVR0lOJyxcbiAgJ0lOU1RBTEwgU09OQU1FJyxcbiAgJ0tJTEwnLFxuICAnTE9BRCBEQVRBIElORklMRScsXG4gICdMT0FEIElOREVYIElOVE8gQ0FDSEUnLFxuICAnTE9BRCBYTUwgSU5GSUxFJyxcbiAgJ0xPQ0sgVEFCTEUnLFxuICAnT1BUSU1JWkUgVEFCTEUnLFxuICAnUFJFUEFSRScsXG4gICdQVVJHRSBCSU5BUlkgTE9HUycsXG4gICdQVVJHRSBNQVNURVIgTE9HUycsXG4gICdSRUxFQVNFIFNBVkVQT0lOVCcsXG4gICdSRU5BTUUgVEFCTEUnLFxuICAnUkVOQU1FIFVTRVInLFxuICAnUkVQQUlSIFRBQkxFJyxcbiAgJ1JFUEFJUiBWSUVXJyxcbiAgJ1JFUExBQ0UnLFxuICAnUkVTRVQgTUFTVEVSJyxcbiAgJ1JFU0VUIFFVRVJZIENBQ0hFJyxcbiAgJ1JFU0VUIFJFUExJQ0EnLFxuICAnUkVTRVQgU0xBVkUnLFxuICAnUkVTSUdOQUwnLFxuICAnUkVUVVJOSU5HJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSycsXG4gICdTQVZFUE9JTlQnLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCcsXG4gICdTRVQgQ0hBUkFDVEVSIFNFVCcsXG4gICdTRVQgREVGQVVMVCBST0xFJyxcbiAgJ1NFVCBHTE9CQUwgVFJBTlNBQ1RJT04nLFxuICAnU0VUIE5BTUVTJyxcbiAgJ1NFVCBQQVNTV09SRCcsXG4gICdTRVQgUk9MRScsXG4gICdTRVQgU1RBVEVNRU5UJyxcbiAgJ1NFVCBUUkFOU0FDVElPTicsXG4gICdTSE9XJyxcbiAgJ1NIT1cgQUxMIFJFUExJQ0FTIFNUQVRVUycsXG4gICdTSE9XIEFMTCBTTEFWRVMgU1RBVFVTJyxcbiAgJ1NIT1cgQVVUSE9SUycsXG4gICdTSE9XIEJJTkFSWSBMT0dTJyxcbiAgJ1NIT1cgQklOTE9HIEVWRU5UUycsXG4gICdTSE9XIEJJTkxPRyBTVEFUVVMnLFxuICAnU0hPVyBDSEFSQUNURVIgU0VUJyxcbiAgJ1NIT1cgQ0xJRU5UX1NUQVRJU1RJQ1MnLFxuICAnU0hPVyBDT0xMQVRJT04nLFxuICAnU0hPVyBDT0xVTU5TJyxcbiAgJ1NIT1cgQ09OVFJJQlVUT1JTJyxcbiAgJ1NIT1cgQ1JFQVRFIERBVEFCQVNFJyxcbiAgJ1NIT1cgQ1JFQVRFIEVWRU5UJyxcbiAgJ1NIT1cgQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ1NIT1cgQ1JFQVRFIFBBQ0tBR0UnLFxuICAnU0hPVyBDUkVBVEUgUEFDS0FHRSBCT0RZJyxcbiAgJ1NIT1cgQ1JFQVRFIFBST0NFRFVSRScsXG4gICdTSE9XIENSRUFURSBTRVFVRU5DRScsXG4gICdTSE9XIENSRUFURSBUQUJMRScsXG4gICdTSE9XIENSRUFURSBUUklHR0VSJyxcbiAgJ1NIT1cgQ1JFQVRFIFVTRVInLFxuICAnU0hPVyBDUkVBVEUgVklFVycsXG4gICdTSE9XIERBVEFCQVNFUycsXG4gICdTSE9XIEVOR0lORScsXG4gICdTSE9XIEVOR0lORSBJTk5PREIgU1RBVFVTJyxcbiAgJ1NIT1cgRU5HSU5FUycsXG4gICdTSE9XIEVSUk9SUycsXG4gICdTSE9XIEVWRU5UUycsXG4gICdTSE9XIEVYUExBSU4nLFxuICAnU0hPVyBGVU5DVElPTiBDT0RFJyxcbiAgJ1NIT1cgRlVOQ1RJT04gU1RBVFVTJyxcbiAgJ1NIT1cgR1JBTlRTJyxcbiAgJ1NIT1cgSU5ERVgnLFxuICAnU0hPVyBJTkRFWEVTJyxcbiAgJ1NIT1cgSU5ERVhfU1RBVElTVElDUycsXG4gICdTSE9XIEtFWVMnLFxuICAnU0hPVyBMT0NBTEVTJyxcbiAgJ1NIT1cgTUFTVEVSIExPR1MnLFxuICAnU0hPVyBNQVNURVIgU1RBVFVTJyxcbiAgJ1NIT1cgT1BFTiBUQUJMRVMnLFxuICAnU0hPVyBQQUNLQUdFIEJPRFkgQ09ERScsXG4gICdTSE9XIFBBQ0tBR0UgQk9EWSBTVEFUVVMnLFxuICAnU0hPVyBQQUNLQUdFIFNUQVRVUycsXG4gICdTSE9XIFBMVUdJTlMnLFxuICAnU0hPVyBQTFVHSU5TIFNPTkFNRScsXG4gICdTSE9XIFBSSVZJTEVHRVMnLFxuICAnU0hPVyBQUk9DRURVUkUgQ09ERScsXG4gICdTSE9XIFBST0NFRFVSRSBTVEFUVVMnLFxuICAnU0hPVyBQUk9DRVNTTElTVCcsXG4gICdTSE9XIFBST0ZJTEUnLFxuICAnU0hPVyBQUk9GSUxFUycsXG4gICdTSE9XIFFVRVJZX1JFU1BPTlNFX1RJTUUnLFxuICAnU0hPVyBSRUxBWUxPRyBFVkVOVFMnLFxuICAnU0hPVyBSRVBMSUNBJyxcbiAgJ1NIT1cgUkVQTElDQSBIT1NUUycsXG4gICdTSE9XIFJFUExJQ0EgU1RBVFVTJyxcbiAgJ1NIT1cgU0NIRU1BUycsXG4gICdTSE9XIFNMQVZFJyxcbiAgJ1NIT1cgU0xBVkUgSE9TVFMnLFxuICAnU0hPVyBTTEFWRSBTVEFUVVMnLFxuICAnU0hPVyBTVEFUVVMnLFxuICAnU0hPVyBTVE9SQUdFIEVOR0lORVMnLFxuICAnU0hPVyBUQUJMRSBTVEFUVVMnLFxuICAnU0hPVyBUQUJMRVMnLFxuICAnU0hPVyBUUklHR0VSUycsXG4gICdTSE9XIFVTRVJfU1RBVElTVElDUycsXG4gICdTSE9XIFZBUklBQkxFUycsXG4gICdTSE9XIFdBUk5JTkdTJyxcbiAgJ1NIT1cgV1NSRVBfTUVNQkVSU0hJUCcsXG4gICdTSE9XIFdTUkVQX1NUQVRVUycsXG4gICdTSFVURE9XTicsXG4gICdTSUdOQUwnLFxuICAnU1RBUlQgQUxMIFJFUExJQ0FTJyxcbiAgJ1NUQVJUIEFMTCBTTEFWRVMnLFxuICAnU1RBUlQgUkVQTElDQScsXG4gICdTVEFSVCBTTEFWRScsXG4gICdTVEFSVCBUUkFOU0FDVElPTicsXG4gICdTVE9QIEFMTCBSRVBMSUNBUycsXG4gICdTVE9QIEFMTCBTTEFWRVMnLFxuICAnU1RPUCBSRVBMSUNBJyxcbiAgJ1NUT1AgU0xBVkUnLFxuICAnVFJVTkNBVEUnLFxuICAnVFJVTkNBVEUgVEFCTEUnLFxuICAnVU5JTlNUQUxMIFBMVUdJTicsXG4gICdVTklOU1RBTEwgU09OQU1FJyxcbiAgJ1VOTE9DSyBUQUJMRScsXG4gICdVUERBVEUnLFxuICAnVVNFJyxcbiAgJ1dJVEgnLFxuICAnWEEgQkVHSU4nLFxuICAnWEEgQ09NTUlUJyxcbiAgJ1hBIEVORCcsXG4gICdYQSBQUkVQQVJFJyxcbiAgJ1hBIFJFQ09WRVInLFxuICAnWEEgUk9MTEJBQ0snLFxuICAnWEEgU1RBUlQnLFxuICAvLyBvdGhlclxuICAnQUREJyxcbiAgJ0FMVEVSIENPTFVNTicsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdJTlNFUlQnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1NFTEVDVCcsXG4gICdWQUxVRVMnLFxuICAnV0hFUkUnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAnTUlOVVMnLFxuICAnTUlOVVMgQUxMJyxcbiAgJ01JTlVTIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG4gIC8vIG5vbi1zdGFuZGFyZCBqb2luc1xuICAnU1RSQUlHSFRfSk9JTicsXG4gICdOQVRVUkFMIExFRlQgSk9JTicsXG4gICdOQVRVUkFMIExFRlQgT1VURVIgSk9JTicsXG4gICdOQVRVUkFMIFJJR0hUIEpPSU4nLFxuICAnTkFUVVJBTCBSSUdIVCBPVVRFUiBKT0lOJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgM1xuICoga2V5d29yZHMgdGhhdCBmb2xsb3cgYSBwcmV2aW91cyBTdGF0ZW1lbnQsIG11c3QgYmUgYXR0YWNoZWQgdG8gc3Vic2VxdWVudCBkYXRhXG4gKiBjYW4gYmUgZnVsbHkgaW5saW5lIG9yIG9uIG5ld2xpbmUgd2l0aCBvcHRpb25hbCBpbmRlbnRcbiAqL1xuY29uc3QgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gWydXSEVOJywgJ0VMU0UnLCAnRUxTRUlGJywgJ0VMU0lGJ107XG5cbi8vIEZvciByZWZlcmVuY2U6IGh0dHBzOi8vbWFyaWFkYi5jb20va2IvZW4vc3FsLXN0YXRlbWVudHMtc3RydWN0dXJlL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWFyaWFEYkZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJywgJ1hPUiddO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRLZXl3b3JkcyA9IGRlZHVwZShbLi4ucmVzZXJ2ZWRLZXl3b3JkcywgLi4ucmVzZXJ2ZWRGdW5jdGlvbnNdKTtcbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gWydgYCcsIFwiJydcIiwgJ1wiXCInXTtcbiAgc3RhdGljIGJsb2NrU3RhcnQgPSBbJygnLCAnQ0FTRSddO1xuICBzdGF0aWMgYmxvY2tFbmQgPSBbJyknLCAnRU5EJ107XG4gIHN0YXRpYyBpbmRleGVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnPyddO1xuICBzdGF0aWMgbmFtZWRQbGFjZWhvbGRlclR5cGVzID0gW107XG4gIHN0YXRpYyBsaW5lQ29tbWVudFR5cGVzID0gWyctLScsICcjJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBwcmVmaXg6ICdAJyB9O1xuICBzdGF0aWMgb3BlcmF0b3JzID0gWyc6PScsICc8PCcsICc+PicsICc8PT4nLCAnJiYnLCAnfHwnXTtcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogTWFyaWFEYkZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogTWFyaWFEYkZvcm1hdHRlci5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzOiBNYXJpYURiRm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IE1hcmlhRGJGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogTWFyaWFEYkZvcm1hdHRlci5yZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMsXG4gICAgICByZXNlcnZlZEtleXdvcmRzOiBNYXJpYURiRm9ybWF0dGVyLnJlc2VydmVkS2V5d29yZHMsXG4gICAgICBzdHJpbmdUeXBlczogTWFyaWFEYkZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IE1hcmlhRGJGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBNYXJpYURiRm9ybWF0dGVyLmJsb2NrRW5kLFxuICAgICAgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXM6IE1hcmlhRGJGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IE1hcmlhRGJGb3JtYXR0ZXIubmFtZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbGluZUNvbW1lbnRUeXBlczogTWFyaWFEYkZvcm1hdHRlci5saW5lQ29tbWVudFR5cGVzLFxuICAgICAgc3BlY2lhbFdvcmRDaGFyczogTWFyaWFEYkZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBNYXJpYURiRm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxuXG4gIHRva2VuT3ZlcnJpZGUodG9rZW46IFRva2VuKSB7XG4gICAgLy8gW1NFVF0gKCAuLi5cbiAgICBpZiAoaXNUb2tlbi5TRVQodG9rZW4pICYmIHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZSA9PT0gJygnKSB7XG4gICAgICAvLyBUaGlzIGlzIFNFVCBkYXRhdHlwZSwgbm90IFNFVCBzdGF0ZW1lbnRcbiAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9LRVlXT1JELCB2YWx1ZTogdG9rZW4udmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgeyBpc1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi4vY29yZS90b2tlbic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vLyBUT0RPOiBzcGxpdCB0aGlzIGludG8gb2JqZWN0IHdpdGggZnVuY3Rpb24gY2F0ZWdvcmllc1xuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG4vLyBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjAvZW4vYnVpbHQtaW4tZnVuY3Rpb24tcmVmZXJlbmNlLmh0bWxcbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0gW1xuICAnQUJTJyxcbiAgJ0FDT1MnLFxuICAnQUREREFURScsXG4gICdBRERUSU1FJyxcbiAgJ0FFU19ERUNSWVBUJyxcbiAgJ0FFU19FTkNSWVBUJyxcbiAgJ0FORCcsXG4gICdBTllfVkFMVUUnLFxuICAnQVNDSUknLFxuICAnQVNJTicsXG4gICdBVEFOJyxcbiAgJ0FUQU4yJyxcbiAgJ0FWRycsXG4gICdCRU5DSE1BUksnLFxuICAnQklOJyxcbiAgJ0JJTl9UT19VVUlEJyxcbiAgJ0JJTkFSWScsXG4gICdCSVRfQU5EJyxcbiAgJ0JJVF9DT1VOVCcsXG4gICdCSVRfTEVOR1RIJyxcbiAgJ0JJVF9PUicsXG4gICdCSVRfWE9SJyxcbiAgJ0NBTl9BQ0NFU1NfQ09MVU1OJyxcbiAgJ0NBTl9BQ0NFU1NfREFUQUJBU0UnLFxuICAnQ0FOX0FDQ0VTU19UQUJMRScsXG4gICdDQU5fQUNDRVNTX1VTRVInLFxuICAnQ0FOX0FDQ0VTU19WSUVXJyxcbiAgJ0NBU0UnLFxuICAnQ0FTVCcsXG4gICdDRUlMJyxcbiAgJ0NFSUxJTkcnLFxuICAnQ0hBUicsXG4gICdDSEFSX0xFTkdUSCcsXG4gICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgJ0NIQVJTRVQnLFxuICAnQ09BTEVTQ0UnLFxuICAnQ09FUkNJQklMSVRZJyxcbiAgJ0NPTExBVElPTicsXG4gICdDT01QUkVTUycsXG4gICdDT05DQVQnLFxuICAnQ09OQ0FUX1dTJyxcbiAgJ0NPTk5FQ1RJT05fSUQnLFxuICAnQ09OVicsXG4gICdDT05WRVJUJyxcbiAgJ0NPTlZFUlRfVFonLFxuICAnQ09TJyxcbiAgJ0NPVCcsXG4gICdDT1VOVCcsXG4gICdDUkMzMicsXG4gICdDVU1FX0RJU1QnLFxuICAnQ1VSREFURScsXG4gICdDVVJSRU5UX0RBVEUnLFxuICAnQ1VSUkVOVF9ST0xFJyxcbiAgJ0NVUlJFTlRfVElNRScsXG4gICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICdDVVJSRU5UX1VTRVInLFxuICAnQ1VSVElNRScsXG4gICdEQVRBQkFTRScsXG4gICdEQVRFJyxcbiAgJ0RBVEVfQUREJyxcbiAgJ0RBVEVfRk9STUFUJyxcbiAgJ0RBVEVfU1VCJyxcbiAgJ0RBVEVESUZGJyxcbiAgJ0RBWScsXG4gICdEQVlOQU1FJyxcbiAgJ0RBWU9GTU9OVEgnLFxuICAnREFZT0ZXRUVLJyxcbiAgJ0RBWU9GWUVBUicsXG4gICdERUZBVUxUJyxcbiAgJ0RFR1JFRVMnLFxuICAnREVOU0VfUkFOSycsXG4gICdESVYnLFxuICAnRUxUJyxcbiAgJ0VYUCcsXG4gICdFWFBPUlRfU0VUJyxcbiAgJ0VYVFJBQ1QnLFxuICAnRXh0cmFjdFZhbHVlJyxcbiAgJ0ZJRUxEJyxcbiAgJ0ZJTkRfSU5fU0VUJyxcbiAgJ0ZJUlNUX1ZBTFVFJyxcbiAgJ0ZMT09SJyxcbiAgJ0ZPUk1BVCcsXG4gICdGT1JNQVRfQllURVMnLFxuICAnRk9STUFUX1BJQ09fVElNRScsXG4gICdGT1VORF9ST1dTJyxcbiAgJ0ZST01fQkFTRTY0JyxcbiAgJ0ZST01fREFZUycsXG4gICdGUk9NX1VOSVhUSU1FJyxcbiAgJ0dlb21Db2xsZWN0aW9uJyxcbiAgJ0dlb21ldHJ5Q29sbGVjdGlvbicsXG4gICdHRVRfRERfQ09MVU1OX1BSSVZJTEVHRVMnLFxuICAnR0VUX0REX0NSRUFURV9PUFRJT05TJyxcbiAgJ0dFVF9ERF9JTkRFWF9TVUJfUEFSVF9MRU5HVEgnLFxuICAnR0VUX0ZPUk1BVCcsXG4gICdHRVRfTE9DSycsXG4gICdHUkVBVEVTVCcsXG4gICdHUk9VUF9DT05DQVQnLFxuICAnR1JPVVBJTkcnLFxuICAnR1RJRF9TVUJTRVQnLFxuICAnR1RJRF9TVUJUUkFDVCcsXG4gICdIRVgnLFxuICAnSE9VUicsXG4gICdJQ1VfVkVSU0lPTicsXG4gICdJRicsXG4gICdJRk5VTEwnLFxuICAnSU4nLFxuICAnSU5FVF9BVE9OJyxcbiAgJ0lORVRfTlRPQScsXG4gICdJTkVUNl9BVE9OJyxcbiAgJ0lORVQ2X05UT0EnLFxuICAnSU5TRVJUJyxcbiAgJ0lOU1RSJyxcbiAgJ0lOVEVSTkFMX0FVVE9fSU5DUkVNRU5UJyxcbiAgJ0lOVEVSTkFMX0FWR19ST1dfTEVOR1RIJyxcbiAgJ0lOVEVSTkFMX0NIRUNLX1RJTUUnLFxuICAnSU5URVJOQUxfQ0hFQ0tTVU0nLFxuICAnSU5URVJOQUxfREFUQV9GUkVFJyxcbiAgJ0lOVEVSTkFMX0RBVEFfTEVOR1RIJyxcbiAgJ0lOVEVSTkFMX0REX0NIQVJfTEVOR1RIJyxcbiAgJ0lOVEVSTkFMX0dFVF9DT01NRU5UX09SX0VSUk9SJyxcbiAgJ0lOVEVSTkFMX0dFVF9FTkFCTEVEX1JPTEVfSlNPTicsXG4gICdJTlRFUk5BTF9HRVRfSE9TVE5BTUUnLFxuICAnSU5URVJOQUxfR0VUX1VTRVJOQU1FJyxcbiAgJ0lOVEVSTkFMX0dFVF9WSUVXX1dBUk5JTkdfT1JfRVJST1InLFxuICAnSU5URVJOQUxfSU5ERVhfQ09MVU1OX0NBUkRJTkFMSVRZJyxcbiAgJ0lOVEVSTkFMX0lOREVYX0xFTkdUSCcsXG4gICdJTlRFUk5BTF9JU19FTkFCTEVEX1JPTEUnLFxuICAnSU5URVJOQUxfSVNfTUFOREFUT1JZX1JPTEUnLFxuICAnSU5URVJOQUxfS0VZU19ESVNBQkxFRCcsXG4gICdJTlRFUk5BTF9NQVhfREFUQV9MRU5HVEgnLFxuICAnSU5URVJOQUxfVEFCTEVfUk9XUycsXG4gICdJTlRFUk5BTF9VUERBVEVfVElNRScsXG4gICdJTlRFUlZBTCcsXG4gICdJUycsXG4gICdJU19GUkVFX0xPQ0snLFxuICAnSVNfSVBWNCcsXG4gICdJU19JUFY0X0NPTVBBVCcsXG4gICdJU19JUFY0X01BUFBFRCcsXG4gICdJU19JUFY2JyxcbiAgJ0lTIE5PVCcsXG4gICdJUyBOT1QgTlVMTCcsXG4gICdJUyBOVUxMJyxcbiAgJ0lTX1VTRURfTE9DSycsXG4gICdJU19VVUlEJyxcbiAgJ0lTTlVMTCcsXG4gICdKU09OX0FSUkFZJyxcbiAgJ0pTT05fQVJSQVlfQVBQRU5EJyxcbiAgJ0pTT05fQVJSQVlfSU5TRVJUJyxcbiAgJ0pTT05fQVJSQVlBR0cnLFxuICAnSlNPTl9DT05UQUlOUycsXG4gICdKU09OX0NPTlRBSU5TX1BBVEgnLFxuICAnSlNPTl9ERVBUSCcsXG4gICdKU09OX0VYVFJBQ1QnLFxuICAnSlNPTl9JTlNFUlQnLFxuICAnSlNPTl9LRVlTJyxcbiAgJ0pTT05fTEVOR1RIJyxcbiAgJ0pTT05fTUVSR0UnLFxuICAnSlNPTl9NRVJHRV9QQVRDSCcsXG4gICdKU09OX01FUkdFX1BSRVNFUlZFJyxcbiAgJ0pTT05fT0JKRUNUJyxcbiAgJ0pTT05fT0JKRUNUQUdHJyxcbiAgJ0pTT05fT1ZFUkxBUFMnLFxuICAnSlNPTl9QUkVUVFknLFxuICAnSlNPTl9RVU9URScsXG4gICdKU09OX1JFTU9WRScsXG4gICdKU09OX1JFUExBQ0UnLFxuICAnSlNPTl9TQ0hFTUFfVkFMSUQnLFxuICAnSlNPTl9TQ0hFTUFfVkFMSURBVElPTl9SRVBPUlQnLFxuICAnSlNPTl9TRUFSQ0gnLFxuICAnSlNPTl9TRVQnLFxuICAnSlNPTl9TVE9SQUdFX0ZSRUUnLFxuICAnSlNPTl9TVE9SQUdFX1NJWkUnLFxuICAnSlNPTl9UQUJMRScsXG4gICdKU09OX1RZUEUnLFxuICAnSlNPTl9VTlFVT1RFJyxcbiAgJ0pTT05fVkFMSUQnLFxuICAnSlNPTl9WQUxVRScsXG4gICdMQUcnLFxuICAnTEFTVF9EQVknLFxuICAnTEFTVF9JTlNFUlRfSUQnLFxuICAnTEFTVF9WQUxVRScsXG4gICdMQ0FTRScsXG4gICdMRUFEJyxcbiAgJ0xFQVNUJyxcbiAgJ0xFRlQnLFxuICAnTEVOR1RIJyxcbiAgJ0xJS0UnLFxuICAnTGluZVN0cmluZycsXG4gICdMTicsXG4gICdMT0FEX0ZJTEUnLFxuICAnTE9DQUxUSU1FJyxcbiAgJ0xPQ0FMVElNRVNUQU1QJyxcbiAgJ0xPQ0FURScsXG4gICdMT0cnLFxuICAnTE9HMTAnLFxuICAnTE9HMicsXG4gICdMT1dFUicsXG4gICdMUEFEJyxcbiAgJ0xUUklNJyxcbiAgJ01BS0VfU0VUJyxcbiAgJ01BS0VEQVRFJyxcbiAgJ01BS0VUSU1FJyxcbiAgJ01BU1RFUl9QT1NfV0FJVCcsXG4gICdNQVRDSCcsXG4gICdNQVgnLFxuICAnTUJSQ29udGFpbnMnLFxuICAnTUJSQ292ZXJlZEJ5JyxcbiAgJ01CUkNvdmVycycsXG4gICdNQlJEaXNqb2ludCcsXG4gICdNQlJFcXVhbHMnLFxuICAnTUJSSW50ZXJzZWN0cycsXG4gICdNQlJPdmVybGFwcycsXG4gICdNQlJUb3VjaGVzJyxcbiAgJ01CUldpdGhpbicsXG4gICdNRDUnLFxuICAnTUVNQkVSIE9GJyxcbiAgJ01JQ1JPU0VDT05EJyxcbiAgJ01JRCcsXG4gICdNSU4nLFxuICAnTUlOVVRFJyxcbiAgJ01PRCcsXG4gICdNT05USCcsXG4gICdNT05USE5BTUUnLFxuICAnTXVsdGlMaW5lU3RyaW5nJyxcbiAgJ011bHRpUG9pbnQnLFxuICAnTXVsdGlQb2x5Z29uJyxcbiAgJ05BTUVfQ09OU1QnLFxuICAnTk9UJyxcbiAgJ05PVCBJTicsXG4gICdOT1QgTElLRScsXG4gICdOT1QgUkVHRVhQJyxcbiAgJ05PVycsXG4gICdOVEhfVkFMVUUnLFxuICAnTlRJTEUnLFxuICAnTlVMTElGJyxcbiAgJ09DVCcsXG4gICdPQ1RFVF9MRU5HVEgnLFxuICAnT1InLFxuICAnT1JEJyxcbiAgJ1BFUkNFTlRfUkFOSycsXG4gICdQRVJJT0RfQUREJyxcbiAgJ1BFUklPRF9ESUZGJyxcbiAgJ1BJJyxcbiAgJ1BvaW50JyxcbiAgJ1BvbHlnb24nLFxuICAnUE9TSVRJT04nLFxuICAnUE9XJyxcbiAgJ1BPV0VSJyxcbiAgJ1BTX0NVUlJFTlRfVEhSRUFEX0lEJyxcbiAgJ1BTX1RIUkVBRF9JRCcsXG4gICdRVUFSVEVSJyxcbiAgJ1FVT1RFJyxcbiAgJ1JBRElBTlMnLFxuICAnUkFORCcsXG4gICdSQU5ET01fQllURVMnLFxuICAnUkFOSycsXG4gICdSRUdFWFAnLFxuICAnUkVHRVhQX0lOU1RSJyxcbiAgJ1JFR0VYUF9MSUtFJyxcbiAgJ1JFR0VYUF9SRVBMQUNFJyxcbiAgJ1JFR0VYUF9TVUJTVFInLFxuICAnUkVMRUFTRV9BTExfTE9DS1MnLFxuICAnUkVMRUFTRV9MT0NLJyxcbiAgJ1JFUEVBVCcsXG4gICdSRVBMQUNFJyxcbiAgJ1JFVkVSU0UnLFxuICAnUklHSFQnLFxuICAnUkxJS0UnLFxuICAnUk9MRVNfR1JBUEhNTCcsXG4gICdST1VORCcsXG4gICdST1dfQ09VTlQnLFxuICAnUk9XX05VTUJFUicsXG4gICdSUEFEJyxcbiAgJ1JUUklNJyxcbiAgJ1NDSEVNQScsXG4gICdTRUNfVE9fVElNRScsXG4gICdTRUNPTkQnLFxuICAnU0VTU0lPTl9VU0VSJyxcbiAgJ1NIQTEnLFxuICAnU0hBMicsXG4gICdTSUdOJyxcbiAgJ1NJTicsXG4gICdTTEVFUCcsXG4gICdTT1VOREVYJyxcbiAgJ1NPVU5EUyBMSUtFJyxcbiAgJ1NPVVJDRV9QT1NfV0FJVCcsXG4gICdTUEFDRScsXG4gICdTUVJUJyxcbiAgJ1NUX0FyZWEnLFxuICAnU1RfQXNCaW5hcnknLFxuICAnU1RfQXNHZW9KU09OJyxcbiAgJ1NUX0FzVGV4dCcsXG4gICdTVF9CdWZmZXInLFxuICAnU1RfQnVmZmVyX1N0cmF0ZWd5JyxcbiAgJ1NUX0NlbnRyb2lkJyxcbiAgJ1NUX0NvbGxlY3QnLFxuICAnU1RfQ29udGFpbnMnLFxuICAnU1RfQ29udmV4SHVsbCcsXG4gICdTVF9Dcm9zc2VzJyxcbiAgJ1NUX0RpZmZlcmVuY2UnLFxuICAnU1RfRGltZW5zaW9uJyxcbiAgJ1NUX0Rpc2pvaW50JyxcbiAgJ1NUX0Rpc3RhbmNlJyxcbiAgJ1NUX0Rpc3RhbmNlX1NwaGVyZScsXG4gICdTVF9FbmRQb2ludCcsXG4gICdTVF9FbnZlbG9wZScsXG4gICdTVF9FcXVhbHMnLFxuICAnU1RfRXh0ZXJpb3JSaW5nJyxcbiAgJ1NUX0ZyZWNoZXREaXN0YW5jZScsXG4gICdTVF9HZW9IYXNoJyxcbiAgJ1NUX0dlb21Db2xsRnJvbVRleHQnLFxuICAnU1RfR2VvbUNvbGxGcm9tV0tCJyxcbiAgJ1NUX0dlb21ldHJ5TicsXG4gICdTVF9HZW9tZXRyeVR5cGUnLFxuICAnU1RfR2VvbUZyb21HZW9KU09OJyxcbiAgJ1NUX0dlb21Gcm9tVGV4dCcsXG4gICdTVF9HZW9tRnJvbVdLQicsXG4gICdTVF9IYXVzZG9yZmZEaXN0YW5jZScsXG4gICdTVF9JbnRlcmlvclJpbmdOJyxcbiAgJ1NUX0ludGVyc2VjdGlvbicsXG4gICdTVF9JbnRlcnNlY3RzJyxcbiAgJ1NUX0lzQ2xvc2VkJyxcbiAgJ1NUX0lzRW1wdHknLFxuICAnU1RfSXNTaW1wbGUnLFxuICAnU1RfSXNWYWxpZCcsXG4gICdTVF9MYXRGcm9tR2VvSGFzaCcsXG4gICdTVF9MYXRpdHVkZScsXG4gICdTVF9MZW5ndGgnLFxuICAnU1RfTGluZUZyb21UZXh0JyxcbiAgJ1NUX0xpbmVGcm9tV0tCJyxcbiAgJ1NUX0xpbmVJbnRlcnBvbGF0ZVBvaW50JyxcbiAgJ1NUX0xpbmVJbnRlcnBvbGF0ZVBvaW50cycsXG4gICdTVF9Mb25nRnJvbUdlb0hhc2gnLFxuICAnU1RfTG9uZ2l0dWRlJyxcbiAgJ1NUX01ha2VFbnZlbG9wZScsXG4gICdTVF9NTGluZUZyb21UZXh0JyxcbiAgJ1NUX01MaW5lRnJvbVdLQicsXG4gICdTVF9NUG9pbnRGcm9tVGV4dCcsXG4gICdTVF9NUG9pbnRGcm9tV0tCJyxcbiAgJ1NUX01Qb2x5RnJvbVRleHQnLFxuICAnU1RfTVBvbHlGcm9tV0tCJyxcbiAgJ1NUX051bUdlb21ldHJpZXMnLFxuICAnU1RfTnVtSW50ZXJpb3JSaW5nJyxcbiAgJ1NUX051bVBvaW50cycsXG4gICdTVF9PdmVybGFwcycsXG4gICdTVF9Qb2ludEF0RGlzdGFuY2UnLFxuICAnU1RfUG9pbnRGcm9tR2VvSGFzaCcsXG4gICdTVF9Qb2ludEZyb21UZXh0JyxcbiAgJ1NUX1BvaW50RnJvbVdLQicsXG4gICdTVF9Qb2ludE4nLFxuICAnU1RfUG9seUZyb21UZXh0JyxcbiAgJ1NUX1BvbHlGcm9tV0tCJyxcbiAgJ1NUX1NpbXBsaWZ5JyxcbiAgJ1NUX1NSSUQnLFxuICAnU1RfU3RhcnRQb2ludCcsXG4gICdTVF9Td2FwWFknLFxuICAnU1RfU3ltRGlmZmVyZW5jZScsXG4gICdTVF9Ub3VjaGVzJyxcbiAgJ1NUX1RyYW5zZm9ybScsXG4gICdTVF9VbmlvbicsXG4gICdTVF9WYWxpZGF0ZScsXG4gICdTVF9XaXRoaW4nLFxuICAnU1RfWCcsXG4gICdTVF9ZJyxcbiAgJ1NUQVRFTUVOVF9ESUdFU1QnLFxuICAnU1RBVEVNRU5UX0RJR0VTVF9URVhUJyxcbiAgJ1NURCcsXG4gICdTVERERVYnLFxuICAnU1REREVWX1BPUCcsXG4gICdTVERERVZfU0FNUCcsXG4gICdTVFJfVE9fREFURScsXG4gICdTVFJDTVAnLFxuICAnU1VCREFURScsXG4gICdTVUJTVFInLFxuICAnU1VCU1RSSU5HJyxcbiAgJ1NVQlNUUklOR19JTkRFWCcsXG4gICdTVUJUSU1FJyxcbiAgJ1NVTScsXG4gICdTWVNEQVRFJyxcbiAgJ1NZU1RFTV9VU0VSJyxcbiAgJ1RBTicsXG4gICdUSU1FJyxcbiAgJ1RJTUVfRk9STUFUJyxcbiAgJ1RJTUVfVE9fU0VDJyxcbiAgJ1RJTUVESUZGJyxcbiAgJ1RJTUVTVEFNUCcsXG4gICdUSU1FU1RBTVBBREQnLFxuICAnVElNRVNUQU1QRElGRicsXG4gICdUT19CQVNFNjQnLFxuICAnVE9fREFZUycsXG4gICdUT19TRUNPTkRTJyxcbiAgJ1RSSU0nLFxuICAnVFJVTkNBVEUnLFxuICAnVUNBU0UnLFxuICAnVU5DT01QUkVTUycsXG4gICdVTkNPTVBSRVNTRURfTEVOR1RIJyxcbiAgJ1VOSEVYJyxcbiAgJ1VOSVhfVElNRVNUQU1QJyxcbiAgJ1VwZGF0ZVhNTCcsXG4gICdVUFBFUicsXG4gICdVU0VSJyxcbiAgJ1VUQ19EQVRFJyxcbiAgJ1VUQ19USU1FJyxcbiAgJ1VUQ19USU1FU1RBTVAnLFxuICAnVVVJRCcsXG4gICdVVUlEX1NIT1JUJyxcbiAgJ1VVSURfVE9fQklOJyxcbiAgJ1ZBTElEQVRFX1BBU1NXT1JEX1NUUkVOR1RIJyxcbiAgJ1ZBTFVFUycsXG4gICdWQVJfUE9QJyxcbiAgJ1ZBUl9TQU1QJyxcbiAgJ1ZBUklBTkNFJyxcbiAgJ1ZFUlNJT04nLFxuICAnV0FJVF9GT1JfRVhFQ1VURURfR1RJRF9TRVQnLFxuICAnV0FJVF9VTlRJTF9TUUxfVEhSRUFEX0FGVEVSX0dUSURTJyxcbiAgJ1dFRUsnLFxuICAnV0VFS0RBWScsXG4gICdXRUVLT0ZZRUFSJyxcbiAgJ1dFSUdIVF9TVFJJTkcnLFxuICAnWE9SJyxcbiAgJ1lFQVInLFxuICAnWUVBUldFRUsnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIHdvcmRzXG4gKiBhbnkgd29yZHMgdGhhdCBhcmUgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYXJlIHJlbW92ZWRcbiAqL1xuLy8gaHR0cHM6Ly9kZXYubXlzcWwuY29tL2RvYy9yZWZtYW4vOC4wL2VuL2tleXdvcmRzLmh0bWxcbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSBbXG4gICdBQ0NFU1NJQkxFJyxcbiAgJ0FDQ09VTlQnLFxuICAnQUNUSU9OJyxcbiAgJ0FDVElWRScsXG4gICdBRE1JTicsXG4gICdBRlRFUicsXG4gICdBR0FJTlNUJyxcbiAgJ0FHR1JFR0FURScsXG4gICdBTEdPUklUSE0nLFxuICAnQUxMJyxcbiAgJ0FMVEVSJyxcbiAgJ0FMV0FZUycsXG4gICdBTkFMWVNFJyxcbiAgJ0FOQUxZWkUnLFxuICAnQU5ZJyxcbiAgJ0FSUkFZJyxcbiAgJ0FTJyxcbiAgJ0FTQycsXG4gICdBU0VOU0lUSVZFJyxcbiAgJ0FUJyxcbiAgJ0FUVFJJQlVURScsXG4gICdBVVRIRU5USUNBVElPTicsXG4gICdBVVRPRVhURU5EX1NJWkUnLFxuICAnQVVUT19JTkNSRU1FTlQnLFxuICAnQVZHX1JPV19MRU5HVEgnLFxuICAnQkFDS1VQJyxcbiAgJ0JFRk9SRScsXG4gICdCRUdJTicsXG4gICdCRVRXRUVOJyxcbiAgJ0JJR0lOVCcsXG4gICdCSVQnLFxuICAnQkxPQicsXG4gICdCTE9DSycsXG4gICdCT09MJyxcbiAgJ0JPT0xFQU4nLFxuICAnQk9USCcsXG4gICdCVFJFRScsXG4gICdCVUNLRVRTJyxcbiAgJ0JZJyxcbiAgJ0JZVEUnLFxuICAnQ0FDSEUnLFxuICAnQ0FTQ0FERScsXG4gICdDQVNDQURFRCcsXG4gICdDQVRBTE9HX05BTUUnLFxuICAnQ0hBSU4nLFxuICAnQ0hBTExFTkdFX1JFU1BPTlNFJyxcbiAgJ0NIQU5HRScsXG4gICdDSEFOR0VEJyxcbiAgJ0NIQU5ORUwnLFxuICAnQ0hBUkFDVEVSJyxcbiAgJ0NIQVJBQ1RFUiBTRVQnLFxuICAnQ0hFQ0snLFxuICAnQ0hFQ0tTVU0nLFxuICAnQ0lQSEVSJyxcbiAgJ0NMQVNTX09SSUdJTicsXG4gICdDTElFTlQnLFxuICAnQ0xPU0UnLFxuICAnQ09ERScsXG4gICdDT0xMQVRFJyxcbiAgJ0NPTFVNTicsXG4gICdDT0xVTU5TJyxcbiAgJ0NPTFVNTl9GT1JNQVQnLFxuICAnQ09MVU1OX05BTUUnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVRURUQnLFxuICAnQ09NUEFDVCcsXG4gICdDT01QTEVUSU9OJyxcbiAgJ0NPTVBPTkVOVCcsXG4gICdDT01QUkVTU0VEJyxcbiAgJ0NPTVBSRVNTSU9OJyxcbiAgJ0NPTkNVUlJFTlQnLFxuICAnQ09ORElUSU9OJyxcbiAgJ0NPTk5FQ1RJT04nLFxuICAnQ09OU0lTVEVOVCcsXG4gICdDT05TVFJBSU5UJyxcbiAgJ0NPTlNUUkFJTlRfQ0FUQUxPRycsXG4gICdDT05TVFJBSU5UX05BTUUnLFxuICAnQ09OU1RSQUlOVF9TQ0hFTUEnLFxuICAnQ09OVEFJTlMnLFxuICAnQ09OVEVYVCcsXG4gICdDT05USU5VRScsXG4gICdDUFUnLFxuICAnQ1JFQVRFJyxcbiAgJ0NST1NTJyxcbiAgJ0NVQkUnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJTT1InLFxuICAnQ1VSU09SX05BTUUnLFxuICAnREFUQScsXG4gICdEQVRBQkFTRVMnLFxuICAnREFUQUZJTEUnLFxuICAnREFURVRJTUUnLFxuICAnREFZX0hPVVInLFxuICAnREFZX01JQ1JPU0VDT05EJyxcbiAgJ0RBWV9NSU5VVEUnLFxuICAnREFZX1NFQ09ORCcsXG4gICdERUFMTE9DQVRFJyxcbiAgJ0RFQycsXG4gICdERUNJTUFMJyxcbiAgJ0RFQ0xBUkUnLFxuICAnREVGQVVMVF9BVVRIJyxcbiAgJ0RFRklORVInLFxuICAnREVGSU5JVElPTicsXG4gICdERUxBWUVEJyxcbiAgJ0RFTEFZX0tFWV9XUklURScsXG4gICdERVNDJyxcbiAgJ0RFU0NSSVBUSU9OJyxcbiAgJ0RFU19LRVlfRklMRScsXG4gICdERVRFUk1JTklTVElDJyxcbiAgJ0RJQUdOT1NUSUNTJyxcbiAgJ0RJUkVDVE9SWScsXG4gICdESVNBQkxFJyxcbiAgJ0RJU0NBUkQnLFxuICAnRElTSycsXG4gICdESVNUSU5DVCcsXG4gICdESVNUSU5DVFJPVycsXG4gICdET1VCTEUnLFxuICAnRFJPUCcsXG4gICdEVUFMJyxcbiAgJ0RVTVBGSUxFJyxcbiAgJ0RVUExJQ0FURScsXG4gICdEWU5BTUlDJyxcbiAgJ0VBQ0gnLFxuICAnRU1QVFknLFxuICAnRU5BQkxFJyxcbiAgJ0VOQ0xPU0VEJyxcbiAgJ0VOQ1JZUFRJT04nLFxuICAnRU5EUycsXG4gICdFTkZPUkNFRCcsXG4gICdFTkdJTkUnLFxuICAnRU5HSU5FUycsXG4gICdFTkdJTkVfQVRUUklCVVRFJyxcbiAgJ0VOVU0nLFxuICAnRVJST1InLFxuICAnRVJST1JTJyxcbiAgJ0VTQ0FQRScsXG4gICdFU0NBUEVEJyxcbiAgJ0VWRU5UJyxcbiAgJ0VWRU5UUycsXG4gICdFVkVSWScsXG4gICdFWENIQU5HRScsXG4gICdFWENMVURFJyxcbiAgJ0VYSVNUUycsXG4gICdFWElUJyxcbiAgJ0VYUEFOU0lPTicsXG4gICdFWFBJUkUnLFxuICAnRVhQT1JUJyxcbiAgJ0VYVEVOREVEJyxcbiAgJ0VYVEVOVF9TSVpFJyxcbiAgJ0ZBQ1RPUicsXG4gICdGQUlMRURfTE9HSU5fQVRURU1QVFMnLFxuICAnRkFMU0UnLFxuICAnRkFTVCcsXG4gICdGQVVMVFMnLFxuICAnRkVUQ0gnLFxuICAnRklFTERTJyxcbiAgJ0ZJTEUnLFxuICAnRklMRV9CTE9DS19TSVpFJyxcbiAgJ0ZJTFRFUicsXG4gICdGSU5JU0gnLFxuICAnRklSU1QnLFxuICAnRklYRUQnLFxuICAnRkxPQVQnLFxuICAnRkxPQVQ0JyxcbiAgJ0ZMT0FUOCcsXG4gICdGT0xMT1dJTkcnLFxuICAnRk9MTE9XUycsXG4gICdGT1InLFxuICAnRk9SQ0UnLFxuICAnRk9SRUlHTicsXG4gICdGT1VORCcsXG4gICdGVUxMJyxcbiAgJ0ZVTExURVhUJyxcbiAgJ0ZVTkNUSU9OJyxcbiAgJ0dFTkVSQUwnLFxuICAnR0VORVJBVEVEJyxcbiAgJ0dFT01DT0xMRUNUSU9OJyxcbiAgJ0dFT01FVFJZJyxcbiAgJ0dFT01FVFJZQ09MTEVDVElPTicsXG4gICdHRVQnLFxuICAnR0VUX01BU1RFUl9QVUJMSUNfS0VZJyxcbiAgJ0dFVF9TT1VSQ0VfUFVCTElDX0tFWScsXG4gICdHTE9CQUwnLFxuICAnQEBHTE9CQUwnLFxuICAnR1JBTlRTJyxcbiAgJ0dST1VQJyxcbiAgJ0dST1VQUycsXG4gICdHUk9VUF9SRVBMSUNBVElPTicsXG4gICdHVElEX09OTFknLFxuICAnSEFTSCcsXG4gICdISUdIX1BSSU9SSVRZJyxcbiAgJ0hJU1RPR1JBTScsXG4gICdISVNUT1JZJyxcbiAgJ0hPU1QnLFxuICAnSE9TVFMnLFxuICAnSE9VUl9NSUNST1NFQ09ORCcsXG4gICdIT1VSX01JTlVURScsXG4gICdIT1VSX1NFQ09ORCcsXG4gICdJREVOVElGSUVEJyxcbiAgJ0lHTk9SRScsXG4gICdJR05PUkVfU0VSVkVSX0lEUycsXG4gICdJTVBPUlQnLFxuICAnSU5BQ1RJVkUnLFxuICAnSU5ERVgnLFxuICAnSU5ERVhFUycsXG4gICdJTkZJTEUnLFxuICAnSU5JVElBTCcsXG4gICdJTklUSUFMX1NJWkUnLFxuICAnSU5JVElBVEUnLFxuICAnSU5ORVInLFxuICAnSU5PVVQnLFxuICAnSU5TRU5TSVRJVkUnLFxuICAnSU5TRVJUX01FVEhPRCcsXG4gICdJTlNUQUxMJyxcbiAgJ0lOU1RBTkNFJyxcbiAgJ0lOVCcsXG4gICdJTlQxJyxcbiAgJ0lOVDInLFxuICAnSU5UMycsXG4gICdJTlQ0JyxcbiAgJ0lOVDgnLFxuICAnSU5URUdFUicsXG4gICdJTlRPJyxcbiAgJ0lOVklTSUJMRScsXG4gICdJTlZPS0VSJyxcbiAgJ0lPJyxcbiAgJ0lPX0FGVEVSX0dUSURTJyxcbiAgJ0lPX0JFRk9SRV9HVElEUycsXG4gICdJT19USFJFQUQnLFxuICAnSVBDJyxcbiAgJ0lTT0xBVElPTicsXG4gICdJU1NVRVInLFxuICAnSVRFUkFURScsXG4gICdKU09OJyxcbiAgJ0tFWScsXG4gICdLRVlSSU5HJyxcbiAgJ0tFWVMnLFxuICAnS0VZX0JMT0NLX1NJWkUnLFxuICAnTEFOR1VBR0UnLFxuICAnTEFTVCcsXG4gICdMQVRFUkFMJyxcbiAgJ0xFQURJTkcnLFxuICAnTEVBVkUnLFxuICAnTEVBVkVTJyxcbiAgJ0xFU1MnLFxuICAnTEVWRUwnLFxuICAnTElORUFSJyxcbiAgJ0xJTkVTJyxcbiAgJ0xJTkVTVFJJTkcnLFxuICAnTElTVCcsXG4gICdMT0FEJyxcbiAgJ0xPQ0FMJyxcbiAgJ0xPQ0snLFxuICAnTE9DS0VEJyxcbiAgJ0xPQ0tTJyxcbiAgJ0xPR0ZJTEUnLFxuICAnTE9HUycsXG4gICdMT05HJyxcbiAgJ0xPTkdCTE9CJyxcbiAgJ0xPTkdURVhUJyxcbiAgJ0xPT1AnLFxuICAnTE9XX1BSSU9SSVRZJyxcbiAgJ01BU1RFUicsXG4gICdNQVNURVJfQVVUT19QT1NJVElPTicsXG4gICdNQVNURVJfQklORCcsXG4gICdNQVNURVJfQ09NUFJFU1NJT05fQUxHT1JJVEhNUycsXG4gICdNQVNURVJfQ09OTkVDVF9SRVRSWScsXG4gICdNQVNURVJfREVMQVknLFxuICAnTUFTVEVSX0hFQVJUQkVBVF9QRVJJT0QnLFxuICAnTUFTVEVSX0hPU1QnLFxuICAnTUFTVEVSX0xPR19GSUxFJyxcbiAgJ01BU1RFUl9MT0dfUE9TJyxcbiAgJ01BU1RFUl9QQVNTV09SRCcsXG4gICdNQVNURVJfUE9SVCcsXG4gICdNQVNURVJfUFVCTElDX0tFWV9QQVRIJyxcbiAgJ01BU1RFUl9SRVRSWV9DT1VOVCcsXG4gICdNQVNURVJfU0VSVkVSX0lEJyxcbiAgJ01BU1RFUl9TU0wnLFxuICAnTUFTVEVSX1NTTF9DQScsXG4gICdNQVNURVJfU1NMX0NBUEFUSCcsXG4gICdNQVNURVJfU1NMX0NFUlQnLFxuICAnTUFTVEVSX1NTTF9DSVBIRVInLFxuICAnTUFTVEVSX1NTTF9DUkwnLFxuICAnTUFTVEVSX1NTTF9DUkxQQVRIJyxcbiAgJ01BU1RFUl9TU0xfS0VZJyxcbiAgJ01BU1RFUl9TU0xfVkVSSUZZX1NFUlZFUl9DRVJUJyxcbiAgJ01BU1RFUl9UTFNfQ0lQSEVSU1VJVEVTJyxcbiAgJ01BU1RFUl9UTFNfVkVSU0lPTicsXG4gICdNQVNURVJfVVNFUicsXG4gICdNQVNURVJfWlNURF9DT01QUkVTU0lPTl9MRVZFTCcsXG4gICdNQVhWQUxVRScsXG4gICdNQVhfQ09OTkVDVElPTlNfUEVSX0hPVVInLFxuICAnTUFYX1FVRVJJRVNfUEVSX0hPVVInLFxuICAnTUFYX1JPV1MnLFxuICAnTUFYX1NJWkUnLFxuICAnTUFYX1VQREFURVNfUEVSX0hPVVInLFxuICAnTUFYX1VTRVJfQ09OTkVDVElPTlMnLFxuICAnTUVESVVNJyxcbiAgJ01FRElVTUJMT0InLFxuICAnTUVESVVNSU5UJyxcbiAgJ01FRElVTVRFWFQnLFxuICAnTUVNQkVSJyxcbiAgJ01FTU9SWScsXG4gICdNRVJHRScsXG4gICdNRVNTQUdFX1RFWFQnLFxuICAnTUlERExFSU5UJyxcbiAgJ01JR1JBVEUnLFxuICAnTUlOVVRFX01JQ1JPU0VDT05EJyxcbiAgJ01JTlVURV9TRUNPTkQnLFxuICAnTUlOX1JPV1MnLFxuICAnTU9ERScsXG4gICdNT0RJRklFUycsXG4gICdNT0RJRlknLFxuICAnTVVMVElMSU5FU1RSSU5HJyxcbiAgJ01VTFRJUE9JTlQnLFxuICAnTVVMVElQT0xZR09OJyxcbiAgJ01VVEVYJyxcbiAgJ01ZU1FMX0VSUk5PJyxcbiAgJ05BTUUnLFxuICAnTkFNRVMnLFxuICAnTkFUSU9OQUwnLFxuICAnTkFUVVJBTCcsXG4gICdOQ0hBUicsXG4gICdOREInLFxuICAnTkRCQ0xVU1RFUicsXG4gICdORVNURUQnLFxuICAnTkVUV09SS19OQU1FU1BBQ0UnLFxuICAnTkVWRVInLFxuICAnTkVXJyxcbiAgJ05FWFQnLFxuICAnTk8nLFxuICAnTk9ERUdST1VQJyxcbiAgJ05PTkUnLFxuICAnTk9XQUlUJyxcbiAgJ05PX1dBSVQnLFxuICAnTk9fV1JJVEVfVE9fQklOTE9HJyxcbiAgJ05VTEwnLFxuICAnTlVMTFMnLFxuICAnTlVNQkVSJyxcbiAgJ05VTUVSSUMnLFxuICAnTlZBUkNIQVInLFxuICAnT0YnLFxuICAnT0ZGJyxcbiAgJ09GRlNFVCcsXG4gICdPSicsXG4gICdPTEQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkUnLFxuICAnT05MWScsXG4gICdPUEVOJyxcbiAgJ09QVElNSVpFJyxcbiAgJ09QVElNSVpFUl9DT1NUUycsXG4gICdPUFRJT04nLFxuICAnT1BUSU9OQUwnLFxuICAnT1BUSU9OQUxMWScsXG4gICdPUFRJT05TJyxcbiAgJ09SREVSJyxcbiAgJ09SRElOQUxJVFknLFxuICAnT1JHQU5JWkFUSU9OJyxcbiAgJ09USEVSUycsXG4gICdPVVQnLFxuICAnT1VURVInLFxuICAnT1VURklMRScsXG4gICdPVkVSJyxcbiAgJ09XTkVSJyxcbiAgJ1BBQ0tfS0VZUycsXG4gICdQQUdFJyxcbiAgJ1BBUlNFUicsXG4gICdQQVJTRV9HQ09MX0VYUFInLFxuICAnUEFSVElBTCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFSVElUSU9OSU5HJyxcbiAgJ1BBUlRJVElPTlMnLFxuICAnUEFTU1dPUkQnLFxuICAnUEFTU1dPUkRfTE9DS19USU1FJyxcbiAgJ1BBVEgnLFxuICAnUEVSU0lTVCcsXG4gICdAQFBFUlNJU1QnLFxuICAnUEVSU0lTVF9PTkxZJyxcbiAgJ0BAUEVSU0lTVF9PTkxZJyxcbiAgJ1BIQVNFJyxcbiAgJ1BMVUdJTicsXG4gICdQTFVHSU5TJyxcbiAgJ1BMVUdJTl9ESVInLFxuICAnUE9JTlQnLFxuICAnUE9MWUdPTicsXG4gICdQT1JUJyxcbiAgJ1BSRUNFREVTJyxcbiAgJ1BSRUNFRElORycsXG4gICdQUkVDSVNJT04nLFxuICAnUFJFU0VSVkUnLFxuICAnUFJFVicsXG4gICdQUklNQVJZJyxcbiAgJ1BSSVZJTEVHRVMnLFxuICAnUFJJVklMRUdFX0NIRUNLU19VU0VSJyxcbiAgJ1BST0NFRFVSRScsXG4gICdQUk9DRVNTJyxcbiAgJ1BST0NFU1NMSVNUJyxcbiAgJ1BST0ZJTEUnLFxuICAnUFJPRklMRVMnLFxuICAnUFJPWFknLFxuICAnUFVSR0UnLFxuICAnUVVFUlknLFxuICAnUVVJQ0snLFxuICAnUkFORE9NJyxcbiAgJ1JBTkdFJyxcbiAgJ1JFQUQnLFxuICAnUkVBRFMnLFxuICAnUkVBRF9PTkxZJyxcbiAgJ1JFQURfV1JJVEUnLFxuICAnUkVBTCcsXG4gICdSRUJVSUxEJyxcbiAgJ1JFQ09WRVInLFxuICAnUkVDVVJTSVZFJyxcbiAgJ1JFRE9GSUxFJyxcbiAgJ1JFRE9fQlVGRkVSX1NJWkUnLFxuICAnUkVEVU5EQU5UJyxcbiAgJ1JFRkVSRU5DRScsXG4gICdSRUZFUkVOQ0VTJyxcbiAgJ1JFR0lTVFJBVElPTicsXG4gICdSRUxBWScsXG4gICdSRUxBWUxPRycsXG4gICdSRUxBWV9MT0dfRklMRScsXG4gICdSRUxBWV9MT0dfUE9TJyxcbiAgJ1JFTEFZX1RIUkVBRCcsXG4gICdSRUxFQVNFJyxcbiAgJ1JFTE9BRCcsXG4gICdSRU1PVEUnLFxuICAnUkVNT1ZFJyxcbiAgJ1JFTkFNRScsXG4gICdSRU9SR0FOSVpFJyxcbiAgJ1JFUEFJUicsXG4gICdSRVBFQVRBQkxFJyxcbiAgJ1JFUExJQ0EnLFxuICAnUkVQTElDQVMnLFxuICAnUkVQTElDQVRFX0RPX0RCJyxcbiAgJ1JFUExJQ0FURV9ET19UQUJMRScsXG4gICdSRVBMSUNBVEVfSUdOT1JFX0RCJyxcbiAgJ1JFUExJQ0FURV9JR05PUkVfVEFCTEUnLFxuICAnUkVQTElDQVRFX1JFV1JJVEVfREInLFxuICAnUkVQTElDQVRFX1dJTERfRE9fVEFCTEUnLFxuICAnUkVQTElDQVRFX1dJTERfSUdOT1JFX1RBQkxFJyxcbiAgJ1JFUExJQ0FUSU9OJyxcbiAgJ1JFUVVJUkUnLFxuICAnUkVRVUlSRV9ST1dfRk9STUFUJyxcbiAgJ1JFU0lHTkFMJyxcbiAgJ1JFU09VUkNFJyxcbiAgJ1JFU1BFQ1QnLFxuICAnUkVTVE9SRScsXG4gICdSRVNUUklDVCcsXG4gICdSRVNVTUUnLFxuICAnUkVUQUlOJyxcbiAgJ1JFVFVSTicsXG4gICdSRVRVUk5FRF9TUUxTVEFURScsXG4gICdSRVRVUk5JTkcnLFxuICAnUkVUVVJOUycsXG4gICdSRVVTRScsXG4gICdST0xFJyxcbiAgJ1JPTExVUCcsXG4gICdST1RBVEUnLFxuICAnUk9VVElORScsXG4gICdST1cnLFxuICAnUk9XUycsXG4gICdST1dfRk9STUFUJyxcbiAgJ1JUUkVFJyxcbiAgJ1NDSEVEVUxFJyxcbiAgJ1NDSEVNQVMnLFxuICAnU0NIRU1BX05BTUUnLFxuICAnU0VDT05EQVJZJyxcbiAgJ1NFQ09OREFSWV9FTkdJTkUnLFxuICAnU0VDT05EQVJZX0VOR0lORV9BVFRSSUJVVEUnLFxuICAnU0VDT05EQVJZX0xPQUQnLFxuICAnU0VDT05EQVJZX1VOTE9BRCcsXG4gICdTRUNPTkRfTUlDUk9TRUNPTkQnLFxuICAnU0VDVVJJVFknLFxuICAnU0VOU0lUSVZFJyxcbiAgJ1NFUEFSQVRPUicsXG4gICdTRVJJQUwnLFxuICAnU0VSSUFMSVpBQkxFJyxcbiAgJ1NFUlZFUicsXG4gICdTRVNTSU9OJyxcbiAgJ0BAU0VTU0lPTicsXG4gICdTSEFSRScsXG4gICdTSUdOQUwnLFxuICAnU0lHTkVEJyxcbiAgJ1NJTVBMRScsXG4gICdTS0lQJyxcbiAgJ1NMQVZFJyxcbiAgJ1NMT1cnLFxuICAnU01BTExJTlQnLFxuICAnU05BUFNIT1QnLFxuICAnU09DS0VUJyxcbiAgJ1NPTUUnLFxuICAnU09OQU1FJyxcbiAgJ1NPVU5EUycsXG4gICdTT1VSQ0UnLFxuICAnU09VUkNFX0FVVE9fUE9TSVRJT04nLFxuICAnU09VUkNFX0JJTkQnLFxuICAnU09VUkNFX0NPTVBSRVNTSU9OX0FMR09SSVRITVMnLFxuICAnU09VUkNFX0NPTk5FQ1RfUkVUUlknLFxuICAnU09VUkNFX0RFTEFZJyxcbiAgJ1NPVVJDRV9IRUFSVEJFQVRfUEVSSU9EJyxcbiAgJ1NPVVJDRV9IT1NUJyxcbiAgJ1NPVVJDRV9MT0dfRklMRScsXG4gICdTT1VSQ0VfTE9HX1BPUycsXG4gICdTT1VSQ0VfUEFTU1dPUkQnLFxuICAnU09VUkNFX1BPUlQnLFxuICAnU09VUkNFX1BVQkxJQ19LRVlfUEFUSCcsXG4gICdTT1VSQ0VfUkVUUllfQ09VTlQnLFxuICAnU09VUkNFX1NTTCcsXG4gICdTT1VSQ0VfU1NMX0NBJyxcbiAgJ1NPVVJDRV9TU0xfQ0FQQVRIJyxcbiAgJ1NPVVJDRV9TU0xfQ0VSVCcsXG4gICdTT1VSQ0VfU1NMX0NJUEhFUicsXG4gICdTT1VSQ0VfU1NMX0NSTCcsXG4gICdTT1VSQ0VfU1NMX0NSTFBBVEgnLFxuICAnU09VUkNFX1NTTF9LRVknLFxuICAnU09VUkNFX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnLFxuICAnU09VUkNFX1RMU19DSVBIRVJTVUlURVMnLFxuICAnU09VUkNFX1RMU19WRVJTSU9OJyxcbiAgJ1NPVVJDRV9VU0VSJyxcbiAgJ1NPVVJDRV9aU1REX0NPTVBSRVNTSU9OX0xFVkVMJyxcbiAgJ1NQQVRJQUwnLFxuICAnU1BFQ0lGSUMnLFxuICAnU1FMJyxcbiAgJ1NRTEVYQ0VQVElPTicsXG4gICdTUUxTVEFURScsXG4gICdTUUxXQVJOSU5HJyxcbiAgJ1NRTF9BRlRFUl9HVElEUycsXG4gICdTUUxfQUZURVJfTVRTX0dBUFMnLFxuICAnU1FMX0JFRk9SRV9HVElEUycsXG4gICdTUUxfQklHX1JFU1VMVCcsXG4gICdTUUxfQlVGRkVSX1JFU1VMVCcsXG4gICdTUUxfQ0FDSEUnLFxuICAnU1FMX0NBTENfRk9VTkRfUk9XUycsXG4gICdTUUxfTk9fQ0FDSEUnLFxuICAnU1FMX1NNQUxMX1JFU1VMVCcsXG4gICdTUUxfVEhSRUFEJyxcbiAgJ1NRTF9UU0lfREFZJyxcbiAgJ1NRTF9UU0lfSE9VUicsXG4gICdTUUxfVFNJX01JTlVURScsXG4gICdTUUxfVFNJX01PTlRIJyxcbiAgJ1NRTF9UU0lfUVVBUlRFUicsXG4gICdTUUxfVFNJX1NFQ09ORCcsXG4gICdTUUxfVFNJX1dFRUsnLFxuICAnU1FMX1RTSV9ZRUFSJyxcbiAgJ1NSSUQnLFxuICAnU1NMJyxcbiAgJ1NUQUNLRUQnLFxuICAnU1RBUlQnLFxuICAnU1RBUlRJTkcnLFxuICAnU1RBUlRTJyxcbiAgJ1NUQVRTX0FVVE9fUkVDQUxDJyxcbiAgJ1NUQVRTX1BFUlNJU1RFTlQnLFxuICAnU1RBVFNfU0FNUExFX1BBR0VTJyxcbiAgJ1NUQVRVUycsXG4gICdTVE9QJyxcbiAgJ1NUT1JBR0UnLFxuICAnU1RPUkVEJyxcbiAgJ1NUUkVBTScsXG4gICdTVFJJTkcnLFxuICAnU1VCQ0xBU1NfT1JJR0lOJyxcbiAgJ1NVQkpFQ1QnLFxuICAnU1VCUEFSVElUSU9OJyxcbiAgJ1NVQlBBUlRJVElPTlMnLFxuICAnU1VQRVInLFxuICAnU1VTUEVORCcsXG4gICdTV0FQUycsXG4gICdTV0lUQ0hFUycsXG4gICdTWVNURU0nLFxuICAnVEFCTEVTJyxcbiAgJ1RBQkxFU1BBQ0UnLFxuICAnVEFCTEVfQ0hFQ0tTVU0nLFxuICAnVEFCTEVfTkFNRScsXG4gICdURU1QT1JBUlknLFxuICAnVEVNUFRBQkxFJyxcbiAgJ1RFUk1JTkFURUQnLFxuICAnVEVYVCcsXG4gICdUSEFOJyxcbiAgJ1RIRU4nLFxuICAnVEhSRUFEX1BSSU9SSVRZJyxcbiAgJ1RJRVMnLFxuICAnVElOWUJMT0InLFxuICAnVElOWUlOVCcsXG4gICdUSU5ZVEVYVCcsXG4gICdUTFMnLFxuICAnVE8nLFxuICAnVFJBSUxJTkcnLFxuICAnVFJBTlNBQ1RJT04nLFxuICAnVFJJR0dFUicsXG4gICdUUklHR0VSUycsXG4gICdUUlVFJyxcbiAgJ1RZUEUnLFxuICAnVFlQRVMnLFxuICAnVU5CT1VOREVEJyxcbiAgJ1VOQ09NTUlUVEVEJyxcbiAgJ1VOREVGSU5FRCcsXG4gICdVTkRPJyxcbiAgJ1VORE9GSUxFJyxcbiAgJ1VORE9fQlVGRkVSX1NJWkUnLFxuICAnVU5JQ09ERScsXG4gICdVTklOU1RBTEwnLFxuICAnVU5JUVVFJyxcbiAgJ1VOS05PV04nLFxuICAnVU5MT0NLJyxcbiAgJ1VOUkVHSVNURVInLFxuICAnVU5TSUdORUQnLFxuICAnVU5USUwnLFxuICAnVVBHUkFERScsXG4gICdVU0FHRScsXG4gICdVU0VSX1JFU09VUkNFUycsXG4gICdVU0VfRlJNJyxcbiAgJ1ZBTElEQVRJT04nLFxuICAnVkFMVUUnLFxuICAnVkFSQklOQVJZJyxcbiAgJ1ZBUkNIQVInLFxuICAnVkFSQ0hBUkFDVEVSJyxcbiAgJ1ZBUklBQkxFUycsXG4gICdWQVJZSU5HJyxcbiAgJ1ZDUFUnLFxuICAnVklFVycsXG4gICdWSVJUVUFMJyxcbiAgJ1ZJU0lCTEUnLFxuICAnV0FJVCcsXG4gICdXQVJOSU5HUycsXG4gICdXSElMRScsXG4gICdXSU5ET1cnLFxuICAnV0lUSE9VVCcsXG4gICdXT1JLJyxcbiAgJ1dSQVBQRVInLFxuICAnV1JJVEUnLFxuICAnWDUwOScsXG4gICdYSUQnLFxuICAnWE1MJyxcbiAgJ1lFQVJfTU9OVEgnLFxuICAnWkVST0ZJTEwnLFxuICAnWk9ORScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbi8vIGh0dHBzOi8vZGV2Lm15c3FsLmNvbS9kb2MvcmVmbWFuLzguMC9lbi9zcWwtc3RhdGVtZW50cy5odG1sXG5jb25zdCByZXNlcnZlZENvbW1hbmRzID0gW1xuICAnQUxURVIgREFUQUJBU0UnLFxuICAnQUxURVIgRVZFTlQnLFxuICAnQUxURVIgRlVOQ1RJT04nLFxuICAnQUxURVIgSU5TVEFOQ0UnLFxuICAnQUxURVIgTE9HRklMRSBHUk9VUCcsXG4gICdBTFRFUiBQUk9DRURVUkUnLFxuICAnQUxURVIgUkVTT1VSQ0UgR1JPVVAnLFxuICAnQUxURVIgU0VSVkVSJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFRBQkxFU1BBQ0UnLFxuICAnQUxURVIgVVNFUicsXG4gICdBTFRFUiBWSUVXJyxcbiAgJ0FOQUxZWkUgVEFCTEUnLFxuICAnQklOTE9HJyxcbiAgJ0NBQ0hFIElOREVYJyxcbiAgJ0NBTEwnLFxuICAnQ0hBTkdFIE1BU1RFUiBUTycsXG4gICdDSEFOR0UgUkVQTElDQVRJT04gRklMVEVSJyxcbiAgJ0NIQU5HRSBSRVBMSUNBVElPTiBTT1VSQ0UgVE8nLFxuICAnQ0hFQ0sgVEFCTEUnLFxuICAnQ0hFQ0tTVU0gVEFCTEUnLFxuICAnQ0xPTkUnLFxuICAnQ09NTUlUJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgRVZFTlQnLFxuICAnQ1JFQVRFIEZVTkNUSU9OJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgSU5ERVgnLFxuICAnQ1JFQVRFIExPR0ZJTEUgR1JPVVAnLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgUkVTT1VSQ0UgR1JPVVAnLFxuICAnQ1JFQVRFIFJPTEUnLFxuICAnQ1JFQVRFIFNFUlZFUicsXG4gICdDUkVBVEUgU1BBVElBTCBSRUZFUkVOQ0UgU1lTVEVNJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEVTUEFDRScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVVNFUicsXG4gICdDUkVBVEUgVklFVycsXG4gICdERUFMTE9DQVRFIFBSRVBBUkUnLFxuICAnREVMRVRFJyxcbiAgJ0RFU0NSSUJFJyxcbiAgJ0RPJyxcbiAgJ0RST1AgREFUQUJBU0UnLFxuICAnRFJPUCBFVkVOVCcsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgRlVOQ1RJT04nLFxuICAnRFJPUCBJTkRFWCcsXG4gICdEUk9QIExPR0ZJTEUgR1JPVVAnLFxuICAnRFJPUCBQUk9DRURVUkUnLFxuICAnRFJPUCBSRVNPVVJDRSBHUk9VUCcsXG4gICdEUk9QIFJPTEUnLFxuICAnRFJPUCBTRVJWRVInLFxuICAnRFJPUCBTUEFUSUFMIFJFRkVSRU5DRSBTWVNURU0nLFxuICAnRFJPUCBUQUJMRScsXG4gICdEUk9QIFRBQkxFU1BBQ0UnLFxuICAnRFJPUCBUUklHR0VSJyxcbiAgJ0RST1AgVVNFUicsXG4gICdEUk9QIFZJRVcnLFxuICAnRVhFQ1VURScsXG4gICdFWFBMQUlOJyxcbiAgJ0ZMVVNIJyxcbiAgJ0dSQU5UJyxcbiAgJ0hBTkRMRVInLFxuICAnSEVMUCcsXG4gICdJTVBPUlQgVEFCTEUnLFxuICAnSU5TRVJUJyxcbiAgJ0lOU1RBTEwgQ09NUE9ORU5UJyxcbiAgJ0lOU1RBTEwgUExVR0lOJyxcbiAgJ0tJTEwnLFxuICAnTE9BRCBEQVRBJyxcbiAgJ0xPQUQgSU5ERVggSU5UTyBDQUNIRScsXG4gICdMT0FEIFhNTCcsXG4gICdMT0NLIElOU1RBTkNFIEZPUiBCQUNLVVAnLFxuICAnTE9DSyBUQUJMRVMnLFxuICAnTUFTVEVSX1BPU19XQUlUJyxcbiAgJ09QVElNSVpFIFRBQkxFJyxcbiAgJ1BSRVBBUkUnLFxuICAnUFVSR0UgQklOQVJZIExPR1MnLFxuICAnUkVMRUFTRSBTQVZFUE9JTlQnLFxuICAnUkVOQU1FIFRBQkxFJyxcbiAgJ1JFTkFNRSBVU0VSJyxcbiAgJ1JFUEFJUiBUQUJMRScsXG4gICdSRVBMQUNFJyxcbiAgJ1JFU0VUJyxcbiAgJ1JFU0VUIE1BU1RFUicsXG4gICdSRVNFVCBQRVJTSVNUJyxcbiAgJ1JFU0VUIFJFUExJQ0EnLFxuICAnUkVTRVQgU0xBVkUnLFxuICAnUkVTVEFSVCcsXG4gICdSRVZPS0UnLFxuICAnUk9MTEJBQ0snLFxuICAnUk9MTEJBQ0sgVE8gU0FWRVBPSU5UJyxcbiAgJ1NBVkVQT0lOVCcsXG4gICdTRUxFQ1QnLFxuICAnU0VUJyxcbiAgJ1NFVCBDSEFSQUNURVIgU0VUJyxcbiAgJ1NFVCBERUZBVUxUIFJPTEUnLFxuICAnU0VUIE5BTUVTJyxcbiAgJ1NFVCBQQVNTV09SRCcsXG4gICdTRVQgUkVTT1VSQ0UgR1JPVVAnLFxuICAnU0VUIFJPTEUnLFxuICAnU0VUIFRSQU5TQUNUSU9OJyxcbiAgJ1NIT1cnLFxuICAnU0hPVyBCSU5BUlkgTE9HUycsXG4gICdTSE9XIEJJTkxPRyBFVkVOVFMnLFxuICAnU0hPVyBDSEFSQUNURVIgU0VUJyxcbiAgJ1NIT1cgQ09MTEFUSU9OJyxcbiAgJ1NIT1cgQ09MVU1OUycsXG4gICdTSE9XIENSRUFURSBEQVRBQkFTRScsXG4gICdTSE9XIENSRUFURSBFVkVOVCcsXG4gICdTSE9XIENSRUFURSBGVU5DVElPTicsXG4gICdTSE9XIENSRUFURSBQUk9DRURVUkUnLFxuICAnU0hPVyBDUkVBVEUgVEFCTEUnLFxuICAnU0hPVyBDUkVBVEUgVFJJR0dFUicsXG4gICdTSE9XIENSRUFURSBVU0VSJyxcbiAgJ1NIT1cgQ1JFQVRFIFZJRVcnLFxuICAnU0hPVyBEQVRBQkFTRVMnLFxuICAnU0hPVyBFTkdJTkUnLFxuICAnU0hPVyBFTkdJTkVTJyxcbiAgJ1NIT1cgRVJST1JTJyxcbiAgJ1NIT1cgRVZFTlRTJyxcbiAgJ1NIT1cgRlVOQ1RJT04gQ09ERScsXG4gICdTSE9XIEZVTkNUSU9OIFNUQVRVUycsXG4gICdTSE9XIEdSQU5UUycsXG4gICdTSE9XIElOREVYJyxcbiAgJ1NIT1cgTUFTVEVSIFNUQVRVUycsXG4gICdTSE9XIE9QRU4gVEFCTEVTJyxcbiAgJ1NIT1cgUExVR0lOUycsXG4gICdTSE9XIFBSSVZJTEVHRVMnLFxuICAnU0hPVyBQUk9DRURVUkUgQ09ERScsXG4gICdTSE9XIFBST0NFRFVSRSBTVEFUVVMnLFxuICAnU0hPVyBQUk9DRVNTTElTVCcsXG4gICdTSE9XIFBST0ZJTEUnLFxuICAnU0hPVyBQUk9GSUxFUycsXG4gICdTSE9XIFJFTEFZTE9HIEVWRU5UUycsXG4gICdTSE9XIFJFUExJQ0EgU1RBVFVTJyxcbiAgJ1NIT1cgUkVQTElDQVMnLFxuICAnU0hPVyBTTEFWRScsXG4gICdTSE9XIFNMQVZFIEhPU1RTJyxcbiAgJ1NIT1cgU1RBVFVTJyxcbiAgJ1NIT1cgVEFCTEUgU1RBVFVTJyxcbiAgJ1NIT1cgVEFCTEVTJyxcbiAgJ1NIT1cgVFJJR0dFUlMnLFxuICAnU0hPVyBWQVJJQUJMRVMnLFxuICAnU0hPVyBXQVJOSU5HUycsXG4gICdTSFVURE9XTicsXG4gICdTT1VSQ0VfUE9TX1dBSVQnLFxuICAnU1RBUlQgR1JPVVBfUkVQTElDQVRJT04nLFxuICAnU1RBUlQgUkVQTElDQScsXG4gICdTVEFSVCBTTEFWRScsXG4gICdTVEFSVCBUUkFOU0FDVElPTicsXG4gICdTVE9QIEdST1VQX1JFUExJQ0FUSU9OJyxcbiAgJ1NUT1AgUkVQTElDQScsXG4gICdTVE9QIFNMQVZFJyxcbiAgJ1RBQkxFJyxcbiAgJ1RSVU5DQVRFIFRBQkxFJyxcbiAgJ1VOSU5TVEFMTCBDT01QT05FTlQnLFxuICAnVU5JTlNUQUxMIFBMVUdJTicsXG4gICdVTkxPQ0sgSU5TVEFOQ0UnLFxuICAnVU5MT0NLIFRBQkxFUycsXG4gICdVUERBVEUnLFxuICAnVVNFJyxcbiAgJ1ZBTFVFUycsXG4gICdXSVRIJyxcbiAgJ1hBJyxcbiAgLy8gZmxvdyBjb250cm9sXG4gIC8vICdJRicsXG4gICdJVEVSQVRFJyxcbiAgJ0xFQVZFJyxcbiAgJ0xPT1AnLFxuICAnUkVQRUFUJyxcbiAgJ1JFVFVSTicsXG4gICdXSElMRScsXG4gIC8vIG90aGVyXG4gICdBREQnLFxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0ZST00nLFxuICAnR1JPVVAgQlknLFxuICAnSEFWSU5HJyxcbiAgJ0lOU0VSVCBJTlRPJyxcbiAgJ0xJTUlUJyxcbiAgJ09GRlNFVCcsXG4gICdPUkRFUiBCWScsXG4gICdXSEVSRScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnQ1JPU1MgSk9JTicsXG4gICdOQVRVUkFMIEpPSU4nLFxuICAvLyBub24tc3RhbmRhcmQgam9pbnNcbiAgJ1NUUkFJR0hUX0pPSU4nLFxuICAnTkFUVVJBTCBMRUZUIEpPSU4nLFxuICAnTkFUVVJBTCBMRUZUIE9VVEVSIEpPSU4nLFxuICAnTkFUVVJBTCBSSUdIVCBKT0lOJyxcbiAgJ05BVFVSQUwgUklHSFQgT1VURVIgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJywgJ0VMU0VJRiddO1xuXG4vLyBodHRwczovL2Rldi5teXNxbC5jb20vZG9jL3JlZm1hbi84LjAvZW4vXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNeVNxbEZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJywgJ1hPUiddO1xuICBzdGF0aWMgcmVzZXJ2ZWRLZXl3b3JkcyA9IGRlZHVwZShbLi4ucmVzZXJ2ZWRLZXl3b3JkcywgLi4ucmVzZXJ2ZWRGdW5jdGlvbnNdKTtcbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gWydgYCcsIFwiJydcIiwgJ1wiXCInXTtcbiAgc3RhdGljIGJsb2NrU3RhcnQgPSBbJygnLCAnQ0FTRSddO1xuICBzdGF0aWMgYmxvY2tFbmQgPSBbJyknLCAnRU5EJ107XG4gIHN0YXRpYyBpbmRleGVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnPyddO1xuICBzdGF0aWMgbmFtZWRQbGFjZWhvbGRlclR5cGVzID0gW107XG4gIHN0YXRpYyBsaW5lQ29tbWVudFR5cGVzID0gWyctLScsICcjJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBwcmVmaXg6ICdAOicgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnOj0nLCAnPDwnLCAnPj4nLCAnPD0+JywgJyYmJywgJ3x8JywgJy0+JywgJy0+PiddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBNeVNxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogTXlTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBNeVNxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IE15U3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogTXlTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogTXlTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IE15U3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IE15U3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBzcGVjaWFsV29yZENoYXJzOiBNeVNxbEZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBNeVNxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cblxuICB0b2tlbk92ZXJyaWRlKHRva2VuOiBUb2tlbikge1xuICAgIC8vIFtTRVRdICggLi4uXG4gICAgaWYgKGlzVG9rZW4uU0VUKHRva2VuKSAmJiB0aGlzLnRva2VuTG9va0FoZWFkKCkudmFsdWUgPT09ICcoJykge1xuICAgICAgLy8gVGhpcyBpcyBTRVQgZGF0YXR5cGUsIG5vdCBTRVQgc3RhdGVtZW50XG4gICAgICByZXR1cm4geyB0eXBlOiBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCwgdmFsdWU6IHRva2VuLnZhbHVlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG4iLCJpbXBvcnQgRm9ybWF0dGVyIGZyb20gJy4uL2NvcmUvRm9ybWF0dGVyJztcbmltcG9ydCBUb2tlbml6ZXIgZnJvbSAnLi4vY29yZS9Ub2tlbml6ZXInO1xuaW1wb3J0IHR5cGUgeyBTdHJpbmdQYXR0ZXJuVHlwZSB9IGZyb20gJy4uL2NvcmUvcmVnZXhGYWN0b3J5JztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLy8gVE9ETzogc3BsaXQgdGhpcyBpbnRvIG9iamVjdCB3aXRoIGZ1bmN0aW9uIGNhdGVnb3JpZXNcbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCBmdW5jdGlvbnNcbiAqIGRpc3RpbmN0IGZyb20gS2V5d29yZHMgZHVlIHRvIGludGVyYWN0aW9uIHdpdGggcGFyZW50aGVzZXNcbiAqL1xuLy8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9mdW5jdGlvbnMuaHRtbFxuY29uc3QgcmVzZXJ2ZWRGdW5jdGlvbnMgPSBbXG4gICdBQk9SVCcsXG4gICdBQlMnLFxuICAnQUNPUycsXG4gICdBRFZJU09SJyxcbiAgJ0FSUkFZX0FHRycsXG4gICdBUlJBWV9BR0cnLFxuICAnQVJSQVlfQVBQRU5EJyxcbiAgJ0FSUkFZX0FWRycsXG4gICdBUlJBWV9CSU5BUllfU0VBUkNIJyxcbiAgJ0FSUkFZX0NPTkNBVCcsXG4gICdBUlJBWV9DT05UQUlOUycsXG4gICdBUlJBWV9DT1VOVCcsXG4gICdBUlJBWV9ESVNUSU5DVCcsXG4gICdBUlJBWV9FWENFUFQnLFxuICAnQVJSQVlfRkxBVFRFTicsXG4gICdBUlJBWV9JRk5VTEwnLFxuICAnQVJSQVlfSU5TRVJUJyxcbiAgJ0FSUkFZX0lOVEVSU0VDVCcsXG4gICdBUlJBWV9MRU5HVEgnLFxuICAnQVJSQVlfTUFYJyxcbiAgJ0FSUkFZX01JTicsXG4gICdBUlJBWV9NT1ZFJyxcbiAgJ0FSUkFZX1BPU0lUSU9OJyxcbiAgJ0FSUkFZX1BSRVBFTkQnLFxuICAnQVJSQVlfUFVUJyxcbiAgJ0FSUkFZX1JBTkdFJyxcbiAgJ0FSUkFZX1JFTU9WRScsXG4gICdBUlJBWV9SRVBFQVQnLFxuICAnQVJSQVlfUkVQTEFDRScsXG4gICdBUlJBWV9SRVZFUlNFJyxcbiAgJ0FSUkFZX1NPUlQnLFxuICAnQVJSQVlfU1RBUicsXG4gICdBUlJBWV9TVU0nLFxuICAnQVJSQVlfU1lNRElGRicsXG4gICdBUlJBWV9TWU1ESUZGMScsXG4gICdBUlJBWV9TWU1ESUZGTicsXG4gICdBUlJBWV9VTklPTicsXG4gICdBU0lOJyxcbiAgJ0FUQU4nLFxuICAnQVRBTjInLFxuICAnQVZHJyxcbiAgJ0JBU0U2NCcsXG4gICdCQVNFNjRfREVDT0RFJyxcbiAgJ0JBU0U2NF9FTkNPREUnLFxuICAnQklUQU5EICcsXG4gICdCSVRDTEVBUiAnLFxuICAnQklUTk9UICcsXG4gICdCSVRPUiAnLFxuICAnQklUU0VUICcsXG4gICdCSVRTSElGVCAnLFxuICAnQklUVEVTVCAnLFxuICAnQklUWE9SICcsXG4gICdDRUlMJyxcbiAgJ0NMT0NLX0xPQ0FMJyxcbiAgJ0NMT0NLX01JTExJUycsXG4gICdDTE9DS19TVFInLFxuICAnQ0xPQ0tfVFonLFxuICAnQ0xPQ0tfVVRDJyxcbiAgJ0NPQUxFU0NFJyxcbiAgJ0NPTkNBVCcsXG4gICdDT05DQVQyJyxcbiAgJ0NPTlRBSU5TJyxcbiAgJ0NPTlRBSU5TX1RPS0VOJyxcbiAgJ0NPTlRBSU5TX1RPS0VOX0xJS0UnLFxuICAnQ09OVEFJTlNfVE9LRU5fUkVHRVhQJyxcbiAgJ0NPUycsXG4gICdDT1VOVCcsXG4gICdDT1VOVCcsXG4gICdDT1VOVE4nLFxuICAnQ1VNRV9ESVNUJyxcbiAgJ0NVUkwnLFxuICAnREFURV9BRERfTUlMTElTJyxcbiAgJ0RBVEVfQUREX1NUUicsXG4gICdEQVRFX0RJRkZfTUlMTElTJyxcbiAgJ0RBVEVfRElGRl9TVFInLFxuICAnREFURV9GT1JNQVRfU1RSJyxcbiAgJ0RBVEVfUEFSVF9NSUxMSVMnLFxuICAnREFURV9QQVJUX1NUUicsXG4gICdEQVRFX1JBTkdFX01JTExJUycsXG4gICdEQVRFX1JBTkdFX1NUUicsXG4gICdEQVRFX1RSVU5DX01JTExJUycsXG4gICdEQVRFX1RSVU5DX1NUUicsXG4gICdERUNPREUnLFxuICAnREVDT0RFX0pTT04nLFxuICAnREVHUkVFUycsXG4gICdERU5TRV9SQU5LJyxcbiAgJ0RVUkFUSU9OX1RPX1NUUicsXG4gIC8vICdFJyxcbiAgJ0VOQ09ERURfU0laRScsXG4gICdFTkNPREVfSlNPTicsXG4gICdFWFAnLFxuICAnRklSU1RfVkFMVUUnLFxuICAnRkxPT1InLFxuICAnR1JFQVRFU1QnLFxuICAnSEFTX1RPS0VOJyxcbiAgJ0lGSU5GJyxcbiAgJ0lGTUlTU0lORycsXG4gICdJRk1JU1NJTkdPUk5VTEwnLFxuICAnSUZOQU4nLFxuICAnSUZOQU5PUklORicsXG4gICdJRk5VTEwnLFxuICAnSU5JVENBUCcsXG4gICdJU0FSUkFZJyxcbiAgJ0lTQVRPTScsXG4gICdJU0JJVFNFVCcsXG4gICdJU0JPT0xFQU4nLFxuICAnSVNOVU1CRVInLFxuICAnSVNPQkpFQ1QnLFxuICAnSVNTVFJJTkcnLFxuICAnTEFHJyxcbiAgJ0xBU1RfVkFMVUUnLFxuICAnTEVBRCcsXG4gICdMRUFTVCcsXG4gICdMRU5HVEgnLFxuICAnTE4nLFxuICAnTE9HJyxcbiAgJ0xPV0VSJyxcbiAgJ0xUUklNJyxcbiAgJ01BWCcsXG4gICdNRUFOJyxcbiAgJ01FRElBTicsXG4gICdNRVRBJyxcbiAgJ01JTExJUycsXG4gICdNSUxMSVNfVE9fTE9DQUwnLFxuICAnTUlMTElTX1RPX1NUUicsXG4gICdNSUxMSVNfVE9fVFonLFxuICAnTUlMTElTX1RPX1VUQycsXG4gICdNSUxMSVNfVE9fWk9ORV9OQU1FJyxcbiAgJ01JTicsXG4gICdNSVNTSU5HSUYnLFxuICAnTkFOSUYnLFxuICAnTkVHSU5GSUYnLFxuICAnTk9XX0xPQ0FMJyxcbiAgJ05PV19NSUxMSVMnLFxuICAnTk9XX1NUUicsXG4gICdOT1dfVFonLFxuICAnTk9XX1VUQycsXG4gICdOVEhfVkFMVUUnLFxuICAnTlRJTEUnLFxuICAnTlVMTElGJyxcbiAgJ05WTCcsXG4gICdOVkwyJyxcbiAgJ09CSkVDVF9BREQnLFxuICAnT0JKRUNUX0NPTkNBVCcsXG4gICdPQkpFQ1RfSU5ORVJfUEFJUlMnLFxuICAnT0JKRUNUX0lOTkVSX1ZBTFVFUycsXG4gICdPQkpFQ1RfTEVOR1RIJyxcbiAgJ09CSkVDVF9OQU1FUycsXG4gICdPQkpFQ1RfUEFJUlMnLFxuICAnT0JKRUNUX1BVVCcsXG4gICdPQkpFQ1RfUkVNT1ZFJyxcbiAgJ09CSkVDVF9SRU5BTUUnLFxuICAnT0JKRUNUX1JFUExBQ0UnLFxuICAnT0JKRUNUX1VOV1JBUCcsXG4gICdPQkpFQ1RfVkFMVUVTJyxcbiAgJ1BBSVJTJyxcbiAgJ1BFUkNFTlRfUkFOSycsXG4gICdQSScsXG4gICdQT0xZX0xFTkdUSCcsXG4gICdQT1NJTkZJRicsXG4gICdQT1NJVElPTicsXG4gICdQT1dFUicsXG4gICdSQURJQU5TJyxcbiAgJ1JBTkRPTScsXG4gICdSQU5LJyxcbiAgJ1JBVElPX1RPX1JFUE9SVCcsXG4gICdSRUdFWFBfQ09OVEFJTlMnLFxuICAnUkVHRVhQX0xJS0UnLFxuICAnUkVHRVhQX01BVENIRVMnLFxuICAnUkVHRVhQX1BPU0lUSU9OJyxcbiAgJ1JFR0VYUF9SRVBMQUNFJyxcbiAgJ1JFR0VYUF9TUExJVCcsXG4gICdSRUdFWF9DT05UQUlOUycsXG4gICdSRUdFWF9MSUtFJyxcbiAgJ1JFR0VYX01BVENIRVMnLFxuICAnUkVHRVhfUE9TSVRJT04nLFxuICAnUkVHRVhfUkVQTEFDRScsXG4gICdSRUdFWF9TUExJVCcsXG4gICdSRVBFQVQnLFxuICAnUkVQTEFDRScsXG4gICdSRVZFUlNFJyxcbiAgJ1JPVU5EJyxcbiAgJ1JPV19OVU1CRVInLFxuICAnUlRSSU0nLFxuICAnU0VBUkNIJyxcbiAgJ1NFQVJDSF9NRVRBJyxcbiAgJ1NFQVJDSF9TQ09SRScsXG4gICdTSUdOJyxcbiAgJ1NJTicsXG4gICdTUExJVCcsXG4gICdTUVJUJyxcbiAgJ1NURERFVicsXG4gICdTVERERVZfUE9QJyxcbiAgJ1NURERFVl9TQU1QJyxcbiAgJ1NUUl9UT19EVVJBVElPTicsXG4gICdTVFJfVE9fTUlMTElTJyxcbiAgJ1NUUl9UT19UWicsXG4gICdTVFJfVE9fVVRDJyxcbiAgJ1NUUl9UT19aT05FX05BTUUnLFxuICAnU1VCU1RSJyxcbiAgJ1NVRkZJWEVTJyxcbiAgJ1NVTScsXG4gICdUQU4nLFxuICAnVElUTEUnLFxuICAnVE9BUlJBWScsXG4gICdUT0FUT00nLFxuICAnVE9CT09MRUFOJyxcbiAgJ1RPS0VOUycsXG4gICdUT0tFTlMnLFxuICAnVE9OVU1CRVInLFxuICAnVE9PQkpFQ1QnLFxuICAnVE9TVFJJTkcnLFxuICAnVFJJTScsXG4gICdUUlVOQycsXG4gIC8vICdUWVBFJywgLy8gZGlzYWJsZWRcbiAgJ1VQUEVSJyxcbiAgJ1VVSUQnLFxuICAnVkFSSUFOQ0UnLFxuICAnVkFSSUFOQ0VfUE9QJyxcbiAgJ1ZBUklBTkNFX1NBTVAnLFxuICAnVkFSX1BPUCcsXG4gICdWQVJfU0FNUCcsXG4gICdXRUVLREFZX01JTExJUycsXG4gICdXRUVLREFZX1NUUicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgd29yZHNcbiAqIGFueSB3b3JkcyB0aGF0IGFyZSBpbiBhIGhpZ2hlciBwcmlvcml0eSBhcmUgcmVtb3ZlZFxuICovXG4vLyBodHRwczovL2RvY3MuY291Y2hiYXNlLmNvbS9zZXJ2ZXIvY3VycmVudC9uMXFsL24xcWwtbGFuZ3VhZ2UtcmVmZXJlbmNlL3Jlc2VydmVkd29yZHMuaHRtbFxuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FMTCcsXG4gICdBTFRFUicsXG4gICdBTkFMWVpFJyxcbiAgJ0FOWScsXG4gICdBUlJBWScsXG4gICdBUycsXG4gICdBU0MnLFxuICAnQVQnLFxuICAnQkVHSU4nLFxuICAnQkVUV0VFTicsXG4gICdCSU5BUlknLFxuICAnQk9PTEVBTicsXG4gICdCUkVBSycsXG4gICdCVUNLRVQnLFxuICAnQlVJTEQnLFxuICAnQlknLFxuICAnQ0FMTCcsXG4gICdDQVNUJyxcbiAgJ0NIQVInLCAvLyB2ZXJpZnlcbiAgJ0NMVVNURVInLFxuICAnQ09MTEFURScsXG4gICdDT0xMRUNUSU9OJyxcbiAgJ0NPTU1JVCcsXG4gICdDT01NSVRURUQnLFxuICAnQ09OTkVDVCcsXG4gICdDT05USU5VRScsXG4gICdDT1JSRUxBVEUnLFxuICAnQ09SUkVMQVRFRCcsXG4gICdDT1ZFUicsXG4gICdDUkVBVEUnLFxuICAnQ1VSUkVOVCcsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBU0VUJyxcbiAgJ0RBVEFTVE9SRScsXG4gICdERUNMQVJFJyxcbiAgJ0RFQ1JFTUVOVCcsXG4gICdERVJJVkVEJyxcbiAgJ0RFU0MnLFxuICAnREVTQ1JJQkUnLFxuICAnRElTVElOQ1QnLFxuICAnRE8nLFxuICAnRFJPUCcsXG4gICdFQUNIJyxcbiAgJ0VMRU1FTlQnLFxuICAnRVZFUlknLFxuICAnRVhDTFVERScsXG4gICdFWElTVFMnLFxuICAnRkFMU0UnLFxuICAnRkVUQ0gnLFxuICAnRklMVEVSJyxcbiAgJ0ZJUlNUJyxcbiAgJ0ZMQVRURU4nLFxuICAnRkxVU0gnLFxuICAnRk9MTE9XSU5HJyxcbiAgJ0ZPUicsXG4gICdGT1JDRScsXG4gICdGVFMnLFxuICAnRlVOQ1RJT04nLFxuICAnR09MQU5HJyxcbiAgJ0dST1VQJyxcbiAgJ0dST1VQUycsXG4gICdHU0knLFxuICAnSEFTSCcsXG4gICdJRicsXG4gICdJR05PUkUnLFxuICAnSUxJS0UnLFxuICAnSU4nLFxuICAnSU5DTFVERScsXG4gICdJTkNSRU1FTlQnLFxuICAnSU5ERVgnLFxuICAnSU5MSU5FJyxcbiAgJ0lOTkVSJyxcbiAgJ0lOVE8nLFxuICAnSVMnLFxuICAnSVNPTEFUSU9OJyxcbiAgJ0pBVkFTQ1JJUFQnLFxuICAnS0VZJyxcbiAgJ0tFWVMnLFxuICAnS0VZU1BBQ0UnLFxuICAnS05PV04nLFxuICAnTEFOR1VBR0UnLFxuICAnTEFTVCcsXG4gICdMRUZUJyxcbiAgJ0xFVFRJTkcnLFxuICAnTEVWRUwnLFxuICAnTElLRScsXG4gICdMU00nLFxuICAnTUFQJyxcbiAgJ01BUFBJTkcnLFxuICAnTUFUQ0hFRCcsXG4gICdNQVRFUklBTElaRUQnLFxuICAnTUlTU0lORycsXG4gICdOQU1FU1BBQ0UnLFxuICAnTkwnLFxuICAnTk8nLFxuICAnTk9UJyxcbiAgJ05VTEwnLFxuICAnTlVMTFMnLFxuICAnTlVNQkVSJyxcbiAgJ09CSkVDVCcsXG4gICdPRkZTRVQnLFxuICAnT1BUSU9OJyxcbiAgJ09QVElPTlMnLFxuICAnT1JERVInLFxuICAnT1RIRVJTJyxcbiAgJ09VVEVSJyxcbiAgJ09WRVInLFxuICAnUEFSU0UnLFxuICAnUEFSVElUSU9OJyxcbiAgJ1BBU1NXT1JEJyxcbiAgJ1BBVEgnLFxuICAnUE9PTCcsXG4gICdQUkVDRURJTkcnLFxuICAnUFJJTUFSWScsXG4gICdQUklWQVRFJyxcbiAgJ1BSSVZJTEVHRScsXG4gICdQUk9CRScsXG4gICdQUk9DRURVUkUnLFxuICAnUFVCTElDJyxcbiAgJ1JBTkdFJyxcbiAgJ1JBVycsXG4gICdSRUFMTScsXG4gICdSRURVQ0UnLFxuICAnUkVOQU1FJyxcbiAgJ1JFU1BFQ1QnLFxuICAnUkVUVVJOJyxcbiAgJ1JJR0hUJyxcbiAgJ1JPTEUnLFxuICAnUk9MTEJBQ0snLFxuICAnUk9XJyxcbiAgJ1JPV1MnLFxuICAnU0FUSVNGSUVTJyxcbiAgJ1NDSEVNQScsXG4gICdTQ09QRScsXG4gICdTRUxGJyxcbiAgJ1NFTUknLFxuICAnU09NRScsXG4gICdTVEFSVCcsXG4gICdTVEFUSVNUSUNTJyxcbiAgJ1NUUklORycsXG4gICdTWVNURU0nLFxuICAnVEhFTicsXG4gICdUSUVTJyxcbiAgJ1RPJyxcbiAgJ1RSQU4nLFxuICAnVFJBTlNBQ1RJT04nLFxuICAnVFJJR0dFUicsXG4gICdUUlVFJyxcbiAgJ1RSVU5DQVRFJyxcbiAgJ1VOQk9VTkRFRCcsXG4gICdVTkRFUicsXG4gICdVTklRVUUnLFxuICAnVU5LTk9XTicsXG4gICdVTlNFVCcsXG4gICdVU0UnLFxuICAnVVNFUicsXG4gICdWQUxJREFURScsXG4gICdWQUxVRScsXG4gICdWQUxVRUQnLFxuICAnVklBJyxcbiAgJ1ZJRVcnLFxuICAnV0hJTEUnLFxuICAnV0lORE9XJyxcbiAgJ1dJVEhJTicsXG4gICdXT1JLJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMSAoZmlyc3QpXG4gKiBrZXl3b3JkcyB0aGF0IGJlZ2luIGEgbmV3IHN0YXRlbWVudFxuICogd2lsbCBiZWdpbiBuZXcgaW5kZW50ZWQgYmxvY2tcbiAqL1xuLy8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9yZXNlcnZlZHdvcmRzLmh0bWxcbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBRFZJU0UnLFxuICAnQUxURVIgSU5ERVgnLFxuICAnQkVHSU4gVFJBTlNBQ1RJT04nLFxuICAnQlVJTEQgSU5ERVgnLFxuICAnQ09NTUlUIFRSQU5TQUNUSU9OJyxcbiAgJ0NSRUFURSBDT0xMRUNUSU9OJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgSU5ERVgnLFxuICAnQ1JFQVRFIFBSSU1BUlkgSU5ERVgnLFxuICAnQ1JFQVRFIFNDT1BFJyxcbiAgJ0NSRUFURSBUQUJMRScsIC8vIHZlcmlmeVxuICAnREVMRVRFJyxcbiAgJ0RST1AgQ09MTEVDVElPTicsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgSU5ERVgnLFxuICAnRFJPUCBQUklNQVJZIElOREVYJyxcbiAgJ0RST1AgU0NPUEUnLFxuICAnRVhFQ1VURScsXG4gICdFWEVDVVRFIEZVTkNUSU9OJyxcbiAgJ0VYUExBSU4nLFxuICAnR1JBTlQnLFxuICAnSU5GRVInLFxuICAnSU5TRVJUJyxcbiAgJ01FUkdFJyxcbiAgJ1BSRVBBUkUnLFxuICAnUkVUVVJOSU5HJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSyBUUkFOU0FDVElPTicsXG4gICdTQVZFUE9JTlQnLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCBUUkFOU0FDVElPTicsXG4gICdVUERBVEUnLFxuICAnVVBEQVRFIFNUQVRJU1RJQ1MnLFxuICAnVVBTRVJUJyxcbiAgLy8gb3RoZXJcbiAgJ0RST1AgVEFCTEUnLCAvLyB2ZXJpZnksXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdMRVQnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ05FU1QnLFxuICAnT1JERVIgQlknLFxuICAnU0VUIENVUlJFTlQgU0NIRU1BJyxcbiAgJ1NFVCBTQ0hFTUEnLFxuICAnU0VUJyxcbiAgJ1NIT1cnLFxuICAnVU5ORVNUJyxcbiAgJ1VTRSBLRVlTJyxcbiAgJ1ZBTFVFUycsXG4gICdXSEVSRScsXG4gICdXSVRIJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMlxuICogY29tbWFuZHMgdGhhdCBvcGVyYXRlIG9uIHR3byB0YWJsZXMgb3Igc3VicXVlcmllc1xuICogdHdvIG1haW4gY2F0ZWdvcmllczogam9pbnMgYW5kIGJvb2xlYW4gc2V0IG9wZXJhdG9yc1xuICovXG5jb25zdCByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gW1xuICAvLyBzZXQgYm9vbGVhbnNcbiAgJ0lOVEVSU0VDVCcsXG4gICdJTlRFUlNFQ1QgQUxMJyxcbiAgJ0lOVEVSU0VDVCBESVNUSU5DVCcsXG4gICdVTklPTicsXG4gICdVTklPTiBBTEwnLFxuICAnVU5JT04gRElTVElOQ1QnLFxuICAnRVhDRVBUJyxcbiAgJ0VYQ0VQVCBBTEwnLFxuICAnRVhDRVBUIERJU1RJTkNUJyxcbiAgJ01JTlVTJyxcbiAgJ01JTlVTIEFMTCcsXG4gICdNSU5VUyBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAzXG4gKiBrZXl3b3JkcyB0aGF0IGZvbGxvdyBhIHByZXZpb3VzIFN0YXRlbWVudCwgbXVzdCBiZSBhdHRhY2hlZCB0byBzdWJzZXF1ZW50IGRhdGFcbiAqIGNhbiBiZSBmdWxseSBpbmxpbmUgb3Igb24gbmV3bGluZSB3aXRoIG9wdGlvbmFsIGluZGVudFxuICovXG5jb25zdCByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSBbJ1dIRU4nLCAnRUxTRSddO1xuXG4vLyBGb3IgcmVmZXJlbmNlOiBodHRwOi8vZG9jcy5jb3VjaGJhc2UuY29tLnMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20vc2VydmVyLzYuMC9uMXFsL24xcWwtbGFuZ3VhZ2UtcmVmZXJlbmNlL2luZGV4Lmh0bWxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE4xcWxGb3JtYXR0ZXIgZXh0ZW5kcyBGb3JtYXR0ZXIge1xuICBzdGF0aWMgcmVzZXJ2ZWRDb21tYW5kcyA9IHJlc2VydmVkQ29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcztcbiAgc3RhdGljIHJlc2VydmVkSm9pbkNvbmRpdGlvbnMgPSBbJ09OJywgJ1VTSU5HJ107XG4gIHN0YXRpYyByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMgPSBbJ0FORCcsICdPUicsICdYT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoWy4uLnJlc2VydmVkS2V5d29yZHMsIC4uLnJlc2VydmVkRnVuY3Rpb25zXSk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiJydcIiwgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ1snLCAneycsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICddJywgJ30nLCAnRU5EJ107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJyQnXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJyMnLCAnLS0nXTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFsnPT0nXTtcblxuICB0b2tlbml6ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBUb2tlbml6ZXIoe1xuICAgICAgcmVzZXJ2ZWRDb21tYW5kczogTjFxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogTjFxbEZvcm1hdHRlci5yZXNlcnZlZEJpbmFyeUNvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzOiBOMXFsRm9ybWF0dGVyLnJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyxcbiAgICAgIHJlc2VydmVkSm9pbkNvbmRpdGlvbnM6IE4xcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogTjFxbEZvcm1hdHRlci5yZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnMsXG4gICAgICByZXNlcnZlZEtleXdvcmRzOiBOMXFsRm9ybWF0dGVyLnJlc2VydmVkS2V5d29yZHMsXG4gICAgICBzdHJpbmdUeXBlczogTjFxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IE4xcWxGb3JtYXR0ZXIuYmxvY2tTdGFydCxcbiAgICAgIGJsb2NrRW5kOiBOMXFsRm9ybWF0dGVyLmJsb2NrRW5kLFxuICAgICAgbmFtZWRQbGFjZWhvbGRlclR5cGVzOiBOMXFsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IE4xcWxGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIG9wZXJhdG9yczogTjFxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgeyBpc1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlIH0gZnJvbSAnLi4vY29yZS90b2tlbic7IC8vIGNvbnZlcnQgdG8gcGFydGlhbCB0eXBlIGltcG9ydCBpbiBUUyA0LjVcbmltcG9ydCB0eXBlIHsgU3RyaW5nUGF0dGVyblR5cGUgfSBmcm9tICcuLi9jb3JlL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBkZWR1cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSBbXG4gIC8vICdBJyxcbiAgJ0FDQ0VTU0lCTEUnLFxuICAnQUdFTlQnLFxuICAnQUdHUkVHQVRFJyxcbiAgJ0FMTCcsXG4gICdBTFRFUicsXG4gICdBTlknLFxuICAnQVJSQVknLFxuICAnQVMnLFxuICAnQVNDJyxcbiAgJ0FUJyxcbiAgJ0FUVFJJQlVURScsXG4gICdBVVRISUQnLFxuICAnQVZHJyxcbiAgJ0JFVFdFRU4nLFxuICAnQkZJTEVfQkFTRScsXG4gICdCSU5BUlknLFxuICAnQklOQVJZX0lOVEVHRVInLFxuICAnQkxPQl9CQVNFJyxcbiAgJ0JMT0NLJyxcbiAgJ0JPRFknLFxuICAnQk9PTEVBTicsXG4gICdCT1RIJyxcbiAgJ0JPVU5EJyxcbiAgJ0JSRUFEVEgnLFxuICAnQlVMSycsXG4gICdCWScsXG4gICdCWVRFJyxcbiAgLy8gJ0MnLFxuICAnQ0FMTCcsXG4gICdDQUxMSU5HJyxcbiAgJ0NBU0NBREUnLFxuICAnQ0FTVCcsXG4gICdDSEFSJyxcbiAgJ0NIQVJBQ1RFUicsXG4gICdDSEFSU0VUJyxcbiAgJ0NIQVJTRVRGT1JNJyxcbiAgJ0NIQVJTRVRJRCcsXG4gICdDSEFSX0JBU0UnLFxuICAnQ0hFQ0snLFxuICAnQ0xPQl9CQVNFJyxcbiAgJ0NMT05FJyxcbiAgJ0NMT1NFJyxcbiAgJ0NMVVNURVInLFxuICAnQ0xVU1RFUlMnLFxuICAnQ09BTEVTQ0UnLFxuICAnQ09MQVVUSCcsXG4gICdDT0xMRUNUJyxcbiAgJ0NPTFVNTlMnLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVQnLFxuICAnQ09NTUlUVEVEJyxcbiAgJ0NPTVBJTEVEJyxcbiAgJ0NPTVBSRVNTJyxcbiAgJ0NPTk5FQ1QnLFxuICAnQ09OU1RBTlQnLFxuICAnQ09OU1RSVUNUT1InLFxuICAnQ09OVEVYVCcsXG4gICdDT05USU5VRScsXG4gICdDT05WRVJUJyxcbiAgJ0NPVU5UJyxcbiAgJ0NSQVNIJyxcbiAgJ0NSRUFURScsXG4gICdDUkVERU5USUFMJyxcbiAgJ0NVUlJFTlQnLFxuICAnQ1VSUlZBTCcsXG4gICdDVVJTT1InLFxuICAnQ1VTVE9NREFUVU0nLFxuICAnREFOR0xJTkcnLFxuICAnREFUQScsXG4gICdEQVRFJyxcbiAgJ0RBVEVfQkFTRScsXG4gICdEQVknLFxuICAnREVDSU1BTCcsXG4gICdERUZBVUxUJyxcbiAgJ0RFRklORScsXG4gICdERVBUSCcsXG4gICdERVNDJyxcbiAgJ0RFVEVSTUlOSVNUSUMnLFxuICAnRElSRUNUT1JZJyxcbiAgJ0RJU1RJTkNUJyxcbiAgJ0RPJyxcbiAgJ0RPVUJMRScsXG4gICdEUk9QJyxcbiAgJ0RVUkFUSU9OJyxcbiAgJ0VMRU1FTlQnLFxuICAnRUxTSUYnLFxuICAnRU1QVFknLFxuICAnRVNDQVBFJyxcbiAgJ0VYQ0VQVElPTlMnLFxuICAnRVhDTFVTSVZFJyxcbiAgJ0VYRUNVVEUnLFxuICAnRVhJU1RTJyxcbiAgJ0VYSVQnLFxuICAnRVhURU5EUycsXG4gICdFWFRFUk5BTCcsXG4gICdFWFRSQUNUJyxcbiAgJ0ZBTFNFJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJTkFMJyxcbiAgJ0ZJUlNUJyxcbiAgJ0ZJWEVEJyxcbiAgJ0ZMT0FUJyxcbiAgJ0ZPUicsXG4gICdGT1JBTEwnLFxuICAnRk9SQ0UnLFxuICAnRlVOQ1RJT04nLFxuICAnR0VORVJBTCcsXG4gICdHT1RPJyxcbiAgJ0dSQU5UJyxcbiAgJ0dST1VQJyxcbiAgJ0hBU0gnLFxuICAnSEVBUCcsXG4gICdISURERU4nLFxuICAnSE9VUicsXG4gICdJREVOVElGSUVEJyxcbiAgJ0lGJyxcbiAgJ0lNTUVESUFURScsXG4gICdJTicsXG4gICdJTkNMVURJTkcnLFxuICAnSU5ERVgnLFxuICAnSU5ERVhFUycsXG4gICdJTkRJQ0FUT1InLFxuICAnSU5ESUNFUycsXG4gICdJTkZJTklURScsXG4gICdJTlNUQU5USUFCTEUnLFxuICAnSU5UJyxcbiAgJ0lOVEVHRVInLFxuICAnSU5URVJGQUNFJyxcbiAgJ0lOVEVSVkFMJyxcbiAgJ0lOVE8nLFxuICAnSU5WQUxJREFURScsXG4gICdJUycsXG4gICdJU09MQVRJT04nLFxuICAnSkFWQScsXG4gICdMQU5HVUFHRScsXG4gICdMQVJHRScsXG4gICdMRUFESU5HJyxcbiAgJ0xFTkdUSCcsXG4gICdMRVZFTCcsXG4gICdMSUJSQVJZJyxcbiAgJ0xJS0UnLFxuICAnTElLRTInLFxuICAnTElLRTQnLFxuICAnTElLRUMnLFxuICAnTElNSVRFRCcsXG4gICdMT0NBTCcsXG4gICdMT0NLJyxcbiAgJ0xPTkcnLFxuICAnTUFQJyxcbiAgJ01BWCcsXG4gICdNQVhMRU4nLFxuICAnTUVNQkVSJyxcbiAgJ01FUkdFJyxcbiAgJ01JTicsXG4gICdNSU5VVEUnLFxuICAnTUxTTEFCRUwnLFxuICAnTU9EJyxcbiAgJ01PREUnLFxuICAnTU9OVEgnLFxuICAnTVVMVElTRVQnLFxuICAnTkFNRScsXG4gICdOQU4nLFxuICAnTkFUSU9OQUwnLFxuICAnTkFUSVZFJyxcbiAgJ05BVFVSQUwnLFxuICAnTkFUVVJBTE4nLFxuICAnTkNIQVInLFxuICAnTkVXJyxcbiAgJ05FWFRWQUwnLFxuICAnTk9DT01QUkVTUycsXG4gICdOT0NPUFknLFxuICAnTk9UJyxcbiAgJ05PV0FJVCcsXG4gICdOVUxMJyxcbiAgJ05VTExJRicsXG4gICdOVU1CRVInLFxuICAnTlVNQkVSX0JBU0UnLFxuICAnT0JKRUNUJyxcbiAgJ09DSUNPTEwnLFxuICAnT0NJREFURScsXG4gICdPQ0lEQVRFVElNRScsXG4gICdPQ0lEVVJBVElPTicsXG4gICdPQ0lJTlRFUlZBTCcsXG4gICdPQ0lMT0JMT0NBVE9SJyxcbiAgJ09DSU5VTUJFUicsXG4gICdPQ0lSQVcnLFxuICAnT0NJUkVGJyxcbiAgJ09DSVJFRkNVUlNPUicsXG4gICdPQ0lST1dJRCcsXG4gICdPQ0lTVFJJTkcnLFxuICAnT0NJVFlQRScsXG4gICdPRicsXG4gICdPTEQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkxZJyxcbiAgJ09QQVFVRScsXG4gICdPUEVOJyxcbiAgJ09QRVJBVE9SJyxcbiAgJ09QVElPTicsXG4gICdPUkFDTEUnLFxuICAnT1JBREFUQScsXG4gICdPUkRFUicsXG4gICdPUkdBTklaQVRJT04nLFxuICAnT1JMQU5ZJyxcbiAgJ09STFZBUlknLFxuICAnT1RIRVJTJyxcbiAgJ09VVCcsXG4gICdPVkVSTEFQUycsXG4gICdPVkVSUklESU5HJyxcbiAgJ1BBQ0tBR0UnLFxuICAnUEFSQUxMRUxfRU5BQkxFJyxcbiAgJ1BBUkFNRVRFUicsXG4gICdQQVJBTUVURVJTJyxcbiAgJ1BBUkVOVCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFTQ0FMJyxcbiAgJ1BDVEZSRUUnLFxuICAnUElQRScsXG4gICdQSVBFTElORUQnLFxuICAnUExTX0lOVEVHRVInLFxuICAnUExVR0dBQkxFJyxcbiAgJ1BPU0lUSVZFJyxcbiAgJ1BPU0lUSVZFTicsXG4gICdQUkFHTUEnLFxuICAnUFJFQ0lTSU9OJyxcbiAgJ1BSSU9SJyxcbiAgJ1BSSVZBVEUnLFxuICAnUFJPQ0VEVVJFJyxcbiAgJ1BVQkxJQycsXG4gICdSQUlTRScsXG4gICdSQU5HRScsXG4gICdSQVcnLFxuICAnUkVBRCcsXG4gICdSRUFMJyxcbiAgJ1JFQ09SRCcsXG4gICdSRUYnLFxuICAnUkVGRVJFTkNFJyxcbiAgJ1JFTEVBU0UnLFxuICAnUkVMSUVTX09OJyxcbiAgJ1JFTScsXG4gICdSRU1BSU5ERVInLFxuICAnUkVOQU1FJyxcbiAgJ1JFU09VUkNFJyxcbiAgJ1JFU1VMVCcsXG4gICdSRVNVTFRfQ0FDSEUnLFxuICAnUkVUVVJOJyxcbiAgJ1JFVkVSU0UnLFxuICAnUkVWT0tFJyxcbiAgJ1JPTExCQUNLJyxcbiAgJ1JPVycsXG4gICdST1dJRCcsXG4gICdST1dOVU0nLFxuICAnUk9XVFlQRScsXG4gICdTQU1QTEUnLFxuICAnU0FWRScsXG4gICdTQVZFUE9JTlQnLFxuICAnU0IxJyxcbiAgJ1NCMicsXG4gICdTQjQnLFxuICAnU0VBUkNIJyxcbiAgJ1NFQ09ORCcsXG4gICdTRUdNRU5UJyxcbiAgJ1NFTEYnLFxuICAnU0VQQVJBVEUnLFxuICAnU0VRVUVOQ0UnLFxuICAnU0VSSUFMSVpBQkxFJyxcbiAgJ1NIQVJFJyxcbiAgJ1NIT1JUJyxcbiAgJ1NJWkUnLFxuICAnU0laRV9UJyxcbiAgJ1NNQUxMSU5UJyxcbiAgJ1NPTUUnLFxuICAnU1BBQ0UnLFxuICAnU1BBUlNFJyxcbiAgJ1NRTCcsXG4gICdTUUxDT0RFJyxcbiAgJ1NRTERBVEEnLFxuICAnU1FMRVJSTScsXG4gICdTUUxOQU1FJyxcbiAgJ1NRTFNUQVRFJyxcbiAgJ1NUQU5EQVJEJyxcbiAgJ1NUQVJUJyxcbiAgJ1NUQVRJQycsXG4gICdTVERERVYnLFxuICAnU1RPUkVEJyxcbiAgJ1NUUklORycsXG4gICdTVFJVQ1QnLFxuICAnU1RZTEUnLFxuICAnU1VCTVVMVElTRVQnLFxuICAnU1VCUEFSVElUSU9OJyxcbiAgJ1NVQlNUSVRVVEFCTEUnLFxuICAnU1VCVFlQRScsXG4gICdTVUNDRVNTRlVMJyxcbiAgJ1NVTScsXG4gICdTWU5PTllNJyxcbiAgJ1NZU0RBVEUnLFxuICAnVEFCQVVUSCcsXG4gICdUQUJMRScsXG4gICdURE8nLFxuICAnVEhFJyxcbiAgJ1RIRU4nLFxuICAnVElNRScsXG4gICdUSU1FU1RBTVAnLFxuICAnVElNRVpPTkVfQUJCUicsXG4gICdUSU1FWk9ORV9IT1VSJyxcbiAgJ1RJTUVaT05FX01JTlVURScsXG4gICdUSU1FWk9ORV9SRUdJT04nLFxuICAnVE8nLFxuICAnVFJBSUxJTkcnLFxuICAnVFJBTlNBQ1RJT04nLFxuICAnVFJBTlNBQ1RJT05BTCcsXG4gICdUUklHR0VSJyxcbiAgJ1RSVUUnLFxuICAnVFJVU1RFRCcsXG4gICdUWVBFJyxcbiAgJ1VCMScsXG4gICdVQjInLFxuICAnVUI0JyxcbiAgJ1VJRCcsXG4gICdVTkRFUicsXG4gICdVTklRVUUnLFxuICAnVU5QTFVHJyxcbiAgJ1VOU0lHTkVEJyxcbiAgJ1VOVFJVU1RFRCcsXG4gICdVU0UnLFxuICAnVVNFUicsXG4gICdWQUxJREFURScsXG4gICdWQUxJU1QnLFxuICAnVkFMVUUnLFxuICAnVkFSQ0hBUicsXG4gICdWQVJDSEFSMicsXG4gICdWQVJJQUJMRScsXG4gICdWQVJJQU5DRScsXG4gICdWQVJSQVknLFxuICAnVkFSWUlORycsXG4gICdWSUVXJyxcbiAgJ1ZJRVdTJyxcbiAgJ1ZPSUQnLFxuICAnV0hFTkVWRVInLFxuICAnV0hJTEUnLFxuICAnV09SSycsXG4gICdXUkFQUEVEJyxcbiAgJ1dSSVRFJyxcbiAgJ1lFQVInLFxuICAnWk9ORScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBREQnLFxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0JFR0lOJyxcbiAgJ0NPTk5FQ1QgQlknLFxuICAnQ1JFQVRFIFRBQkxFJywgLy8gdmVyaWZ5XG4gICdEUk9QIFRBQkxFJywgLy8gdmVyaWZ5XG4gICdERUNMQVJFJyxcbiAgLy8gJ0RFTEVURSBGUk9NJywgLy8gZGlzYWJsZWRcbiAgJ0RFTEVURScsXG4gICdFTkQnLFxuICAnRVhDRVBUJyxcbiAgJ0VYQ0VQVElPTicsXG4gICdGRVRDSCBGSVJTVCcsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdJTlNFUlQnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ0xPT1AnLFxuICAnTU9ESUZZJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1JFVFVSTklORycsXG4gICdTRUxFQ1QnLFxuICAnU0VUIENVUlJFTlQgU0NIRU1BJyxcbiAgJ1NFVCBTQ0hFTUEnLFxuICAnU0VUJyxcbiAgJ1NUQVJUIFdJVEgnLFxuICAnVVBEQVRFJyxcbiAgJ1ZBTFVFUycsXG4gICdXSEVSRScsXG4gICdXSVRIJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMlxuICogY29tbWFuZHMgdGhhdCBvcGVyYXRlIG9uIHR3byB0YWJsZXMgb3Igc3VicXVlcmllc1xuICogdHdvIG1haW4gY2F0ZWdvcmllczogam9pbnMgYW5kIGJvb2xlYW4gc2V0IG9wZXJhdG9yc1xuICovXG5jb25zdCByZXNlcnZlZEJpbmFyeUNvbW1hbmRzID0gW1xuICAvLyBzZXQgYm9vbGVhbnNcbiAgJ0lOVEVSU0VDVCcsXG4gICdJTlRFUlNFQ1QgQUxMJyxcbiAgJ0lOVEVSU0VDVCBESVNUSU5DVCcsXG4gICdVTklPTicsXG4gICdVTklPTiBBTEwnLFxuICAnVU5JT04gRElTVElOQ1QnLFxuICAnRVhDRVBUJyxcbiAgJ0VYQ0VQVCBBTEwnLFxuICAnRVhDRVBUIERJU1RJTkNUJyxcbiAgJ01JTlVTJyxcbiAgJ01JTlVTIEFMTCcsXG4gICdNSU5VUyBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG4gIC8vIGFwcGx5XG4gICdDUk9TUyBBUFBMWScsXG4gICdPVVRFUiBBUFBMWScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InLCAnWE9SJ107XG4gIHN0YXRpYyByZXNlcnZlZEtleXdvcmRzID0gZGVkdXBlKHJlc2VydmVkS2V5d29yZHMpO1xuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbYFwiXCJgLCBcIk4nJ1wiLCBcIicnXCIsICdgYCddO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJzonXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBzcGVjaWFsV29yZENoYXJzID0geyBhbnk6ICdfJCMuQCcgfTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFtcbiAgICAnfHwnLFxuICAgICcqKicsXG4gICAgJzo9JyxcbiAgICAnfj0nLFxuICAgICdePScsXG4gICAgJz4+JyxcbiAgICAnPDwnLFxuICAgICc9PicsXG4gICAgLy8gICcuLicgLy8gYnJlYWtzIG9wZXJhdG9yIHRlc3QsIGhhbmRsZWQgYnkgLlxuICBdO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBQbFNxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogUGxTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBQbFNxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFBsU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogUGxTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogUGxTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFBsU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFBsU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBzcGVjaWFsV29yZENoYXJzOiBQbFNxbEZvcm1hdHRlci5zcGVjaWFsV29yZENoYXJzLFxuICAgICAgb3BlcmF0b3JzOiBQbFNxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cblxuICB0b2tlbk92ZXJyaWRlKHRva2VuOiBUb2tlbikge1xuICAgIC8vIGB0YWJsZWBbLl1gY29sdW1uYFxuICAgIGlmIChcbiAgICAgIHRva2VuLnZhbHVlID09PSAnLicgJiZcbiAgICAgIHRoaXMudG9rZW5Mb29rQWhlYWQoKS52YWx1ZS5zdGFydHNXaXRoKCdgJykgJiZcbiAgICAgIHRoaXMudG9rZW5Mb29rQmVoaW5kKCkudmFsdWUuZW5kc1dpdGgoJ2AnKVxuICAgICkge1xuICAgICAgLy8gVGhpcyBpcyBhbiBvcGVyYXRvciwgZG8gbm90IGluc2VydCBzcGFjZXNcbiAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5PUEVSQVRPUiwgdmFsdWU6IHRva2VuLnZhbHVlIH07XG4gICAgfVxuXG4gICAgLy8gQlkgW1NFVF1cbiAgICBpZiAoaXNUb2tlbi5TRVQodG9rZW4pICYmIGlzVG9rZW4uQlkodGhpcy5nZXRQcmV2aW91c1Jlc2VydmVkVG9rZW4oKSkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFRva2VuVHlwZS5SRVNFUlZFRF9LRVlXT1JELCB2YWx1ZTogdG9rZW4udmFsdWUgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbi8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLmh0bWxcbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0ge1xuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1tYXRoLmh0bWxcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQUNPU0QnLFxuICAgICdBQ09TSCcsXG4gICAgJ0FTSU4nLFxuICAgICdBU0lORCcsXG4gICAgJ0FTSU5IJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUQU4yJyxcbiAgICAnQVRBTjJEJyxcbiAgICAnQVRBTkQnLFxuICAgICdBVEFOSCcsXG4gICAgJ0NCUlQnLFxuICAgICdDRUlMJyxcbiAgICAnQ0VJTElORycsXG4gICAgJ0NPUycsXG4gICAgJ0NPU0QnLFxuICAgICdDT1NIJyxcbiAgICAnQ09UJyxcbiAgICAnQ09URCcsXG4gICAgJ0RFR1JFRVMnLFxuICAgICdESVYnLFxuICAgICdFWFAnLFxuICAgICdGQUNUT1JJQUwnLFxuICAgICdGTE9PUicsXG4gICAgJ0dDRCcsXG4gICAgJ0xDTScsXG4gICAgJ0xOJyxcbiAgICAnTE9HJyxcbiAgICAnTE9HMTAnLFxuICAgICdNSU5fU0NBTEUnLFxuICAgICdNT0QnLFxuICAgICdQSScsXG4gICAgJ1BPV0VSJyxcbiAgICAnUkFESUFOUycsXG4gICAgJ1JBTkRPTScsXG4gICAgJ1JPVU5EJyxcbiAgICAnU0NBTEUnLFxuICAgICdTRVRTRUVEJyxcbiAgICAnU0lHTicsXG4gICAgJ1NJTicsXG4gICAgJ1NJTkQnLFxuICAgICdTSU5IJyxcbiAgICAnU1FSVCcsXG4gICAgJ1RBTicsXG4gICAgJ1RBTkQnLFxuICAgICdUQU5IJyxcbiAgICAnVFJJTV9TQ0FMRScsXG4gICAgJ1RSVU5DJyxcbiAgICAnV0lEVEhfQlVDS0VUJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtc3RyaW5nLmh0bWxcbiAgc3RyaW5nOiBbXG4gICAgJ0FCUycsXG4gICAgJ0FTQ0lJJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0JUUklNJyxcbiAgICAnQ0hBUkFDVEVSX0xFTkdUSCcsXG4gICAgJ0NIQVJfTEVOR1RIJyxcbiAgICAnQ0hSJyxcbiAgICAnQ09OQ0FUJyxcbiAgICAnQ09OQ0FUX1dTJyxcbiAgICAnRk9STUFUJyxcbiAgICAnSU5JVENBUCcsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdMVFJJTScsXG4gICAgJ01ENScsXG4gICAgJ05PUk1BTElaRScsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQVJTRV9JREVOVCcsXG4gICAgJ1BHX0NMSUVOVF9FTkNPRElORycsXG4gICAgJ1BPU0lUSU9OJyxcbiAgICAnUVVPVEVfSURFTlQnLFxuICAgICdRVU9URV9MSVRFUkFMJyxcbiAgICAnUVVPVEVfTlVMTEFCTEUnLFxuICAgICdSRUdFWFBfTUFUQ0gnLFxuICAgICdSRUdFWFBfTUFUQ0hFUycsXG4gICAgJ1JFR0VYUF9SRVBMQUNFJyxcbiAgICAnUkVHRVhQX1NQTElUX1RPX0FSUkFZJyxcbiAgICAnUkVHRVhQX1NQTElUX1RPX1RBQkxFJyxcbiAgICAnUkVQRUFUJyxcbiAgICAnUkVQTEFDRScsXG4gICAgJ1JFVkVSU0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JQQUQnLFxuICAgICdSVFJJTScsXG4gICAgJ1NQTElUX1BBUlQnLFxuICAgICdTUFJJTlRGJyxcbiAgICAnU1RBUlRTX1dJVEgnLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1RSSU5HX1RPX0FSUkFZJyxcbiAgICAnU1RSSU5HX1RPX1RBQkxFJyxcbiAgICAnU1RSUE9TJyxcbiAgICAnU1VCU1RSJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgICAnVE9fQVNDSUknLFxuICAgICdUT19IRVgnLFxuICAgICdUUkFOU0xBVEUnLFxuICAgICdUUklNJyxcbiAgICAnVU5JU1RSJyxcbiAgICAnVVBQRVInLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1iaW5hcnlzdHJpbmcuaHRtbFxuICBiaW5hcnk6IFtcbiAgICAnQklUX0NPVU5UJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0JUUklNJyxcbiAgICAnQ09OVkVSVCcsXG4gICAgJ0NPTlZFUlRfRlJPTScsXG4gICAgJ0NPTlZFUlRfVE8nLFxuICAgICdERUNPREUnLFxuICAgICdFTkNPREUnLFxuICAgICdHRVRfQklUJyxcbiAgICAnR0VUX0JZVEUnLFxuICAgICdMRU5HVEgnLFxuICAgICdMVFJJTScsXG4gICAgJ01ENScsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQT1NJVElPTicsXG4gICAgJ1JUUklNJyxcbiAgICAnU0VUX0JJVCcsXG4gICAgJ1NFVF9CWVRFJyxcbiAgICAnU0hBMjI0JyxcbiAgICAnU0hBMjU2JyxcbiAgICAnU0hBMzg0JyxcbiAgICAnU0hBNTEyJyxcbiAgICAnU1RSSU5HX0FHRycsXG4gICAgJ1NVQlNUUicsXG4gICAgJ1NVQlNUUklORycsXG4gICAgJ1RSSU0nLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1iaXRzdHJpbmcuaHRtbFxuICBiaXRzdHJpbmc6IFtcbiAgICAnQklUX0NPVU5UJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0dFVF9CSVQnLFxuICAgICdMRU5HVEgnLFxuICAgICdPQ1RFVF9MRU5HVEgnLFxuICAgICdPVkVSTEFZJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdTRVRfQklUJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtbWF0Y2hpbmcuaHRtbFxuICBwYXR0ZXJuOiBbXG4gICAgJ1JFR0VYUF9NQVRDSCcsXG4gICAgJ1JFR0VYUF9NQVRDSEVTJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRUdFWFBfU1BMSVRfVE9fQVJSQVknLFxuICAgICdSRUdFWFBfU1BMSVRfVE9fVEFCTEUnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1mb3JtYXR0aW5nLmh0bWxcbiAgZGF0YXR5cGU6IFsnVE9fQ0hBUicsICdUT19EQVRFJywgJ1RPX05VTUJFUicsICdUT19USU1FU1RBTVAnXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtZGF0ZXRpbWUuaHRtbFxuICBkYXRldGltZTogW1xuICAgIC8vICdBR0UnLFxuICAgICdDTE9DS19USU1FU1RBTVAnLFxuICAgICdDVVJSRU5UX0RBVEUnLFxuICAgICdDVVJSRU5UX1RJTUUnLFxuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0RBVEVfQklOJyxcbiAgICAnREFURV9QQVJUJyxcbiAgICAnREFURV9UUlVOQycsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdJU0ZJTklURScsXG4gICAgJ0pVU1RJRllfREFZUycsXG4gICAgJ0pVU1RJRllfSE9VUlMnLFxuICAgICdKVVNUSUZZX0lOVEVSVkFMJyxcbiAgICAnTE9DQUxUSU1FJyxcbiAgICAnTE9DQUxUSU1FU1RBTVAnLFxuICAgICdNQUtFX0RBVEUnLFxuICAgICdNQUtFX0lOVEVSVkFMJyxcbiAgICAnTUFLRV9USU1FJyxcbiAgICAnTUFLRV9USU1FU1RBTVAnLFxuICAgICdNQUtFX1RJTUVTVEFNUFRaJyxcbiAgICAnTk9XJyxcbiAgICAnUEdfU0xFRVAnLFxuICAgICdQR19TTEVFUF9GT1InLFxuICAgICdQR19TTEVFUF9VTlRJTCcsXG4gICAgJ1NUQVRFTUVOVF9USU1FU1RBTVAnLFxuICAgICdUSU1FT0ZEQVknLFxuICAgICdUT19USU1FU1RBTVAnLFxuICAgICdUUkFOU0FDVElPTl9USU1FU1RBTVAnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1lbnVtLmh0bWxcbiAgZW51bTogWydFTlVNX0ZJUlNUJywgJ0VOVU1fTEFTVCcsICdFTlVNX1JBTkdFJ10sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWdlb21ldHJ5Lmh0bWxcbiAgZ2VvbWV0cnk6IFtcbiAgICAnQVJFQScsXG4gICAgJ0JPVU5EX0JPWCcsXG4gICAgJ0JPWCcsXG4gICAgJ0NFTlRFUicsXG4gICAgJ0NJUkNMRScsXG4gICAgJ0RJQUdPTkFMJyxcbiAgICAnRElBTUVURVInLFxuICAgICdIRUlHSFQnLFxuICAgICdJU0NMT1NFRCcsXG4gICAgJ0lTT1BFTicsXG4gICAgJ0xFTkdUSCcsXG4gICAgJ0xJTkUnLFxuICAgICdMU0VHJyxcbiAgICAnTlBPSU5UUycsXG4gICAgJ1BBVEgnLFxuICAgICdQQ0xPU0UnLFxuICAgICdQT0lOVCcsXG4gICAgJ1BPTFlHT04nLFxuICAgICdQT1BFTicsXG4gICAgJ1JBRElVUycsXG4gICAgJ1NMT1BFJyxcbiAgICAnV0lEVEgnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1uZXQuaHRtbFxuICBuZXR3b3JrOiBbXG4gICAgJ0FCQlJFVicsXG4gICAgJ0JST0FEQ0FTVCcsXG4gICAgJ0ZBTUlMWScsXG4gICAgJ0hPU1QnLFxuICAgICdIT1NUTUFTSycsXG4gICAgJ0lORVRfTUVSR0UnLFxuICAgICdJTkVUX1NBTUVfRkFNSUxZJyxcbiAgICAnTUFDQUREUjhfU0VUN0JJVCcsXG4gICAgJ01BU0tMRU4nLFxuICAgICdORVRNQVNLJyxcbiAgICAnTkVUV09SSycsXG4gICAgJ1NFVF9NQVNLTEVOJyxcbiAgICAnVEVYVCcsXG4gICAgJ1RSVU5DJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtdGV4dHNlYXJjaC5odG1sXG4gIHRleHRzZWFyY2g6IFtcbiAgICAnQVJSQVlfVE9fVFNWRUNUT1InLFxuICAgICdHRVRfQ1VSUkVOVF9UU19DT05GSUcnLFxuICAgICdKU09OQl9UT19UU1ZFQ1RPUicsXG4gICAgJ0pTT05fVE9fVFNWRUNUT1InLFxuICAgICdMRU5HVEgnLFxuICAgICdOVU1OT0RFJyxcbiAgICAnUEhSQVNFVE9fVFNRVUVSWScsXG4gICAgJ1BMQUlOVE9fVFNRVUVSWScsXG4gICAgJ1FVRVJZVFJFRScsXG4gICAgJ1NFVFdFSUdIVCcsXG4gICAgJ1NUUklQJyxcbiAgICAnVE9fVFNRVUVSWScsXG4gICAgJ1RPX1RTVkVDVE9SJyxcbiAgICAnVFNRVUVSWV9QSFJBU0UnLFxuICAgICdUU1ZFQ1RPUl9UT19BUlJBWScsXG4gICAgJ1RTX0RFQlVHJyxcbiAgICAnVFNfREVMRVRFJyxcbiAgICAnVFNfRklMVEVSJyxcbiAgICAnVFNfSEVBRExJTkUnLFxuICAgICdUU19MRVhJWkUnLFxuICAgICdUU19QQVJTRScsXG4gICAgJ1RTX1JBTksnLFxuICAgICdUU19SQU5LX0NEJyxcbiAgICAnVFNfUkVXUklURScsXG4gICAgJ1RTX1NUQVQnLFxuICAgICdUU19UT0tFTl9UWVBFJyxcbiAgICAnV0VCU0VBUkNIX1RPX1RTUVVFUlknLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy11dWlkLmh0bWxcbiAgdXVpZDogWydVVUlEJ10sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXhtbC5odG1sXG4gIHhtbDogW1xuICAgICdDVVJTT1JfVE9fWE1MJyxcbiAgICAnQ1VSU09SX1RPX1hNTFNDSEVNQScsXG4gICAgJ0RBVEFCQVNFX1RPX1hNTCcsXG4gICAgJ0RBVEFCQVNFX1RPX1hNTFNDSEVNQScsXG4gICAgJ0RBVEFCQVNFX1RPX1hNTF9BTkRfWE1MU0NIRU1BJyxcbiAgICAnTkVYVFZBTCcsXG4gICAgJ1FVRVJZX1RPX1hNTCcsXG4gICAgJ1FVRVJZX1RPX1hNTFNDSEVNQScsXG4gICAgJ1FVRVJZX1RPX1hNTF9BTkRfWE1MU0NIRU1BJyxcbiAgICAnU0NIRU1BX1RPX1hNTCcsXG4gICAgJ1NDSEVNQV9UT19YTUxTQ0hFTUEnLFxuICAgICdTQ0hFTUFfVE9fWE1MX0FORF9YTUxTQ0hFTUEnLFxuICAgICdTVFJJTkcnLFxuICAgICdUQUJMRV9UT19YTUwnLFxuICAgICdUQUJMRV9UT19YTUxTQ0hFTUEnLFxuICAgICdUQUJMRV9UT19YTUxfQU5EX1hNTFNDSEVNQScsXG4gICAgJ1hNTEFHRycsXG4gICAgJ1hNTENPTU1FTlQnLFxuICAgICdYTUxDT05DQVQnLFxuICAgICdYTUxFTEVNRU5UJyxcbiAgICAnWE1MRVhJU1RTJyxcbiAgICAnWE1MRk9SRVNUJyxcbiAgICAnWE1MUEFSU0UnLFxuICAgICdYTUxQSScsXG4gICAgJ1hNTFJPT1QnLFxuICAgICdYTUxTRVJJQUxJWkUnLFxuICAgICdYTUxUQUJMRScsXG4gICAgJ1hNTF9JU19XRUxMX0ZPUk1FRCcsXG4gICAgJ1hNTF9JU19XRUxMX0ZPUk1FRF9DT05URU5UJyxcbiAgICAnWE1MX0lTX1dFTExfRk9STUVEX0RPQ1VNRU5UJyxcbiAgICAnWFBBVEgnLFxuICAgICdYUEFUSF9FWElTVFMnLFxuICBdLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1qc29uLmh0bWxcbiAganNvbjogW1xuICAgICdBUlJBWV9UT19KU09OJyxcbiAgICAnSlNPTkJfQUdHJyxcbiAgICAnSlNPTkJfQVJSQVlfRUxFTUVOVFMnLFxuICAgICdKU09OQl9BUlJBWV9FTEVNRU5UU19URVhUJyxcbiAgICAnSlNPTkJfQVJSQVlfTEVOR1RIJyxcbiAgICAnSlNPTkJfQlVJTERfQVJSQVknLFxuICAgICdKU09OQl9CVUlMRF9PQkpFQ1QnLFxuICAgICdKU09OQl9FQUNIJyxcbiAgICAnSlNPTkJfRUFDSF9URVhUJyxcbiAgICAnSlNPTkJfRVhUUkFDVF9QQVRIJyxcbiAgICAnSlNPTkJfRVhUUkFDVF9QQVRIX1RFWFQnLFxuICAgICdKU09OQl9JTlNFUlQnLFxuICAgICdKU09OQl9PQkpFQ1QnLFxuICAgICdKU09OQl9PQkpFQ1RfQUdHJyxcbiAgICAnSlNPTkJfT0JKRUNUX0tFWVMnLFxuICAgICdKU09OQl9QQVRIX0VYSVNUUycsXG4gICAgJ0pTT05CX1BBVEhfRVhJU1RTX1RaJyxcbiAgICAnSlNPTkJfUEFUSF9NQVRDSCcsXG4gICAgJ0pTT05CX1BBVEhfTUFUQ0hfVFonLFxuICAgICdKU09OQl9QQVRIX1FVRVJZJyxcbiAgICAnSlNPTkJfUEFUSF9RVUVSWV9BUlJBWScsXG4gICAgJ0pTT05CX1BBVEhfUVVFUllfQVJSQVlfVFonLFxuICAgICdKU09OQl9QQVRIX1FVRVJZX0ZJUlNUJyxcbiAgICAnSlNPTkJfUEFUSF9RVUVSWV9GSVJTVF9UWicsXG4gICAgJ0pTT05CX1BBVEhfUVVFUllfVFonLFxuICAgICdKU09OQl9QT1BVTEFURV9SRUNPUkQnLFxuICAgICdKU09OQl9QT1BVTEFURV9SRUNPUkRTRVQnLFxuICAgICdKU09OQl9QUkVUVFknLFxuICAgICdKU09OQl9TRVQnLFxuICAgICdKU09OQl9TRVRfTEFYJyxcbiAgICAnSlNPTkJfU1RSSVBfTlVMTFMnLFxuICAgICdKU09OQl9UT19SRUNPUkQnLFxuICAgICdKU09OQl9UT19SRUNPUkRTRVQnLFxuICAgICdKU09OQl9UWVBFT0YnLFxuICAgICdKU09OX0FHRycsXG4gICAgJ0pTT05fQVJSQVlfRUxFTUVOVFMnLFxuICAgICdKU09OX0FSUkFZX0VMRU1FTlRTX1RFWFQnLFxuICAgICdKU09OX0FSUkFZX0xFTkdUSCcsXG4gICAgJ0pTT05fQlVJTERfQVJSQVknLFxuICAgICdKU09OX0JVSUxEX09CSkVDVCcsXG4gICAgJ0pTT05fRUFDSCcsXG4gICAgJ0pTT05fRUFDSF9URVhUJyxcbiAgICAnSlNPTl9FWFRSQUNUX1BBVEgnLFxuICAgICdKU09OX0VYVFJBQ1RfUEFUSF9URVhUJyxcbiAgICAnSlNPTl9PQkpFQ1QnLFxuICAgICdKU09OX09CSkVDVF9BR0cnLFxuICAgICdKU09OX09CSkVDVF9LRVlTJyxcbiAgICAnSlNPTl9QT1BVTEFURV9SRUNPUkQnLFxuICAgICdKU09OX1BPUFVMQVRFX1JFQ09SRFNFVCcsXG4gICAgJ0pTT05fU1RSSVBfTlVMTFMnLFxuICAgICdKU09OX1RPX1JFQ09SRCcsXG4gICAgJ0pTT05fVE9fUkVDT1JEU0VUJyxcbiAgICAnSlNPTl9UWVBFT0YnLFxuICAgICdST1dfVE9fSlNPTicsXG4gICAgJ1RPX0pTT04nLFxuICAgICdUT19KU09OQicsXG4gICAgJ1RPX1RJTUVTVEFNUCcsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXNlcXVlbmNlLmh0bWxcbiAgc2VxdWVuY2U6IFsnQ1VSUlZBTCcsICdMQVNUVkFMJywgJ05FWFRWQUwnLCAnU0VUVkFMJ10sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWNvbmRpdGlvbmFsLmh0bWxcbiAgY29uZGl0aW9uYWw6IFtcbiAgICAvLyAnQ0FTRScsXG4gICAgJ0NPQUxFU0NFJyxcbiAgICAnR1JFQVRFU1QnLFxuICAgICdMRUFTVCcsXG4gICAgJ05VTExJRicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWFycmF5Lmh0bWxcbiAgYXJyYXk6IFtcbiAgICAnQVJSQVlfQUdHJyxcbiAgICAnQVJSQVlfQVBQRU5EJyxcbiAgICAnQVJSQVlfQ0FUJyxcbiAgICAnQVJSQVlfRElNUycsXG4gICAgJ0FSUkFZX0ZJTEwnLFxuICAgICdBUlJBWV9MRU5HVEgnLFxuICAgICdBUlJBWV9MT1dFUicsXG4gICAgJ0FSUkFZX05ESU1TJyxcbiAgICAnQVJSQVlfUE9TSVRJT04nLFxuICAgICdBUlJBWV9QT1NJVElPTlMnLFxuICAgICdBUlJBWV9QUkVQRU5EJyxcbiAgICAnQVJSQVlfUkVNT1ZFJyxcbiAgICAnQVJSQVlfUkVQTEFDRScsXG4gICAgJ0FSUkFZX1RPX1NUUklORycsXG4gICAgJ0FSUkFZX1VQUEVSJyxcbiAgICAnQ0FSRElOQUxJVFknLFxuICAgICdTVFJJTkdfVE9fQVJSQVknLFxuICAgICdUUklNX0FSUkFZJyxcbiAgICAnVU5ORVNUJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtcmFuZ2UuaHRtbFxuICByYW5nZTogW1xuICAgICdJU0VNUFRZJyxcbiAgICAnTE9XRVInLFxuICAgICdMT1dFUl9JTkMnLFxuICAgICdMT1dFUl9JTkYnLFxuICAgICdNVUxUSVJBTkdFJyxcbiAgICAnUkFOR0VfTUVSR0UnLFxuICAgICdVUFBFUicsXG4gICAgJ1VQUEVSX0lOQycsXG4gICAgJ1VQUEVSX0lORicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWFnZ3JlZ2F0ZS5odG1sXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBTlknLFxuICAgICdBUlJBWV9BR0cnLFxuICAgICdBVkcnLFxuICAgICdCSVRfQU5EJyxcbiAgICAnQklUX09SJyxcbiAgICAnQklUX1hPUicsXG4gICAgJ0JPT0xfQU5EJyxcbiAgICAnQk9PTF9PUicsXG4gICAgJ0NPQUxFU0NFJyxcbiAgICAnQ09SUicsXG4gICAgJ0NPVU5UJyxcbiAgICAnQ09WQVJfUE9QJyxcbiAgICAnQ09WQVJfU0FNUCcsXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0RFTlNFX1JBTksnLFxuICAgICdFVkVSWScsXG4gICAgJ0dST1VQSU5HJyxcbiAgICAnSlNPTkJfQUdHJyxcbiAgICAnSlNPTkJfT0JKRUNUX0FHRycsXG4gICAgJ0pTT05fQUdHJyxcbiAgICAnSlNPTl9PQkpFQ1RfQUdHJyxcbiAgICAnTUFYJyxcbiAgICAnTUlOJyxcbiAgICAnTU9ERScsXG4gICAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICAgJ1BFUkNFTlRJTEVfRElTQycsXG4gICAgJ1BFUkNFTlRfUkFOSycsXG4gICAgJ1JBTkdFX0FHRycsXG4gICAgJ1JBTkdFX0lOVEVSU0VDVF9BR0cnLFxuICAgICdSQU5LJyxcbiAgICAnUkVHUl9BVkdYJyxcbiAgICAnUkVHUl9BVkdZJyxcbiAgICAnUkVHUl9DT1VOVCcsXG4gICAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgICAnUkVHUl9SMicsXG4gICAgJ1JFR1JfU0xPUEUnLFxuICAgICdSRUdSX1NYWCcsXG4gICAgJ1JFR1JfU1hZJyxcbiAgICAnUkVHUl9TWVknLFxuICAgICdTT01FJyxcbiAgICAnU1REREVWJyxcbiAgICAnU1REREVWX1BPUCcsXG4gICAgJ1NURERFVl9TQU1QJyxcbiAgICAnU1RSSU5HX0FHRycsXG4gICAgJ1NVTScsXG4gICAgJ1RPX0pTT04nLFxuICAgICdUT19KU09OQicsXG4gICAgJ1ZBUklBTkNFJyxcbiAgICAnVkFSX1BPUCcsXG4gICAgJ1ZBUl9TQU1QJyxcbiAgICAnWE1MQUdHJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtd2luZG93Lmh0bWxcbiAgd2luZG93OiBbXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0RFTlNFX1JBTksnLFxuICAgICdGSVJTVF9WQUxVRScsXG4gICAgJ0xBRycsXG4gICAgJ0xBU1RfVkFMVUUnLFxuICAgICdMRUFEJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTlRJTEUnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdSQU5LJyxcbiAgICAnUk9XX05VTUJFUicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXNyZi5odG1sXG4gIHNldDogWydHRU5FUkFURV9TRVJJRVMnLCAnR0VORVJBVEVfU1VCU0NSSVBUUyddLFxuICAvLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L2Z1bmN0aW9ucy1pbmZvLmh0bWxcbiAgc3lzSW5mbzogW1xuICAgICdBQ0xERUZBVUxUJyxcbiAgICAnQUNMRVhQTE9ERScsXG4gICAgJ0NPTF9ERVNDUklQVElPTicsXG4gICAgJ0NVUlJFTlRfQ0FUQUxPRycsXG4gICAgJ0NVUlJFTlRfREFUQUJBU0UnLFxuICAgICdDVVJSRU5UX1FVRVJZJyxcbiAgICAnQ1VSUkVOVF9ST0xFJyxcbiAgICAnQ1VSUkVOVF9TQ0hFTUEnLFxuICAgICdDVVJSRU5UX1NDSEVNQVMnLFxuICAgICdDVVJSRU5UX1VTRVInLFxuICAgICdGT1JNQVRfVFlQRScsXG4gICAgJ0hBU19BTllfQ09MVU1OX1BSSVZJTEVHRScsXG4gICAgJ0hBU19DT0xVTU5fUFJJVklMRUdFJyxcbiAgICAnSEFTX0RBVEFCQVNFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19GT1JFSUdOX0RBVEFfV1JBUFBFUl9QUklWSUxFR0UnLFxuICAgICdIQVNfRlVOQ1RJT05fUFJJVklMRUdFJyxcbiAgICAnSEFTX0xBTkdVQUdFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19TQ0hFTUFfUFJJVklMRUdFJyxcbiAgICAnSEFTX1NFUVVFTkNFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19TRVJWRVJfUFJJVklMRUdFJyxcbiAgICAnSEFTX1RBQkxFU1BBQ0VfUFJJVklMRUdFJyxcbiAgICAnSEFTX1RBQkxFX1BSSVZJTEVHRScsXG4gICAgJ0hBU19UWVBFX1BSSVZJTEVHRScsXG4gICAgJ0lORVRfQ0xJRU5UX0FERFInLFxuICAgICdJTkVUX0NMSUVOVF9QT1JUJyxcbiAgICAnSU5FVF9TRVJWRVJfQUREUicsXG4gICAgJ0lORVRfU0VSVkVSX1BPUlQnLFxuICAgICdNQUtFQUNMSVRFTScsXG4gICAgJ09CSl9ERVNDUklQVElPTicsXG4gICAgJ1BHX0JBQ0tFTkRfUElEJyxcbiAgICAnUEdfQkxPQ0tJTkdfUElEUycsXG4gICAgJ1BHX0NPTExBVElPTl9JU19WSVNJQkxFJyxcbiAgICAnUEdfQ09ORl9MT0FEX1RJTUUnLFxuICAgICdQR19DT05UUk9MX0NIRUNLUE9JTlQnLFxuICAgICdQR19DT05UUk9MX0lOSVQnLFxuICAgICdQR19DT05UUk9MX1NZU1RFTScsXG4gICAgJ1BHX0NPTlZFUlNJT05fSVNfVklTSUJMRScsXG4gICAgJ1BHX0NVUlJFTlRfTE9HRklMRScsXG4gICAgJ1BHX0NVUlJFTlRfU05BUFNIT1QnLFxuICAgICdQR19DVVJSRU5UX1hBQ1RfSUQnLFxuICAgICdQR19DVVJSRU5UX1hBQ1RfSURfSUZfQVNTSUdORUQnLFxuICAgICdQR19ERVNDUklCRV9PQkpFQ1QnLFxuICAgICdQR19GVU5DVElPTl9JU19WSVNJQkxFJyxcbiAgICAnUEdfR0VUX0NBVEFMT0dfRk9SRUlHTl9LRVlTJyxcbiAgICAnUEdfR0VUX0NPTlNUUkFJTlRERUYnLFxuICAgICdQR19HRVRfRVhQUicsXG4gICAgJ1BHX0dFVF9GVU5DVElPTkRFRicsXG4gICAgJ1BHX0dFVF9GVU5DVElPTl9BUkdVTUVOVFMnLFxuICAgICdQR19HRVRfRlVOQ1RJT05fSURFTlRJVFlfQVJHVU1FTlRTJyxcbiAgICAnUEdfR0VUX0ZVTkNUSU9OX1JFU1VMVCcsXG4gICAgJ1BHX0dFVF9JTkRFWERFRicsXG4gICAgJ1BHX0dFVF9LRVlXT1JEUycsXG4gICAgJ1BHX0dFVF9PQkpFQ1RfQUREUkVTUycsXG4gICAgJ1BHX0dFVF9PV05FRF9TRVFVRU5DRScsXG4gICAgJ1BHX0dFVF9SVUxFREVGJyxcbiAgICAnUEdfR0VUX1NFUklBTF9TRVFVRU5DRScsXG4gICAgJ1BHX0dFVF9TVEFUSVNUSUNTT0JKREVGJyxcbiAgICAnUEdfR0VUX1RSSUdHRVJERUYnLFxuICAgICdQR19HRVRfVVNFUkJZSUQnLFxuICAgICdQR19HRVRfVklFV0RFRicsXG4gICAgJ1BHX0hBU19ST0xFJyxcbiAgICAnUEdfSURFTlRJRllfT0JKRUNUJyxcbiAgICAnUEdfSURFTlRJRllfT0JKRUNUX0FTX0FERFJFU1MnLFxuICAgICdQR19JTkRFWEFNX0hBU19QUk9QRVJUWScsXG4gICAgJ1BHX0lOREVYX0NPTFVNTl9IQVNfUFJPUEVSVFknLFxuICAgICdQR19JTkRFWF9IQVNfUFJPUEVSVFknLFxuICAgICdQR19JU19PVEhFUl9URU1QX1NDSEVNQScsXG4gICAgJ1BHX0pJVF9BVkFJTEFCTEUnLFxuICAgICdQR19MQVNUX0NPTU1JVFRFRF9YQUNUJyxcbiAgICAnUEdfTElTVEVOSU5HX0NIQU5ORUxTJyxcbiAgICAnUEdfTVlfVEVNUF9TQ0hFTUEnLFxuICAgICdQR19OT1RJRklDQVRJT05fUVVFVUVfVVNBR0UnLFxuICAgICdQR19PUENMQVNTX0lTX1ZJU0lCTEUnLFxuICAgICdQR19PUEVSQVRPUl9JU19WSVNJQkxFJyxcbiAgICAnUEdfT1BGQU1JTFlfSVNfVklTSUJMRScsXG4gICAgJ1BHX09QVElPTlNfVE9fVEFCTEUnLFxuICAgICdQR19QT1NUTUFTVEVSX1NUQVJUX1RJTUUnLFxuICAgICdQR19TQUZFX1NOQVBTSE9UX0JMT0NLSU5HX1BJRFMnLFxuICAgICdQR19TTkFQU0hPVF9YSVAnLFxuICAgICdQR19TTkFQU0hPVF9YTUFYJyxcbiAgICAnUEdfU05BUFNIT1RfWE1JTicsXG4gICAgJ1BHX1NUQVRJU1RJQ1NfT0JKX0lTX1ZJU0lCTEUnLFxuICAgICdQR19UQUJMRVNQQUNFX0RBVEFCQVNFUycsXG4gICAgJ1BHX1RBQkxFU1BBQ0VfTE9DQVRJT04nLFxuICAgICdQR19UQUJMRV9JU19WSVNJQkxFJyxcbiAgICAnUEdfVFJJR0dFUl9ERVBUSCcsXG4gICAgJ1BHX1RTX0NPTkZJR19JU19WSVNJQkxFJyxcbiAgICAnUEdfVFNfRElDVF9JU19WSVNJQkxFJyxcbiAgICAnUEdfVFNfUEFSU0VSX0lTX1ZJU0lCTEUnLFxuICAgICdQR19UU19URU1QTEFURV9JU19WSVNJQkxFJyxcbiAgICAnUEdfVFlQRU9GJyxcbiAgICAnUEdfVFlQRV9JU19WSVNJQkxFJyxcbiAgICAnUEdfVklTSUJMRV9JTl9TTkFQU0hPVCcsXG4gICAgJ1BHX1hBQ1RfQ09NTUlUX1RJTUVTVEFNUCcsXG4gICAgJ1BHX1hBQ1RfQ09NTUlUX1RJTUVTVEFNUF9PUklHSU4nLFxuICAgICdQR19YQUNUX1NUQVRVUycsXG4gICAgJ1BRU0VSVkVSVkVSU0lPTicsXG4gICAgJ1JPV19TRUNVUklUWV9BQ1RJVkUnLFxuICAgICdTRVNTSU9OX1VTRVInLFxuICAgICdTSE9CSl9ERVNDUklQVElPTicsXG4gICAgJ1RPX1JFR0NMQVNTJyxcbiAgICAnVE9fUkVHQ09MTEFUSU9OJyxcbiAgICAnVE9fUkVHTkFNRVNQQUNFJyxcbiAgICAnVE9fUkVHT1BFUicsXG4gICAgJ1RPX1JFR09QRVJBVE9SJyxcbiAgICAnVE9fUkVHUFJPQycsXG4gICAgJ1RPX1JFR1BST0NFRFVSRScsXG4gICAgJ1RPX1JFR1JPTEUnLFxuICAgICdUT19SRUdUWVBFJyxcbiAgICAnVFhJRF9DVVJSRU5UJyxcbiAgICAnVFhJRF9DVVJSRU5UX0lGX0FTU0lHTkVEJyxcbiAgICAnVFhJRF9DVVJSRU5UX1NOQVBTSE9UJyxcbiAgICAnVFhJRF9TTkFQU0hPVF9YSVAnLFxuICAgICdUWElEX1NOQVBTSE9UX1hNQVgnLFxuICAgICdUWElEX1NOQVBTSE9UX1hNSU4nLFxuICAgICdUWElEX1NUQVRVUycsXG4gICAgJ1RYSURfVklTSUJMRV9JTl9TTkFQU0hPVCcsXG4gICAgJ1VTRVInLFxuICAgICdWRVJTSU9OJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9mdW5jdGlvbnMtYWRtaW4uaHRtbFxuICBzeXNBZG1pbjogW1xuICAgICdCUklOX0RFU1VNTUFSSVpFX1JBTkdFJyxcbiAgICAnQlJJTl9TVU1NQVJJWkVfTkVXX1ZBTFVFUycsXG4gICAgJ0JSSU5fU1VNTUFSSVpFX1JBTkdFJyxcbiAgICAnQ09OVkVSVF9GUk9NJyxcbiAgICAnQ1VSUkVOVF9TRVRUSU5HJyxcbiAgICAnR0lOX0NMRUFOX1BFTkRJTkdfTElTVCcsXG4gICAgJ1BHX0FEVklTT1JZX0xPQ0snLFxuICAgICdQR19BRFZJU09SWV9MT0NLX1NIQVJFRCcsXG4gICAgJ1BHX0FEVklTT1JZX1VOTE9DSycsXG4gICAgJ1BHX0FEVklTT1JZX1VOTE9DS19BTEwnLFxuICAgICdQR19BRFZJU09SWV9VTkxPQ0tfU0hBUkVEJyxcbiAgICAnUEdfQURWSVNPUllfWEFDVF9MT0NLJyxcbiAgICAnUEdfQURWSVNPUllfWEFDVF9MT0NLX1NIQVJFRCcsXG4gICAgJ1BHX0JBQ0tVUF9TVEFSVF9USU1FJyxcbiAgICAnUEdfQ0FOQ0VMX0JBQ0tFTkQnLFxuICAgICdQR19DT0xMQVRJT05fQUNUVUFMX1ZFUlNJT04nLFxuICAgICdQR19DT0xVTU5fQ09NUFJFU1NJT04nLFxuICAgICdQR19DT0xVTU5fU0laRScsXG4gICAgJ1BHX0NPUFlfTE9HSUNBTF9SRVBMSUNBVElPTl9TTE9UJyxcbiAgICAnUEdfQ09QWV9QSFlTSUNBTF9SRVBMSUNBVElPTl9TTE9UJyxcbiAgICAnUEdfQ1JFQVRFX0xPR0lDQUxfUkVQTElDQVRJT05fU0xPVCcsXG4gICAgJ1BHX0NSRUFURV9QSFlTSUNBTF9SRVBMSUNBVElPTl9TTE9UJyxcbiAgICAnUEdfQ1JFQVRFX1JFU1RPUkVfUE9JTlQnLFxuICAgICdQR19DVVJSRU5UX1dBTF9GTFVTSF9MU04nLFxuICAgICdQR19DVVJSRU5UX1dBTF9JTlNFUlRfTFNOJyxcbiAgICAnUEdfQ1VSUkVOVF9XQUxfTFNOJyxcbiAgICAnUEdfREFUQUJBU0VfU0laRScsXG4gICAgJ1BHX0RST1BfUkVQTElDQVRJT05fU0xPVCcsXG4gICAgJ1BHX0VYUE9SVF9TTkFQU0hPVCcsXG4gICAgJ1BHX0ZJTEVOT0RFX1JFTEFUSU9OJyxcbiAgICAnUEdfR0VUX1dBTF9SRVBMQVlfUEFVU0VfU1RBVEUnLFxuICAgICdQR19JTVBPUlRfU1lTVEVNX0NPTExBVElPTlMnLFxuICAgICdQR19JTkRFWEVTX1NJWkUnLFxuICAgICdQR19JU19JTl9CQUNLVVAnLFxuICAgICdQR19JU19JTl9SRUNPVkVSWScsXG4gICAgJ1BHX0lTX1dBTF9SRVBMQVlfUEFVU0VEJyxcbiAgICAnUEdfTEFTVF9XQUxfUkVDRUlWRV9MU04nLFxuICAgICdQR19MQVNUX1dBTF9SRVBMQVlfTFNOJyxcbiAgICAnUEdfTEFTVF9YQUNUX1JFUExBWV9USU1FU1RBTVAnLFxuICAgICdQR19MT0dJQ0FMX0VNSVRfTUVTU0FHRScsXG4gICAgJ1BHX0xPR0lDQUxfU0xPVF9HRVRfQklOQVJZX0NIQU5HRVMnLFxuICAgICdQR19MT0dJQ0FMX1NMT1RfR0VUX0NIQU5HRVMnLFxuICAgICdQR19MT0dJQ0FMX1NMT1RfUEVFS19CSU5BUllfQ0hBTkdFUycsXG4gICAgJ1BHX0xPR0lDQUxfU0xPVF9QRUVLX0NIQU5HRVMnLFxuICAgICdQR19MT0dfQkFDS0VORF9NRU1PUllfQ09OVEVYVFMnLFxuICAgICdQR19MU19BUkNISVZFX1NUQVRVU0RJUicsXG4gICAgJ1BHX0xTX0RJUicsXG4gICAgJ1BHX0xTX0xPR0RJUicsXG4gICAgJ1BHX0xTX1RNUERJUicsXG4gICAgJ1BHX0xTX1dBTERJUicsXG4gICAgJ1BHX1BBUlRJVElPTl9BTkNFU1RPUlMnLFxuICAgICdQR19QQVJUSVRJT05fUk9PVCcsXG4gICAgJ1BHX1BBUlRJVElPTl9UUkVFJyxcbiAgICAnUEdfUFJPTU9URScsXG4gICAgJ1BHX1JFQURfQklOQVJZX0ZJTEUnLFxuICAgICdQR19SRUFEX0ZJTEUnLFxuICAgICdQR19SRUxBVElPTl9GSUxFTk9ERScsXG4gICAgJ1BHX1JFTEFUSU9OX0ZJTEVQQVRIJyxcbiAgICAnUEdfUkVMQVRJT05fU0laRScsXG4gICAgJ1BHX1JFTE9BRF9DT05GJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX0FEVkFOQ0UnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fQ1JFQVRFJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX0RST1AnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fT0lEJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX1BST0dSRVNTJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX1NFU1NJT05fSVNfU0VUVVAnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fU0VTU0lPTl9QUk9HUkVTUycsXG4gICAgJ1BHX1JFUExJQ0FUSU9OX09SSUdJTl9TRVNTSU9OX1JFU0VUJyxcbiAgICAnUEdfUkVQTElDQVRJT05fT1JJR0lOX1NFU1NJT05fU0VUVVAnLFxuICAgICdQR19SRVBMSUNBVElPTl9PUklHSU5fWEFDVF9SRVNFVCcsXG4gICAgJ1BHX1JFUExJQ0FUSU9OX09SSUdJTl9YQUNUX1NFVFVQJyxcbiAgICAnUEdfUkVQTElDQVRJT05fU0xPVF9BRFZBTkNFJyxcbiAgICAnUEdfUk9UQVRFX0xPR0ZJTEUnLFxuICAgICdQR19TSVpFX0JZVEVTJyxcbiAgICAnUEdfU0laRV9QUkVUVFknLFxuICAgICdQR19TVEFSVF9CQUNLVVAnLFxuICAgICdQR19TVEFUX0ZJTEUnLFxuICAgICdQR19TVE9QX0JBQ0tVUCcsXG4gICAgJ1BHX1NXSVRDSF9XQUwnLFxuICAgICdQR19UQUJMRVNQQUNFX1NJWkUnLFxuICAgICdQR19UQUJMRV9TSVpFJyxcbiAgICAnUEdfVEVSTUlOQVRFX0JBQ0tFTkQnLFxuICAgICdQR19UT1RBTF9SRUxBVElPTl9TSVpFJyxcbiAgICAnUEdfVFJZX0FEVklTT1JZX0xPQ0snLFxuICAgICdQR19UUllfQURWSVNPUllfTE9DS19TSEFSRUQnLFxuICAgICdQR19UUllfQURWSVNPUllfWEFDVF9MT0NLJyxcbiAgICAnUEdfVFJZX0FEVklTT1JZX1hBQ1RfTE9DS19TSEFSRUQnLFxuICAgICdQR19XQUxGSUxFX05BTUUnLFxuICAgICdQR19XQUxGSUxFX05BTUVfT0ZGU0VUJyxcbiAgICAnUEdfV0FMX0xTTl9ESUZGJyxcbiAgICAnUEdfV0FMX1JFUExBWV9QQVVTRScsXG4gICAgJ1BHX1dBTF9SRVBMQVlfUkVTVU1FJyxcbiAgICAnU0VUX0NPTkZJRycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXRyaWdnZXIuaHRtbFxuICB0cmlnZ2VyOiBbXG4gICAgJ1NVUFBSRVNTX1JFRFVOREFOVF9VUERBVEVTX1RSSUdHRVInLFxuICAgICdUU1ZFQ1RPUl9VUERBVEVfVFJJR0dFUicsXG4gICAgJ1RTVkVDVE9SX1VQREFURV9UUklHR0VSX0NPTFVNTicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLWV2ZW50LXRyaWdnZXJzLmh0bWxcbiAgZXZlbnRUcmlnZ2VyOiBbXG4gICAgJ1BHX0VWRU5UX1RSSUdHRVJfRERMX0NPTU1BTkRTJyxcbiAgICAnUEdfRVZFTlRfVFJJR0dFUl9EUk9QUEVEX09CSkVDVFMnLFxuICAgICdQR19FVkVOVF9UUklHR0VSX1RBQkxFX1JFV1JJVEVfT0lEJyxcbiAgICAnUEdfRVZFTlRfVFJJR0dFUl9UQUJMRV9SRVdSSVRFX1JFQVNPTicsXG4gICAgJ1BHX0dFVF9PQkpFQ1RfQUREUkVTUycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvMTQvZnVuY3Rpb25zLXN0YXRpc3RpY3MuaHRtbFxuICBzdGF0czogWydQR19NQ1ZfTElTVF9JVEVNUyddLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIHdvcmRzXG4gKiBhbnkgd29yZHMgdGhhdCBhcmUgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYXJlIHJlbW92ZWRcbiAqL1xuLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9zcWwta2V5d29yZHMtYXBwZW5kaXguaHRtbFxuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FCU0VOVCcsXG4gICdBQlNPTFVURScsXG4gICdBQ0NFU1MnLFxuICAnQUNDT1JESU5HJyxcbiAgJ0FDVElPTicsXG4gICdBREEnLFxuICAnQURNSU4nLFxuICAnQUdHUkVHQVRFJyxcbiAgJ0FMTCcsXG4gICdBTExPQ0FURScsXG4gICdBTFNPJyxcbiAgJ0FMVEVSJyxcbiAgJ0FMV0FZUycsXG4gICdBTkFMWVNFJyxcbiAgJ0FSRScsXG4gICdBUlJBWScsXG4gICdBUlJBWV9NQVhfQ0FSRElOQUxJVFknLFxuICAnQVMnLFxuICAnQVNDJyxcbiAgJ0FTRU5TSVRJVkUnLFxuICAnQVNTRVJUSU9OJyxcbiAgJ0FTU0lHTk1FTlQnLFxuICAnQVNZTU1FVFJJQycsXG4gICdBVCcsXG4gICdBVE9NSUMnLFxuICAnQVRUQUNIJyxcbiAgJ0FUVFJJQlVURScsXG4gICdBVFRSSUJVVEVTJyxcbiAgJ0FVVEhPUklaQVRJT04nLFxuICAnQkFDS1dBUkQnLFxuICAnQkFTRTY0JyxcbiAgJ0JFRk9SRScsXG4gICdCRUdJTl9GUkFNRScsXG4gICdCRUdJTl9QQVJUSVRJT04nLFxuICAnQkVSTk9VTExJJyxcbiAgJ0JFVFdFRU4nLFxuICAnQklHSU5UJyxcbiAgJ0JJTkFSWScsXG4gICdCSVQnLFxuICAnQkxPQicsXG4gICdCTE9DS0VEJyxcbiAgJ0JPTScsXG4gICdCT09MRUFOJyxcbiAgJ0JPVEgnLFxuICAnQlJFQURUSCcsXG4gICdCWScsXG4gICdDQUNIRScsXG4gICdDQUxMRUQnLFxuICAnQ0FTQ0FERScsXG4gICdDQVNDQURFRCcsXG4gICdDQVNUJyxcbiAgJ0NBVEFMT0cnLFxuICAnQ0FUQUxPR19OQU1FJyxcbiAgJ0NIQUlOJyxcbiAgJ0NIQUlOSU5HJyxcbiAgJ0NIQVInLFxuICAnQ0hBUkFDVEVSJyxcbiAgJ0NIQVJBQ1RFUklTVElDUycsXG4gICdDSEFSQUNURVJTJyxcbiAgJ0NIQVJBQ1RFUl9TRVRfQ0FUQUxPRycsXG4gICdDSEFSQUNURVJfU0VUX05BTUUnLFxuICAnQ0hBUkFDVEVSX1NFVF9TQ0hFTUEnLFxuICAnQ0hFQ0snLFxuICAnQ0xBU1MnLFxuICAnQ0xBU1NJRklFUicsXG4gICdDTEFTU19PUklHSU4nLFxuICAnQ0xPQicsXG4gICdDT0JPTCcsXG4gICdDT0xMQVRFJyxcbiAgJ0NPTExBVElPTicsXG4gICdDT0xMQVRJT05fQ0FUQUxPRycsXG4gICdDT0xMQVRJT05fTkFNRScsXG4gICdDT0xMQVRJT05fU0NIRU1BJyxcbiAgJ0NPTExFQ1QnLFxuICAnQ09MVU1OJyxcbiAgJ0NPTFVNTlMnLFxuICAnQ09MVU1OX05BTUUnLFxuICAnQ09NTUFORF9GVU5DVElPTicsXG4gICdDT01NQU5EX0ZVTkNUSU9OX0NPREUnLFxuICAnQ09NTUVOVFMnLFxuICAnQ09NTUlUVEVEJyxcbiAgJ0NPTVBSRVNTSU9OJyxcbiAgJ0NPTkNVUlJFTlRMWScsXG4gICdDT05ESVRJT04nLFxuICAnQ09ORElUSU9OQUwnLFxuICAnQ09ORElUSU9OX05VTUJFUicsXG4gICdDT05GSUdVUkFUSU9OJyxcbiAgJ0NPTkZMSUNUJyxcbiAgJ0NPTk5FQ1QnLFxuICAnQ09OTkVDVElPTicsXG4gICdDT05ORUNUSU9OX05BTUUnLFxuICAnQ09OU1RSQUlOVCcsXG4gICdDT05TVFJBSU5UUycsXG4gICdDT05TVFJBSU5UX0NBVEFMT0cnLFxuICAnQ09OU1RSQUlOVF9OQU1FJyxcbiAgJ0NPTlNUUkFJTlRfU0NIRU1BJyxcbiAgJ0NPTlNUUlVDVE9SJyxcbiAgJ0NPTlRBSU5TJyxcbiAgJ0NPTlRFTlQnLFxuICAnQ09OVElOVUUnLFxuICAnQ09OVFJPTCcsXG4gICdDT05WRVJTSU9OJyxcbiAgJ0NPUlJFU1BPTkRJTkcnLFxuICAnQ09TVCcsXG4gICdDUkVBVEUnLFxuICAnQ1JPU1MnLFxuICAnQ1NWJyxcbiAgJ0NVQkUnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJSRU5UX0RFRkFVTFRfVFJBTlNGT1JNX0dST1VQJyxcbiAgJ0NVUlJFTlRfUEFUSCcsXG4gICdDVVJSRU5UX1JPVycsXG4gICdDVVJSRU5UX1RSQU5TRk9STV9HUk9VUF9GT1JfVFlQRScsXG4gICdDVVJTT1InLFxuICAnQ1VSU09SX05BTUUnLFxuICAnQ1lDTEUnLFxuICAnREFUQScsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBTElOSycsXG4gICdEQVRFJyxcbiAgJ0RBVEVUSU1FX0lOVEVSVkFMX0NPREUnLFxuICAnREFURVRJTUVfSU5URVJWQUxfUFJFQ0lTSU9OJyxcbiAgJ0RBWScsXG4gICdEQicsXG4gICdERUMnLFxuICAnREVDRkxPQVQnLFxuICAnREVDSU1BTCcsXG4gICdERUZBVUxUJyxcbiAgJ0RFRkFVTFRTJyxcbiAgJ0RFRkVSUkFCTEUnLFxuICAnREVGRVJSRUQnLFxuICAnREVGSU5FJyxcbiAgJ0RFRklORUQnLFxuICAnREVGSU5FUicsXG4gICdERUdSRUUnLFxuICAnREVMSU1JVEVSJyxcbiAgJ0RFTElNSVRFUlMnLFxuICAnREVQRU5EUycsXG4gICdERVBUSCcsXG4gICdERVJFRicsXG4gICdERVJJVkVEJyxcbiAgJ0RFU0MnLFxuICAnREVTQ1JJQkUnLFxuICAnREVTQ1JJUFRPUicsXG4gICdERVRBQ0gnLFxuICAnREVURVJNSU5JU1RJQycsXG4gICdESUFHTk9TVElDUycsXG4gICdESUNUSU9OQVJZJyxcbiAgJ0RJU0FCTEUnLFxuICAnRElTQ09OTkVDVCcsXG4gICdESVNQQVRDSCcsXG4gICdESVNUSU5DVCcsXG4gICdETE5FV0NPUFknLFxuICAnRExQUkVWSU9VU0NPUFknLFxuICAnRExVUkxDT01QTEVURScsXG4gICdETFVSTENPTVBMRVRFT05MWScsXG4gICdETFVSTENPTVBMRVRFV1JJVEUnLFxuICAnRExVUkxQQVRIJyxcbiAgJ0RMVVJMUEFUSE9OTFknLFxuICAnRExVUkxQQVRIV1JJVEUnLFxuICAnRExVUkxTQ0hFTUUnLFxuICAnRExVUkxTRVJWRVInLFxuICAnRExWQUxVRScsXG4gICdET0NVTUVOVCcsXG4gICdET01BSU4nLFxuICAnRE9VQkxFJyxcbiAgJ0RST1AnLFxuICAnRFlOQU1JQycsXG4gICdEWU5BTUlDX0ZVTkNUSU9OJyxcbiAgJ0RZTkFNSUNfRlVOQ1RJT05fQ09ERScsXG4gICdFQUNIJyxcbiAgJ0VMRU1FTlQnLFxuICAnRU1QVFknLFxuICAnRU5BQkxFJyxcbiAgJ0VOQ09ESU5HJyxcbiAgJ0VOQ1JZUFRFRCcsXG4gICdFTkQtRVhFQycsXG4gICdFTkRfRlJBTUUnLFxuICAnRU5EX1BBUlRJVElPTicsXG4gICdFTkZPUkNFRCcsXG4gICdFTlVNJyxcbiAgJ0VRVUFMUycsXG4gICdFUlJPUicsXG4gICdFU0NBUEUnLFxuICAnRVZFTlQnLFxuICAnRVhDRVBUSU9OJyxcbiAgJ0VYQ0xVREUnLFxuICAnRVhDTFVESU5HJyxcbiAgJ0VYQ0xVU0lWRScsXG4gICdFWEVDJyxcbiAgJ0VYSVNUUycsXG4gICdFWFBSRVNTSU9OJyxcbiAgJ0VYVEVOU0lPTicsXG4gICdFWFRFUk5BTCcsXG4gICdGQUxTRScsXG4gICdGSUxFJyxcbiAgJ0ZJTFRFUicsXG4gICdGSU5BTCcsXG4gICdGSU5BTElaRScsXG4gICdGSU5JU0gnLFxuICAnRklSU1QnLFxuICAnRkxBRycsXG4gICdGTE9BVCcsXG4gICdGT0xMT1dJTkcnLFxuICAnRk9SJyxcbiAgJ0ZPUkNFJyxcbiAgJ0ZPUkVJR04nLFxuICAnRk9SVFJBTicsXG4gICdGT1JXQVJEJyxcbiAgJ0ZPVU5EJyxcbiAgJ0ZSQU1FX1JPVycsXG4gICdGUkVFJyxcbiAgJ0ZSRUVaRScsXG4gICdGUycsXG4gICdGVUxGSUxMJyxcbiAgJ0ZVTEwnLFxuICAnRlVOQ1RJT04nLFxuICAnRlVOQ1RJT05TJyxcbiAgJ0ZVU0lPTicsXG4gICdHRU5FUkFMJyxcbiAgJ0dFTkVSQVRFRCcsXG4gICdHRVQnLFxuICAnR0xPQkFMJyxcbiAgJ0dPJyxcbiAgJ0dPVE8nLFxuICAnR1JBTlRFRCcsXG4gICdHUk9VUCcsXG4gICdHUk9VUFMnLFxuICAnSEFORExFUicsXG4gICdIRUFERVInLFxuICAnSEVYJyxcbiAgJ0hJRVJBUkNIWScsXG4gICdIT0xEJyxcbiAgJ0hPVVInLFxuICAvLyAnSUQnLFxuICAnSURFTlRJVFknLFxuICAnSUYnLFxuICAnSUdOT1JFJyxcbiAgJ0lMSUtFJyxcbiAgJ0lNTUVESUFURScsXG4gICdJTU1FRElBVEVMWScsXG4gICdJTU1VVEFCTEUnLFxuICAnSU1QTEVNRU5UQVRJT04nLFxuICAnSU1QTElDSVQnLFxuICAnSU1QT1JUJyxcbiAgJ0lOJyxcbiAgJ0lOQ0xVREUnLFxuICAnSU5DTFVESU5HJyxcbiAgJ0lOQ1JFTUVOVCcsXG4gICdJTkRFTlQnLFxuICAnSU5ERVgnLFxuICAnSU5ERVhFUycsXG4gICdJTkRJQ0FUT1InLFxuICAnSU5IRVJJVCcsXG4gICdJTkhFUklUUycsXG4gICdJTklUSUFMJyxcbiAgJ0lOSVRJQUxMWScsXG4gICdJTkxJTkUnLFxuICAnSU5ORVInLFxuICAnSU5PVVQnLFxuICAnSU5QVVQnLFxuICAnSU5TRU5TSVRJVkUnLFxuICAnSU5TVEFOQ0UnLFxuICAnSU5TVEFOVElBQkxFJyxcbiAgJ0lOU1RFQUQnLFxuICAnSU5UJyxcbiAgJ0lOVEVHRVInLFxuICAnSU5URUdSSVRZJyxcbiAgJ0lOVEVSU0VDVElPTicsXG4gICdJTlRFUlZBTCcsXG4gICdJTlRPJyxcbiAgJ0lOVk9LRVInLFxuICAnSVMnLFxuICAnSVNOVUxMJyxcbiAgJ0lTT0xBVElPTicsXG4gICdKU09OJyxcbiAgJ0pTT05fQVJSQVknLFxuICAnSlNPTl9BUlJBWUFHRycsXG4gICdKU09OX0VYSVNUUycsXG4gICdKU09OX09CSkVDVEFHRycsXG4gICdKU09OX1FVRVJZJyxcbiAgJ0pTT05fVEFCTEUnLFxuICAnSlNPTl9UQUJMRV9QUklNSVRJVkUnLFxuICAnSlNPTl9WQUxVRScsXG4gICdLRUVQJyxcbiAgJ0tFWScsXG4gICdLRVlTJyxcbiAgJ0tFWV9NRU1CRVInLFxuICAnS0VZX1RZUEUnLFxuICAnTEFCRUwnLFxuICAnTEFOR1VBR0UnLFxuICAnTEFSR0UnLFxuICAnTEFTVCcsXG4gICdMQVRFUkFMJyxcbiAgJ0xFQURJTkcnLFxuICAnTEVBS1BST09GJyxcbiAgJ0xFVkVMJyxcbiAgJ0xJQlJBUlknLFxuICAnTElLRScsXG4gICdMSUtFX1JFR0VYJyxcbiAgJ0xJTksnLFxuICAnTElTVEFHRycsXG4gICdMT0NBTCcsXG4gICdMT0NBVElPTicsXG4gICdMT0NBVE9SJyxcbiAgJ0xPQ0tFRCcsXG4gICdMT0dHRUQnLFxuICAnTUFQJyxcbiAgJ01BUFBJTkcnLFxuICAnTUFUQ0gnLFxuICAnTUFUQ0hFRCcsXG4gICdNQVRDSEVTJyxcbiAgJ01BVENIX05VTUJFUicsXG4gICdNQVRDSF9SRUNPR05JWkUnLFxuICAnTUFURVJJQUxJWkVEJyxcbiAgJ01BWFZBTFVFJyxcbiAgJ01FQVNVUkVTJyxcbiAgJ01FTUJFUicsXG4gICdNRVJHRScsXG4gICdNRVNTQUdFX0xFTkdUSCcsXG4gICdNRVNTQUdFX09DVEVUX0xFTkdUSCcsXG4gICdNRVNTQUdFX1RFWFQnLFxuICAnTUVUSE9EJyxcbiAgJ01JTlVURScsXG4gICdNSU5WQUxVRScsXG4gICdNT0RJRklFUycsXG4gICdNT0RVTEUnLFxuICAnTU9OVEgnLFxuICAnTU9SRScsXG4gICdNVUxUSVNFVCcsXG4gICdNVU1QUycsXG4gICdOQU1FJyxcbiAgJ05BTUVTJyxcbiAgJ05BTUVTUEFDRScsXG4gICdOQVRJT05BTCcsXG4gICdOQVRVUkFMJyxcbiAgJ05DSEFSJyxcbiAgJ05DTE9CJyxcbiAgJ05FU1RFRCcsXG4gICdORVNUSU5HJyxcbiAgJ05FVycsXG4gICdORVhUJyxcbiAgJ05GQycsXG4gICdORkQnLFxuICAnTkZLQycsXG4gICdORktEJyxcbiAgJ05JTCcsXG4gICdOTycsXG4gICdOT05FJyxcbiAgJ05PUk1BTElaRUQnLFxuICAnTk9UJyxcbiAgJ05PVEhJTkcnLFxuICAnTk9UTlVMTCcsXG4gICdOT1dBSVQnLFxuICAnTlVMTCcsXG4gICdOVUxMQUJMRScsXG4gICdOVUxMUycsXG4gICdOVU1CRVInLFxuICAnTlVNRVJJQycsXG4gICdPQkpFQ1QnLFxuICAnT0NDVVJSRU5DRVNfUkVHRVgnLFxuICAnT0NURVRTJyxcbiAgJ09GJyxcbiAgJ09GRicsXG4gICdPRkZTRVQnLFxuICAnT0lEUycsXG4gICdPTEQnLFxuICAnT01JVCcsXG4gICdPTiBDT01NSVQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkUnLFxuICAnT05MWScsXG4gICdPUEVOJyxcbiAgJ09QRVJBVE9SJyxcbiAgJ09QVElPTicsXG4gICdPUFRJT05TJyxcbiAgJ09SREVSJyxcbiAgJ09SREVSSU5HJyxcbiAgJ09SRElOQUxJVFknLFxuICAnT1RIRVJTJyxcbiAgJ09VVCcsXG4gICdPVVRFUicsXG4gICdPVVRQVVQnLFxuICAnT1ZFUicsXG4gICdPVkVSRkxPVycsXG4gICdPVkVSTEFQUycsXG4gICdPVkVSUklESU5HJyxcbiAgJ09XTkVEJyxcbiAgJ09XTkVSJyxcbiAgJ1BBRCcsXG4gICdQQVJBTExFTCcsXG4gICdQQVJBTUVURVInLFxuICAnUEFSQU1FVEVSX01PREUnLFxuICAnUEFSQU1FVEVSX05BTUUnLFxuICAnUEFSQU1FVEVSX09SRElOQUxfUE9TSVRJT04nLFxuICAnUEFSQU1FVEVSX1NQRUNJRklDX0NBVEFMT0cnLFxuICAnUEFSQU1FVEVSX1NQRUNJRklDX05BTUUnLFxuICAnUEFSQU1FVEVSX1NQRUNJRklDX1NDSEVNQScsXG4gICdQQVJTRVInLFxuICAnUEFSVElBTCcsXG4gICdQQVJUSVRJT04nLFxuICAnUEFTQ0FMJyxcbiAgJ1BBU1MnLFxuICAnUEFTU0lORycsXG4gICdQQVNTVEhST1VHSCcsXG4gICdQQVNTV09SRCcsXG4gICdQQVNUJyxcbiAgJ1BBVFRFUk4nLFxuICAnUEVSJyxcbiAgJ1BFUkNFTlQnLFxuICAnUEVSSU9EJyxcbiAgJ1BFUk1JU1NJT04nLFxuICAnUEVSTVVURScsXG4gICdQTEFDSU5HJyxcbiAgJ1BMQU4nLFxuICAnUExBTlMnLFxuICAnUExJJyxcbiAgJ1BPTElDWScsXG4gICdQT1JUSU9OJyxcbiAgJ1BPU0lUSU9OX1JFR0VYJyxcbiAgJ1BSRUNFREVTJyxcbiAgJ1BSRUNFRElORycsXG4gICdQUkVDSVNJT04nLFxuICAnUFJFUEFSRUQnLFxuICAnUFJFU0VSVkUnLFxuICAnUFJJTUFSWScsXG4gICdQUklPUicsXG4gICdQUklWQVRFJyxcbiAgJ1BSSVZJTEVHRVMnLFxuICAnUFJPQ0VEVVJBTCcsXG4gICdQUk9DRURVUkUnLFxuICAnUFJPQ0VEVVJFUycsXG4gICdQUk9HUkFNJyxcbiAgJ1BSVU5FJyxcbiAgJ1BURicsXG4gICdQVUJMSUMnLFxuICAnUFVCTElDQVRJT04nLFxuICAnUVVPVEUnLFxuICAnUVVPVEVTJyxcbiAgJ1JBTkdFJyxcbiAgJ1JFQUQnLFxuICAnUkVBRFMnLFxuICAnUkVBTCcsXG4gICdSRUFTU0lHTicsXG4gICdSRUNIRUNLJyxcbiAgJ1JFQ09WRVJZJyxcbiAgJ1JFQ1VSU0lWRScsXG4gICdSRUYnLFxuICAnUkVGRVJFTkNFUycsXG4gICdSRUZFUkVOQ0lORycsXG4gICdSRUZSRVNIJyxcbiAgJ1JFTEFUSVZFJyxcbiAgJ1JFTEVBU0UnLFxuICAnUkVOQU1FJyxcbiAgJ1JFUEVBVEFCTEUnLFxuICAnUkVQTElDQScsXG4gICdSRVFVSVJJTkcnLFxuICAnUkVTUEVDVCcsXG4gICdSRVNUQVJUJyxcbiAgJ1JFU1RPUkUnLFxuICAnUkVTVFJJQ1QnLFxuICAnUkVTVUxUJyxcbiAgJ1JFVFVSTicsXG4gICdSRVRVUk5FRF9DQVJESU5BTElUWScsXG4gICdSRVRVUk5FRF9MRU5HVEgnLFxuICAnUkVUVVJORURfT0NURVRfTEVOR1RIJyxcbiAgJ1JFVFVSTkVEX1NRTFNUQVRFJyxcbiAgJ1JFVFVSTlMnLFxuICAnUk9MRScsXG4gICdST0xMVVAnLFxuICAnUk9VVElORScsXG4gICdST1VUSU5FUycsXG4gICdST1VUSU5FX0NBVEFMT0cnLFxuICAnUk9VVElORV9OQU1FJyxcbiAgJ1JPVVRJTkVfU0NIRU1BJyxcbiAgJ1JPVycsXG4gICdST1dTJyxcbiAgJ1JPV19DT1VOVCcsXG4gICdSVUxFJyxcbiAgJ1JVTk5JTkcnLFxuICAnU0NBTEFSJyxcbiAgJ1NDSEVNQScsXG4gICdTQ0hFTUFTJyxcbiAgJ1NDSEVNQV9OQU1FJyxcbiAgJ1NDT1BFJyxcbiAgJ1NDT1BFX0NBVEFMT0cnLFxuICAnU0NPUEVfTkFNRScsXG4gICdTQ09QRV9TQ0hFTUEnLFxuICAnU0NST0xMJyxcbiAgJ1NFQVJDSCcsXG4gICdTRUNPTkQnLFxuICAnU0VDVElPTicsXG4gICdTRUNVUklUWScsXG4gICdTRUVLJyxcbiAgJ1NFTEVDVElWRScsXG4gICdTRUxGJyxcbiAgJ1NFTlNJVElWRScsXG4gICdTRVFVRU5DRScsXG4gICdTRVFVRU5DRVMnLFxuICAnU0VSSUFMSVpBQkxFJyxcbiAgJ1NFUlZFUicsXG4gICdTRVJWRVJfTkFNRScsXG4gICdTRVNTSU9OJyxcbiAgJ1NFVE9GJyxcbiAgJ1NFVFMnLFxuICAnU0hBUkUnLFxuICAnU0lNSUxBUicsXG4gICdTSU1QTEUnLFxuICAnU0laRScsXG4gICdTS0lQJyxcbiAgJ1NNQUxMSU5UJyxcbiAgJ1NOQVBTSE9UJyxcbiAgJ1NPVVJDRScsXG4gICdTUEFDRScsXG4gICdTUEVDSUZJQycsXG4gICdTUEVDSUZJQ1RZUEUnLFxuICAnU1BFQ0lGSUNfTkFNRScsXG4gICdTUUwnLFxuICAnU1FMQ09ERScsXG4gICdTUUxFUlJPUicsXG4gICdTUUxFWENFUFRJT04nLFxuICAnU1FMU1RBVEUnLFxuICAnU1FMV0FSTklORycsXG4gICdTVEFCTEUnLFxuICAnU1RBTkRBTE9ORScsXG4gICdTVEFSVCcsXG4gICdTVEFURScsXG4gICdTVEFURU1FTlQnLFxuICAnU1RBVElDJyxcbiAgJ1NUQVRJU1RJQ1MnLFxuICAnU1RESU4nLFxuICAnU1RET1VUJyxcbiAgJ1NUT1JBR0UnLFxuICAnU1RPUkVEJyxcbiAgJ1NUUklDVCcsXG4gICdTVFJVQ1RVUkUnLFxuICAnU1RZTEUnLFxuICAnU1VCQ0xBU1NfT1JJR0lOJyxcbiAgJ1NVQk1VTFRJU0VUJyxcbiAgJ1NVQlNDUklQVElPTicsXG4gICdTVUJTRVQnLFxuICAnU1VCU1RSSU5HX1JFR0VYJyxcbiAgJ1NVQ0NFRURTJyxcbiAgJ1NVUFBPUlQnLFxuICAnU1lNTUVUUklDJyxcbiAgJ1NZU0lEJyxcbiAgJ1NZU1RFTScsXG4gICdTWVNURU1fVElNRScsXG4gICdTWVNURU1fVVNFUicsXG4gICdUQUJMRScsXG4gICdUQUJMRVMnLFxuICAnVEFCTEVTQU1QTEUnLFxuICAnVEFCTEVTUEFDRScsXG4gICdUQUJMRV9OQU1FJyxcbiAgJ1RFTVAnLFxuICAnVEVNUExBVEUnLFxuICAnVEVNUE9SQVJZJyxcbiAgJ1RIRU4nLFxuICAnVEhST1VHSCcsXG4gICdUSUVTJyxcbiAgJ1RJTUUnLFxuICAnVElNRVNUQU1QJyxcbiAgJ1RJTUVaT05FX0hPVVInLFxuICAnVElNRVpPTkVfTUlOVVRFJyxcbiAgJ1RPJyxcbiAgJ1RPS0VOJyxcbiAgJ1RPUF9MRVZFTF9DT1VOVCcsXG4gICdUUkFJTElORycsXG4gICdUUkFOU0FDVElPTicsXG4gICdUUkFOU0FDVElPTlNfQ09NTUlUVEVEJyxcbiAgJ1RSQU5TQUNUSU9OU19ST0xMRURfQkFDSycsXG4gICdUUkFOU0FDVElPTl9BQ1RJVkUnLFxuICAnVFJBTlNGT1JNJyxcbiAgJ1RSQU5TRk9STVMnLFxuICAnVFJBTlNMQVRFX1JFR0VYJyxcbiAgJ1RSQU5TTEFUSU9OJyxcbiAgJ1RSRUFUJyxcbiAgJ1RSSUdHRVInLFxuICAnVFJJR0dFUl9DQVRBTE9HJyxcbiAgJ1RSSUdHRVJfTkFNRScsXG4gICdUUklHR0VSX1NDSEVNQScsXG4gICdUUlVFJyxcbiAgJ1RSVVNURUQnLFxuICAnVFlQRScsXG4gICdUWVBFUycsXG4gICdVRVNDQVBFJyxcbiAgJ1VOQk9VTkRFRCcsXG4gICdVTkNPTU1JVFRFRCcsXG4gICdVTkNPTkRJVElPTkFMJyxcbiAgJ1VOREVSJyxcbiAgJ1VORU5DUllQVEVEJyxcbiAgJ1VOSVFVRScsXG4gICdVTktOT1dOJyxcbiAgJ1VOTElOSycsXG4gICdVTkxPR0dFRCcsXG4gICdVTk1BVENIRUQnLFxuICAnVU5OQU1FRCcsXG4gICdVTlRJTCcsXG4gICdVTlRZUEVEJyxcbiAgJ1VSSScsXG4gICdVU0FHRScsXG4gICdVU0VSX0RFRklORURfVFlQRV9DQVRBTE9HJyxcbiAgJ1VTRVJfREVGSU5FRF9UWVBFX0NPREUnLFxuICAnVVNFUl9ERUZJTkVEX1RZUEVfTkFNRScsXG4gICdVU0VSX0RFRklORURfVFlQRV9TQ0hFTUEnLFxuICAnVVRGMTYnLFxuICAnVVRGMzInLFxuICAnVVRGOCcsXG4gICdWQUxJRCcsXG4gICdWQUxJREFURScsXG4gICdWQUxJREFUT1InLFxuICAnVkFMVUUnLFxuICAnVkFMVUVfT0YnLFxuICAnVkFSQklOQVJZJyxcbiAgJ1ZBUkNIQVInLFxuICAnVkFSSUFESUMnLFxuICAnVkFSWUlORycsXG4gICdWRVJCT1NFJyxcbiAgJ1ZFUlNJT05JTkcnLFxuICAnVklFVycsXG4gICdWSUVXUycsXG4gICdWT0xBVElMRScsXG4gICdXSEVORVZFUicsXG4gICdXSElURVNQQUNFJyxcbiAgJ1dJTkRPVycsXG4gICdXSVRISU4nLFxuICAnV0lUSE9VVCcsXG4gICdXT1JLJyxcbiAgJ1dSQVBQRVInLFxuICAnV1JJVEUnLFxuICAnWE1MJyxcbiAgJ1hNTEFUVFJJQlVURVMnLFxuICAnWE1MQklOQVJZJyxcbiAgJ1hNTENBU1QnLFxuICAnWE1MREVDTEFSQVRJT04nLFxuICAnWE1MRE9DVU1FTlQnLFxuICAnWE1MSVRFUkFURScsXG4gICdYTUxOQU1FU1BBQ0VTJyxcbiAgJ1hNTFFVRVJZJyxcbiAgJ1hNTFNDSEVNQScsXG4gICdYTUxURVhUJyxcbiAgJ1hNTFZBTElEQVRFJyxcbiAgJ1lFQVInLFxuICAnWUVTJyxcbiAgJ1pPTkUnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzLzE0L3NxbC1jb21tYW5kcy5odG1sXG5jb25zdCByZXNlcnZlZENvbW1hbmRzID0gW1xuICAnQUJPUlQnLFxuICAnQUxURVIgQUdHUkVHQVRFJyxcbiAgJ0FMVEVSIENPTExBVElPTicsXG4gICdBTFRFUiBDT05WRVJTSU9OJyxcbiAgJ0FMVEVSIERBVEFCQVNFJyxcbiAgJ0FMVEVSIERFRkFVTFQgUFJJVklMRUdFUycsXG4gICdBTFRFUiBET01BSU4nLFxuICAnQUxURVIgRVZFTlQgVFJJR0dFUicsXG4gICdBTFRFUiBFWFRFTlNJT04nLFxuICAnQUxURVIgRk9SRUlHTiBEQVRBIFdSQVBQRVInLFxuICAnQUxURVIgRk9SRUlHTiBUQUJMRScsXG4gICdBTFRFUiBGVU5DVElPTicsXG4gICdBTFRFUiBHUk9VUCcsXG4gICdBTFRFUiBJTkRFWCcsXG4gICdBTFRFUiBMQU5HVUFHRScsXG4gICdBTFRFUiBMQVJHRSBPQkpFQ1QnLFxuICAnQUxURVIgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnQUxURVIgT1BFUkFUT1InLFxuICAnQUxURVIgT1BFUkFUT1IgQ0xBU1MnLFxuICAnQUxURVIgT1BFUkFUT1IgRkFNSUxZJyxcbiAgJ0FMVEVSIFBPTElDWScsXG4gICdBTFRFUiBQUk9DRURVUkUnLFxuICAnQUxURVIgUFVCTElDQVRJT04nLFxuICAnQUxURVIgUk9MRScsXG4gICdBTFRFUiBST1VUSU5FJyxcbiAgJ0FMVEVSIFJVTEUnLFxuICAnQUxURVIgU0NIRU1BJyxcbiAgJ0FMVEVSIFNFUVVFTkNFJyxcbiAgJ0FMVEVSIFNFUlZFUicsXG4gICdBTFRFUiBTVEFUSVNUSUNTJyxcbiAgJ0FMVEVSIFNVQlNDUklQVElPTicsXG4gICdBTFRFUiBTWVNURU0nLFxuICAnQUxURVIgVEFCTEUnLFxuICAnQUxURVIgVEFCTEVTUEFDRScsXG4gICdBTFRFUiBURVhUIFNFQVJDSCBDT05GSUdVUkFUSU9OJyxcbiAgJ0FMVEVSIFRFWFQgU0VBUkNIIERJQ1RJT05BUlknLFxuICAnQUxURVIgVEVYVCBTRUFSQ0ggUEFSU0VSJyxcbiAgJ0FMVEVSIFRFWFQgU0VBUkNIIFRFTVBMQVRFJyxcbiAgJ0FMVEVSIFRSSUdHRVInLFxuICAnQUxURVIgVFlQRScsXG4gICdBTFRFUiBVU0VSJyxcbiAgJ0FMVEVSIFVTRVIgTUFQUElORycsXG4gICdBTFRFUiBWSUVXJyxcbiAgJ0FOQUxZWkUnLFxuICAnQkVHSU4nLFxuICAnQ0FMTCcsXG4gICdDSEVDS1BPSU5UJyxcbiAgJ0NMT1NFJyxcbiAgJ0NMVVNURVInLFxuICAnQ09NTUVOVCcsXG4gICdDT01NSVQnLFxuICAnQ09NTUlUIFBSRVBBUkVEJyxcbiAgJ0NPUFknLFxuICAnQ1JFQVRFIEFDQ0VTUyBNRVRIT0QnLFxuICAnQ1JFQVRFIEFHR1JFR0FURScsXG4gICdDUkVBVEUgQ0FTVCcsXG4gICdDUkVBVEUgQ09MTEFUSU9OJyxcbiAgJ0NSRUFURSBDT05WRVJTSU9OJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgRE9NQUlOJyxcbiAgJ0NSRUFURSBFVkVOVCBUUklHR0VSJyxcbiAgJ0NSRUFURSBFWFRFTlNJT04nLFxuICAnQ1JFQVRFIEZPUkVJR04gREFUQSBXUkFQUEVSJyxcbiAgJ0NSRUFURSBGT1JFSUdOIFRBQkxFJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgR1JPVVAnLFxuICAnQ1JFQVRFIElOREVYJyxcbiAgJ0NSRUFURSBMQU5HVUFHRScsXG4gICdDUkVBVEUgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnQ1JFQVRFIE9QRVJBVE9SJyxcbiAgJ0NSRUFURSBPUEVSQVRPUiBDTEFTUycsXG4gICdDUkVBVEUgT1BFUkFUT1IgRkFNSUxZJyxcbiAgJ0NSRUFURSBQT0xJQ1knLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgUFVCTElDQVRJT04nLFxuICAnQ1JFQVRFIFJPTEUnLFxuICAnQ1JFQVRFIFJVTEUnLFxuICAnQ1JFQVRFIFNDSEVNQScsXG4gICdDUkVBVEUgU0VRVUVOQ0UnLFxuICAnQ1JFQVRFIFNFUlZFUicsXG4gICdDUkVBVEUgU1RBVElTVElDUycsXG4gICdDUkVBVEUgU1VCU0NSSVBUSU9OJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEUgQVMnLFxuICAnQ1JFQVRFIFRBQkxFU1BBQ0UnLFxuICAnQ1JFQVRFIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04nLFxuICAnQ1JFQVRFIFRFWFQgU0VBUkNIIERJQ1RJT05BUlknLFxuICAnQ1JFQVRFIFRFWFQgU0VBUkNIIFBBUlNFUicsXG4gICdDUkVBVEUgVEVYVCBTRUFSQ0ggVEVNUExBVEUnLFxuICAnQ1JFQVRFIFRSQU5TRk9STScsXG4gICdDUkVBVEUgVFJJR0dFUicsXG4gICdDUkVBVEUgVFlQRScsXG4gICdDUkVBVEUgVVNFUicsXG4gICdDUkVBVEUgVVNFUiBNQVBQSU5HJyxcbiAgJ0NSRUFURSBWSUVXJyxcbiAgJ0RFQUxMT0NBVEUnLFxuICAnREVDTEFSRScsXG4gICdERUxFVEUnLFxuICAnRElTQ0FSRCcsXG4gICdETycsXG4gICdEUk9QIEFDQ0VTUyBNRVRIT0QnLFxuICAnRFJPUCBBR0dSRUdBVEUnLFxuICAnRFJPUCBDQVNUJyxcbiAgJ0RST1AgQ09MTEFUSU9OJyxcbiAgJ0RST1AgQ09OVkVSU0lPTicsXG4gICdEUk9QIERBVEFCQVNFJyxcbiAgJ0RST1AgRE9NQUlOJyxcbiAgJ0RST1AgRVZFTlQgVFJJR0dFUicsXG4gICdEUk9QIEVYVEVOU0lPTicsXG4gICdEUk9QIEZPUkVJR04gREFUQSBXUkFQUEVSJyxcbiAgJ0RST1AgRk9SRUlHTiBUQUJMRScsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgR1JPVVAnLFxuICAnRFJPUCBJTkRFWCcsXG4gICdEUk9QIExBTkdVQUdFJyxcbiAgJ0RST1AgTUFURVJJQUxJWkVEIFZJRVcnLFxuICAnRFJPUCBPUEVSQVRPUicsXG4gICdEUk9QIE9QRVJBVE9SIENMQVNTJyxcbiAgJ0RST1AgT1BFUkFUT1IgRkFNSUxZJyxcbiAgJ0RST1AgT1dORUQnLFxuICAnRFJPUCBQT0xJQ1knLFxuICAnRFJPUCBQUk9DRURVUkUnLFxuICAnRFJPUCBQVUJMSUNBVElPTicsXG4gICdEUk9QIFJPTEUnLFxuICAnRFJPUCBST1VUSU5FJyxcbiAgJ0RST1AgUlVMRScsXG4gICdEUk9QIFNDSEVNQScsXG4gICdEUk9QIFNFUVVFTkNFJyxcbiAgJ0RST1AgU0VSVkVSJyxcbiAgJ0RST1AgU1RBVElTVElDUycsXG4gICdEUk9QIFNVQlNDUklQVElPTicsXG4gICdEUk9QIFRBQkxFJyxcbiAgJ0RST1AgVEFCTEVTUEFDRScsXG4gICdEUk9QIFRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04nLFxuICAnRFJPUCBURVhUIFNFQVJDSCBESUNUSU9OQVJZJyxcbiAgJ0RST1AgVEVYVCBTRUFSQ0ggUEFSU0VSJyxcbiAgJ0RST1AgVEVYVCBTRUFSQ0ggVEVNUExBVEUnLFxuICAnRFJPUCBUUkFOU0ZPUk0nLFxuICAnRFJPUCBUUklHR0VSJyxcbiAgJ0RST1AgVFlQRScsXG4gICdEUk9QIFVTRVInLFxuICAnRFJPUCBVU0VSIE1BUFBJTkcnLFxuICAnRFJPUCBWSUVXJyxcbiAgJ0VORCcsXG4gICdFWEVDVVRFJyxcbiAgJ0VYUExBSU4nLFxuICAnRkVUQ0gnLFxuICAnR1JBTlQnLFxuICAnSU1QT1JUIEZPUkVJR04gU0NIRU1BJyxcbiAgJ0lOU0VSVCcsXG4gICdMSVNURU4nLFxuICAnTE9BRCcsXG4gICdMT0NLJyxcbiAgJ01PVkUnLFxuICAnTk9USUZZJyxcbiAgJ1BSRVBBUkUnLFxuICAnUFJFUEFSRSBUUkFOU0FDVElPTicsXG4gICdSRUFTU0lHTiBPV05FRCcsXG4gICdSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ1JFSU5ERVgnLFxuICAnUkVMRUFTRSBTQVZFUE9JTlQnLFxuICAnUkVTRVQnLFxuICAnUkVUVVJOSU5HJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSycsXG4gICdST0xMQkFDSyBQUkVQQVJFRCcsXG4gICdST0xMQkFDSyBUTyBTQVZFUE9JTlQnLFxuICAnU0FWRVBPSU5UJyxcbiAgJ1NFQ1VSSVRZIExBQkVMJyxcbiAgJ1NFTEVDVCcsXG4gICdTRUxFQ1QgSU5UTycsXG4gICdTRVQnLFxuICAnU0VUIENPTlNUUkFJTlRTJyxcbiAgJ1NFVCBST0xFJyxcbiAgJ1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04nLFxuICAnU0VUIFRSQU5TQUNUSU9OJyxcbiAgJ1NIT1cnLFxuICAnU1RBUlQgVFJBTlNBQ1RJT04nLFxuICAnVFJVTkNBVEUnLFxuICAnVU5MSVNURU4nLFxuICAnVVBEQVRFJyxcbiAgJ1ZBQ1VVTScsXG4gICdWQUxVRVMnLFxuICAvLyBvdGhlclxuICAnQUREJyxcbiAgJ0FGVEVSJyxcbiAgJ0FMVEVSIENPTFVNTicsXG4gICdJTlNFUlQgSU5UTycsIC8vIHZlcmlmeVxuICAnU0VUIFNDSEVNQScsIC8vIHZlcmlmeVxuICAnRlJPTScsXG4gICdHUk9VUCBCWScsXG4gICdIQVZJTkcnLFxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1dIRVJFJyxcbiAgJ1dJVEgnLFxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAnTUlOVVMnLFxuICAnTUlOVVMgQUxMJyxcbiAgJ01JTlVTIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdGVUxMIEpPSU4nLFxuICAnRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ0NST1NTIEpPSU4nLFxuICAnTkFUVVJBTCBKT0lOJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgM1xuICoga2V5d29yZHMgdGhhdCBmb2xsb3cgYSBwcmV2aW91cyBTdGF0ZW1lbnQsIG11c3QgYmUgYXR0YWNoZWQgdG8gc3Vic2VxdWVudCBkYXRhXG4gKiBjYW4gYmUgZnVsbHkgaW5saW5lIG9yIG9uIG5ld2xpbmUgd2l0aCBvcHRpb25hbCBpbmRlbnRcbiAqL1xuY29uc3QgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gWydXSEVOJywgJ0VMU0UnXTtcblxuY29uc3QgYmluYXJ5T3BlcmF0b3JzID0gW1xuICAnPDwnLFxuICAnPj4nLFxuICAnfHwvJyxcbiAgJ3wvJyxcbiAgJzo6JyxcbiAgJzo9JyxcbiAgJy0+PicsXG4gICctPicsXG4gICc9PicsXG4gICd+fionLFxuICAnfn4nLFxuICAnIX5+KicsXG4gICchfn4nLFxuICAnfionLFxuICAnIX4qJyxcbiAgJyF+JyxcbiAgJyEhJyxcbiAgJ3x8JyxcbiAgJ0AtQCcsXG4gICdAQCcsXG4gICcjIycsXG4gICc8LT4nLFxuICAnJiYnLFxuICAnJjwnLFxuICAnJj4nLFxuICAnPDx8JyxcbiAgJyY8fCcsXG4gICd8Pj4nLFxuICAnfCY+JyxcbiAgJzxeJyxcbiAgJ14+JyxcbiAgJz8jJyxcbiAgJz8tJyxcbiAgJz98JyxcbiAgJz8tfCcsXG4gICc/fHwnLFxuICAnQD4nLFxuICAnPEAnLFxuICAnfj0nLFxuICAnPj49JyxcbiAgJzw8PScsXG4gICdAQEAnLFxuXTtcblxuLy8gaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy8xNC9pbmRleC5odG1sXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb3N0Z3JlU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5yZXNlcnZlZEtleXdvcmRzLFxuICBdKTtcbiAgc3RhdGljIHN0cmluZ1R5cGVzOiBTdHJpbmdQYXR0ZXJuVHlwZVtdID0gW2BcIlwiYCwgXCInJ1wiLCBcIlUmJydcIiwgJ1UmXCJcIicsICckJCcsICdgYCcsIFwiRScnXCJdO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyckJ107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJzonXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBiaW5hcnlPcGVyYXRvcnM7XG5cbiAgdG9rZW5pemVyKCkge1xuICAgIHJldHVybiBuZXcgVG9rZW5pemVyKHtcbiAgICAgIHJlc2VydmVkQ29tbWFuZHM6IFBvc3RncmVTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkQmluYXJ5Q29tbWFuZHM6IFBvc3RncmVTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogUG9zdGdyZVNxbEZvcm1hdHRlci5yZXNlcnZlZERlcGVuZGVudENsYXVzZXMsXG4gICAgICByZXNlcnZlZEpvaW5Db25kaXRpb25zOiBQb3N0Z3JlU3FsRm9ybWF0dGVyLnJlc2VydmVkSm9pbkNvbmRpdGlvbnMsXG4gICAgICByZXNlcnZlZExvZ2ljYWxPcGVyYXRvcnM6IFBvc3RncmVTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogUG9zdGdyZVNxbEZvcm1hdHRlci5yZXNlcnZlZEtleXdvcmRzLFxuICAgICAgc3RyaW5nVHlwZXM6IFBvc3RncmVTcWxGb3JtYXR0ZXIuc3RyaW5nVHlwZXMsXG4gICAgICBibG9ja1N0YXJ0OiBQb3N0Z3JlU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogUG9zdGdyZVNxbEZvcm1hdHRlci5ibG9ja0VuZCxcbiAgICAgIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzOiBQb3N0Z3JlU3FsRm9ybWF0dGVyLmluZGV4ZWRQbGFjZWhvbGRlclR5cGVzLFxuICAgICAgbmFtZWRQbGFjZWhvbGRlclR5cGVzOiBQb3N0Z3JlU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFBvc3RncmVTcWxGb3JtYXR0ZXIubGluZUNvbW1lbnRUeXBlcyxcbiAgICAgIG9wZXJhdG9yczogUG9zdGdyZVNxbEZvcm1hdHRlci5vcGVyYXRvcnMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbmNvbnN0IHJlc2VydmVkRnVuY3Rpb25zID0ge1xuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfQWdncmVnYXRlX0Z1bmN0aW9ucy5odG1sXG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBTllfVkFMVUUnLFxuICAgICdBUFBST1hJTUFURSBQRVJDRU5USUxFX0RJU0MnLFxuICAgICdBVkcnLFxuICAgICdDT1VOVCcsXG4gICAgJ0xJU1RBR0cnLFxuICAgICdNQVgnLFxuICAgICdNRURJQU4nLFxuICAgICdNSU4nLFxuICAgICdQRVJDRU5USUxFX0NPTlQnLFxuICAgICdTVERERVZfU0FNUCcsXG4gICAgJ1NURERFVl9QT1AnLFxuICAgICdTVU0nLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1ZBUl9QT1AnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfQXJyYXlfRnVuY3Rpb25zLmh0bWxcbiAgYXJyYXk6IFtcbiAgICAnYXJyYXknLFxuICAgICdhcnJheV9jb25jYXQnLFxuICAgICdhcnJheV9mbGF0dGVuJyxcbiAgICAnZ2V0X2FycmF5X2xlbmd0aCcsXG4gICAgJ3NwbGl0X3RvX2FycmF5JyxcbiAgICAnc3ViYXJyYXknLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfYml0d2lzZV9hZ2dyZWdhdGVfZnVuY3Rpb25zLmh0bWxcbiAgYml0d2lzZTogWydCSVRfQU5EJywgJ0JJVF9PUicsICdCT09MX0FORCcsICdCT09MX09SJ10sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY19jb25kaXRpb25hbF9leHByZXNzaW9ucy5odG1sXG4gIGNvbmRpdGlvbmFsOiBbJ0NBU0UnLCAnQ09BTEVTQ0UnLCAnREVDT0RFJywgJ0dSRUFURVNUJywgJ0xFQVNUJywgJ05WTCcsICdOVkwyJywgJ05VTExJRiddLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL0RhdGVfZnVuY3Rpb25zX2hlYWRlci5odG1sXG4gIGRhdGVUaW1lOiBbXG4gICAgJ0FERF9NT05USFMnLFxuICAgICdBVCBUSU1FIFpPTkUnLFxuICAgICdDT05WRVJUX1RJTUVaT05FJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdEQVRFX0NNUCcsXG4gICAgJ0RBVEVfQ01QX1RJTUVTVEFNUCcsXG4gICAgJ0RBVEVfQ01QX1RJTUVTVEFNUFRaJyxcbiAgICAnREFURV9QQVJUX1lFQVInLFxuICAgICdEQVRFQUREJyxcbiAgICAnREFURURJRkYnLFxuICAgICdEQVRFX1BBUlQnLFxuICAgICdEQVRFX1RSVU5DJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ0dFVERBVEUnLFxuICAgICdJTlRFUlZBTF9DTVAnLFxuICAgICdMQVNUX0RBWScsXG4gICAgJ01PTlRIU19CRVRXRUVOJyxcbiAgICAnTkVYVF9EQVknLFxuICAgICdTWVNEQVRFJyxcbiAgICAnVElNRU9GREFZJyxcbiAgICAnVElNRVNUQU1QX0NNUCcsXG4gICAgJ1RJTUVTVEFNUF9DTVBfREFURScsXG4gICAgJ1RJTUVTVEFNUF9DTVBfVElNRVNUQU1QVFonLFxuICAgICdUSU1FU1RBTVBUWl9DTVAnLFxuICAgICdUSU1FU1RBTVBUWl9DTVBfREFURScsXG4gICAgJ1RJTUVTVEFNUFRaX0NNUF9USU1FU1RBTVAnLFxuICAgICdUSU1FWk9ORScsXG4gICAgJ1RPX1RJTUVTVEFNUCcsXG4gICAgJ1RSVU5DJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9nZW9zcGF0aWFsLWZ1bmN0aW9ucy5odG1sXG4gIHNwYXRpYWw6IFtcbiAgICAnQWRkQkJveCcsXG4gICAgJ0Ryb3BCQm94JyxcbiAgICAnR2VvbWV0cnlUeXBlJyxcbiAgICAnU1RfQWRkUG9pbnQnLFxuICAgICdTVF9BbmdsZScsXG4gICAgJ1NUX0FyZWEnLFxuICAgICdTVF9Bc0JpbmFyeScsXG4gICAgJ1NUX0FzRVdLQicsXG4gICAgJ1NUX0FzRVdLVCcsXG4gICAgJ1NUX0FzR2VvSlNPTicsXG4gICAgJ1NUX0FzVGV4dCcsXG4gICAgJ1NUX0F6aW11dGgnLFxuICAgICdTVF9Cb3VuZGFyeScsXG4gICAgJ1NUX0NvbGxlY3QnLFxuICAgICdTVF9Db250YWlucycsXG4gICAgJ1NUX0NvbnRhaW5zUHJvcGVybHknLFxuICAgICdTVF9Db252ZXhIdWxsJyxcbiAgICAnU1RfQ292ZXJlZEJ5JyxcbiAgICAnU1RfQ292ZXJzJyxcbiAgICAnU1RfQ3Jvc3NlcycsXG4gICAgJ1NUX0RpbWVuc2lvbicsXG4gICAgJ1NUX0Rpc2pvaW50JyxcbiAgICAnU1RfRGlzdGFuY2UnLFxuICAgICdTVF9EaXN0YW5jZVNwaGVyZScsXG4gICAgJ1NUX0RXaXRoaW4nLFxuICAgICdTVF9FbmRQb2ludCcsXG4gICAgJ1NUX0VudmVsb3BlJyxcbiAgICAnU1RfRXF1YWxzJyxcbiAgICAnU1RfRXh0ZXJpb3JSaW5nJyxcbiAgICAnU1RfRm9yY2UyRCcsXG4gICAgJ1NUX0ZvcmNlM0QnLFxuICAgICdTVF9Gb3JjZTNETScsXG4gICAgJ1NUX0ZvcmNlM0RaJyxcbiAgICAnU1RfRm9yY2U0RCcsXG4gICAgJ1NUX0dlb21ldHJ5TicsXG4gICAgJ1NUX0dlb21ldHJ5VHlwZScsXG4gICAgJ1NUX0dlb21Gcm9tRVdLQicsXG4gICAgJ1NUX0dlb21Gcm9tRVdLVCcsXG4gICAgJ1NUX0dlb21Gcm9tVGV4dCcsXG4gICAgJ1NUX0dlb21Gcm9tV0tCJyxcbiAgICAnU1RfSW50ZXJpb3JSaW5nTicsXG4gICAgJ1NUX0ludGVyc2VjdHMnLFxuICAgICdTVF9Jc1BvbHlnb25DQ1cnLFxuICAgICdTVF9Jc1BvbHlnb25DVycsXG4gICAgJ1NUX0lzQ2xvc2VkJyxcbiAgICAnU1RfSXNDb2xsZWN0aW9uJyxcbiAgICAnU1RfSXNFbXB0eScsXG4gICAgJ1NUX0lzU2ltcGxlJyxcbiAgICAnU1RfSXNWYWxpZCcsXG4gICAgJ1NUX0xlbmd0aCcsXG4gICAgJ1NUX0xlbmd0aFNwaGVyZScsXG4gICAgJ1NUX0xlbmd0aDJEJyxcbiAgICAnU1RfTGluZUZyb21NdWx0aVBvaW50JyxcbiAgICAnU1RfTGluZUludGVycG9sYXRlUG9pbnQnLFxuICAgICdTVF9NJyxcbiAgICAnU1RfTWFrZUVudmVsb3BlJyxcbiAgICAnU1RfTWFrZUxpbmUnLFxuICAgICdTVF9NYWtlUG9pbnQnLFxuICAgICdTVF9NYWtlUG9seWdvbicsXG4gICAgJ1NUX01lbVNpemUnLFxuICAgICdTVF9NTWF4JyxcbiAgICAnU1RfTU1pbicsXG4gICAgJ1NUX011bHRpJyxcbiAgICAnU1RfTkRpbXMnLFxuICAgICdTVF9OUG9pbnRzJyxcbiAgICAnU1RfTlJpbmdzJyxcbiAgICAnU1RfTnVtR2VvbWV0cmllcycsXG4gICAgJ1NUX051bUludGVyaW9yUmluZ3MnLFxuICAgICdTVF9OdW1Qb2ludHMnLFxuICAgICdTVF9QZXJpbWV0ZXInLFxuICAgICdTVF9QZXJpbWV0ZXIyRCcsXG4gICAgJ1NUX1BvaW50JyxcbiAgICAnU1RfUG9pbnROJyxcbiAgICAnU1RfUG9pbnRzJyxcbiAgICAnU1RfUG9seWdvbicsXG4gICAgJ1NUX1JlbW92ZVBvaW50JyxcbiAgICAnU1RfUmV2ZXJzZScsXG4gICAgJ1NUX1NldFBvaW50JyxcbiAgICAnU1RfU2V0U1JJRCcsXG4gICAgJ1NUX1NpbXBsaWZ5JyxcbiAgICAnU1RfU1JJRCcsXG4gICAgJ1NUX1N0YXJ0UG9pbnQnLFxuICAgICdTVF9Ub3VjaGVzJyxcbiAgICAnU1RfV2l0aGluJyxcbiAgICAnU1RfWCcsXG4gICAgJ1NUX1hNYXgnLFxuICAgICdTVF9YTWluJyxcbiAgICAnU1RfWScsXG4gICAgJ1NUX1lNYXgnLFxuICAgICdTVF9ZTWluJyxcbiAgICAnU1RfWicsXG4gICAgJ1NUX1pNYXgnLFxuICAgICdTVF9aTWluJyxcbiAgICAnU3VwcG9ydHNCQm94JyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9oYXNoLWZ1bmN0aW9ucy5odG1sXG4gIGhhc2g6IFsnQ0hFQ0tTVU0nLCAnRlVOQ19TSEExJywgJ0ZOVl9IQVNIJywgJ01ENScsICdTSEEnLCAnU0hBMScsICdTSEEyJ10sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvaHlwZXJsb2dsb2ctZnVuY3Rpb25zLmh0bWxcbiAgaHlwZXJMb2dMb2c6IFsnSExMJywgJ0hMTF9DUkVBVEVfU0tFVENIJywgJ0hMTF9DQVJESU5BTElUWScsICdITExfQ09NQklORSddLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2pzb24tZnVuY3Rpb25zLmh0bWxcbiAganNvbjogW1xuICAgICdJU19WQUxJRF9KU09OJyxcbiAgICAnSVNfVkFMSURfSlNPTl9BUlJBWScsXG4gICAgJ0pTT05fQVJSQVlfTEVOR1RIJyxcbiAgICAnSlNPTl9FWFRSQUNUX0FSUkFZX0VMRU1FTlRfVEVYVCcsXG4gICAgJ0pTT05fRVhUUkFDVF9QQVRIX1RFWFQnLFxuICAgICdKU09OX1BBUlNFJyxcbiAgICAnSlNPTl9TRVJJQUxJWkUnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL01hdGhfZnVuY3Rpb25zLmh0bWxcbiAgbWF0aDogW1xuICAgICdBQlMnLFxuICAgICdBQ09TJyxcbiAgICAnQVNJTicsXG4gICAgJ0FUQU4nLFxuICAgICdBVEFOMicsXG4gICAgJ0NCUlQnLFxuICAgICdDRUlMSU5HJyxcbiAgICAnQ0VJTCcsXG4gICAgJ0NPUycsXG4gICAgJ0NPVCcsXG4gICAgJ0RFR1JFRVMnLFxuICAgICdERVhQJyxcbiAgICAnRExPRzEnLFxuICAgICdETE9HMTAnLFxuICAgICdFWFAnLFxuICAgICdGTE9PUicsXG4gICAgJ0xOJyxcbiAgICAnTE9HJyxcbiAgICAnTU9EJyxcbiAgICAnUEknLFxuICAgICdQT1dFUicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQU5ET00nLFxuICAgICdST1VORCcsXG4gICAgJ1NJTicsXG4gICAgJ1NJR04nLFxuICAgICdTUVJUJyxcbiAgICAnVEFOJyxcbiAgICAnVE9fSEVYJyxcbiAgICAnVFJVTkMnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL21sLWZ1bmN0aW9uLmh0bWxcbiAgbWFjaGluZUxlYXJuaW5nOiBbJ0VYUExBSU5fTU9ERUwnXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9TdHJpbmdfZnVuY3Rpb25zX2hlYWRlci5odG1sXG4gIHN0cmluZzogW1xuICAgICdBU0NJSScsXG4gICAgJ0JQQ0hBUkNNUCcsXG4gICAgJ0JUUklNJyxcbiAgICAnQlRURVhUX1BBVFRFUk5fQ01QJyxcbiAgICAnQ0hBUl9MRU5HVEgnLFxuICAgICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgICAnQ0hBUklOREVYJyxcbiAgICAnQ0hSJyxcbiAgICAnQ09MTEFURScsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NSQzMyJyxcbiAgICAnRElGRkVSRU5DRScsXG4gICAgJ0lOSVRDQVAnLFxuICAgICdMRUZUJyxcbiAgICAnUklHSFQnLFxuICAgICdMRU4nLFxuICAgICdMRU5HVEgnLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdSUEFEJyxcbiAgICAnTFRSSU0nLFxuICAgICdPQ1RFVElOREVYJyxcbiAgICAnT0NURVRfTEVOR1RIJyxcbiAgICAnUE9TSVRJT04nLFxuICAgICdRVU9URV9JREVOVCcsXG4gICAgJ1FVT1RFX0xJVEVSQUwnLFxuICAgICdSRUdFWFBfQ09VTlQnLFxuICAgICdSRUdFWFBfSU5TVFInLFxuICAgICdSRUdFWFBfUkVQTEFDRScsXG4gICAgJ1JFR0VYUF9TVUJTVFInLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUkVQTElDQVRFJyxcbiAgICAnUkVWRVJTRScsXG4gICAgJ1JUUklNJyxcbiAgICAnU09VTkRFWCcsXG4gICAgJ1NQTElUX1BBUlQnLFxuICAgICdTVFJQT1MnLFxuICAgICdTVFJUT0wnLFxuICAgICdTVUJTVFJJTkcnLFxuICAgICdURVhUTEVOJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VQUEVSJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9jX1R5cGVfSW5mb19GdW5jdGlvbnMuaHRtbFxuICBzdXBlclR5cGU6IFtcbiAgICAnZGVjaW1hbF9wcmVjaXNpb24nLFxuICAgICdkZWNpbWFsX3NjYWxlJyxcbiAgICAnaXNfYXJyYXknLFxuICAgICdpc19iaWdpbnQnLFxuICAgICdpc19ib29sZWFuJyxcbiAgICAnaXNfY2hhcicsXG4gICAgJ2lzX2RlY2ltYWwnLFxuICAgICdpc19mbG9hdCcsXG4gICAgJ2lzX2ludGVnZXInLFxuICAgICdpc19vYmplY3QnLFxuICAgICdpc19zY2FsYXInLFxuICAgICdpc19zbWFsbGludCcsXG4gICAgJ2lzX3ZhcmNoYXInLFxuICAgICdqc29uX3R5cGVvZicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY19XaW5kb3dfZnVuY3Rpb25zLmh0bWxcbiAgd2luZG93OiBbXG4gICAgJ0FWRycsXG4gICAgJ0NPVU5UJyxcbiAgICAnQ1VNRV9ESVNUJyxcbiAgICAnREVOU0VfUkFOSycsXG4gICAgJ0ZJUlNUX1ZBTFVFJyxcbiAgICAnTEFTVF9WQUxVRScsXG4gICAgJ0xBRycsXG4gICAgJ0xFQUQnLFxuICAgICdMSVNUQUdHJyxcbiAgICAnTUFYJyxcbiAgICAnTUVESUFOJyxcbiAgICAnTUlOJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTlRJTEUnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdQRVJDRU5USUxFX0NPTlQnLFxuICAgICdQRVJDRU5USUxFX0RJU0MnLFxuICAgICdSQU5LJyxcbiAgICAnUkFUSU9fVE9fUkVQT1JUJyxcbiAgICAnUk9XX05VTUJFUicsXG4gICAgJ1NURERFVl9TQU1QJyxcbiAgICAnU1REREVWX1BPUCcsXG4gICAgJ1NVTScsXG4gICAgJ1ZBUl9TQU1QJyxcbiAgICAnVkFSX1BPUCcsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvcl9EYXRhX3R5cGVfZm9ybWF0dGluZy5odG1sXG4gIGRhdGFUeXBlOiBbXG4gICAgJ0NBU1QnLFxuICAgICdDT05WRVJUJyxcbiAgICAnVE9fQ0hBUicsXG4gICAgJ1RPX0RBVEUnLFxuICAgICdUT19OVU1CRVInLFxuICAgICdURVhUX1RPX0lOVF9BTFQnLFxuICAgICdURVhUX1RPX05VTUVSSUNfQUxUJyxcbiAgXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX1N5c3RlbV9hZG1pbmlzdHJhdGlvbl9mdW5jdGlvbnMuaHRtbFxuICBzeXNBZG1pbjogW1xuICAgICdDSEFOR0VfUVVFUllfUFJJT1JJVFknLFxuICAgICdDSEFOR0VfU0VTU0lPTl9QUklPUklUWScsXG4gICAgJ0NIQU5HRV9VU0VSX1BSSU9SSVRZJyxcbiAgICAnQ1VSUkVOVF9TRVRUSU5HJyxcbiAgICAnUEdfQ0FOQ0VMX0JBQ0tFTkQnLFxuICAgICdQR19URVJNSU5BVEVfQkFDS0VORCcsXG4gICAgJ1JFQk9PVF9DTFVTVEVSJyxcbiAgICAnU0VUX0NPTkZJRycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvcl9TeXN0ZW1faW5mb3JtYXRpb25fZnVuY3Rpb25zLmh0bWxcbiAgc3lzSW5mbzogW1xuICAgICdDVVJSRU5UX0FXU19BQ0NPVU5UJyxcbiAgICAnQ1VSUkVOVF9EQVRBQkFTRScsXG4gICAgJ0NVUlJFTlRfTkFNRVNQQUNFJyxcbiAgICAnQ1VSUkVOVF9TQ0hFTUEnLFxuICAgICdDVVJSRU5UX1NDSEVNQVMnLFxuICAgICdDVVJSRU5UX1VTRVInLFxuICAgICdDVVJSRU5UX1VTRVJfSUQnLFxuICAgICdIQVNfQVNTVU1FUk9MRV9QUklWSUxFR0UnLFxuICAgICdIQVNfREFUQUJBU0VfUFJJVklMRUdFJyxcbiAgICAnSEFTX1NDSEVNQV9QUklWSUxFR0UnLFxuICAgICdIQVNfVEFCTEVfUFJJVklMRUdFJyxcbiAgICAnUEdfQkFDS0VORF9QSUQnLFxuICAgICdQR19HRVRfQ09MUycsXG4gICAgJ1BHX0dFVF9HUkFOVEVFX0JZX0lBTV9ST0xFJyxcbiAgICAnUEdfR0VUX0lBTV9ST0xFX0JZX1VTRVInLFxuICAgICdQR19HRVRfTEFURV9CSU5ESU5HX1ZJRVdfQ09MUycsXG4gICAgJ1BHX0xBU1RfQ09QWV9DT1VOVCcsXG4gICAgJ1BHX0xBU1RfQ09QWV9JRCcsXG4gICAgJ1BHX0xBU1RfVU5MT0FEX0lEJyxcbiAgICAnUEdfTEFTVF9RVUVSWV9JRCcsXG4gICAgJ1BHX0xBU1RfVU5MT0FEX0NPVU5UJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0xJQ0VfTlVNJyxcbiAgICAnVVNFUicsXG4gICAgJ1ZFUlNJT04nLFxuICBdLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIHdvcmRzXG4gKiBhbnkgd29yZHMgdGhhdCBhcmUgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYXJlIHJlbW92ZWRcbiAqL1xuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IHtcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX3BnX2tleXdvcmRzLmh0bWxcbiAgc3RhbmRhcmQ6IFtcbiAgICAnQUVTMTI4JyxcbiAgICAnQUVTMjU2JyxcbiAgICAnQUxMJyxcbiAgICAnQUxMT1dPVkVSV1JJVEUnLFxuICAgICdBTlknLFxuICAgICdBUlJBWScsXG4gICAgJ0FTJyxcbiAgICAnQVNDJyxcbiAgICAnQVVUSE9SSVpBVElPTicsXG4gICAgJ0JBQ0tVUCcsXG4gICAgJ0JFVFdFRU4nLFxuICAgICdCSU5BUlknLFxuICAgICdCT1RIJyxcbiAgICAnQ0hFQ0snLFxuICAgICdDT0xVTU4nLFxuICAgICdDT05TVFJBSU5UJyxcbiAgICAnQ1JFQVRFJyxcbiAgICAnQ1JPU1MnLFxuICAgICdERUZBVUxUJyxcbiAgICAnREVGRVJSQUJMRScsXG4gICAgJ0RFRkxBVEUnLFxuICAgICdERUZSQUcnLFxuICAgICdERVNDJyxcbiAgICAnRElTQUJMRScsXG4gICAgJ0RJU1RJTkNUJyxcbiAgICAnRE8nLFxuICAgICdFTkFCTEUnLFxuICAgICdFTkNPREUnLFxuICAgICdFTkNSWVBUJyxcbiAgICAnRU5DUllQVElPTicsXG4gICAgJ0VYUExJQ0lUJyxcbiAgICAnRkFMU0UnLFxuICAgICdGT1InLFxuICAgICdGT1JFSUdOJyxcbiAgICAnRlJFRVpFJyxcbiAgICAnRlJPTScsXG4gICAgJ0ZVTEwnLFxuICAgICdHTE9CQUxESUNUMjU2JyxcbiAgICAnR0xPQkFMRElDVDY0SycsXG4gICAgJ0dST1VQJyxcbiAgICAnSURFTlRJVFknLFxuICAgICdJR05PUkUnLFxuICAgICdJTElLRScsXG4gICAgJ0lOJyxcbiAgICAnSU5JVElBTExZJyxcbiAgICAnSU5ORVInLFxuICAgICdJTlRPJyxcbiAgICAnSVMnLFxuICAgICdJU05VTEwnLFxuICAgICdMQU5HVUFHRScsXG4gICAgJ0xFQURJTkcnLFxuICAgICdMSUtFJyxcbiAgICAnTElNSVQnLFxuICAgICdMT0NBTFRJTUUnLFxuICAgICdMT0NBTFRJTUVTVEFNUCcsXG4gICAgJ0xVTicsXG4gICAgJ0xVTlMnLFxuICAgICdNSU5VUycsXG4gICAgJ05BVFVSQUwnLFxuICAgICdORVcnLFxuICAgICdOT1QnLFxuICAgICdOT1ROVUxMJyxcbiAgICAnTlVMTCcsXG4gICAgJ05VTExTJyxcbiAgICAnT0ZGJyxcbiAgICAnT0ZGTElORScsXG4gICAgJ09GRlNFVCcsXG4gICAgJ09JRCcsXG4gICAgJ09MRCcsXG4gICAgJ09OTFknLFxuICAgICdPUEVOJyxcbiAgICAnT1JERVInLFxuICAgICdPVVRFUicsXG4gICAgJ09WRVJMQVBTJyxcbiAgICAnUEFSQUxMRUwnLFxuICAgICdQQVJUSVRJT04nLFxuICAgICdQRVJDRU5UJyxcbiAgICAnUEVSTUlTU0lPTlMnLFxuICAgICdQTEFDSU5HJyxcbiAgICAnUFJJTUFSWScsXG4gICAgJ1JFQ09WRVInLFxuICAgICdSRUZFUkVOQ0VTJyxcbiAgICAnUkVKRUNUTE9HJyxcbiAgICAnUkVTT1JUJyxcbiAgICAnUkVTUEVDVCcsXG4gICAgJ1JFU1RPUkUnLFxuICAgICdTSU1JTEFSJyxcbiAgICAnU05BUFNIT1QnLFxuICAgICdTT01FJyxcbiAgICAnU1lTVEVNJyxcbiAgICAnVEFCTEUnLFxuICAgICdUQUcnLFxuICAgICdUREVTJyxcbiAgICAnVEhFTicsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RPJyxcbiAgICAnVE9QJyxcbiAgICAnVFJBSUxJTkcnLFxuICAgICdUUlVFJyxcbiAgICAnVU5JUVVFJyxcbiAgICAnVkVSQk9TRScsXG4gICAgJ1dBTExFVCcsXG4gICAgJ1dJVEhPVVQnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NvcHktcGFyYW1ldGVycy1kYXRhLWNvbnZlcnNpb24uaHRtbFxuICBkYXRhQ29udmVyc2lvblBhcmFtczogW1xuICAgICdBQ0NFUFRBTllEQVRFJyxcbiAgICAnQUNDRVBUSU5WQ0hBUlMnLFxuICAgICdCTEFOS1NBU05VTEwnLFxuICAgICdEQVRFRk9STUFUJyxcbiAgICAnRU1QVFlBU05VTEwnLFxuICAgICdFTkNPRElORycsXG4gICAgJ0VTQ0FQRScsXG4gICAgJ0VYUExJQ0lUX0lEUycsXG4gICAgJ0ZJTExSRUNPUkQnLFxuICAgICdJR05PUkVCTEFOS0xJTkVTJyxcbiAgICAnSUdOT1JFSEVBREVSJyxcbiAgICAnTlVMTCBBUycsXG4gICAgJ1JFTU9WRVFVT1RFUycsXG4gICAgJ1JPVU5ERUMnLFxuICAgICdUSU1FRk9STUFUJyxcbiAgICAnVFJJTUJMQU5LUycsXG4gICAgJ1RSVU5DQVRFQ09MVU1OUycsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY29weS1wYXJhbWV0ZXJzLWRhdGEtbG9hZC5odG1sXG4gIGRhdGFMb2FkUGFyYW1zOiBbJ0NPTVBST1dTJywgJ0NPTVBVUERBVEUnLCAnTUFYRVJST1InLCAnTk9MT0FEJywgJ1NUQVRVUERBVEUnXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9jb3B5LXBhcmFtZXRlcnMtZGF0YS1mb3JtYXQuaHRtbFxuICBkYXRhRm9ybWF0UGFyYW1zOiBbXG4gICAgJ0ZPUk1BVCcsXG4gICAgJ0NTVicsXG4gICAgJ0RFTElNSVRFUicsXG4gICAgJ0ZJWEVEV0lEVEgnLFxuICAgICdTSEFQRUZJTEUnLFxuICAgICdBVlJPJyxcbiAgICAnSlNPTicsXG4gICAgJ1BBUlFVRVQnLFxuICAgICdPUkMnLFxuICBdLFxuICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NvcHktcGFyYW1ldGVycy1hdXRob3JpemF0aW9uLmh0bWxcbiAgY29weUF1dGhQYXJhbXM6IFtcbiAgICAnQUNDRVNTX0tFWV9JRCcsXG4gICAgJ0NSRURFTlRJQUxTJyxcbiAgICAnRU5DUllQVEVEJyxcbiAgICAnSUFNX1JPTEUnLFxuICAgICdNQVNURVJfU1lNTUVUUklDX0tFWScsXG4gICAgJ1NFQ1JFVF9BQ0NFU1NfS0VZJyxcbiAgICAnU0VTU0lPTl9UT0tFTicsXG4gIF0sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY29weS1wYXJhbWV0ZXJzLWZpbGUtY29tcHJlc3Npb24uaHRtbFxuICBjb3B5Q29tcHJlc3Npb25QYXJhbXM6IFsnQlpJUDInLCAnR1pJUCcsICdMWk9QJywgJ1pTVEQnXSxcbiAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX0NPUFktYWxwaGFiZXRpY2FsLXBhcm0tbGlzdC5odG1sXG4gIGNvcHlNaXNjUGFyYW1zOiBbJ01BTklGRVNUJywgJ1JFQURSQVRJTycsICdSRUdJT04nLCAnU1NIJ10sXG4gIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY19Db21wcmVzc2lvbl9lbmNvZGluZ3MuaHRtbFxuICBjb21wcmVzc2lvbkVuY29kaW5nczogW1xuICAgICdSQVcnLFxuICAgICdBWjY0JyxcbiAgICAnQllURURJQ1QnLFxuICAgICdERUxUQScsXG4gICAgJ0RFTFRBMzJLJyxcbiAgICAnTFpPJyxcbiAgICAnTU9TVExZOCcsXG4gICAgJ01PU1RMWTE2JyxcbiAgICAnTU9TVExZMzInLFxuICAgICdSVU5MRU5HVEgnLFxuICAgICdURVhUMjU1JyxcbiAgICAnVEVYVDMySycsXG4gIF0sXG4gIG1pc2M6IFtcbiAgICAvLyBDUkVBVEUgRVhURVJOQUwgU0NIRU1BIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL3JfQ1JFQVRFX0VYVEVSTkFMX1NDSEVNQS5odG1sKVxuICAgICdDQVRBTE9HX1JPTEUnLFxuICAgICdTRUNSRVRfQVJOJyxcbiAgICAnRVhURVJOQUwnLFxuICAgICdISVZFIE1FVEFTVE9SRScsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvYy1zcGVjdHJ1bS1leHRlcm5hbC1zY2hlbWFzLmh0bWxcbiAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfY2hvb3NpbmdfZGlzdF9zb3J0Lmh0bWxcbiAgICAnQVVUTycsXG4gICAgJ0VWRU4nLFxuICAgICdLRVknLFxuICAgICdQUkVESUNBVEUnLCAvLyBBTkFMWVpFIHwgQU5BTFlTRSAoaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX0FOQUxZWkUuaHRtbClcbiAgICAvLyB1bmtub3duXG4gICAgJ0NPTVBSRVNTSU9OJyxcbiAgICAnREFUQSBDQVRBTE9HJyxcbiAgXSxcbiAgLyoqXG4gICAqIE90aGVyIGtleXdvcmRzIG5vdCBpbmNsdWRlZDpcbiAgICogU1RMOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfaW50cm9fU1RMX3RhYmxlcy5odG1sXG4gICAqIFNWQ1M6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvc3Zjc192aWV3cy5odG1sXG4gICAqIFNWTDogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9zdmxfdmlld3MuaHRtbFxuICAgKiBTVlY6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvc3Z2X3ZpZXdzLmh0bWxcbiAgICovXG4gIGRhdGFUeXBlczogW1xuICAgICdDSEFSJyxcbiAgICAnQ0hBUkFDVEVSJyxcbiAgICAnTkNIQVInLFxuICAgICdWQVJDSEFSJyxcbiAgICAnQ0hBUkFDVEVSIFZBUllJTkcnLFxuICAgICdOVkFSQ0hBUicsXG4gICAgJ0JQQ0hBUicsXG4gICAgJ1RFWFQnLFxuICBdLFxufTtcblxuLyoqXG4gKiBQcmlvcml0eSAxIChmaXJzdClcbiAqIGtleXdvcmRzIHRoYXQgYmVnaW4gYSBuZXcgc3RhdGVtZW50XG4gKiB3aWxsIGJlZ2luIG5ldyBpbmRlbnRlZCBibG9ja1xuICovXG4vLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vcmVkc2hpZnQvbGF0ZXN0L2RnL2NfU1FMX2NvbW1hbmRzLmh0bWxcbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gICdBQk9SVCcsXG4gICdBTFRFUiBEQVRBQkFTRScsXG4gICdBTFRFUiBEQVRBU0hBUkUnLFxuICAnQUxURVIgREVGQVVMVCBQUklWSUxFR0VTJyxcbiAgJ0FMVEVSIEdST1VQJyxcbiAgJ0FMVEVSIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ0FMVEVSIFBST0NFRFVSRScsXG4gICdBTFRFUiBTQ0hFTUEnLFxuICAnQUxURVIgVEFCTEUnLFxuICAnQUxURVIgVEFCTEUgQVBQRU5EJyxcbiAgJ0FMVEVSIFVTRVInLFxuICAnQU5BTFlTRScsXG4gICdBTkFMWVpFJyxcbiAgJ0FOQUxZU0UgQ09NUFJFU1NJT04nLFxuICAnQU5BTFlaRSBDT01QUkVTU0lPTicsXG4gICdCRUdJTicsXG4gICdDQUxMJyxcbiAgJ0NBTkNFTCcsXG4gICdDTE9TRScsXG4gICdDT01NRU5UJyxcbiAgJ0NPTU1JVCcsXG4gICdDT1BZJyxcbiAgJ0NSRUFURSBEQVRBQkFTRScsXG4gICdDUkVBVEUgREFUQVNIQVJFJyxcbiAgJ0NSRUFURSBFWFRFUk5BTCBGVU5DVElPTicsXG4gICdDUkVBVEUgRVhURVJOQUwgU0NIRU1BJyxcbiAgJ0NSRUFURSBFWFRFUk5BTCBUQUJMRScsXG4gICdDUkVBVEUgRlVOQ1RJT04nLFxuICAnQ1JFQVRFIEdST1VQJyxcbiAgJ0NSRUFURSBMSUJSQVJZJyxcbiAgJ0NSRUFURSBNQVRFUklBTElaRUQgVklFVycsXG4gICdDUkVBVEUgTU9ERUwnLFxuICAnQ1JFQVRFIFBST0NFRFVSRScsXG4gICdDUkVBVEUgU0NIRU1BJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdDUkVBVEUgVEFCTEUgQVMnLFxuICAnQ1JFQVRFIFVTRVInLFxuICAnQ1JFQVRFIFZJRVcnLFxuICAnREVBTExPQ0FURScsXG4gICdERUNMQVJFJyxcbiAgJ0RFTEVURScsXG4gICdERVNDIERBVEFTSEFSRScsXG4gICdEUk9QIERBVEFCQVNFJyxcbiAgJ0RST1AgREFUQVNIQVJFJyxcbiAgJ0RST1AgRlVOQ1RJT04nLFxuICAnRFJPUCBHUk9VUCcsXG4gICdEUk9QIExJQlJBUlknLFxuICAnRFJPUCBNT0RFTCcsXG4gICdEUk9QIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ0RST1AgUFJPQ0VEVVJFJyxcbiAgJ0RST1AgU0NIRU1BJyxcbiAgJ0RST1AgVEFCTEUnLFxuICAnRFJPUCBVU0VSJyxcbiAgJ0RST1AgVklFVycsXG4gICdEUk9QJyxcbiAgJ0VORCcsXG4gICdFWEVDVVRFJyxcbiAgJ0VYUExBSU4nLFxuICAnRkVUQ0gnLFxuICAnRlJPTScsXG4gICdHUkFOVCcsXG4gICdIQVZJTkcnLFxuICAnSU5TRVJUJyxcbiAgJ0xPQ0snLFxuICAnUFJFUEFSRScsXG4gICdSRUZSRVNIIE1BVEVSSUFMSVpFRCBWSUVXJyxcbiAgJ1JFU0VUJyxcbiAgJ1JFVk9LRScsXG4gICdST0xMQkFDSycsXG4gICdTRUxFQ1QnLFxuICAnU0VMRUNUIElOVE8nLFxuICAnU0VUJyxcbiAgJ1NFVCBTRVNTSU9OIEFVVEhPUklaQVRJT04nLFxuICAnU0VUIFNFU1NJT04gQ0hBUkFDVEVSSVNUSUNTJyxcbiAgJ1NIT1cnLFxuICAnU0hPVyBFWFRFUk5BTCBUQUJMRScsXG4gICdTSE9XIE1PREVMJyxcbiAgJ1NIT1cgREFUQVNIQVJFUycsXG4gICdTSE9XIFBST0NFRFVSRScsXG4gICdTSE9XIFRBQkxFJyxcbiAgJ1NIT1cgVklFVycsXG4gICdTVEFSVCBUUkFOU0FDVElPTicsXG4gICdUUlVOQ0FURScsXG4gICdVTkxPQUQnLFxuICAnVVBEQVRFJyxcbiAgJ1ZBQ1VVTScsXG4gICdXSEVSRScsXG4gICdXSVRIJyxcbiAgLy8gb3RoZXJcbiAgJ0dST1VQIEJZJyxcbiAgJ09SREVSIEJZJyxcbiAgJ0xJTUlUJyxcbiAgJ09GRlNFVCcsXG4gICdWQUxVRVMnLFxuICAnTU9ESUZZJywgLy8gdmVyaWZ5XG4gICdJTlNFUlQgSU5UTycsIC8vIHZlcmlmeVxuICAnQUxURVIgQ09MVU1OJywgLy8gdmVyaWZ5XG4gICdTRVQgU0NIRU1BJywgLy8gdmVyaWZ5XG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9yZWRzaGlmdC9sYXRlc3QvZGcvY21fY2hhcF9TUUxDb21tYW5kUmVmLmh0bWxcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlZHNoaWZ0Rm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5PYmplY3QudmFsdWVzKHJlc2VydmVkS2V5d29yZHMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgXSk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiJydcIiwgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKSddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbJz8nXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnQCcsICcjJywgJyQnXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBbJ3wvJywgJ3x8LycsICc8PCcsICc+PicsICd8fCddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBSZWRzaGlmdEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogUmVkc2hpZnRGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBSZWRzaGlmdEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFJlZHNoaWZ0Rm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogUmVkc2hpZnRGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogUmVkc2hpZnRGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFJlZHNoaWZ0Rm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFJlZHNoaWZ0Rm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBvcGVyYXRvcnM6IFJlZHNoaWZ0Rm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IEZvcm1hdHRlciBmcm9tICcuLi9jb3JlL0Zvcm1hdHRlcic7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gJy4uL2NvcmUvVG9rZW5pemVyJztcbmltcG9ydCB7IGlzVG9rZW4sIFRva2VuLCBUb2tlblR5cGUgfSBmcm9tICcuLi9jb3JlL3Rva2VuJzsgLy8gY29udmVydCB0byBwYXJ0aWFsIHR5cGUgaW1wb3J0IGluIFRTIDQuNVxuaW1wb3J0IHR5cGUgeyBTdHJpbmdQYXR0ZXJuVHlwZSB9IGZyb20gJy4uL2NvcmUvcmVnZXhGYWN0b3J5JztcbmltcG9ydCB7IGRlZHVwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuLyoqXG4gKiBQcmlvcml0eSA1IChsYXN0KVxuICogRnVsbCBsaXN0IG9mIHJlc2VydmVkIGZ1bmN0aW9uc1xuICogZGlzdGluY3QgZnJvbSBLZXl3b3JkcyBkdWUgdG8gaW50ZXJhY3Rpb24gd2l0aCBwYXJlbnRoZXNlc1xuICovXG4vLyBodHRwOi8vc3BhcmsuYXBhY2hlLm9yZy9kb2NzL2xhdGVzdC9zcWwtcmVmLWZ1bmN0aW9ucy5odG1sXG5jb25zdCByZXNlcnZlZEZ1bmN0aW9ucyA9IHtcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI2FnZ3JlZ2F0ZS1mdW5jdGlvbnNcbiAgYWdncmVnYXRlOiBbXG4gICAgJ0FOWScsXG4gICAgJ0FQUFJPWF9DT1VOVF9ESVNUSU5DVCcsXG4gICAgJ0FQUFJPWF9QRVJDRU5USUxFJyxcbiAgICAnQVZHJyxcbiAgICAnQklUX0FORCcsXG4gICAgJ0JJVF9PUicsXG4gICAgJ0JJVF9YT1InLFxuICAgICdCT09MX0FORCcsXG4gICAgJ0JPT0xfT1InLFxuICAgICdDT0xMRUNUX0xJU1QnLFxuICAgICdDT0xMRUNUX1NFVCcsXG4gICAgJ0NPUlInLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVU5UJyxcbiAgICAnQ09VTlQnLFxuICAgICdDT1VOVF9JRicsXG4gICAgJ0NPVU5UX01JTl9TS0VUQ0gnLFxuICAgICdDT1ZBUl9QT1AnLFxuICAgICdDT1ZBUl9TQU1QJyxcbiAgICAnRVZFUlknLFxuICAgICdGSVJTVCcsXG4gICAgJ0ZJUlNUX1ZBTFVFJyxcbiAgICAnR1JPVVBJTkcnLFxuICAgICdHUk9VUElOR19JRCcsXG4gICAgJ0tVUlRPU0lTJyxcbiAgICAnTEFTVCcsXG4gICAgJ0xBU1RfVkFMVUUnLFxuICAgICdNQVgnLFxuICAgICdNQVhfQlknLFxuICAgICdNRUFOJyxcbiAgICAnTUlOJyxcbiAgICAnTUlOX0JZJyxcbiAgICAnUEVSQ0VOVElMRScsXG4gICAgJ1BFUkNFTlRJTEUnLFxuICAgICdQRVJDRU5USUxFX0FQUFJPWCcsXG4gICAgJ1NLRVdORVNTJyxcbiAgICAnU09NRScsXG4gICAgJ1NURCcsXG4gICAgJ1NURERFVicsXG4gICAgJ1NURERFVl9QT1AnLFxuICAgICdTVERERVZfU0FNUCcsXG4gICAgJ1NVTScsXG4gICAgJ1ZBUl9QT1AnLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1ZBUklBTkNFJyxcbiAgXSxcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI3dpbmRvdy1mdW5jdGlvbnNcbiAgd2luZG93OiBbXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0RFTlNFX1JBTksnLFxuICAgICdMQUcnLFxuICAgICdMRUFEJyxcbiAgICAnTlRIX1ZBTFVFJyxcbiAgICAnTlRJTEUnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdSQU5LJyxcbiAgICAnUk9XX05VTUJFUicsXG4gIF0sXG4gIC8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L3NxbC1yZWYtZnVuY3Rpb25zLWJ1aWx0aW4uaHRtbCNhcnJheS1mdW5jdGlvbnNcbiAgYXJyYXk6IFtcbiAgICAnQVJSQVknLFxuICAgICdBUlJBWV9DT05UQUlOUycsXG4gICAgJ0FSUkFZX0RJU1RJTkNUJyxcbiAgICAnQVJSQVlfRVhDRVBUJyxcbiAgICAnQVJSQVlfSU5URVJTRUNUJyxcbiAgICAnQVJSQVlfSk9JTicsXG4gICAgJ0FSUkFZX01BWCcsXG4gICAgJ0FSUkFZX01JTicsXG4gICAgJ0FSUkFZX1BPU0lUSU9OJyxcbiAgICAnQVJSQVlfUkVNT1ZFJyxcbiAgICAnQVJSQVlfUkVQRUFUJyxcbiAgICAnQVJSQVlfVU5JT04nLFxuICAgICdBUlJBWVNfT1ZFUkxBUCcsXG4gICAgJ0FSUkFZU19aSVAnLFxuICAgICdGTEFUVEVOJyxcbiAgICAnU0VRVUVOQ0UnLFxuICAgICdTSFVGRkxFJyxcbiAgICAnU0xJQ0UnLFxuICAgICdTT1JUX0FSUkFZJyxcbiAgXSxcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI21hcC1mdW5jdGlvbnNcbiAgbWFwOiBbXG4gICAgJ0VMRU1FTlRfQVQnLFxuICAgICdFTEVNRU5UX0FUJyxcbiAgICAnTUFQJyxcbiAgICAnTUFQX0NPTkNBVCcsXG4gICAgJ01BUF9FTlRSSUVTJyxcbiAgICAnTUFQX0ZST01fQVJSQVlTJyxcbiAgICAnTUFQX0ZST01fRU5UUklFUycsXG4gICAgJ01BUF9LRVlTJyxcbiAgICAnTUFQX1ZBTFVFUycsXG4gICAgJ1NUUl9UT19NQVAnLFxuICBdLFxuICAvLyBodHRwOi8vc3BhcmsuYXBhY2hlLm9yZy9kb2NzL2xhdGVzdC9zcWwtcmVmLWZ1bmN0aW9ucy1idWlsdGluLmh0bWwjZGF0ZS1hbmQtdGltZXN0YW1wLWZ1bmN0aW9uc1xuICBkYXRldGltZTogW1xuICAgICdBRERfTU9OVEhTJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9EQVRFJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0NVUlJFTlRfVElNRVpPTkUnLFxuICAgICdEQVRFX0FERCcsXG4gICAgJ0RBVEVfRk9STUFUJyxcbiAgICAnREFURV9GUk9NX1VOSVhfREFURScsXG4gICAgJ0RBVEVfUEFSVCcsXG4gICAgJ0RBVEVfU1VCJyxcbiAgICAnREFURV9UUlVOQycsXG4gICAgJ0RBVEVESUZGJyxcbiAgICAnREFZJyxcbiAgICAnREFZT0ZNT05USCcsXG4gICAgJ0RBWU9GV0VFSycsXG4gICAgJ0RBWU9GWUVBUicsXG4gICAgJ0VYVFJBQ1QnLFxuICAgICdGUk9NX1VOSVhUSU1FJyxcbiAgICAnRlJPTV9VVENfVElNRVNUQU1QJyxcbiAgICAnSE9VUicsXG4gICAgJ0xBU1RfREFZJyxcbiAgICAnTUFLRV9EQVRFJyxcbiAgICAnTUFLRV9EVF9JTlRFUlZBTCcsXG4gICAgJ01BS0VfSU5URVJWQUwnLFxuICAgICdNQUtFX1RJTUVTVEFNUCcsXG4gICAgJ01BS0VfWU1fSU5URVJWQUwnLFxuICAgICdNSU5VVEUnLFxuICAgICdNT05USCcsXG4gICAgJ01PTlRIU19CRVRXRUVOJyxcbiAgICAnTkVYVF9EQVknLFxuICAgICdOT1cnLFxuICAgICdRVUFSVEVSJyxcbiAgICAnU0VDT05EJyxcbiAgICAnU0VTU0lPTl9XSU5ET1cnLFxuICAgICdUSU1FU1RBTVBfTUlDUk9TJyxcbiAgICAnVElNRVNUQU1QX01JTExJUycsXG4gICAgJ1RJTUVTVEFNUF9TRUNPTkRTJyxcbiAgICAnVE9fREFURScsXG4gICAgJ1RPX1RJTUVTVEFNUCcsXG4gICAgJ1RPX1VOSVhfVElNRVNUQU1QJyxcbiAgICAnVE9fVVRDX1RJTUVTVEFNUCcsXG4gICAgJ1RSVU5DJyxcbiAgICAnVU5JWF9EQVRFJyxcbiAgICAnVU5JWF9NSUNST1MnLFxuICAgICdVTklYX01JTExJUycsXG4gICAgJ1VOSVhfU0VDT05EUycsXG4gICAgJ1VOSVhfVElNRVNUQU1QJyxcbiAgICAnV0VFS0RBWScsXG4gICAgJ1dFRUtPRllFQVInLFxuICAgICdXSU5ET1cnLFxuICAgICdZRUFSJyxcbiAgXSxcbiAgLy8gaHR0cDovL3NwYXJrLmFwYWNoZS5vcmcvZG9jcy9sYXRlc3Qvc3FsLXJlZi1mdW5jdGlvbnMtYnVpbHRpbi5odG1sI2pzb24tZnVuY3Rpb25zXG4gIGpzb246IFtcbiAgICAnRlJPTV9KU09OJyxcbiAgICAnR0VUX0pTT05fT0JKRUNUJyxcbiAgICAnSlNPTl9BUlJBWV9MRU5HVEgnLFxuICAgICdKU09OX09CSkVDVF9LRVlTJyxcbiAgICAnSlNPTl9UVVBMRScsXG4gICAgJ1NDSEVNQV9PRl9KU09OJyxcbiAgICAnVE9fSlNPTicsXG4gIF0sXG4gIC8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L2FwaS9zcWwvaW5kZXguaHRtbFxuICBtaXNjOiBbXG4gICAgJ0FCUycsXG4gICAgJ0FDT1MnLFxuICAgICdBQ09TSCcsXG4gICAgJ0FHR1JFR0FURScsXG4gICAgJ0FSUkFZX1NPUlQnLFxuICAgICdBU0NJSScsXG4gICAgJ0FTSU4nLFxuICAgICdBU0lOSCcsXG4gICAgJ0FTU0VSVF9UUlVFJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUQU4yJyxcbiAgICAnQVRBTkgnLFxuICAgICdCQVNFNjQnLFxuICAgICdCSUdJTlQnLFxuICAgICdCSU4nLFxuICAgICdCSU5BUlknLFxuICAgICdCSVRfQ09VTlQnLFxuICAgICdCSVRfR0VUJyxcbiAgICAnQklUX0xFTkdUSCcsXG4gICAgJ0JPT0xFQU4nLFxuICAgICdCUk9VTkQnLFxuICAgICdCVFJJTScsXG4gICAgJ0NBUkRJTkFMSVRZJyxcbiAgICAnQ0JSVCcsXG4gICAgJ0NFSUwnLFxuICAgICdDRUlMSU5HJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJfTEVOR1RIJyxcbiAgICAnQ0hBUkFDVEVSX0xFTkdUSCcsXG4gICAgJ0NIUicsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NPTkNBVF9XUycsXG4gICAgJ0NPTlYnLFxuICAgICdDT1MnLFxuICAgICdDT1NIJyxcbiAgICAnQ09UJyxcbiAgICAnQ1JDMzInLFxuICAgICdDVVJSRU5UX0NBVEFMT0cnLFxuICAgICdDVVJSRU5UX0RBVEFCQVNFJyxcbiAgICAnQ1VSUkVOVF9VU0VSJyxcbiAgICAnREFURScsXG4gICAgJ0RFQ0lNQUwnLFxuICAgICdERUdSRUVTJyxcbiAgICAnRE9VQkxFJyxcbiAgICAvLyAnRScsXG4gICAgJ0VMVCcsXG4gICAgJ0VYUCcsXG4gICAgJ0VYUE0xJyxcbiAgICAnRkFDVE9SSUFMJyxcbiAgICAnRklORF9JTl9TRVQnLFxuICAgICdGTE9BVCcsXG4gICAgJ0ZMT09SJyxcbiAgICAnRk9SQUxMJyxcbiAgICAnRk9STUFUX05VTUJFUicsXG4gICAgJ0ZPUk1BVF9TVFJJTkcnLFxuICAgICdGUk9NX0NTVicsXG4gICAgJ0dFVEJJVCcsXG4gICAgJ0hBU0gnLFxuICAgICdIRVgnLFxuICAgICdIWVBPVCcsXG4gICAgJ0lOSVRDQVAnLFxuICAgICdJTkxJTkUnLFxuICAgICdJTkxJTkVfT1VURVInLFxuICAgICdJTlBVVF9GSUxFX0JMT0NLX0xFTkdUSCcsXG4gICAgJ0lOUFVUX0ZJTEVfQkxPQ0tfU1RBUlQnLFxuICAgICdJTlBVVF9GSUxFX05BTUUnLFxuICAgICdJTlNUUicsXG4gICAgJ0lOVCcsXG4gICAgJ0lTTkFOJyxcbiAgICAnSVNOT1ROVUxMJyxcbiAgICAnSVNOVUxMJyxcbiAgICAnSkFWQV9NRVRIT0QnLFxuICAgICdMQ0FTRScsXG4gICAgJ0xFRlQnLFxuICAgICdMRU5HVEgnLFxuICAgICdMRVZFTlNIVEVJTicsXG4gICAgJ0xOJyxcbiAgICAnTE9DQVRFJyxcbiAgICAnTE9HJyxcbiAgICAnTE9HMTAnLFxuICAgICdMT0cxUCcsXG4gICAgJ0xPRzInLFxuICAgICdMT1dFUicsXG4gICAgJ0xQQUQnLFxuICAgICdMVFJJTScsXG4gICAgJ01BUF9GSUxURVInLFxuICAgICdNQVBfWklQX1dJVEgnLFxuICAgICdNRDUnLFxuICAgICdNT0QnLFxuICAgICdNT05PVE9OSUNBTExZX0lOQ1JFQVNJTkdfSUQnLFxuICAgICdOQU1FRF9TVFJVQ1QnLFxuICAgICdOQU5WTCcsXG4gICAgJ05FR0FUSVZFJyxcbiAgICAnTlZMJyxcbiAgICAnTlZMMicsXG4gICAgJ09DVEVUX0xFTkdUSCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQVJTRV9VUkwnLFxuICAgICdQSScsXG4gICAgJ1BNT0QnLFxuICAgICdQT1NFWFBMT0RFJyxcbiAgICAnUE9TRVhQTE9ERV9PVVRFUicsXG4gICAgJ1BPU0lUSU9OJyxcbiAgICAnUE9TSVRJVkUnLFxuICAgICdQT1cnLFxuICAgICdQT1dFUicsXG4gICAgJ1BSSU5URicsXG4gICAgJ1JBRElBTlMnLFxuICAgICdSQUlTRV9FUlJPUicsXG4gICAgJ1JBTkQnLFxuICAgICdSQU5ETicsXG4gICAgJ1JBTkRPTScsXG4gICAgJ1JFRkxFQ1QnLFxuICAgICdSRUdFWFBfRVhUUkFDVCcsXG4gICAgJ1JFR0VYUF9FWFRSQUNUX0FMTCcsXG4gICAgJ1JFR0VYUF9MSUtFJyxcbiAgICAnUkVHRVhQX1JFUExBQ0UnLFxuICAgICdSRVBFQVQnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUkVWRVJTRScsXG4gICAgJ1JJR0hUJyxcbiAgICAnUklOVCcsXG4gICAgJ1JPVU5EJyxcbiAgICAnUlBBRCcsXG4gICAgJ1JUUklNJyxcbiAgICAnU0NIRU1BX09GX0NTVicsXG4gICAgJ1NFTlRFTkNFUycsXG4gICAgJ1NIQScsXG4gICAgJ1NIQTEnLFxuICAgICdTSEEyJyxcbiAgICAnU0hJRlRMRUZUJyxcbiAgICAnU0hJRlRSSUdIVCcsXG4gICAgJ1NISUZUUklHSFRVTlNJR05FRCcsXG4gICAgJ1NJR04nLFxuICAgICdTSUdOVU0nLFxuICAgICdTSU4nLFxuICAgICdTSU5IJyxcbiAgICAnU01BTExJTlQnLFxuICAgICdTT1VOREVYJyxcbiAgICAnU1BBQ0UnLFxuICAgICdTUEFSS19QQVJUSVRJT05fSUQnLFxuICAgICdTUExJVCcsXG4gICAgJ1NRUlQnLFxuICAgICdTVEFDSycsXG4gICAgJ1NVQlNUUicsXG4gICAgJ1NVQlNUUklORycsXG4gICAgJ1NVQlNUUklOR19JTkRFWCcsXG4gICAgJ1RBTicsXG4gICAgJ1RBTkgnLFxuICAgICdUSU1FU1RBTVAnLFxuICAgICdUSU5ZSU5UJyxcbiAgICAnVE9fQ1NWJyxcbiAgICAnVFJBTlNGT1JNX0tFWVMnLFxuICAgICdUUkFOU0ZPUk1fVkFMVUVTJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1RSWV9BREQnLFxuICAgICdUUllfRElWSURFJyxcbiAgICAnVFlQRU9GJyxcbiAgICAnVUNBU0UnLFxuICAgICdVTkJBU0U2NCcsXG4gICAgJ1VOSEVYJyxcbiAgICAnVVBQRVInLFxuICAgICdVVUlEJyxcbiAgICAnVkVSU0lPTicsXG4gICAgJ1dJRFRIX0JVQ0tFVCcsXG4gICAgJ1hQQVRIJyxcbiAgICAnWFBBVEhfQk9PTEVBTicsXG4gICAgJ1hQQVRIX0RPVUJMRScsXG4gICAgJ1hQQVRIX0ZMT0FUJyxcbiAgICAnWFBBVEhfSU5UJyxcbiAgICAnWFBBVEhfTE9ORycsXG4gICAgJ1hQQVRIX05VTUJFUicsXG4gICAgJ1hQQVRIX1NIT1JUJyxcbiAgICAnWFBBVEhfU1RSSU5HJyxcbiAgICAnWFhIQVNINjQnLFxuICAgICdaSVBfV0lUSCcsXG4gIF0sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgd29yZHNcbiAqIGFueSB3b3JkcyB0aGF0IGFyZSBpbiBhIGhpZ2hlciBwcmlvcml0eSBhcmUgcmVtb3ZlZFxuICovXG4vLyBodHRwczovL2RlZXBrYi5jb20vQ09fMDAwMDEzL2VuL2tiL0lNUE9SVC1mYmZhNTlmMC0yYmYxLTMxZmUtYmI3Yi0wZjllZmU5OTMyYzYvc3Bhcmstc3FsLWtleXdvcmRzXG5jb25zdCByZXNlcnZlZEtleXdvcmRzID0gW1xuICAnQUREJyxcbiAgJ0FGVEVSJyxcbiAgJ0FMTCcsXG4gICdBTFRFUicsXG4gICdBTkFMWVpFJyxcbiAgJ0FORCcsXG4gICdBTlRJJyxcbiAgJ0FOWScsXG4gICdBUkNISVZFJyxcbiAgJ0FSUkFZJyxcbiAgJ0FTJyxcbiAgJ0FTQycsXG4gICdBVCcsXG4gICdBVVRIT1JJWkFUSU9OJyxcbiAgJ0JFVFdFRU4nLFxuICAnQk9USCcsXG4gICdCVUNLRVQnLFxuICAnQlVDS0VUUycsXG4gICdCWScsXG4gICdDQUNIRScsXG4gICdDQVNDQURFJyxcbiAgJ0NBU1QnLFxuICAnQ0hBTkdFJyxcbiAgJ0NIRUNLJyxcbiAgJ0NMRUFSJyxcbiAgJ0NMVVNURVInLFxuICAnQ0xVU1RFUkVEJyxcbiAgJ0NPREVHRU4nLFxuICAnQ09MTEFURScsXG4gICdDT0xMRUNUSU9OJyxcbiAgJ0NPTFVNTicsXG4gICdDT0xVTU5TJyxcbiAgJ0NPTU1FTlQnLFxuICAnQ09NTUlUJyxcbiAgJ0NPTVBBQ1QnLFxuICAnQ09NUEFDVElPTlMnLFxuICAnQ09NUFVURScsXG4gICdDT05DQVRFTkFURScsXG4gICdDT05TVFJBSU5UJyxcbiAgJ0NPU1QnLFxuICAnQ1JFQVRFJyxcbiAgJ0NST1NTJyxcbiAgJ0NVQkUnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJSRU5UX0RBVEUnLFxuICAnQ1VSUkVOVF9USU1FJyxcbiAgJ0NVUlJFTlRfVElNRVNUQU1QJyxcbiAgJ0NVUlJFTlRfVVNFUicsXG4gICdEQVRBJyxcbiAgJ0RBVEFCQVNFJyxcbiAgJ0RBVEFCQVNFUycsXG4gICdEQVknLFxuICAnREJQUk9QRVJUSUVTJyxcbiAgJ0RFRklORUQnLFxuICAnREVMRVRFJyxcbiAgJ0RFTElNSVRFRCcsXG4gICdERVNDJyxcbiAgJ0RFU0NSSUJFJyxcbiAgJ0RGUycsXG4gICdESVJFQ1RPUklFUycsXG4gICdESVJFQ1RPUlknLFxuICAnRElTVElOQ1QnLFxuICAnRElTVFJJQlVURScsXG4gICdESVYnLFxuICAnRFJPUCcsXG4gICdFU0NBUEUnLFxuICAnRVNDQVBFRCcsXG4gICdFWENFUFQnLFxuICAnRVhDSEFOR0UnLFxuICAnRVhJU1RTJyxcbiAgJ0VYUE9SVCcsXG4gICdFWFRFTkRFRCcsXG4gICdFWFRFUk5BTCcsXG4gICdFWFRSQUNUJyxcbiAgJ0ZBTFNFJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJRUxEUycsXG4gICdGSUxURVInLFxuICAnRklMRUZPUk1BVCcsXG4gICdGSVJTVCcsXG4gICdGSVJTVF9WQUxVRScsXG4gICdGT0xMT1dJTkcnLFxuICAnRk9SJyxcbiAgJ0ZPUkVJR04nLFxuICAnRk9STUFUJyxcbiAgJ0ZPUk1BVFRFRCcsXG4gICdGVUxMJyxcbiAgJ0ZVTkNUSU9OJyxcbiAgJ0ZVTkNUSU9OUycsXG4gICdHTE9CQUwnLFxuICAnR1JBTlQnLFxuICAnR1JPVVAnLFxuICAnR1JPVVBJTkcnLFxuICAnSE9VUicsXG4gICdJRicsXG4gICdJR05PUkUnLFxuICAnSU1QT1JUJyxcbiAgJ0lOJyxcbiAgJ0lOREVYJyxcbiAgJ0lOREVYRVMnLFxuICAnSU5ORVInLFxuICAnSU5QQVRIJyxcbiAgJ0lOUFVURk9STUFUJyxcbiAgJ0lOVEVSU0VDVCcsXG4gICdJTlRFUlZBTCcsXG4gICdJTlRPJyxcbiAgJ0lTJyxcbiAgJ0lURU1TJyxcbiAgJ0tFWVMnLFxuICAnTEFTVCcsXG4gICdMQVNUX1ZBTFVFJyxcbiAgJ0xBVEVSQUwnLFxuICAnTEFaWScsXG4gICdMRUFESU5HJyxcbiAgJ0xFRlQnLFxuICAnTElLRScsXG4gICdMSU5FUycsXG4gICdMSVNUJyxcbiAgJ0xPQ0FMJyxcbiAgJ0xPQ0FUSU9OJyxcbiAgJ0xPQ0snLFxuICAnTE9DS1MnLFxuICAnTE9HSUNBTCcsXG4gICdNQUNSTycsXG4gICdNQVAnLFxuICAnTUFUQ0hFRCcsXG4gICdNRVJHRScsXG4gICdNSU5VVEUnLFxuICAnTU9OVEgnLFxuICAnTVNDSycsXG4gICdOQU1FU1BBQ0UnLFxuICAnTkFNRVNQQUNFUycsXG4gICdOQVRVUkFMJyxcbiAgJ05PJyxcbiAgJ05PVCcsXG4gICdOVUxMJyxcbiAgJ05VTExTJyxcbiAgJ09GJyxcbiAgJ09OTFknLFxuICAnT1BUSU9OJyxcbiAgJ09QVElPTlMnLFxuICAnT1InLFxuICAnT1JERVInLFxuICAnT1VUJyxcbiAgJ09VVEVSJyxcbiAgJ09VVFBVVEZPUk1BVCcsXG4gICdPVkVSJyxcbiAgJ09WRVJMQVBTJyxcbiAgJ09WRVJMQVknLFxuICAnT1ZFUldSSVRFJyxcbiAgJ09XTkVSJyxcbiAgJ1BBUlRJVElPTicsXG4gICdQQVJUSVRJT05FRCcsXG4gICdQQVJUSVRJT05TJyxcbiAgJ1BFUkNFTlQnLFxuICAnUExBQ0lORycsXG4gICdQT1NJVElPTicsXG4gICdQUkVDRURJTkcnLFxuICAnUFJJTUFSWScsXG4gICdQUklOQ0lQQUxTJyxcbiAgJ1BST1BFUlRJRVMnLFxuICAnUFVSR0UnLFxuICAnUVVFUlknLFxuICAnUkFOR0UnLFxuICAnUkVDT1JEUkVBREVSJyxcbiAgJ1JFQ09SRFdSSVRFUicsXG4gICdSRUNPVkVSJyxcbiAgJ1JFRFVDRScsXG4gICdSRUZFUkVOQ0VTJyxcbiAgJ1JFTkFNRScsXG4gICdSRVBBSVInLFxuICAnUkVQTEFDRScsXG4gICdSRVNQRUNUJyxcbiAgJ1JFU1RSSUNUJyxcbiAgJ1JFVk9LRScsXG4gICdSSUdIVCcsXG4gICdSTElLRScsXG4gICdST0xFJyxcbiAgJ1JPTEVTJyxcbiAgJ1JPTExCQUNLJyxcbiAgJ1JPTExVUCcsXG4gICdST1cnLFxuICAnUk9XUycsXG4gICdTQ0hFTUEnLFxuICAnU0VDT05EJyxcbiAgJ1NFTEVDVCcsXG4gICdTRU1JJyxcbiAgJ1NFUEFSQVRFRCcsXG4gICdTRVJERScsXG4gICdTRVJERVBST1BFUlRJRVMnLFxuICAnU0VTU0lPTl9VU0VSJyxcbiAgJ1NFVFMnLFxuICAnU0hPVycsXG4gICdTS0VXRUQnLFxuICAnU09NRScsXG4gICdTT1JUJyxcbiAgJ1NPUlRFRCcsXG4gICdTVEFSVCcsXG4gICdTVEFUSVNUSUNTJyxcbiAgJ1NUT1JFRCcsXG4gICdTVFJBVElGWScsXG4gICdTVFJVQ1QnLFxuICAnU1VCU1RSJyxcbiAgJ1NVQlNUUklORycsXG4gICdUQUJMRScsXG4gICdUQUJMRVMnLFxuICAnVEJMUFJPUEVSVElFUycsXG4gICdURU1QT1JBUlknLFxuICAnVEVSTUlOQVRFRCcsXG4gICdUSEVOJyxcbiAgJ1RPJyxcbiAgJ1RPVUNIJyxcbiAgJ1RSQUlMSU5HJyxcbiAgJ1RSQU5TQUNUSU9OJyxcbiAgJ1RSQU5TQUNUSU9OUycsXG4gICdUUklNJyxcbiAgJ1RSVUUnLFxuICAnVFJVTkNBVEUnLFxuICAnVU5BUkNISVZFJyxcbiAgJ1VOQk9VTkRFRCcsXG4gICdVTkNBQ0hFJyxcbiAgJ1VOSVFVRScsXG4gICdVTktOT1dOJyxcbiAgJ1VOTE9DSycsXG4gICdVTlNFVCcsXG4gICdVU0UnLFxuICAnVVNFUicsXG4gICdWSUVXJyxcbiAgJ1dJTkRPVycsXG4gICdZRUFSJyxcbiAgLy8gb3RoZXJcbiAgJ0FOQUxZU0UnLFxuICAnQVJSQVlfWklQJyxcbiAgJ0NPQUxFU0NFJyxcbiAgJ0NPTlRBSU5TJyxcbiAgJ0NPTlZFUlQnLFxuICAnQ1VSUkVOVCBST1cnLFxuICAnREFZUycsXG4gICdEQVlfSE9VUicsXG4gICdEQVlfTUlOVVRFJyxcbiAgJ0RBWV9TRUNPTkQnLFxuICAnREVDT0RFJyxcbiAgJ0RFRkFVTFQnLFxuICAnRElTVElOQ1RST1cnLFxuICAnRU5DT0RFJyxcbiAgJ0VYUExPREUnLFxuICAnRVhQTE9ERV9PVVRFUicsXG4gICdGSVhFRCcsXG4gICdHUkVBVEVTVCcsXG4gICdHUk9VUF9DT05DQVQnLFxuICAnSE9VUlMnLFxuICAnSE9VUl9NSU5VVEUnLFxuICAnSE9VUl9TRUNPTkQnLFxuICAnSUZOVUxMJyxcbiAgJ0xFQVNUJyxcbiAgJ0xFVkVMJyxcbiAgJ01JTlVURV9TRUNPTkQnLFxuICAnTlVMTElGJyxcbiAgJ09GRlNFVCcsXG4gICdPTiBERUxFVEUnLFxuICAnT04gVVBEQVRFJyxcbiAgJ09QVElNSVpFJyxcbiAgJ1JFR0VYUCcsXG4gICdTRVBBUkFUT1InLFxuICAnU0laRScsXG4gICdTVFJJTkcnLFxuICAnVFlQRScsXG4gICdUWVBFUycsXG4gICdVTlNJR05FRCcsXG4gICdWQVJJQUJMRVMnLFxuICAnWUVBUl9NT05USCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbi8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L3NxbC1yZWYtc3ludGF4Lmh0bWxcbmNvbnN0IHJlc2VydmVkQ29tbWFuZHMgPSBbXG4gIC8vIERETFxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0FMVEVSIERBVEFCQVNFJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0FMVEVSIFZJRVcnLFxuICAnQ1JFQVRFIERBVEFCQVNFJyxcbiAgJ0NSRUFURSBGVU5DVElPTicsXG4gICdDUkVBVEUgVEFCTEUnLFxuICAnQ1JFQVRFIFZJRVcnLFxuICAnRFJPUCBEQVRBQkFTRScsXG4gICdEUk9QIEZVTkNUSU9OJyxcbiAgJ0RST1AgVEFCTEUnLFxuICAnRFJPUCBWSUVXJyxcbiAgJ1JFUEFJUiBUQUJMRScsXG4gICdUUlVOQ0FURSBUQUJMRScsXG4gICdVU0UgREFUQUJBU0UnLFxuICAvLyBETUxcbiAgJ0lOU0VSVCBJTlRPJyxcbiAgJ0lOU0VSVCBPVkVSV1JJVEUnLFxuICAnSU5TRVJUIE9WRVJXUklURSBESVJFQ1RPUlknLFxuICAnTE9BRCcsXG4gIC8vIERhdGEgUmV0cmlldmFsXG4gICdTRUxFQ1QnLFxuICAnV0lUSCcsXG4gICdDTFVTVEVSIEJZJyxcbiAgJ0RJU1RSSUJVVEUgQlknLFxuICAnUEFSVElUSU9OIEJZJywgLy8gdmVyaWZ5XG4gICdHUk9VUCBCWScsXG4gICdIQVZJTkcnLFxuICAnVkFMVUVTJyxcbiAgJ0xJTUlUJyxcbiAgJ09GRlNFVCcsXG4gICdPUkRFUiBCWScsXG4gICdTT1JUIEJZJyxcbiAgJ1RBQkxFU0FNUExFJyxcbiAgJ1dIRVJFJyxcbiAgJ1BJVk9UJyxcbiAgJ1RSQU5TRk9STScsXG4gICdFWFBMQUlOJyxcbiAgLy8gQXV4aWxpYXJ5XG4gICdBREQgRklMRScsXG4gICdBREQgSkFSJyxcbiAgJ0FOQUxZWkUgVEFCTEUnLFxuICAnQ0FDSEUgVEFCTEUnLFxuICAnQ0xFQVIgQ0FDSEUnLFxuICAnREVTQ1JJQkUgREFUQUJBU0UnLFxuICAnREVTQ1JJQkUgRlVOQ1RJT04nLFxuICAnREVTQ1JJQkUgUVVFUlknLFxuICAnREVTQ1JJQkUgVEFCTEUnLFxuICAnTElTVCBGSUxFJyxcbiAgJ0xJU1QgSkFSJyxcbiAgJ1JFRlJFU0gnLFxuICAnUkVGUkVTSCBUQUJMRScsXG4gICdSRUZSRVNIIEZVTkNUSU9OJyxcbiAgJ1JFU0VUJyxcbiAgJ1NFVCcsXG4gICdTRVQgU0NIRU1BJywgLy8gdmVyaWZ5XG4gICdTSE9XIENPTFVNTlMnLFxuICAnU0hPVyBDUkVBVEUgVEFCTEUnLFxuICAnU0hPVyBEQVRBQkFTRVMnLFxuICAnU0hPVyBGVU5DVElPTlMnLFxuICAnU0hPVyBQQVJUSVRJT05TJyxcbiAgJ1NIT1cgVEFCTEUgRVhURU5ERUQnLFxuICAnU0hPVyBUQUJMRVMnLFxuICAnU0hPVyBUQkxQUk9QRVJUSUVTJyxcbiAgJ1NIT1cgVklFV1MnLFxuICAnVU5DQUNIRSBUQUJMRScsXG4gIC8vIG90aGVyXG4gICdGUk9NJyxcbiAgJ0lOU0VSVCcsXG4gICdMQVRFUkFMIFZJRVcnLFxuICAnVVBEQVRFJyxcbiAgJ1dJTkRPVycsIC8vIHZlcmlmeVxuXTtcblxuLyoqXG4gKiBQcmlvcml0eSAyXG4gKiBjb21tYW5kcyB0aGF0IG9wZXJhdGUgb24gdHdvIHRhYmxlcyBvciBzdWJxdWVyaWVzXG4gKiB0d28gbWFpbiBjYXRlZ29yaWVzOiBqb2lucyBhbmQgYm9vbGVhbiBzZXQgb3BlcmF0b3JzXG4gKi9cbmNvbnN0IHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSBbXG4gIC8vIHNldCBib29sZWFuc1xuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVCBBTEwnLFxuICAnSU5URVJTRUNUIERJU1RJTkNUJyxcbiAgJ1VOSU9OJyxcbiAgJ1VOSU9OIEFMTCcsXG4gICdVTklPTiBESVNUSU5DVCcsXG4gICdFWENFUFQnLFxuICAnRVhDRVBUIEFMTCcsXG4gICdFWENFUFQgRElTVElOQ1QnLFxuICAnTUlOVVMnLFxuICAnTUlOVVMgQUxMJyxcbiAgJ01JTlVTIERJU1RJTkNUJyxcbiAgLy8gam9pbnNcbiAgJ0pPSU4nLFxuICAnSU5ORVIgSk9JTicsXG4gICdMRUZUIEpPSU4nLFxuICAnTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ1JJR0hUIEpPSU4nLFxuICAnUklHSFQgT1VURVIgSk9JTicsXG4gICdGVUxMIEpPSU4nLFxuICAnRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ0NST1NTIEpPSU4nLFxuICAnTkFUVVJBTCBKT0lOJyxcbiAgLy8gYXBwbHlcbiAgJ0NST1NTIEFQUExZJyxcbiAgJ09VVEVSIEFQUExZJyxcbiAgLy8gbm9uLXN0YW5kYXJkLWpvaW5zXG4gICdBTlRJIEpPSU4nLFxuICAnU0VNSSBKT0lOJyxcbiAgJ0xFRlQgQU5USSBKT0lOJyxcbiAgJ0xFRlQgU0VNSSBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnUklHSFQgU0VNSSBKT0lOJyxcbiAgJ05BVFVSQUwgQU5USSBKT0lOJyxcbiAgJ05BVFVSQUwgRlVMTCBPVVRFUiBKT0lOJyxcbiAgJ05BVFVSQUwgSU5ORVIgSk9JTicsXG4gICdOQVRVUkFMIExFRlQgQU5USSBKT0lOJyxcbiAgJ05BVFVSQUwgTEVGVCBPVVRFUiBKT0lOJyxcbiAgJ05BVFVSQUwgTEVGVCBTRU1JIEpPSU4nLFxuICAnTkFUVVJBTCBPVVRFUiBKT0lOJyxcbiAgJ05BVFVSQUwgUklHSFQgT1VURVIgSk9JTicsXG4gICdOQVRVUkFMIFJJR0hUIFNFTUkgSk9JTicsXG4gICdOQVRVUkFMIFNFTUkgSk9JTicsXG4gICdDUk9TUyBBUFBMWScsXG4gICdPVVRFUiBBUFBMWScsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHA6Ly9zcGFyay5hcGFjaGUub3JnL2RvY3MvbGF0ZXN0L3NxbC1wcm9ncmFtbWluZy1ndWlkZS5odG1sXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTcGFya1NxbEZvcm1hdHRlciBleHRlbmRzIEZvcm1hdHRlciB7XG4gIHN0YXRpYyByZXNlcnZlZENvbW1hbmRzID0gcmVzZXJ2ZWRDb21tYW5kcztcbiAgc3RhdGljIHJlc2VydmVkQmluYXJ5Q29tbWFuZHMgPSByZXNlcnZlZEJpbmFyeUNvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzID0gcmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzO1xuICBzdGF0aWMgcmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyA9IFsnT04nLCAnVVNJTkcnXTtcbiAgc3RhdGljIHJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyA9IFsnQU5EJywgJ09SJywgJ1hPUiddO1xuICBzdGF0aWMgcmVzZXJ2ZWRLZXl3b3JkcyA9IGRlZHVwZShbXG4gICAgLi4uT2JqZWN0LnZhbHVlcyhyZXNlcnZlZEZ1bmN0aW9ucykucmVkdWNlKChhY2MsIGFycikgPT4gWy4uLmFjYywgLi4uYXJyXSwgW10pLFxuICAgIC4uLnJlc2VydmVkS2V5d29yZHMsXG4gIF0pO1xuICBzdGF0aWMgc3RyaW5nVHlwZXM6IFN0cmluZ1BhdHRlcm5UeXBlW10gPSBbYFwiXCJgLCBcIicnXCIsICdgYCcsICd7fSddO1xuICBzdGF0aWMgYmxvY2tTdGFydCA9IFsnKCcsICdDQVNFJ107XG4gIHN0YXRpYyBibG9ja0VuZCA9IFsnKScsICdFTkQnXTtcbiAgc3RhdGljIGluZGV4ZWRQbGFjZWhvbGRlclR5cGVzID0gWyc/J107XG4gIHN0YXRpYyBuYW1lZFBsYWNlaG9sZGVyVHlwZXMgPSBbJyQnXTtcbiAgc3RhdGljIGxpbmVDb21tZW50VHlwZXMgPSBbJy0tJ107XG4gIHN0YXRpYyBvcGVyYXRvcnMgPSBbJzw9PicsICcmJicsICd8fCcsICc9PScsICctPiddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBTcGFya1NxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogU3BhcmtTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBTcGFya1NxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFNwYXJrU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogU3BhcmtTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogU3BhcmtTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFNwYXJrU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFNwYXJrU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBvcGVyYXRvcnM6IFNwYXJrU3FsRm9ybWF0dGVyLm9wZXJhdG9ycyxcbiAgICB9KTtcbiAgfVxuXG4gIHRva2VuT3ZlcnJpZGUodG9rZW46IFRva2VuKSB7XG4gICAgLy8gW1dJTkRPV10oLi4uKVxuICAgIGlmIChpc1Rva2VuLldJTkRPVyh0b2tlbikgJiYgdGhpcy50b2tlbkxvb2tBaGVhZCgpLnR5cGUgPT09IFRva2VuVHlwZS5CTE9DS19TVEFSVCkge1xuICAgICAgLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIGNhbGwsIHRyZWF0IGl0IGFzIGEgcmVzZXJ2ZWQgd29yZFxuICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLlJFU0VSVkVEX0tFWVdPUkQsIHZhbHVlOiB0b2tlbi52YWx1ZSB9O1xuICAgIH1cblxuICAgIC8vIC5bRU5EXVxuICAgIGlmIChpc1Rva2VuLkVORCh0b2tlbikgJiYgdGhpcy50b2tlbkxvb2tCZWhpbmQoKS52YWx1ZSA9PT0gJy4nKSB7XG4gICAgICAvLyBUaGlzIGlzIHdpbmRvdygpLmVuZCAob3Igc2ltaWxhcikgbm90IENBU0UgLi4uIEVORFxuICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLldPUkQsIHZhbHVlOiB0b2tlbi52YWx1ZSB9O1xuICAgIH1cblxuICAgIC8vIFRPRE86IGRlcHJlY2F0ZSB0aGlzIG9uY2UgSVRFTVMgaXMgbWVyZ2VkIHdpdGggQ09MTEVDVElPTlxuICAgIGlmICgvSVRFTVMvaS50ZXN0KHRva2VuLnZhbHVlKSAmJiB0b2tlbi50eXBlID09PSBUb2tlblR5cGUuUkVTRVJWRURfS0VZV09SRCkge1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIC9DT0xMRUNUSU9OL2kudGVzdCh0aGlzLnRva2VuTG9va0JlaGluZCgpLnZhbHVlKSAmJlxuICAgICAgICAgIC9URVJNSU5BVEVEL2kudGVzdCh0aGlzLnRva2VuTG9va0FoZWFkKCkudmFsdWUpXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICAvLyB0aGlzIGlzIGEgd29yZCBhbmQgbm90IENPTExFQ1RJT04gSVRFTVNcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogVG9rZW5UeXBlLldPUkQsIHZhbHVlOiB0b2tlbi52YWx1ZSB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b2tlbjtcbiAgfVxufVxuIiwiaW1wb3J0IEZvcm1hdHRlciBmcm9tICcuLi9jb3JlL0Zvcm1hdHRlcic7XG5pbXBvcnQgVG9rZW5pemVyIGZyb20gJy4uL2NvcmUvVG9rZW5pemVyJztcbmltcG9ydCB0eXBlIHsgU3RyaW5nUGF0dGVyblR5cGUgfSBmcm9tICcuLi9jb3JlL3JlZ2V4RmFjdG9yeSc7XG5pbXBvcnQgeyBkZWR1cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbi8vIGh0dHBzOi8vamFrZXdoZWF0LmdpdGh1Yi5pby9zcWwtb3ZlcnZpZXcvc3FsLTIwMDgtZm91bmRhdGlvbi1ncmFtbWFyLmh0bWwjcmVzZXJ2ZWQtd29yZFxuY29uc3QgcmVzZXJ2ZWRLZXl3b3JkcyA9IFtcbiAgJ0FCUycsXG4gICdBTEwnLFxuICAnQUxMT0NBVEUnLFxuICAnQUxURVInLFxuICAnQU5ZJyxcbiAgJ0FSRScsXG4gICdBUlJBWScsXG4gICdBUycsXG4gICdBU0VOU0lUSVZFJyxcbiAgJ0FTWU1NRVRSSUMnLFxuICAnQVQnLFxuICAnQVRPTUlDJyxcbiAgJ0FVVEhPUklaQVRJT04nLFxuICAnQVZHJyxcbiAgJ0JFR0lOJyxcbiAgJ0JFVFdFRU4nLFxuICAnQklHSU5UJyxcbiAgJ0JJTkFSWScsXG4gICdCTE9CJyxcbiAgJ0JPT0xFQU4nLFxuICAnQk9USCcsXG4gICdCWScsXG4gICdDQUxMJyxcbiAgJ0NBTExFRCcsXG4gICdDQVJESU5BTElUWScsXG4gICdDQVNDQURFRCcsXG4gICdDQVNUJyxcbiAgJ0NFSUwnLFxuICAnQ0VJTElORycsXG4gICdDSEFSJyxcbiAgJ0NIQVJBQ1RFUicsXG4gICdDSEFSQUNURVJfTEVOR1RIJyxcbiAgJ0NIQVJfTEVOR1RIJyxcbiAgJ0NIRUNLJyxcbiAgJ0NMT0InLFxuICAnQ0xPU0UnLFxuICAnQ09BTEVTQ0UnLFxuICAnQ09MTEFURScsXG4gICdDT0xMRUNUJyxcbiAgJ0NPTFVNTicsXG4gICdDT01NSVQnLFxuICAnQ09ORElUSU9OJyxcbiAgJ0NPTk5FQ1QnLFxuICAnQ09OU1RSQUlOVCcsXG4gICdDT05WRVJUJyxcbiAgJ0NPUlInLFxuICAnQ09SUkVTUE9ORElORycsXG4gICdDT1VOVCcsXG4gICdDT1ZBUl9QT1AnLFxuICAnQ09WQVJfU0FNUCcsXG4gICdDUkVBVEUnLFxuICAnQ1JPU1MnLFxuICAnQ1VCRScsXG4gICdDVU1FX0RJU1QnLFxuICAnQ1VSUkVOVCcsXG4gICdDVVJSRU5UX0NBVEFMT0cnLFxuICAnQ1VSUkVOVF9EQVRFJyxcbiAgJ0NVUlJFTlRfREVGQVVMVF9UUkFOU0ZPUk1fR1JPVVAnLFxuICAnQ1VSUkVOVF9QQVRIJyxcbiAgJ0NVUlJFTlRfUk9MRScsXG4gICdDVVJSRU5UX1NDSEVNQScsXG4gICdDVVJSRU5UX1RJTUUnLFxuICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAnQ1VSUkVOVF9UUkFOU0ZPUk1fR1JPVVBfRk9SX1RZUEUnLFxuICAnQ1VSUkVOVF9VU0VSJyxcbiAgJ0NVUlNPUicsXG4gICdDWUNMRScsXG4gICdEQVRFJyxcbiAgJ0RBWScsXG4gICdERUFMTE9DQVRFJyxcbiAgJ0RFQycsXG4gICdERUNJTUFMJyxcbiAgJ0RFQ0xBUkUnLFxuICAnREVGQVVMVCcsXG4gICdERUxFVEUnLFxuICAnREVOU0VfUkFOSycsXG4gICdERVJFRicsXG4gICdERVNDUklCRScsXG4gICdERVRFUk1JTklTVElDJyxcbiAgJ0RJU0NPTk5FQ1QnLFxuICAnRElTVElOQ1QnLFxuICAnRE9VQkxFJyxcbiAgJ0RST1AnLFxuICAnRFlOQU1JQycsXG4gICdFQUNIJyxcbiAgJ0VMRU1FTlQnLFxuICAnRU5ELUVYRUMnLFxuICAnRVNDQVBFJyxcbiAgJ0VWRVJZJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWEVDJyxcbiAgJ0VYRUNVVEUnLFxuICAnRVhJU1RTJyxcbiAgJ0VYUCcsXG4gICdFWFRFUk5BTCcsXG4gICdFWFRSQUNUJyxcbiAgJ0ZBTFNFJyxcbiAgJ0ZFVENIJyxcbiAgJ0ZJTFRFUicsXG4gICdGTE9BVCcsXG4gICdGTE9PUicsXG4gICdGT1InLFxuICAnRk9SRUlHTicsXG4gICdGUkVFJyxcbiAgJ0ZST00nLFxuICAnRlVMTCcsXG4gICdGVU5DVElPTicsXG4gICdGVVNJT04nLFxuICAnR0VUJyxcbiAgJ0dMT0JBTCcsXG4gICdHUkFOVCcsXG4gICdHUk9VUCcsXG4gICdHUk9VUElORycsXG4gICdIQVZJTkcnLFxuICAnSE9MRCcsXG4gICdIT1VSJyxcbiAgJ0lERU5USVRZJyxcbiAgJ0lOJyxcbiAgJ0lORElDQVRPUicsXG4gICdJTk5FUicsXG4gICdJTk9VVCcsXG4gICdJTlNFTlNJVElWRScsXG4gICdJTlNFUlQnLFxuICAnSU5UJyxcbiAgJ0lOVEVHRVInLFxuICAnSU5URVJTRUNUJyxcbiAgJ0lOVEVSU0VDVElPTicsXG4gICdJTlRFUlZBTCcsXG4gICdJTlRPJyxcbiAgJ0lTJyxcbiAgJ0xBTkdVQUdFJyxcbiAgJ0xBUkdFJyxcbiAgJ0xBVEVSQUwnLFxuICAnTEVBRElORycsXG4gICdMRUZUJyxcbiAgJ0xJS0UnLFxuICAnTElLRV9SRUdFWCcsXG4gICdMTicsXG4gICdMT0NBTCcsXG4gICdMT0NBTFRJTUUnLFxuICAnTE9DQUxUSU1FU1RBTVAnLFxuICAnTE9XRVInLFxuICAnTUFUQ0gnLFxuICAnTUFYJyxcbiAgJ01FTUJFUicsXG4gICdNRVJHRScsXG4gICdNRVRIT0QnLFxuICAnTUlOJyxcbiAgJ01JTlVURScsXG4gICdNT0QnLFxuICAnTU9ESUZJRVMnLFxuICAnTU9EVUxFJyxcbiAgJ01PTlRIJyxcbiAgJ01VTFRJU0VUJyxcbiAgJ05BVElPTkFMJyxcbiAgJ05BVFVSQUwnLFxuICAnTkNIQVInLFxuICAnTkNMT0InLFxuICAnTkVXJyxcbiAgJ05PJyxcbiAgJ05PTkUnLFxuICAnTk9STUFMSVpFJyxcbiAgJ05PVCcsXG4gICdOVUxMJyxcbiAgJ05VTExJRicsXG4gICdOVU1FUklDJyxcbiAgJ09DQ1VSUkVOQ0VTX1JFR0VYJyxcbiAgJ09DVEVUX0xFTkdUSCcsXG4gICdPRicsXG4gICdPTEQnLFxuICAnT04gREVMRVRFJyxcbiAgJ09OIFVQREFURScsXG4gICdPTkxZJyxcbiAgJ09QRU4nLFxuICAnT1JERVInLFxuICAnT1VUJyxcbiAgJ09VVEVSJyxcbiAgJ09WRVInLFxuICAnT1ZFUkxBUFMnLFxuICAnT1ZFUkxBWScsXG4gICdQQVJBTUVURVInLFxuICAnUEFSVElUSU9OJyxcbiAgJ1BFUkNFTlRJTEVfQ09OVCcsXG4gICdQRVJDRU5USUxFX0RJU0MnLFxuICAnUEVSQ0VOVF9SQU5LJyxcbiAgJ1BPU0lUSU9OJyxcbiAgJ1BPU0lUSU9OX1JFR0VYJyxcbiAgJ1BPV0VSJyxcbiAgJ1BSRUNJU0lPTicsXG4gICdQUkVQQVJFJyxcbiAgJ1BSSU1BUlknLFxuICAnUFJPQ0VEVVJFJyxcbiAgJ1JBTkdFJyxcbiAgJ1JBTksnLFxuICAnUkVBRFMnLFxuICAnUkVBTCcsXG4gICdSRUNVUlNJVkUnLFxuICAnUkVGJyxcbiAgJ1JFRkVSRU5DRVMnLFxuICAnUkVGRVJFTkNJTkcnLFxuICAnUkVHUl9BVkdYJyxcbiAgJ1JFR1JfQVZHWScsXG4gICdSRUdSX0NPVU5UJyxcbiAgJ1JFR1JfSU5URVJDRVBUJyxcbiAgJ1JFR1JfUjInLFxuICAnUkVHUl9TTE9QRScsXG4gICdSRUdSX1NYWCcsXG4gICdSRUdSX1NYWScsXG4gICdSRUdSX1NZWScsXG4gICdSRUxFQVNFJyxcbiAgJ1JFU1VMVCcsXG4gICdSRVRVUk4nLFxuICAnUkVUVVJOUycsXG4gICdSRVZPS0UnLFxuICAnUklHSFQnLFxuICAnUk9MTEJBQ0snLFxuICAnUk9MTFVQJyxcbiAgJ1JPVycsXG4gICdST1dTJyxcbiAgJ1JPV19OVU1CRVInLFxuICAnU0FWRVBPSU5UJyxcbiAgJ1NDT1BFJyxcbiAgJ1NDUk9MTCcsXG4gICdTRUFSQ0gnLFxuICAnU0VDT05EJyxcbiAgJ1NFTEVDVCcsXG4gICdTRU5TSVRJVkUnLFxuICAnU0VTU0lPTl9VU0VSJyxcbiAgJ1NFVCcsXG4gICdTSU1JTEFSJyxcbiAgJ1NNQUxMSU5UJyxcbiAgJ1NPTUUnLFxuICAnU1BFQ0lGSUMnLFxuICAnU1BFQ0lGSUNUWVBFJyxcbiAgJ1NRTCcsXG4gICdTUUxFWENFUFRJT04nLFxuICAnU1FMU1RBVEUnLFxuICAnU1FMV0FSTklORycsXG4gICdTUVJUJyxcbiAgJ1NUQVJUJyxcbiAgJ1NUQVRJQycsXG4gICdTVERERVZfUE9QJyxcbiAgJ1NURERFVl9TQU1QJyxcbiAgJ1NVQk1VTFRJU0VUJyxcbiAgJ1NVQlNUUklORycsXG4gICdTVUJTVFJJTkdfUkVHRVgnLFxuICAnU1VNJyxcbiAgJ1NZTU1FVFJJQycsXG4gICdTWVNURU0nLFxuICAnU1lTVEVNX1VTRVInLFxuICAnVEFCTEUnLFxuICAnVEFCTEVTQU1QTEUnLFxuICAnVEhFTicsXG4gICdUSU1FJyxcbiAgJ1RJTUVTVEFNUCcsXG4gICdUSU1FWk9ORV9IT1VSJyxcbiAgJ1RJTUVaT05FX01JTlVURScsXG4gICdUTycsXG4gICdUUkFJTElORycsXG4gICdUUkFOU0xBVEUnLFxuICAnVFJBTlNMQVRFX1JFR0VYJyxcbiAgJ1RSQU5TTEFUSU9OJyxcbiAgJ1RSRUFUJyxcbiAgJ1RSSUdHRVInLFxuICAnVFJJTScsXG4gICdUUlVFJyxcbiAgJ1VFU0NBUEUnLFxuICAnVU5JT04nLFxuICAnVU5JUVVFJyxcbiAgJ1VOS05PV04nLFxuICAnVU5ORVNUJyxcbiAgJ1VQREFURScsXG4gICdVUFBFUicsXG4gICdVU0VSJyxcbiAgJ1ZBTFVFJyxcbiAgJ1ZBTFVFUycsXG4gICdWQVJCSU5BUlknLFxuICAnVkFSQ0hBUicsXG4gICdWQVJZSU5HJyxcbiAgJ1ZBUl9QT1AnLFxuICAnVkFSX1NBTVAnLFxuICAnV0hFTkVWRVInLFxuICAnV0lEVEhfQlVDS0VUJyxcbiAgJ1dJTkRPVycsXG4gICdXSVRISU4nLFxuICAnV0lUSE9VVCcsXG4gICdZRUFSJyxcbl07XG5cbi8qKlxuICogUHJpb3JpdHkgMSAoZmlyc3QpXG4gKiBrZXl3b3JkcyB0aGF0IGJlZ2luIGEgbmV3IHN0YXRlbWVudFxuICogd2lsbCBiZWdpbiBuZXcgaW5kZW50ZWQgYmxvY2tcbiAqL1xuY29uc3QgcmVzZXJ2ZWRDb21tYW5kcyA9IFtcbiAgJ0FERCcsXG4gICdBTFRFUiBDT0xVTU4nLFxuICAnQUxURVIgVEFCTEUnLFxuICAnQ1JFQVRFIFRBQkxFJyxcbiAgJ0RST1AgVEFCTEUnLFxuICAnRU5EJyxcbiAgJ0ZFVENIIEZJUlNUJyxcbiAgJ0ZFVENIIE5FWFQnLFxuICAnRkVUQ0ggUFJJT1InLFxuICAnRkVUQ0ggTEFTVCcsXG4gICdGRVRDSCBBQlNPTFVURScsXG4gICdGRVRDSCBSRUxBVElWRScsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsXG4gICdMSU1JVCcsXG4gICdPRkZTRVQnLFxuICAnT1JERVIgQlknLFxuICAnU0VMRUNUJyxcbiAgJ1NFVCBTQ0hFTUEnLFxuICAnU0VUJyxcbiAgJ1VQREFURScsXG4gICdWQUxVRVMnLFxuICAnV0hFUkUnLFxuICAnV0lUSCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gIC8vIGpvaW5zXG4gICdKT0lOJyxcbiAgJ0lOTkVSIEpPSU4nLFxuICAnTEVGVCBKT0lOJyxcbiAgJ0xFRlQgT1VURVIgSk9JTicsXG4gICdSSUdIVCBKT0lOJyxcbiAgJ1JJR0hUIE9VVEVSIEpPSU4nLFxuICAnRlVMTCBKT0lOJyxcbiAgJ0ZVTEwgT1VURVIgSk9JTicsXG4gICdDUk9TUyBKT0lOJyxcbiAgJ05BVFVSQUwgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0YW5kYXJkU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUocmVzZXJ2ZWRLZXl3b3Jkcyk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiJydcIiwgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ0NBU0UnXTtcbiAgc3RhdGljIGJsb2NrRW5kID0gWycpJywgJ0VORCddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbJz8nXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFtdO1xuICBzdGF0aWMgbGluZUNvbW1lbnRUeXBlcyA9IFsnLS0nXTtcbiAgc3RhdGljIG9wZXJhdG9ycyA9IFtdO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBTdGFuZGFyZFNxbEZvcm1hdHRlci5yZXNlcnZlZENvbW1hbmRzLFxuICAgICAgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyxcbiAgICAgIHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyxcbiAgICAgIHJlc2VydmVkTG9naWNhbE9wZXJhdG9yczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzLFxuICAgICAgcmVzZXJ2ZWRLZXl3b3JkczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBTdGFuZGFyZFNxbEZvcm1hdHRlci5zdHJpbmdUeXBlcyxcbiAgICAgIGJsb2NrU3RhcnQ6IFN0YW5kYXJkU3FsRm9ybWF0dGVyLmJsb2NrU3RhcnQsXG4gICAgICBibG9ja0VuZDogU3RhbmRhcmRTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogU3RhbmRhcmRTcWxGb3JtYXR0ZXIuaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBuYW1lZFBsYWNlaG9sZGVyVHlwZXM6IFN0YW5kYXJkU3FsRm9ybWF0dGVyLm5hbWVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIGxpbmVDb21tZW50VHlwZXM6IFN0YW5kYXJkU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBGb3JtYXR0ZXIgZnJvbSAnLi4vY29yZS9Gb3JtYXR0ZXInO1xuaW1wb3J0IFRva2VuaXplciBmcm9tICcuLi9jb3JlL1Rva2VuaXplcic7XG5pbXBvcnQgdHlwZSB7IFN0cmluZ1BhdHRlcm5UeXBlIH0gZnJvbSAnLi4vY29yZS9yZWdleEZhY3RvcnknO1xuaW1wb3J0IHsgZGVkdXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIFByaW9yaXR5IDUgKGxhc3QpXG4gKiBGdWxsIGxpc3Qgb2YgcmVzZXJ2ZWQgZnVuY3Rpb25zXG4gKiBkaXN0aW5jdCBmcm9tIEtleXdvcmRzIGR1ZSB0byBpbnRlcmFjdGlvbiB3aXRoIHBhcmVudGhlc2VzXG4gKi9cbi8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9mdW5jdGlvbnMvZnVuY3Rpb25zP3ZpZXc9c3FsLXNlcnZlci12ZXIxNVxuY29uc3QgcmVzZXJ2ZWRGdW5jdGlvbnMgPSB7XG4gIGFnZ3JlZ2F0ZTogW1xuICAgICdBUFBST1hfQ09VTlRfRElTVElOQ1QnLFxuICAgICdBVkcnLFxuICAgICdDSEVDS1NVTV9BR0cnLFxuICAgICdDT1VOVCcsXG4gICAgJ0NPVU5UX0JJRycsXG4gICAgJ0dST1VQSU5HJyxcbiAgICAnR1JPVVBJTkdfSUQnLFxuICAgICdNQVgnLFxuICAgICdNSU4nLFxuICAgICdTVERFVicsXG4gICAgJ1NUREVWUCcsXG4gICAgJ1NVTScsXG4gICAgJ1ZBUicsXG4gICAgJ1ZBUlAnLFxuICBdLFxuICBhbmFseXRpYzogW1xuICAgICdDVU1FX0RJU1QnLFxuICAgICdGSVJTVF9WQUxVRScsXG4gICAgJ0xBRycsXG4gICAgJ0xBU1RfVkFMVUUnLFxuICAgICdMRUFEJyxcbiAgICAnUEVSQ0VOVElMRV9DT05UJyxcbiAgICAnUEVSQ0VOVElMRV9ESVNDJyxcbiAgICAnUEVSQ0VOVF9SQU5LJyxcbiAgICAnQ29sbGF0aW9uIC0gQ09MTEFUSU9OUFJPUEVSVFknLFxuICAgICdDb2xsYXRpb24gLSBURVJUSUFSWV9XRUlHSFRTJyxcbiAgXSxcbiAgY29uZmlndXJhdGlvbjogW1xuICAgICdAQERCVFMnLFxuICAgICdAQExBTkdJRCcsXG4gICAgJ0BATEFOR1VBR0UnLFxuICAgICdAQExPQ0tfVElNRU9VVCcsXG4gICAgJ0BATUFYX0NPTk5FQ1RJT05TJyxcbiAgICAnQEBNQVhfUFJFQ0lTSU9OJyxcbiAgICAnQEBORVNUTEVWRUwnLFxuICAgICdAQE9QVElPTlMnLFxuICAgICdAQFJFTVNFUlZFUicsXG4gICAgJ0BAU0VSVkVSTkFNRScsXG4gICAgJ0BAU0VSVklDRU5BTUUnLFxuICAgICdAQFNQSUQnLFxuICAgICdAQFRFWFRTSVpFJyxcbiAgICAnQEBWRVJTSU9OJyxcbiAgXSxcbiAgY29udmVyc2lvbjogWydDQVNUJywgJ0NPTlZFUlQnLCAnUEFSU0UnLCAnVFJZX0NBU1QnLCAnVFJZX0NPTlZFUlQnLCAnVFJZX1BBUlNFJ10sXG4gIGNyeXB0b2dyYXBoaWM6IFtcbiAgICAnQVNZTUtFWV9JRCcsXG4gICAgJ0FTWU1LRVlQUk9QRVJUWScsXG4gICAgJ0NFUlRQUk9QRVJUWScsXG4gICAgJ0NFUlRfSUQnLFxuICAgICdDUllQVF9HRU5fUkFORE9NJyxcbiAgICAnREVDUllQVEJZQVNZTUtFWScsXG4gICAgJ0RFQ1JZUFRCWUNFUlQnLFxuICAgICdERUNSWVBUQllLRVknLFxuICAgICdERUNSWVBUQllLRVlBVVRPQVNZTUtFWScsXG4gICAgJ0RFQ1JZUFRCWUtFWUFVVE9DRVJUJyxcbiAgICAnREVDUllQVEJZUEFTU1BIUkFTRScsXG4gICAgJ0VOQ1JZUFRCWUFTWU1LRVknLFxuICAgICdFTkNSWVBUQllDRVJUJyxcbiAgICAnRU5DUllQVEJZS0VZJyxcbiAgICAnRU5DUllQVEJZUEFTU1BIUkFTRScsXG4gICAgJ0hBU0hCWVRFUycsXG4gICAgJ0lTX09CSkVDVFNJR05FRCcsXG4gICAgJ0tFWV9HVUlEJyxcbiAgICAnS0VZX0lEJyxcbiAgICAnS0VZX05BTUUnLFxuICAgICdTSUdOQllBU1lNS0VZJyxcbiAgICAnU0lHTkJZQ0VSVCcsXG4gICAgJ1NZTUtFWVBST1BFUlRZJyxcbiAgICAnVkVSSUZZU0lHTkVEQllDRVJUJyxcbiAgICAnVkVSSUZZU0lHTkVEQllBU1lNS0VZJyxcbiAgXSxcbiAgY3Vyc29yOiBbJ0BAQ1VSU09SX1JPV1MnLCAnQEBGRVRDSF9TVEFUVVMnLCAnQ1VSU09SX1NUQVRVUyddLFxuICBkYXRhVHlwZTogW1xuICAgICdEQVRBTEVOR1RIJyxcbiAgICAnSURFTlRfQ1VSUkVOVCcsXG4gICAgJ0lERU5UX0lOQ1InLFxuICAgICdJREVOVF9TRUVEJyxcbiAgICAnSURFTlRJVFknLFxuICAgICdTUUxfVkFSSUFOVF9QUk9QRVJUWScsXG4gIF0sXG4gIGRhdGV0aW1lOiBbXG4gICAgJ0BAREFURUZJUlNUJyxcbiAgICAnQ1VSUkVOVF9USU1FU1RBTVAnLFxuICAgICdDVVJSRU5UX1RJTUVaT05FJyxcbiAgICAnQ1VSUkVOVF9USU1FWk9ORV9JRCcsXG4gICAgJ0RBVEVBREQnLFxuICAgICdEQVRFRElGRicsXG4gICAgJ0RBVEVESUZGX0JJRycsXG4gICAgJ0RBVEVGUk9NUEFSVFMnLFxuICAgICdEQVRFTkFNRScsXG4gICAgJ0RBVEVQQVJUJyxcbiAgICAnREFURVRJTUUyRlJPTVBBUlRTJyxcbiAgICAnREFURVRJTUVGUk9NUEFSVFMnLFxuICAgICdEQVRFVElNRU9GRlNFVEZST01QQVJUUycsXG4gICAgJ0RBWScsXG4gICAgJ0VPTU9OVEgnLFxuICAgICdHRVREQVRFJyxcbiAgICAnR0VUVVRDREFURScsXG4gICAgJ0lTREFURScsXG4gICAgJ01PTlRIJyxcbiAgICAnU01BTExEQVRFVElNRUZST01QQVJUUycsXG4gICAgJ1NXSVRDSE9GRlNFVCcsXG4gICAgJ1NZU0RBVEVUSU1FJyxcbiAgICAnU1lTREFURVRJTUVPRkZTRVQnLFxuICAgICdTWVNVVENEQVRFVElNRScsXG4gICAgJ1RJTUVGUk9NUEFSVFMnLFxuICAgICdUT0RBVEVUSU1FT0ZGU0VUJyxcbiAgICAnWUVBUicsXG4gICAgJ0pTT04nLFxuICAgICdJU0pTT04nLFxuICAgICdKU09OX1ZBTFVFJyxcbiAgICAnSlNPTl9RVUVSWScsXG4gICAgJ0pTT05fTU9ESUZZJyxcbiAgXSxcbiAgbWF0aGVtYXRpY2FsOiBbXG4gICAgJ0FCUycsXG4gICAgJ0FDT1MnLFxuICAgICdBU0lOJyxcbiAgICAnQVRBTicsXG4gICAgJ0FUTjInLFxuICAgICdDRUlMSU5HJyxcbiAgICAnQ09TJyxcbiAgICAnQ09UJyxcbiAgICAnREVHUkVFUycsXG4gICAgJ0VYUCcsXG4gICAgJ0ZMT09SJyxcbiAgICAnTE9HJyxcbiAgICAnTE9HMTAnLFxuICAgICdQSScsXG4gICAgJ1BPV0VSJyxcbiAgICAnUkFESUFOUycsXG4gICAgJ1JBTkQnLFxuICAgICdST1VORCcsXG4gICAgJ1NJR04nLFxuICAgICdTSU4nLFxuICAgICdTUVJUJyxcbiAgICAnU1FVQVJFJyxcbiAgICAnVEFOJyxcbiAgICAnQ0hPT1NFJyxcbiAgICAnR1JFQVRFU1QnLFxuICAgICdJSUYnLFxuICAgICdMRUFTVCcsXG4gIF0sXG4gIG1ldGFkYXRhOiBbXG4gICAgJ0BAUFJPQ0lEJyxcbiAgICAnQVBQX05BTUUnLFxuICAgICdBUFBMT0NLX01PREUnLFxuICAgICdBUFBMT0NLX1RFU1QnLFxuICAgICdBU1NFTUJMWVBST1BFUlRZJyxcbiAgICAnQ09MX0xFTkdUSCcsXG4gICAgJ0NPTF9OQU1FJyxcbiAgICAnQ09MVU1OUFJPUEVSVFknLFxuICAgICdEQVRBQkFTRVBST1BFUlRZRVgnLFxuICAgICdEQl9JRCcsXG4gICAgJ0RCX05BTUUnLFxuICAgICdGSUxFX0lEJyxcbiAgICAnRklMRV9JREVYJyxcbiAgICAnRklMRV9OQU1FJyxcbiAgICAnRklMRUdST1VQX0lEJyxcbiAgICAnRklMRUdST1VQX05BTUUnLFxuICAgICdGSUxFR1JPVVBQUk9QRVJUWScsXG4gICAgJ0ZJTEVQUk9QRVJUWScsXG4gICAgJ0ZJTEVQUk9QRVJUWUVYJyxcbiAgICAnRlVMTFRFWFRDQVRBTE9HUFJPUEVSVFknLFxuICAgICdGVUxMVEVYVFNFUlZJQ0VQUk9QRVJUWScsXG4gICAgJ0lOREVYX0NPTCcsXG4gICAgJ0lOREVYS0VZX1BST1BFUlRZJyxcbiAgICAnSU5ERVhQUk9QRVJUWScsXG4gICAgJ05FWFQgVkFMVUUgRk9SJyxcbiAgICAnT0JKRUNUX0RFRklOSVRJT04nLFxuICAgICdPQkpFQ1RfSUQnLFxuICAgICdPQkpFQ1RfTkFNRScsXG4gICAgJ09CSkVDVF9TQ0hFTUFfTkFNRScsXG4gICAgJ09CSkVDVFBST1BFUlRZJyxcbiAgICAnT0JKRUNUUFJPUEVSVFlFWCcsXG4gICAgJ09SSUdJTkFMX0RCX05BTUUnLFxuICAgICdQQVJTRU5BTUUnLFxuICAgICdTQ0hFTUFfSUQnLFxuICAgICdTQ0hFTUFfTkFNRScsXG4gICAgJ1NDT1BFX0lERU5USVRZJyxcbiAgICAnU0VSVkVSUFJPUEVSVFknLFxuICAgICdTVEFUU19EQVRFJyxcbiAgICAnVFlQRV9JRCcsXG4gICAgJ1RZUEVfTkFNRScsXG4gICAgJ1RZUEVQUk9QRVJUWScsXG4gIF0sXG4gIHJhbmtpbmc6IFsnREVOU0VfUkFOSycsICdOVElMRScsICdSQU5LJywgJ1JPV19OVU1CRVInLCAnUFVCTElTSElOR1NFUlZFUk5BTUUnXSxcbiAgc2VjdXJpdHk6IFtcbiAgICAnQ0VSVEVOQ09ERUQnLFxuICAgICdDRVJUUFJJVkFURUtFWScsXG4gICAgJ0NVUlJFTlRfVVNFUicsXG4gICAgJ0RBVEFCQVNFX1BSSU5DSVBBTF9JRCcsXG4gICAgJ0hBU19EQkFDQ0VTUycsXG4gICAgJ0hBU19QRVJNU19CWV9OQU1FJyxcbiAgICAnSVNfTUVNQkVSJyxcbiAgICAnSVNfUk9MRU1FTUJFUicsXG4gICAgJ0lTX1NSVlJPTEVNRU1CRVInLFxuICAgICdMT0dJTlBST1BFUlRZJyxcbiAgICAnT1JJR0lOQUxfTE9HSU4nLFxuICAgICdQRVJNSVNTSU9OUycsXG4gICAgJ1BXREVOQ1JZUFQnLFxuICAgICdQV0RDT01QQVJFJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0VTU0lPTlBST1BFUlRZJyxcbiAgICAnU1VTRVJfSUQnLFxuICAgICdTVVNFUl9OQU1FJyxcbiAgICAnU1VTRVJfU0lEJyxcbiAgICAnU1VTRVJfU05BTUUnLFxuICAgICdTWVNURU1fVVNFUicsXG4gICAgJ1VTRVInLFxuICAgICdVU0VSX0lEJyxcbiAgICAnVVNFUl9OQU1FJyxcbiAgXSxcbiAgc3RyaW5nOiBbXG4gICAgJ0FTQ0lJJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJJTkRFWCcsXG4gICAgJ0NPTkNBVCcsXG4gICAgJ0NPTkNBVF9XUycsXG4gICAgJ0RJRkZFUkVOQ0UnLFxuICAgICdGT1JNQVQnLFxuICAgICdMRUZUJyxcbiAgICAnTEVOJyxcbiAgICAnTE9XRVInLFxuICAgICdMVFJJTScsXG4gICAgJ05DSEFSJyxcbiAgICAnUEFUSU5ERVgnLFxuICAgICdRVU9URU5BTUUnLFxuICAgICdSRVBMQUNFJyxcbiAgICAnUkVQTElDQVRFJyxcbiAgICAnUkVWRVJTRScsXG4gICAgJ1JJR0hUJyxcbiAgICAnUlRSSU0nLFxuICAgICdTT1VOREVYJyxcbiAgICAnU1BBQ0UnLFxuICAgICdTVFInLFxuICAgICdTVFJJTkdfQUdHJyxcbiAgICAnU1RSSU5HX0VTQ0FQRScsXG4gICAgJ1NUVUZGJyxcbiAgICAnU1VCU1RSSU5HJyxcbiAgICAnVFJBTlNMQVRFJyxcbiAgICAnVFJJTScsXG4gICAgJ1VOSUNPREUnLFxuICAgICdVUFBFUicsXG4gIF0sXG4gIHN5c3RlbTogW1xuICAgICckUEFSVElUSU9OJyxcbiAgICAnQEBFUlJPUicsXG4gICAgJ0BASURFTlRJVFknLFxuICAgICdAQFBBQ0tfUkVDRUlWRUQnLFxuICAgICdAQFJPV0NPVU5UJyxcbiAgICAnQEBUUkFOQ09VTlQnLFxuICAgICdCSU5BUllfQ0hFQ0tTVU0nLFxuICAgICdDSEVDS1NVTScsXG4gICAgJ0NPTVBSRVNTJyxcbiAgICAnQ09OTkVDVElPTlBST1BFUlRZJyxcbiAgICAnQ09OVEVYVF9JTkZPJyxcbiAgICAnQ1VSUkVOVF9SRVFVRVNUX0lEJyxcbiAgICAnQ1VSUkVOVF9UUkFOU0FDVElPTl9JRCcsXG4gICAgJ0RFQ09NUFJFU1MnLFxuICAgICdFUlJPUl9MSU5FJyxcbiAgICAnRVJST1JfTUVTU0FHRScsXG4gICAgJ0VSUk9SX05VTUJFUicsXG4gICAgJ0VSUk9SX1BST0NFRFVSRScsXG4gICAgJ0VSUk9SX1NFVkVSSVRZJyxcbiAgICAnRVJST1JfU1RBVEUnLFxuICAgICdGT1JNQVRNRVNTQUdFJyxcbiAgICAnR0VUX0ZJTEVTVFJFQU1fVFJBTlNBQ1RJT05fQ09OVEVYVCcsXG4gICAgJ0dFVEFOU0lOVUxMJyxcbiAgICAnSE9TVF9JRCcsXG4gICAgJ0hPU1RfTkFNRScsXG4gICAgJ0lTTlVMTCcsXG4gICAgJ0lTTlVNRVJJQycsXG4gICAgJ01JTl9BQ1RJVkVfUk9XVkVSU0lPTicsXG4gICAgJ05FV0lEJyxcbiAgICAnTkVXU0VRVUVOVElBTElEJyxcbiAgICAnUk9XQ09VTlRfQklHJyxcbiAgICAnU0VTU0lPTl9DT05URVhUJyxcbiAgICAnWEFDVF9TVEFURScsXG4gIF0sXG4gIHN0YXRpc3RpY2FsOiBbXG4gICAgJ0BAQ09OTkVDVElPTlMnLFxuICAgICdAQENQVV9CVVNZJyxcbiAgICAnQEBJRExFJyxcbiAgICAnQEBJT19CVVNZJyxcbiAgICAnQEBQQUNLX1NFTlQnLFxuICAgICdAQFBBQ0tFVF9FUlJPUlMnLFxuICAgICdAQFRJTUVUSUNLUycsXG4gICAgJ0BAVE9UQUxfRVJST1JTJyxcbiAgICAnQEBUT1RBTF9SRUFEJyxcbiAgICAnQEBUT1RBTF9XUklURScsXG4gICAgJ1RFWFRQVFInLFxuICAgICdURVhUVkFMSUQnLFxuICBdLFxuICB0cmlnZ2VyOiBbJ0NPTFVNTlNfVVBEQVRFRCcsICdFVkVOVERBVEEnLCAnVFJJR0dFUl9ORVNUTEVWRUwnLCAnVVBEQVRFJ10sXG59O1xuXG4vLyBUT0RPOiBkZWR1cGUgdGhlc2UgcmVzZXJ2ZWQgd29yZCBsaXN0c1xuLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL2xhbmd1YWdlLWVsZW1lbnRzL3Jlc2VydmVkLWtleXdvcmRzLXRyYW5zYWN0LXNxbD92aWV3PXNxbC1zZXJ2ZXItdmVyMTVcbi8qKlxuICogUHJpb3JpdHkgNSAobGFzdClcbiAqIEZ1bGwgbGlzdCBvZiByZXNlcnZlZCB3b3Jkc1xuICogYW55IHdvcmRzIHRoYXQgYXJlIGluIGEgaGlnaGVyIHByaW9yaXR5IGFyZSByZW1vdmVkXG4gKi9cbmNvbnN0IHJlc2VydmVkS2V5d29yZHMgPSB7XG4gIHN0YW5kYXJkOiBbXG4gICAgJ0FERCcsXG4gICAgJ0FMTCcsXG4gICAgJ0FMVEVSJyxcbiAgICAnQU5EJyxcbiAgICAnQU5ZJyxcbiAgICAnQVMnLFxuICAgICdBU0MnLFxuICAgICdBVVRIT1JJWkFUSU9OJyxcbiAgICAnQkFDS1VQJyxcbiAgICAnQkVHSU4nLFxuICAgICdCRVRXRUVOJyxcbiAgICAnQlJFQUsnLFxuICAgICdCUk9XU0UnLFxuICAgICdCVUxLJyxcbiAgICAnQlknLFxuICAgICdDQVNDQURFJyxcbiAgICAnQ0FTRScsXG4gICAgJ0NIRUNLJyxcbiAgICAnQ0hFQ0tQT0lOVCcsXG4gICAgJ0NMT1NFJyxcbiAgICAnQ0xVU1RFUkVEJyxcbiAgICAnQ09BTEVTQ0UnLFxuICAgICdDT0xMQVRFJyxcbiAgICAnQ09MVU1OJyxcbiAgICAnQ09NTUlUJyxcbiAgICAnQ09NUFVURScsXG4gICAgJ0NPTlNUUkFJTlQnLFxuICAgICdDT05UQUlOUycsXG4gICAgJ0NPTlRBSU5TVEFCTEUnLFxuICAgICdDT05USU5VRScsXG4gICAgJ0NPTlZFUlQnLFxuICAgICdDUkVBVEUnLFxuICAgICdDUk9TUycsXG4gICAgJ0NVUlJFTlQnLFxuICAgICdDVVJSRU5UX0RBVEUnLFxuICAgICdDVVJSRU5UX1RJTUUnLFxuICAgICdDVVJSRU5UX1RJTUVTVEFNUCcsXG4gICAgJ0NVUlJFTlRfVVNFUicsXG4gICAgJ0NVUlNPUicsXG4gICAgJ0RBVEFCQVNFJyxcbiAgICAnREJDQycsXG4gICAgJ0RFQUxMT0NBVEUnLFxuICAgICdERUNMQVJFJyxcbiAgICAnREVGQVVMVCcsXG4gICAgJ0RFTEVURScsXG4gICAgJ0RFTlknLFxuICAgICdERVNDJyxcbiAgICAnRElTSycsXG4gICAgJ0RJU1RJTkNUJyxcbiAgICAnRElTVFJJQlVURUQnLFxuICAgICdET1VCTEUnLFxuICAgICdEUk9QJyxcbiAgICAnRFVNUCcsXG4gICAgJ0VSUkxWTCcsXG4gICAgJ0VTQ0FQRScsXG4gICAgJ0VYRUMnLFxuICAgICdFWEVDVVRFJyxcbiAgICAnRVhJU1RTJyxcbiAgICAnRVhJVCcsXG4gICAgJ0VYVEVSTkFMJyxcbiAgICAnRkVUQ0gnLFxuICAgICdGSUxFJyxcbiAgICAnRklMTEZBQ1RPUicsXG4gICAgJ0ZPUicsXG4gICAgJ0ZPUkVJR04nLFxuICAgICdGUkVFVEVYVCcsXG4gICAgJ0ZSRUVURVhUVEFCTEUnLFxuICAgICdGUk9NJyxcbiAgICAnRlVMTCcsXG4gICAgJ0ZVTkNUSU9OJyxcbiAgICAnR09UTycsXG4gICAgJ0dSQU5UJyxcbiAgICAnR1JPVVAnLFxuICAgICdIQVZJTkcnLFxuICAgICdIT0xETE9DSycsXG4gICAgJ0lERU5USVRZJyxcbiAgICAnSURFTlRJVFlDT0wnLFxuICAgICdJREVOVElUWV9JTlNFUlQnLFxuICAgICdJRicsXG4gICAgJ0lOJyxcbiAgICAnSU5ERVgnLFxuICAgICdJTk5FUicsXG4gICAgJ0lOU0VSVCcsXG4gICAgJ0lOVEVSU0VDVCcsXG4gICAgJ0lOVE8nLFxuICAgICdJUycsXG4gICAgJ0pPSU4nLFxuICAgICdLRVknLFxuICAgICdLSUxMJyxcbiAgICAnTEVGVCcsXG4gICAgJ0xJS0UnLFxuICAgICdMSU5FTk8nLFxuICAgICdMT0FEJyxcbiAgICAnTUVSR0UnLFxuICAgICdOQVRJT05BTCcsXG4gICAgJ05PQ0hFQ0snLFxuICAgICdOT05DTFVTVEVSRUQnLFxuICAgICdOT1QnLFxuICAgICdOVUxMJyxcbiAgICAnTlVMTElGJyxcbiAgICAnT0YnLFxuICAgICdPRkYnLFxuICAgICdPRkZTRVRTJyxcbiAgICAnT04gREVMRVRFJyxcbiAgICAnT04gVVBEQVRFJyxcbiAgICAnT1BFTicsXG4gICAgJ09QRU5EQVRBU09VUkNFJyxcbiAgICAnT1BFTlFVRVJZJyxcbiAgICAnT1BFTlJPV1NFVCcsXG4gICAgJ09QRU5YTUwnLFxuICAgICdPUFRJT04nLFxuICAgICdPUicsXG4gICAgJ09SREVSJyxcbiAgICAnT1VURVInLFxuICAgICdPVkVSJyxcbiAgICAnUEVSQ0VOVCcsXG4gICAgJ1BJVk9UJyxcbiAgICAnUExBTicsXG4gICAgJ1BSRUNJU0lPTicsXG4gICAgJ1BSSU1BUlknLFxuICAgICdQUklOVCcsXG4gICAgJ1BST0MnLFxuICAgICdQUk9DRURVUkUnLFxuICAgICdQVUJMSUMnLFxuICAgICdSQUlTRVJST1InLFxuICAgICdSRUFEJyxcbiAgICAnUkVBRFRFWFQnLFxuICAgICdSRUNPTkZJR1VSRScsXG4gICAgJ1JFRkVSRU5DRVMnLFxuICAgICdSRVBMSUNBVElPTicsXG4gICAgJ1JFU1RPUkUnLFxuICAgICdSRVNUUklDVCcsXG4gICAgJ1JFVFVSTicsXG4gICAgJ1JFVkVSVCcsXG4gICAgJ1JFVk9LRScsXG4gICAgJ1JJR0hUJyxcbiAgICAnUk9MTEJBQ0snLFxuICAgICdST1dDT1VOVCcsXG4gICAgJ1JPV0dVSURDT0wnLFxuICAgICdSVUxFJyxcbiAgICAnU0FWRScsXG4gICAgJ1NDSEVNQScsXG4gICAgJ1NFQ1VSSVRZQVVESVQnLFxuICAgICdTRUxFQ1QnLFxuICAgICdTRU1BTlRJQ0tFWVBIUkFTRVRBQkxFJyxcbiAgICAnU0VNQU5USUNTSU1JTEFSSVRZREVUQUlMU1RBQkxFJyxcbiAgICAnU0VNQU5USUNTSU1JTEFSSVRZVEFCTEUnLFxuICAgICdTRVNTSU9OX1VTRVInLFxuICAgICdTRVQnLFxuICAgICdTRVRVU0VSJyxcbiAgICAnU0hVVERPV04nLFxuICAgICdTT01FJyxcbiAgICAnU1RBVElTVElDUycsXG4gICAgJ1NZU1RFTV9VU0VSJyxcbiAgICAnVEFCTEUnLFxuICAgICdUQUJMRVNBTVBMRScsXG4gICAgJ1RFWFRTSVpFJyxcbiAgICAnVEhFTicsXG4gICAgJ1RPJyxcbiAgICAnVE9QJyxcbiAgICAnVFJBTicsXG4gICAgJ1RSQU5TQUNUSU9OJyxcbiAgICAnVFJJR0dFUicsXG4gICAgJ1RSVU5DQVRFJyxcbiAgICAnVFJZX0NPTlZFUlQnLFxuICAgICdUU0VRVUFMJyxcbiAgICAnVU5JT04nLFxuICAgICdVTklRVUUnLFxuICAgICdVTlBJVk9UJyxcbiAgICAnVVBEQVRFJyxcbiAgICAnVVBEQVRFVEVYVCcsXG4gICAgJ1VTRScsXG4gICAgJ1VTRVInLFxuICAgICdWQUxVRVMnLFxuICAgICdWQVJZSU5HJyxcbiAgICAnVklFVycsXG4gICAgJ1dBSVRGT1InLFxuICAgICdXSEVSRScsXG4gICAgJ1dISUxFJyxcbiAgICAnV0lUSCcsXG4gICAgJ1dJVEhJTiBHUk9VUCcsXG4gICAgJ1dSSVRFVEVYVCcsXG4gIF0sXG4gIG9kYmM6IFtcbiAgICAnQUJTT0xVVEUnLFxuICAgICdBQ1RJT04nLFxuICAgICdBREEnLFxuICAgICdBREQnLFxuICAgICdBTEwnLFxuICAgICdBTExPQ0FURScsXG4gICAgJ0FMVEVSJyxcbiAgICAnQU5EJyxcbiAgICAnQU5ZJyxcbiAgICAnQVJFJyxcbiAgICAnQVMnLFxuICAgICdBU0MnLFxuICAgICdBU1NFUlRJT04nLFxuICAgICdBVCcsXG4gICAgJ0FVVEhPUklaQVRJT04nLFxuICAgICdBVkcnLFxuICAgICdCRUdJTicsXG4gICAgJ0JFVFdFRU4nLFxuICAgICdCSVQnLFxuICAgICdCSVRfTEVOR1RIJyxcbiAgICAnQk9USCcsXG4gICAgJ0JZJyxcbiAgICAnQ0FTQ0FERScsXG4gICAgJ0NBU0NBREVEJyxcbiAgICAnQ0FTRScsXG4gICAgJ0NBU1QnLFxuICAgICdDQVRBTE9HJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJBQ1RFUicsXG4gICAgJ0NIQVJBQ1RFUl9MRU5HVEgnLFxuICAgICdDSEFSX0xFTkdUSCcsXG4gICAgJ0NIRUNLJyxcbiAgICAnQ0xPU0UnLFxuICAgICdDT0FMRVNDRScsXG4gICAgJ0NPTExBVEUnLFxuICAgICdDT0xMQVRJT04nLFxuICAgICdDT0xVTU4nLFxuICAgICdDT01NSVQnLFxuICAgICdDT05ORUNUJyxcbiAgICAnQ09OTkVDVElPTicsXG4gICAgJ0NPTlNUUkFJTlQnLFxuICAgICdDT05TVFJBSU5UUycsXG4gICAgJ0NPTlRJTlVFJyxcbiAgICAnQ09OVkVSVCcsXG4gICAgJ0NPUlJFU1BPTkRJTkcnLFxuICAgICdDT1VOVCcsXG4gICAgJ0NSRUFURScsXG4gICAgJ0NST1NTJyxcbiAgICAnQ1VSUkVOVCcsXG4gICAgJ0NVUlJFTlRfREFURScsXG4gICAgJ0NVUlJFTlRfVElNRScsXG4gICAgJ0NVUlJFTlRfVElNRVNUQU1QJyxcbiAgICAnQ1VSUkVOVF9VU0VSJyxcbiAgICAnQ1VSU09SJyxcbiAgICAnREFURScsXG4gICAgJ0RBWScsXG4gICAgJ0RFQUxMT0NBVEUnLFxuICAgICdERUMnLFxuICAgICdERUNJTUFMJyxcbiAgICAnREVDTEFSRScsXG4gICAgJ0RFRkFVTFQnLFxuICAgICdERUZFUlJBQkxFJyxcbiAgICAnREVGRVJSRUQnLFxuICAgICdERUxFVEUnLFxuICAgICdERVNDJyxcbiAgICAnREVTQ1JJQkUnLFxuICAgICdERVNDUklQVE9SJyxcbiAgICAnRElBR05PU1RJQ1MnLFxuICAgICdESVNDT05ORUNUJyxcbiAgICAnRElTVElOQ1QnLFxuICAgICdET01BSU4nLFxuICAgICdET1VCTEUnLFxuICAgICdEUk9QJyxcbiAgICAnRU5ELUVYRUMnLFxuICAgICdFU0NBUEUnLFxuICAgICdFWENFUFRJT04nLFxuICAgICdFWEVDJyxcbiAgICAnRVhFQ1VURScsXG4gICAgJ0VYSVNUUycsXG4gICAgJ0VYVEVSTkFMJyxcbiAgICAnRVhUUkFDVCcsXG4gICAgJ0ZBTFNFJyxcbiAgICAnRkVUQ0gnLFxuICAgICdGSVJTVCcsXG4gICAgJ0ZMT0FUJyxcbiAgICAnRk9SJyxcbiAgICAnRk9SRUlHTicsXG4gICAgJ0ZPUlRSQU4nLFxuICAgICdGT1VORCcsXG4gICAgJ0ZST00nLFxuICAgICdGVUxMJyxcbiAgICAnR0VUJyxcbiAgICAnR0xPQkFMJyxcbiAgICAnR08nLFxuICAgICdHT1RPJyxcbiAgICAnR1JBTlQnLFxuICAgICdHUk9VUCcsXG4gICAgJ0hBVklORycsXG4gICAgJ0hPVVInLFxuICAgICdJREVOVElUWScsXG4gICAgJ0lNTUVESUFURScsXG4gICAgJ0lOJyxcbiAgICAnSU5DTFVERScsXG4gICAgJ0lOREVYJyxcbiAgICAnSU5ESUNBVE9SJyxcbiAgICAnSU5JVElBTExZJyxcbiAgICAnSU5ORVInLFxuICAgICdJTlBVVCcsXG4gICAgJ0lOU0VOU0lUSVZFJyxcbiAgICAnSU5TRVJUJyxcbiAgICAnSU5UJyxcbiAgICAnSU5URUdFUicsXG4gICAgJ0lOVEVSU0VDVCcsXG4gICAgJ0lOVEVSVkFMJyxcbiAgICAnSU5UTycsXG4gICAgJ0lTJyxcbiAgICAnSVNPTEFUSU9OJyxcbiAgICAnSk9JTicsXG4gICAgJ0tFWScsXG4gICAgJ0xBTkdVQUdFJyxcbiAgICAnTEFTVCcsXG4gICAgJ0xFQURJTkcnLFxuICAgICdMRUZUJyxcbiAgICAnTEVWRUwnLFxuICAgICdMSUtFJyxcbiAgICAnTE9DQUwnLFxuICAgICdMT1dFUicsXG4gICAgJ01BVENIJyxcbiAgICAnTUFYJyxcbiAgICAnTUlOJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9EVUxFJyxcbiAgICAnTU9OVEgnLFxuICAgICdOQU1FUycsXG4gICAgJ05BVElPTkFMJyxcbiAgICAnTkFUVVJBTCcsXG4gICAgJ05DSEFSJyxcbiAgICAnTkVYVCcsXG4gICAgJ05PJyxcbiAgICAnTk9ORScsXG4gICAgJ05PVCcsXG4gICAgJ05VTEwnLFxuICAgICdOVUxMSUYnLFxuICAgICdOVU1FUklDJyxcbiAgICAnT0NURVRfTEVOR1RIJyxcbiAgICAnT0YnLFxuICAgICdPTkxZJyxcbiAgICAnT1BFTicsXG4gICAgJ09QVElPTicsXG4gICAgJ09SJyxcbiAgICAnT1JERVInLFxuICAgICdPVVRFUicsXG4gICAgJ09VVFBVVCcsXG4gICAgJ09WRVJMQVBTJyxcbiAgICAnUEFEJyxcbiAgICAnUEFSVElBTCcsXG4gICAgJ1BBU0NBTCcsXG4gICAgJ1BPU0lUSU9OJyxcbiAgICAnUFJFQ0lTSU9OJyxcbiAgICAnUFJFUEFSRScsXG4gICAgJ1BSRVNFUlZFJyxcbiAgICAnUFJJTUFSWScsXG4gICAgJ1BSSU9SJyxcbiAgICAnUFJJVklMRUdFUycsXG4gICAgJ1BST0NFRFVSRScsXG4gICAgJ1BVQkxJQycsXG4gICAgJ1JFQUQnLFxuICAgICdSRUFMJyxcbiAgICAnUkVGRVJFTkNFUycsXG4gICAgJ1JFTEFUSVZFJyxcbiAgICAnUkVTVFJJQ1QnLFxuICAgICdSRVZPS0UnLFxuICAgICdSSUdIVCcsXG4gICAgJ1JPTExCQUNLJyxcbiAgICAnUk9XUycsXG4gICAgJ1NDSEVNQScsXG4gICAgJ1NDUk9MTCcsXG4gICAgJ1NFQ09ORCcsXG4gICAgJ1NFQ1RJT04nLFxuICAgICdTRUxFQ1QnLFxuICAgICdTRVNTSU9OJyxcbiAgICAnU0VTU0lPTl9VU0VSJyxcbiAgICAnU0VUJyxcbiAgICAnU0laRScsXG4gICAgJ1NNQUxMSU5UJyxcbiAgICAnU09NRScsXG4gICAgJ1NQQUNFJyxcbiAgICAnU1FMJyxcbiAgICAnU1FMQ0EnLFxuICAgICdTUUxDT0RFJyxcbiAgICAnU1FMRVJST1InLFxuICAgICdTUUxTVEFURScsXG4gICAgJ1NRTFdBUk5JTkcnLFxuICAgICdTVUJTVFJJTkcnLFxuICAgICdTVU0nLFxuICAgICdTWVNURU1fVVNFUicsXG4gICAgJ1RBQkxFJyxcbiAgICAnVEVNUE9SQVJZJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVaT05FX0hPVVInLFxuICAgICdUSU1FWk9ORV9NSU5VVEUnLFxuICAgICdUTycsXG4gICAgJ1RSQUlMSU5HJyxcbiAgICAnVFJBTlNBQ1RJT04nLFxuICAgICdUUkFOU0xBVEUnLFxuICAgICdUUkFOU0xBVElPTicsXG4gICAgJ1RSSU0nLFxuICAgICdUUlVFJyxcbiAgICAnVU5JT04nLFxuICAgICdVTklRVUUnLFxuICAgICdVTktOT1dOJyxcbiAgICAnVVBEQVRFJyxcbiAgICAnVVBQRVInLFxuICAgICdVU0FHRScsXG4gICAgJ1VTRVInLFxuICAgICdWQUxVRScsXG4gICAgJ1ZBTFVFUycsXG4gICAgJ1ZBUkNIQVInLFxuICAgICdWQVJZSU5HJyxcbiAgICAnVklFVycsXG4gICAgJ1dIRU5FVkVSJyxcbiAgICAnV0hFUkUnLFxuICAgICdXSVRIJyxcbiAgICAnV09SSycsXG4gICAgJ1dSSVRFJyxcbiAgICAnWUVBUicsXG4gICAgJ1pPTkUnLFxuICBdLFxuICBmdXR1cmU6IFtcbiAgICAnQUJTT0xVVEUnLFxuICAgICdBQ1RJT04nLFxuICAgICdBRE1JTicsXG4gICAgJ0FGVEVSJyxcbiAgICAnQUdHUkVHQVRFJyxcbiAgICAnQUxJQVMnLFxuICAgICdBTExPQ0FURScsXG4gICAgJ0FSRScsXG4gICAgJ0FSUkFZJyxcbiAgICAnQVNFTlNJVElWRScsXG4gICAgJ0FTU0VSVElPTicsXG4gICAgJ0FTWU1NRVRSSUMnLFxuICAgICdBVCcsXG4gICAgJ0FUT01JQycsXG4gICAgJ0JFRk9SRScsXG4gICAgJ0JJTkFSWScsXG4gICAgJ0JJVCcsXG4gICAgJ0JMT0InLFxuICAgICdCT09MRUFOJyxcbiAgICAnQk9USCcsXG4gICAgJ0JSRUFEVEgnLFxuICAgICdDQUxMJyxcbiAgICAnQ0FMTEVEJyxcbiAgICAnQ0FSRElOQUxJVFknLFxuICAgICdDQVNDQURFRCcsXG4gICAgJ0NBU1QnLFxuICAgICdDQVRBTE9HJyxcbiAgICAnQ0hBUicsXG4gICAgJ0NIQVJBQ1RFUicsXG4gICAgJ0NMQVNTJyxcbiAgICAnQ0xPQicsXG4gICAgJ0NPTExBVElPTicsXG4gICAgJ0NPTExFQ1QnLFxuICAgICdDT01QTEVUSU9OJyxcbiAgICAnQ09ORElUSU9OJyxcbiAgICAnQ09OTkVDVCcsXG4gICAgJ0NPTk5FQ1RJT04nLFxuICAgICdDT05TVFJBSU5UUycsXG4gICAgJ0NPTlNUUlVDVE9SJyxcbiAgICAnQ09SUicsXG4gICAgJ0NPUlJFU1BPTkRJTkcnLFxuICAgICdDT1ZBUl9QT1AnLFxuICAgICdDT1ZBUl9TQU1QJyxcbiAgICAnQ1VCRScsXG4gICAgJ0NVTUVfRElTVCcsXG4gICAgJ0NVUlJFTlRfQ0FUQUxPRycsXG4gICAgJ0NVUlJFTlRfREVGQVVMVF9UUkFOU0ZPUk1fR1JPVVAnLFxuICAgICdDVVJSRU5UX1BBVEgnLFxuICAgICdDVVJSRU5UX1JPTEUnLFxuICAgICdDVVJSRU5UX1NDSEVNQScsXG4gICAgJ0NVUlJFTlRfVFJBTlNGT1JNX0dST1VQX0ZPUl9UWVBFJyxcbiAgICAnQ1lDTEUnLFxuICAgICdEQVRBJyxcbiAgICAnREFURScsXG4gICAgJ0RBWScsXG4gICAgJ0RFQycsXG4gICAgJ0RFQ0lNQUwnLFxuICAgICdERUZFUlJBQkxFJyxcbiAgICAnREVGRVJSRUQnLFxuICAgICdERVBUSCcsXG4gICAgJ0RFUkVGJyxcbiAgICAnREVTQ1JJQkUnLFxuICAgICdERVNDUklQVE9SJyxcbiAgICAnREVTVFJPWScsXG4gICAgJ0RFU1RSVUNUT1InLFxuICAgICdERVRFUk1JTklTVElDJyxcbiAgICAnRElBR05PU1RJQ1MnLFxuICAgICdESUNUSU9OQVJZJyxcbiAgICAnRElTQ09OTkVDVCcsXG4gICAgJ0RPTUFJTicsXG4gICAgJ0RZTkFNSUMnLFxuICAgICdFQUNIJyxcbiAgICAnRUxFTUVOVCcsXG4gICAgJ0VORC1FWEVDJyxcbiAgICAnRVFVQUxTJyxcbiAgICAnRVZFUlknLFxuICAgICdGQUxTRScsXG4gICAgJ0ZJTFRFUicsXG4gICAgJ0ZJUlNUJyxcbiAgICAnRkxPQVQnLFxuICAgICdGT1VORCcsXG4gICAgJ0ZSRUUnLFxuICAgICdGVUxMVEVYVFRBQkxFJyxcbiAgICAnRlVTSU9OJyxcbiAgICAnR0VORVJBTCcsXG4gICAgJ0dFVCcsXG4gICAgJ0dMT0JBTCcsXG4gICAgJ0dPJyxcbiAgICAnR1JPVVBJTkcnLFxuICAgICdIT0xEJyxcbiAgICAnSE9TVCcsXG4gICAgJ0hPVVInLFxuICAgICdJR05PUkUnLFxuICAgICdJTU1FRElBVEUnLFxuICAgICdJTkRJQ0FUT1InLFxuICAgICdJTklUSUFMSVpFJyxcbiAgICAnSU5JVElBTExZJyxcbiAgICAnSU5PVVQnLFxuICAgICdJTlBVVCcsXG4gICAgJ0lOVCcsXG4gICAgJ0lOVEVHRVInLFxuICAgICdJTlRFUlNFQ1RJT04nLFxuICAgICdJTlRFUlZBTCcsXG4gICAgJ0lTT0xBVElPTicsXG4gICAgJ0lURVJBVEUnLFxuICAgICdMQU5HVUFHRScsXG4gICAgJ0xBUkdFJyxcbiAgICAnTEFTVCcsXG4gICAgJ0xBVEVSQUwnLFxuICAgICdMRUFESU5HJyxcbiAgICAnTEVTUycsXG4gICAgJ0xFVkVMJyxcbiAgICAnTElLRV9SRUdFWCcsXG4gICAgJ0xJTUlUJyxcbiAgICAnTE4nLFxuICAgICdMT0NBTCcsXG4gICAgJ0xPQ0FMVElNRScsXG4gICAgJ0xPQ0FMVElNRVNUQU1QJyxcbiAgICAnTE9DQVRPUicsXG4gICAgJ01BUCcsXG4gICAgJ01BVENIJyxcbiAgICAnTUVNQkVSJyxcbiAgICAnTUVUSE9EJyxcbiAgICAnTUlOVVRFJyxcbiAgICAnTU9EJyxcbiAgICAnTU9ESUZJRVMnLFxuICAgICdNT0RJRlknLFxuICAgICdNT0RVTEUnLFxuICAgICdNT05USCcsXG4gICAgJ01VTFRJU0VUJyxcbiAgICAnTkFNRVMnLFxuICAgICdOQVRVUkFMJyxcbiAgICAnTkNIQVInLFxuICAgICdOQ0xPQicsXG4gICAgJ05FVycsXG4gICAgJ05FWFQnLFxuICAgICdOTycsXG4gICAgJ05PTkUnLFxuICAgICdOT1JNQUxJWkUnLFxuICAgICdOVU1FUklDJyxcbiAgICAnT0JKRUNUJyxcbiAgICAnT0NDVVJSRU5DRVNfUkVHRVgnLFxuICAgICdPTEQnLFxuICAgICdPTkxZJyxcbiAgICAnT1BFUkFUSU9OJyxcbiAgICAnT1JESU5BTElUWScsXG4gICAgJ09VVCcsXG4gICAgJ09VVFBVVCcsXG4gICAgJ09WRVJMQVknLFxuICAgICdQQUQnLFxuICAgICdQQVJBTUVURVInLFxuICAgICdQQVJBTUVURVJTJyxcbiAgICAnUEFSVElBTCcsXG4gICAgJ1BBUlRJVElPTicsXG4gICAgJ1BBVEgnLFxuICAgICdQRVJDRU5USUxFX0NPTlQnLFxuICAgICdQRVJDRU5USUxFX0RJU0MnLFxuICAgICdQRVJDRU5UX1JBTksnLFxuICAgICdQT1NJVElPTl9SRUdFWCcsXG4gICAgJ1BPU1RGSVgnLFxuICAgICdQUkVGSVgnLFxuICAgICdQUkVPUkRFUicsXG4gICAgJ1BSRVBBUkUnLFxuICAgICdQUkVTRVJWRScsXG4gICAgJ1BSSU9SJyxcbiAgICAnUFJJVklMRUdFUycsXG4gICAgJ1JBTkdFJyxcbiAgICAnUkVBRFMnLFxuICAgICdSRUFMJyxcbiAgICAnUkVDVVJTSVZFJyxcbiAgICAnUkVGJyxcbiAgICAnUkVGRVJFTkNJTkcnLFxuICAgICdSRUdSX0FWR1gnLFxuICAgICdSRUdSX0FWR1knLFxuICAgICdSRUdSX0NPVU5UJyxcbiAgICAnUkVHUl9JTlRFUkNFUFQnLFxuICAgICdSRUdSX1IyJyxcbiAgICAnUkVHUl9TTE9QRScsXG4gICAgJ1JFR1JfU1hYJyxcbiAgICAnUkVHUl9TWFknLFxuICAgICdSRUdSX1NZWScsXG4gICAgJ1JFTEFUSVZFJyxcbiAgICAnUkVMRUFTRScsXG4gICAgJ1JFU1VMVCcsXG4gICAgJ1JFVFVSTlMnLFxuICAgICdST0xFJyxcbiAgICAnUk9MTFVQJyxcbiAgICAnUk9VVElORScsXG4gICAgJ1JPVycsXG4gICAgJ1JPV1MnLFxuICAgICdTQVZFUE9JTlQnLFxuICAgICdTQ09QRScsXG4gICAgJ1NDUk9MTCcsXG4gICAgJ1NFQVJDSCcsXG4gICAgJ1NFQ09ORCcsXG4gICAgJ1NFQ1RJT04nLFxuICAgICdTRU5TSVRJVkUnLFxuICAgICdTRVFVRU5DRScsXG4gICAgJ1NFU1NJT04nLFxuICAgICdTRVRTJyxcbiAgICAnU0lNSUxBUicsXG4gICAgJ1NJWkUnLFxuICAgICdTTUFMTElOVCcsXG4gICAgJ1NQQUNFJyxcbiAgICAnU1BFQ0lGSUMnLFxuICAgICdTUEVDSUZJQ1RZUEUnLFxuICAgICdTUUwnLFxuICAgICdTUUxFWENFUFRJT04nLFxuICAgICdTUUxTVEFURScsXG4gICAgJ1NRTFdBUk5JTkcnLFxuICAgICdTVEFSVCcsXG4gICAgJ1NUQVRFJyxcbiAgICAnU1RBVEVNRU5UJyxcbiAgICAnU1RBVElDJyxcbiAgICAnU1REREVWX1BPUCcsXG4gICAgJ1NURERFVl9TQU1QJyxcbiAgICAnU1RSVUNUVVJFJyxcbiAgICAnU1VCTVVMVElTRVQnLFxuICAgICdTVUJTVFJJTkdfUkVHRVgnLFxuICAgICdTWU1NRVRSSUMnLFxuICAgICdTWVNURU0nLFxuICAgICdURU1QT1JBUlknLFxuICAgICdURVJNSU5BVEUnLFxuICAgICdUSEFOJyxcbiAgICAnVElNRScsXG4gICAgJ1RJTUVTVEFNUCcsXG4gICAgJ1RJTUVaT05FX0hPVVInLFxuICAgICdUSU1FWk9ORV9NSU5VVEUnLFxuICAgICdUUkFJTElORycsXG4gICAgJ1RSQU5TTEFURV9SRUdFWCcsXG4gICAgJ1RSQU5TTEFUSU9OJyxcbiAgICAnVFJFQVQnLFxuICAgICdUUlVFJyxcbiAgICAnVUVTQ0FQRScsXG4gICAgJ1VOREVSJyxcbiAgICAnVU5LTk9XTicsXG4gICAgJ1VOTkVTVCcsXG4gICAgJ1VTQUdFJyxcbiAgICAnVVNJTkcnLFxuICAgICdWQUxVRScsXG4gICAgJ1ZBUkNIQVInLFxuICAgICdWQVJJQUJMRScsXG4gICAgJ1ZBUl9QT1AnLFxuICAgICdWQVJfU0FNUCcsXG4gICAgJ1dIRU5FVkVSJyxcbiAgICAnV0lEVEhfQlVDS0VUJyxcbiAgICAnV0lORE9XJyxcbiAgICAnV0lUSElOJyxcbiAgICAnV0lUSE9VVCcsXG4gICAgJ1dPUksnLFxuICAgICdXUklURScsXG4gICAgJ1hNTEFHRycsXG4gICAgJ1hNTEFUVFJJQlVURVMnLFxuICAgICdYTUxCSU5BUlknLFxuICAgICdYTUxDQVNUJyxcbiAgICAnWE1MQ09NTUVOVCcsXG4gICAgJ1hNTENPTkNBVCcsXG4gICAgJ1hNTERPQ1VNRU5UJyxcbiAgICAnWE1MRUxFTUVOVCcsXG4gICAgJ1hNTEVYSVNUUycsXG4gICAgJ1hNTEZPUkVTVCcsXG4gICAgJ1hNTElURVJBVEUnLFxuICAgICdYTUxOQU1FU1BBQ0VTJyxcbiAgICAnWE1MUEFSU0UnLFxuICAgICdYTUxQSScsXG4gICAgJ1hNTFFVRVJZJyxcbiAgICAnWE1MU0VSSUFMSVpFJyxcbiAgICAnWE1MVEFCTEUnLFxuICAgICdYTUxURVhUJyxcbiAgICAnWE1MVkFMSURBVEUnLFxuICAgICdZRUFSJyxcbiAgICAnWk9ORScsXG4gIF0sXG59O1xuXG4vKipcbiAqIFByaW9yaXR5IDEgKGZpcnN0KVxuICoga2V5d29yZHMgdGhhdCBiZWdpbiBhIG5ldyBzdGF0ZW1lbnRcbiAqIHdpbGwgYmVnaW4gbmV3IGluZGVudGVkIGJsb2NrXG4gKi9cbi8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9zdGF0ZW1lbnRzL3N0YXRlbWVudHM/dmlldz1zcWwtc2VydmVyLXZlcjE1XG5jb25zdCByZXNlcnZlZENvbW1hbmRzID0gW1xuICAnQUREIFNFTlNJVElWSVRZIENMQVNTSUZJQ0FUSU9OJyxcbiAgJ0FERCBTSUdOQVRVUkUnLFxuICAnQUdHUkVHQVRFJyxcbiAgJ0FOU0lfREVGQVVMVFMnLFxuICAnQU5TSV9OVUxMUycsXG4gICdBTlNJX05VTExfREZMVF9PRkYnLFxuICAnQU5TSV9OVUxMX0RGTFRfT04nLFxuICAnQU5TSV9QQURESU5HJyxcbiAgJ0FOU0lfV0FSTklOR1MnLFxuICAnQVBQTElDQVRJT04gUk9MRScsXG4gICdBUklUSEFCT1JUJyxcbiAgJ0FSSVRISUdOT1JFJyxcbiAgJ0FTU0VNQkxZJyxcbiAgJ0FTWU1NRVRSSUMgS0VZJyxcbiAgJ0FVVEhPUklaQVRJT04nLFxuICAnQVZBSUxBQklMSVRZIEdST1VQJyxcbiAgJ0JBQ0tVUCcsXG4gICdCQUNLVVAgQ0VSVElGSUNBVEUnLFxuICAnQkFDS1VQIE1BU1RFUiBLRVknLFxuICAnQkFDS1VQIFNFUlZJQ0UgTUFTVEVSIEtFWScsXG4gICdCRUdJTiBDT05WRVJTQVRJT04gVElNRVInLFxuICAnQkVHSU4gRElBTE9HIENPTlZFUlNBVElPTicsXG4gICdCUk9LRVIgUFJJT1JJVFknLFxuICAnQlVMSyBJTlNFUlQnLFxuICAnQ0VSVElGSUNBVEUnLFxuICAnQ0xPU0UgTUFTVEVSIEtFWScsXG4gICdDTE9TRSBTWU1NRVRSSUMgS0VZJyxcbiAgJ0NPTExBVEUnLFxuICAnQ09MVU1OIEVOQ1JZUFRJT04gS0VZJyxcbiAgJ0NPTFVNTiBNQVNURVIgS0VZJyxcbiAgJ0NPTFVNTlNUT1JFIElOREVYJyxcbiAgJ0NPTkNBVF9OVUxMX1lJRUxEU19OVUxMJyxcbiAgJ0NPTlRFWFRfSU5GTycsXG4gICdDT05UUkFDVCcsXG4gICdDUkVERU5USUFMJyxcbiAgJ0NSWVBUT0dSQVBISUMgUFJPVklERVInLFxuICAnQ1VSU09SX0NMT1NFX09OX0NPTU1JVCcsXG4gICdEQVRBQkFTRScsXG4gICdEQVRBQkFTRSBBVURJVCBTUEVDSUZJQ0FUSU9OJyxcbiAgJ0RBVEFCQVNFIEVOQ1JZUFRJT04gS0VZJyxcbiAgJ0RBVEFCQVNFIEhBRFInLFxuICAnREFUQUJBU0UgU0NPUEVEIENPTkZJR1VSQVRJT04nLFxuICAnREFUQUJBU0UgU0NPUEVEIENSRURFTlRJQUwnLFxuICAnREFUQUJBU0UgU0VUJyxcbiAgJ0RBVEVGSVJTVCcsXG4gICdEQVRFRk9STUFUJyxcbiAgJ0RFQURMT0NLX1BSSU9SSVRZJyxcbiAgJ0RFRkFVTFQnLFxuICAnREVMRVRFJyxcbiAgJ0RFTlknLFxuICAnREVOWSBYTUwnLFxuICAnRElTQUJMRSBUUklHR0VSJyxcbiAgJ0VOQUJMRSBUUklHR0VSJyxcbiAgJ0VORCBDT05WRVJTQVRJT04nLFxuICAnRU5EUE9JTlQnLFxuICAnRVZFTlQgTk9USUZJQ0FUSU9OJyxcbiAgJ0VWRU5UIFNFU1NJT04nLFxuICAnRVhFQ1VURSBBUycsXG4gICdFWFRFUk5BTCBEQVRBIFNPVVJDRScsXG4gICdFWFRFUk5BTCBGSUxFIEZPUk1BVCcsXG4gICdFWFRFUk5BTCBMQU5HVUFHRScsXG4gICdFWFRFUk5BTCBMSUJSQVJZJyxcbiAgJ0VYVEVSTkFMIFJFU09VUkNFIFBPT0wnLFxuICAnRVhURVJOQUwgVEFCTEUnLFxuICAnRklQU19GTEFHR0VSJyxcbiAgJ0ZNVE9OTFknLFxuICAnRk9SQ0VQTEFOJyxcbiAgJ0ZVTExURVhUIENBVEFMT0cnLFxuICAnRlVMTFRFWFQgSU5ERVgnLFxuICAnRlVMTFRFWFQgU1RPUExJU1QnLFxuICAnRlVOQ1RJT04nLFxuICAnR0VUIENPTlZFUlNBVElPTiBHUk9VUCcsXG4gICdHRVRfVFJBTlNNSVNTSU9OX1NUQVRVUycsXG4gICdHUkFOVCcsXG4gICdHUkFOVCBYTUwnLFxuICAnSURFTlRJVFlfSU5TRVJUJyxcbiAgJ0lNUExJQ0lUX1RSQU5TQUNUSU9OUycsXG4gICdJTkRFWCcsXG4gICdJTlNFUlQnLFxuICAnTEFOR1VBR0UnLFxuICAnTE9DS19USU1FT1VUJyxcbiAgJ0xPR0lOJyxcbiAgJ01BU1RFUiBLRVknLFxuICAnTUVSR0UnLFxuICAnTUVTU0FHRSBUWVBFJyxcbiAgJ01PVkUgQ09OVkVSU0FUSU9OJyxcbiAgJ05PQ09VTlQnLFxuICAnTk9FWEVDJyxcbiAgJ05VTUVSSUNfUk9VTkRBQk9SVCcsXG4gICdPRkZTRVRTJyxcbiAgJ09QRU4gTUFTVEVSIEtFWScsXG4gICdPUEVOIFNZTU1FVFJJQyBLRVknLFxuICAnUEFSU0VPTkxZJyxcbiAgJ1BBUlRJVElPTiBGVU5DVElPTicsXG4gICdQQVJUSVRJT04gU0NIRU1FJyxcbiAgJ1BST0NFRFVSRScsXG4gICdRVUVSWV9HT1ZFUk5PUl9DT1NUX0xJTUlUJyxcbiAgJ1FVRVVFJyxcbiAgJ1FVT1RFRF9JREVOVElGSUVSJyxcbiAgJ1JFQ0VJVkUnLFxuICAnUkVNT1RFIFNFUlZJQ0UgQklORElORycsXG4gICdSRU1PVEVfUFJPQ19UUkFOU0FDVElPTlMnLFxuICAnUkVTT1VSQ0UgR09WRVJOT1InLFxuICAnUkVTT1VSQ0UgUE9PTCcsXG4gICdSRVNUT1JFJyxcbiAgJ1JFU1RPUkUgRklMRUxJU1RPTkxZJyxcbiAgJ1JFU1RPUkUgSEVBREVST05MWScsXG4gICdSRVNUT1JFIExBQkVMT05MWScsXG4gICdSRVNUT1JFIE1BU1RFUiBLRVknLFxuICAnUkVTVE9SRSBSRVdJTkRPTkxZJyxcbiAgJ1JFU1RPUkUgU0VSVklDRSBNQVNURVIgS0VZJyxcbiAgJ1JFU1RPUkUgVkVSSUZZT05MWScsXG4gICdSRVZFUlQnLFxuICAnUkVWT0tFJyxcbiAgJ1JFVk9LRSBYTUwnLFxuICAnUk9MRScsXG4gICdST1VURScsXG4gICdST1dDT1VOVCcsXG4gICdSVUxFJyxcbiAgJ1NDSEVNQScsXG4gICdTRUFSQ0ggUFJPUEVSVFkgTElTVCcsXG4gICdTRUNVUklUWSBQT0xJQ1knLFxuICAnU0VMRUNUSVZFIFhNTCBJTkRFWCcsXG4gICdTRU5EJyxcbiAgJ1NFTlNJVElWSVRZIENMQVNTSUZJQ0FUSU9OJyxcbiAgJ1NFUVVFTkNFJyxcbiAgJ1NFUlZFUiBBVURJVCcsXG4gICdTRVJWRVIgQVVESVQgU1BFQ0lGSUNBVElPTicsXG4gICdTRVJWRVIgQ09ORklHVVJBVElPTicsXG4gICdTRVJWRVIgUk9MRScsXG4gICdTRVJWSUNFJyxcbiAgJ1NFUlZJQ0UgTUFTVEVSIEtFWScsXG4gICdTRVQnLFxuICAnU0VUVVNFUicsXG4gICdTSE9XUExBTl9BTEwnLFxuICAnU0hPV1BMQU5fVEVYVCcsXG4gICdTSE9XUExBTl9YTUwnLFxuICAnU0lHTkFUVVJFJyxcbiAgJ1NQQVRJQUwgSU5ERVgnLFxuICAnU1RBVElTVElDUycsXG4gICdTVEFUSVNUSUNTIElPJyxcbiAgJ1NUQVRJU1RJQ1MgUFJPRklMRScsXG4gICdTVEFUSVNUSUNTIFRJTUUnLFxuICAnU1RBVElTVElDUyBYTUwnLFxuICAnU1lNTUVUUklDIEtFWScsXG4gICdTWU5PTllNJyxcbiAgJ1RBQkxFJyxcbiAgJ1RBQkxFIElERU5USVRZJyxcbiAgJ1RFWFRTSVpFJyxcbiAgJ1RSQU5TQUNUSU9OIElTT0xBVElPTiBMRVZFTCcsXG4gICdUUklHR0VSJyxcbiAgJ1RSVU5DQVRFIFRBQkxFJyxcbiAgJ1RZUEUnLFxuICAnVVBEQVRFJyxcbiAgJ1VQREFURSBTVEFUSVNUSUNTJyxcbiAgJ1VTRVInLFxuICAnVklFVycsXG4gICdXT1JLTE9BRCBHUk9VUCcsXG4gICdYQUNUX0FCT1JUJyxcbiAgJ1hNTCBJTkRFWCcsXG4gICdYTUwgU0NIRU1BIENPTExFQ1RJT04nLFxuICAvLyBvdGhlclxuICAnQUxURVIgQ09MVU1OJyxcbiAgJ0FMVEVSIFRBQkxFJyxcbiAgJ0NSRUFURSBUQUJMRScsXG4gICdGUk9NJyxcbiAgJ0dST1VQIEJZJyxcbiAgJ0hBVklORycsXG4gICdJTlNFUlQgSU5UTycsIC8vIHZlcmlmeVxuICAnRFJPUCBUQUJMRScsIC8vIHZlcmlmeVxuICAnU0VUIFNDSEVNQScsIC8vIHZlcmlmeVxuICAnTElNSVQnLFxuICAnT0ZGU0VUJyxcbiAgJ09SREVSIEJZJyxcbiAgJ1NFTEVDVCcsXG4gICdWQUxVRVMnLFxuICAnV0hFUkUnLFxuICAnV0lUSCcsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDJcbiAqIGNvbW1hbmRzIHRoYXQgb3BlcmF0ZSBvbiB0d28gdGFibGVzIG9yIHN1YnF1ZXJpZXNcbiAqIHR3byBtYWluIGNhdGVnb3JpZXM6IGpvaW5zIGFuZCBib29sZWFuIHNldCBvcGVyYXRvcnNcbiAqL1xuY29uc3QgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IFtcbiAgLy8gc2V0IGJvb2xlYW5zXG4gICdJTlRFUlNFQ1QnLFxuICAnSU5URVJTRUNUIEFMTCcsXG4gICdJTlRFUlNFQ1QgRElTVElOQ1QnLFxuICAnVU5JT04nLFxuICAnVU5JT04gQUxMJyxcbiAgJ1VOSU9OIERJU1RJTkNUJyxcbiAgJ0VYQ0VQVCcsXG4gICdFWENFUFQgQUxMJyxcbiAgJ0VYQ0VQVCBESVNUSU5DVCcsXG4gICdNSU5VUycsXG4gICdNSU5VUyBBTEwnLFxuICAnTUlOVVMgRElTVElOQ1QnLFxuICAvLyBqb2luc1xuICAnSk9JTicsXG4gICdJTk5FUiBKT0lOJyxcbiAgJ0xFRlQgSk9JTicsXG4gICdMRUZUIE9VVEVSIEpPSU4nLFxuICAnUklHSFQgSk9JTicsXG4gICdSSUdIVCBPVVRFUiBKT0lOJyxcbiAgJ0ZVTEwgSk9JTicsXG4gICdGVUxMIE9VVEVSIEpPSU4nLFxuICAnQ1JPU1MgSk9JTicsXG5dO1xuXG4vKipcbiAqIFByaW9yaXR5IDNcbiAqIGtleXdvcmRzIHRoYXQgZm9sbG93IGEgcHJldmlvdXMgU3RhdGVtZW50LCBtdXN0IGJlIGF0dGFjaGVkIHRvIHN1YnNlcXVlbnQgZGF0YVxuICogY2FuIGJlIGZ1bGx5IGlubGluZSBvciBvbiBuZXdsaW5lIHdpdGggb3B0aW9uYWwgaW5kZW50XG4gKi9cbmNvbnN0IHJlc2VydmVkRGVwZW5kZW50Q2xhdXNlcyA9IFsnV0hFTicsICdFTFNFJ107XG5cbi8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3NxbC90LXNxbC9sYW5ndWFnZS1yZWZlcmVuY2U/dmlldz1zcWwtc2VydmVyLXZlcjE1XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUU3FsRm9ybWF0dGVyIGV4dGVuZHMgRm9ybWF0dGVyIHtcbiAgc3RhdGljIHJlc2VydmVkQ29tbWFuZHMgPSByZXNlcnZlZENvbW1hbmRzO1xuICBzdGF0aWMgcmVzZXJ2ZWRCaW5hcnlDb21tYW5kcyA9IHJlc2VydmVkQmluYXJ5Q29tbWFuZHM7XG4gIHN0YXRpYyByZXNlcnZlZERlcGVuZGVudENsYXVzZXMgPSByZXNlcnZlZERlcGVuZGVudENsYXVzZXM7XG4gIHN0YXRpYyByZXNlcnZlZEpvaW5Db25kaXRpb25zID0gWydPTicsICdVU0lORyddO1xuICBzdGF0aWMgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzID0gWydBTkQnLCAnT1InXTtcbiAgc3RhdGljIHJlc2VydmVkS2V5d29yZHMgPSBkZWR1cGUoW1xuICAgIC4uLk9iamVjdC52YWx1ZXMocmVzZXJ2ZWRGdW5jdGlvbnMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgICAuLi5PYmplY3QudmFsdWVzKHJlc2VydmVkS2V5d29yZHMpLnJlZHVjZSgoYWNjLCBhcnIpID0+IFsuLi5hY2MsIC4uLmFycl0sIFtdKSxcbiAgXSk7XG4gIHN0YXRpYyBzdHJpbmdUeXBlczogU3RyaW5nUGF0dGVyblR5cGVbXSA9IFtgXCJcImAsIFwiTicnXCIsIFwiJydcIiwgJ1tdJywgJ2BgJ107XG4gIHN0YXRpYyBibG9ja1N0YXJ0ID0gWycoJywgJ0NBU0UnXTtcbiAgc3RhdGljIGJsb2NrRW5kID0gWycpJywgJ0VORCddO1xuICBzdGF0aWMgaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMgPSBbXTtcbiAgc3RhdGljIG5hbWVkUGxhY2Vob2xkZXJUeXBlcyA9IFsnQCddO1xuICBzdGF0aWMgbGluZUNvbW1lbnRUeXBlcyA9IFsnLS0nXTtcbiAgc3RhdGljIHNwZWNpYWxXb3JkQ2hhcnMgPSB7IGFueTogJyNAJyB9O1xuICBzdGF0aWMgb3BlcmF0b3JzID0gWychPCcsICchPicsICcrPScsICctPScsICcqPScsICcvPScsICclPScsICd8PScsICcmPScsICdePScsICc6OiddO1xuXG4gIHRva2VuaXplcigpIHtcbiAgICByZXR1cm4gbmV3IFRva2VuaXplcih7XG4gICAgICByZXNlcnZlZENvbW1hbmRzOiBUU3FsRm9ybWF0dGVyLnJlc2VydmVkQ29tbWFuZHMsXG4gICAgICByZXNlcnZlZEJpbmFyeUNvbW1hbmRzOiBUU3FsRm9ybWF0dGVyLnJlc2VydmVkQmluYXJ5Q29tbWFuZHMsXG4gICAgICByZXNlcnZlZERlcGVuZGVudENsYXVzZXM6IFRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWREZXBlbmRlbnRDbGF1c2VzLFxuICAgICAgcmVzZXJ2ZWRKb2luQ29uZGl0aW9uczogVFNxbEZvcm1hdHRlci5yZXNlcnZlZEpvaW5Db25kaXRpb25zLFxuICAgICAgcmVzZXJ2ZWRMb2dpY2FsT3BlcmF0b3JzOiBUU3FsRm9ybWF0dGVyLnJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyxcbiAgICAgIHJlc2VydmVkS2V5d29yZHM6IFRTcWxGb3JtYXR0ZXIucmVzZXJ2ZWRLZXl3b3JkcyxcbiAgICAgIHN0cmluZ1R5cGVzOiBUU3FsRm9ybWF0dGVyLnN0cmluZ1R5cGVzLFxuICAgICAgYmxvY2tTdGFydDogVFNxbEZvcm1hdHRlci5ibG9ja1N0YXJ0LFxuICAgICAgYmxvY2tFbmQ6IFRTcWxGb3JtYXR0ZXIuYmxvY2tFbmQsXG4gICAgICBpbmRleGVkUGxhY2Vob2xkZXJUeXBlczogVFNxbEZvcm1hdHRlci5pbmRleGVkUGxhY2Vob2xkZXJUeXBlcyxcbiAgICAgIG5hbWVkUGxhY2Vob2xkZXJUeXBlczogVFNxbEZvcm1hdHRlci5uYW1lZFBsYWNlaG9sZGVyVHlwZXMsXG4gICAgICBsaW5lQ29tbWVudFR5cGVzOiBUU3FsRm9ybWF0dGVyLmxpbmVDb21tZW50VHlwZXMsXG4gICAgICBzcGVjaWFsV29yZENoYXJzOiBUU3FsRm9ybWF0dGVyLnNwZWNpYWxXb3JkQ2hhcnMsXG4gICAgICBvcGVyYXRvcnM6IFRTcWxGb3JtYXR0ZXIub3BlcmF0b3JzLFxuICAgICAgLy8gVE9ETzogU3VwcG9ydCBmb3IgbW9uZXkgY29uc3RhbnRzXG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCBCaWdRdWVyeUZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9iaWdxdWVyeS5mb3JtYXR0ZXInO1xuaW1wb3J0IERiMkZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9kYjIuZm9ybWF0dGVyJztcbmltcG9ydCBIaXZlRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL2hpdmUuZm9ybWF0dGVyJztcbmltcG9ydCBNYXJpYURiRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL21hcmlhZGIuZm9ybWF0dGVyJztcbmltcG9ydCBNeVNxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9teXNxbC5mb3JtYXR0ZXInO1xuaW1wb3J0IE4xcWxGb3JtYXR0ZXIgZnJvbSAnLi9sYW5ndWFnZXMvbjFxbC5mb3JtYXR0ZXInO1xuaW1wb3J0IFBsU3FsRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL3Bsc3FsLmZvcm1hdHRlcic7XG5pbXBvcnQgUG9zdGdyZVNxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9wb3N0Z3Jlc3FsLmZvcm1hdHRlcic7XG5pbXBvcnQgUmVkc2hpZnRGb3JtYXR0ZXIgZnJvbSAnLi9sYW5ndWFnZXMvcmVkc2hpZnQuZm9ybWF0dGVyJztcbmltcG9ydCBTcGFya1NxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy9zcGFya3NxbC5mb3JtYXR0ZXInO1xuaW1wb3J0IFN0YW5kYXJkU3FsRm9ybWF0dGVyIGZyb20gJy4vbGFuZ3VhZ2VzL3N0YW5kYXJkc3FsLmZvcm1hdHRlcic7XG5pbXBvcnQgVFNxbEZvcm1hdHRlciBmcm9tICcuL2xhbmd1YWdlcy90c3FsLmZvcm1hdHRlcic7XG5cbmltcG9ydCB7IEZvcm1hdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGlzTnVtYmVyIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXR0ZXJzID0ge1xuICBiaWdxdWVyeTogQmlnUXVlcnlGb3JtYXR0ZXIsXG4gIGRiMjogRGIyRm9ybWF0dGVyLFxuICBoaXZlOiBIaXZlRm9ybWF0dGVyLFxuICBtYXJpYWRiOiBNYXJpYURiRm9ybWF0dGVyLFxuICBteXNxbDogTXlTcWxGb3JtYXR0ZXIsXG4gIG4xcWw6IE4xcWxGb3JtYXR0ZXIsXG4gIHBsc3FsOiBQbFNxbEZvcm1hdHRlcixcbiAgcG9zdGdyZXNxbDogUG9zdGdyZVNxbEZvcm1hdHRlcixcbiAgcmVkc2hpZnQ6IFJlZHNoaWZ0Rm9ybWF0dGVyLFxuICBzcGFyazogU3BhcmtTcWxGb3JtYXR0ZXIsXG4gIHNxbDogU3RhbmRhcmRTcWxGb3JtYXR0ZXIsXG4gIHRzcWw6IFRTcWxGb3JtYXR0ZXIsXG59O1xuZXhwb3J0IHR5cGUgU3FsTGFuZ3VhZ2UgPSBrZXlvZiB0eXBlb2YgZm9ybWF0dGVycztcbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWREaWFsZWN0cyA9IE9iamVjdC5rZXlzKGZvcm1hdHRlcnMpO1xuXG5leHBvcnQgdHlwZSBGb3JtYXRGbk9wdGlvbnMgPSBGb3JtYXRPcHRpb25zICYgeyBsYW5ndWFnZTogU3FsTGFuZ3VhZ2UgfTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IEZvcm1hdEZuT3B0aW9ucyA9IHtcbiAgbGFuZ3VhZ2U6ICdzcWwnLFxuICB0YWJXaWR0aDogMixcbiAgdXNlVGFiczogZmFsc2UsXG4gIGtleXdvcmRDYXNlOiAncHJlc2VydmUnLFxuICBpbmRlbnRTdHlsZTogJ3N0YW5kYXJkJyxcbiAgbXVsdGlsaW5lTGlzdHM6ICdhbHdheXMnLFxuICBsb2dpY2FsT3BlcmF0b3JOZXdsaW5lOiAnYmVmb3JlJyxcbiAgYWxpYXNBczogJ3ByZXNlcnZlJyxcbiAgdGFidWxhdGVBbGlhczogZmFsc2UsXG4gIGNvbW1hUG9zaXRpb246ICdhZnRlcicsXG4gIG5ld2xpbmVCZWZvcmVPcGVuUGFyZW46IHRydWUsXG4gIG5ld2xpbmVCZWZvcmVDbG9zZVBhcmVuOiB0cnVlLFxuICBleHByZXNzaW9uV2lkdGg6IDUwLFxuICBsaW5lc0JldHdlZW5RdWVyaWVzOiAxLFxuICBkZW5zZU9wZXJhdG9yczogZmFsc2UsXG4gIG5ld2xpbmVCZWZvcmVTZW1pY29sb246IGZhbHNlLFxufTtcblxuLyoqXG4gKiBGb3JtYXQgd2hpdGVzcGFjZSBpbiBhIHF1ZXJ5IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHF1ZXJ5IC0gaW5wdXQgU1FMIHF1ZXJ5IHN0cmluZ1xuICogQHBhcmFtIHtGb3JtYXRPcHRpb25zfSBjZmcgQ29uZmlndXJhdGlvbiBvcHRpb25zIChzZWUgZG9jcyBpbiBSRUFETUUpXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGZvcm1hdHRlZCBxdWVyeVxuICovXG5leHBvcnQgY29uc3QgZm9ybWF0ID0gKHF1ZXJ5OiBzdHJpbmcsIGNmZzogUGFydGlhbDxGb3JtYXRGbk9wdGlvbnM+ID0ge30pOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIHF1ZXJ5ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBxdWVyeSBhcmd1bWVudC4gRXhwZWN0ZWQgc3RyaW5nLCBpbnN0ZWFkIGdvdCAnICsgdHlwZW9mIHF1ZXJ5KTtcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB2YWxpZGF0ZUNvbmZpZyh7XG4gICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgLi4uY2ZnLFxuICB9KTtcblxuICBjb25zdCBGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzW29wdGlvbnMubGFuZ3VhZ2VdO1xuICByZXR1cm4gbmV3IEZvcm1hdHRlcihvcHRpb25zKS5mb3JtYXQocXVlcnkpO1xufTtcblxuZXhwb3J0IGNsYXNzIENvbmZpZ0Vycm9yIGV4dGVuZHMgRXJyb3Ige31cblxuZnVuY3Rpb24gdmFsaWRhdGVDb25maWcoY2ZnOiBGb3JtYXRGbk9wdGlvbnMpOiBGb3JtYXRGbk9wdGlvbnMge1xuICBpZiAoIXN1cHBvcnRlZERpYWxlY3RzLmluY2x1ZGVzKGNmZy5sYW5ndWFnZSkpIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoYFVuc3VwcG9ydGVkIFNRTCBkaWFsZWN0OiAke2NmZy5sYW5ndWFnZX1gKTtcbiAgfVxuXG4gIGlmIChpc051bWJlcihjZmcubXVsdGlsaW5lTGlzdHMpICYmIGNmZy5tdWx0aWxpbmVMaXN0cyA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdtdWx0aWxpbmVMaXN0cyBjb25maWcgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci4nKTtcbiAgfVxuXG4gIGlmIChjZmcuZXhwcmVzc2lvbldpZHRoIDw9IDApIHtcbiAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoXG4gICAgICBgZXhwcmVzc2lvbldpZHRoIGNvbmZpZyBtdXN0IGJlIHBvc2l0aXZlIG51bWJlci4gUmVjZWl2ZWQgJHtjZmcuZXhwcmVzc2lvbldpZHRofSBpbnN0ZWFkLmBcbiAgICApO1xuICB9XG5cbiAgaWYgKGNmZy5jb21tYVBvc2l0aW9uID09PSAnYmVmb3JlJyAmJiBjZmcudXNlVGFicykge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcihcbiAgICAgICdjb21tYVBvc2l0aW9uOiBiZWZvcmUgZG9lcyBub3Qgd29yayB3aGVuIHRhYnMgYXJlIHVzZWQgZm9yIGluZGVudGF0aW9uLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNmZztcbn1cblxuZXhwb3J0IHR5cGUgRm9ybWF0Rm4gPSB0eXBlb2YgZm9ybWF0O1xuIiwiZXhwb3J0IGNvbnN0IGRlZHVwZSA9IChhcnI6IHN0cmluZ1tdKSA9PiBbLi4ubmV3IFNldChhcnIpXTtcblxuLy8gT25seSByZW1vdmVzIHNwYWNlcywgbm90IG5ld2xpbmVzXG5leHBvcnQgY29uc3QgdHJpbVNwYWNlc0VuZCA9IChzdHI6IHN0cmluZykgPT4gc3RyLnJlcGxhY2UoL1sgXFx0XSskL3UsICcnKTtcblxuLy8gTGFzdCBlbGVtZW50IGZyb20gYXJyYXlcbmV4cG9ydCBjb25zdCBsYXN0ID0gPFQgZXh0ZW5kcyBhbnk+KGFycjogVFtdKSA9PiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuXG4vLyBUcnVlIGFycmF5IGlzIGVtcHR5LCBvciBpdCdzIG5vdCBhbiBhcnJheSBhdCBhbGxcbmV4cG9ydCBjb25zdCBpc0VtcHR5ID0gKGFycjogYW55W10pID0+ICFBcnJheS5pc0FycmF5KGFycikgfHwgYXJyLmxlbmd0aCA9PT0gMDtcblxuLy8gRXNjYXBlcyByZWdleCBzcGVjaWFsIGNoYXJzXG5leHBvcnQgY29uc3QgZXNjYXBlUmVnRXhwID0gKHN0cmluZzogc3RyaW5nKSA9PiBzdHJpbmcucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2d1LCAnXFxcXCQmJyk7XG5cbi8vIFNvcnRzIHN0cmluZ3MgYnkgbGVuZ3RoLCBzbyB0aGF0IGxvbmdlciBvbmVzIGFyZSBmaXJzdFxuLy8gQWxzbyBzb3J0cyBhbHBoYWJldGljYWxseSBhZnRlciBzb3J0aW5nIGJ5IGxlbmd0aC5cbmV4cG9ydCBjb25zdCBzb3J0QnlMZW5ndGhEZXNjID0gKHN0cmluZ3M6IHN0cmluZ1tdKSA9PlxuICBzdHJpbmdzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGggfHwgYS5sb2NhbGVDb21wYXJlKGIpKTtcblxuLyoqIEdldCBsZW5ndGggb2YgbG9uZ2VzdCBzdHJpbmcgaW4gbGlzdCBvZiBzdHJpbmdzICovXG5leHBvcnQgY29uc3QgbWF4TGVuZ3RoID0gKHN0cmluZ3M6IHN0cmluZ1tdKSA9PlxuICBzdHJpbmdzLnJlZHVjZSgobWF4LCBjdXIpID0+IE1hdGgubWF4KG1heCwgY3VyLmxlbmd0aCksIDApO1xuXG5leHBvcnQgY29uc3QgaXNOdW1iZXIgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bWJlciA9PiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJleHBvcnQgKiBmcm9tICcuL3NxbEZvcm1hdHRlcic7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcbiJdLCJuYW1lcyI6WyJpc0NvbW1hbmQiLCJpc1Rva2VuIiwiVG9rZW5UeXBlIiwiQWxpYXNBcyIsImFsaWFzQXMiLCJmb3JtYXR0ZXIiLCJ0b2tlbiIsImlzTWlzc2luZ1RhYmxlQWxpYXMiLCJpc01pc3NpbmdTZWxlY3RDb2x1bW5BbGlhcyIsInR5cGUiLCJXT1JEIiwibG9va0JlaGluZCIsInZhbHVlIiwicHJldlRva2VuIiwibmV4dFRva2VuIiwibG9va0FoZWFkIiwiaXNXaXRoaW5TZWxlY3QiLCJFTkQiLCJOVU1CRVIiLCJpc0VkZ2VDYXNlQ1RFIiwiaXNFZGdlQ2FzZUNyZWF0ZVRhYmxlIiwiaXNNaXNzaW5nVHlwZUNhc3RBcyIsIkNBU1QiLCJnZXRQcmV2aW91c1Jlc2VydmVkVG9rZW4iLCJBUyIsIlJFU0VSVkVEX0tFWVdPUkQiLCJXSVRIIiwiVEFCTEUiLCJlbmRzV2l0aCIsImlzUmVtb3ZhYmxlTm9uU2VsZWN0QXMiLCJuIiwidG9rZW5Mb29rQmVoaW5kIiwidG9rZW5Mb29rQWhlYWQiLCJBc1Rva2VuRmFjdG9yeSIsImtleXdvcmRDYXNlIiwidG9rZW5zIiwiZGV0ZWN0ZWRDYXNlIiwiYXV0b0RldGVjdENhc2UiLCJhc1Rva2VucyIsImZpbHRlciIsInVwcGVyQXNUb2tlbnMiLCJsZW5ndGgiLCJhc1Rva2VuVmFsdWUiLCJJbmRlbnRhdGlvbiIsIklubGluZUJsb2NrIiwiUGFyYW1zIiwidHJpbVNwYWNlc0VuZCIsImlzUmVzZXJ2ZWQiLCJFT0ZfVE9LRU4iLCJmb3JtYXRDb21tYVBvc2l0aW9ucyIsImZvcm1hdEFsaWFzUG9zaXRpb25zIiwidG9UYWJ1bGFyVG9rZW4iLCJyZXBsYWNlVGFidWxhclBsYWNlaG9sZGVycyIsIkZvcm1hdHRlciIsImNmZyIsImluZGVudGF0aW9uIiwiaW5kZW50U3RyaW5nIiwiaW5saW5lQmxvY2siLCJleHByZXNzaW9uV2lkdGgiLCJwYXJhbXMiLCJhc1Rva2VuRmFjdG9yeSIsImlzVGFidWxhclN0eWxlIiwicmVwZWF0IiwidXNlVGFicyIsInRhYldpZHRoIiwiRXJyb3IiLCJxdWVyeSIsInRva2VuaXplciIsInRva2VuaXplIiwiZm9ybWF0dGVkUXVlcnkiLCJnZXRGb3JtYXR0ZWRRdWVyeUZyb21Ub2tlbnMiLCJmaW5hbFF1ZXJ5IiwicG9zdEZvcm1hdCIsInJlcGxhY2UiLCJ0cmltRW5kIiwidGFidWxhdGVBbGlhcyIsImNvbW1hUG9zaXRpb24iLCJpbmRleCIsInRva2VuT3ZlcnJpZGUiLCJwcmV2aW91c1Jlc2VydmVkVG9rZW4iLCJSRVNFUlZFRF9KT0lOX0NPTkRJVElPTiIsImluZGVudFN0eWxlIiwiUkVTRVJWRURfQ09NTUFORCIsInByZXZpb3VzQ29tbWFuZFRva2VuIiwiTElORV9DT01NRU5UIiwiZm9ybWF0TGluZUNvbW1lbnQiLCJCTE9DS19DT01NRU5UIiwiZm9ybWF0QmxvY2tDb21tZW50IiwiY3VycmVudE5ld2xpbmUiLCJjaGVja05ld2xpbmUiLCJmb3JtYXRDb21tYW5kIiwiUkVTRVJWRURfQklOQVJZX0NPTU1BTkQiLCJmb3JtYXRCaW5hcnlDb21tYW5kIiwiUkVTRVJWRURfREVQRU5ERU5UX0NMQVVTRSIsImZvcm1hdERlcGVuZGVudENsYXVzZSIsImZvcm1hdEpvaW5Db25kaXRpb24iLCJSRVNFUlZFRF9MT0dJQ0FMX09QRVJBVE9SIiwiZm9ybWF0TG9naWNhbE9wZXJhdG9yIiwiZm9ybWF0S2V5d29yZCIsIkJMT0NLX1NUQVJUIiwiZm9ybWF0QmxvY2tTdGFydCIsIkJMT0NLX0VORCIsImZvcm1hdEJsb2NrRW5kIiwiUExBQ0VIT0xERVIiLCJmb3JtYXRQbGFjZWhvbGRlciIsIk9QRVJBVE9SIiwiZm9ybWF0T3BlcmF0b3IiLCJmb3JtYXRXb3JkIiwic2hvdWxkQWRkQmVmb3JlIiwiZm9ybWF0V2l0aFNwYWNlcyIsInNob3VsZEFkZEFmdGVyIiwibmV4dFRva2VucyIsInRva2Vuc1VudGlsTmV4dENvbW1hbmRPclF1ZXJ5RW5kIiwic29tZSIsIkNBU0UiLCJtdWx0aWxpbmVMaXN0cyIsImlubGluZVdpZHRoIiwiY291bnRDbGF1c2VzIiwidG9rZW5zU3RyaW5nIiwibWFwIiwiam9pbiIsIndoaXRlc3BhY2VCZWZvcmUiLCJjb3VudCIsIm9wZW5CbG9ja3MiLCJ0YWlsIiwic2xpY2UiLCJmaW5kSW5kZXgiLCJ1bmRlZmluZWQiLCJhZGROZXdsaW5lIiwic2hvdyIsImluZGVudENvbW1lbnQiLCJjb21tZW50IiwiZ2V0SW5kZW50IiwiZGVjcmVhc2VUb3BMZXZlbCIsImluY3JlYXNlVG9wTGV2ZWwiLCJlcXVhbGl6ZVdoaXRlc3BhY2UiLCJpc0pvaW4iLCJ0ZXN0Iiwic2hvdWxkUmVtb3ZlIiwiZm9ybWF0Q29tbWEiLCJmb3JtYXRRdWVyeVNlcGFyYXRvciIsImluY2x1ZGVzIiwiZm9ybWF0V2l0aG91dFNwYWNlcyIsImRlbnNlT3BlcmF0b3JzIiwiQU5EIiwiQkVUV0VFTiIsImxvZ2ljYWxPcGVyYXRvck5ld2xpbmUiLCJzdHJpbmciLCJwcmVzZXJ2ZVdoaXRlc3BhY2VGb3IiLCJfYSIsIm5ld2xpbmVCZWZvcmVPcGVuUGFyZW4iLCJiZWdpbklmUG9zc2libGUiLCJpc0FjdGl2ZSIsImluY3JlYXNlQmxvY2tMZXZlbCIsImVuZCIsImRlY3JlYXNlQmxvY2tMZXZlbCIsImdldFNpbmdsZUluZGVudCIsIm5ld2xpbmVCZWZvcmVDbG9zZVBhcmVuIiwiZ2V0IiwiTElNSVQiLCJhZGRTcGFjZSIsImJlZm9yZSIsImFmdGVyIiwicmVzZXRJbmRlbnRhdGlvbiIsIm5ld2xpbmVCZWZvcmVTZW1pY29sb24iLCJsaW5lc0JldHdlZW5RdWVyaWVzIiwidG9VcHBlckNhc2UiLCJ0b0xvd2VyQ2FzZSIsIlNFTEVDVCIsImxhc3QiLCJJTkRFTlRfVFlQRV9UT1BfTEVWRUwiLCJJTkRFTlRfVFlQRV9CTE9DS19MRVZFTCIsImluZGVudCIsImluZGVudFR5cGVzIiwicHVzaCIsInBvcCIsImxldmVsIiwiaXNJbmxpbmVCbG9jayIsImkiLCJpc0ZvcmJpZGRlblRva2VuIiwia2V5IiwicmVnZXhGYWN0b3J5IiwiZXNjYXBlUmVnRXhwIiwiV0hJVEVTUEFDRV9SRUdFWCIsIk5VTExfUkVHRVgiLCJUb2tlbml6ZXIiLCJ0b2tlblR5cGUiLCJpbnB1dCIsImdldFRva2VuT25GaXJzdE1hdGNoIiwicmVnZXgiLCJSRUdFWF9NQVAiLCJzcGVjaWFsV29yZENoYXJzQWxsIiwiT2JqZWN0IiwidmFsdWVzIiwic3BlY2lhbFdvcmRDaGFycyIsImNyZWF0ZVdvcmRSZWdleCIsIlNUUklORyIsImNyZWF0ZVN0cmluZ1JlZ2V4Iiwic3RyaW5nVHlwZXMiLCJjcmVhdGVSZXNlcnZlZFdvcmRSZWdleCIsInJlc2VydmVkS2V5d29yZHMiLCJyZXNlcnZlZERlcGVuZGVudENsYXVzZXMiLCJfYiIsInJlc2VydmVkTG9naWNhbE9wZXJhdG9ycyIsInJlc2VydmVkQ29tbWFuZHMiLCJyZXNlcnZlZEJpbmFyeUNvbW1hbmRzIiwicmVzZXJ2ZWRKb2luQ29uZGl0aW9ucyIsImNyZWF0ZU9wZXJhdG9yUmVnZXgiLCJvcGVyYXRvcnMiLCJfYyIsImNyZWF0ZVBhcmVuUmVnZXgiLCJibG9ja1N0YXJ0IiwiYmxvY2tFbmQiLCJjcmVhdGVMaW5lQ29tbWVudFJlZ2V4IiwibGluZUNvbW1lbnRUeXBlcyIsIkVPRiIsIklOREVYRURfUExBQ0VIT0xERVJfUkVHRVgiLCJjcmVhdGVQbGFjZWhvbGRlclJlZ2V4IiwiaW5kZXhlZFBsYWNlaG9sZGVyVHlwZXMiLCJfZCIsIklERU5UX05BTUVEX1BMQUNFSE9MREVSX1JFR0VYIiwibmFtZWRQbGFjZWhvbGRlclR5cGVzIiwiU1RSSU5HX05BTUVEX1BMQUNFSE9MREVSX1JFR0VYIiwiY3JlYXRlU3RyaW5nUGF0dGVybiIsImdldFdoaXRlc3BhY2UiLCJzdWJzdHJpbmciLCJnZXROZXh0VG9rZW4iLCJtYXRjaGVzIiwibWF0Y2giLCJwcmV2aW91c1Rva2VuIiwibWF0Y2hUb2tlbiIsImdldFBsYWNlaG9sZGVyVG9rZW4iLCJnZXRSZXNlcnZlZFdvcmRUb2tlbiIsInBsYWNlaG9sZGVyVG9rZW5SZWdleE1hcCIsInBhcnNlS2V5IiwidiIsImdldEVzY2FwZWRQbGFjZWhvbGRlcktleSIsInF1b3RlQ2hhciIsInJlZHVjZSIsImFjYyIsIlJlZ0V4cCIsInJlc2VydmVkVG9rZW5MaXN0IiwibWF0Y2hlZFRva2VuIiwibWF4TGVuZ3RoIiwibGluZXMiLCJzcGxpdCIsIm5ld1F1ZXJ5IiwiYWxpYXNMaW5lcyIsInNwbGl0TGluZXMiLCJsaW5lIiwicHJlY2VkaW5nVGV4dCIsImFzIiwiYWxpYXMiLCJhbGlhc01heExlbmd0aCIsImdyb3VwQ29tbWFEZWxpbWl0ZWRMaW5lcyIsImZsYXRNYXAiLCJjb21tYUxpbmVzIiwiZm9ybWF0VGFidWxhciIsImZvcm1hdEJlZm9yZSIsImdyb3VwcyIsImdyb3VwIiwibWF4TGluZUxlbmd0aCIsInRyaW1UcmFpbGluZ0NvbW1hcyIsIndoaXRlc3BhY2UiLCJyZW1vdmVMYXN0SW5kZW50IiwidHJpbVN0YXJ0IiwiaXNFbXB0eSIsInNvcnRCeUxlbmd0aERlc2MiLCJtb25hZE9wZXJhdG9ycyIsInBvbHlhZE9wZXJhdG9ycyIsImMiLCJyZXNlcnZlZEtleXdvcmRzUGF0dGVybiIsInNwZWNpYWxDaGFycyIsInByZWZpeExvb2tCZWhpbmQiLCJwcmVmaXgiLCJzdWZmaXhMb29rQWhlYWQiLCJzdWZmaXgiLCJ1bmljb2RlV29yZENoYXIiLCJhbnkiLCJhcnJheUFjY2Vzc29yIiwibWFwQWNjZXNzb3IiLCJwYXR0ZXJucyIsInQiLCJlc2NhcGVQYXJlbiIsInBhcmVuIiwicGFyZW5zIiwidHlwZXMiLCJwYXR0ZXJuIiwidHlwZXNSZWdleCIsIlpXUyIsImJ1ZmZlckl0ZW0iLCJwYWRFbmQiLCJwYWRTdGFydCIsIlpXU19SRUdFWCIsInNwYWNlcyIsInRlc3RUb2tlbiIsImNvbXBhcmVUb2tlbiIsIkJZIiwiRlJPTSIsIlNFVCIsIldJTkRPVyIsImRlZHVwZSIsInJlc2VydmVkRnVuY3Rpb25zIiwiYWVhZCIsImFnZ3JlZ2F0ZUFuYWx5dGljIiwiYWdncmVnYXRlIiwiYXBwcm94aW1hdGVBZ2dyZWdhdGUiLCJhcnJheSIsImJpdHdpc2UiLCJjb252ZXJzaW9uIiwiZGF0ZSIsImRhdGV0aW1lIiwiZGVidWdnaW5nIiwiZmVkZXJhdGVkUXVlcnkiLCJnZW9ncmFwaHkiLCJoYXNoIiwiaGxsIiwiaW50ZXJ2YWwiLCJqc29uIiwibWF0aCIsIm5hdmlnYXRpb24iLCJuZXQiLCJudW1iZXJpbmciLCJzZWN1cml0eSIsInN0YXRpc3RpY2FsQWdncmVnYXRlIiwidGltZSIsInRpbWVzdGFtcCIsInV1aWQiLCJjb25kaXRpb25hbCIsImxlZ2FjeUFnZ3JlZ2F0ZSIsImxlZ2FjeUJpdHdpc2UiLCJsZWdhY3lDYXN0aW5nIiwibGVnYWN5Q29tcGFyaXNvbiIsImxlZ2FjeURhdGV0aW1lIiwibGVnYWN5SXAiLCJsZWdhY3lKc29uIiwibGVnYWN5TWF0aCIsImxlZ2FjeVJlZ2V4IiwibGVnYWN5U3RyaW5nIiwibGVnYWN5VGFibGVXaWxkY2FyZCIsImxlZ2FjeVVybCIsImxlZ2FjeVdpbmRvdyIsImxlZ2FjeU1pc2MiLCJvdGhlciIsImtleXdvcmRzIiwiZGF0YXR5cGVzIiwic3RyaW5nRm9ybWF0IiwibWlzYyIsIkJpZ1F1ZXJ5Rm9ybWF0dGVyIiwiZnVsbFJlc2VydmVkV29yZHMiLCJmaW5hbFRva2VuIiwic3BsaWNlIiwiYXJyIiwic2NhbGFyIiwidGFibGUiLCJyb3ciLCJvbGFwIiwic3RhbmRhcmQiLCJvbmxpbmVVdGlsaWVzIiwiY29tbWFuZHMiLCJEYjJGb3JtYXR0ZXIiLCJtYXNraW5nIiwibm9uUmVzZXJ2ZWQiLCJyZXNlcnZlZCIsImZpbGVUeXBlcyIsIkhpdmVGb3JtYXR0ZXIiLCJNYXJpYURiRm9ybWF0dGVyIiwiTXlTcWxGb3JtYXR0ZXIiLCJOMXFsRm9ybWF0dGVyIiwiUGxTcWxGb3JtYXR0ZXIiLCJzdGFydHNXaXRoIiwiYmluYXJ5IiwiYml0c3RyaW5nIiwiZGF0YXR5cGUiLCJnZW9tZXRyeSIsIm5ldHdvcmsiLCJ0ZXh0c2VhcmNoIiwieG1sIiwic2VxdWVuY2UiLCJyYW5nZSIsIndpbmRvdyIsInNldCIsInN5c0luZm8iLCJzeXNBZG1pbiIsInRyaWdnZXIiLCJldmVudFRyaWdnZXIiLCJzdGF0cyIsImJpbmFyeU9wZXJhdG9ycyIsIlBvc3RncmVTcWxGb3JtYXR0ZXIiLCJkYXRlVGltZSIsInNwYXRpYWwiLCJoeXBlckxvZ0xvZyIsIm1hY2hpbmVMZWFybmluZyIsInN1cGVyVHlwZSIsImRhdGFUeXBlIiwiZGF0YUNvbnZlcnNpb25QYXJhbXMiLCJkYXRhTG9hZFBhcmFtcyIsImRhdGFGb3JtYXRQYXJhbXMiLCJjb3B5QXV0aFBhcmFtcyIsImNvcHlDb21wcmVzc2lvblBhcmFtcyIsImNvcHlNaXNjUGFyYW1zIiwiY29tcHJlc3Npb25FbmNvZGluZ3MiLCJkYXRhVHlwZXMiLCJSZWRzaGlmdEZvcm1hdHRlciIsIlNwYXJrU3FsRm9ybWF0dGVyIiwiU3RhbmRhcmRTcWxGb3JtYXR0ZXIiLCJhbmFseXRpYyIsImNvbmZpZ3VyYXRpb24iLCJjcnlwdG9ncmFwaGljIiwiY3Vyc29yIiwibWF0aGVtYXRpY2FsIiwibWV0YWRhdGEiLCJyYW5raW5nIiwic3lzdGVtIiwic3RhdGlzdGljYWwiLCJvZGJjIiwiZnV0dXJlIiwiVFNxbEZvcm1hdHRlciIsImlzTnVtYmVyIiwiZm9ybWF0dGVycyIsImJpZ3F1ZXJ5IiwiZGIyIiwiaGl2ZSIsIm1hcmlhZGIiLCJteXNxbCIsIm4xcWwiLCJwbHNxbCIsInBvc3RncmVzcWwiLCJyZWRzaGlmdCIsInNwYXJrIiwic3FsIiwidHNxbCIsInN1cHBvcnRlZERpYWxlY3RzIiwia2V5cyIsImRlZmF1bHRPcHRpb25zIiwibGFuZ3VhZ2UiLCJmb3JtYXQiLCJvcHRpb25zIiwidmFsaWRhdGVDb25maWciLCJDb25maWdFcnJvciIsIlNldCIsInN0ciIsIkFycmF5IiwiaXNBcnJheSIsInN0cmluZ3MiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwibWF4IiwiY3VyIiwiTWF0aCJdLCJzb3VyY2VSb290IjoiIn0= |
\ | No newline at end of file |