25759 lines
		
	
	
		
			1.2 MiB
		
	
	
	
	
	
	
		
			Generated
		
	
	
			
		
		
	
	
			25759 lines
		
	
	
		
			1.2 MiB
		
	
	
	
	
	
	
		
			Generated
		
	
	
| module.exports =
 | |
| /******/ (() => { // webpackBootstrap
 | |
| /******/ 	var __webpack_modules__ = ({
 | |
| 
 | |
| /***/ 3842:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | |
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
 | |
|     return new (P || (P = Promise))(function (resolve, reject) {
 | |
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | |
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | |
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
 | |
|         step((generator = generator.apply(thisArg, _arguments || [])).next());
 | |
|     });
 | |
| };
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.setOutput = exports.asyncForEach = exports.getInputList = exports.getInputs = exports.tmpDir = void 0;
 | |
| const sync_1 = __importDefault(__webpack_require__(8750));
 | |
| const core = __importStar(__webpack_require__(2186));
 | |
| const command_1 = __webpack_require__(7351);
 | |
| const fs = __importStar(__webpack_require__(5747));
 | |
| const os = __importStar(__webpack_require__(2087));
 | |
| const path = __importStar(__webpack_require__(5622));
 | |
| let _tmpDir;
 | |
| function tmpDir() {
 | |
|     if (!_tmpDir) {
 | |
|         _tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'docker-metadata-action-')).split(path.sep).join(path.posix.sep);
 | |
|     }
 | |
|     return _tmpDir;
 | |
| }
 | |
| exports.tmpDir = tmpDir;
 | |
| function getInputs() {
 | |
|     return {
 | |
|         images: getInputList('images'),
 | |
|         tags: getInputList('tags', true),
 | |
|         flavor: getInputList('flavor', true),
 | |
|         labels: getInputList('labels', true),
 | |
|         sepTags: core.getInput('sep-tags') || `\n`,
 | |
|         sepLabels: core.getInput('sep-labels') || `\n`,
 | |
|         bakeTarget: core.getInput('bake-target') || `docker-metadata-action`,
 | |
|         githubToken: core.getInput('github-token')
 | |
|     };
 | |
| }
 | |
| exports.getInputs = getInputs;
 | |
| function getInputList(name, ignoreComma) {
 | |
|     let res = [];
 | |
|     const items = core.getInput(name);
 | |
|     if (items == '') {
 | |
|         return res;
 | |
|     }
 | |
|     for (let output of sync_1.default(items, {
 | |
|         columns: false,
 | |
|         relaxColumnCount: true,
 | |
|         skipLinesWithEmptyValues: true
 | |
|     })) {
 | |
|         if (output.length == 1) {
 | |
|             res.push(output[0]);
 | |
|             continue;
 | |
|         }
 | |
|         else if (!ignoreComma) {
 | |
|             res.push(...output);
 | |
|             continue;
 | |
|         }
 | |
|         res.push(output.join(','));
 | |
|     }
 | |
|     return res.filter(item => item).map(pat => pat.trim());
 | |
| }
 | |
| exports.getInputList = getInputList;
 | |
| exports.asyncForEach = (array, callback) => __awaiter(void 0, void 0, void 0, function* () {
 | |
|     for (let index = 0; index < array.length; index++) {
 | |
|         yield callback(array[index], index, array);
 | |
|     }
 | |
| });
 | |
| // FIXME: Temp fix https://github.com/actions/toolkit/issues/777
 | |
| function setOutput(name, value) {
 | |
|     command_1.issueCommand('set-output', { name }, value);
 | |
| }
 | |
| exports.setOutput = setOutput;
 | |
| //# sourceMappingURL=context.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3716:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.Transform = void 0;
 | |
| const core = __importStar(__webpack_require__(2186));
 | |
| const sync_1 = __importDefault(__webpack_require__(8750));
 | |
| function Transform(inputs) {
 | |
|     const flavor = {
 | |
|         latest: 'auto',
 | |
|         prefix: '',
 | |
|         prefixLatest: false,
 | |
|         suffix: '',
 | |
|         suffixLatest: false
 | |
|     };
 | |
|     for (const input of inputs) {
 | |
|         const fields = sync_1.default(input, {
 | |
|             relaxColumnCount: true,
 | |
|             skipLinesWithEmptyValues: true
 | |
|         })[0];
 | |
|         let onlatestfor = '';
 | |
|         for (const field of fields) {
 | |
|             const parts = field.toString().split('=', 2);
 | |
|             if (parts.length == 1) {
 | |
|                 throw new Error(`Invalid flavor entry: ${input}`);
 | |
|             }
 | |
|             switch (parts[0]) {
 | |
|                 case 'latest': {
 | |
|                     flavor.latest = parts[1];
 | |
|                     if (!['auto', 'true', 'false'].includes(flavor.latest)) {
 | |
|                         throw new Error(`Invalid latest flavor entry: ${input}`);
 | |
|                     }
 | |
|                     break;
 | |
|                 }
 | |
|                 case 'prefix': {
 | |
|                     flavor.prefix = parts[1];
 | |
|                     onlatestfor = 'prefix';
 | |
|                     break;
 | |
|                 }
 | |
|                 case 'suffix': {
 | |
|                     flavor.suffix = parts[1];
 | |
|                     onlatestfor = 'suffix';
 | |
|                     break;
 | |
|                 }
 | |
|                 case 'onlatest': {
 | |
|                     if (!['true', 'false'].includes(parts[1])) {
 | |
|                         throw new Error(`Invalid value for onlatest attribute: ${parts[1]}`);
 | |
|                     }
 | |
|                     switch (onlatestfor) {
 | |
|                         case 'prefix': {
 | |
|                             flavor.prefixLatest = /true/i.test(parts[1]);
 | |
|                             break;
 | |
|                         }
 | |
|                         case 'suffix': {
 | |
|                             flavor.suffixLatest = /true/i.test(parts[1]);
 | |
|                             break;
 | |
|                         }
 | |
|                     }
 | |
|                     break;
 | |
|                 }
 | |
|                 default: {
 | |
|                     throw new Error(`Unknown flavor entry: ${input}`);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     core.startGroup(`Processing flavor input`);
 | |
|     core.info(`latest=${flavor.latest}`);
 | |
|     core.info(`prefix=${flavor.prefix}`);
 | |
|     core.info(`prefixLatest=${flavor.prefixLatest}`);
 | |
|     core.info(`suffix=${flavor.suffix}`);
 | |
|     core.info(`suffixLatest=${flavor.suffixLatest}`);
 | |
|     core.endGroup();
 | |
|     return flavor;
 | |
| }
 | |
| exports.Transform = Transform;
 | |
| //# sourceMappingURL=flavor.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5928:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | |
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
 | |
|     return new (P || (P = Promise))(function (resolve, reject) {
 | |
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | |
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | |
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
 | |
|         step((generator = generator.apply(thisArg, _arguments || [])).next());
 | |
|     });
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.repo = exports.context = void 0;
 | |
| const github = __importStar(__webpack_require__(5438));
 | |
| function context() {
 | |
|     return github.context;
 | |
| }
 | |
| exports.context = context;
 | |
| function repo(token) {
 | |
|     return __awaiter(this, void 0, void 0, function* () {
 | |
|         return github
 | |
|             .getOctokit(token)
 | |
|             .rest.repos.get(Object.assign({}, github.context.repo))
 | |
|             .then(response => response.data);
 | |
|     });
 | |
| }
 | |
| exports.repo = repo;
 | |
| //# sourceMappingURL=github.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3109:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | |
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
 | |
|     return new (P || (P = Promise))(function (resolve, reject) {
 | |
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | |
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | |
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
 | |
|         step((generator = generator.apply(thisArg, _arguments || [])).next());
 | |
|     });
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| const fs = __importStar(__webpack_require__(5747));
 | |
| const context_1 = __webpack_require__(3842);
 | |
| const github = __importStar(__webpack_require__(5928));
 | |
| const meta_1 = __webpack_require__(3714);
 | |
| const core = __importStar(__webpack_require__(2186));
 | |
| function run() {
 | |
|     return __awaiter(this, void 0, void 0, function* () {
 | |
|         try {
 | |
|             const inputs = yield context_1.getInputs();
 | |
|             if (inputs.images.length == 0) {
 | |
|                 throw new Error(`images input required`);
 | |
|             }
 | |
|             const context = github.context();
 | |
|             const repo = yield github.repo(inputs.githubToken);
 | |
|             core.startGroup(`Context info`);
 | |
|             core.info(`eventName: ${context.eventName}`);
 | |
|             core.info(`sha: ${context.sha}`);
 | |
|             core.info(`ref: ${context.ref}`);
 | |
|             core.info(`workflow: ${context.workflow}`);
 | |
|             core.info(`action: ${context.action}`);
 | |
|             core.info(`actor: ${context.actor}`);
 | |
|             core.info(`runNumber: ${context.runNumber}`);
 | |
|             core.info(`runId: ${context.runId}`);
 | |
|             core.endGroup();
 | |
|             const meta = new meta_1.Meta(inputs, context, repo);
 | |
|             const version = meta.version;
 | |
|             if (meta.version.main == undefined || meta.version.main.length == 0) {
 | |
|                 core.warning(`No Docker image version has been generated. Check tags input.`);
 | |
|             }
 | |
|             else {
 | |
|                 core.startGroup(`Docker image version`);
 | |
|                 core.info(version.main || '');
 | |
|                 core.endGroup();
 | |
|             }
 | |
|             context_1.setOutput('version', version.main || '');
 | |
|             // Docker tags
 | |
|             const tags = meta.getTags();
 | |
|             if (tags.length == 0) {
 | |
|                 core.warning('No Docker tag has been generated. Check tags input.');
 | |
|             }
 | |
|             else {
 | |
|                 core.startGroup(`Docker tags`);
 | |
|                 for (let tag of tags) {
 | |
|                     core.info(tag);
 | |
|                 }
 | |
|                 core.endGroup();
 | |
|             }
 | |
|             context_1.setOutput('tags', tags.join(inputs.sepTags));
 | |
|             // Docker labels
 | |
|             const labels = meta.getLabels();
 | |
|             core.startGroup(`Docker labels`);
 | |
|             for (let label of labels) {
 | |
|                 core.info(label);
 | |
|             }
 | |
|             core.endGroup();
 | |
|             context_1.setOutput('labels', labels.join(inputs.sepLabels));
 | |
|             // JSON
 | |
|             const jsonOutput = meta.getJSON();
 | |
|             core.startGroup(`JSON output`);
 | |
|             core.info(JSON.stringify(jsonOutput, null, 2));
 | |
|             core.endGroup();
 | |
|             context_1.setOutput('json', jsonOutput);
 | |
|             // Bake definition file
 | |
|             const bakeFile = meta.getBakeFile();
 | |
|             core.startGroup(`Bake definition file`);
 | |
|             core.info(fs.readFileSync(bakeFile, 'utf8'));
 | |
|             core.endGroup();
 | |
|             context_1.setOutput('bake-file', bakeFile);
 | |
|         }
 | |
|         catch (error) {
 | |
|             core.setFailed(error.message);
 | |
|         }
 | |
|     });
 | |
| }
 | |
| run();
 | |
| //# sourceMappingURL=main.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3714:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.Meta = void 0;
 | |
| const handlebars = __importStar(__webpack_require__(7492));
 | |
| const fs = __importStar(__webpack_require__(5747));
 | |
| const path = __importStar(__webpack_require__(5622));
 | |
| const moment_1 = __importDefault(__webpack_require__(9623));
 | |
| const semver = __importStar(__webpack_require__(1383));
 | |
| const context_1 = __webpack_require__(3842);
 | |
| const tcl = __importStar(__webpack_require__(2829));
 | |
| const fcl = __importStar(__webpack_require__(3716));
 | |
| const core = __importStar(__webpack_require__(2186));
 | |
| class Meta {
 | |
|     constructor(inputs, context, repo) {
 | |
|         // Needs to override Git reference with pr ref instead of upstream branch ref
 | |
|         // for pull_request_target event
 | |
|         if (/pull_request_target/.test(context.eventName)) {
 | |
|             context.ref = `refs/pull/${context.payload.number}/merge`;
 | |
|         }
 | |
|         this.inputs = inputs;
 | |
|         this.context = context;
 | |
|         this.repo = repo;
 | |
|         this.tags = tcl.Transform(inputs.tags);
 | |
|         this.flavor = fcl.Transform(inputs.flavor);
 | |
|         this.date = new Date();
 | |
|         this.version = this.getVersion();
 | |
|     }
 | |
|     getVersion() {
 | |
|         let version = {
 | |
|             main: undefined,
 | |
|             partial: [],
 | |
|             latest: undefined
 | |
|         };
 | |
|         for (const tag of this.tags) {
 | |
|             if (!/true/i.test(tag.attrs['enable'])) {
 | |
|                 continue;
 | |
|             }
 | |
|             switch (tag.type) {
 | |
|                 case tcl.Type.Schedule: {
 | |
|                     version = this.procSchedule(version, tag);
 | |
|                     break;
 | |
|                 }
 | |
|                 case tcl.Type.Semver: {
 | |
|                     version = this.procSemver(version, tag);
 | |
|                     break;
 | |
|                 }
 | |
|                 case tcl.Type.Match: {
 | |
|                     version = this.procMatch(version, tag);
 | |
|                     break;
 | |
|                 }
 | |
|                 case tcl.Type.Ref: {
 | |
|                     if (tag.attrs['event'] == tcl.RefEvent.Branch) {
 | |
|                         version = this.procRefBranch(version, tag);
 | |
|                     }
 | |
|                     else if (tag.attrs['event'] == tcl.RefEvent.Tag) {
 | |
|                         version = this.procRefTag(version, tag);
 | |
|                     }
 | |
|                     else if (tag.attrs['event'] == tcl.RefEvent.PR) {
 | |
|                         version = this.procRefPr(version, tag);
 | |
|                     }
 | |
|                     break;
 | |
|                 }
 | |
|                 case tcl.Type.Edge: {
 | |
|                     version = this.procEdge(version, tag);
 | |
|                     break;
 | |
|                 }
 | |
|                 case tcl.Type.Raw: {
 | |
|                     version = this.procRaw(version, tag);
 | |
|                     break;
 | |
|                 }
 | |
|                 case tcl.Type.Sha: {
 | |
|                     version = this.procSha(version, tag);
 | |
|                     break;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         version.partial = version.partial.filter((item, index) => version.partial.indexOf(item) === index);
 | |
|         if (version.latest == undefined) {
 | |
|             version.latest = false;
 | |
|         }
 | |
|         return version;
 | |
|     }
 | |
|     procSchedule(version, tag) {
 | |
|         if (!/schedule/.test(this.context.eventName)) {
 | |
|             return version;
 | |
|         }
 | |
|         const currentDate = this.date;
 | |
|         const vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])({
 | |
|             date: function (format) {
 | |
|                 return moment_1.default(currentDate).utc().format(format);
 | |
|             }
 | |
|         }), tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procSemver(version, tag) {
 | |
|         if (!/^refs\/tags\//.test(this.context.ref) && tag.attrs['value'].length == 0) {
 | |
|             return version;
 | |
|         }
 | |
|         let vraw;
 | |
|         if (tag.attrs['value'].length > 0) {
 | |
|             vraw = this.setGlobalExp(tag.attrs['value']);
 | |
|         }
 | |
|         else {
 | |
|             vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
 | |
|         }
 | |
|         if (!semver.valid(vraw)) {
 | |
|             core.warning(`${vraw} is not a valid semver. More info: https://semver.org/`);
 | |
|             return version;
 | |
|         }
 | |
|         let latest = false;
 | |
|         const sver = semver.parse(vraw, {
 | |
|             includePrerelease: true
 | |
|         });
 | |
|         if (semver.prerelease(vraw)) {
 | |
|             vraw = this.setValue(handlebars.compile('{{version}}')(sver), tag);
 | |
|         }
 | |
|         else {
 | |
|             vraw = this.setValue(handlebars.compile(tag.attrs['pattern'])(sver), tag);
 | |
|             latest = true;
 | |
|         }
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? latest : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procMatch(version, tag) {
 | |
|         if (!/^refs\/tags\//.test(this.context.ref) && tag.attrs['value'].length == 0) {
 | |
|             return version;
 | |
|         }
 | |
|         let vraw;
 | |
|         if (tag.attrs['value'].length > 0) {
 | |
|             vraw = this.setGlobalExp(tag.attrs['value']);
 | |
|         }
 | |
|         else {
 | |
|             vraw = this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
 | |
|         }
 | |
|         let tmatch;
 | |
|         const isRegEx = tag.attrs['pattern'].match(/^\/(.+)\/(.*)$/);
 | |
|         if (isRegEx) {
 | |
|             tmatch = vraw.match(new RegExp(isRegEx[1], isRegEx[2]));
 | |
|         }
 | |
|         else {
 | |
|             tmatch = vraw.match(tag.attrs['pattern']);
 | |
|         }
 | |
|         if (!tmatch) {
 | |
|             core.warning(`${tag.attrs['pattern']} does not match ${vraw}.`);
 | |
|             return version;
 | |
|         }
 | |
|         if (typeof tmatch[tag.attrs['group']] === 'undefined') {
 | |
|             core.warning(`Group ${tag.attrs['group']} does not exist for ${tag.attrs['pattern']} pattern.`);
 | |
|             return version;
 | |
|         }
 | |
|         vraw = this.setValue(tmatch[tag.attrs['group']], tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procRefBranch(version, tag) {
 | |
|         if (!/^refs\/heads\//.test(this.context.ref)) {
 | |
|             return version;
 | |
|         }
 | |
|         const vraw = this.setValue(this.context.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-'), tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procRefTag(version, tag) {
 | |
|         if (!/^refs\/tags\//.test(this.context.ref)) {
 | |
|             return version;
 | |
|         }
 | |
|         const vraw = this.setValue(this.context.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-'), tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? true : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procRefPr(version, tag) {
 | |
|         if (!/^refs\/pull\//.test(this.context.ref)) {
 | |
|             return version;
 | |
|         }
 | |
|         const vraw = this.setValue(this.context.ref.replace(/^refs\/pull\//g, '').replace(/\/merge$/g, ''), tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procEdge(version, tag) {
 | |
|         if (!/^refs\/heads\//.test(this.context.ref)) {
 | |
|             return version;
 | |
|         }
 | |
|         let val = this.context.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-');
 | |
|         if (tag.attrs['branch'].length == 0) {
 | |
|             tag.attrs['branch'] = this.repo.default_branch;
 | |
|         }
 | |
|         if (tag.attrs['branch'] === val) {
 | |
|             val = 'edge';
 | |
|         }
 | |
|         const vraw = this.setValue(val, tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procRaw(version, tag) {
 | |
|         const vraw = this.setValue(this.setGlobalExp(tag.attrs['value']), tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
 | |
|     }
 | |
|     procSha(version, tag) {
 | |
|         if (!this.context.sha) {
 | |
|             return version;
 | |
|         }
 | |
|         let val = this.context.sha;
 | |
|         if (tag.attrs['format'] === tcl.ShaFormat.Short) {
 | |
|             val = this.context.sha.substr(0, 7);
 | |
|         }
 | |
|         const vraw = this.setValue(val, tag);
 | |
|         return Meta.setVersion(version, vraw, this.flavor.latest == 'auto' ? false : this.flavor.latest == 'true');
 | |
|     }
 | |
|     static setVersion(version, val, latest) {
 | |
|         if (val.length == 0) {
 | |
|             return version;
 | |
|         }
 | |
|         if (version.main == undefined) {
 | |
|             version.main = val;
 | |
|         }
 | |
|         else if (val !== version.main) {
 | |
|             version.partial.push(val);
 | |
|         }
 | |
|         if (version.latest == undefined) {
 | |
|             version.latest = latest;
 | |
|         }
 | |
|         return version;
 | |
|     }
 | |
|     setValue(val, tag) {
 | |
|         if (tag.attrs.hasOwnProperty('prefix')) {
 | |
|             val = `${this.setGlobalExp(tag.attrs['prefix'])}${val}`;
 | |
|         }
 | |
|         else if (this.flavor.prefix.length > 0) {
 | |
|             val = `${this.setGlobalExp(this.flavor.prefix)}${val}`;
 | |
|         }
 | |
|         if (tag.attrs.hasOwnProperty('suffix')) {
 | |
|             val = `${val}${this.setGlobalExp(tag.attrs['suffix'])}`;
 | |
|         }
 | |
|         else if (this.flavor.suffix.length > 0) {
 | |
|             val = `${val}${this.setGlobalExp(this.flavor.suffix)}`;
 | |
|         }
 | |
|         return val;
 | |
|     }
 | |
|     setGlobalExp(val) {
 | |
|         const ctx = this.context;
 | |
|         return handlebars.compile(val)({
 | |
|             branch: function () {
 | |
|                 if (!/^refs\/heads\//.test(ctx.ref)) {
 | |
|                     return '';
 | |
|                 }
 | |
|                 return ctx.ref.replace(/^refs\/heads\//g, '').replace(/[^a-zA-Z0-9._-]+/g, '-');
 | |
|             },
 | |
|             tag: function () {
 | |
|                 if (!/^refs\/tags\//.test(ctx.ref)) {
 | |
|                     return '';
 | |
|                 }
 | |
|                 return ctx.ref.replace(/^refs\/tags\//g, '').replace(/\//g, '-');
 | |
|             },
 | |
|             sha: function () {
 | |
|                 return ctx.sha.substr(0, 7);
 | |
|             }
 | |
|         });
 | |
|     }
 | |
|     getTags() {
 | |
|         if (!this.version.main) {
 | |
|             return [];
 | |
|         }
 | |
|         let tags = [];
 | |
|         for (const image of this.inputs.images) {
 | |
|             const imageLc = image.toLowerCase();
 | |
|             tags.push(`${imageLc}:${this.version.main}`);
 | |
|             for (const partial of this.version.partial) {
 | |
|                 tags.push(`${imageLc}:${partial}`);
 | |
|             }
 | |
|             if (this.version.latest) {
 | |
|                 tags.push(`${imageLc}:${this.flavor.prefixLatest ? this.flavor.prefix : ''}latest${this.flavor.suffixLatest ? this.flavor.suffix : ''}`);
 | |
|             }
 | |
|         }
 | |
|         return tags;
 | |
|     }
 | |
|     getLabels() {
 | |
|         var _a;
 | |
|         let labels = [
 | |
|             `org.opencontainers.image.title=${this.repo.name || ''}`,
 | |
|             `org.opencontainers.image.description=${this.repo.description || ''}`,
 | |
|             `org.opencontainers.image.url=${this.repo.html_url || ''}`,
 | |
|             `org.opencontainers.image.source=${this.repo.html_url || ''}`,
 | |
|             `org.opencontainers.image.version=${this.version.main || ''}`,
 | |
|             `org.opencontainers.image.created=${this.date.toISOString()}`,
 | |
|             `org.opencontainers.image.revision=${this.context.sha || ''}`,
 | |
|             `org.opencontainers.image.licenses=${((_a = this.repo.license) === null || _a === void 0 ? void 0 : _a.spdx_id) || ''}`
 | |
|         ];
 | |
|         labels.push(...this.inputs.labels);
 | |
|         return labels;
 | |
|     }
 | |
|     getJSON() {
 | |
|         return {
 | |
|             tags: this.getTags(),
 | |
|             labels: this.getLabels().reduce((res, label) => {
 | |
|                 const matches = label.match(/([^=]*)=(.*)/);
 | |
|                 if (!matches) {
 | |
|                     return res;
 | |
|                 }
 | |
|                 res[matches[1]] = matches[2];
 | |
|                 return res;
 | |
|             }, {})
 | |
|         };
 | |
|     }
 | |
|     getBakeFile() {
 | |
|         const bakeFile = path.join(context_1.tmpDir(), 'docker-metadata-action-bake.json').split(path.sep).join(path.posix.sep);
 | |
|         fs.writeFileSync(bakeFile, JSON.stringify({
 | |
|             target: {
 | |
|                 [this.inputs.bakeTarget]: {
 | |
|                     tags: this.getTags(),
 | |
|                     labels: this.getLabels().reduce((res, label) => {
 | |
|                         const matches = label.match(/([^=]*)=(.*)/);
 | |
|                         if (!matches) {
 | |
|                             return res;
 | |
|                         }
 | |
|                         res[matches[1]] = matches[2];
 | |
|                         return res;
 | |
|                     }, {}),
 | |
|                     args: {
 | |
|                         DOCKER_META_IMAGES: this.inputs.images.join(','),
 | |
|                         DOCKER_META_VERSION: this.version.main
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }, null, 2));
 | |
|         return bakeFile;
 | |
|     }
 | |
| }
 | |
| exports.Meta = Meta;
 | |
| //# sourceMappingURL=meta.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2829:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.Parse = exports.Transform = exports.DefaultPriorities = exports.Tag = exports.ShaFormat = exports.RefEvent = exports.Type = void 0;
 | |
| const sync_1 = __importDefault(__webpack_require__(8750));
 | |
| const core = __importStar(__webpack_require__(2186));
 | |
| var Type;
 | |
| (function (Type) {
 | |
|     Type["Schedule"] = "schedule";
 | |
|     Type["Semver"] = "semver";
 | |
|     Type["Match"] = "match";
 | |
|     Type["Edge"] = "edge";
 | |
|     Type["Ref"] = "ref";
 | |
|     Type["Raw"] = "raw";
 | |
|     Type["Sha"] = "sha";
 | |
| })(Type = exports.Type || (exports.Type = {}));
 | |
| var RefEvent;
 | |
| (function (RefEvent) {
 | |
|     RefEvent["Branch"] = "branch";
 | |
|     RefEvent["Tag"] = "tag";
 | |
|     RefEvent["PR"] = "pr";
 | |
| })(RefEvent = exports.RefEvent || (exports.RefEvent = {}));
 | |
| var ShaFormat;
 | |
| (function (ShaFormat) {
 | |
|     ShaFormat["Short"] = "short";
 | |
|     ShaFormat["Long"] = "long";
 | |
| })(ShaFormat = exports.ShaFormat || (exports.ShaFormat = {}));
 | |
| class Tag {
 | |
|     constructor() {
 | |
|         this.attrs = {};
 | |
|     }
 | |
|     toString() {
 | |
|         const out = [`type=${this.type}`];
 | |
|         for (let attr in this.attrs) {
 | |
|             out.push(`${attr}=${this.attrs[attr]}`);
 | |
|         }
 | |
|         return out.join(',');
 | |
|     }
 | |
| }
 | |
| exports.Tag = Tag;
 | |
| exports.DefaultPriorities = {
 | |
|     [Type.Schedule]: '1000',
 | |
|     [Type.Semver]: '900',
 | |
|     [Type.Match]: '800',
 | |
|     [Type.Edge]: '700',
 | |
|     [Type.Ref]: '600',
 | |
|     [Type.Raw]: '200',
 | |
|     [Type.Sha]: '100'
 | |
| };
 | |
| function Transform(inputs) {
 | |
|     const tags = [];
 | |
|     if (inputs.length == 0) {
 | |
|         // prettier-ignore
 | |
|         inputs = [
 | |
|             `type=schedule`,
 | |
|             `type=ref,event=${RefEvent.Branch}`,
 | |
|             `type=ref,event=${RefEvent.Tag}`,
 | |
|             `type=ref,event=${RefEvent.PR}`
 | |
|         ];
 | |
|     }
 | |
|     for (const input of inputs) {
 | |
|         tags.push(Parse(input));
 | |
|     }
 | |
|     const sorted = tags.sort((tag1, tag2) => {
 | |
|         if (Number(tag1.attrs['priority']) < Number(tag2.attrs['priority'])) {
 | |
|             return 1;
 | |
|         }
 | |
|         if (Number(tag1.attrs['priority']) > Number(tag2.attrs['priority'])) {
 | |
|             return -1;
 | |
|         }
 | |
|         return 0;
 | |
|     });
 | |
|     core.startGroup(`Processing tags input`);
 | |
|     for (const tag of sorted) {
 | |
|         core.info(tag.toString());
 | |
|     }
 | |
|     core.endGroup();
 | |
|     return sorted;
 | |
| }
 | |
| exports.Transform = Transform;
 | |
| function Parse(s) {
 | |
|     const fields = sync_1.default(s, {
 | |
|         relaxColumnCount: true,
 | |
|         skipLinesWithEmptyValues: true
 | |
|     })[0];
 | |
|     const tag = new Tag();
 | |
|     for (const field of fields) {
 | |
|         const parts = field.toString().split('=', 2);
 | |
|         if (parts.length == 1) {
 | |
|             tag.attrs['value'] = parts[0].trim();
 | |
|         }
 | |
|         else {
 | |
|             const key = parts[0].trim().toLowerCase();
 | |
|             const value = parts[1].trim();
 | |
|             switch (key) {
 | |
|                 case 'type': {
 | |
|                     if (!Object.values(Type).includes(value)) {
 | |
|                         throw new Error(`Unknown tag type attribute: ${value}`);
 | |
|                     }
 | |
|                     tag.type = value;
 | |
|                     break;
 | |
|                 }
 | |
|                 default: {
 | |
|                     tag.attrs[key] = value;
 | |
|                     break;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     if (tag.type == undefined) {
 | |
|         tag.type = Type.Raw;
 | |
|     }
 | |
|     switch (tag.type) {
 | |
|         case Type.Schedule: {
 | |
|             if (!tag.attrs.hasOwnProperty('pattern')) {
 | |
|                 tag.attrs['pattern'] = 'nightly';
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|         case Type.Semver: {
 | |
|             if (!tag.attrs.hasOwnProperty('pattern')) {
 | |
|                 throw new Error(`Missing pattern attribute for ${s}`);
 | |
|             }
 | |
|             if (!tag.attrs.hasOwnProperty('value')) {
 | |
|                 tag.attrs['value'] = '';
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|         case Type.Match: {
 | |
|             if (!tag.attrs.hasOwnProperty('pattern')) {
 | |
|                 throw new Error(`Missing pattern attribute for ${s}`);
 | |
|             }
 | |
|             if (!tag.attrs.hasOwnProperty('group')) {
 | |
|                 tag.attrs['group'] = '0';
 | |
|             }
 | |
|             if (isNaN(+tag.attrs['group'])) {
 | |
|                 throw new Error(`Invalid match group for ${s}`);
 | |
|             }
 | |
|             if (!tag.attrs.hasOwnProperty('value')) {
 | |
|                 tag.attrs['value'] = '';
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|         case Type.Edge: {
 | |
|             if (!tag.attrs.hasOwnProperty('branch')) {
 | |
|                 tag.attrs['branch'] = '';
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|         case Type.Ref: {
 | |
|             if (!tag.attrs.hasOwnProperty('event')) {
 | |
|                 throw new Error(`Missing event attribute for ${s}`);
 | |
|             }
 | |
|             if (!Object.keys(RefEvent)
 | |
|                 .map(k => RefEvent[k])
 | |
|                 .includes(tag.attrs['event'])) {
 | |
|                 throw new Error(`Invalid event for ${s}`);
 | |
|             }
 | |
|             if (tag.attrs['event'] == RefEvent.PR && !tag.attrs.hasOwnProperty('prefix')) {
 | |
|                 tag.attrs['prefix'] = 'pr-';
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|         case Type.Raw: {
 | |
|             if (!tag.attrs.hasOwnProperty('value')) {
 | |
|                 throw new Error(`Missing value attribute for ${s}`);
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|         case Type.Sha: {
 | |
|             if (!tag.attrs.hasOwnProperty('prefix')) {
 | |
|                 tag.attrs['prefix'] = 'sha-';
 | |
|             }
 | |
|             if (!tag.attrs.hasOwnProperty('format')) {
 | |
|                 tag.attrs['format'] = ShaFormat.Short;
 | |
|             }
 | |
|             if (!Object.keys(ShaFormat)
 | |
|                 .map(k => ShaFormat[k])
 | |
|                 .includes(tag.attrs['format'])) {
 | |
|                 throw new Error(`Invalid format for ${s}`);
 | |
|             }
 | |
|             break;
 | |
|         }
 | |
|     }
 | |
|     if (!tag.attrs.hasOwnProperty('enable')) {
 | |
|         tag.attrs['enable'] = 'true';
 | |
|     }
 | |
|     if (!tag.attrs.hasOwnProperty('priority')) {
 | |
|         tag.attrs['priority'] = exports.DefaultPriorities[tag.type];
 | |
|     }
 | |
|     if (!['true', 'false'].includes(tag.attrs['enable'])) {
 | |
|         throw new Error(`Invalid value for enable attribute: ${tag.attrs['enable']}`);
 | |
|     }
 | |
|     return tag;
 | |
| }
 | |
| exports.Parse = Parse;
 | |
| //# sourceMappingURL=tag.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7351:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.issue = exports.issueCommand = void 0;
 | |
| const os = __importStar(__webpack_require__(2087));
 | |
| const utils_1 = __webpack_require__(5278);
 | |
| /**
 | |
|  * Commands
 | |
|  *
 | |
|  * Command Format:
 | |
|  *   ::name key=value,key=value::message
 | |
|  *
 | |
|  * Examples:
 | |
|  *   ::warning::This is the message
 | |
|  *   ::set-env name=MY_VAR::some value
 | |
|  */
 | |
| function issueCommand(command, properties, message) {
 | |
|     const cmd = new Command(command, properties, message);
 | |
|     process.stdout.write(cmd.toString() + os.EOL);
 | |
| }
 | |
| exports.issueCommand = issueCommand;
 | |
| function issue(name, message = '') {
 | |
|     issueCommand(name, {}, message);
 | |
| }
 | |
| exports.issue = issue;
 | |
| const CMD_STRING = '::';
 | |
| class Command {
 | |
|     constructor(command, properties, message) {
 | |
|         if (!command) {
 | |
|             command = 'missing.command';
 | |
|         }
 | |
|         this.command = command;
 | |
|         this.properties = properties;
 | |
|         this.message = message;
 | |
|     }
 | |
|     toString() {
 | |
|         let cmdStr = CMD_STRING + this.command;
 | |
|         if (this.properties && Object.keys(this.properties).length > 0) {
 | |
|             cmdStr += ' ';
 | |
|             let first = true;
 | |
|             for (const key in this.properties) {
 | |
|                 if (this.properties.hasOwnProperty(key)) {
 | |
|                     const val = this.properties[key];
 | |
|                     if (val) {
 | |
|                         if (first) {
 | |
|                             first = false;
 | |
|                         }
 | |
|                         else {
 | |
|                             cmdStr += ',';
 | |
|                         }
 | |
|                         cmdStr += `${key}=${escapeProperty(val)}`;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         cmdStr += `${CMD_STRING}${escapeData(this.message)}`;
 | |
|         return cmdStr;
 | |
|     }
 | |
| }
 | |
| function escapeData(s) {
 | |
|     return utils_1.toCommandValue(s)
 | |
|         .replace(/%/g, '%25')
 | |
|         .replace(/\r/g, '%0D')
 | |
|         .replace(/\n/g, '%0A');
 | |
| }
 | |
| function escapeProperty(s) {
 | |
|     return utils_1.toCommandValue(s)
 | |
|         .replace(/%/g, '%25')
 | |
|         .replace(/\r/g, '%0D')
 | |
|         .replace(/\n/g, '%0A')
 | |
|         .replace(/:/g, '%3A')
 | |
|         .replace(/,/g, '%2C');
 | |
| }
 | |
| //# sourceMappingURL=command.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2186:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
 | |
|     function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
 | |
|     return new (P || (P = Promise))(function (resolve, reject) {
 | |
|         function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
 | |
|         function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
 | |
|         function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
 | |
|         step((generator = generator.apply(thisArg, _arguments || [])).next());
 | |
|     });
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.getState = exports.saveState = exports.group = exports.endGroup = exports.startGroup = exports.info = exports.warning = exports.error = exports.debug = exports.isDebug = exports.setFailed = exports.setCommandEcho = exports.setOutput = exports.getBooleanInput = exports.getMultilineInput = exports.getInput = exports.addPath = exports.setSecret = exports.exportVariable = exports.ExitCode = void 0;
 | |
| const command_1 = __webpack_require__(7351);
 | |
| const file_command_1 = __webpack_require__(717);
 | |
| const utils_1 = __webpack_require__(5278);
 | |
| const os = __importStar(__webpack_require__(2087));
 | |
| const path = __importStar(__webpack_require__(5622));
 | |
| /**
 | |
|  * The code to exit an action
 | |
|  */
 | |
| var ExitCode;
 | |
| (function (ExitCode) {
 | |
|     /**
 | |
|      * A code indicating that the action was successful
 | |
|      */
 | |
|     ExitCode[ExitCode["Success"] = 0] = "Success";
 | |
|     /**
 | |
|      * A code indicating that the action was a failure
 | |
|      */
 | |
|     ExitCode[ExitCode["Failure"] = 1] = "Failure";
 | |
| })(ExitCode = exports.ExitCode || (exports.ExitCode = {}));
 | |
| //-----------------------------------------------------------------------
 | |
| // Variables
 | |
| //-----------------------------------------------------------------------
 | |
| /**
 | |
|  * Sets env variable for this action and future actions in the job
 | |
|  * @param name the name of the variable to set
 | |
|  * @param val the value of the variable. Non-string values will be converted to a string via JSON.stringify
 | |
|  */
 | |
| // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | |
| function exportVariable(name, val) {
 | |
|     const convertedVal = utils_1.toCommandValue(val);
 | |
|     process.env[name] = convertedVal;
 | |
|     const filePath = process.env['GITHUB_ENV'] || '';
 | |
|     if (filePath) {
 | |
|         const delimiter = '_GitHubActionsFileCommandDelimeter_';
 | |
|         const commandValue = `${name}<<${delimiter}${os.EOL}${convertedVal}${os.EOL}${delimiter}`;
 | |
|         file_command_1.issueCommand('ENV', commandValue);
 | |
|     }
 | |
|     else {
 | |
|         command_1.issueCommand('set-env', { name }, convertedVal);
 | |
|     }
 | |
| }
 | |
| exports.exportVariable = exportVariable;
 | |
| /**
 | |
|  * Registers a secret which will get masked from logs
 | |
|  * @param secret value of the secret
 | |
|  */
 | |
| function setSecret(secret) {
 | |
|     command_1.issueCommand('add-mask', {}, secret);
 | |
| }
 | |
| exports.setSecret = setSecret;
 | |
| /**
 | |
|  * Prepends inputPath to the PATH (for this action and future actions)
 | |
|  * @param inputPath
 | |
|  */
 | |
| function addPath(inputPath) {
 | |
|     const filePath = process.env['GITHUB_PATH'] || '';
 | |
|     if (filePath) {
 | |
|         file_command_1.issueCommand('PATH', inputPath);
 | |
|     }
 | |
|     else {
 | |
|         command_1.issueCommand('add-path', {}, inputPath);
 | |
|     }
 | |
|     process.env['PATH'] = `${inputPath}${path.delimiter}${process.env['PATH']}`;
 | |
| }
 | |
| exports.addPath = addPath;
 | |
| /**
 | |
|  * Gets the value of an input.
 | |
|  * Unless trimWhitespace is set to false in InputOptions, the value is also trimmed.
 | |
|  * Returns an empty string if the value is not defined.
 | |
|  *
 | |
|  * @param     name     name of the input to get
 | |
|  * @param     options  optional. See InputOptions.
 | |
|  * @returns   string
 | |
|  */
 | |
| function getInput(name, options) {
 | |
|     const val = process.env[`INPUT_${name.replace(/ /g, '_').toUpperCase()}`] || '';
 | |
|     if (options && options.required && !val) {
 | |
|         throw new Error(`Input required and not supplied: ${name}`);
 | |
|     }
 | |
|     if (options && options.trimWhitespace === false) {
 | |
|         return val;
 | |
|     }
 | |
|     return val.trim();
 | |
| }
 | |
| exports.getInput = getInput;
 | |
| /**
 | |
|  * Gets the values of an multiline input.  Each value is also trimmed.
 | |
|  *
 | |
|  * @param     name     name of the input to get
 | |
|  * @param     options  optional. See InputOptions.
 | |
|  * @returns   string[]
 | |
|  *
 | |
|  */
 | |
| function getMultilineInput(name, options) {
 | |
|     const inputs = getInput(name, options)
 | |
|         .split('\n')
 | |
|         .filter(x => x !== '');
 | |
|     return inputs;
 | |
| }
 | |
| exports.getMultilineInput = getMultilineInput;
 | |
| /**
 | |
|  * Gets the input value of the boolean type in the YAML 1.2 "core schema" specification.
 | |
|  * Support boolean input list: `true | True | TRUE | false | False | FALSE` .
 | |
|  * The return value is also in boolean type.
 | |
|  * ref: https://yaml.org/spec/1.2/spec.html#id2804923
 | |
|  *
 | |
|  * @param     name     name of the input to get
 | |
|  * @param     options  optional. See InputOptions.
 | |
|  * @returns   boolean
 | |
|  */
 | |
| function getBooleanInput(name, options) {
 | |
|     const trueValue = ['true', 'True', 'TRUE'];
 | |
|     const falseValue = ['false', 'False', 'FALSE'];
 | |
|     const val = getInput(name, options);
 | |
|     if (trueValue.includes(val))
 | |
|         return true;
 | |
|     if (falseValue.includes(val))
 | |
|         return false;
 | |
|     throw new TypeError(`Input does not meet YAML 1.2 "Core Schema" specification: ${name}\n` +
 | |
|         `Support boolean input list: \`true | True | TRUE | false | False | FALSE\``);
 | |
| }
 | |
| exports.getBooleanInput = getBooleanInput;
 | |
| /**
 | |
|  * Sets the value of an output.
 | |
|  *
 | |
|  * @param     name     name of the output to set
 | |
|  * @param     value    value to store. Non-string values will be converted to a string via JSON.stringify
 | |
|  */
 | |
| // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | |
| function setOutput(name, value) {
 | |
|     process.stdout.write(os.EOL);
 | |
|     command_1.issueCommand('set-output', { name }, value);
 | |
| }
 | |
| exports.setOutput = setOutput;
 | |
| /**
 | |
|  * Enables or disables the echoing of commands into stdout for the rest of the step.
 | |
|  * Echoing is disabled by default if ACTIONS_STEP_DEBUG is not set.
 | |
|  *
 | |
|  */
 | |
| function setCommandEcho(enabled) {
 | |
|     command_1.issue('echo', enabled ? 'on' : 'off');
 | |
| }
 | |
| exports.setCommandEcho = setCommandEcho;
 | |
| //-----------------------------------------------------------------------
 | |
| // Results
 | |
| //-----------------------------------------------------------------------
 | |
| /**
 | |
|  * Sets the action status to failed.
 | |
|  * When the action exits it will be with an exit code of 1
 | |
|  * @param message add error issue message
 | |
|  */
 | |
| function setFailed(message) {
 | |
|     process.exitCode = ExitCode.Failure;
 | |
|     error(message);
 | |
| }
 | |
| exports.setFailed = setFailed;
 | |
| //-----------------------------------------------------------------------
 | |
| // Logging Commands
 | |
| //-----------------------------------------------------------------------
 | |
| /**
 | |
|  * Gets whether Actions Step Debug is on or not
 | |
|  */
 | |
| function isDebug() {
 | |
|     return process.env['RUNNER_DEBUG'] === '1';
 | |
| }
 | |
| exports.isDebug = isDebug;
 | |
| /**
 | |
|  * Writes debug message to user log
 | |
|  * @param message debug message
 | |
|  */
 | |
| function debug(message) {
 | |
|     command_1.issueCommand('debug', {}, message);
 | |
| }
 | |
| exports.debug = debug;
 | |
| /**
 | |
|  * Adds an error issue
 | |
|  * @param message error issue message. Errors will be converted to string via toString()
 | |
|  */
 | |
| function error(message) {
 | |
|     command_1.issue('error', message instanceof Error ? message.toString() : message);
 | |
| }
 | |
| exports.error = error;
 | |
| /**
 | |
|  * Adds an warning issue
 | |
|  * @param message warning issue message. Errors will be converted to string via toString()
 | |
|  */
 | |
| function warning(message) {
 | |
|     command_1.issue('warning', message instanceof Error ? message.toString() : message);
 | |
| }
 | |
| exports.warning = warning;
 | |
| /**
 | |
|  * Writes info to log with console.log.
 | |
|  * @param message info message
 | |
|  */
 | |
| function info(message) {
 | |
|     process.stdout.write(message + os.EOL);
 | |
| }
 | |
| exports.info = info;
 | |
| /**
 | |
|  * Begin an output group.
 | |
|  *
 | |
|  * Output until the next `groupEnd` will be foldable in this group
 | |
|  *
 | |
|  * @param name The name of the output group
 | |
|  */
 | |
| function startGroup(name) {
 | |
|     command_1.issue('group', name);
 | |
| }
 | |
| exports.startGroup = startGroup;
 | |
| /**
 | |
|  * End an output group.
 | |
|  */
 | |
| function endGroup() {
 | |
|     command_1.issue('endgroup');
 | |
| }
 | |
| exports.endGroup = endGroup;
 | |
| /**
 | |
|  * Wrap an asynchronous function call in a group.
 | |
|  *
 | |
|  * Returns the same type as the function itself.
 | |
|  *
 | |
|  * @param name The name of the group
 | |
|  * @param fn The function to wrap in the group
 | |
|  */
 | |
| function group(name, fn) {
 | |
|     return __awaiter(this, void 0, void 0, function* () {
 | |
|         startGroup(name);
 | |
|         let result;
 | |
|         try {
 | |
|             result = yield fn();
 | |
|         }
 | |
|         finally {
 | |
|             endGroup();
 | |
|         }
 | |
|         return result;
 | |
|     });
 | |
| }
 | |
| exports.group = group;
 | |
| //-----------------------------------------------------------------------
 | |
| // Wrapper action state
 | |
| //-----------------------------------------------------------------------
 | |
| /**
 | |
|  * Saves state for current action, the state can only be retrieved by this action's post job execution.
 | |
|  *
 | |
|  * @param     name     name of the state to store
 | |
|  * @param     value    value to store. Non-string values will be converted to a string via JSON.stringify
 | |
|  */
 | |
| // eslint-disable-next-line @typescript-eslint/no-explicit-any
 | |
| function saveState(name, value) {
 | |
|     command_1.issueCommand('save-state', { name }, value);
 | |
| }
 | |
| exports.saveState = saveState;
 | |
| /**
 | |
|  * Gets the value of an state set by this action's main execution.
 | |
|  *
 | |
|  * @param     name     name of the state to get
 | |
|  * @returns   string
 | |
|  */
 | |
| function getState(name) {
 | |
|     return process.env[`STATE_${name}`] || '';
 | |
| }
 | |
| exports.getState = getState;
 | |
| //# sourceMappingURL=core.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 717:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| // For internal use, subject to change.
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.issueCommand = void 0;
 | |
| // We use any as a valid input type
 | |
| /* eslint-disable @typescript-eslint/no-explicit-any */
 | |
| const fs = __importStar(__webpack_require__(5747));
 | |
| const os = __importStar(__webpack_require__(2087));
 | |
| const utils_1 = __webpack_require__(5278);
 | |
| function issueCommand(command, message) {
 | |
|     const filePath = process.env[`GITHUB_${command}`];
 | |
|     if (!filePath) {
 | |
|         throw new Error(`Unable to find environment variable for file command ${command}`);
 | |
|     }
 | |
|     if (!fs.existsSync(filePath)) {
 | |
|         throw new Error(`Missing file at path: ${filePath}`);
 | |
|     }
 | |
|     fs.appendFileSync(filePath, `${utils_1.toCommandValue(message)}${os.EOL}`, {
 | |
|         encoding: 'utf8'
 | |
|     });
 | |
| }
 | |
| exports.issueCommand = issueCommand;
 | |
| //# sourceMappingURL=file-command.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5278:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| // We use any as a valid input type
 | |
| /* eslint-disable @typescript-eslint/no-explicit-any */
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.toCommandValue = void 0;
 | |
| /**
 | |
|  * Sanitizes an input into a string so it can be passed into issueCommand safely
 | |
|  * @param input input to sanitize into a string
 | |
|  */
 | |
| function toCommandValue(input) {
 | |
|     if (input === null || input === undefined) {
 | |
|         return '';
 | |
|     }
 | |
|     else if (typeof input === 'string' || input instanceof String) {
 | |
|         return input;
 | |
|     }
 | |
|     return JSON.stringify(input);
 | |
| }
 | |
| exports.toCommandValue = toCommandValue;
 | |
| //# sourceMappingURL=utils.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4087:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.Context = void 0;
 | |
| const fs_1 = __webpack_require__(5747);
 | |
| const os_1 = __webpack_require__(2087);
 | |
| class Context {
 | |
|     /**
 | |
|      * Hydrate the context from the environment
 | |
|      */
 | |
|     constructor() {
 | |
|         var _a, _b, _c;
 | |
|         this.payload = {};
 | |
|         if (process.env.GITHUB_EVENT_PATH) {
 | |
|             if (fs_1.existsSync(process.env.GITHUB_EVENT_PATH)) {
 | |
|                 this.payload = JSON.parse(fs_1.readFileSync(process.env.GITHUB_EVENT_PATH, { encoding: 'utf8' }));
 | |
|             }
 | |
|             else {
 | |
|                 const path = process.env.GITHUB_EVENT_PATH;
 | |
|                 process.stdout.write(`GITHUB_EVENT_PATH ${path} does not exist${os_1.EOL}`);
 | |
|             }
 | |
|         }
 | |
|         this.eventName = process.env.GITHUB_EVENT_NAME;
 | |
|         this.sha = process.env.GITHUB_SHA;
 | |
|         this.ref = process.env.GITHUB_REF;
 | |
|         this.workflow = process.env.GITHUB_WORKFLOW;
 | |
|         this.action = process.env.GITHUB_ACTION;
 | |
|         this.actor = process.env.GITHUB_ACTOR;
 | |
|         this.job = process.env.GITHUB_JOB;
 | |
|         this.runNumber = parseInt(process.env.GITHUB_RUN_NUMBER, 10);
 | |
|         this.runId = parseInt(process.env.GITHUB_RUN_ID, 10);
 | |
|         this.apiUrl = (_a = process.env.GITHUB_API_URL) !== null && _a !== void 0 ? _a : `https://api.github.com`;
 | |
|         this.serverUrl = (_b = process.env.GITHUB_SERVER_URL) !== null && _b !== void 0 ? _b : `https://github.com`;
 | |
|         this.graphqlUrl = (_c = process.env.GITHUB_GRAPHQL_URL) !== null && _c !== void 0 ? _c : `https://api.github.com/graphql`;
 | |
|     }
 | |
|     get issue() {
 | |
|         const payload = this.payload;
 | |
|         return Object.assign(Object.assign({}, this.repo), { number: (payload.issue || payload.pull_request || payload).number });
 | |
|     }
 | |
|     get repo() {
 | |
|         if (process.env.GITHUB_REPOSITORY) {
 | |
|             const [owner, repo] = process.env.GITHUB_REPOSITORY.split('/');
 | |
|             return { owner, repo };
 | |
|         }
 | |
|         if (this.payload.repository) {
 | |
|             return {
 | |
|                 owner: this.payload.repository.owner.login,
 | |
|                 repo: this.payload.repository.name
 | |
|             };
 | |
|         }
 | |
|         throw new Error("context.repo requires a GITHUB_REPOSITORY environment variable like 'owner/repo'");
 | |
|     }
 | |
| }
 | |
| exports.Context = Context;
 | |
| //# sourceMappingURL=context.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5438:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.getOctokit = exports.context = void 0;
 | |
| const Context = __importStar(__webpack_require__(4087));
 | |
| const utils_1 = __webpack_require__(3030);
 | |
| exports.context = new Context.Context();
 | |
| /**
 | |
|  * Returns a hydrated octokit ready to use for GitHub Actions
 | |
|  *
 | |
|  * @param     token    the repo PAT or GITHUB_TOKEN
 | |
|  * @param     options  other options to set
 | |
|  */
 | |
| function getOctokit(token, options) {
 | |
|     return new utils_1.GitHub(utils_1.getOctokitOptions(token, options));
 | |
| }
 | |
| exports.getOctokit = getOctokit;
 | |
| //# sourceMappingURL=github.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7914:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.getApiBaseUrl = exports.getProxyAgent = exports.getAuthString = void 0;
 | |
| const httpClient = __importStar(__webpack_require__(9925));
 | |
| function getAuthString(token, options) {
 | |
|     if (!token && !options.auth) {
 | |
|         throw new Error('Parameter token or opts.auth is required');
 | |
|     }
 | |
|     else if (token && options.auth) {
 | |
|         throw new Error('Parameters token and opts.auth may not both be specified');
 | |
|     }
 | |
|     return typeof options.auth === 'string' ? options.auth : `token ${token}`;
 | |
| }
 | |
| exports.getAuthString = getAuthString;
 | |
| function getProxyAgent(destinationUrl) {
 | |
|     const hc = new httpClient.HttpClient();
 | |
|     return hc.getAgent(destinationUrl);
 | |
| }
 | |
| exports.getProxyAgent = getProxyAgent;
 | |
| function getApiBaseUrl() {
 | |
|     return process.env['GITHUB_API_URL'] || 'https://api.github.com';
 | |
| }
 | |
| exports.getApiBaseUrl = getApiBaseUrl;
 | |
| //# sourceMappingURL=utils.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3030:
 | |
| /***/ (function(__unused_webpack_module, exports, __webpack_require__) {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
 | |
| }) : (function(o, m, k, k2) {
 | |
|     if (k2 === undefined) k2 = k;
 | |
|     o[k2] = m[k];
 | |
| }));
 | |
| var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
 | |
|     Object.defineProperty(o, "default", { enumerable: true, value: v });
 | |
| }) : function(o, v) {
 | |
|     o["default"] = v;
 | |
| });
 | |
| var __importStar = (this && this.__importStar) || function (mod) {
 | |
|     if (mod && mod.__esModule) return mod;
 | |
|     var result = {};
 | |
|     if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
 | |
|     __setModuleDefault(result, mod);
 | |
|     return result;
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.getOctokitOptions = exports.GitHub = exports.context = void 0;
 | |
| const Context = __importStar(__webpack_require__(4087));
 | |
| const Utils = __importStar(__webpack_require__(7914));
 | |
| // octokit + plugins
 | |
| const core_1 = __webpack_require__(6762);
 | |
| const plugin_rest_endpoint_methods_1 = __webpack_require__(3044);
 | |
| const plugin_paginate_rest_1 = __webpack_require__(4193);
 | |
| exports.context = new Context.Context();
 | |
| const baseUrl = Utils.getApiBaseUrl();
 | |
| const defaults = {
 | |
|     baseUrl,
 | |
|     request: {
 | |
|         agent: Utils.getProxyAgent(baseUrl)
 | |
|     }
 | |
| };
 | |
| exports.GitHub = core_1.Octokit.plugin(plugin_rest_endpoint_methods_1.restEndpointMethods, plugin_paginate_rest_1.paginateRest).defaults(defaults);
 | |
| /**
 | |
|  * Convience function to correctly format Octokit Options to pass into the constructor.
 | |
|  *
 | |
|  * @param     token    the repo PAT or GITHUB_TOKEN
 | |
|  * @param     options  other options to set
 | |
|  */
 | |
| function getOctokitOptions(token, options) {
 | |
|     const opts = Object.assign({}, options || {}); // Shallow clone - don't mutate the object provided by the caller
 | |
|     // Auth
 | |
|     const auth = Utils.getAuthString(token, opts);
 | |
|     if (auth) {
 | |
|         opts.auth = auth;
 | |
|     }
 | |
|     return opts;
 | |
| }
 | |
| exports.getOctokitOptions = getOctokitOptions;
 | |
| //# sourceMappingURL=utils.js.map
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9925:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| const http = __webpack_require__(8605);
 | |
| const https = __webpack_require__(7211);
 | |
| const pm = __webpack_require__(6443);
 | |
| let tunnel;
 | |
| var HttpCodes;
 | |
| (function (HttpCodes) {
 | |
|     HttpCodes[HttpCodes["OK"] = 200] = "OK";
 | |
|     HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices";
 | |
|     HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently";
 | |
|     HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved";
 | |
|     HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther";
 | |
|     HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified";
 | |
|     HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy";
 | |
|     HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy";
 | |
|     HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect";
 | |
|     HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect";
 | |
|     HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest";
 | |
|     HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized";
 | |
|     HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired";
 | |
|     HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden";
 | |
|     HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound";
 | |
|     HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed";
 | |
|     HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable";
 | |
|     HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired";
 | |
|     HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout";
 | |
|     HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict";
 | |
|     HttpCodes[HttpCodes["Gone"] = 410] = "Gone";
 | |
|     HttpCodes[HttpCodes["TooManyRequests"] = 429] = "TooManyRequests";
 | |
|     HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError";
 | |
|     HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented";
 | |
|     HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway";
 | |
|     HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable";
 | |
|     HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout";
 | |
| })(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {}));
 | |
| var Headers;
 | |
| (function (Headers) {
 | |
|     Headers["Accept"] = "accept";
 | |
|     Headers["ContentType"] = "content-type";
 | |
| })(Headers = exports.Headers || (exports.Headers = {}));
 | |
| var MediaTypes;
 | |
| (function (MediaTypes) {
 | |
|     MediaTypes["ApplicationJson"] = "application/json";
 | |
| })(MediaTypes = exports.MediaTypes || (exports.MediaTypes = {}));
 | |
| /**
 | |
|  * Returns the proxy URL, depending upon the supplied url and proxy environment variables.
 | |
|  * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | |
|  */
 | |
| function getProxyUrl(serverUrl) {
 | |
|     let proxyUrl = pm.getProxyUrl(new URL(serverUrl));
 | |
|     return proxyUrl ? proxyUrl.href : '';
 | |
| }
 | |
| exports.getProxyUrl = getProxyUrl;
 | |
| const HttpRedirectCodes = [
 | |
|     HttpCodes.MovedPermanently,
 | |
|     HttpCodes.ResourceMoved,
 | |
|     HttpCodes.SeeOther,
 | |
|     HttpCodes.TemporaryRedirect,
 | |
|     HttpCodes.PermanentRedirect
 | |
| ];
 | |
| const HttpResponseRetryCodes = [
 | |
|     HttpCodes.BadGateway,
 | |
|     HttpCodes.ServiceUnavailable,
 | |
|     HttpCodes.GatewayTimeout
 | |
| ];
 | |
| const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD'];
 | |
| const ExponentialBackoffCeiling = 10;
 | |
| const ExponentialBackoffTimeSlice = 5;
 | |
| class HttpClientError extends Error {
 | |
|     constructor(message, statusCode) {
 | |
|         super(message);
 | |
|         this.name = 'HttpClientError';
 | |
|         this.statusCode = statusCode;
 | |
|         Object.setPrototypeOf(this, HttpClientError.prototype);
 | |
|     }
 | |
| }
 | |
| exports.HttpClientError = HttpClientError;
 | |
| class HttpClientResponse {
 | |
|     constructor(message) {
 | |
|         this.message = message;
 | |
|     }
 | |
|     readBody() {
 | |
|         return new Promise(async (resolve, reject) => {
 | |
|             let output = Buffer.alloc(0);
 | |
|             this.message.on('data', (chunk) => {
 | |
|                 output = Buffer.concat([output, chunk]);
 | |
|             });
 | |
|             this.message.on('end', () => {
 | |
|                 resolve(output.toString());
 | |
|             });
 | |
|         });
 | |
|     }
 | |
| }
 | |
| exports.HttpClientResponse = HttpClientResponse;
 | |
| function isHttps(requestUrl) {
 | |
|     let parsedUrl = new URL(requestUrl);
 | |
|     return parsedUrl.protocol === 'https:';
 | |
| }
 | |
| exports.isHttps = isHttps;
 | |
| class HttpClient {
 | |
|     constructor(userAgent, handlers, requestOptions) {
 | |
|         this._ignoreSslError = false;
 | |
|         this._allowRedirects = true;
 | |
|         this._allowRedirectDowngrade = false;
 | |
|         this._maxRedirects = 50;
 | |
|         this._allowRetries = false;
 | |
|         this._maxRetries = 1;
 | |
|         this._keepAlive = false;
 | |
|         this._disposed = false;
 | |
|         this.userAgent = userAgent;
 | |
|         this.handlers = handlers || [];
 | |
|         this.requestOptions = requestOptions;
 | |
|         if (requestOptions) {
 | |
|             if (requestOptions.ignoreSslError != null) {
 | |
|                 this._ignoreSslError = requestOptions.ignoreSslError;
 | |
|             }
 | |
|             this._socketTimeout = requestOptions.socketTimeout;
 | |
|             if (requestOptions.allowRedirects != null) {
 | |
|                 this._allowRedirects = requestOptions.allowRedirects;
 | |
|             }
 | |
|             if (requestOptions.allowRedirectDowngrade != null) {
 | |
|                 this._allowRedirectDowngrade = requestOptions.allowRedirectDowngrade;
 | |
|             }
 | |
|             if (requestOptions.maxRedirects != null) {
 | |
|                 this._maxRedirects = Math.max(requestOptions.maxRedirects, 0);
 | |
|             }
 | |
|             if (requestOptions.keepAlive != null) {
 | |
|                 this._keepAlive = requestOptions.keepAlive;
 | |
|             }
 | |
|             if (requestOptions.allowRetries != null) {
 | |
|                 this._allowRetries = requestOptions.allowRetries;
 | |
|             }
 | |
|             if (requestOptions.maxRetries != null) {
 | |
|                 this._maxRetries = requestOptions.maxRetries;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     options(requestUrl, additionalHeaders) {
 | |
|         return this.request('OPTIONS', requestUrl, null, additionalHeaders || {});
 | |
|     }
 | |
|     get(requestUrl, additionalHeaders) {
 | |
|         return this.request('GET', requestUrl, null, additionalHeaders || {});
 | |
|     }
 | |
|     del(requestUrl, additionalHeaders) {
 | |
|         return this.request('DELETE', requestUrl, null, additionalHeaders || {});
 | |
|     }
 | |
|     post(requestUrl, data, additionalHeaders) {
 | |
|         return this.request('POST', requestUrl, data, additionalHeaders || {});
 | |
|     }
 | |
|     patch(requestUrl, data, additionalHeaders) {
 | |
|         return this.request('PATCH', requestUrl, data, additionalHeaders || {});
 | |
|     }
 | |
|     put(requestUrl, data, additionalHeaders) {
 | |
|         return this.request('PUT', requestUrl, data, additionalHeaders || {});
 | |
|     }
 | |
|     head(requestUrl, additionalHeaders) {
 | |
|         return this.request('HEAD', requestUrl, null, additionalHeaders || {});
 | |
|     }
 | |
|     sendStream(verb, requestUrl, stream, additionalHeaders) {
 | |
|         return this.request(verb, requestUrl, stream, additionalHeaders);
 | |
|     }
 | |
|     /**
 | |
|      * Gets a typed object from an endpoint
 | |
|      * Be aware that not found returns a null.  Other errors (4xx, 5xx) reject the promise
 | |
|      */
 | |
|     async getJson(requestUrl, additionalHeaders = {}) {
 | |
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
 | |
|         let res = await this.get(requestUrl, additionalHeaders);
 | |
|         return this._processResponse(res, this.requestOptions);
 | |
|     }
 | |
|     async postJson(requestUrl, obj, additionalHeaders = {}) {
 | |
|         let data = JSON.stringify(obj, null, 2);
 | |
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
 | |
|         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
 | |
|         let res = await this.post(requestUrl, data, additionalHeaders);
 | |
|         return this._processResponse(res, this.requestOptions);
 | |
|     }
 | |
|     async putJson(requestUrl, obj, additionalHeaders = {}) {
 | |
|         let data = JSON.stringify(obj, null, 2);
 | |
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
 | |
|         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
 | |
|         let res = await this.put(requestUrl, data, additionalHeaders);
 | |
|         return this._processResponse(res, this.requestOptions);
 | |
|     }
 | |
|     async patchJson(requestUrl, obj, additionalHeaders = {}) {
 | |
|         let data = JSON.stringify(obj, null, 2);
 | |
|         additionalHeaders[Headers.Accept] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.Accept, MediaTypes.ApplicationJson);
 | |
|         additionalHeaders[Headers.ContentType] = this._getExistingOrDefaultHeader(additionalHeaders, Headers.ContentType, MediaTypes.ApplicationJson);
 | |
|         let res = await this.patch(requestUrl, data, additionalHeaders);
 | |
|         return this._processResponse(res, this.requestOptions);
 | |
|     }
 | |
|     /**
 | |
|      * Makes a raw http request.
 | |
|      * All other methods such as get, post, patch, and request ultimately call this.
 | |
|      * Prefer get, del, post and patch
 | |
|      */
 | |
|     async request(verb, requestUrl, data, headers) {
 | |
|         if (this._disposed) {
 | |
|             throw new Error('Client has already been disposed.');
 | |
|         }
 | |
|         let parsedUrl = new URL(requestUrl);
 | |
|         let info = this._prepareRequest(verb, parsedUrl, headers);
 | |
|         // Only perform retries on reads since writes may not be idempotent.
 | |
|         let maxTries = this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1
 | |
|             ? this._maxRetries + 1
 | |
|             : 1;
 | |
|         let numTries = 0;
 | |
|         let response;
 | |
|         while (numTries < maxTries) {
 | |
|             response = await this.requestRaw(info, data);
 | |
|             // Check if it's an authentication challenge
 | |
|             if (response &&
 | |
|                 response.message &&
 | |
|                 response.message.statusCode === HttpCodes.Unauthorized) {
 | |
|                 let authenticationHandler;
 | |
|                 for (let i = 0; i < this.handlers.length; i++) {
 | |
|                     if (this.handlers[i].canHandleAuthentication(response)) {
 | |
|                         authenticationHandler = this.handlers[i];
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|                 if (authenticationHandler) {
 | |
|                     return authenticationHandler.handleAuthentication(this, info, data);
 | |
|                 }
 | |
|                 else {
 | |
|                     // We have received an unauthorized response but have no handlers to handle it.
 | |
|                     // Let the response return to the caller.
 | |
|                     return response;
 | |
|                 }
 | |
|             }
 | |
|             let redirectsRemaining = this._maxRedirects;
 | |
|             while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 &&
 | |
|                 this._allowRedirects &&
 | |
|                 redirectsRemaining > 0) {
 | |
|                 const redirectUrl = response.message.headers['location'];
 | |
|                 if (!redirectUrl) {
 | |
|                     // if there's no location to redirect to, we won't
 | |
|                     break;
 | |
|                 }
 | |
|                 let parsedRedirectUrl = new URL(redirectUrl);
 | |
|                 if (parsedUrl.protocol == 'https:' &&
 | |
|                     parsedUrl.protocol != parsedRedirectUrl.protocol &&
 | |
|                     !this._allowRedirectDowngrade) {
 | |
|                     throw new Error('Redirect from HTTPS to HTTP protocol. This downgrade is not allowed for security reasons. If you want to allow this behavior, set the allowRedirectDowngrade option to true.');
 | |
|                 }
 | |
|                 // we need to finish reading the response before reassigning response
 | |
|                 // which will leak the open socket.
 | |
|                 await response.readBody();
 | |
|                 // strip authorization header if redirected to a different hostname
 | |
|                 if (parsedRedirectUrl.hostname !== parsedUrl.hostname) {
 | |
|                     for (let header in headers) {
 | |
|                         // header names are case insensitive
 | |
|                         if (header.toLowerCase() === 'authorization') {
 | |
|                             delete headers[header];
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|                 // let's make the request with the new redirectUrl
 | |
|                 info = this._prepareRequest(verb, parsedRedirectUrl, headers);
 | |
|                 response = await this.requestRaw(info, data);
 | |
|                 redirectsRemaining--;
 | |
|             }
 | |
|             if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) {
 | |
|                 // If not a retry code, return immediately instead of retrying
 | |
|                 return response;
 | |
|             }
 | |
|             numTries += 1;
 | |
|             if (numTries < maxTries) {
 | |
|                 await response.readBody();
 | |
|                 await this._performExponentialBackoff(numTries);
 | |
|             }
 | |
|         }
 | |
|         return response;
 | |
|     }
 | |
|     /**
 | |
|      * Needs to be called if keepAlive is set to true in request options.
 | |
|      */
 | |
|     dispose() {
 | |
|         if (this._agent) {
 | |
|             this._agent.destroy();
 | |
|         }
 | |
|         this._disposed = true;
 | |
|     }
 | |
|     /**
 | |
|      * Raw request.
 | |
|      * @param info
 | |
|      * @param data
 | |
|      */
 | |
|     requestRaw(info, data) {
 | |
|         return new Promise((resolve, reject) => {
 | |
|             let callbackForResult = function (err, res) {
 | |
|                 if (err) {
 | |
|                     reject(err);
 | |
|                 }
 | |
|                 resolve(res);
 | |
|             };
 | |
|             this.requestRawWithCallback(info, data, callbackForResult);
 | |
|         });
 | |
|     }
 | |
|     /**
 | |
|      * Raw request with callback.
 | |
|      * @param info
 | |
|      * @param data
 | |
|      * @param onResult
 | |
|      */
 | |
|     requestRawWithCallback(info, data, onResult) {
 | |
|         let socket;
 | |
|         if (typeof data === 'string') {
 | |
|             info.options.headers['Content-Length'] = Buffer.byteLength(data, 'utf8');
 | |
|         }
 | |
|         let callbackCalled = false;
 | |
|         let handleResult = (err, res) => {
 | |
|             if (!callbackCalled) {
 | |
|                 callbackCalled = true;
 | |
|                 onResult(err, res);
 | |
|             }
 | |
|         };
 | |
|         let req = info.httpModule.request(info.options, (msg) => {
 | |
|             let res = new HttpClientResponse(msg);
 | |
|             handleResult(null, res);
 | |
|         });
 | |
|         req.on('socket', sock => {
 | |
|             socket = sock;
 | |
|         });
 | |
|         // If we ever get disconnected, we want the socket to timeout eventually
 | |
|         req.setTimeout(this._socketTimeout || 3 * 60000, () => {
 | |
|             if (socket) {
 | |
|                 socket.end();
 | |
|             }
 | |
|             handleResult(new Error('Request timeout: ' + info.options.path), null);
 | |
|         });
 | |
|         req.on('error', function (err) {
 | |
|             // err has statusCode property
 | |
|             // res should have headers
 | |
|             handleResult(err, null);
 | |
|         });
 | |
|         if (data && typeof data === 'string') {
 | |
|             req.write(data, 'utf8');
 | |
|         }
 | |
|         if (data && typeof data !== 'string') {
 | |
|             data.on('close', function () {
 | |
|                 req.end();
 | |
|             });
 | |
|             data.pipe(req);
 | |
|         }
 | |
|         else {
 | |
|             req.end();
 | |
|         }
 | |
|     }
 | |
|     /**
 | |
|      * Gets an http agent. This function is useful when you need an http agent that handles
 | |
|      * routing through a proxy server - depending upon the url and proxy environment variables.
 | |
|      * @param serverUrl  The server URL where the request will be sent. For example, https://api.github.com
 | |
|      */
 | |
|     getAgent(serverUrl) {
 | |
|         let parsedUrl = new URL(serverUrl);
 | |
|         return this._getAgent(parsedUrl);
 | |
|     }
 | |
|     _prepareRequest(method, requestUrl, headers) {
 | |
|         const info = {};
 | |
|         info.parsedUrl = requestUrl;
 | |
|         const usingSsl = info.parsedUrl.protocol === 'https:';
 | |
|         info.httpModule = usingSsl ? https : http;
 | |
|         const defaultPort = usingSsl ? 443 : 80;
 | |
|         info.options = {};
 | |
|         info.options.host = info.parsedUrl.hostname;
 | |
|         info.options.port = info.parsedUrl.port
 | |
|             ? parseInt(info.parsedUrl.port)
 | |
|             : defaultPort;
 | |
|         info.options.path =
 | |
|             (info.parsedUrl.pathname || '') + (info.parsedUrl.search || '');
 | |
|         info.options.method = method;
 | |
|         info.options.headers = this._mergeHeaders(headers);
 | |
|         if (this.userAgent != null) {
 | |
|             info.options.headers['user-agent'] = this.userAgent;
 | |
|         }
 | |
|         info.options.agent = this._getAgent(info.parsedUrl);
 | |
|         // gives handlers an opportunity to participate
 | |
|         if (this.handlers) {
 | |
|             this.handlers.forEach(handler => {
 | |
|                 handler.prepareRequest(info.options);
 | |
|             });
 | |
|         }
 | |
|         return info;
 | |
|     }
 | |
|     _mergeHeaders(headers) {
 | |
|         const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
 | |
|         if (this.requestOptions && this.requestOptions.headers) {
 | |
|             return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers));
 | |
|         }
 | |
|         return lowercaseKeys(headers || {});
 | |
|     }
 | |
|     _getExistingOrDefaultHeader(additionalHeaders, header, _default) {
 | |
|         const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => ((c[k.toLowerCase()] = obj[k]), c), {});
 | |
|         let clientHeader;
 | |
|         if (this.requestOptions && this.requestOptions.headers) {
 | |
|             clientHeader = lowercaseKeys(this.requestOptions.headers)[header];
 | |
|         }
 | |
|         return additionalHeaders[header] || clientHeader || _default;
 | |
|     }
 | |
|     _getAgent(parsedUrl) {
 | |
|         let agent;
 | |
|         let proxyUrl = pm.getProxyUrl(parsedUrl);
 | |
|         let useProxy = proxyUrl && proxyUrl.hostname;
 | |
|         if (this._keepAlive && useProxy) {
 | |
|             agent = this._proxyAgent;
 | |
|         }
 | |
|         if (this._keepAlive && !useProxy) {
 | |
|             agent = this._agent;
 | |
|         }
 | |
|         // if agent is already assigned use that agent.
 | |
|         if (!!agent) {
 | |
|             return agent;
 | |
|         }
 | |
|         const usingSsl = parsedUrl.protocol === 'https:';
 | |
|         let maxSockets = 100;
 | |
|         if (!!this.requestOptions) {
 | |
|             maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets;
 | |
|         }
 | |
|         if (useProxy) {
 | |
|             // If using proxy, need tunnel
 | |
|             if (!tunnel) {
 | |
|                 tunnel = __webpack_require__(4294);
 | |
|             }
 | |
|             const agentOptions = {
 | |
|                 maxSockets: maxSockets,
 | |
|                 keepAlive: this._keepAlive,
 | |
|                 proxy: {
 | |
|                     ...((proxyUrl.username || proxyUrl.password) && {
 | |
|                         proxyAuth: `${proxyUrl.username}:${proxyUrl.password}`
 | |
|                     }),
 | |
|                     host: proxyUrl.hostname,
 | |
|                     port: proxyUrl.port
 | |
|                 }
 | |
|             };
 | |
|             let tunnelAgent;
 | |
|             const overHttps = proxyUrl.protocol === 'https:';
 | |
|             if (usingSsl) {
 | |
|                 tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp;
 | |
|             }
 | |
|             else {
 | |
|                 tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp;
 | |
|             }
 | |
|             agent = tunnelAgent(agentOptions);
 | |
|             this._proxyAgent = agent;
 | |
|         }
 | |
|         // if reusing agent across request and tunneling agent isn't assigned create a new agent
 | |
|         if (this._keepAlive && !agent) {
 | |
|             const options = { keepAlive: this._keepAlive, maxSockets: maxSockets };
 | |
|             agent = usingSsl ? new https.Agent(options) : new http.Agent(options);
 | |
|             this._agent = agent;
 | |
|         }
 | |
|         // if not using private agent and tunnel agent isn't setup then use global agent
 | |
|         if (!agent) {
 | |
|             agent = usingSsl ? https.globalAgent : http.globalAgent;
 | |
|         }
 | |
|         if (usingSsl && this._ignoreSslError) {
 | |
|             // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process
 | |
|             // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options
 | |
|             // we have to cast it to any and change it directly
 | |
|             agent.options = Object.assign(agent.options || {}, {
 | |
|                 rejectUnauthorized: false
 | |
|             });
 | |
|         }
 | |
|         return agent;
 | |
|     }
 | |
|     _performExponentialBackoff(retryNumber) {
 | |
|         retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber);
 | |
|         const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber);
 | |
|         return new Promise(resolve => setTimeout(() => resolve(), ms));
 | |
|     }
 | |
|     static dateTimeDeserializer(key, value) {
 | |
|         if (typeof value === 'string') {
 | |
|             let a = new Date(value);
 | |
|             if (!isNaN(a.valueOf())) {
 | |
|                 return a;
 | |
|             }
 | |
|         }
 | |
|         return value;
 | |
|     }
 | |
|     async _processResponse(res, options) {
 | |
|         return new Promise(async (resolve, reject) => {
 | |
|             const statusCode = res.message.statusCode;
 | |
|             const response = {
 | |
|                 statusCode: statusCode,
 | |
|                 result: null,
 | |
|                 headers: {}
 | |
|             };
 | |
|             // not found leads to null obj returned
 | |
|             if (statusCode == HttpCodes.NotFound) {
 | |
|                 resolve(response);
 | |
|             }
 | |
|             let obj;
 | |
|             let contents;
 | |
|             // get the result from the body
 | |
|             try {
 | |
|                 contents = await res.readBody();
 | |
|                 if (contents && contents.length > 0) {
 | |
|                     if (options && options.deserializeDates) {
 | |
|                         obj = JSON.parse(contents, HttpClient.dateTimeDeserializer);
 | |
|                     }
 | |
|                     else {
 | |
|                         obj = JSON.parse(contents);
 | |
|                     }
 | |
|                     response.result = obj;
 | |
|                 }
 | |
|                 response.headers = res.message.headers;
 | |
|             }
 | |
|             catch (err) {
 | |
|                 // Invalid resource (contents not json);  leaving result obj null
 | |
|             }
 | |
|             // note that 3xx redirects are handled by the http layer.
 | |
|             if (statusCode > 299) {
 | |
|                 let msg;
 | |
|                 // if exception/error in body, attempt to get better error
 | |
|                 if (obj && obj.message) {
 | |
|                     msg = obj.message;
 | |
|                 }
 | |
|                 else if (contents && contents.length > 0) {
 | |
|                     // it may be the case that the exception is in the body message as string
 | |
|                     msg = contents;
 | |
|                 }
 | |
|                 else {
 | |
|                     msg = 'Failed request: (' + statusCode + ')';
 | |
|                 }
 | |
|                 let err = new HttpClientError(msg, statusCode);
 | |
|                 err.result = response.result;
 | |
|                 reject(err);
 | |
|             }
 | |
|             else {
 | |
|                 resolve(response);
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| }
 | |
| exports.HttpClient = HttpClient;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6443:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| function getProxyUrl(reqUrl) {
 | |
|     let usingSsl = reqUrl.protocol === 'https:';
 | |
|     let proxyUrl;
 | |
|     if (checkBypass(reqUrl)) {
 | |
|         return proxyUrl;
 | |
|     }
 | |
|     let proxyVar;
 | |
|     if (usingSsl) {
 | |
|         proxyVar = process.env['https_proxy'] || process.env['HTTPS_PROXY'];
 | |
|     }
 | |
|     else {
 | |
|         proxyVar = process.env['http_proxy'] || process.env['HTTP_PROXY'];
 | |
|     }
 | |
|     if (proxyVar) {
 | |
|         proxyUrl = new URL(proxyVar);
 | |
|     }
 | |
|     return proxyUrl;
 | |
| }
 | |
| exports.getProxyUrl = getProxyUrl;
 | |
| function checkBypass(reqUrl) {
 | |
|     if (!reqUrl.hostname) {
 | |
|         return false;
 | |
|     }
 | |
|     let noProxy = process.env['no_proxy'] || process.env['NO_PROXY'] || '';
 | |
|     if (!noProxy) {
 | |
|         return false;
 | |
|     }
 | |
|     // Determine the request port
 | |
|     let reqPort;
 | |
|     if (reqUrl.port) {
 | |
|         reqPort = Number(reqUrl.port);
 | |
|     }
 | |
|     else if (reqUrl.protocol === 'http:') {
 | |
|         reqPort = 80;
 | |
|     }
 | |
|     else if (reqUrl.protocol === 'https:') {
 | |
|         reqPort = 443;
 | |
|     }
 | |
|     // Format the request hostname and hostname with port
 | |
|     let upperReqHosts = [reqUrl.hostname.toUpperCase()];
 | |
|     if (typeof reqPort === 'number') {
 | |
|         upperReqHosts.push(`${upperReqHosts[0]}:${reqPort}`);
 | |
|     }
 | |
|     // Compare request host against noproxy
 | |
|     for (let upperNoProxyItem of noProxy
 | |
|         .split(',')
 | |
|         .map(x => x.trim().toUpperCase())
 | |
|         .filter(x => x)) {
 | |
|         if (upperReqHosts.some(x => x === upperNoProxyItem)) {
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
|     return false;
 | |
| }
 | |
| exports.checkBypass = checkBypass;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 334:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| async function auth(token) {
 | |
|   const tokenType = token.split(/\./).length === 3 ? "app" : /^v\d+\./.test(token) ? "installation" : "oauth";
 | |
|   return {
 | |
|     type: "token",
 | |
|     token: token,
 | |
|     tokenType
 | |
|   };
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Prefix token for usage in the Authorization header
 | |
|  *
 | |
|  * @param token OAuth token or JSON Web Token
 | |
|  */
 | |
| function withAuthorizationPrefix(token) {
 | |
|   if (token.split(/\./).length === 3) {
 | |
|     return `bearer ${token}`;
 | |
|   }
 | |
| 
 | |
|   return `token ${token}`;
 | |
| }
 | |
| 
 | |
| async function hook(token, request, route, parameters) {
 | |
|   const endpoint = request.endpoint.merge(route, parameters);
 | |
|   endpoint.headers.authorization = withAuthorizationPrefix(token);
 | |
|   return request(endpoint);
 | |
| }
 | |
| 
 | |
| const createTokenAuth = function createTokenAuth(token) {
 | |
|   if (!token) {
 | |
|     throw new Error("[@octokit/auth-token] No token passed to createTokenAuth");
 | |
|   }
 | |
| 
 | |
|   if (typeof token !== "string") {
 | |
|     throw new Error("[@octokit/auth-token] Token passed to createTokenAuth is not a string");
 | |
|   }
 | |
| 
 | |
|   token = token.replace(/^(token|bearer) +/i, "");
 | |
|   return Object.assign(auth.bind(null, token), {
 | |
|     hook: hook.bind(null, token)
 | |
|   });
 | |
| };
 | |
| 
 | |
| exports.createTokenAuth = createTokenAuth;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6762:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| var universalUserAgent = __webpack_require__(5030);
 | |
| var beforeAfterHook = __webpack_require__(3682);
 | |
| var request = __webpack_require__(6234);
 | |
| var graphql = __webpack_require__(8467);
 | |
| var authToken = __webpack_require__(334);
 | |
| 
 | |
| function _objectWithoutPropertiesLoose(source, excluded) {
 | |
|   if (source == null) return {};
 | |
|   var target = {};
 | |
|   var sourceKeys = Object.keys(source);
 | |
|   var key, i;
 | |
| 
 | |
|   for (i = 0; i < sourceKeys.length; i++) {
 | |
|     key = sourceKeys[i];
 | |
|     if (excluded.indexOf(key) >= 0) continue;
 | |
|     target[key] = source[key];
 | |
|   }
 | |
| 
 | |
|   return target;
 | |
| }
 | |
| 
 | |
| function _objectWithoutProperties(source, excluded) {
 | |
|   if (source == null) return {};
 | |
| 
 | |
|   var target = _objectWithoutPropertiesLoose(source, excluded);
 | |
| 
 | |
|   var key, i;
 | |
| 
 | |
|   if (Object.getOwnPropertySymbols) {
 | |
|     var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
 | |
| 
 | |
|     for (i = 0; i < sourceSymbolKeys.length; i++) {
 | |
|       key = sourceSymbolKeys[i];
 | |
|       if (excluded.indexOf(key) >= 0) continue;
 | |
|       if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
 | |
|       target[key] = source[key];
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return target;
 | |
| }
 | |
| 
 | |
| const VERSION = "3.4.0";
 | |
| 
 | |
| class Octokit {
 | |
|   constructor(options = {}) {
 | |
|     const hook = new beforeAfterHook.Collection();
 | |
|     const requestDefaults = {
 | |
|       baseUrl: request.request.endpoint.DEFAULTS.baseUrl,
 | |
|       headers: {},
 | |
|       request: Object.assign({}, options.request, {
 | |
|         // @ts-ignore internal usage only, no need to type
 | |
|         hook: hook.bind(null, "request")
 | |
|       }),
 | |
|       mediaType: {
 | |
|         previews: [],
 | |
|         format: ""
 | |
|       }
 | |
|     }; // prepend default user agent with `options.userAgent` if set
 | |
| 
 | |
|     requestDefaults.headers["user-agent"] = [options.userAgent, `octokit-core.js/${VERSION} ${universalUserAgent.getUserAgent()}`].filter(Boolean).join(" ");
 | |
| 
 | |
|     if (options.baseUrl) {
 | |
|       requestDefaults.baseUrl = options.baseUrl;
 | |
|     }
 | |
| 
 | |
|     if (options.previews) {
 | |
|       requestDefaults.mediaType.previews = options.previews;
 | |
|     }
 | |
| 
 | |
|     if (options.timeZone) {
 | |
|       requestDefaults.headers["time-zone"] = options.timeZone;
 | |
|     }
 | |
| 
 | |
|     this.request = request.request.defaults(requestDefaults);
 | |
|     this.graphql = graphql.withCustomRequest(this.request).defaults(requestDefaults);
 | |
|     this.log = Object.assign({
 | |
|       debug: () => {},
 | |
|       info: () => {},
 | |
|       warn: console.warn.bind(console),
 | |
|       error: console.error.bind(console)
 | |
|     }, options.log);
 | |
|     this.hook = hook; // (1) If neither `options.authStrategy` nor `options.auth` are set, the `octokit` instance
 | |
|     //     is unauthenticated. The `this.auth()` method is a no-op and no request hook is registered.
 | |
|     // (2) If only `options.auth` is set, use the default token authentication strategy.
 | |
|     // (3) If `options.authStrategy` is set then use it and pass in `options.auth`. Always pass own request as many strategies accept a custom request instance.
 | |
|     // TODO: type `options.auth` based on `options.authStrategy`.
 | |
| 
 | |
|     if (!options.authStrategy) {
 | |
|       if (!options.auth) {
 | |
|         // (1)
 | |
|         this.auth = async () => ({
 | |
|           type: "unauthenticated"
 | |
|         });
 | |
|       } else {
 | |
|         // (2)
 | |
|         const auth = authToken.createTokenAuth(options.auth); // @ts-ignore  ¯\_(ツ)_/¯
 | |
| 
 | |
|         hook.wrap("request", auth.hook);
 | |
|         this.auth = auth;
 | |
|       }
 | |
|     } else {
 | |
|       const {
 | |
|         authStrategy
 | |
|       } = options,
 | |
|             otherOptions = _objectWithoutProperties(options, ["authStrategy"]);
 | |
| 
 | |
|       const auth = authStrategy(Object.assign({
 | |
|         request: this.request,
 | |
|         log: this.log,
 | |
|         // we pass the current octokit instance as well as its constructor options
 | |
|         // to allow for authentication strategies that return a new octokit instance
 | |
|         // that shares the same internal state as the current one. The original
 | |
|         // requirement for this was the "event-octokit" authentication strategy
 | |
|         // of https://github.com/probot/octokit-auth-probot.
 | |
|         octokit: this,
 | |
|         octokitOptions: otherOptions
 | |
|       }, options.auth)); // @ts-ignore  ¯\_(ツ)_/¯
 | |
| 
 | |
|       hook.wrap("request", auth.hook);
 | |
|       this.auth = auth;
 | |
|     } // apply plugins
 | |
|     // https://stackoverflow.com/a/16345172
 | |
| 
 | |
| 
 | |
|     const classConstructor = this.constructor;
 | |
|     classConstructor.plugins.forEach(plugin => {
 | |
|       Object.assign(this, plugin(this, options));
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   static defaults(defaults) {
 | |
|     const OctokitWithDefaults = class extends this {
 | |
|       constructor(...args) {
 | |
|         const options = args[0] || {};
 | |
| 
 | |
|         if (typeof defaults === "function") {
 | |
|           super(defaults(options));
 | |
|           return;
 | |
|         }
 | |
| 
 | |
|         super(Object.assign({}, defaults, options, options.userAgent && defaults.userAgent ? {
 | |
|           userAgent: `${options.userAgent} ${defaults.userAgent}`
 | |
|         } : null));
 | |
|       }
 | |
| 
 | |
|     };
 | |
|     return OctokitWithDefaults;
 | |
|   }
 | |
|   /**
 | |
|    * Attach a plugin (or many) to your Octokit instance.
 | |
|    *
 | |
|    * @example
 | |
|    * const API = Octokit.plugin(plugin1, plugin2, plugin3, ...)
 | |
|    */
 | |
| 
 | |
| 
 | |
|   static plugin(...newPlugins) {
 | |
|     var _a;
 | |
| 
 | |
|     const currentPlugins = this.plugins;
 | |
|     const NewOctokit = (_a = class extends this {}, _a.plugins = currentPlugins.concat(newPlugins.filter(plugin => !currentPlugins.includes(plugin))), _a);
 | |
|     return NewOctokit;
 | |
|   }
 | |
| 
 | |
| }
 | |
| Octokit.VERSION = VERSION;
 | |
| Octokit.plugins = [];
 | |
| 
 | |
| exports.Octokit = Octokit;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9440:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| var isPlainObject = __webpack_require__(3287);
 | |
| var universalUserAgent = __webpack_require__(5030);
 | |
| 
 | |
| function lowercaseKeys(object) {
 | |
|   if (!object) {
 | |
|     return {};
 | |
|   }
 | |
| 
 | |
|   return Object.keys(object).reduce((newObj, key) => {
 | |
|     newObj[key.toLowerCase()] = object[key];
 | |
|     return newObj;
 | |
|   }, {});
 | |
| }
 | |
| 
 | |
| function mergeDeep(defaults, options) {
 | |
|   const result = Object.assign({}, defaults);
 | |
|   Object.keys(options).forEach(key => {
 | |
|     if (isPlainObject.isPlainObject(options[key])) {
 | |
|       if (!(key in defaults)) Object.assign(result, {
 | |
|         [key]: options[key]
 | |
|       });else result[key] = mergeDeep(defaults[key], options[key]);
 | |
|     } else {
 | |
|       Object.assign(result, {
 | |
|         [key]: options[key]
 | |
|       });
 | |
|     }
 | |
|   });
 | |
|   return result;
 | |
| }
 | |
| 
 | |
| function removeUndefinedProperties(obj) {
 | |
|   for (const key in obj) {
 | |
|     if (obj[key] === undefined) {
 | |
|       delete obj[key];
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return obj;
 | |
| }
 | |
| 
 | |
| function merge(defaults, route, options) {
 | |
|   if (typeof route === "string") {
 | |
|     let [method, url] = route.split(" ");
 | |
|     options = Object.assign(url ? {
 | |
|       method,
 | |
|       url
 | |
|     } : {
 | |
|       url: method
 | |
|     }, options);
 | |
|   } else {
 | |
|     options = Object.assign({}, route);
 | |
|   } // lowercase header names before merging with defaults to avoid duplicates
 | |
| 
 | |
| 
 | |
|   options.headers = lowercaseKeys(options.headers); // remove properties with undefined values before merging
 | |
| 
 | |
|   removeUndefinedProperties(options);
 | |
|   removeUndefinedProperties(options.headers);
 | |
|   const mergedOptions = mergeDeep(defaults || {}, options); // mediaType.previews arrays are merged, instead of overwritten
 | |
| 
 | |
|   if (defaults && defaults.mediaType.previews.length) {
 | |
|     mergedOptions.mediaType.previews = defaults.mediaType.previews.filter(preview => !mergedOptions.mediaType.previews.includes(preview)).concat(mergedOptions.mediaType.previews);
 | |
|   }
 | |
| 
 | |
|   mergedOptions.mediaType.previews = mergedOptions.mediaType.previews.map(preview => preview.replace(/-preview/, ""));
 | |
|   return mergedOptions;
 | |
| }
 | |
| 
 | |
| function addQueryParameters(url, parameters) {
 | |
|   const separator = /\?/.test(url) ? "&" : "?";
 | |
|   const names = Object.keys(parameters);
 | |
| 
 | |
|   if (names.length === 0) {
 | |
|     return url;
 | |
|   }
 | |
| 
 | |
|   return url + separator + names.map(name => {
 | |
|     if (name === "q") {
 | |
|       return "q=" + parameters.q.split("+").map(encodeURIComponent).join("+");
 | |
|     }
 | |
| 
 | |
|     return `${name}=${encodeURIComponent(parameters[name])}`;
 | |
|   }).join("&");
 | |
| }
 | |
| 
 | |
| const urlVariableRegex = /\{[^}]+\}/g;
 | |
| 
 | |
| function removeNonChars(variableName) {
 | |
|   return variableName.replace(/^\W+|\W+$/g, "").split(/,/);
 | |
| }
 | |
| 
 | |
| function extractUrlVariableNames(url) {
 | |
|   const matches = url.match(urlVariableRegex);
 | |
| 
 | |
|   if (!matches) {
 | |
|     return [];
 | |
|   }
 | |
| 
 | |
|   return matches.map(removeNonChars).reduce((a, b) => a.concat(b), []);
 | |
| }
 | |
| 
 | |
| function omit(object, keysToOmit) {
 | |
|   return Object.keys(object).filter(option => !keysToOmit.includes(option)).reduce((obj, key) => {
 | |
|     obj[key] = object[key];
 | |
|     return obj;
 | |
|   }, {});
 | |
| }
 | |
| 
 | |
| // Based on https://github.com/bramstein/url-template, licensed under BSD
 | |
| // TODO: create separate package.
 | |
| //
 | |
| // Copyright (c) 2012-2014, Bram Stein
 | |
| // All rights reserved.
 | |
| // Redistribution and use in source and binary forms, with or without
 | |
| // modification, are permitted provided that the following conditions
 | |
| // are met:
 | |
| //  1. Redistributions of source code must retain the above copyright
 | |
| //     notice, this list of conditions and the following disclaimer.
 | |
| //  2. Redistributions in binary form must reproduce the above copyright
 | |
| //     notice, this list of conditions and the following disclaimer in the
 | |
| //     documentation and/or other materials provided with the distribution.
 | |
| //  3. The name of the author may not be used to endorse or promote products
 | |
| //     derived from this software without specific prior written permission.
 | |
| // THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR IMPLIED
 | |
| // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 | |
| // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
 | |
| // EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 | |
| // INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 | |
| // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | |
| // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 | |
| // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | |
| // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
 | |
| // EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| /* istanbul ignore file */
 | |
| function encodeReserved(str) {
 | |
|   return str.split(/(%[0-9A-Fa-f]{2})/g).map(function (part) {
 | |
|     if (!/%[0-9A-Fa-f]/.test(part)) {
 | |
|       part = encodeURI(part).replace(/%5B/g, "[").replace(/%5D/g, "]");
 | |
|     }
 | |
| 
 | |
|     return part;
 | |
|   }).join("");
 | |
| }
 | |
| 
 | |
| function encodeUnreserved(str) {
 | |
|   return encodeURIComponent(str).replace(/[!'()*]/g, function (c) {
 | |
|     return "%" + c.charCodeAt(0).toString(16).toUpperCase();
 | |
|   });
 | |
| }
 | |
| 
 | |
| function encodeValue(operator, value, key) {
 | |
|   value = operator === "+" || operator === "#" ? encodeReserved(value) : encodeUnreserved(value);
 | |
| 
 | |
|   if (key) {
 | |
|     return encodeUnreserved(key) + "=" + value;
 | |
|   } else {
 | |
|     return value;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function isDefined(value) {
 | |
|   return value !== undefined && value !== null;
 | |
| }
 | |
| 
 | |
| function isKeyOperator(operator) {
 | |
|   return operator === ";" || operator === "&" || operator === "?";
 | |
| }
 | |
| 
 | |
| function getValues(context, operator, key, modifier) {
 | |
|   var value = context[key],
 | |
|       result = [];
 | |
| 
 | |
|   if (isDefined(value) && value !== "") {
 | |
|     if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
 | |
|       value = value.toString();
 | |
| 
 | |
|       if (modifier && modifier !== "*") {
 | |
|         value = value.substring(0, parseInt(modifier, 10));
 | |
|       }
 | |
| 
 | |
|       result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
 | |
|     } else {
 | |
|       if (modifier === "*") {
 | |
|         if (Array.isArray(value)) {
 | |
|           value.filter(isDefined).forEach(function (value) {
 | |
|             result.push(encodeValue(operator, value, isKeyOperator(operator) ? key : ""));
 | |
|           });
 | |
|         } else {
 | |
|           Object.keys(value).forEach(function (k) {
 | |
|             if (isDefined(value[k])) {
 | |
|               result.push(encodeValue(operator, value[k], k));
 | |
|             }
 | |
|           });
 | |
|         }
 | |
|       } else {
 | |
|         const tmp = [];
 | |
| 
 | |
|         if (Array.isArray(value)) {
 | |
|           value.filter(isDefined).forEach(function (value) {
 | |
|             tmp.push(encodeValue(operator, value));
 | |
|           });
 | |
|         } else {
 | |
|           Object.keys(value).forEach(function (k) {
 | |
|             if (isDefined(value[k])) {
 | |
|               tmp.push(encodeUnreserved(k));
 | |
|               tmp.push(encodeValue(operator, value[k].toString()));
 | |
|             }
 | |
|           });
 | |
|         }
 | |
| 
 | |
|         if (isKeyOperator(operator)) {
 | |
|           result.push(encodeUnreserved(key) + "=" + tmp.join(","));
 | |
|         } else if (tmp.length !== 0) {
 | |
|           result.push(tmp.join(","));
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   } else {
 | |
|     if (operator === ";") {
 | |
|       if (isDefined(value)) {
 | |
|         result.push(encodeUnreserved(key));
 | |
|       }
 | |
|     } else if (value === "" && (operator === "&" || operator === "?")) {
 | |
|       result.push(encodeUnreserved(key) + "=");
 | |
|     } else if (value === "") {
 | |
|       result.push("");
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return result;
 | |
| }
 | |
| 
 | |
| function parseUrl(template) {
 | |
|   return {
 | |
|     expand: expand.bind(null, template)
 | |
|   };
 | |
| }
 | |
| 
 | |
| function expand(template, context) {
 | |
|   var operators = ["+", "#", ".", "/", ";", "?", "&"];
 | |
|   return template.replace(/\{([^\{\}]+)\}|([^\{\}]+)/g, function (_, expression, literal) {
 | |
|     if (expression) {
 | |
|       let operator = "";
 | |
|       const values = [];
 | |
| 
 | |
|       if (operators.indexOf(expression.charAt(0)) !== -1) {
 | |
|         operator = expression.charAt(0);
 | |
|         expression = expression.substr(1);
 | |
|       }
 | |
| 
 | |
|       expression.split(/,/g).forEach(function (variable) {
 | |
|         var tmp = /([^:\*]*)(?::(\d+)|(\*))?/.exec(variable);
 | |
|         values.push(getValues(context, operator, tmp[1], tmp[2] || tmp[3]));
 | |
|       });
 | |
| 
 | |
|       if (operator && operator !== "+") {
 | |
|         var separator = ",";
 | |
| 
 | |
|         if (operator === "?") {
 | |
|           separator = "&";
 | |
|         } else if (operator !== "#") {
 | |
|           separator = operator;
 | |
|         }
 | |
| 
 | |
|         return (values.length !== 0 ? operator : "") + values.join(separator);
 | |
|       } else {
 | |
|         return values.join(",");
 | |
|       }
 | |
|     } else {
 | |
|       return encodeReserved(literal);
 | |
|     }
 | |
|   });
 | |
| }
 | |
| 
 | |
| function parse(options) {
 | |
|   // https://fetch.spec.whatwg.org/#methods
 | |
|   let method = options.method.toUpperCase(); // replace :varname with {varname} to make it RFC 6570 compatible
 | |
| 
 | |
|   let url = (options.url || "/").replace(/:([a-z]\w+)/g, "{$1}");
 | |
|   let headers = Object.assign({}, options.headers);
 | |
|   let body;
 | |
|   let parameters = omit(options, ["method", "baseUrl", "url", "headers", "request", "mediaType"]); // extract variable names from URL to calculate remaining variables later
 | |
| 
 | |
|   const urlVariableNames = extractUrlVariableNames(url);
 | |
|   url = parseUrl(url).expand(parameters);
 | |
| 
 | |
|   if (!/^http/.test(url)) {
 | |
|     url = options.baseUrl + url;
 | |
|   }
 | |
| 
 | |
|   const omittedParameters = Object.keys(options).filter(option => urlVariableNames.includes(option)).concat("baseUrl");
 | |
|   const remainingParameters = omit(parameters, omittedParameters);
 | |
|   const isBinaryRequest = /application\/octet-stream/i.test(headers.accept);
 | |
| 
 | |
|   if (!isBinaryRequest) {
 | |
|     if (options.mediaType.format) {
 | |
|       // e.g. application/vnd.github.v3+json => application/vnd.github.v3.raw
 | |
|       headers.accept = headers.accept.split(/,/).map(preview => preview.replace(/application\/vnd(\.\w+)(\.v3)?(\.\w+)?(\+json)?$/, `application/vnd$1$2.${options.mediaType.format}`)).join(",");
 | |
|     }
 | |
| 
 | |
|     if (options.mediaType.previews.length) {
 | |
|       const previewsFromAcceptHeader = headers.accept.match(/[\w-]+(?=-preview)/g) || [];
 | |
|       headers.accept = previewsFromAcceptHeader.concat(options.mediaType.previews).map(preview => {
 | |
|         const format = options.mediaType.format ? `.${options.mediaType.format}` : "+json";
 | |
|         return `application/vnd.github.${preview}-preview${format}`;
 | |
|       }).join(",");
 | |
|     }
 | |
|   } // for GET/HEAD requests, set URL query parameters from remaining parameters
 | |
|   // for PATCH/POST/PUT/DELETE requests, set request body from remaining parameters
 | |
| 
 | |
| 
 | |
|   if (["GET", "HEAD"].includes(method)) {
 | |
|     url = addQueryParameters(url, remainingParameters);
 | |
|   } else {
 | |
|     if ("data" in remainingParameters) {
 | |
|       body = remainingParameters.data;
 | |
|     } else {
 | |
|       if (Object.keys(remainingParameters).length) {
 | |
|         body = remainingParameters;
 | |
|       } else {
 | |
|         headers["content-length"] = 0;
 | |
|       }
 | |
|     }
 | |
|   } // default content-type for JSON if body is set
 | |
| 
 | |
| 
 | |
|   if (!headers["content-type"] && typeof body !== "undefined") {
 | |
|     headers["content-type"] = "application/json; charset=utf-8";
 | |
|   } // GitHub expects 'content-length: 0' header for PUT/PATCH requests without body.
 | |
|   // fetch does not allow to set `content-length` header, but we can set body to an empty string
 | |
| 
 | |
| 
 | |
|   if (["PATCH", "PUT"].includes(method) && typeof body === "undefined") {
 | |
|     body = "";
 | |
|   } // Only return body/request keys if present
 | |
| 
 | |
| 
 | |
|   return Object.assign({
 | |
|     method,
 | |
|     url,
 | |
|     headers
 | |
|   }, typeof body !== "undefined" ? {
 | |
|     body
 | |
|   } : null, options.request ? {
 | |
|     request: options.request
 | |
|   } : null);
 | |
| }
 | |
| 
 | |
| function endpointWithDefaults(defaults, route, options) {
 | |
|   return parse(merge(defaults, route, options));
 | |
| }
 | |
| 
 | |
| function withDefaults(oldDefaults, newDefaults) {
 | |
|   const DEFAULTS = merge(oldDefaults, newDefaults);
 | |
|   const endpoint = endpointWithDefaults.bind(null, DEFAULTS);
 | |
|   return Object.assign(endpoint, {
 | |
|     DEFAULTS,
 | |
|     defaults: withDefaults.bind(null, DEFAULTS),
 | |
|     merge: merge.bind(null, DEFAULTS),
 | |
|     parse
 | |
|   });
 | |
| }
 | |
| 
 | |
| const VERSION = "6.0.8";
 | |
| 
 | |
| const userAgent = `octokit-endpoint.js/${VERSION} ${universalUserAgent.getUserAgent()}`; // DEFAULTS has all properties set that EndpointOptions has, except url.
 | |
| // So we use RequestParameters and add method as additional required property.
 | |
| 
 | |
| const DEFAULTS = {
 | |
|   method: "GET",
 | |
|   baseUrl: "https://api.github.com",
 | |
|   headers: {
 | |
|     accept: "application/vnd.github.v3+json",
 | |
|     "user-agent": userAgent
 | |
|   },
 | |
|   mediaType: {
 | |
|     format: "",
 | |
|     previews: []
 | |
|   }
 | |
| };
 | |
| 
 | |
| const endpoint = withDefaults(null, DEFAULTS);
 | |
| 
 | |
| exports.endpoint = endpoint;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8467:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| var request = __webpack_require__(3758);
 | |
| var universalUserAgent = __webpack_require__(5030);
 | |
| 
 | |
| const VERSION = "4.6.2";
 | |
| 
 | |
| class GraphqlError extends Error {
 | |
|   constructor(request, response) {
 | |
|     const message = response.data.errors[0].message;
 | |
|     super(message);
 | |
|     Object.assign(this, response.data);
 | |
|     Object.assign(this, {
 | |
|       headers: response.headers
 | |
|     });
 | |
|     this.name = "GraphqlError";
 | |
|     this.request = request; // Maintains proper stack trace (only available on V8)
 | |
| 
 | |
|     /* istanbul ignore next */
 | |
| 
 | |
|     if (Error.captureStackTrace) {
 | |
|       Error.captureStackTrace(this, this.constructor);
 | |
|     }
 | |
|   }
 | |
| 
 | |
| }
 | |
| 
 | |
| const NON_VARIABLE_OPTIONS = ["method", "baseUrl", "url", "headers", "request", "query", "mediaType"];
 | |
| const FORBIDDEN_VARIABLE_OPTIONS = ["query", "method", "url"];
 | |
| const GHES_V3_SUFFIX_REGEX = /\/api\/v3\/?$/;
 | |
| function graphql(request, query, options) {
 | |
|   if (options) {
 | |
|     if (typeof query === "string" && "query" in options) {
 | |
|       return Promise.reject(new Error(`[@octokit/graphql] "query" cannot be used as variable name`));
 | |
|     }
 | |
| 
 | |
|     for (const key in options) {
 | |
|       if (!FORBIDDEN_VARIABLE_OPTIONS.includes(key)) continue;
 | |
|       return Promise.reject(new Error(`[@octokit/graphql] "${key}" cannot be used as variable name`));
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   const parsedOptions = typeof query === "string" ? Object.assign({
 | |
|     query
 | |
|   }, options) : query;
 | |
|   const requestOptions = Object.keys(parsedOptions).reduce((result, key) => {
 | |
|     if (NON_VARIABLE_OPTIONS.includes(key)) {
 | |
|       result[key] = parsedOptions[key];
 | |
|       return result;
 | |
|     }
 | |
| 
 | |
|     if (!result.variables) {
 | |
|       result.variables = {};
 | |
|     }
 | |
| 
 | |
|     result.variables[key] = parsedOptions[key];
 | |
|     return result;
 | |
|   }, {}); // workaround for GitHub Enterprise baseUrl set with /api/v3 suffix
 | |
|   // https://github.com/octokit/auth-app.js/issues/111#issuecomment-657610451
 | |
| 
 | |
|   const baseUrl = parsedOptions.baseUrl || request.endpoint.DEFAULTS.baseUrl;
 | |
| 
 | |
|   if (GHES_V3_SUFFIX_REGEX.test(baseUrl)) {
 | |
|     requestOptions.url = baseUrl.replace(GHES_V3_SUFFIX_REGEX, "/api/graphql");
 | |
|   }
 | |
| 
 | |
|   return request(requestOptions).then(response => {
 | |
|     if (response.data.errors) {
 | |
|       const headers = {};
 | |
| 
 | |
|       for (const key of Object.keys(response.headers)) {
 | |
|         headers[key] = response.headers[key];
 | |
|       }
 | |
| 
 | |
|       throw new GraphqlError(requestOptions, {
 | |
|         headers,
 | |
|         data: response.data
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     return response.data.data;
 | |
|   });
 | |
| }
 | |
| 
 | |
| function withDefaults(request$1, newDefaults) {
 | |
|   const newRequest = request$1.defaults(newDefaults);
 | |
| 
 | |
|   const newApi = (query, options) => {
 | |
|     return graphql(newRequest, query, options);
 | |
|   };
 | |
| 
 | |
|   return Object.assign(newApi, {
 | |
|     defaults: withDefaults.bind(null, newRequest),
 | |
|     endpoint: request.request.endpoint
 | |
|   });
 | |
| }
 | |
| 
 | |
| const graphql$1 = withDefaults(request.request, {
 | |
|   headers: {
 | |
|     "user-agent": `octokit-graphql.js/${VERSION} ${universalUserAgent.getUserAgent()}`
 | |
|   },
 | |
|   method: "POST",
 | |
|   url: "/graphql"
 | |
| });
 | |
| function withCustomRequest(customRequest) {
 | |
|   return withDefaults(customRequest, {
 | |
|     method: "POST",
 | |
|     url: "/graphql"
 | |
|   });
 | |
| }
 | |
| 
 | |
| exports.graphql = graphql$1;
 | |
| exports.withCustomRequest = withCustomRequest;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3758:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
 | |
| 
 | |
| var endpoint = __webpack_require__(9440);
 | |
| var universalUserAgent = __webpack_require__(5030);
 | |
| var isPlainObject = __webpack_require__(3287);
 | |
| var nodeFetch = _interopDefault(__webpack_require__(467));
 | |
| var requestError = __webpack_require__(537);
 | |
| 
 | |
| const VERSION = "5.4.9";
 | |
| 
 | |
| function getBufferResponse(response) {
 | |
|   return response.arrayBuffer();
 | |
| }
 | |
| 
 | |
| function fetchWrapper(requestOptions) {
 | |
|   if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
 | |
|     requestOptions.body = JSON.stringify(requestOptions.body);
 | |
|   }
 | |
| 
 | |
|   let headers = {};
 | |
|   let status;
 | |
|   let url;
 | |
|   const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
 | |
|   return fetch(requestOptions.url, Object.assign({
 | |
|     method: requestOptions.method,
 | |
|     body: requestOptions.body,
 | |
|     headers: requestOptions.headers,
 | |
|     redirect: requestOptions.redirect
 | |
|   }, requestOptions.request)).then(response => {
 | |
|     url = response.url;
 | |
|     status = response.status;
 | |
| 
 | |
|     for (const keyAndValue of response.headers) {
 | |
|       headers[keyAndValue[0]] = keyAndValue[1];
 | |
|     }
 | |
| 
 | |
|     if (status === 204 || status === 205) {
 | |
|       return;
 | |
|     } // GitHub API returns 200 for HEAD requests
 | |
| 
 | |
| 
 | |
|     if (requestOptions.method === "HEAD") {
 | |
|       if (status < 400) {
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       throw new requestError.RequestError(response.statusText, status, {
 | |
|         headers,
 | |
|         request: requestOptions
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     if (status === 304) {
 | |
|       throw new requestError.RequestError("Not modified", status, {
 | |
|         headers,
 | |
|         request: requestOptions
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     if (status >= 400) {
 | |
|       return response.text().then(message => {
 | |
|         const error = new requestError.RequestError(message, status, {
 | |
|           headers,
 | |
|           request: requestOptions
 | |
|         });
 | |
| 
 | |
|         try {
 | |
|           let responseBody = JSON.parse(error.message);
 | |
|           Object.assign(error, responseBody);
 | |
|           let errors = responseBody.errors; // Assumption `errors` would always be in Array format
 | |
| 
 | |
|           error.message = error.message + ": " + errors.map(JSON.stringify).join(", ");
 | |
|         } catch (e) {// ignore, see octokit/rest.js#684
 | |
|         }
 | |
| 
 | |
|         throw error;
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     const contentType = response.headers.get("content-type");
 | |
| 
 | |
|     if (/application\/json/.test(contentType)) {
 | |
|       return response.json();
 | |
|     }
 | |
| 
 | |
|     if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
 | |
|       return response.text();
 | |
|     }
 | |
| 
 | |
|     return getBufferResponse(response);
 | |
|   }).then(data => {
 | |
|     return {
 | |
|       status,
 | |
|       url,
 | |
|       headers,
 | |
|       data
 | |
|     };
 | |
|   }).catch(error => {
 | |
|     if (error instanceof requestError.RequestError) {
 | |
|       throw error;
 | |
|     }
 | |
| 
 | |
|     throw new requestError.RequestError(error.message, 500, {
 | |
|       headers,
 | |
|       request: requestOptions
 | |
|     });
 | |
|   });
 | |
| }
 | |
| 
 | |
| function withDefaults(oldEndpoint, newDefaults) {
 | |
|   const endpoint = oldEndpoint.defaults(newDefaults);
 | |
| 
 | |
|   const newApi = function (route, parameters) {
 | |
|     const endpointOptions = endpoint.merge(route, parameters);
 | |
| 
 | |
|     if (!endpointOptions.request || !endpointOptions.request.hook) {
 | |
|       return fetchWrapper(endpoint.parse(endpointOptions));
 | |
|     }
 | |
| 
 | |
|     const request = (route, parameters) => {
 | |
|       return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
 | |
|     };
 | |
| 
 | |
|     Object.assign(request, {
 | |
|       endpoint,
 | |
|       defaults: withDefaults.bind(null, endpoint)
 | |
|     });
 | |
|     return endpointOptions.request.hook(request, endpointOptions);
 | |
|   };
 | |
| 
 | |
|   return Object.assign(newApi, {
 | |
|     endpoint,
 | |
|     defaults: withDefaults.bind(null, endpoint)
 | |
|   });
 | |
| }
 | |
| 
 | |
| const request = withDefaults(endpoint.endpoint, {
 | |
|   headers: {
 | |
|     "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
 | |
|   }
 | |
| });
 | |
| 
 | |
| exports.request = request;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4193:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| const VERSION = "2.13.3";
 | |
| 
 | |
| /**
 | |
|  * Some “list” response that can be paginated have a different response structure
 | |
|  *
 | |
|  * They have a `total_count` key in the response (search also has `incomplete_results`,
 | |
|  * /installation/repositories also has `repository_selection`), as well as a key with
 | |
|  * the list of the items which name varies from endpoint to endpoint.
 | |
|  *
 | |
|  * Octokit normalizes these responses so that paginated results are always returned following
 | |
|  * the same structure. One challenge is that if the list response has only one page, no Link
 | |
|  * header is provided, so this header alone is not sufficient to check wether a response is
 | |
|  * paginated or not.
 | |
|  *
 | |
|  * We check if a "total_count" key is present in the response data, but also make sure that
 | |
|  * a "url" property is not, as the "Get the combined status for a specific ref" endpoint would
 | |
|  * otherwise match: https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
 | |
|  */
 | |
| function normalizePaginatedListResponse(response) {
 | |
|   const responseNeedsNormalization = "total_count" in response.data && !("url" in response.data);
 | |
|   if (!responseNeedsNormalization) return response; // keep the additional properties intact as there is currently no other way
 | |
|   // to retrieve the same information.
 | |
| 
 | |
|   const incompleteResults = response.data.incomplete_results;
 | |
|   const repositorySelection = response.data.repository_selection;
 | |
|   const totalCount = response.data.total_count;
 | |
|   delete response.data.incomplete_results;
 | |
|   delete response.data.repository_selection;
 | |
|   delete response.data.total_count;
 | |
|   const namespaceKey = Object.keys(response.data)[0];
 | |
|   const data = response.data[namespaceKey];
 | |
|   response.data = data;
 | |
| 
 | |
|   if (typeof incompleteResults !== "undefined") {
 | |
|     response.data.incomplete_results = incompleteResults;
 | |
|   }
 | |
| 
 | |
|   if (typeof repositorySelection !== "undefined") {
 | |
|     response.data.repository_selection = repositorySelection;
 | |
|   }
 | |
| 
 | |
|   response.data.total_count = totalCount;
 | |
|   return response;
 | |
| }
 | |
| 
 | |
| function iterator(octokit, route, parameters) {
 | |
|   const options = typeof route === "function" ? route.endpoint(parameters) : octokit.request.endpoint(route, parameters);
 | |
|   const requestMethod = typeof route === "function" ? route : octokit.request;
 | |
|   const method = options.method;
 | |
|   const headers = options.headers;
 | |
|   let url = options.url;
 | |
|   return {
 | |
|     [Symbol.asyncIterator]: () => ({
 | |
|       async next() {
 | |
|         if (!url) return {
 | |
|           done: true
 | |
|         };
 | |
|         const response = await requestMethod({
 | |
|           method,
 | |
|           url,
 | |
|           headers
 | |
|         });
 | |
|         const normalizedResponse = normalizePaginatedListResponse(response); // `response.headers.link` format:
 | |
|         // '<https://api.github.com/users/aseemk/followers?page=2>; rel="next", <https://api.github.com/users/aseemk/followers?page=2>; rel="last"'
 | |
|         // sets `url` to undefined if "next" URL is not present or `link` header is not set
 | |
| 
 | |
|         url = ((normalizedResponse.headers.link || "").match(/<([^>]+)>;\s*rel="next"/) || [])[1];
 | |
|         return {
 | |
|           value: normalizedResponse
 | |
|         };
 | |
|       }
 | |
| 
 | |
|     })
 | |
|   };
 | |
| }
 | |
| 
 | |
| function paginate(octokit, route, parameters, mapFn) {
 | |
|   if (typeof parameters === "function") {
 | |
|     mapFn = parameters;
 | |
|     parameters = undefined;
 | |
|   }
 | |
| 
 | |
|   return gather(octokit, [], iterator(octokit, route, parameters)[Symbol.asyncIterator](), mapFn);
 | |
| }
 | |
| 
 | |
| function gather(octokit, results, iterator, mapFn) {
 | |
|   return iterator.next().then(result => {
 | |
|     if (result.done) {
 | |
|       return results;
 | |
|     }
 | |
| 
 | |
|     let earlyExit = false;
 | |
| 
 | |
|     function done() {
 | |
|       earlyExit = true;
 | |
|     }
 | |
| 
 | |
|     results = results.concat(mapFn ? mapFn(result.value, done) : result.value.data);
 | |
| 
 | |
|     if (earlyExit) {
 | |
|       return results;
 | |
|     }
 | |
| 
 | |
|     return gather(octokit, results, iterator, mapFn);
 | |
|   });
 | |
| }
 | |
| 
 | |
| const composePaginateRest = Object.assign(paginate, {
 | |
|   iterator
 | |
| });
 | |
| 
 | |
| const paginatingEndpoints = ["GET /app/installations", "GET /applications/grants", "GET /authorizations", "GET /enterprises/{enterprise}/actions/permissions/organizations", "GET /enterprises/{enterprise}/actions/runner-groups", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/organizations", "GET /enterprises/{enterprise}/actions/runner-groups/{runner_group_id}/runners", "GET /enterprises/{enterprise}/actions/runners", "GET /enterprises/{enterprise}/actions/runners/downloads", "GET /events", "GET /gists", "GET /gists/public", "GET /gists/starred", "GET /gists/{gist_id}/comments", "GET /gists/{gist_id}/commits", "GET /gists/{gist_id}/forks", "GET /installation/repositories", "GET /issues", "GET /marketplace_listing/plans", "GET /marketplace_listing/plans/{plan_id}/accounts", "GET /marketplace_listing/stubbed/plans", "GET /marketplace_listing/stubbed/plans/{plan_id}/accounts", "GET /networks/{owner}/{repo}/events", "GET /notifications", "GET /organizations", "GET /orgs/{org}/actions/permissions/repositories", "GET /orgs/{org}/actions/runner-groups", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/repositories", "GET /orgs/{org}/actions/runner-groups/{runner_group_id}/runners", "GET /orgs/{org}/actions/runners", "GET /orgs/{org}/actions/runners/downloads", "GET /orgs/{org}/actions/secrets", "GET /orgs/{org}/actions/secrets/{secret_name}/repositories", "GET /orgs/{org}/blocks", "GET /orgs/{org}/credential-authorizations", "GET /orgs/{org}/events", "GET /orgs/{org}/failed_invitations", "GET /orgs/{org}/hooks", "GET /orgs/{org}/installations", "GET /orgs/{org}/invitations", "GET /orgs/{org}/invitations/{invitation_id}/teams", "GET /orgs/{org}/issues", "GET /orgs/{org}/members", "GET /orgs/{org}/migrations", "GET /orgs/{org}/migrations/{migration_id}/repositories", "GET /orgs/{org}/outside_collaborators", "GET /orgs/{org}/projects", "GET /orgs/{org}/public_members", "GET /orgs/{org}/repos", "GET /orgs/{org}/team-sync/groups", "GET /orgs/{org}/teams", "GET /orgs/{org}/teams/{team_slug}/discussions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", "GET /orgs/{org}/teams/{team_slug}/invitations", "GET /orgs/{org}/teams/{team_slug}/members", "GET /orgs/{org}/teams/{team_slug}/projects", "GET /orgs/{org}/teams/{team_slug}/repos", "GET /orgs/{org}/teams/{team_slug}/team-sync/group-mappings", "GET /orgs/{org}/teams/{team_slug}/teams", "GET /projects/columns/{column_id}/cards", "GET /projects/{project_id}/collaborators", "GET /projects/{project_id}/columns", "GET /repos/{owner}/{repo}/actions/artifacts", "GET /repos/{owner}/{repo}/actions/runners", "GET /repos/{owner}/{repo}/actions/runners/downloads", "GET /repos/{owner}/{repo}/actions/runs", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts", "GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs", "GET /repos/{owner}/{repo}/actions/secrets", "GET /repos/{owner}/{repo}/actions/workflows", "GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs", "GET /repos/{owner}/{repo}/assignees", "GET /repos/{owner}/{repo}/branches", "GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations", "GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs", "GET /repos/{owner}/{repo}/code-scanning/alerts", "GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", "GET /repos/{owner}/{repo}/code-scanning/analyses", "GET /repos/{owner}/{repo}/collaborators", "GET /repos/{owner}/{repo}/comments", "GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/commits", "GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head", "GET /repos/{owner}/{repo}/commits/{commit_sha}/comments", "GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", "GET /repos/{owner}/{repo}/commits/{ref}/check-runs", "GET /repos/{owner}/{repo}/commits/{ref}/check-suites", "GET /repos/{owner}/{repo}/commits/{ref}/statuses", "GET /repos/{owner}/{repo}/contributors", "GET /repos/{owner}/{repo}/deployments", "GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses", "GET /repos/{owner}/{repo}/events", "GET /repos/{owner}/{repo}/forks", "GET /repos/{owner}/{repo}/git/matching-refs/{ref}", "GET /repos/{owner}/{repo}/hooks", "GET /repos/{owner}/{repo}/invitations", "GET /repos/{owner}/{repo}/issues", "GET /repos/{owner}/{repo}/issues/comments", "GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/issues/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/comments", "GET /repos/{owner}/{repo}/issues/{issue_number}/events", "GET /repos/{owner}/{repo}/issues/{issue_number}/labels", "GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", "GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", "GET /repos/{owner}/{repo}/keys", "GET /repos/{owner}/{repo}/labels", "GET /repos/{owner}/{repo}/milestones", "GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels", "GET /repos/{owner}/{repo}/notifications", "GET /repos/{owner}/{repo}/pages/builds", "GET /repos/{owner}/{repo}/projects", "GET /repos/{owner}/{repo}/pulls", "GET /repos/{owner}/{repo}/pulls/comments", "GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", "GET /repos/{owner}/{repo}/pulls/{pull_number}/comments", "GET /repos/{owner}/{repo}/pulls/{pull_number}/commits", "GET /repos/{owner}/{repo}/pulls/{pull_number}/files", "GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews", "GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments", "GET /repos/{owner}/{repo}/releases", "GET /repos/{owner}/{repo}/releases/{release_id}/assets", "GET /repos/{owner}/{repo}/secret-scanning/alerts", "GET /repos/{owner}/{repo}/stargazers", "GET /repos/{owner}/{repo}/subscribers", "GET /repos/{owner}/{repo}/tags", "GET /repos/{owner}/{repo}/teams", "GET /repositories", "GET /repositories/{repository_id}/environments/{environment_name}/secrets", "GET /scim/v2/enterprises/{enterprise}/Groups", "GET /scim/v2/enterprises/{enterprise}/Users", "GET /scim/v2/organizations/{org}/Users", "GET /search/code", "GET /search/commits", "GET /search/issues", "GET /search/labels", "GET /search/repositories", "GET /search/topics", "GET /search/users", "GET /teams/{team_id}/discussions", "GET /teams/{team_id}/discussions/{discussion_number}/comments", "GET /teams/{team_id}/discussions/{discussion_number}/comments/{comment_number}/reactions", "GET /teams/{team_id}/discussions/{discussion_number}/reactions", "GET /teams/{team_id}/invitations", "GET /teams/{team_id}/members", "GET /teams/{team_id}/projects", "GET /teams/{team_id}/repos", "GET /teams/{team_id}/team-sync/group-mappings", "GET /teams/{team_id}/teams", "GET /user/blocks", "GET /user/emails", "GET /user/followers", "GET /user/following", "GET /user/gpg_keys", "GET /user/installations", "GET /user/installations/{installation_id}/repositories", "GET /user/issues", "GET /user/keys", "GET /user/marketplace_purchases", "GET /user/marketplace_purchases/stubbed", "GET /user/memberships/orgs", "GET /user/migrations", "GET /user/migrations/{migration_id}/repositories", "GET /user/orgs", "GET /user/public_emails", "GET /user/repos", "GET /user/repository_invitations", "GET /user/starred", "GET /user/subscriptions", "GET /user/teams", "GET /users", "GET /users/{username}/events", "GET /users/{username}/events/orgs/{org}", "GET /users/{username}/events/public", "GET /users/{username}/followers", "GET /users/{username}/following", "GET /users/{username}/gists", "GET /users/{username}/gpg_keys", "GET /users/{username}/keys", "GET /users/{username}/orgs", "GET /users/{username}/projects", "GET /users/{username}/received_events", "GET /users/{username}/received_events/public", "GET /users/{username}/repos", "GET /users/{username}/starred", "GET /users/{username}/subscriptions"];
 | |
| 
 | |
| function isPaginatingEndpoint(arg) {
 | |
|   if (typeof arg === "string") {
 | |
|     return paginatingEndpoints.includes(arg);
 | |
|   } else {
 | |
|     return false;
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * @param octokit Octokit instance
 | |
|  * @param options Options passed to Octokit constructor
 | |
|  */
 | |
| 
 | |
| function paginateRest(octokit) {
 | |
|   return {
 | |
|     paginate: Object.assign(paginate.bind(null, octokit), {
 | |
|       iterator: iterator.bind(null, octokit)
 | |
|     })
 | |
|   };
 | |
| }
 | |
| paginateRest.VERSION = VERSION;
 | |
| 
 | |
| exports.composePaginateRest = composePaginateRest;
 | |
| exports.isPaginatingEndpoint = isPaginatingEndpoint;
 | |
| exports.paginateRest = paginateRest;
 | |
| exports.paginatingEndpoints = paginatingEndpoints;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3044:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| function ownKeys(object, enumerableOnly) {
 | |
|   var keys = Object.keys(object);
 | |
| 
 | |
|   if (Object.getOwnPropertySymbols) {
 | |
|     var symbols = Object.getOwnPropertySymbols(object);
 | |
| 
 | |
|     if (enumerableOnly) {
 | |
|       symbols = symbols.filter(function (sym) {
 | |
|         return Object.getOwnPropertyDescriptor(object, sym).enumerable;
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     keys.push.apply(keys, symbols);
 | |
|   }
 | |
| 
 | |
|   return keys;
 | |
| }
 | |
| 
 | |
| function _objectSpread2(target) {
 | |
|   for (var i = 1; i < arguments.length; i++) {
 | |
|     var source = arguments[i] != null ? arguments[i] : {};
 | |
| 
 | |
|     if (i % 2) {
 | |
|       ownKeys(Object(source), true).forEach(function (key) {
 | |
|         _defineProperty(target, key, source[key]);
 | |
|       });
 | |
|     } else if (Object.getOwnPropertyDescriptors) {
 | |
|       Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
 | |
|     } else {
 | |
|       ownKeys(Object(source)).forEach(function (key) {
 | |
|         Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
 | |
|       });
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return target;
 | |
| }
 | |
| 
 | |
| 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;
 | |
| }
 | |
| 
 | |
| const Endpoints = {
 | |
|   actions: {
 | |
|     addSelectedRepoToOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
 | |
|     approveWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/approve"],
 | |
|     cancelWorkflowRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/cancel"],
 | |
|     createOrUpdateEnvironmentSecret: ["PUT /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
 | |
|     createOrUpdateOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}"],
 | |
|     createOrUpdateRepoSecret: ["PUT /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
 | |
|     createRegistrationTokenForOrg: ["POST /orgs/{org}/actions/runners/registration-token"],
 | |
|     createRegistrationTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/registration-token"],
 | |
|     createRemoveTokenForOrg: ["POST /orgs/{org}/actions/runners/remove-token"],
 | |
|     createRemoveTokenForRepo: ["POST /repos/{owner}/{repo}/actions/runners/remove-token"],
 | |
|     createWorkflowDispatch: ["POST /repos/{owner}/{repo}/actions/workflows/{workflow_id}/dispatches"],
 | |
|     deleteArtifact: ["DELETE /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
 | |
|     deleteEnvironmentSecret: ["DELETE /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
 | |
|     deleteOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}"],
 | |
|     deleteRepoSecret: ["DELETE /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
 | |
|     deleteSelfHostedRunnerFromOrg: ["DELETE /orgs/{org}/actions/runners/{runner_id}"],
 | |
|     deleteSelfHostedRunnerFromRepo: ["DELETE /repos/{owner}/{repo}/actions/runners/{runner_id}"],
 | |
|     deleteWorkflowRun: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}"],
 | |
|     deleteWorkflowRunLogs: ["DELETE /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
 | |
|     disableSelectedRepositoryGithubActionsOrganization: ["DELETE /orgs/{org}/actions/permissions/repositories/{repository_id}"],
 | |
|     disableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/disable"],
 | |
|     downloadArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}/{archive_format}"],
 | |
|     downloadJobLogsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}/logs"],
 | |
|     downloadWorkflowRunLogs: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/logs"],
 | |
|     enableSelectedRepositoryGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories/{repository_id}"],
 | |
|     enableWorkflow: ["PUT /repos/{owner}/{repo}/actions/workflows/{workflow_id}/enable"],
 | |
|     getAllowedActionsOrganization: ["GET /orgs/{org}/actions/permissions/selected-actions"],
 | |
|     getAllowedActionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions/selected-actions"],
 | |
|     getArtifact: ["GET /repos/{owner}/{repo}/actions/artifacts/{artifact_id}"],
 | |
|     getEnvironmentPublicKey: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/public-key"],
 | |
|     getEnvironmentSecret: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets/{secret_name}"],
 | |
|     getGithubActionsPermissionsOrganization: ["GET /orgs/{org}/actions/permissions"],
 | |
|     getGithubActionsPermissionsRepository: ["GET /repos/{owner}/{repo}/actions/permissions"],
 | |
|     getJobForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/jobs/{job_id}"],
 | |
|     getOrgPublicKey: ["GET /orgs/{org}/actions/secrets/public-key"],
 | |
|     getOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}"],
 | |
|     getPendingDeploymentsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],
 | |
|     getRepoPermissions: ["GET /repos/{owner}/{repo}/actions/permissions", {}, {
 | |
|       renamed: ["actions", "getGithubActionsPermissionsRepository"]
 | |
|     }],
 | |
|     getRepoPublicKey: ["GET /repos/{owner}/{repo}/actions/secrets/public-key"],
 | |
|     getRepoSecret: ["GET /repos/{owner}/{repo}/actions/secrets/{secret_name}"],
 | |
|     getReviewsForRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/approvals"],
 | |
|     getSelfHostedRunnerForOrg: ["GET /orgs/{org}/actions/runners/{runner_id}"],
 | |
|     getSelfHostedRunnerForRepo: ["GET /repos/{owner}/{repo}/actions/runners/{runner_id}"],
 | |
|     getWorkflow: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}"],
 | |
|     getWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}"],
 | |
|     getWorkflowRunUsage: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/timing"],
 | |
|     getWorkflowUsage: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/timing"],
 | |
|     listArtifactsForRepo: ["GET /repos/{owner}/{repo}/actions/artifacts"],
 | |
|     listEnvironmentSecrets: ["GET /repositories/{repository_id}/environments/{environment_name}/secrets"],
 | |
|     listJobsForWorkflowRun: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/jobs"],
 | |
|     listOrgSecrets: ["GET /orgs/{org}/actions/secrets"],
 | |
|     listRepoSecrets: ["GET /repos/{owner}/{repo}/actions/secrets"],
 | |
|     listRepoWorkflows: ["GET /repos/{owner}/{repo}/actions/workflows"],
 | |
|     listRunnerApplicationsForOrg: ["GET /orgs/{org}/actions/runners/downloads"],
 | |
|     listRunnerApplicationsForRepo: ["GET /repos/{owner}/{repo}/actions/runners/downloads"],
 | |
|     listSelectedReposForOrgSecret: ["GET /orgs/{org}/actions/secrets/{secret_name}/repositories"],
 | |
|     listSelectedRepositoriesEnabledGithubActionsOrganization: ["GET /orgs/{org}/actions/permissions/repositories"],
 | |
|     listSelfHostedRunnersForOrg: ["GET /orgs/{org}/actions/runners"],
 | |
|     listSelfHostedRunnersForRepo: ["GET /repos/{owner}/{repo}/actions/runners"],
 | |
|     listWorkflowRunArtifacts: ["GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts"],
 | |
|     listWorkflowRuns: ["GET /repos/{owner}/{repo}/actions/workflows/{workflow_id}/runs"],
 | |
|     listWorkflowRunsForRepo: ["GET /repos/{owner}/{repo}/actions/runs"],
 | |
|     reRunWorkflow: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/rerun"],
 | |
|     removeSelectedRepoFromOrgSecret: ["DELETE /orgs/{org}/actions/secrets/{secret_name}/repositories/{repository_id}"],
 | |
|     reviewPendingDeploymentsForRun: ["POST /repos/{owner}/{repo}/actions/runs/{run_id}/pending_deployments"],
 | |
|     setAllowedActionsOrganization: ["PUT /orgs/{org}/actions/permissions/selected-actions"],
 | |
|     setAllowedActionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions/selected-actions"],
 | |
|     setGithubActionsPermissionsOrganization: ["PUT /orgs/{org}/actions/permissions"],
 | |
|     setGithubActionsPermissionsRepository: ["PUT /repos/{owner}/{repo}/actions/permissions"],
 | |
|     setSelectedReposForOrgSecret: ["PUT /orgs/{org}/actions/secrets/{secret_name}/repositories"],
 | |
|     setSelectedRepositoriesEnabledGithubActionsOrganization: ["PUT /orgs/{org}/actions/permissions/repositories"]
 | |
|   },
 | |
|   activity: {
 | |
|     checkRepoIsStarredByAuthenticatedUser: ["GET /user/starred/{owner}/{repo}"],
 | |
|     deleteRepoSubscription: ["DELETE /repos/{owner}/{repo}/subscription"],
 | |
|     deleteThreadSubscription: ["DELETE /notifications/threads/{thread_id}/subscription"],
 | |
|     getFeeds: ["GET /feeds"],
 | |
|     getRepoSubscription: ["GET /repos/{owner}/{repo}/subscription"],
 | |
|     getThread: ["GET /notifications/threads/{thread_id}"],
 | |
|     getThreadSubscriptionForAuthenticatedUser: ["GET /notifications/threads/{thread_id}/subscription"],
 | |
|     listEventsForAuthenticatedUser: ["GET /users/{username}/events"],
 | |
|     listNotificationsForAuthenticatedUser: ["GET /notifications"],
 | |
|     listOrgEventsForAuthenticatedUser: ["GET /users/{username}/events/orgs/{org}"],
 | |
|     listPublicEvents: ["GET /events"],
 | |
|     listPublicEventsForRepoNetwork: ["GET /networks/{owner}/{repo}/events"],
 | |
|     listPublicEventsForUser: ["GET /users/{username}/events/public"],
 | |
|     listPublicOrgEvents: ["GET /orgs/{org}/events"],
 | |
|     listReceivedEventsForUser: ["GET /users/{username}/received_events"],
 | |
|     listReceivedPublicEventsForUser: ["GET /users/{username}/received_events/public"],
 | |
|     listRepoEvents: ["GET /repos/{owner}/{repo}/events"],
 | |
|     listRepoNotificationsForAuthenticatedUser: ["GET /repos/{owner}/{repo}/notifications"],
 | |
|     listReposStarredByAuthenticatedUser: ["GET /user/starred"],
 | |
|     listReposStarredByUser: ["GET /users/{username}/starred"],
 | |
|     listReposWatchedByUser: ["GET /users/{username}/subscriptions"],
 | |
|     listStargazersForRepo: ["GET /repos/{owner}/{repo}/stargazers"],
 | |
|     listWatchedReposForAuthenticatedUser: ["GET /user/subscriptions"],
 | |
|     listWatchersForRepo: ["GET /repos/{owner}/{repo}/subscribers"],
 | |
|     markNotificationsAsRead: ["PUT /notifications"],
 | |
|     markRepoNotificationsAsRead: ["PUT /repos/{owner}/{repo}/notifications"],
 | |
|     markThreadAsRead: ["PATCH /notifications/threads/{thread_id}"],
 | |
|     setRepoSubscription: ["PUT /repos/{owner}/{repo}/subscription"],
 | |
|     setThreadSubscription: ["PUT /notifications/threads/{thread_id}/subscription"],
 | |
|     starRepoForAuthenticatedUser: ["PUT /user/starred/{owner}/{repo}"],
 | |
|     unstarRepoForAuthenticatedUser: ["DELETE /user/starred/{owner}/{repo}"]
 | |
|   },
 | |
|   apps: {
 | |
|     addRepoToInstallation: ["PUT /user/installations/{installation_id}/repositories/{repository_id}"],
 | |
|     checkToken: ["POST /applications/{client_id}/token"],
 | |
|     createContentAttachment: ["POST /content_references/{content_reference_id}/attachments", {
 | |
|       mediaType: {
 | |
|         previews: ["corsair"]
 | |
|       }
 | |
|     }],
 | |
|     createContentAttachmentForRepo: ["POST /repos/{owner}/{repo}/content_references/{content_reference_id}/attachments", {
 | |
|       mediaType: {
 | |
|         previews: ["corsair"]
 | |
|       }
 | |
|     }],
 | |
|     createFromManifest: ["POST /app-manifests/{code}/conversions"],
 | |
|     createInstallationAccessToken: ["POST /app/installations/{installation_id}/access_tokens"],
 | |
|     deleteAuthorization: ["DELETE /applications/{client_id}/grant"],
 | |
|     deleteInstallation: ["DELETE /app/installations/{installation_id}"],
 | |
|     deleteToken: ["DELETE /applications/{client_id}/token"],
 | |
|     getAuthenticated: ["GET /app"],
 | |
|     getBySlug: ["GET /apps/{app_slug}"],
 | |
|     getInstallation: ["GET /app/installations/{installation_id}"],
 | |
|     getOrgInstallation: ["GET /orgs/{org}/installation"],
 | |
|     getRepoInstallation: ["GET /repos/{owner}/{repo}/installation"],
 | |
|     getSubscriptionPlanForAccount: ["GET /marketplace_listing/accounts/{account_id}"],
 | |
|     getSubscriptionPlanForAccountStubbed: ["GET /marketplace_listing/stubbed/accounts/{account_id}"],
 | |
|     getUserInstallation: ["GET /users/{username}/installation"],
 | |
|     getWebhookConfigForApp: ["GET /app/hook/config"],
 | |
|     listAccountsForPlan: ["GET /marketplace_listing/plans/{plan_id}/accounts"],
 | |
|     listAccountsForPlanStubbed: ["GET /marketplace_listing/stubbed/plans/{plan_id}/accounts"],
 | |
|     listInstallationReposForAuthenticatedUser: ["GET /user/installations/{installation_id}/repositories"],
 | |
|     listInstallations: ["GET /app/installations"],
 | |
|     listInstallationsForAuthenticatedUser: ["GET /user/installations"],
 | |
|     listPlans: ["GET /marketplace_listing/plans"],
 | |
|     listPlansStubbed: ["GET /marketplace_listing/stubbed/plans"],
 | |
|     listReposAccessibleToInstallation: ["GET /installation/repositories"],
 | |
|     listSubscriptionsForAuthenticatedUser: ["GET /user/marketplace_purchases"],
 | |
|     listSubscriptionsForAuthenticatedUserStubbed: ["GET /user/marketplace_purchases/stubbed"],
 | |
|     removeRepoFromInstallation: ["DELETE /user/installations/{installation_id}/repositories/{repository_id}"],
 | |
|     resetToken: ["PATCH /applications/{client_id}/token"],
 | |
|     revokeInstallationAccessToken: ["DELETE /installation/token"],
 | |
|     scopeToken: ["POST /applications/{client_id}/token/scoped"],
 | |
|     suspendInstallation: ["PUT /app/installations/{installation_id}/suspended"],
 | |
|     unsuspendInstallation: ["DELETE /app/installations/{installation_id}/suspended"],
 | |
|     updateWebhookConfigForApp: ["PATCH /app/hook/config"]
 | |
|   },
 | |
|   billing: {
 | |
|     getGithubActionsBillingOrg: ["GET /orgs/{org}/settings/billing/actions"],
 | |
|     getGithubActionsBillingUser: ["GET /users/{username}/settings/billing/actions"],
 | |
|     getGithubPackagesBillingOrg: ["GET /orgs/{org}/settings/billing/packages"],
 | |
|     getGithubPackagesBillingUser: ["GET /users/{username}/settings/billing/packages"],
 | |
|     getSharedStorageBillingOrg: ["GET /orgs/{org}/settings/billing/shared-storage"],
 | |
|     getSharedStorageBillingUser: ["GET /users/{username}/settings/billing/shared-storage"]
 | |
|   },
 | |
|   checks: {
 | |
|     create: ["POST /repos/{owner}/{repo}/check-runs"],
 | |
|     createSuite: ["POST /repos/{owner}/{repo}/check-suites"],
 | |
|     get: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}"],
 | |
|     getSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}"],
 | |
|     listAnnotations: ["GET /repos/{owner}/{repo}/check-runs/{check_run_id}/annotations"],
 | |
|     listForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-runs"],
 | |
|     listForSuite: ["GET /repos/{owner}/{repo}/check-suites/{check_suite_id}/check-runs"],
 | |
|     listSuitesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/check-suites"],
 | |
|     rerequestSuite: ["POST /repos/{owner}/{repo}/check-suites/{check_suite_id}/rerequest"],
 | |
|     setSuitesPreferences: ["PATCH /repos/{owner}/{repo}/check-suites/preferences"],
 | |
|     update: ["PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}"]
 | |
|   },
 | |
|   codeScanning: {
 | |
|     deleteAnalysis: ["DELETE /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}{?confirm_delete}"],
 | |
|     getAlert: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}", {}, {
 | |
|       renamedParameters: {
 | |
|         alert_id: "alert_number"
 | |
|       }
 | |
|     }],
 | |
|     getAnalysis: ["GET /repos/{owner}/{repo}/code-scanning/analyses/{analysis_id}"],
 | |
|     getSarif: ["GET /repos/{owner}/{repo}/code-scanning/sarifs/{sarif_id}"],
 | |
|     listAlertInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances"],
 | |
|     listAlertsForRepo: ["GET /repos/{owner}/{repo}/code-scanning/alerts"],
 | |
|     listAlertsInstances: ["GET /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}/instances", {}, {
 | |
|       renamed: ["codeScanning", "listAlertInstances"]
 | |
|     }],
 | |
|     listRecentAnalyses: ["GET /repos/{owner}/{repo}/code-scanning/analyses"],
 | |
|     updateAlert: ["PATCH /repos/{owner}/{repo}/code-scanning/alerts/{alert_number}"],
 | |
|     uploadSarif: ["POST /repos/{owner}/{repo}/code-scanning/sarifs"]
 | |
|   },
 | |
|   codesOfConduct: {
 | |
|     getAllCodesOfConduct: ["GET /codes_of_conduct", {
 | |
|       mediaType: {
 | |
|         previews: ["scarlet-witch"]
 | |
|       }
 | |
|     }],
 | |
|     getConductCode: ["GET /codes_of_conduct/{key}", {
 | |
|       mediaType: {
 | |
|         previews: ["scarlet-witch"]
 | |
|       }
 | |
|     }],
 | |
|     getForRepo: ["GET /repos/{owner}/{repo}/community/code_of_conduct", {
 | |
|       mediaType: {
 | |
|         previews: ["scarlet-witch"]
 | |
|       }
 | |
|     }]
 | |
|   },
 | |
|   emojis: {
 | |
|     get: ["GET /emojis"]
 | |
|   },
 | |
|   enterpriseAdmin: {
 | |
|     disableSelectedOrganizationGithubActionsEnterprise: ["DELETE /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],
 | |
|     enableSelectedOrganizationGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations/{org_id}"],
 | |
|     getAllowedActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/selected-actions"],
 | |
|     getGithubActionsPermissionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions"],
 | |
|     listSelectedOrganizationsEnabledGithubActionsEnterprise: ["GET /enterprises/{enterprise}/actions/permissions/organizations"],
 | |
|     setAllowedActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/selected-actions"],
 | |
|     setGithubActionsPermissionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions"],
 | |
|     setSelectedOrganizationsEnabledGithubActionsEnterprise: ["PUT /enterprises/{enterprise}/actions/permissions/organizations"]
 | |
|   },
 | |
|   gists: {
 | |
|     checkIsStarred: ["GET /gists/{gist_id}/star"],
 | |
|     create: ["POST /gists"],
 | |
|     createComment: ["POST /gists/{gist_id}/comments"],
 | |
|     delete: ["DELETE /gists/{gist_id}"],
 | |
|     deleteComment: ["DELETE /gists/{gist_id}/comments/{comment_id}"],
 | |
|     fork: ["POST /gists/{gist_id}/forks"],
 | |
|     get: ["GET /gists/{gist_id}"],
 | |
|     getComment: ["GET /gists/{gist_id}/comments/{comment_id}"],
 | |
|     getRevision: ["GET /gists/{gist_id}/{sha}"],
 | |
|     list: ["GET /gists"],
 | |
|     listComments: ["GET /gists/{gist_id}/comments"],
 | |
|     listCommits: ["GET /gists/{gist_id}/commits"],
 | |
|     listForUser: ["GET /users/{username}/gists"],
 | |
|     listForks: ["GET /gists/{gist_id}/forks"],
 | |
|     listPublic: ["GET /gists/public"],
 | |
|     listStarred: ["GET /gists/starred"],
 | |
|     star: ["PUT /gists/{gist_id}/star"],
 | |
|     unstar: ["DELETE /gists/{gist_id}/star"],
 | |
|     update: ["PATCH /gists/{gist_id}"],
 | |
|     updateComment: ["PATCH /gists/{gist_id}/comments/{comment_id}"]
 | |
|   },
 | |
|   git: {
 | |
|     createBlob: ["POST /repos/{owner}/{repo}/git/blobs"],
 | |
|     createCommit: ["POST /repos/{owner}/{repo}/git/commits"],
 | |
|     createRef: ["POST /repos/{owner}/{repo}/git/refs"],
 | |
|     createTag: ["POST /repos/{owner}/{repo}/git/tags"],
 | |
|     createTree: ["POST /repos/{owner}/{repo}/git/trees"],
 | |
|     deleteRef: ["DELETE /repos/{owner}/{repo}/git/refs/{ref}"],
 | |
|     getBlob: ["GET /repos/{owner}/{repo}/git/blobs/{file_sha}"],
 | |
|     getCommit: ["GET /repos/{owner}/{repo}/git/commits/{commit_sha}"],
 | |
|     getRef: ["GET /repos/{owner}/{repo}/git/ref/{ref}"],
 | |
|     getTag: ["GET /repos/{owner}/{repo}/git/tags/{tag_sha}"],
 | |
|     getTree: ["GET /repos/{owner}/{repo}/git/trees/{tree_sha}"],
 | |
|     listMatchingRefs: ["GET /repos/{owner}/{repo}/git/matching-refs/{ref}"],
 | |
|     updateRef: ["PATCH /repos/{owner}/{repo}/git/refs/{ref}"]
 | |
|   },
 | |
|   gitignore: {
 | |
|     getAllTemplates: ["GET /gitignore/templates"],
 | |
|     getTemplate: ["GET /gitignore/templates/{name}"]
 | |
|   },
 | |
|   interactions: {
 | |
|     getRestrictionsForAuthenticatedUser: ["GET /user/interaction-limits"],
 | |
|     getRestrictionsForOrg: ["GET /orgs/{org}/interaction-limits"],
 | |
|     getRestrictionsForRepo: ["GET /repos/{owner}/{repo}/interaction-limits"],
 | |
|     getRestrictionsForYourPublicRepos: ["GET /user/interaction-limits", {}, {
 | |
|       renamed: ["interactions", "getRestrictionsForAuthenticatedUser"]
 | |
|     }],
 | |
|     removeRestrictionsForAuthenticatedUser: ["DELETE /user/interaction-limits"],
 | |
|     removeRestrictionsForOrg: ["DELETE /orgs/{org}/interaction-limits"],
 | |
|     removeRestrictionsForRepo: ["DELETE /repos/{owner}/{repo}/interaction-limits"],
 | |
|     removeRestrictionsForYourPublicRepos: ["DELETE /user/interaction-limits", {}, {
 | |
|       renamed: ["interactions", "removeRestrictionsForAuthenticatedUser"]
 | |
|     }],
 | |
|     setRestrictionsForAuthenticatedUser: ["PUT /user/interaction-limits"],
 | |
|     setRestrictionsForOrg: ["PUT /orgs/{org}/interaction-limits"],
 | |
|     setRestrictionsForRepo: ["PUT /repos/{owner}/{repo}/interaction-limits"],
 | |
|     setRestrictionsForYourPublicRepos: ["PUT /user/interaction-limits", {}, {
 | |
|       renamed: ["interactions", "setRestrictionsForAuthenticatedUser"]
 | |
|     }]
 | |
|   },
 | |
|   issues: {
 | |
|     addAssignees: ["POST /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
 | |
|     addLabels: ["POST /repos/{owner}/{repo}/issues/{issue_number}/labels"],
 | |
|     checkUserCanBeAssigned: ["GET /repos/{owner}/{repo}/assignees/{assignee}"],
 | |
|     create: ["POST /repos/{owner}/{repo}/issues"],
 | |
|     createComment: ["POST /repos/{owner}/{repo}/issues/{issue_number}/comments"],
 | |
|     createLabel: ["POST /repos/{owner}/{repo}/labels"],
 | |
|     createMilestone: ["POST /repos/{owner}/{repo}/milestones"],
 | |
|     deleteComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}"],
 | |
|     deleteLabel: ["DELETE /repos/{owner}/{repo}/labels/{name}"],
 | |
|     deleteMilestone: ["DELETE /repos/{owner}/{repo}/milestones/{milestone_number}"],
 | |
|     get: ["GET /repos/{owner}/{repo}/issues/{issue_number}"],
 | |
|     getComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}"],
 | |
|     getEvent: ["GET /repos/{owner}/{repo}/issues/events/{event_id}"],
 | |
|     getLabel: ["GET /repos/{owner}/{repo}/labels/{name}"],
 | |
|     getMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}"],
 | |
|     list: ["GET /issues"],
 | |
|     listAssignees: ["GET /repos/{owner}/{repo}/assignees"],
 | |
|     listComments: ["GET /repos/{owner}/{repo}/issues/{issue_number}/comments"],
 | |
|     listCommentsForRepo: ["GET /repos/{owner}/{repo}/issues/comments"],
 | |
|     listEvents: ["GET /repos/{owner}/{repo}/issues/{issue_number}/events"],
 | |
|     listEventsForRepo: ["GET /repos/{owner}/{repo}/issues/events"],
 | |
|     listEventsForTimeline: ["GET /repos/{owner}/{repo}/issues/{issue_number}/timeline", {
 | |
|       mediaType: {
 | |
|         previews: ["mockingbird"]
 | |
|       }
 | |
|     }],
 | |
|     listForAuthenticatedUser: ["GET /user/issues"],
 | |
|     listForOrg: ["GET /orgs/{org}/issues"],
 | |
|     listForRepo: ["GET /repos/{owner}/{repo}/issues"],
 | |
|     listLabelsForMilestone: ["GET /repos/{owner}/{repo}/milestones/{milestone_number}/labels"],
 | |
|     listLabelsForRepo: ["GET /repos/{owner}/{repo}/labels"],
 | |
|     listLabelsOnIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/labels"],
 | |
|     listMilestones: ["GET /repos/{owner}/{repo}/milestones"],
 | |
|     lock: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/lock"],
 | |
|     removeAllLabels: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels"],
 | |
|     removeAssignees: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/assignees"],
 | |
|     removeLabel: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/labels/{name}"],
 | |
|     setLabels: ["PUT /repos/{owner}/{repo}/issues/{issue_number}/labels"],
 | |
|     unlock: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/lock"],
 | |
|     update: ["PATCH /repos/{owner}/{repo}/issues/{issue_number}"],
 | |
|     updateComment: ["PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}"],
 | |
|     updateLabel: ["PATCH /repos/{owner}/{repo}/labels/{name}"],
 | |
|     updateMilestone: ["PATCH /repos/{owner}/{repo}/milestones/{milestone_number}"]
 | |
|   },
 | |
|   licenses: {
 | |
|     get: ["GET /licenses/{license}"],
 | |
|     getAllCommonlyUsed: ["GET /licenses"],
 | |
|     getForRepo: ["GET /repos/{owner}/{repo}/license"]
 | |
|   },
 | |
|   markdown: {
 | |
|     render: ["POST /markdown"],
 | |
|     renderRaw: ["POST /markdown/raw", {
 | |
|       headers: {
 | |
|         "content-type": "text/plain; charset=utf-8"
 | |
|       }
 | |
|     }]
 | |
|   },
 | |
|   meta: {
 | |
|     get: ["GET /meta"],
 | |
|     getOctocat: ["GET /octocat"],
 | |
|     getZen: ["GET /zen"],
 | |
|     root: ["GET /"]
 | |
|   },
 | |
|   migrations: {
 | |
|     cancelImport: ["DELETE /repos/{owner}/{repo}/import"],
 | |
|     deleteArchiveForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/archive", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     deleteArchiveForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/archive", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     downloadArchiveForOrg: ["GET /orgs/{org}/migrations/{migration_id}/archive", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     getArchiveForAuthenticatedUser: ["GET /user/migrations/{migration_id}/archive", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     getCommitAuthors: ["GET /repos/{owner}/{repo}/import/authors"],
 | |
|     getImportStatus: ["GET /repos/{owner}/{repo}/import"],
 | |
|     getLargeFiles: ["GET /repos/{owner}/{repo}/import/large_files"],
 | |
|     getStatusForAuthenticatedUser: ["GET /user/migrations/{migration_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     getStatusForOrg: ["GET /orgs/{org}/migrations/{migration_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     listForAuthenticatedUser: ["GET /user/migrations", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     listForOrg: ["GET /orgs/{org}/migrations", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     listReposForOrg: ["GET /orgs/{org}/migrations/{migration_id}/repositories", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     listReposForUser: ["GET /user/migrations/{migration_id}/repositories", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     mapCommitAuthor: ["PATCH /repos/{owner}/{repo}/import/authors/{author_id}"],
 | |
|     setLfsPreference: ["PATCH /repos/{owner}/{repo}/import/lfs"],
 | |
|     startForAuthenticatedUser: ["POST /user/migrations"],
 | |
|     startForOrg: ["POST /orgs/{org}/migrations"],
 | |
|     startImport: ["PUT /repos/{owner}/{repo}/import"],
 | |
|     unlockRepoForAuthenticatedUser: ["DELETE /user/migrations/{migration_id}/repos/{repo_name}/lock", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     unlockRepoForOrg: ["DELETE /orgs/{org}/migrations/{migration_id}/repos/{repo_name}/lock", {
 | |
|       mediaType: {
 | |
|         previews: ["wyandotte"]
 | |
|       }
 | |
|     }],
 | |
|     updateImport: ["PATCH /repos/{owner}/{repo}/import"]
 | |
|   },
 | |
|   orgs: {
 | |
|     blockUser: ["PUT /orgs/{org}/blocks/{username}"],
 | |
|     cancelInvitation: ["DELETE /orgs/{org}/invitations/{invitation_id}"],
 | |
|     checkBlockedUser: ["GET /orgs/{org}/blocks/{username}"],
 | |
|     checkMembershipForUser: ["GET /orgs/{org}/members/{username}"],
 | |
|     checkPublicMembershipForUser: ["GET /orgs/{org}/public_members/{username}"],
 | |
|     convertMemberToOutsideCollaborator: ["PUT /orgs/{org}/outside_collaborators/{username}"],
 | |
|     createInvitation: ["POST /orgs/{org}/invitations"],
 | |
|     createWebhook: ["POST /orgs/{org}/hooks"],
 | |
|     deleteWebhook: ["DELETE /orgs/{org}/hooks/{hook_id}"],
 | |
|     get: ["GET /orgs/{org}"],
 | |
|     getMembershipForAuthenticatedUser: ["GET /user/memberships/orgs/{org}"],
 | |
|     getMembershipForUser: ["GET /orgs/{org}/memberships/{username}"],
 | |
|     getWebhook: ["GET /orgs/{org}/hooks/{hook_id}"],
 | |
|     getWebhookConfigForOrg: ["GET /orgs/{org}/hooks/{hook_id}/config"],
 | |
|     list: ["GET /organizations"],
 | |
|     listAppInstallations: ["GET /orgs/{org}/installations"],
 | |
|     listBlockedUsers: ["GET /orgs/{org}/blocks"],
 | |
|     listFailedInvitations: ["GET /orgs/{org}/failed_invitations"],
 | |
|     listForAuthenticatedUser: ["GET /user/orgs"],
 | |
|     listForUser: ["GET /users/{username}/orgs"],
 | |
|     listInvitationTeams: ["GET /orgs/{org}/invitations/{invitation_id}/teams"],
 | |
|     listMembers: ["GET /orgs/{org}/members"],
 | |
|     listMembershipsForAuthenticatedUser: ["GET /user/memberships/orgs"],
 | |
|     listOutsideCollaborators: ["GET /orgs/{org}/outside_collaborators"],
 | |
|     listPendingInvitations: ["GET /orgs/{org}/invitations"],
 | |
|     listPublicMembers: ["GET /orgs/{org}/public_members"],
 | |
|     listWebhooks: ["GET /orgs/{org}/hooks"],
 | |
|     pingWebhook: ["POST /orgs/{org}/hooks/{hook_id}/pings"],
 | |
|     removeMember: ["DELETE /orgs/{org}/members/{username}"],
 | |
|     removeMembershipForUser: ["DELETE /orgs/{org}/memberships/{username}"],
 | |
|     removeOutsideCollaborator: ["DELETE /orgs/{org}/outside_collaborators/{username}"],
 | |
|     removePublicMembershipForAuthenticatedUser: ["DELETE /orgs/{org}/public_members/{username}"],
 | |
|     setMembershipForUser: ["PUT /orgs/{org}/memberships/{username}"],
 | |
|     setPublicMembershipForAuthenticatedUser: ["PUT /orgs/{org}/public_members/{username}"],
 | |
|     unblockUser: ["DELETE /orgs/{org}/blocks/{username}"],
 | |
|     update: ["PATCH /orgs/{org}"],
 | |
|     updateMembershipForAuthenticatedUser: ["PATCH /user/memberships/orgs/{org}"],
 | |
|     updateWebhook: ["PATCH /orgs/{org}/hooks/{hook_id}"],
 | |
|     updateWebhookConfigForOrg: ["PATCH /orgs/{org}/hooks/{hook_id}/config"]
 | |
|   },
 | |
|   packages: {
 | |
|     deletePackageForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}"],
 | |
|     deletePackageForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}"],
 | |
|     deletePackageVersionForAuthenticatedUser: ["DELETE /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
 | |
|     deletePackageVersionForOrg: ["DELETE /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
 | |
|     getAllPackageVersionsForAPackageOwnedByAnOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions", {}, {
 | |
|       renamed: ["packages", "getAllPackageVersionsForPackageOwnedByOrg"]
 | |
|     }],
 | |
|     getAllPackageVersionsForAPackageOwnedByTheAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions", {}, {
 | |
|       renamed: ["packages", "getAllPackageVersionsForPackageOwnedByAuthenticatedUser"]
 | |
|     }],
 | |
|     getAllPackageVersionsForPackageOwnedByAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions"],
 | |
|     getAllPackageVersionsForPackageOwnedByOrg: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions"],
 | |
|     getAllPackageVersionsForPackageOwnedByUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions"],
 | |
|     getPackageForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}"],
 | |
|     getPackageForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}"],
 | |
|     getPackageForUser: ["GET /users/{username}/packages/{package_type}/{package_name}"],
 | |
|     getPackageVersionForAuthenticatedUser: ["GET /user/packages/{package_type}/{package_name}/versions/{package_version_id}"],
 | |
|     getPackageVersionForOrganization: ["GET /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
 | |
|     getPackageVersionForUser: ["GET /users/{username}/packages/{package_type}/{package_name}/versions/{package_version_id}"],
 | |
|     restorePackageForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/restore{?token}"],
 | |
|     restorePackageForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/restore{?token}"],
 | |
|     restorePackageVersionForAuthenticatedUser: ["POST /user/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"],
 | |
|     restorePackageVersionForOrg: ["POST /orgs/{org}/packages/{package_type}/{package_name}/versions/{package_version_id}/restore"]
 | |
|   },
 | |
|   projects: {
 | |
|     addCollaborator: ["PUT /projects/{project_id}/collaborators/{username}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     createCard: ["POST /projects/columns/{column_id}/cards", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     createColumn: ["POST /projects/{project_id}/columns", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     createForAuthenticatedUser: ["POST /user/projects", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     createForOrg: ["POST /orgs/{org}/projects", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     createForRepo: ["POST /repos/{owner}/{repo}/projects", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     delete: ["DELETE /projects/{project_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     deleteCard: ["DELETE /projects/columns/cards/{card_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     deleteColumn: ["DELETE /projects/columns/{column_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     get: ["GET /projects/{project_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     getCard: ["GET /projects/columns/cards/{card_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     getColumn: ["GET /projects/columns/{column_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     getPermissionForUser: ["GET /projects/{project_id}/collaborators/{username}/permission", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     listCards: ["GET /projects/columns/{column_id}/cards", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     listCollaborators: ["GET /projects/{project_id}/collaborators", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     listColumns: ["GET /projects/{project_id}/columns", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     listForOrg: ["GET /orgs/{org}/projects", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     listForRepo: ["GET /repos/{owner}/{repo}/projects", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     listForUser: ["GET /users/{username}/projects", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     moveCard: ["POST /projects/columns/cards/{card_id}/moves", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     moveColumn: ["POST /projects/columns/{column_id}/moves", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     removeCollaborator: ["DELETE /projects/{project_id}/collaborators/{username}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     update: ["PATCH /projects/{project_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     updateCard: ["PATCH /projects/columns/cards/{card_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     updateColumn: ["PATCH /projects/columns/{column_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }]
 | |
|   },
 | |
|   pulls: {
 | |
|     checkIfMerged: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
 | |
|     create: ["POST /repos/{owner}/{repo}/pulls"],
 | |
|     createReplyForReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments/{comment_id}/replies"],
 | |
|     createReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
 | |
|     createReviewComment: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
 | |
|     deletePendingReview: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
 | |
|     deleteReviewComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
 | |
|     dismissReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/dismissals"],
 | |
|     get: ["GET /repos/{owner}/{repo}/pulls/{pull_number}"],
 | |
|     getReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
 | |
|     getReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}"],
 | |
|     list: ["GET /repos/{owner}/{repo}/pulls"],
 | |
|     listCommentsForReview: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/comments"],
 | |
|     listCommits: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/commits"],
 | |
|     listFiles: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/files"],
 | |
|     listRequestedReviewers: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
 | |
|     listReviewComments: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/comments"],
 | |
|     listReviewCommentsForRepo: ["GET /repos/{owner}/{repo}/pulls/comments"],
 | |
|     listReviews: ["GET /repos/{owner}/{repo}/pulls/{pull_number}/reviews"],
 | |
|     merge: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge"],
 | |
|     removeRequestedReviewers: ["DELETE /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
 | |
|     requestReviewers: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/requested_reviewers"],
 | |
|     submitReview: ["POST /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}/events"],
 | |
|     update: ["PATCH /repos/{owner}/{repo}/pulls/{pull_number}"],
 | |
|     updateBranch: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/update-branch", {
 | |
|       mediaType: {
 | |
|         previews: ["lydian"]
 | |
|       }
 | |
|     }],
 | |
|     updateReview: ["PUT /repos/{owner}/{repo}/pulls/{pull_number}/reviews/{review_id}"],
 | |
|     updateReviewComment: ["PATCH /repos/{owner}/{repo}/pulls/comments/{comment_id}"]
 | |
|   },
 | |
|   rateLimit: {
 | |
|     get: ["GET /rate_limit"]
 | |
|   },
 | |
|   reactions: {
 | |
|     createForCommitComment: ["POST /repos/{owner}/{repo}/comments/{comment_id}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     createForIssue: ["POST /repos/{owner}/{repo}/issues/{issue_number}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     createForIssueComment: ["POST /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     createForPullRequestReviewComment: ["POST /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     createForRelease: ["POST /repos/{owner}/{repo}/releases/{release_id}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     createForTeamDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     createForTeamDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     deleteForCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}/reactions/{reaction_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     deleteForIssue: ["DELETE /repos/{owner}/{repo}/issues/{issue_number}/reactions/{reaction_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     deleteForIssueComment: ["DELETE /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions/{reaction_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     deleteForPullRequestComment: ["DELETE /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions/{reaction_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     deleteForTeamDiscussion: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions/{reaction_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     deleteForTeamDiscussionComment: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions/{reaction_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     deleteLegacy: ["DELETE /reactions/{reaction_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }, {
 | |
|       deprecated: "octokit.rest.reactions.deleteLegacy() is deprecated, see https://docs.github.com/rest/reference/reactions/#delete-a-reaction-legacy"
 | |
|     }],
 | |
|     listForCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     listForIssue: ["GET /repos/{owner}/{repo}/issues/{issue_number}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     listForIssueComment: ["GET /repos/{owner}/{repo}/issues/comments/{comment_id}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     listForPullRequestReviewComment: ["GET /repos/{owner}/{repo}/pulls/comments/{comment_id}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     listForTeamDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }],
 | |
|     listForTeamDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/reactions", {
 | |
|       mediaType: {
 | |
|         previews: ["squirrel-girl"]
 | |
|       }
 | |
|     }]
 | |
|   },
 | |
|   repos: {
 | |
|     acceptInvitation: ["PATCH /user/repository_invitations/{invitation_id}"],
 | |
|     addAppAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
 | |
|       mapToData: "apps"
 | |
|     }],
 | |
|     addCollaborator: ["PUT /repos/{owner}/{repo}/collaborators/{username}"],
 | |
|     addStatusCheckContexts: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
 | |
|       mapToData: "contexts"
 | |
|     }],
 | |
|     addTeamAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
 | |
|       mapToData: "teams"
 | |
|     }],
 | |
|     addUserAccessRestrictions: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
 | |
|       mapToData: "users"
 | |
|     }],
 | |
|     checkCollaborator: ["GET /repos/{owner}/{repo}/collaborators/{username}"],
 | |
|     checkVulnerabilityAlerts: ["GET /repos/{owner}/{repo}/vulnerability-alerts", {
 | |
|       mediaType: {
 | |
|         previews: ["dorian"]
 | |
|       }
 | |
|     }],
 | |
|     compareCommits: ["GET /repos/{owner}/{repo}/compare/{base}...{head}"],
 | |
|     compareCommitsWithBasehead: ["GET /repos/{owner}/{repo}/compare/{basehead}"],
 | |
|     createCommitComment: ["POST /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
 | |
|     createCommitSignatureProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
 | |
|       mediaType: {
 | |
|         previews: ["zzzax"]
 | |
|       }
 | |
|     }],
 | |
|     createCommitStatus: ["POST /repos/{owner}/{repo}/statuses/{sha}"],
 | |
|     createDeployKey: ["POST /repos/{owner}/{repo}/keys"],
 | |
|     createDeployment: ["POST /repos/{owner}/{repo}/deployments"],
 | |
|     createDeploymentStatus: ["POST /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
 | |
|     createDispatchEvent: ["POST /repos/{owner}/{repo}/dispatches"],
 | |
|     createForAuthenticatedUser: ["POST /user/repos"],
 | |
|     createFork: ["POST /repos/{owner}/{repo}/forks"],
 | |
|     createInOrg: ["POST /orgs/{org}/repos"],
 | |
|     createOrUpdateEnvironment: ["PUT /repos/{owner}/{repo}/environments/{environment_name}"],
 | |
|     createOrUpdateFileContents: ["PUT /repos/{owner}/{repo}/contents/{path}"],
 | |
|     createPagesSite: ["POST /repos/{owner}/{repo}/pages", {
 | |
|       mediaType: {
 | |
|         previews: ["switcheroo"]
 | |
|       }
 | |
|     }],
 | |
|     createRelease: ["POST /repos/{owner}/{repo}/releases"],
 | |
|     createUsingTemplate: ["POST /repos/{template_owner}/{template_repo}/generate", {
 | |
|       mediaType: {
 | |
|         previews: ["baptiste"]
 | |
|       }
 | |
|     }],
 | |
|     createWebhook: ["POST /repos/{owner}/{repo}/hooks"],
 | |
|     declineInvitation: ["DELETE /user/repository_invitations/{invitation_id}"],
 | |
|     delete: ["DELETE /repos/{owner}/{repo}"],
 | |
|     deleteAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
 | |
|     deleteAdminBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
 | |
|     deleteAnEnvironment: ["DELETE /repos/{owner}/{repo}/environments/{environment_name}"],
 | |
|     deleteBranchProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection"],
 | |
|     deleteCommitComment: ["DELETE /repos/{owner}/{repo}/comments/{comment_id}"],
 | |
|     deleteCommitSignatureProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
 | |
|       mediaType: {
 | |
|         previews: ["zzzax"]
 | |
|       }
 | |
|     }],
 | |
|     deleteDeployKey: ["DELETE /repos/{owner}/{repo}/keys/{key_id}"],
 | |
|     deleteDeployment: ["DELETE /repos/{owner}/{repo}/deployments/{deployment_id}"],
 | |
|     deleteFile: ["DELETE /repos/{owner}/{repo}/contents/{path}"],
 | |
|     deleteInvitation: ["DELETE /repos/{owner}/{repo}/invitations/{invitation_id}"],
 | |
|     deletePagesSite: ["DELETE /repos/{owner}/{repo}/pages", {
 | |
|       mediaType: {
 | |
|         previews: ["switcheroo"]
 | |
|       }
 | |
|     }],
 | |
|     deletePullRequestReviewProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
 | |
|     deleteRelease: ["DELETE /repos/{owner}/{repo}/releases/{release_id}"],
 | |
|     deleteReleaseAsset: ["DELETE /repos/{owner}/{repo}/releases/assets/{asset_id}"],
 | |
|     deleteWebhook: ["DELETE /repos/{owner}/{repo}/hooks/{hook_id}"],
 | |
|     disableAutomatedSecurityFixes: ["DELETE /repos/{owner}/{repo}/automated-security-fixes", {
 | |
|       mediaType: {
 | |
|         previews: ["london"]
 | |
|       }
 | |
|     }],
 | |
|     disableVulnerabilityAlerts: ["DELETE /repos/{owner}/{repo}/vulnerability-alerts", {
 | |
|       mediaType: {
 | |
|         previews: ["dorian"]
 | |
|       }
 | |
|     }],
 | |
|     downloadArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}", {}, {
 | |
|       renamed: ["repos", "downloadZipballArchive"]
 | |
|     }],
 | |
|     downloadTarballArchive: ["GET /repos/{owner}/{repo}/tarball/{ref}"],
 | |
|     downloadZipballArchive: ["GET /repos/{owner}/{repo}/zipball/{ref}"],
 | |
|     enableAutomatedSecurityFixes: ["PUT /repos/{owner}/{repo}/automated-security-fixes", {
 | |
|       mediaType: {
 | |
|         previews: ["london"]
 | |
|       }
 | |
|     }],
 | |
|     enableVulnerabilityAlerts: ["PUT /repos/{owner}/{repo}/vulnerability-alerts", {
 | |
|       mediaType: {
 | |
|         previews: ["dorian"]
 | |
|       }
 | |
|     }],
 | |
|     get: ["GET /repos/{owner}/{repo}"],
 | |
|     getAccessRestrictions: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions"],
 | |
|     getAdminBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
 | |
|     getAllEnvironments: ["GET /repos/{owner}/{repo}/environments"],
 | |
|     getAllStatusCheckContexts: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts"],
 | |
|     getAllTopics: ["GET /repos/{owner}/{repo}/topics", {
 | |
|       mediaType: {
 | |
|         previews: ["mercy"]
 | |
|       }
 | |
|     }],
 | |
|     getAppsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps"],
 | |
|     getBranch: ["GET /repos/{owner}/{repo}/branches/{branch}"],
 | |
|     getBranchProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection"],
 | |
|     getClones: ["GET /repos/{owner}/{repo}/traffic/clones"],
 | |
|     getCodeFrequencyStats: ["GET /repos/{owner}/{repo}/stats/code_frequency"],
 | |
|     getCollaboratorPermissionLevel: ["GET /repos/{owner}/{repo}/collaborators/{username}/permission"],
 | |
|     getCombinedStatusForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/status"],
 | |
|     getCommit: ["GET /repos/{owner}/{repo}/commits/{ref}"],
 | |
|     getCommitActivityStats: ["GET /repos/{owner}/{repo}/stats/commit_activity"],
 | |
|     getCommitComment: ["GET /repos/{owner}/{repo}/comments/{comment_id}"],
 | |
|     getCommitSignatureProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_signatures", {
 | |
|       mediaType: {
 | |
|         previews: ["zzzax"]
 | |
|       }
 | |
|     }],
 | |
|     getCommunityProfileMetrics: ["GET /repos/{owner}/{repo}/community/profile"],
 | |
|     getContent: ["GET /repos/{owner}/{repo}/contents/{path}"],
 | |
|     getContributorsStats: ["GET /repos/{owner}/{repo}/stats/contributors"],
 | |
|     getDeployKey: ["GET /repos/{owner}/{repo}/keys/{key_id}"],
 | |
|     getDeployment: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}"],
 | |
|     getDeploymentStatus: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses/{status_id}"],
 | |
|     getEnvironment: ["GET /repos/{owner}/{repo}/environments/{environment_name}"],
 | |
|     getLatestPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/latest"],
 | |
|     getLatestRelease: ["GET /repos/{owner}/{repo}/releases/latest"],
 | |
|     getPages: ["GET /repos/{owner}/{repo}/pages"],
 | |
|     getPagesBuild: ["GET /repos/{owner}/{repo}/pages/builds/{build_id}"],
 | |
|     getPagesHealthCheck: ["GET /repos/{owner}/{repo}/pages/health"],
 | |
|     getParticipationStats: ["GET /repos/{owner}/{repo}/stats/participation"],
 | |
|     getPullRequestReviewProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
 | |
|     getPunchCardStats: ["GET /repos/{owner}/{repo}/stats/punch_card"],
 | |
|     getReadme: ["GET /repos/{owner}/{repo}/readme"],
 | |
|     getReadmeInDirectory: ["GET /repos/{owner}/{repo}/readme/{dir}"],
 | |
|     getRelease: ["GET /repos/{owner}/{repo}/releases/{release_id}"],
 | |
|     getReleaseAsset: ["GET /repos/{owner}/{repo}/releases/assets/{asset_id}"],
 | |
|     getReleaseByTag: ["GET /repos/{owner}/{repo}/releases/tags/{tag}"],
 | |
|     getStatusChecksProtection: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
 | |
|     getTeamsWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams"],
 | |
|     getTopPaths: ["GET /repos/{owner}/{repo}/traffic/popular/paths"],
 | |
|     getTopReferrers: ["GET /repos/{owner}/{repo}/traffic/popular/referrers"],
 | |
|     getUsersWithAccessToProtectedBranch: ["GET /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users"],
 | |
|     getViews: ["GET /repos/{owner}/{repo}/traffic/views"],
 | |
|     getWebhook: ["GET /repos/{owner}/{repo}/hooks/{hook_id}"],
 | |
|     getWebhookConfigForRepo: ["GET /repos/{owner}/{repo}/hooks/{hook_id}/config"],
 | |
|     listBranches: ["GET /repos/{owner}/{repo}/branches"],
 | |
|     listBranchesForHeadCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/branches-where-head", {
 | |
|       mediaType: {
 | |
|         previews: ["groot"]
 | |
|       }
 | |
|     }],
 | |
|     listCollaborators: ["GET /repos/{owner}/{repo}/collaborators"],
 | |
|     listCommentsForCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/comments"],
 | |
|     listCommitCommentsForRepo: ["GET /repos/{owner}/{repo}/comments"],
 | |
|     listCommitStatusesForRef: ["GET /repos/{owner}/{repo}/commits/{ref}/statuses"],
 | |
|     listCommits: ["GET /repos/{owner}/{repo}/commits"],
 | |
|     listContributors: ["GET /repos/{owner}/{repo}/contributors"],
 | |
|     listDeployKeys: ["GET /repos/{owner}/{repo}/keys"],
 | |
|     listDeploymentStatuses: ["GET /repos/{owner}/{repo}/deployments/{deployment_id}/statuses"],
 | |
|     listDeployments: ["GET /repos/{owner}/{repo}/deployments"],
 | |
|     listForAuthenticatedUser: ["GET /user/repos"],
 | |
|     listForOrg: ["GET /orgs/{org}/repos"],
 | |
|     listForUser: ["GET /users/{username}/repos"],
 | |
|     listForks: ["GET /repos/{owner}/{repo}/forks"],
 | |
|     listInvitations: ["GET /repos/{owner}/{repo}/invitations"],
 | |
|     listInvitationsForAuthenticatedUser: ["GET /user/repository_invitations"],
 | |
|     listLanguages: ["GET /repos/{owner}/{repo}/languages"],
 | |
|     listPagesBuilds: ["GET /repos/{owner}/{repo}/pages/builds"],
 | |
|     listPublic: ["GET /repositories"],
 | |
|     listPullRequestsAssociatedWithCommit: ["GET /repos/{owner}/{repo}/commits/{commit_sha}/pulls", {
 | |
|       mediaType: {
 | |
|         previews: ["groot"]
 | |
|       }
 | |
|     }],
 | |
|     listReleaseAssets: ["GET /repos/{owner}/{repo}/releases/{release_id}/assets"],
 | |
|     listReleases: ["GET /repos/{owner}/{repo}/releases"],
 | |
|     listTags: ["GET /repos/{owner}/{repo}/tags"],
 | |
|     listTeams: ["GET /repos/{owner}/{repo}/teams"],
 | |
|     listWebhooks: ["GET /repos/{owner}/{repo}/hooks"],
 | |
|     merge: ["POST /repos/{owner}/{repo}/merges"],
 | |
|     pingWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/pings"],
 | |
|     removeAppAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
 | |
|       mapToData: "apps"
 | |
|     }],
 | |
|     removeCollaborator: ["DELETE /repos/{owner}/{repo}/collaborators/{username}"],
 | |
|     removeStatusCheckContexts: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
 | |
|       mapToData: "contexts"
 | |
|     }],
 | |
|     removeStatusCheckProtection: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
 | |
|     removeTeamAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
 | |
|       mapToData: "teams"
 | |
|     }],
 | |
|     removeUserAccessRestrictions: ["DELETE /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
 | |
|       mapToData: "users"
 | |
|     }],
 | |
|     renameBranch: ["POST /repos/{owner}/{repo}/branches/{branch}/rename"],
 | |
|     replaceAllTopics: ["PUT /repos/{owner}/{repo}/topics", {
 | |
|       mediaType: {
 | |
|         previews: ["mercy"]
 | |
|       }
 | |
|     }],
 | |
|     requestPagesBuild: ["POST /repos/{owner}/{repo}/pages/builds"],
 | |
|     setAdminBranchProtection: ["POST /repos/{owner}/{repo}/branches/{branch}/protection/enforce_admins"],
 | |
|     setAppAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/apps", {}, {
 | |
|       mapToData: "apps"
 | |
|     }],
 | |
|     setStatusCheckContexts: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks/contexts", {}, {
 | |
|       mapToData: "contexts"
 | |
|     }],
 | |
|     setTeamAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/teams", {}, {
 | |
|       mapToData: "teams"
 | |
|     }],
 | |
|     setUserAccessRestrictions: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection/restrictions/users", {}, {
 | |
|       mapToData: "users"
 | |
|     }],
 | |
|     testPushWebhook: ["POST /repos/{owner}/{repo}/hooks/{hook_id}/tests"],
 | |
|     transfer: ["POST /repos/{owner}/{repo}/transfer"],
 | |
|     update: ["PATCH /repos/{owner}/{repo}"],
 | |
|     updateBranchProtection: ["PUT /repos/{owner}/{repo}/branches/{branch}/protection"],
 | |
|     updateCommitComment: ["PATCH /repos/{owner}/{repo}/comments/{comment_id}"],
 | |
|     updateInformationAboutPagesSite: ["PUT /repos/{owner}/{repo}/pages"],
 | |
|     updateInvitation: ["PATCH /repos/{owner}/{repo}/invitations/{invitation_id}"],
 | |
|     updatePullRequestReviewProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_pull_request_reviews"],
 | |
|     updateRelease: ["PATCH /repos/{owner}/{repo}/releases/{release_id}"],
 | |
|     updateReleaseAsset: ["PATCH /repos/{owner}/{repo}/releases/assets/{asset_id}"],
 | |
|     updateStatusCheckPotection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks", {}, {
 | |
|       renamed: ["repos", "updateStatusCheckProtection"]
 | |
|     }],
 | |
|     updateStatusCheckProtection: ["PATCH /repos/{owner}/{repo}/branches/{branch}/protection/required_status_checks"],
 | |
|     updateWebhook: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}"],
 | |
|     updateWebhookConfigForRepo: ["PATCH /repos/{owner}/{repo}/hooks/{hook_id}/config"],
 | |
|     uploadReleaseAsset: ["POST /repos/{owner}/{repo}/releases/{release_id}/assets{?name,label}", {
 | |
|       baseUrl: "https://uploads.github.com"
 | |
|     }]
 | |
|   },
 | |
|   search: {
 | |
|     code: ["GET /search/code"],
 | |
|     commits: ["GET /search/commits", {
 | |
|       mediaType: {
 | |
|         previews: ["cloak"]
 | |
|       }
 | |
|     }],
 | |
|     issuesAndPullRequests: ["GET /search/issues"],
 | |
|     labels: ["GET /search/labels"],
 | |
|     repos: ["GET /search/repositories"],
 | |
|     topics: ["GET /search/topics", {
 | |
|       mediaType: {
 | |
|         previews: ["mercy"]
 | |
|       }
 | |
|     }],
 | |
|     users: ["GET /search/users"]
 | |
|   },
 | |
|   secretScanning: {
 | |
|     getAlert: ["GET /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"],
 | |
|     listAlertsForRepo: ["GET /repos/{owner}/{repo}/secret-scanning/alerts"],
 | |
|     updateAlert: ["PATCH /repos/{owner}/{repo}/secret-scanning/alerts/{alert_number}"]
 | |
|   },
 | |
|   teams: {
 | |
|     addOrUpdateMembershipForUserInOrg: ["PUT /orgs/{org}/teams/{team_slug}/memberships/{username}"],
 | |
|     addOrUpdateProjectPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     addOrUpdateRepoPermissionsInOrg: ["PUT /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
 | |
|     checkPermissionsForProjectInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects/{project_id}", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     checkPermissionsForRepoInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
 | |
|     create: ["POST /orgs/{org}/teams"],
 | |
|     createDiscussionCommentInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
 | |
|     createDiscussionInOrg: ["POST /orgs/{org}/teams/{team_slug}/discussions"],
 | |
|     deleteDiscussionCommentInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
 | |
|     deleteDiscussionInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
 | |
|     deleteInOrg: ["DELETE /orgs/{org}/teams/{team_slug}"],
 | |
|     getByName: ["GET /orgs/{org}/teams/{team_slug}"],
 | |
|     getDiscussionCommentInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
 | |
|     getDiscussionInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
 | |
|     getMembershipForUserInOrg: ["GET /orgs/{org}/teams/{team_slug}/memberships/{username}"],
 | |
|     list: ["GET /orgs/{org}/teams"],
 | |
|     listChildInOrg: ["GET /orgs/{org}/teams/{team_slug}/teams"],
 | |
|     listDiscussionCommentsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments"],
 | |
|     listDiscussionsInOrg: ["GET /orgs/{org}/teams/{team_slug}/discussions"],
 | |
|     listForAuthenticatedUser: ["GET /user/teams"],
 | |
|     listMembersInOrg: ["GET /orgs/{org}/teams/{team_slug}/members"],
 | |
|     listPendingInvitationsInOrg: ["GET /orgs/{org}/teams/{team_slug}/invitations"],
 | |
|     listProjectsInOrg: ["GET /orgs/{org}/teams/{team_slug}/projects", {
 | |
|       mediaType: {
 | |
|         previews: ["inertia"]
 | |
|       }
 | |
|     }],
 | |
|     listReposInOrg: ["GET /orgs/{org}/teams/{team_slug}/repos"],
 | |
|     removeMembershipForUserInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/memberships/{username}"],
 | |
|     removeProjectInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/projects/{project_id}"],
 | |
|     removeRepoInOrg: ["DELETE /orgs/{org}/teams/{team_slug}/repos/{owner}/{repo}"],
 | |
|     updateDiscussionCommentInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}/comments/{comment_number}"],
 | |
|     updateDiscussionInOrg: ["PATCH /orgs/{org}/teams/{team_slug}/discussions/{discussion_number}"],
 | |
|     updateInOrg: ["PATCH /orgs/{org}/teams/{team_slug}"]
 | |
|   },
 | |
|   users: {
 | |
|     addEmailForAuthenticated: ["POST /user/emails"],
 | |
|     block: ["PUT /user/blocks/{username}"],
 | |
|     checkBlocked: ["GET /user/blocks/{username}"],
 | |
|     checkFollowingForUser: ["GET /users/{username}/following/{target_user}"],
 | |
|     checkPersonIsFollowedByAuthenticated: ["GET /user/following/{username}"],
 | |
|     createGpgKeyForAuthenticated: ["POST /user/gpg_keys"],
 | |
|     createPublicSshKeyForAuthenticated: ["POST /user/keys"],
 | |
|     deleteEmailForAuthenticated: ["DELETE /user/emails"],
 | |
|     deleteGpgKeyForAuthenticated: ["DELETE /user/gpg_keys/{gpg_key_id}"],
 | |
|     deletePublicSshKeyForAuthenticated: ["DELETE /user/keys/{key_id}"],
 | |
|     follow: ["PUT /user/following/{username}"],
 | |
|     getAuthenticated: ["GET /user"],
 | |
|     getByUsername: ["GET /users/{username}"],
 | |
|     getContextForUser: ["GET /users/{username}/hovercard"],
 | |
|     getGpgKeyForAuthenticated: ["GET /user/gpg_keys/{gpg_key_id}"],
 | |
|     getPublicSshKeyForAuthenticated: ["GET /user/keys/{key_id}"],
 | |
|     list: ["GET /users"],
 | |
|     listBlockedByAuthenticated: ["GET /user/blocks"],
 | |
|     listEmailsForAuthenticated: ["GET /user/emails"],
 | |
|     listFollowedByAuthenticated: ["GET /user/following"],
 | |
|     listFollowersForAuthenticatedUser: ["GET /user/followers"],
 | |
|     listFollowersForUser: ["GET /users/{username}/followers"],
 | |
|     listFollowingForUser: ["GET /users/{username}/following"],
 | |
|     listGpgKeysForAuthenticated: ["GET /user/gpg_keys"],
 | |
|     listGpgKeysForUser: ["GET /users/{username}/gpg_keys"],
 | |
|     listPublicEmailsForAuthenticated: ["GET /user/public_emails"],
 | |
|     listPublicKeysForUser: ["GET /users/{username}/keys"],
 | |
|     listPublicSshKeysForAuthenticated: ["GET /user/keys"],
 | |
|     setPrimaryEmailVisibilityForAuthenticated: ["PATCH /user/email/visibility"],
 | |
|     unblock: ["DELETE /user/blocks/{username}"],
 | |
|     unfollow: ["DELETE /user/following/{username}"],
 | |
|     updateAuthenticated: ["PATCH /user"]
 | |
|   }
 | |
| };
 | |
| 
 | |
| const VERSION = "5.3.0";
 | |
| 
 | |
| function endpointsToMethods(octokit, endpointsMap) {
 | |
|   const newMethods = {};
 | |
| 
 | |
|   for (const [scope, endpoints] of Object.entries(endpointsMap)) {
 | |
|     for (const [methodName, endpoint] of Object.entries(endpoints)) {
 | |
|       const [route, defaults, decorations] = endpoint;
 | |
|       const [method, url] = route.split(/ /);
 | |
|       const endpointDefaults = Object.assign({
 | |
|         method,
 | |
|         url
 | |
|       }, defaults);
 | |
| 
 | |
|       if (!newMethods[scope]) {
 | |
|         newMethods[scope] = {};
 | |
|       }
 | |
| 
 | |
|       const scopeMethods = newMethods[scope];
 | |
| 
 | |
|       if (decorations) {
 | |
|         scopeMethods[methodName] = decorate(octokit, scope, methodName, endpointDefaults, decorations);
 | |
|         continue;
 | |
|       }
 | |
| 
 | |
|       scopeMethods[methodName] = octokit.request.defaults(endpointDefaults);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return newMethods;
 | |
| }
 | |
| 
 | |
| function decorate(octokit, scope, methodName, defaults, decorations) {
 | |
|   const requestWithDefaults = octokit.request.defaults(defaults);
 | |
|   /* istanbul ignore next */
 | |
| 
 | |
|   function withDecorations(...args) {
 | |
|     // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
 | |
|     let options = requestWithDefaults.endpoint.merge(...args); // There are currently no other decorations than `.mapToData`
 | |
| 
 | |
|     if (decorations.mapToData) {
 | |
|       options = Object.assign({}, options, {
 | |
|         data: options[decorations.mapToData],
 | |
|         [decorations.mapToData]: undefined
 | |
|       });
 | |
|       return requestWithDefaults(options);
 | |
|     }
 | |
| 
 | |
|     if (decorations.renamed) {
 | |
|       const [newScope, newMethodName] = decorations.renamed;
 | |
|       octokit.log.warn(`octokit.${scope}.${methodName}() has been renamed to octokit.${newScope}.${newMethodName}()`);
 | |
|     }
 | |
| 
 | |
|     if (decorations.deprecated) {
 | |
|       octokit.log.warn(decorations.deprecated);
 | |
|     }
 | |
| 
 | |
|     if (decorations.renamedParameters) {
 | |
|       // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
 | |
|       const options = requestWithDefaults.endpoint.merge(...args);
 | |
| 
 | |
|       for (const [name, alias] of Object.entries(decorations.renamedParameters)) {
 | |
|         if (name in options) {
 | |
|           octokit.log.warn(`"${name}" parameter is deprecated for "octokit.${scope}.${methodName}()". Use "${alias}" instead`);
 | |
| 
 | |
|           if (!(alias in options)) {
 | |
|             options[alias] = options[name];
 | |
|           }
 | |
| 
 | |
|           delete options[name];
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       return requestWithDefaults(options);
 | |
|     } // @ts-ignore https://github.com/microsoft/TypeScript/issues/25488
 | |
| 
 | |
| 
 | |
|     return requestWithDefaults(...args);
 | |
|   }
 | |
| 
 | |
|   return Object.assign(withDecorations, requestWithDefaults);
 | |
| }
 | |
| 
 | |
| function restEndpointMethods(octokit) {
 | |
|   const api = endpointsToMethods(octokit, Endpoints);
 | |
|   return {
 | |
|     rest: api
 | |
|   };
 | |
| }
 | |
| restEndpointMethods.VERSION = VERSION;
 | |
| function legacyRestEndpointMethods(octokit) {
 | |
|   const api = endpointsToMethods(octokit, Endpoints);
 | |
|   return _objectSpread2(_objectSpread2({}, api), {}, {
 | |
|     rest: api
 | |
|   });
 | |
| }
 | |
| legacyRestEndpointMethods.VERSION = VERSION;
 | |
| 
 | |
| exports.legacyRestEndpointMethods = legacyRestEndpointMethods;
 | |
| exports.restEndpointMethods = restEndpointMethods;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 537:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
 | |
| 
 | |
| var deprecation = __webpack_require__(8932);
 | |
| var once = _interopDefault(__webpack_require__(1223));
 | |
| 
 | |
| const logOnce = once(deprecation => console.warn(deprecation));
 | |
| /**
 | |
|  * Error with extra properties to help with debugging
 | |
|  */
 | |
| 
 | |
| class RequestError extends Error {
 | |
|   constructor(message, statusCode, options) {
 | |
|     super(message); // Maintains proper stack trace (only available on V8)
 | |
| 
 | |
|     /* istanbul ignore next */
 | |
| 
 | |
|     if (Error.captureStackTrace) {
 | |
|       Error.captureStackTrace(this, this.constructor);
 | |
|     }
 | |
| 
 | |
|     this.name = "HttpError";
 | |
|     this.status = statusCode;
 | |
|     Object.defineProperty(this, "code", {
 | |
|       get() {
 | |
|         logOnce(new deprecation.Deprecation("[@octokit/request-error] `error.code` is deprecated, use `error.status`."));
 | |
|         return statusCode;
 | |
|       }
 | |
| 
 | |
|     });
 | |
|     this.headers = options.headers || {}; // redact request credentials without mutating original request options
 | |
| 
 | |
|     const requestCopy = Object.assign({}, options.request);
 | |
| 
 | |
|     if (options.request.headers.authorization) {
 | |
|       requestCopy.headers = Object.assign({}, options.request.headers, {
 | |
|         authorization: options.request.headers.authorization.replace(/ .*$/, " [REDACTED]")
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     requestCopy.url = requestCopy.url // client_id & client_secret can be passed as URL query parameters to increase rate limit
 | |
|     // see https://developer.github.com/v3/#increasing-the-unauthenticated-rate-limit-for-oauth-applications
 | |
|     .replace(/\bclient_secret=\w+/g, "client_secret=[REDACTED]") // OAuth tokens can be passed as URL query parameters, although it is not recommended
 | |
|     // see https://developer.github.com/v3/#oauth2-token-sent-in-a-header
 | |
|     .replace(/\baccess_token=\w+/g, "access_token=[REDACTED]");
 | |
|     this.request = requestCopy;
 | |
|   }
 | |
| 
 | |
| }
 | |
| 
 | |
| exports.RequestError = RequestError;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6234:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
 | |
| 
 | |
| var endpoint = __webpack_require__(9440);
 | |
| var universalUserAgent = __webpack_require__(5030);
 | |
| var isPlainObject = __webpack_require__(3287);
 | |
| var nodeFetch = _interopDefault(__webpack_require__(467));
 | |
| var requestError = __webpack_require__(537);
 | |
| 
 | |
| const VERSION = "5.4.15";
 | |
| 
 | |
| function getBufferResponse(response) {
 | |
|   return response.arrayBuffer();
 | |
| }
 | |
| 
 | |
| function fetchWrapper(requestOptions) {
 | |
|   if (isPlainObject.isPlainObject(requestOptions.body) || Array.isArray(requestOptions.body)) {
 | |
|     requestOptions.body = JSON.stringify(requestOptions.body);
 | |
|   }
 | |
| 
 | |
|   let headers = {};
 | |
|   let status;
 | |
|   let url;
 | |
|   const fetch = requestOptions.request && requestOptions.request.fetch || nodeFetch;
 | |
|   return fetch(requestOptions.url, Object.assign({
 | |
|     method: requestOptions.method,
 | |
|     body: requestOptions.body,
 | |
|     headers: requestOptions.headers,
 | |
|     redirect: requestOptions.redirect
 | |
|   }, // `requestOptions.request.agent` type is incompatible
 | |
|   // see https://github.com/octokit/types.ts/pull/264
 | |
|   requestOptions.request)).then(response => {
 | |
|     url = response.url;
 | |
|     status = response.status;
 | |
| 
 | |
|     for (const keyAndValue of response.headers) {
 | |
|       headers[keyAndValue[0]] = keyAndValue[1];
 | |
|     }
 | |
| 
 | |
|     if (status === 204 || status === 205) {
 | |
|       return;
 | |
|     } // GitHub API returns 200 for HEAD requests
 | |
| 
 | |
| 
 | |
|     if (requestOptions.method === "HEAD") {
 | |
|       if (status < 400) {
 | |
|         return;
 | |
|       }
 | |
| 
 | |
|       throw new requestError.RequestError(response.statusText, status, {
 | |
|         headers,
 | |
|         request: requestOptions
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     if (status === 304) {
 | |
|       throw new requestError.RequestError("Not modified", status, {
 | |
|         headers,
 | |
|         request: requestOptions
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     if (status >= 400) {
 | |
|       return response.text().then(message => {
 | |
|         const error = new requestError.RequestError(message, status, {
 | |
|           headers,
 | |
|           request: requestOptions
 | |
|         });
 | |
| 
 | |
|         try {
 | |
|           let responseBody = JSON.parse(error.message);
 | |
|           Object.assign(error, responseBody);
 | |
|           let errors = responseBody.errors; // Assumption `errors` would always be in Array format
 | |
| 
 | |
|           error.message = error.message + ": " + errors.map(JSON.stringify).join(", ");
 | |
|         } catch (e) {// ignore, see octokit/rest.js#684
 | |
|         }
 | |
| 
 | |
|         throw error;
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     const contentType = response.headers.get("content-type");
 | |
| 
 | |
|     if (/application\/json/.test(contentType)) {
 | |
|       return response.json();
 | |
|     }
 | |
| 
 | |
|     if (!contentType || /^text\/|charset=utf-8$/.test(contentType)) {
 | |
|       return response.text();
 | |
|     }
 | |
| 
 | |
|     return getBufferResponse(response);
 | |
|   }).then(data => {
 | |
|     return {
 | |
|       status,
 | |
|       url,
 | |
|       headers,
 | |
|       data
 | |
|     };
 | |
|   }).catch(error => {
 | |
|     if (error instanceof requestError.RequestError) {
 | |
|       throw error;
 | |
|     }
 | |
| 
 | |
|     throw new requestError.RequestError(error.message, 500, {
 | |
|       headers,
 | |
|       request: requestOptions
 | |
|     });
 | |
|   });
 | |
| }
 | |
| 
 | |
| function withDefaults(oldEndpoint, newDefaults) {
 | |
|   const endpoint = oldEndpoint.defaults(newDefaults);
 | |
| 
 | |
|   const newApi = function (route, parameters) {
 | |
|     const endpointOptions = endpoint.merge(route, parameters);
 | |
| 
 | |
|     if (!endpointOptions.request || !endpointOptions.request.hook) {
 | |
|       return fetchWrapper(endpoint.parse(endpointOptions));
 | |
|     }
 | |
| 
 | |
|     const request = (route, parameters) => {
 | |
|       return fetchWrapper(endpoint.parse(endpoint.merge(route, parameters)));
 | |
|     };
 | |
| 
 | |
|     Object.assign(request, {
 | |
|       endpoint,
 | |
|       defaults: withDefaults.bind(null, endpoint)
 | |
|     });
 | |
|     return endpointOptions.request.hook(request, endpointOptions);
 | |
|   };
 | |
| 
 | |
|   return Object.assign(newApi, {
 | |
|     endpoint,
 | |
|     defaults: withDefaults.bind(null, endpoint)
 | |
|   });
 | |
| }
 | |
| 
 | |
| const request = withDefaults(endpoint.endpoint, {
 | |
|   headers: {
 | |
|     "user-agent": `octokit-request.js/${VERSION} ${universalUserAgent.getUserAgent()}`
 | |
|   }
 | |
| });
 | |
| 
 | |
| exports.request = request;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3682:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| var register = __webpack_require__(4670)
 | |
| var addHook = __webpack_require__(5549)
 | |
| var removeHook = __webpack_require__(6819)
 | |
| 
 | |
| // bind with array of arguments: https://stackoverflow.com/a/21792913
 | |
| var bind = Function.bind
 | |
| var bindable = bind.bind(bind)
 | |
| 
 | |
| function bindApi (hook, state, name) {
 | |
|   var removeHookRef = bindable(removeHook, null).apply(null, name ? [state, name] : [state])
 | |
|   hook.api = { remove: removeHookRef }
 | |
|   hook.remove = removeHookRef
 | |
| 
 | |
|   ;['before', 'error', 'after', 'wrap'].forEach(function (kind) {
 | |
|     var args = name ? [state, kind, name] : [state, kind]
 | |
|     hook[kind] = hook.api[kind] = bindable(addHook, null).apply(null, args)
 | |
|   })
 | |
| }
 | |
| 
 | |
| function HookSingular () {
 | |
|   var singularHookName = 'h'
 | |
|   var singularHookState = {
 | |
|     registry: {}
 | |
|   }
 | |
|   var singularHook = register.bind(null, singularHookState, singularHookName)
 | |
|   bindApi(singularHook, singularHookState, singularHookName)
 | |
|   return singularHook
 | |
| }
 | |
| 
 | |
| function HookCollection () {
 | |
|   var state = {
 | |
|     registry: {}
 | |
|   }
 | |
| 
 | |
|   var hook = register.bind(null, state)
 | |
|   bindApi(hook, state)
 | |
| 
 | |
|   return hook
 | |
| }
 | |
| 
 | |
| var collectionHookDeprecationMessageDisplayed = false
 | |
| function Hook () {
 | |
|   if (!collectionHookDeprecationMessageDisplayed) {
 | |
|     console.warn('[before-after-hook]: "Hook()" repurposing warning, use "Hook.Collection()". Read more: https://git.io/upgrade-before-after-hook-to-1.4')
 | |
|     collectionHookDeprecationMessageDisplayed = true
 | |
|   }
 | |
|   return HookCollection()
 | |
| }
 | |
| 
 | |
| Hook.Singular = HookSingular.bind()
 | |
| Hook.Collection = HookCollection.bind()
 | |
| 
 | |
| module.exports = Hook
 | |
| // expose constructors as a named property for TypeScript
 | |
| module.exports.Hook = Hook
 | |
| module.exports.Singular = Hook.Singular
 | |
| module.exports.Collection = Hook.Collection
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5549:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| module.exports = addHook;
 | |
| 
 | |
| function addHook(state, kind, name, hook) {
 | |
|   var orig = hook;
 | |
|   if (!state.registry[name]) {
 | |
|     state.registry[name] = [];
 | |
|   }
 | |
| 
 | |
|   if (kind === "before") {
 | |
|     hook = function (method, options) {
 | |
|       return Promise.resolve()
 | |
|         .then(orig.bind(null, options))
 | |
|         .then(method.bind(null, options));
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   if (kind === "after") {
 | |
|     hook = function (method, options) {
 | |
|       var result;
 | |
|       return Promise.resolve()
 | |
|         .then(method.bind(null, options))
 | |
|         .then(function (result_) {
 | |
|           result = result_;
 | |
|           return orig(result, options);
 | |
|         })
 | |
|         .then(function () {
 | |
|           return result;
 | |
|         });
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   if (kind === "error") {
 | |
|     hook = function (method, options) {
 | |
|       return Promise.resolve()
 | |
|         .then(method.bind(null, options))
 | |
|         .catch(function (error) {
 | |
|           return orig(error, options);
 | |
|         });
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   state.registry[name].push({
 | |
|     hook: hook,
 | |
|     orig: orig,
 | |
|   });
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4670:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| module.exports = register;
 | |
| 
 | |
| function register(state, name, method, options) {
 | |
|   if (typeof method !== "function") {
 | |
|     throw new Error("method for before hook must be a function");
 | |
|   }
 | |
| 
 | |
|   if (!options) {
 | |
|     options = {};
 | |
|   }
 | |
| 
 | |
|   if (Array.isArray(name)) {
 | |
|     return name.reverse().reduce(function (callback, name) {
 | |
|       return register.bind(null, state, name, callback, options);
 | |
|     }, method)();
 | |
|   }
 | |
| 
 | |
|   return Promise.resolve().then(function () {
 | |
|     if (!state.registry[name]) {
 | |
|       return method(options);
 | |
|     }
 | |
| 
 | |
|     return state.registry[name].reduce(function (method, registered) {
 | |
|       return registered.hook.bind(null, method, options);
 | |
|     }, method)();
 | |
|   });
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6819:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| module.exports = removeHook;
 | |
| 
 | |
| function removeHook(state, name, method) {
 | |
|   if (!state.registry[name]) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   var index = state.registry[name]
 | |
|     .map(function (registered) {
 | |
|       return registered.orig;
 | |
|     })
 | |
|     .indexOf(method);
 | |
| 
 | |
|   if (index === -1) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   state.registry[name].splice(index, 1);
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6942:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| 
 | |
| 
 | |
| class ResizeableBuffer{
 | |
|   constructor(size=100){
 | |
|     this.size = size
 | |
|     this.length = 0
 | |
|     this.buf = Buffer.alloc(size)
 | |
|   }
 | |
|   prepend(val){
 | |
|     if(Buffer.isBuffer(val)){
 | |
|       const length = this.length + val.length
 | |
|       if(length >= this.size){
 | |
|         this.resize()
 | |
|         if(length >= this.size){
 | |
|           throw Error('INVALID_BUFFER_STATE')
 | |
|         }
 | |
|       }
 | |
|       const buf = this.buf
 | |
|       this.buf = Buffer.alloc(this.size)
 | |
|       val.copy(this.buf, 0)
 | |
|       buf.copy(this.buf, val.length)
 | |
|       this.length += val.length
 | |
|     }else{
 | |
|       const length = this.length++
 | |
|       if(length === this.size){
 | |
|         this.resize()
 | |
|       }
 | |
|       const buf = this.clone()
 | |
|       this.buf[0] = val
 | |
|       buf.copy(this.buf,1, 0, length)
 | |
|     }
 | |
|   }
 | |
|   append(val){
 | |
|     const length = this.length++
 | |
|     if(length === this.size){
 | |
|       this.resize()
 | |
|     }
 | |
|     this.buf[length] = val
 | |
|   }
 | |
|   clone(){
 | |
|     return Buffer.from(this.buf.slice(0, this.length))
 | |
|   }
 | |
|   resize(){
 | |
|     const length = this.length
 | |
|     this.size = this.size * 2
 | |
|     const buf = Buffer.alloc(this.size)
 | |
|     this.buf.copy(buf,0, 0, length)
 | |
|     this.buf = buf
 | |
|   }
 | |
|   toString(encoding){
 | |
|     if(encoding){
 | |
|       return this.buf.slice(0, this.length).toString(encoding)
 | |
|     }else{
 | |
|       return Uint8Array.prototype.slice.call(this.buf.slice(0, this.length))
 | |
|     }
 | |
|   }
 | |
|   toJSON(){
 | |
|     return this.toString('utf8')
 | |
|   }
 | |
|   reset(){
 | |
|     this.length = 0
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = ResizeableBuffer
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2830:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| 
 | |
| /*
 | |
| CSV Parse
 | |
| 
 | |
| Please look at the [project documentation](https://csv.js.org/parse/) for
 | |
| additional information.
 | |
| */
 | |
| 
 | |
| const { Transform } = __webpack_require__(2413)
 | |
| const ResizeableBuffer = __webpack_require__(6942)
 | |
| 
 | |
| // white space characters
 | |
| // https://en.wikipedia.org/wiki/Whitespace_character
 | |
| // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions/Character_Classes#Types
 | |
| // \f\n\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff
 | |
| const tab = 9
 | |
| const nl = 10 // \n, 0x0A in hexadecimal, 10 in decimal
 | |
| const np = 12
 | |
| const cr = 13 // \r, 0x0D in hexadécimal, 13 in decimal
 | |
| const space = 32
 | |
| const boms = {
 | |
|   // Note, the following are equals:
 | |
|   // Buffer.from("\ufeff")
 | |
|   // Buffer.from([239, 187, 191])
 | |
|   // Buffer.from('EFBBBF', 'hex')
 | |
|   'utf8': Buffer.from([239, 187, 191]),
 | |
|   // Note, the following are equals:
 | |
|   // Buffer.from "\ufeff", 'utf16le
 | |
|   // Buffer.from([255, 254])
 | |
|   'utf16le': Buffer.from([255, 254])
 | |
| }
 | |
| 
 | |
| class Parser extends Transform {
 | |
|   constructor(opts = {}){
 | |
|     super({...{readableObjectMode: true}, ...opts, encoding: null})
 | |
|     this.__originalOptions = opts
 | |
|     this.__normalizeOptions(opts)
 | |
|   }
 | |
|   __normalizeOptions(opts){
 | |
|     const options = {}
 | |
|     // Merge with user options
 | |
|     for(let opt in opts){
 | |
|       options[underscore(opt)] = opts[opt]
 | |
|     }
 | |
|     // Normalize option `encoding`
 | |
|     // Note: defined first because other options depends on it
 | |
|     // to convert chars/strings into buffers.
 | |
|     if(options.encoding === undefined || options.encoding === true){
 | |
|       options.encoding = 'utf8'
 | |
|     }else if(options.encoding === null || options.encoding === false){
 | |
|       options.encoding = null
 | |
|     }else if(typeof options.encoding !== 'string' && options.encoding !== null){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_ENCODING', [
 | |
|         'Invalid option encoding:',
 | |
|         'encoding must be a string or null to return a buffer,',
 | |
|         `got ${JSON.stringify(options.encoding)}`
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `bom`
 | |
|     if(options.bom === undefined || options.bom === null || options.bom === false){
 | |
|       options.bom = false
 | |
|     }else if(options.bom !== true){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_BOM', [
 | |
|         'Invalid option bom:', 'bom must be true,',
 | |
|         `got ${JSON.stringify(options.bom)}`
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `cast`
 | |
|     let fnCastField = null
 | |
|     if(options.cast === undefined || options.cast === null || options.cast === false || options.cast === ''){
 | |
|       options.cast = undefined
 | |
|     }else if(typeof options.cast === 'function'){
 | |
|       fnCastField = options.cast
 | |
|       options.cast = true
 | |
|     }else if(options.cast !== true){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_CAST', [
 | |
|         'Invalid option cast:', 'cast must be true or a function,',
 | |
|         `got ${JSON.stringify(options.cast)}`
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `cast_date`
 | |
|     if(options.cast_date === undefined || options.cast_date === null || options.cast_date === false || options.cast_date === ''){
 | |
|       options.cast_date = false
 | |
|     }else if(options.cast_date === true){
 | |
|       options.cast_date = function(value){
 | |
|         const date = Date.parse(value)
 | |
|         return !isNaN(date) ? new Date(date) : value
 | |
|       }
 | |
|     }else if(typeof options.cast_date !== 'function'){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_CAST_DATE', [
 | |
|         'Invalid option cast_date:', 'cast_date must be true or a function,',
 | |
|         `got ${JSON.stringify(options.cast_date)}`
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `columns`
 | |
|     let fnFirstLineToHeaders = null
 | |
|     if(options.columns === true){
 | |
|       // Fields in the first line are converted as-is to columns
 | |
|       fnFirstLineToHeaders = undefined
 | |
|     }else if(typeof options.columns === 'function'){
 | |
|       fnFirstLineToHeaders = options.columns
 | |
|       options.columns = true
 | |
|     }else if(Array.isArray(options.columns)){
 | |
|       options.columns = normalizeColumnsArray(options.columns)
 | |
|     }else if(options.columns === undefined || options.columns === null || options.columns === false){
 | |
|       options.columns = false
 | |
|     }else{
 | |
|       throw new CsvError('CSV_INVALID_OPTION_COLUMNS', [
 | |
|         'Invalid option columns:',
 | |
|         'expect an array, a function or true,',
 | |
|         `got ${JSON.stringify(options.columns)}`
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `columns_duplicates_to_array`
 | |
|     if(options.columns_duplicates_to_array === undefined || options.columns_duplicates_to_array === null || options.columns_duplicates_to_array === false){
 | |
|       options.columns_duplicates_to_array = false
 | |
|     }else if(options.columns_duplicates_to_array !== true){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', [
 | |
|         'Invalid option columns_duplicates_to_array:',
 | |
|         'expect an boolean,',
 | |
|         `got ${JSON.stringify(options.columns_duplicates_to_array)}`
 | |
|       ], options)
 | |
|     }else if(options.columns === false){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_COLUMNS_DUPLICATES_TO_ARRAY', [
 | |
|         'Invalid option columns_duplicates_to_array:',
 | |
|         'the `columns` mode must be activated.'
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `comment`
 | |
|     if(options.comment === undefined || options.comment === null || options.comment === false || options.comment === ''){
 | |
|       options.comment = null
 | |
|     }else{
 | |
|       if(typeof options.comment === 'string'){
 | |
|         options.comment = Buffer.from(options.comment, options.encoding)
 | |
|       }
 | |
|       if(!Buffer.isBuffer(options.comment)){
 | |
|         throw new CsvError('CSV_INVALID_OPTION_COMMENT', [
 | |
|           'Invalid option comment:',
 | |
|           'comment must be a buffer or a string,',
 | |
|           `got ${JSON.stringify(options.comment)}`
 | |
|         ], options)
 | |
|       }
 | |
|     }
 | |
|     // Normalize option `delimiter`
 | |
|     const delimiter_json = JSON.stringify(options.delimiter)
 | |
|     if(!Array.isArray(options.delimiter)) options.delimiter = [options.delimiter]
 | |
|     if(options.delimiter.length === 0){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [
 | |
|         'Invalid option delimiter:',
 | |
|         'delimiter must be a non empty string or buffer or array of string|buffer,',
 | |
|         `got ${delimiter_json}`
 | |
|       ], options)
 | |
|     }
 | |
|     options.delimiter = options.delimiter.map(function(delimiter){
 | |
|       if(delimiter === undefined || delimiter === null || delimiter === false){
 | |
|         return Buffer.from(',', options.encoding)
 | |
|       }
 | |
|       if(typeof delimiter === 'string'){
 | |
|         delimiter = Buffer.from(delimiter, options.encoding)
 | |
|       }
 | |
|       if( !Buffer.isBuffer(delimiter) || delimiter.length === 0){
 | |
|         throw new CsvError('CSV_INVALID_OPTION_DELIMITER', [
 | |
|           'Invalid option delimiter:',
 | |
|           'delimiter must be a non empty string or buffer or array of string|buffer,',
 | |
|           `got ${delimiter_json}`
 | |
|         ], options)
 | |
|       }
 | |
|       return delimiter
 | |
|     })
 | |
|     // Normalize option `escape`
 | |
|     if(options.escape === undefined || options.escape === true){
 | |
|       options.escape = Buffer.from('"', options.encoding)
 | |
|     }else if(typeof options.escape === 'string'){
 | |
|       options.escape = Buffer.from(options.escape, options.encoding)
 | |
|     }else if (options.escape === null || options.escape === false){
 | |
|       options.escape = null
 | |
|     }
 | |
|     if(options.escape !== null){
 | |
|       if(!Buffer.isBuffer(options.escape)){
 | |
|         throw new Error(`Invalid Option: escape must be a buffer, a string or a boolean, got ${JSON.stringify(options.escape)}`)
 | |
|       }
 | |
|     }
 | |
|     // Normalize option `from`
 | |
|     if(options.from === undefined || options.from === null){
 | |
|       options.from = 1
 | |
|     }else{
 | |
|       if(typeof options.from === 'string' && /\d+/.test(options.from)){
 | |
|         options.from = parseInt(options.from)
 | |
|       }
 | |
|       if(Number.isInteger(options.from)){
 | |
|         if(options.from < 0){
 | |
|           throw new Error(`Invalid Option: from must be a positive integer, got ${JSON.stringify(opts.from)}`)
 | |
|         }
 | |
|       }else{
 | |
|         throw new Error(`Invalid Option: from must be an integer, got ${JSON.stringify(options.from)}`)
 | |
|       }
 | |
|     }
 | |
|     // Normalize option `from_line`
 | |
|     if(options.from_line === undefined || options.from_line === null){
 | |
|       options.from_line = 1
 | |
|     }else{
 | |
|       if(typeof options.from_line === 'string' && /\d+/.test(options.from_line)){
 | |
|         options.from_line = parseInt(options.from_line)
 | |
|       }
 | |
|       if(Number.isInteger(options.from_line)){
 | |
|         if(options.from_line <= 0){
 | |
|           throw new Error(`Invalid Option: from_line must be a positive integer greater than 0, got ${JSON.stringify(opts.from_line)}`)
 | |
|         }
 | |
|       }else{
 | |
|         throw new Error(`Invalid Option: from_line must be an integer, got ${JSON.stringify(opts.from_line)}`)
 | |
|       }
 | |
|     }
 | |
|     // Normalize options `ignore_last_delimiters`
 | |
|     if(options.ignore_last_delimiters === undefined || options.ignore_last_delimiters === null){
 | |
|       options.ignore_last_delimiters = false
 | |
|     }else if(typeof options.ignore_last_delimiters === 'number'){
 | |
|       options.ignore_last_delimiters = Math.floor(options.ignore_last_delimiters)
 | |
|       if(options.ignore_last_delimiters === 0){
 | |
|         options.ignore_last_delimiters = false
 | |
|       }
 | |
|     }else if(typeof options.ignore_last_delimiters !== 'boolean'){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_IGNORE_LAST_DELIMITERS', [
 | |
|         'Invalid option `ignore_last_delimiters`:',
 | |
|         'the value must be a boolean value or an integer,',
 | |
|         `got ${JSON.stringify(options.ignore_last_delimiters)}`
 | |
|       ], options)
 | |
|     }
 | |
|     if(options.ignore_last_delimiters === true && options.columns === false){
 | |
|       throw new CsvError('CSV_IGNORE_LAST_DELIMITERS_REQUIRES_COLUMNS', [
 | |
|         'The option `ignore_last_delimiters`',
 | |
|         'requires the activation of the `columns` option'
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `info`
 | |
|     if(options.info === undefined || options.info === null || options.info === false){
 | |
|       options.info = false
 | |
|     }else if(options.info !== true){
 | |
|       throw new Error(`Invalid Option: info must be true, got ${JSON.stringify(options.info)}`)
 | |
|     }
 | |
|     // Normalize option `max_record_size`
 | |
|     if(options.max_record_size === undefined || options.max_record_size === null || options.max_record_size === false){
 | |
|       options.max_record_size = 0
 | |
|     }else if(Number.isInteger(options.max_record_size) && options.max_record_size >= 0){
 | |
|       // Great, nothing to do
 | |
|     }else if(typeof options.max_record_size === 'string' && /\d+/.test(options.max_record_size)){
 | |
|       options.max_record_size = parseInt(options.max_record_size)
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: max_record_size must be a positive integer, got ${JSON.stringify(options.max_record_size)}`)
 | |
|     }
 | |
|     // Normalize option `objname`
 | |
|     if(options.objname === undefined || options.objname === null || options.objname === false){
 | |
|       options.objname = undefined
 | |
|     }else if(Buffer.isBuffer(options.objname)){
 | |
|       if(options.objname.length === 0){
 | |
|         throw new Error(`Invalid Option: objname must be a non empty buffer`)
 | |
|       }
 | |
|       if(options.encoding === null){
 | |
|         // Don't call `toString`, leave objname as a buffer
 | |
|       }else{
 | |
|         options.objname = options.objname.toString(options.encoding)
 | |
|       }
 | |
|     }else if(typeof options.objname === 'string'){
 | |
|       if(options.objname.length === 0){
 | |
|         throw new Error(`Invalid Option: objname must be a non empty string`)
 | |
|       }
 | |
|       // Great, nothing to do
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: objname must be a string or a buffer, got ${options.objname}`)
 | |
|     }
 | |
|     // Normalize option `on_record`
 | |
|     if(options.on_record === undefined || options.on_record === null){
 | |
|       options.on_record = undefined
 | |
|     }else if(typeof options.on_record !== 'function'){
 | |
|       throw new CsvError('CSV_INVALID_OPTION_ON_RECORD', [
 | |
|         'Invalid option `on_record`:',
 | |
|         'expect a function,',
 | |
|         `got ${JSON.stringify(options.on_record)}`
 | |
|       ], options)
 | |
|     }
 | |
|     // Normalize option `quote`
 | |
|     if(options.quote === null || options.quote === false || options.quote === ''){
 | |
|       options.quote = null
 | |
|     }else{
 | |
|       if(options.quote === undefined || options.quote === true){
 | |
|         options.quote = Buffer.from('"', options.encoding)
 | |
|       }else if(typeof options.quote === 'string'){
 | |
|         options.quote = Buffer.from(options.quote, options.encoding)
 | |
|       }
 | |
|       if(!Buffer.isBuffer(options.quote)){
 | |
|         throw new Error(`Invalid Option: quote must be a buffer or a string, got ${JSON.stringify(options.quote)}`)
 | |
|       }
 | |
|     }
 | |
|     // Normalize option `raw`
 | |
|     if(options.raw === undefined || options.raw === null || options.raw === false){
 | |
|       options.raw = false
 | |
|     }else if(options.raw !== true){
 | |
|       throw new Error(`Invalid Option: raw must be true, got ${JSON.stringify(options.raw)}`)
 | |
|     }
 | |
|     // Normalize option `record_delimiter`
 | |
|     if(!options.record_delimiter){
 | |
|       options.record_delimiter = []
 | |
|     }else if(!Array.isArray(options.record_delimiter)){
 | |
|       options.record_delimiter = [options.record_delimiter]
 | |
|     }
 | |
|     options.record_delimiter = options.record_delimiter.map( function(rd){
 | |
|       if(typeof rd === 'string'){
 | |
|         rd = Buffer.from(rd, options.encoding)
 | |
|       }
 | |
|       return rd
 | |
|     })
 | |
|     // Normalize option `relax`
 | |
|     if(typeof options.relax === 'boolean'){
 | |
|       // Great, nothing to do
 | |
|     }else if(options.relax === undefined || options.relax === null){
 | |
|       options.relax = false
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: relax must be a boolean, got ${JSON.stringify(options.relax)}`)
 | |
|     }
 | |
|     // Normalize option `relax_column_count`
 | |
|     if(typeof options.relax_column_count === 'boolean'){
 | |
|       // Great, nothing to do
 | |
|     }else if(options.relax_column_count === undefined || options.relax_column_count === null){
 | |
|       options.relax_column_count = false
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: relax_column_count must be a boolean, got ${JSON.stringify(options.relax_column_count)}`)
 | |
|     }
 | |
|     if(typeof options.relax_column_count_less === 'boolean'){
 | |
|       // Great, nothing to do
 | |
|     }else if(options.relax_column_count_less === undefined || options.relax_column_count_less === null){
 | |
|       options.relax_column_count_less = false
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: relax_column_count_less must be a boolean, got ${JSON.stringify(options.relax_column_count_less)}`)
 | |
|     }
 | |
|     if(typeof options.relax_column_count_more === 'boolean'){
 | |
|       // Great, nothing to do
 | |
|     }else if(options.relax_column_count_more === undefined || options.relax_column_count_more === null){
 | |
|       options.relax_column_count_more = false
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: relax_column_count_more must be a boolean, got ${JSON.stringify(options.relax_column_count_more)}`)
 | |
|     }
 | |
|     // Normalize option `skip_empty_lines`
 | |
|     if(typeof options.skip_empty_lines === 'boolean'){
 | |
|       // Great, nothing to do
 | |
|     }else if(options.skip_empty_lines === undefined || options.skip_empty_lines === null){
 | |
|       options.skip_empty_lines = false
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: skip_empty_lines must be a boolean, got ${JSON.stringify(options.skip_empty_lines)}`)
 | |
|     }
 | |
|     // Normalize option `skip_lines_with_empty_values`
 | |
|     if(typeof options.skip_lines_with_empty_values === 'boolean'){
 | |
|       // Great, nothing to do
 | |
|     }else if(options.skip_lines_with_empty_values === undefined || options.skip_lines_with_empty_values === null){
 | |
|       options.skip_lines_with_empty_values = false
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: skip_lines_with_empty_values must be a boolean, got ${JSON.stringify(options.skip_lines_with_empty_values)}`)
 | |
|     }
 | |
|     // Normalize option `skip_lines_with_error`
 | |
|     if(typeof options.skip_lines_with_error === 'boolean'){
 | |
|       // Great, nothing to do
 | |
|     }else if(options.skip_lines_with_error === undefined || options.skip_lines_with_error === null){
 | |
|       options.skip_lines_with_error = false
 | |
|     }else{
 | |
|       throw new Error(`Invalid Option: skip_lines_with_error must be a boolean, got ${JSON.stringify(options.skip_lines_with_error)}`)
 | |
|     }
 | |
|     // Normalize option `rtrim`
 | |
|     if(options.rtrim === undefined || options.rtrim === null || options.rtrim === false){
 | |
|       options.rtrim = false
 | |
|     }else if(options.rtrim !== true){
 | |
|       throw new Error(`Invalid Option: rtrim must be a boolean, got ${JSON.stringify(options.rtrim)}`)
 | |
|     }
 | |
|     // Normalize option `ltrim`
 | |
|     if(options.ltrim === undefined || options.ltrim === null || options.ltrim === false){
 | |
|       options.ltrim = false
 | |
|     }else if(options.ltrim !== true){
 | |
|       throw new Error(`Invalid Option: ltrim must be a boolean, got ${JSON.stringify(options.ltrim)}`)
 | |
|     }
 | |
|     // Normalize option `trim`
 | |
|     if(options.trim === undefined || options.trim === null || options.trim === false){
 | |
|       options.trim = false
 | |
|     }else if(options.trim !== true){
 | |
|       throw new Error(`Invalid Option: trim must be a boolean, got ${JSON.stringify(options.trim)}`)
 | |
|     }
 | |
|     // Normalize options `trim`, `ltrim` and `rtrim`
 | |
|     if(options.trim === true && opts.ltrim !== false){
 | |
|       options.ltrim = true
 | |
|     }else if(options.ltrim !== true){
 | |
|       options.ltrim = false
 | |
|     }
 | |
|     if(options.trim === true && opts.rtrim !== false){
 | |
|       options.rtrim = true
 | |
|     }else if(options.rtrim !== true){
 | |
|       options.rtrim = false
 | |
|     }
 | |
|     // Normalize option `to`
 | |
|     if(options.to === undefined || options.to === null){
 | |
|       options.to = -1
 | |
|     }else{
 | |
|       if(typeof options.to === 'string' && /\d+/.test(options.to)){
 | |
|         options.to = parseInt(options.to)
 | |
|       }
 | |
|       if(Number.isInteger(options.to)){
 | |
|         if(options.to <= 0){
 | |
|           throw new Error(`Invalid Option: to must be a positive integer greater than 0, got ${JSON.stringify(opts.to)}`)
 | |
|         }
 | |
|       }else{
 | |
|         throw new Error(`Invalid Option: to must be an integer, got ${JSON.stringify(opts.to)}`)
 | |
|       }
 | |
|     }
 | |
|     // Normalize option `to_line`
 | |
|     if(options.to_line === undefined || options.to_line === null){
 | |
|       options.to_line = -1
 | |
|     }else{
 | |
|       if(typeof options.to_line === 'string' && /\d+/.test(options.to_line)){
 | |
|         options.to_line = parseInt(options.to_line)
 | |
|       }
 | |
|       if(Number.isInteger(options.to_line)){
 | |
|         if(options.to_line <= 0){
 | |
|           throw new Error(`Invalid Option: to_line must be a positive integer greater than 0, got ${JSON.stringify(opts.to_line)}`)
 | |
|         }
 | |
|       }else{
 | |
|         throw new Error(`Invalid Option: to_line must be an integer, got ${JSON.stringify(opts.to_line)}`)
 | |
|       }
 | |
|     }
 | |
|     this.info = {
 | |
|       comment_lines: 0,
 | |
|       empty_lines: 0,
 | |
|       invalid_field_length: 0,
 | |
|       lines: 1,
 | |
|       records: 0
 | |
|     }
 | |
|     this.options = options
 | |
|     this.state = {
 | |
|       bomSkipped: false,
 | |
|       castField: fnCastField,
 | |
|       commenting: false,
 | |
|       // Current error encountered by a record
 | |
|       error: undefined,
 | |
|       enabled: options.from_line === 1,
 | |
|       escaping: false,
 | |
|       // escapeIsQuote: options.escape === options.quote,
 | |
|       escapeIsQuote: Buffer.isBuffer(options.escape) && Buffer.isBuffer(options.quote) && Buffer.compare(options.escape, options.quote) === 0,
 | |
|       // columns can be `false`, `true`, `Array`
 | |
|       expectedRecordLength: Array.isArray(options.columns) ? options.columns.length : undefined,
 | |
|       field: new ResizeableBuffer(20),
 | |
|       firstLineToHeaders: fnFirstLineToHeaders,
 | |
|       needMoreDataSize: Math.max(
 | |
|         // Skip if the remaining buffer smaller than comment
 | |
|         options.comment !== null ? options.comment.length : 0,
 | |
|         // Skip if the remaining buffer can be delimiter
 | |
|         ...options.delimiter.map( (delimiter) => delimiter.length),
 | |
|         // Skip if the remaining buffer can be escape sequence
 | |
|         options.quote !== null ? options.quote.length : 0,
 | |
|       ),
 | |
|       previousBuf: undefined,
 | |
|       quoting: false,
 | |
|       stop: false,
 | |
|       rawBuffer: new ResizeableBuffer(100),
 | |
|       record: [],
 | |
|       recordHasError: false,
 | |
|       record_length: 0,
 | |
|       recordDelimiterMaxLength: options.record_delimiter.length === 0 ? 2 : Math.max(...options.record_delimiter.map( (v) => v.length)),
 | |
|       trimChars: [Buffer.from(' ', options.encoding)[0], Buffer.from('\t', options.encoding)[0]],
 | |
|       wasQuoting: false,
 | |
|       wasRowDelimiter: false
 | |
|     }
 | |
|   }
 | |
|   // Implementation of `Transform._transform`
 | |
|   _transform(buf, encoding, callback){
 | |
|     if(this.state.stop === true){
 | |
|       return
 | |
|     }
 | |
|     const err = this.__parse(buf, false)
 | |
|     if(err !== undefined){
 | |
|       this.state.stop = true
 | |
|     }
 | |
|     callback(err)
 | |
|   }
 | |
|   // Implementation of `Transform._flush`
 | |
|   _flush(callback){
 | |
|     if(this.state.stop === true){
 | |
|       return
 | |
|     }
 | |
|     const err = this.__parse(undefined, true)
 | |
|     callback(err)
 | |
|   }
 | |
|   // Central parser implementation
 | |
|   __parse(nextBuf, end){
 | |
|     const {bom, comment, escape, from_line, ltrim, max_record_size, quote, raw, relax, rtrim, skip_empty_lines, to, to_line} = this.options
 | |
|     let {record_delimiter} = this.options
 | |
|     const {bomSkipped, previousBuf, rawBuffer, escapeIsQuote} = this.state
 | |
|     let buf
 | |
|     if(previousBuf === undefined){
 | |
|       if(nextBuf === undefined){
 | |
|         // Handle empty string
 | |
|         this.push(null)
 | |
|         return
 | |
|       }else{
 | |
|         buf = nextBuf
 | |
|       }
 | |
|     }else if(previousBuf !== undefined && nextBuf === undefined){
 | |
|       buf = previousBuf
 | |
|     }else{
 | |
|       buf = Buffer.concat([previousBuf, nextBuf])
 | |
|     }
 | |
|     // Handle UTF BOM
 | |
|     if(bomSkipped === false){
 | |
|       if(bom === false){
 | |
|         this.state.bomSkipped = true
 | |
|       }else if(buf.length < 3){
 | |
|         // No enough data
 | |
|         if(end === false){
 | |
|           // Wait for more data
 | |
|           this.state.previousBuf = buf
 | |
|           return
 | |
|         }
 | |
|       }else{
 | |
|         for(let encoding in boms){
 | |
|           if(boms[encoding].compare(buf, 0, boms[encoding].length) === 0){
 | |
|             // Skip BOM
 | |
|             buf = buf.slice(boms[encoding].length)
 | |
|             // Renormalize original options with the new encoding
 | |
|             this.__normalizeOptions({...this.__originalOptions, encoding: encoding})
 | |
|             break
 | |
|           }
 | |
|         }
 | |
|         this.state.bomSkipped = true
 | |
|       }
 | |
|     }
 | |
|     const bufLen = buf.length
 | |
|     let pos
 | |
|     for(pos = 0; pos < bufLen; pos++){
 | |
|       // Ensure we get enough space to look ahead
 | |
|       // There should be a way to move this out of the loop
 | |
|       if(this.__needMoreData(pos, bufLen, end)){
 | |
|         break
 | |
|       }
 | |
|       if(this.state.wasRowDelimiter === true){
 | |
|         this.info.lines++
 | |
|         this.state.wasRowDelimiter = false
 | |
|       }
 | |
|       if(to_line !== -1 && this.info.lines > to_line){
 | |
|         this.state.stop = true
 | |
|         this.push(null)
 | |
|         return
 | |
|       }
 | |
|       // Auto discovery of record_delimiter, unix, mac and windows supported
 | |
|       if(this.state.quoting === false && record_delimiter.length === 0){
 | |
|         const record_delimiterCount = this.__autoDiscoverRecordDelimiter(buf, pos)
 | |
|         if(record_delimiterCount){
 | |
|           record_delimiter = this.options.record_delimiter
 | |
|         }
 | |
|       }
 | |
|       const chr = buf[pos]
 | |
|       if(raw === true){
 | |
|         rawBuffer.append(chr)
 | |
|       }
 | |
|       if((chr === cr || chr === nl) && this.state.wasRowDelimiter === false ){
 | |
|         this.state.wasRowDelimiter = true
 | |
|       }
 | |
|       // Previous char was a valid escape char
 | |
|       // treat the current char as a regular char
 | |
|       if(this.state.escaping === true){
 | |
|         this.state.escaping = false
 | |
|       }else{
 | |
|         // Escape is only active inside quoted fields
 | |
|         // We are quoting, the char is an escape chr and there is a chr to escape
 | |
|         // if(escape !== null && this.state.quoting === true && chr === escape && pos + 1 < bufLen){
 | |
|         if(escape !== null && this.state.quoting === true && this.__isEscape(buf, pos, chr) && pos + escape.length < bufLen){
 | |
|           if(escapeIsQuote){
 | |
|             if(this.__isQuote(buf, pos+escape.length)){
 | |
|               this.state.escaping = true
 | |
|               pos += escape.length - 1
 | |
|               continue
 | |
|             }
 | |
|           }else{
 | |
|             this.state.escaping = true
 | |
|             pos += escape.length - 1
 | |
|             continue
 | |
|           }
 | |
|         }
 | |
|         // Not currently escaping and chr is a quote
 | |
|         // TODO: need to compare bytes instead of single char
 | |
|         if(this.state.commenting === false && this.__isQuote(buf, pos)){
 | |
|           if(this.state.quoting === true){
 | |
|             const nextChr = buf[pos+quote.length]
 | |
|             const isNextChrTrimable = rtrim && this.__isCharTrimable(nextChr)
 | |
|             const isNextChrComment = comment !== null && this.__compareBytes(comment, buf, pos+quote.length, nextChr)
 | |
|             const isNextChrDelimiter = this.__isDelimiter(buf, pos+quote.length, nextChr)
 | |
|             const isNextChrRecordDelimiter = record_delimiter.length === 0 ? this.__autoDiscoverRecordDelimiter(buf, pos+quote.length) : this.__isRecordDelimiter(nextChr, buf, pos+quote.length)
 | |
|             // Escape a quote
 | |
|             // Treat next char as a regular character
 | |
|             if(escape !== null && this.__isEscape(buf, pos, chr) && this.__isQuote(buf, pos + escape.length)){
 | |
|               pos += escape.length - 1
 | |
|             }else if(!nextChr || isNextChrDelimiter || isNextChrRecordDelimiter || isNextChrComment || isNextChrTrimable){
 | |
|               this.state.quoting = false
 | |
|               this.state.wasQuoting = true
 | |
|               pos += quote.length - 1
 | |
|               continue
 | |
|             }else if(relax === false){
 | |
|               const err = this.__error(
 | |
|                 new CsvError('CSV_INVALID_CLOSING_QUOTE', [
 | |
|                   'Invalid Closing Quote:',
 | |
|                   `got "${String.fromCharCode(nextChr)}"`,
 | |
|                   `at line ${this.info.lines}`,
 | |
|                   'instead of delimiter, record delimiter, trimable character',
 | |
|                   '(if activated) or comment',
 | |
|                 ], this.options, this.__infoField())
 | |
|               )
 | |
|               if(err !== undefined) return err
 | |
|             }else{
 | |
|               this.state.quoting = false
 | |
|               this.state.wasQuoting = true
 | |
|               this.state.field.prepend(quote)
 | |
|               pos += quote.length - 1
 | |
|             }
 | |
|           }else{
 | |
|             if(this.state.field.length !== 0){
 | |
|               // In relax mode, treat opening quote preceded by chrs as regular
 | |
|               if( relax === false ){
 | |
|                 const err = this.__error(
 | |
|                   new CsvError('INVALID_OPENING_QUOTE', [
 | |
|                     'Invalid Opening Quote:',
 | |
|                     `a quote is found inside a field at line ${this.info.lines}`,
 | |
|                   ], this.options, this.__infoField(), {
 | |
|                     field: this.state.field,
 | |
|                   })
 | |
|                 )
 | |
|                 if(err !== undefined) return err
 | |
|               }
 | |
|             }else{
 | |
|               this.state.quoting = true
 | |
|               pos += quote.length - 1
 | |
|               continue
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|         if(this.state.quoting === false){
 | |
|           let recordDelimiterLength = this.__isRecordDelimiter(chr, buf, pos)
 | |
|           if(recordDelimiterLength !== 0){
 | |
|             // Do not emit comments which take a full line
 | |
|             const skipCommentLine = this.state.commenting && (this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0)
 | |
|             if(skipCommentLine){
 | |
|               this.info.comment_lines++
 | |
|               // Skip full comment line
 | |
|             }else{
 | |
|               // Activate records emition if above from_line
 | |
|               if(this.state.enabled === false && this.info.lines + (this.state.wasRowDelimiter === true ? 1: 0) >= from_line){
 | |
|                 this.state.enabled = true
 | |
|                 this.__resetField()
 | |
|                 this.__resetRecord()
 | |
|                 pos += recordDelimiterLength - 1
 | |
|                 continue
 | |
|               }
 | |
|               // Skip if line is empty and skip_empty_lines activated
 | |
|               if(skip_empty_lines === true && this.state.wasQuoting === false && this.state.record.length === 0 && this.state.field.length === 0){
 | |
|                 this.info.empty_lines++
 | |
|                 pos += recordDelimiterLength - 1
 | |
|                 continue
 | |
|               }
 | |
|               const errField = this.__onField()
 | |
|               if(errField !== undefined) return errField
 | |
|               const errRecord = this.__onRecord()
 | |
|               if(errRecord !== undefined) return errRecord
 | |
|               if(to !== -1 && this.info.records >= to){
 | |
|                 this.state.stop = true
 | |
|                 this.push(null)
 | |
|                 return
 | |
|               }
 | |
|             }
 | |
|             this.state.commenting = false
 | |
|             pos += recordDelimiterLength - 1
 | |
|             continue
 | |
|           }
 | |
|           if(this.state.commenting){
 | |
|             continue
 | |
|           }
 | |
|           const commentCount = comment === null ? 0 : this.__compareBytes(comment, buf, pos, chr)
 | |
|           if(commentCount !== 0){
 | |
|             this.state.commenting = true
 | |
|             continue
 | |
|           }
 | |
|           let delimiterLength = this.__isDelimiter(buf, pos, chr)
 | |
|           if(delimiterLength !== 0){
 | |
|             const errField = this.__onField()
 | |
|             if(errField !== undefined) return errField
 | |
|             pos += delimiterLength - 1
 | |
|             continue
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|       if(this.state.commenting === false){
 | |
|         if(max_record_size !== 0 && this.state.record_length + this.state.field.length > max_record_size){
 | |
|           const err = this.__error(
 | |
|             new CsvError('CSV_MAX_RECORD_SIZE', [
 | |
|               'Max Record Size:',
 | |
|               'record exceed the maximum number of tolerated bytes',
 | |
|               `of ${max_record_size}`,
 | |
|               `at line ${this.info.lines}`,
 | |
|             ], this.options, this.__infoField())
 | |
|           )
 | |
|           if(err !== undefined) return err
 | |
|         }
 | |
|       }
 | |
|       const lappend = ltrim === false || this.state.quoting === true || this.state.field.length !== 0 || !this.__isCharTrimable(chr)
 | |
|       // rtrim in non quoting is handle in __onField
 | |
|       const rappend = rtrim === false || this.state.wasQuoting === false
 | |
|       if( lappend === true && rappend === true ){
 | |
|         this.state.field.append(chr)
 | |
|       }else if(rtrim === true && !this.__isCharTrimable(chr)){
 | |
|         const err = this.__error(
 | |
|           new CsvError('CSV_NON_TRIMABLE_CHAR_AFTER_CLOSING_QUOTE', [
 | |
|             'Invalid Closing Quote:',
 | |
|             'found non trimable byte after quote',
 | |
|             `at line ${this.info.lines}`,
 | |
|           ], this.options, this.__infoField())
 | |
|         )
 | |
|         if(err !== undefined) return err
 | |
|       }
 | |
|     }
 | |
|     if(end === true){
 | |
|       // Ensure we are not ending in a quoting state
 | |
|       if(this.state.quoting === true){
 | |
|         const err = this.__error(
 | |
|           new CsvError('CSV_QUOTE_NOT_CLOSED', [
 | |
|             'Quote Not Closed:',
 | |
|             `the parsing is finished with an opening quote at line ${this.info.lines}`,
 | |
|           ], this.options, this.__infoField())
 | |
|         )
 | |
|         if(err !== undefined) return err
 | |
|       }else{
 | |
|         // Skip last line if it has no characters
 | |
|         if(this.state.wasQuoting === true || this.state.record.length !== 0 || this.state.field.length !== 0){
 | |
|           const errField = this.__onField()
 | |
|           if(errField !== undefined) return errField
 | |
|           const errRecord = this.__onRecord()
 | |
|           if(errRecord !== undefined) return errRecord
 | |
|         }else if(this.state.wasRowDelimiter === true){
 | |
|           this.info.empty_lines++
 | |
|         }else if(this.state.commenting === true){
 | |
|           this.info.comment_lines++
 | |
|         }
 | |
|       }
 | |
|     }else{
 | |
|       this.state.previousBuf = buf.slice(pos)
 | |
|     }
 | |
|     if(this.state.wasRowDelimiter === true){
 | |
|       this.info.lines++
 | |
|       this.state.wasRowDelimiter = false
 | |
|     }
 | |
|   }
 | |
|   __onRecord(){
 | |
|     const {columns, columns_duplicates_to_array, encoding, info, from, relax_column_count, relax_column_count_less, relax_column_count_more, raw, skip_lines_with_empty_values} = this.options
 | |
|     const {enabled, record} = this.state
 | |
|     if(enabled === false){
 | |
|       return this.__resetRecord()
 | |
|     }
 | |
|     // Convert the first line into column names
 | |
|     const recordLength = record.length
 | |
|     if(columns === true){
 | |
|       if(skip_lines_with_empty_values === true && isRecordEmpty(record)){
 | |
|         this.__resetRecord()
 | |
|         return
 | |
|       }
 | |
|       return this.__firstLineToColumns(record)
 | |
|     }
 | |
|     if(columns === false && this.info.records === 0){
 | |
|       this.state.expectedRecordLength = recordLength
 | |
|     }
 | |
|     if(recordLength !== this.state.expectedRecordLength){
 | |
|       const err = columns === false ?
 | |
|         // Todo: rename CSV_INCONSISTENT_RECORD_LENGTH to
 | |
|         // CSV_RECORD_INCONSISTENT_FIELDS_LENGTH
 | |
|         new CsvError('CSV_INCONSISTENT_RECORD_LENGTH', [
 | |
|           'Invalid Record Length:',
 | |
|           `expect ${this.state.expectedRecordLength},`,
 | |
|           `got ${recordLength} on line ${this.info.lines}`,
 | |
|         ], this.options, this.__infoField(), {
 | |
|           record: record,
 | |
|         })
 | |
|       :
 | |
|         // Todo: rename CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH to
 | |
|         // CSV_RECORD_INCONSISTENT_COLUMNS
 | |
|         new CsvError('CSV_RECORD_DONT_MATCH_COLUMNS_LENGTH', [
 | |
|           'Invalid Record Length:',
 | |
|           `columns length is ${columns.length},`, // rename columns
 | |
|           `got ${recordLength} on line ${this.info.lines}`,
 | |
|         ], this.options, this.__infoField(), {
 | |
|           record: record,
 | |
|         })
 | |
|       if(relax_column_count === true ||
 | |
|         (relax_column_count_less === true && recordLength < this.state.expectedRecordLength) ||
 | |
|         (relax_column_count_more === true && recordLength > this.state.expectedRecordLength) ){
 | |
|         this.info.invalid_field_length++
 | |
|         this.state.error = err
 | |
|       // Error is undefined with skip_lines_with_error
 | |
|       }else{
 | |
|         const finalErr = this.__error(err)
 | |
|         if(finalErr) return finalErr
 | |
|       }
 | |
|     }
 | |
|     if(skip_lines_with_empty_values === true && isRecordEmpty(record)){
 | |
|       this.__resetRecord()
 | |
|       return
 | |
|     }
 | |
|     if(this.state.recordHasError === true){
 | |
|       this.__resetRecord()
 | |
|       this.state.recordHasError = false
 | |
|       return
 | |
|     }
 | |
|     this.info.records++
 | |
|     if(from === 1 || this.info.records >= from){
 | |
|       // With columns, records are object
 | |
|       if(columns !== false){
 | |
|         const obj = {}
 | |
|         // Transform record array to an object
 | |
|         for(let i = 0, l = record.length; i < l; i++){
 | |
|           if(columns[i] === undefined || columns[i].disabled) continue
 | |
|           // Turn duplicate columns into an array
 | |
|           if (columns_duplicates_to_array === true && obj[columns[i].name] !== undefined) {
 | |
|             if (Array.isArray(obj[columns[i].name])) {
 | |
|               obj[columns[i].name] = obj[columns[i].name].concat(record[i])
 | |
|             } else {
 | |
|               obj[columns[i].name] = [obj[columns[i].name], record[i]]
 | |
|             }
 | |
|           } else {
 | |
|             obj[columns[i].name] = record[i]
 | |
|           }
 | |
|         }
 | |
|         const {objname} = this.options
 | |
|         // Without objname (default)
 | |
|         if(objname === undefined){
 | |
|           if(raw === true || info === true){
 | |
|             const err = this.__push(Object.assign(
 | |
|               {record: obj},
 | |
|               (raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {}),
 | |
|               (info === true ? {info: this.__infoRecord()}: {})
 | |
|             ))
 | |
|             if(err){
 | |
|               return err
 | |
|             }
 | |
|           }else{
 | |
|             const err = this.__push(obj)
 | |
|             if(err){
 | |
|               return err
 | |
|             }
 | |
|           }
 | |
|         // With objname (default)
 | |
|         }else{
 | |
|           if(raw === true || info === true){
 | |
|             const err = this.__push(Object.assign(
 | |
|               {record: [obj[objname], obj]},
 | |
|               raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {},
 | |
|               info === true ? {info: this.__infoRecord()}: {}
 | |
|             ))
 | |
|             if(err){
 | |
|               return err
 | |
|             }
 | |
|           }else{
 | |
|             const err = this.__push([obj[objname], obj])
 | |
|             if(err){
 | |
|               return err
 | |
|             }
 | |
|           }
 | |
|         }
 | |
|       // Without columns, records are array
 | |
|       }else{
 | |
|         if(raw === true || info === true){
 | |
|           const err = this.__push(Object.assign(
 | |
|             {record: record},
 | |
|             raw === true ? {raw: this.state.rawBuffer.toString(encoding)}: {},
 | |
|             info === true ? {info: this.__infoRecord()}: {}
 | |
|           ))
 | |
|           if(err){
 | |
|             return err
 | |
|           }
 | |
|         }else{
 | |
|           const err = this.__push(record)
 | |
|           if(err){
 | |
|             return err
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     this.__resetRecord()
 | |
|   }
 | |
|   __firstLineToColumns(record){
 | |
|     const {firstLineToHeaders} = this.state
 | |
|     try{
 | |
|       const headers = firstLineToHeaders === undefined ? record : firstLineToHeaders.call(null, record)
 | |
|       if(!Array.isArray(headers)){
 | |
|         return this.__error(
 | |
|           new CsvError('CSV_INVALID_COLUMN_MAPPING', [
 | |
|             'Invalid Column Mapping:',
 | |
|             'expect an array from column function,',
 | |
|             `got ${JSON.stringify(headers)}`
 | |
|           ], this.options, this.__infoField(), {
 | |
|             headers: headers,
 | |
|           })
 | |
|         )
 | |
|       }
 | |
|       const normalizedHeaders = normalizeColumnsArray(headers)
 | |
|       this.state.expectedRecordLength = normalizedHeaders.length
 | |
|       this.options.columns = normalizedHeaders
 | |
|       this.__resetRecord()
 | |
|       return
 | |
|     }catch(err){
 | |
|       return err
 | |
|     }
 | |
|   }
 | |
|   __resetRecord(){
 | |
|     if(this.options.raw === true){
 | |
|       this.state.rawBuffer.reset()
 | |
|     }
 | |
|     this.state.error = undefined
 | |
|     this.state.record = []
 | |
|     this.state.record_length = 0
 | |
|   }
 | |
|   __onField(){
 | |
|     const {cast, encoding, rtrim, max_record_size} = this.options
 | |
|     const {enabled, wasQuoting} = this.state
 | |
|     // Short circuit for the from_line options
 | |
|     if(enabled === false){
 | |
|       return this.__resetField()
 | |
|     }
 | |
|     let field = this.state.field.toString(encoding)
 | |
|     if(rtrim === true && wasQuoting === false){
 | |
|       field = field.trimRight()
 | |
|     }
 | |
|     if(cast === true){
 | |
|       const [err, f] = this.__cast(field)
 | |
|       if(err !== undefined) return err
 | |
|       field = f
 | |
|     }
 | |
|     this.state.record.push(field)
 | |
|     // Increment record length if record size must not exceed a limit
 | |
|     if(max_record_size !== 0 && typeof field === 'string'){
 | |
|       this.state.record_length += field.length
 | |
|     }
 | |
|     this.__resetField()
 | |
|   }
 | |
|   __resetField(){
 | |
|     this.state.field.reset()
 | |
|     this.state.wasQuoting = false
 | |
|   }
 | |
|   __push(record){
 | |
|     const {on_record} = this.options
 | |
|     if(on_record !== undefined){
 | |
|       const info = this.__infoRecord()
 | |
|       try{
 | |
|         record = on_record.call(null, record, info)
 | |
|       }catch(err){
 | |
|         return err
 | |
|       }
 | |
|       if(record === undefined || record === null){ return }
 | |
|     }
 | |
|     this.push(record)
 | |
|   }
 | |
|   // Return a tuple with the error and the casted value
 | |
|   __cast(field){
 | |
|     const {columns, relax_column_count} = this.options
 | |
|     const isColumns = Array.isArray(columns)
 | |
|     // Dont loose time calling cast
 | |
|     // because the final record is an object
 | |
|     // and this field can't be associated to a key present in columns
 | |
|     if( isColumns === true && relax_column_count && this.options.columns.length <= this.state.record.length ){
 | |
|       return [undefined, undefined]
 | |
|     }
 | |
|     if(this.state.castField !== null){
 | |
|       try{
 | |
|         const info = this.__infoField()
 | |
|         return [undefined, this.state.castField.call(null, field, info)]
 | |
|       }catch(err){
 | |
|         return [err]
 | |
|       }
 | |
|     }
 | |
|     if(this.__isFloat(field)){
 | |
|       return [undefined, parseFloat(field)]
 | |
|     }else if(this.options.cast_date !== false){
 | |
|       const info = this.__infoField()
 | |
|       return [undefined, this.options.cast_date.call(null, field, info)]
 | |
|     }
 | |
|     return [undefined, field]
 | |
|   }
 | |
|   // Helper to test if a character is a space or a line delimiter
 | |
|   __isCharTrimable(chr){
 | |
|     return chr === space || chr === tab || chr === cr || chr === nl || chr === np
 | |
|   }
 | |
|   // Keep it in case we implement the `cast_int` option
 | |
|   // __isInt(value){
 | |
|   //   // return Number.isInteger(parseInt(value))
 | |
|   //   // return !isNaN( parseInt( obj ) );
 | |
|   //   return /^(\-|\+)?[1-9][0-9]*$/.test(value)
 | |
|   // }
 | |
|   __isFloat(value){
 | |
|     return (value - parseFloat( value ) + 1) >= 0 // Borrowed from jquery
 | |
|   }
 | |
|   __compareBytes(sourceBuf, targetBuf, targetPos, firstByte){
 | |
|     if(sourceBuf[0] !== firstByte) return 0
 | |
|     const sourceLength = sourceBuf.length
 | |
|     for(let i = 1; i < sourceLength; i++){
 | |
|       if(sourceBuf[i] !== targetBuf[targetPos+i]) return 0
 | |
|     }
 | |
|     return sourceLength
 | |
|   }
 | |
|   __needMoreData(i, bufLen, end){
 | |
|     if(end) return false
 | |
|     const {quote} = this.options
 | |
|     const {quoting, needMoreDataSize, recordDelimiterMaxLength} = this.state
 | |
|     const numOfCharLeft = bufLen - i - 1
 | |
|     const requiredLength = Math.max(
 | |
|       needMoreDataSize,
 | |
|       // Skip if the remaining buffer smaller than record delimiter
 | |
|       recordDelimiterMaxLength,
 | |
|       // Skip if the remaining buffer can be record delimiter following the closing quote
 | |
|       // 1 is for quote.length
 | |
|       quoting ? (quote.length + recordDelimiterMaxLength) : 0,
 | |
|     )
 | |
|     return numOfCharLeft < requiredLength
 | |
|   }
 | |
|   __isDelimiter(buf, pos, chr){
 | |
|     const {delimiter, ignore_last_delimiters} = this.options
 | |
|     if(ignore_last_delimiters === true && this.state.record.length === this.options.columns.length - 1){
 | |
|       return 0
 | |
|     }else if(ignore_last_delimiters !== false && typeof ignore_last_delimiters === 'number' && this.state.record.length === ignore_last_delimiters - 1){
 | |
|       return 0
 | |
|     }
 | |
|     loop1: for(let i = 0; i < delimiter.length; i++){
 | |
|       const del = delimiter[i]
 | |
|       if(del[0] === chr){
 | |
|         for(let j = 1; j < del.length; j++){
 | |
|           if(del[j] !== buf[pos+j]) continue loop1
 | |
|         }
 | |
|         return del.length
 | |
|       }
 | |
|     }
 | |
|     return 0
 | |
|   }
 | |
|   __isRecordDelimiter(chr, buf, pos){
 | |
|     const {record_delimiter} = this.options
 | |
|     const recordDelimiterLength = record_delimiter.length
 | |
|     loop1: for(let i = 0; i < recordDelimiterLength; i++){
 | |
|       const rd = record_delimiter[i]
 | |
|       const rdLength = rd.length
 | |
|       if(rd[0] !== chr){
 | |
|         continue
 | |
|       }
 | |
|       for(let j = 1; j < rdLength; j++){
 | |
|         if(rd[j] !== buf[pos+j]){
 | |
|           continue loop1
 | |
|         }
 | |
|       }
 | |
|       return rd.length
 | |
|     }
 | |
|     return 0
 | |
|   }
 | |
|   __isEscape(buf, pos, chr){
 | |
|     const {escape} = this.options
 | |
|     if(escape === null) return false
 | |
|     const l = escape.length
 | |
|     if(escape[0] === chr){
 | |
|       for(let i = 0; i < l; i++){
 | |
|         if(escape[i] !== buf[pos+i]){
 | |
|           return false
 | |
|         }
 | |
|       }
 | |
|       return true
 | |
|     }
 | |
|     return false
 | |
|   }
 | |
|   __isQuote(buf, pos){
 | |
|     const {quote} = this.options
 | |
|     if(quote === null) return false
 | |
|     const l = quote.length
 | |
|     for(let i = 0; i < l; i++){
 | |
|       if(quote[i] !== buf[pos+i]){
 | |
|         return false
 | |
|       }
 | |
|     }
 | |
|     return true
 | |
|   }
 | |
|   __autoDiscoverRecordDelimiter(buf, pos){
 | |
|     const {encoding} = this.options
 | |
|     const chr = buf[pos]
 | |
|     if(chr === cr){
 | |
|       if(buf[pos+1] === nl){
 | |
|         this.options.record_delimiter.push(Buffer.from('\r\n', encoding))
 | |
|         this.state.recordDelimiterMaxLength = 2
 | |
|         return 2
 | |
|       }else{
 | |
|         this.options.record_delimiter.push(Buffer.from('\r', encoding))
 | |
|         this.state.recordDelimiterMaxLength = 1
 | |
|         return 1
 | |
|       }
 | |
|     }else if(chr === nl){
 | |
|       this.options.record_delimiter.push(Buffer.from('\n', encoding))
 | |
|       this.state.recordDelimiterMaxLength = 1
 | |
|       return 1
 | |
|     }
 | |
|     return 0
 | |
|   }
 | |
|   __error(msg){
 | |
|     const {skip_lines_with_error} = this.options
 | |
|     const err = typeof msg === 'string' ? new Error(msg) : msg
 | |
|     if(skip_lines_with_error){
 | |
|       this.state.recordHasError = true
 | |
|       this.emit('skip', err)
 | |
|       return undefined
 | |
|     }else{
 | |
|       return err
 | |
|     }
 | |
|   }
 | |
|   __infoDataSet(){
 | |
|     return {
 | |
|       ...this.info,
 | |
|       columns: this.options.columns
 | |
|     }
 | |
|   }
 | |
|   __infoRecord(){
 | |
|     const {columns} = this.options
 | |
|     return {
 | |
|       ...this.__infoDataSet(),
 | |
|       error: this.state.error,
 | |
|       header: columns === true,
 | |
|       index: this.state.record.length,
 | |
|     }
 | |
|   }
 | |
|   __infoField(){
 | |
|     const {columns} = this.options
 | |
|     const isColumns = Array.isArray(columns)
 | |
|     return {
 | |
|       ...this.__infoRecord(),
 | |
|       column: isColumns === true ?
 | |
|         ( columns.length > this.state.record.length ?
 | |
|           columns[this.state.record.length].name :
 | |
|           null
 | |
|         ) :
 | |
|         this.state.record.length,
 | |
|       quoting: this.state.wasQuoting,
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| const parse = function(){
 | |
|   let data, options, callback
 | |
|   for(let i in arguments){
 | |
|     const argument = arguments[i]
 | |
|     const type = typeof argument
 | |
|     if(data === undefined && (typeof argument === 'string' || Buffer.isBuffer(argument))){
 | |
|       data = argument
 | |
|     }else if(options === undefined && isObject(argument)){
 | |
|       options = argument
 | |
|     }else if(callback === undefined && type === 'function'){
 | |
|       callback = argument
 | |
|     }else{
 | |
|       throw new CsvError('CSV_INVALID_ARGUMENT', [
 | |
|         'Invalid argument:',
 | |
|         `got ${JSON.stringify(argument)} at index ${i}`
 | |
|       ], this.options)
 | |
|     }
 | |
|   }
 | |
|   const parser = new Parser(options)
 | |
|   if(callback){
 | |
|     const records = options === undefined || options.objname === undefined ? [] : {}
 | |
|     parser.on('readable', function(){
 | |
|       let record
 | |
|       while((record = this.read()) !== null){
 | |
|         if(options === undefined || options.objname === undefined){
 | |
|           records.push(record)
 | |
|         }else{
 | |
|           records[record[0]] = record[1]
 | |
|         }
 | |
|       }
 | |
|     })
 | |
|     parser.on('error', function(err){
 | |
|       callback(err, undefined, parser.__infoDataSet())
 | |
|     })
 | |
|     parser.on('end', function(){
 | |
|       callback(undefined, records, parser.__infoDataSet())
 | |
|     })
 | |
|   }
 | |
|   if(data !== undefined){
 | |
|     // Give a chance for events to be registered later
 | |
|     if(typeof setImmediate === 'function'){
 | |
|       setImmediate(function(){
 | |
|         parser.write(data)
 | |
|         parser.end()
 | |
|       })
 | |
|     }else{
 | |
|       parser.write(data)
 | |
|       parser.end()
 | |
|     }
 | |
|   }
 | |
|   return parser
 | |
| }
 | |
| 
 | |
| class CsvError extends Error {
 | |
|   constructor(code, message, options, ...contexts) {
 | |
|     if(Array.isArray(message)) message = message.join(' ')
 | |
|     super(message)
 | |
|     if(Error.captureStackTrace !== undefined){
 | |
|       Error.captureStackTrace(this, CsvError)
 | |
|     }
 | |
|     this.code = code
 | |
|     for(const context of contexts){
 | |
|       for(const key in context){
 | |
|         const value = context[key]
 | |
|         this[key] = Buffer.isBuffer(value) ? value.toString(options.encoding) : value == null ? value : JSON.parse(JSON.stringify(value))
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| parse.Parser = Parser
 | |
| 
 | |
| parse.CsvError = CsvError
 | |
| 
 | |
| module.exports = parse
 | |
| 
 | |
| const underscore = function(str){
 | |
|   return str.replace(/([A-Z])/g, function(_, match){
 | |
|     return '_' + match.toLowerCase()
 | |
|   })
 | |
| }
 | |
| 
 | |
| const isObject = function(obj){
 | |
|   return (typeof obj === 'object' && obj !== null && !Array.isArray(obj))
 | |
| }
 | |
| 
 | |
| const isRecordEmpty = function(record){
 | |
|   return record.every( (field) => field == null || field.toString && field.toString().trim() === '' )
 | |
| }
 | |
| 
 | |
| const normalizeColumnsArray = function(columns){
 | |
|   const normalizedColumns = [];
 | |
|   for(let i = 0, l = columns.length; i < l; i++){
 | |
|     const column = columns[i]
 | |
|     if(column === undefined || column === null || column === false){
 | |
|       normalizedColumns[i] = { disabled: true }
 | |
|     }else if(typeof column === 'string'){
 | |
|       normalizedColumns[i] = { name: column }
 | |
|     }else if(isObject(column)){
 | |
|       if(typeof column.name !== 'string'){
 | |
|         throw new CsvError('CSV_OPTION_COLUMNS_MISSING_NAME', [
 | |
|           'Option columns missing name:',
 | |
|           `property "name" is required at position ${i}`,
 | |
|           'when column is an object literal'
 | |
|         ])
 | |
|       }
 | |
|       normalizedColumns[i] = column
 | |
|     }else{
 | |
|       throw new CsvError('CSV_INVALID_COLUMN_DEFINITION', [
 | |
|         'Invalid column definition:',
 | |
|         'expect a string or a literal object,',
 | |
|         `got ${JSON.stringify(column)} at position ${i}`
 | |
|       ])
 | |
|     }
 | |
|   }
 | |
|   return normalizedColumns;
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8750:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| 
 | |
| const parse = __webpack_require__(2830)
 | |
| 
 | |
| module.exports = function(data, options={}){
 | |
|   if(typeof data === 'string'){
 | |
|     data = Buffer.from(data)
 | |
|   }
 | |
|   const records = options && options.objname ? {} : []
 | |
|   const parser = new parse.Parser(options)
 | |
|   parser.push = function(record){
 | |
|     if(record === null){
 | |
|       return
 | |
|     }
 | |
|     if(options.objname === undefined)
 | |
|       records.push(record)
 | |
|     else{
 | |
|       records[record[0]] = record[1]
 | |
|     }
 | |
|   }
 | |
|   const err1 = parser.__parse(data, false)
 | |
|   if(err1 !== undefined) throw err1
 | |
|   const err2 = parser.__parse(undefined, true)
 | |
|   if(err2 !== undefined) throw err2
 | |
|   return records
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8932:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| class Deprecation extends Error {
 | |
|   constructor(message) {
 | |
|     super(message); // Maintains proper stack trace (only available on V8)
 | |
| 
 | |
|     /* istanbul ignore next */
 | |
| 
 | |
|     if (Error.captureStackTrace) {
 | |
|       Error.captureStackTrace(this, this.constructor);
 | |
|     }
 | |
| 
 | |
|     this.name = 'Deprecation';
 | |
|   }
 | |
| 
 | |
| }
 | |
| 
 | |
| exports.Deprecation = Deprecation;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6956:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _handlebarsRuntime = __webpack_require__(7390);
 | |
| 
 | |
| var _handlebarsRuntime2 = _interopRequireDefault(_handlebarsRuntime);
 | |
| 
 | |
| // Compiler imports
 | |
| 
 | |
| var _handlebarsCompilerAst = __webpack_require__(9211);
 | |
| 
 | |
| var _handlebarsCompilerAst2 = _interopRequireDefault(_handlebarsCompilerAst);
 | |
| 
 | |
| var _handlebarsCompilerBase = __webpack_require__(1475);
 | |
| 
 | |
| var _handlebarsCompilerCompiler = __webpack_require__(9081);
 | |
| 
 | |
| var _handlebarsCompilerJavascriptCompiler = __webpack_require__(1617);
 | |
| 
 | |
| var _handlebarsCompilerJavascriptCompiler2 = _interopRequireDefault(_handlebarsCompilerJavascriptCompiler);
 | |
| 
 | |
| var _handlebarsCompilerVisitor = __webpack_require__(4166);
 | |
| 
 | |
| var _handlebarsCompilerVisitor2 = _interopRequireDefault(_handlebarsCompilerVisitor);
 | |
| 
 | |
| var _handlebarsNoConflict = __webpack_require__(1983);
 | |
| 
 | |
| var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
 | |
| 
 | |
| var _create = _handlebarsRuntime2['default'].create;
 | |
| function create() {
 | |
|   var hb = _create();
 | |
| 
 | |
|   hb.compile = function (input, options) {
 | |
|     return _handlebarsCompilerCompiler.compile(input, options, hb);
 | |
|   };
 | |
|   hb.precompile = function (input, options) {
 | |
|     return _handlebarsCompilerCompiler.precompile(input, options, hb);
 | |
|   };
 | |
| 
 | |
|   hb.AST = _handlebarsCompilerAst2['default'];
 | |
|   hb.Compiler = _handlebarsCompilerCompiler.Compiler;
 | |
|   hb.JavaScriptCompiler = _handlebarsCompilerJavascriptCompiler2['default'];
 | |
|   hb.Parser = _handlebarsCompilerBase.parser;
 | |
|   hb.parse = _handlebarsCompilerBase.parse;
 | |
|   hb.parseWithoutProcessing = _handlebarsCompilerBase.parseWithoutProcessing;
 | |
| 
 | |
|   return hb;
 | |
| }
 | |
| 
 | |
| var inst = create();
 | |
| inst.create = create;
 | |
| 
 | |
| _handlebarsNoConflict2['default'](inst);
 | |
| 
 | |
| inst.Visitor = _handlebarsCompilerVisitor2['default'];
 | |
| 
 | |
| inst['default'] = inst;
 | |
| 
 | |
| exports.default = inst;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7aUNBQW9CLHNCQUFzQjs7Ozs7O3FDQUcxQiwyQkFBMkI7Ozs7c0NBS3BDLDRCQUE0Qjs7MENBQ1csZ0NBQWdDOztvREFDL0MsMkNBQTJDOzs7O3lDQUN0RCwrQkFBK0I7Ozs7b0NBRTVCLDBCQUEwQjs7OztBQUVqRCxJQUFJLE9BQU8sR0FBRywrQkFBUSxNQUFNLENBQUM7QUFDN0IsU0FBUyxNQUFNLEdBQUc7QUFDaEIsTUFBSSxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUM7O0FBRW5CLElBQUUsQ0FBQyxPQUFPLEdBQUcsVUFBUyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLFdBQU8sb0NBQVEsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztHQUNwQyxDQUFDO0FBQ0YsSUFBRSxDQUFDLFVBQVUsR0FBRyxVQUFTLEtBQUssRUFBRSxPQUFPLEVBQUU7QUFDdkMsV0FBTyx1Q0FBVyxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0dBQ3ZDLENBQUM7O0FBRUYsSUFBRSxDQUFDLEdBQUcscUNBQU0sQ0FBQztBQUNiLElBQUUsQ0FBQyxRQUFRLHVDQUFXLENBQUM7QUFDdkIsSUFBRSxDQUFDLGtCQUFrQixvREFBcUIsQ0FBQztBQUMzQyxJQUFFLENBQUMsTUFBTSxpQ0FBUyxDQUFDO0FBQ25CLElBQUUsQ0FBQyxLQUFLLGdDQUFRLENBQUM7QUFDakIsSUFBRSxDQUFDLHNCQUFzQixpREFBeUIsQ0FBQzs7QUFFbkQsU0FBTyxFQUFFLENBQUM7Q0FDWDs7QUFFRCxJQUFJLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUNwQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQzs7QUFFckIsa0NBQVcsSUFBSSxDQUFDLENBQUM7O0FBRWpCLElBQUksQ0FBQyxPQUFPLHlDQUFVLENBQUM7O0FBRXZCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7O3FCQUVSLElBQUkiLCJmaWxlIjoiaGFuZGxlYmFycy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBydW50aW1lIGZyb20gJy4vaGFuZGxlYmFycy5ydW50aW1lJztcblxuLy8gQ29tcGlsZXIgaW1wb3J0c1xuaW1wb3J0IEFTVCBmcm9tICcuL2hhbmRsZWJhcnMvY29tcGlsZXIvYXN0JztcbmltcG9ydCB7XG4gIHBhcnNlciBhcyBQYXJzZXIsXG4gIHBhcnNlLFxuICBwYXJzZVdpdGhvdXRQcm9jZXNzaW5nXG59IGZyb20gJy4vaGFuZGxlYmFycy9jb21waWxlci9iYXNlJztcbmltcG9ydCB7IENvbXBpbGVyLCBjb21waWxlLCBwcmVjb21waWxlIH0gZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyJztcbmltcG9ydCBKYXZhU2NyaXB0Q29tcGlsZXIgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXInO1xuaW1wb3J0IFZpc2l0b3IgZnJvbSAnLi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3InO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG5sZXQgX2NyZWF0ZSA9IHJ1bnRpbWUuY3JlYXRlO1xuZnVuY3Rpb24gY3JlYXRlKCkge1xuICBsZXQgaGIgPSBfY3JlYXRlKCk7XG5cbiAgaGIuY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcbiAgaGIucHJlY29tcGlsZSA9IGZ1bmN0aW9uKGlucHV0LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHByZWNvbXBpbGUoaW5wdXQsIG9wdGlvbnMsIGhiKTtcbiAgfTtcblxuICBoYi5BU1QgPSBBU1Q7XG4gIGhiLkNvbXBpbGVyID0gQ29tcGlsZXI7XG4gIGhiLkphdmFTY3JpcHRDb21waWxlciA9IEphdmFTY3JpcHRDb21waWxlcjtcbiAgaGIuUGFyc2VyID0gUGFyc2VyO1xuICBoYi5wYXJzZSA9IHBhcnNlO1xuICBoYi5wYXJzZVdpdGhvdXRQcm9jZXNzaW5nID0gcGFyc2VXaXRob3V0UHJvY2Vzc2luZztcblxuICByZXR1cm4gaGI7XG59XG5cbmxldCBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxubm9Db25mbGljdChpbnN0KTtcblxuaW5zdC5WaXNpdG9yID0gVmlzaXRvcjtcblxuaW5zdFsnZGVmYXVsdCddID0gaW5zdDtcblxuZXhwb3J0IGRlZmF1bHQgaW5zdDtcbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7390:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
 | |
| 
 | |
| var _handlebarsBase = __webpack_require__(4211);
 | |
| 
 | |
| var base = _interopRequireWildcard(_handlebarsBase);
 | |
| 
 | |
| // Each of these augment the Handlebars object. No need to setup here.
 | |
| // (This is done to easily share code between commonjs and browse envs)
 | |
| 
 | |
| var _handlebarsSafeString = __webpack_require__(3296);
 | |
| 
 | |
| var _handlebarsSafeString2 = _interopRequireDefault(_handlebarsSafeString);
 | |
| 
 | |
| var _handlebarsException = __webpack_require__(2879);
 | |
| 
 | |
| var _handlebarsException2 = _interopRequireDefault(_handlebarsException);
 | |
| 
 | |
| var _handlebarsUtils = __webpack_require__(1437);
 | |
| 
 | |
| var Utils = _interopRequireWildcard(_handlebarsUtils);
 | |
| 
 | |
| var _handlebarsRuntime = __webpack_require__(7663);
 | |
| 
 | |
| var runtime = _interopRequireWildcard(_handlebarsRuntime);
 | |
| 
 | |
| var _handlebarsNoConflict = __webpack_require__(1983);
 | |
| 
 | |
| var _handlebarsNoConflict2 = _interopRequireDefault(_handlebarsNoConflict);
 | |
| 
 | |
| // For compatibility and usage outside of module systems, make the Handlebars object a namespace
 | |
| function create() {
 | |
|   var hb = new base.HandlebarsEnvironment();
 | |
| 
 | |
|   Utils.extend(hb, base);
 | |
|   hb.SafeString = _handlebarsSafeString2['default'];
 | |
|   hb.Exception = _handlebarsException2['default'];
 | |
|   hb.Utils = Utils;
 | |
|   hb.escapeExpression = Utils.escapeExpression;
 | |
| 
 | |
|   hb.VM = runtime;
 | |
|   hb.template = function (spec) {
 | |
|     return runtime.template(spec, hb);
 | |
|   };
 | |
| 
 | |
|   return hb;
 | |
| }
 | |
| 
 | |
| var inst = create();
 | |
| inst.create = create;
 | |
| 
 | |
| _handlebarsNoConflict2['default'](inst);
 | |
| 
 | |
| inst['default'] = inst;
 | |
| 
 | |
| exports.default = inst;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi9oYW5kbGViYXJzLnJ1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OEJBQXNCLG1CQUFtQjs7SUFBN0IsSUFBSTs7Ozs7b0NBSU8sMEJBQTBCOzs7O21DQUMzQix3QkFBd0I7Ozs7K0JBQ3ZCLG9CQUFvQjs7SUFBL0IsS0FBSzs7aUNBQ1Esc0JBQXNCOztJQUFuQyxPQUFPOztvQ0FFSSwwQkFBMEI7Ozs7O0FBR2pELFNBQVMsTUFBTSxHQUFHO0FBQ2hCLE1BQUksRUFBRSxHQUFHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7O0FBRTFDLE9BQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3ZCLElBQUUsQ0FBQyxVQUFVLG9DQUFhLENBQUM7QUFDM0IsSUFBRSxDQUFDLFNBQVMsbUNBQVksQ0FBQztBQUN6QixJQUFFLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNqQixJQUFFLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDOztBQUU3QyxJQUFFLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQztBQUNoQixJQUFFLENBQUMsUUFBUSxHQUFHLFVBQVMsSUFBSSxFQUFFO0FBQzNCLFdBQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7R0FDbkMsQ0FBQzs7QUFFRixTQUFPLEVBQUUsQ0FBQztDQUNYOztBQUVELElBQUksSUFBSSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3BCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDOztBQUVyQixrQ0FBVyxJQUFJLENBQUMsQ0FBQzs7QUFFakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQzs7cUJBRVIsSUFBSSIsImZpbGUiOiJoYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBiYXNlIGZyb20gJy4vaGFuZGxlYmFycy9iYXNlJztcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcbmltcG9ydCBTYWZlU3RyaW5nIGZyb20gJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4vaGFuZGxlYmFycy9leGNlcHRpb24nO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi9oYW5kbGViYXJzL3V0aWxzJztcbmltcG9ydCAqIGFzIHJ1bnRpbWUgZnJvbSAnLi9oYW5kbGViYXJzL3J1bnRpbWUnO1xuXG5pbXBvcnQgbm9Db25mbGljdCBmcm9tICcuL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QnO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgbGV0IGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IFNhZmVTdHJpbmc7XG4gIGhiLkV4Y2VwdGlvbiA9IEV4Y2VwdGlvbjtcbiAgaGIuVXRpbHMgPSBVdGlscztcbiAgaGIuZXNjYXBlRXhwcmVzc2lvbiA9IFV0aWxzLmVzY2FwZUV4cHJlc3Npb247XG5cbiAgaGIuVk0gPSBydW50aW1lO1xuICBoYi50ZW1wbGF0ZSA9IGZ1bmN0aW9uKHNwZWMpIHtcbiAgICByZXR1cm4gcnVudGltZS50ZW1wbGF0ZShzcGVjLCBoYik7XG4gIH07XG5cbiAgcmV0dXJuIGhiO1xufVxuXG5sZXQgaW5zdCA9IGNyZWF0ZSgpO1xuaW5zdC5jcmVhdGUgPSBjcmVhdGU7XG5cbm5vQ29uZmxpY3QoaW5zdCk7XG5cbmluc3RbJ2RlZmF1bHQnXSA9IGluc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IGluc3Q7XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4211:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.HandlebarsEnvironment = HandlebarsEnvironment;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| var _helpers = __webpack_require__(3066);
 | |
| 
 | |
| var _decorators = __webpack_require__(4168);
 | |
| 
 | |
| var _logger = __webpack_require__(7142);
 | |
| 
 | |
| var _logger2 = _interopRequireDefault(_logger);
 | |
| 
 | |
| var _internalProtoAccess = __webpack_require__(6066);
 | |
| 
 | |
| var VERSION = '4.7.7';
 | |
| exports.VERSION = VERSION;
 | |
| var COMPILER_REVISION = 8;
 | |
| exports.COMPILER_REVISION = COMPILER_REVISION;
 | |
| var LAST_COMPATIBLE_COMPILER_REVISION = 7;
 | |
| 
 | |
| exports.LAST_COMPATIBLE_COMPILER_REVISION = LAST_COMPATIBLE_COMPILER_REVISION;
 | |
| var REVISION_CHANGES = {
 | |
|   1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it
 | |
|   2: '== 1.0.0-rc.3',
 | |
|   3: '== 1.0.0-rc.4',
 | |
|   4: '== 1.x.x',
 | |
|   5: '== 2.0.0-alpha.x',
 | |
|   6: '>= 2.0.0-beta.1',
 | |
|   7: '>= 4.0.0 <4.3.0',
 | |
|   8: '>= 4.3.0'
 | |
| };
 | |
| 
 | |
| exports.REVISION_CHANGES = REVISION_CHANGES;
 | |
| var objectType = '[object Object]';
 | |
| 
 | |
| function HandlebarsEnvironment(helpers, partials, decorators) {
 | |
|   this.helpers = helpers || {};
 | |
|   this.partials = partials || {};
 | |
|   this.decorators = decorators || {};
 | |
| 
 | |
|   _helpers.registerDefaultHelpers(this);
 | |
|   _decorators.registerDefaultDecorators(this);
 | |
| }
 | |
| 
 | |
| HandlebarsEnvironment.prototype = {
 | |
|   constructor: HandlebarsEnvironment,
 | |
| 
 | |
|   logger: _logger2['default'],
 | |
|   log: _logger2['default'].log,
 | |
| 
 | |
|   registerHelper: function registerHelper(name, fn) {
 | |
|     if (_utils.toString.call(name) === objectType) {
 | |
|       if (fn) {
 | |
|         throw new _exception2['default']('Arg not supported with multiple helpers');
 | |
|       }
 | |
|       _utils.extend(this.helpers, name);
 | |
|     } else {
 | |
|       this.helpers[name] = fn;
 | |
|     }
 | |
|   },
 | |
|   unregisterHelper: function unregisterHelper(name) {
 | |
|     delete this.helpers[name];
 | |
|   },
 | |
| 
 | |
|   registerPartial: function registerPartial(name, partial) {
 | |
|     if (_utils.toString.call(name) === objectType) {
 | |
|       _utils.extend(this.partials, name);
 | |
|     } else {
 | |
|       if (typeof partial === 'undefined') {
 | |
|         throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined');
 | |
|       }
 | |
|       this.partials[name] = partial;
 | |
|     }
 | |
|   },
 | |
|   unregisterPartial: function unregisterPartial(name) {
 | |
|     delete this.partials[name];
 | |
|   },
 | |
| 
 | |
|   registerDecorator: function registerDecorator(name, fn) {
 | |
|     if (_utils.toString.call(name) === objectType) {
 | |
|       if (fn) {
 | |
|         throw new _exception2['default']('Arg not supported with multiple decorators');
 | |
|       }
 | |
|       _utils.extend(this.decorators, name);
 | |
|     } else {
 | |
|       this.decorators[name] = fn;
 | |
|     }
 | |
|   },
 | |
|   unregisterDecorator: function unregisterDecorator(name) {
 | |
|     delete this.decorators[name];
 | |
|   },
 | |
|   /**
 | |
|    * Reset the memory of illegal property accesses that have already been logged.
 | |
|    * @deprecated should only be used in handlebars test-cases
 | |
|    */
 | |
|   resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() {
 | |
|     _internalProtoAccess.resetLoggedProperties();
 | |
|   }
 | |
| };
 | |
| 
 | |
| var log = _logger2['default'].log;
 | |
| 
 | |
| exports.log = log;
 | |
| exports.createFrame = _utils.createFrame;
 | |
| exports.logger = _logger2['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7cUJBQThDLFNBQVM7O3lCQUNqQyxhQUFhOzs7O3VCQUNJLFdBQVc7OzBCQUNSLGNBQWM7O3NCQUNyQyxVQUFVOzs7O21DQUNTLHlCQUF5Qjs7QUFFeEQsSUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDOztBQUN4QixJQUFNLGlCQUFpQixHQUFHLENBQUMsQ0FBQzs7QUFDNUIsSUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7OztBQUU1QyxJQUFNLGdCQUFnQixHQUFHO0FBQzlCLEdBQUMsRUFBRSxhQUFhO0FBQ2hCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxlQUFlO0FBQ2xCLEdBQUMsRUFBRSxVQUFVO0FBQ2IsR0FBQyxFQUFFLGtCQUFrQjtBQUNyQixHQUFDLEVBQUUsaUJBQWlCO0FBQ3BCLEdBQUMsRUFBRSxpQkFBaUI7QUFDcEIsR0FBQyxFQUFFLFVBQVU7Q0FDZCxDQUFDOzs7QUFFRixJQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzs7QUFFOUIsU0FBUyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRTtBQUNuRSxNQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO0FBQy9CLE1BQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxJQUFJLEVBQUUsQ0FBQzs7QUFFbkMsa0NBQXVCLElBQUksQ0FBQyxDQUFDO0FBQzdCLHdDQUEwQixJQUFJLENBQUMsQ0FBQztDQUNqQzs7QUFFRCxxQkFBcUIsQ0FBQyxTQUFTLEdBQUc7QUFDaEMsYUFBVyxFQUFFLHFCQUFxQjs7QUFFbEMsUUFBTSxxQkFBUTtBQUNkLEtBQUcsRUFBRSxvQkFBTyxHQUFHOztBQUVmLGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLEVBQUUsRUFBRTtBQUNqQyxRQUFJLGdCQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxVQUFVLEVBQUU7QUFDdEMsVUFBSSxFQUFFLEVBQUU7QUFDTixjQUFNLDJCQUFjLHlDQUF5QyxDQUFDLENBQUM7T0FDaEU7QUFDRCxvQkFBTyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzVCLE1BQU07QUFDTCxVQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUN6QjtHQUNGO0FBQ0Qsa0JBQWdCLEVBQUUsMEJBQVMsSUFBSSxFQUFFO0FBQy9CLFdBQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztHQUMzQjs7QUFFRCxpQkFBZSxFQUFFLHlCQUFTLElBQUksRUFBRSxPQUFPLEVBQUU7QUFDdkMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLG9CQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7S0FDN0IsTUFBTTtBQUNMLFVBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFO0FBQ2xDLGNBQU0seUVBQ3dDLElBQUksb0JBQ2pELENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDO0tBQy9CO0dBQ0Y7QUFDRCxtQkFBaUIsRUFBRSwyQkFBUyxJQUFJLEVBQUU7QUFDaEMsV0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0dBQzVCOztBQUVELG1CQUFpQixFQUFFLDJCQUFTLElBQUksRUFBRSxFQUFFLEVBQUU7QUFDcEMsUUFBSSxnQkFBUyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFVBQUksRUFBRSxFQUFFO0FBQ04sY0FBTSwyQkFBYyw0Q0FBNEMsQ0FBQyxDQUFDO09BQ25FO0FBQ0Qsb0JBQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMvQixNQUFNO0FBQ0wsVUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7S0FDNUI7R0FDRjtBQUNELHFCQUFtQixFQUFFLDZCQUFTLElBQUksRUFBRTtBQUNsQyxXQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7R0FDOUI7Ozs7O0FBS0QsNkJBQTJCLEVBQUEsdUNBQUc7QUFDNUIsZ0RBQXVCLENBQUM7R0FDekI7Q0FDRixDQUFDOztBQUVLLElBQUksR0FBRyxHQUFHLG9CQUFPLEdBQUcsQ0FBQzs7O1FBRW5CLFdBQVc7UUFBRSxNQUFNIiwiZmlsZSI6ImJhc2UuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGcmFtZSwgZXh0ZW5kLCB0b1N0cmluZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuL2V4Y2VwdGlvbic7XG5pbXBvcnQgeyByZWdpc3RlckRlZmF1bHRIZWxwZXJzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMgfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuL2xvZ2dlcic7XG5pbXBvcnQgeyByZXNldExvZ2dlZFByb3BlcnRpZXMgfSBmcm9tICcuL2ludGVybmFsL3Byb3RvLWFjY2Vzcyc7XG5cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuNy43JztcbmV4cG9ydCBjb25zdCBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnQgY29uc3QgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0IGNvbnN0IFJFVklTSU9OX0NIQU5HRVMgPSB7XG4gIDE6ICc8PSAxLjAucmMuMicsIC8vIDEuMC5yYy4yIGlzIGFjdHVhbGx5IHJldjIgYnV0IGRvZXNuJ3QgcmVwb3J0IGl0XG4gIDI6ICc9PSAxLjAuMC1yYy4zJyxcbiAgMzogJz09IDEuMC4wLXJjLjQnLFxuICA0OiAnPT0gMS54LngnLFxuICA1OiAnPT0gMi4wLjAtYWxwaGEueCcsXG4gIDY6ICc+PSAyLjAuMC1iZXRhLjEnLFxuICA3OiAnPj0gNC4wLjAgPDQuMy4wJyxcbiAgODogJz49IDQuMy4wJ1xufTtcblxuY29uc3Qgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICByZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICByZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogbG9nZ2VyLFxuICBsb2c6IGxvZ2dlci5sb2csXG5cbiAgcmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUsIGZuKSB7XG4gICAgaWYgKHRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIGV4dGVuZCh0aGlzLmhlbHBlcnMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlbHBlcnNbbmFtZV0gPSBmbjtcbiAgICB9XG4gIH0sXG4gIHVucmVnaXN0ZXJIZWxwZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24obmFtZSwgcGFydGlhbCkge1xuICAgIGlmICh0b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBleHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgICBgQXR0ZW1wdGluZyB0byByZWdpc3RlciBhIHBhcnRpYWwgY2FsbGVkIFwiJHtuYW1lfVwiIGFzIHVuZGVmaW5lZGBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0FyZyBub3Qgc3VwcG9ydGVkIHdpdGggbXVsdGlwbGUgZGVjb3JhdG9ycycpO1xuICAgICAgfVxuICAgICAgZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24obmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLmRlY29yYXRvcnNbbmFtZV07XG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCB0aGUgbWVtb3J5IG9mIGlsbGVnYWwgcHJvcGVydHkgYWNjZXNzZXMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2dnZWQuXG4gICAqIEBkZXByZWNhdGVkIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gaGFuZGxlYmFycyB0ZXN0LWNhc2VzXG4gICAqL1xuICByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBsZXQgbG9nID0gbG9nZ2VyLmxvZztcblxuZXhwb3J0IHsgY3JlYXRlRnJhbWUsIGxvZ2dlciB9O1xuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9211:
 | |
| /***/ ((module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| var AST = {
 | |
|   // Public API used to evaluate derived attributes regarding AST nodes
 | |
|   helpers: {
 | |
|     // a mustache is definitely a helper if:
 | |
|     // * it is an eligible helper, and
 | |
|     // * it has at least one parameter or hash segment
 | |
|     helperExpression: function helperExpression(node) {
 | |
|       return node.type === 'SubExpression' || (node.type === 'MustacheStatement' || node.type === 'BlockStatement') && !!(node.params && node.params.length || node.hash);
 | |
|     },
 | |
| 
 | |
|     scopedId: function scopedId(path) {
 | |
|       return (/^\.|this\b/.test(path.original)
 | |
|       );
 | |
|     },
 | |
| 
 | |
|     // an ID is simple if it only has one part, and that part is not
 | |
|     // `..` or `this`.
 | |
|     simpleId: function simpleId(path) {
 | |
|       return path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| // Must be exported as an object rather than the root of the module as the jison lexer
 | |
| // must modify the object to operate properly.
 | |
| exports.default = AST;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2FzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJLEdBQUcsR0FBRzs7QUFFUixTQUFPLEVBQUU7Ozs7QUFJUCxvQkFBZ0IsRUFBRSwwQkFBUyxJQUFJLEVBQUU7QUFDL0IsYUFDRSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsSUFDNUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLG1CQUFtQixJQUNqQyxJQUFJLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFBLElBQzlCLENBQUMsRUFBRSxBQUFDLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUssSUFBSSxDQUFDLElBQUksQ0FBQSxBQUFDLEFBQUMsQ0FDdkQ7S0FDSDs7QUFFRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQU8sYUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQUM7S0FDekM7Ozs7QUFJRCxZQUFRLEVBQUUsa0JBQVMsSUFBSSxFQUFFO0FBQ3ZCLGFBQ0UsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUNyRTtLQUNIO0dBQ0Y7Q0FDRixDQUFDOzs7O3FCQUlhLEdBQUciLCJmaWxlIjoiYXN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsibGV0IEFTVCA9IHtcbiAgLy8gUHVibGljIEFQSSB1c2VkIHRvIGV2YWx1YXRlIGRlcml2ZWQgYXR0cmlidXRlcyByZWdhcmRpbmcgQVNUIG5vZGVzXG4gIGhlbHBlcnM6IHtcbiAgICAvLyBhIG11c3RhY2hlIGlzIGRlZmluaXRlbHkgYSBoZWxwZXIgaWY6XG4gICAgLy8gKiBpdCBpcyBhbiBlbGlnaWJsZSBoZWxwZXIsIGFuZFxuICAgIC8vICogaXQgaGFzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgb3IgaGFzaCBzZWdtZW50XG4gICAgaGVscGVyRXhwcmVzc2lvbjogZnVuY3Rpb24obm9kZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbm9kZS50eXBlID09PSAnU3ViRXhwcmVzc2lvbicgfHxcbiAgICAgICAgKChub2RlLnR5cGUgPT09ICdNdXN0YWNoZVN0YXRlbWVudCcgfHxcbiAgICAgICAgICBub2RlLnR5cGUgPT09ICdCbG9ja1N0YXRlbWVudCcpICYmXG4gICAgICAgICAgISEoKG5vZGUucGFyYW1zICYmIG5vZGUucGFyYW1zLmxlbmd0aCkgfHwgbm9kZS5oYXNoKSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIHNjb3BlZElkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gL15cXC58dGhpc1xcYi8udGVzdChwYXRoLm9yaWdpbmFsKTtcbiAgICB9LFxuXG4gICAgLy8gYW4gSUQgaXMgc2ltcGxlIGlmIGl0IG9ubHkgaGFzIG9uZSBwYXJ0LCBhbmQgdGhhdCBwYXJ0IGlzIG5vdFxuICAgIC8vIGAuLmAgb3IgYHRoaXNgLlxuICAgIHNpbXBsZUlkOiBmdW5jdGlvbihwYXRoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBwYXRoLnBhcnRzLmxlbmd0aCA9PT0gMSAmJiAhQVNULmhlbHBlcnMuc2NvcGVkSWQocGF0aCkgJiYgIXBhdGguZGVwdGhcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG4vLyBNdXN0IGJlIGV4cG9ydGVkIGFzIGFuIG9iamVjdCByYXRoZXIgdGhhbiB0aGUgcm9vdCBvZiB0aGUgbW9kdWxlIGFzIHRoZSBqaXNvbiBsZXhlclxuLy8gbXVzdCBtb2RpZnkgdGhlIG9iamVjdCB0byBvcGVyYXRlIHByb3Blcmx5LlxuZXhwb3J0IGRlZmF1bHQgQVNUO1xuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1475:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.parseWithoutProcessing = parseWithoutProcessing;
 | |
| exports.parse = parse;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
 | |
| 
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _parser = __webpack_require__(5505);
 | |
| 
 | |
| var _parser2 = _interopRequireDefault(_parser);
 | |
| 
 | |
| var _whitespaceControl = __webpack_require__(5200);
 | |
| 
 | |
| var _whitespaceControl2 = _interopRequireDefault(_whitespaceControl);
 | |
| 
 | |
| var _helpers = __webpack_require__(4706);
 | |
| 
 | |
| var Helpers = _interopRequireWildcard(_helpers);
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| exports.parser = _parser2['default'];
 | |
| 
 | |
| var yy = {};
 | |
| _utils.extend(yy, Helpers);
 | |
| 
 | |
| function parseWithoutProcessing(input, options) {
 | |
|   // Just return if an already-compiled AST was passed in.
 | |
|   if (input.type === 'Program') {
 | |
|     return input;
 | |
|   }
 | |
| 
 | |
|   _parser2['default'].yy = yy;
 | |
| 
 | |
|   // Altering the shared object here, but this is ok as parser is a sync operation
 | |
|   yy.locInfo = function (locInfo) {
 | |
|     return new yy.SourceLocation(options && options.srcName, locInfo);
 | |
|   };
 | |
| 
 | |
|   var ast = _parser2['default'].parse(input);
 | |
| 
 | |
|   return ast;
 | |
| }
 | |
| 
 | |
| function parse(input, options) {
 | |
|   var ast = parseWithoutProcessing(input, options);
 | |
|   var strip = new _whitespaceControl2['default'](options);
 | |
| 
 | |
|   return strip.accept(ast);
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2Jhc2UuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztzQkFBbUIsVUFBVTs7OztpQ0FDQyxzQkFBc0I7Ozs7dUJBQzNCLFdBQVc7O0lBQXhCLE9BQU87O3FCQUNJLFVBQVU7O1FBRXhCLE1BQU07O0FBRWYsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ1osY0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7O0FBRWIsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFOztBQUVyRCxNQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO0FBQzVCLFdBQU8sS0FBSyxDQUFDO0dBQ2Q7O0FBRUQsc0JBQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQzs7O0FBR2YsSUFBRSxDQUFDLE9BQU8sR0FBRyxVQUFTLE9BQU8sRUFBRTtBQUM3QixXQUFPLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztHQUNuRSxDQUFDOztBQUVGLE1BQUksR0FBRyxHQUFHLG9CQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQzs7QUFFOUIsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFO0FBQ3BDLE1BQUksR0FBRyxHQUFHLHNCQUFzQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRCxNQUFJLEtBQUssR0FBRyxtQ0FBc0IsT0FBTyxDQUFDLENBQUM7O0FBRTNDLFNBQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJiYXNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhcnNlciBmcm9tICcuL3BhcnNlcic7XG5pbXBvcnQgV2hpdGVzcGFjZUNvbnRyb2wgZnJvbSAnLi93aGl0ZXNwYWNlLWNvbnRyb2wnO1xuaW1wb3J0ICogYXMgSGVscGVycyBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgeyBwYXJzZXIgfTtcblxubGV0IHl5ID0ge307XG5leHRlbmQoeXksIEhlbHBlcnMpO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VXaXRob3V0UHJvY2Vzc2luZyhpbnB1dCwgb3B0aW9ucykge1xuICAvLyBKdXN0IHJldHVybiBpZiBhbiBhbHJlYWR5LWNvbXBpbGVkIEFTVCB3YXMgcGFzc2VkIGluLlxuICBpZiAoaW5wdXQudHlwZSA9PT0gJ1Byb2dyYW0nKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG5cbiAgcGFyc2VyLnl5ID0geXk7XG5cbiAgLy8gQWx0ZXJpbmcgdGhlIHNoYXJlZCBvYmplY3QgaGVyZSwgYnV0IHRoaXMgaXMgb2sgYXMgcGFyc2VyIGlzIGEgc3luYyBvcGVyYXRpb25cbiAgeXkubG9jSW5mbyA9IGZ1bmN0aW9uKGxvY0luZm8pIHtcbiAgICByZXR1cm4gbmV3IHl5LlNvdXJjZUxvY2F0aW9uKG9wdGlvbnMgJiYgb3B0aW9ucy5zcmNOYW1lLCBsb2NJbmZvKTtcbiAgfTtcblxuICBsZXQgYXN0ID0gcGFyc2VyLnBhcnNlKGlucHV0KTtcblxuICByZXR1cm4gYXN0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoaW5wdXQsIG9wdGlvbnMpIHtcbiAgbGV0IGFzdCA9IHBhcnNlV2l0aG91dFByb2Nlc3NpbmcoaW5wdXQsIG9wdGlvbnMpO1xuICBsZXQgc3RyaXAgPSBuZXcgV2hpdGVzcGFjZUNvbnRyb2wob3B0aW9ucyk7XG5cbiAgcmV0dXJuIHN0cmlwLmFjY2VwdChhc3QpO1xufVxuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3612:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| /* global define */
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var SourceNode = undefined;
 | |
| 
 | |
| try {
 | |
|   /* istanbul ignore next */
 | |
|   if (typeof define !== 'function' || !define.amd) {
 | |
|     // We don't support this in AMD environments. For these environments, we asusme that
 | |
|     // they are running on the browser and thus have no need for the source-map library.
 | |
|     var SourceMap = __webpack_require__(6594);
 | |
|     SourceNode = SourceMap.SourceNode;
 | |
|   }
 | |
| } catch (err) {}
 | |
| /* NOP */
 | |
| 
 | |
| /* istanbul ignore if: tested but not covered in istanbul due to dist build  */
 | |
| if (!SourceNode) {
 | |
|   SourceNode = function (line, column, srcFile, chunks) {
 | |
|     this.src = '';
 | |
|     if (chunks) {
 | |
|       this.add(chunks);
 | |
|     }
 | |
|   };
 | |
|   /* istanbul ignore next */
 | |
|   SourceNode.prototype = {
 | |
|     add: function add(chunks) {
 | |
|       if (_utils.isArray(chunks)) {
 | |
|         chunks = chunks.join('');
 | |
|       }
 | |
|       this.src += chunks;
 | |
|     },
 | |
|     prepend: function prepend(chunks) {
 | |
|       if (_utils.isArray(chunks)) {
 | |
|         chunks = chunks.join('');
 | |
|       }
 | |
|       this.src = chunks + this.src;
 | |
|     },
 | |
|     toStringWithSourceMap: function toStringWithSourceMap() {
 | |
|       return { code: this.toString() };
 | |
|     },
 | |
|     toString: function toString() {
 | |
|       return this.src;
 | |
|     }
 | |
|   };
 | |
| }
 | |
| 
 | |
| function castChunk(chunk, codeGen, loc) {
 | |
|   if (_utils.isArray(chunk)) {
 | |
|     var ret = [];
 | |
| 
 | |
|     for (var i = 0, len = chunk.length; i < len; i++) {
 | |
|       ret.push(codeGen.wrap(chunk[i], loc));
 | |
|     }
 | |
|     return ret;
 | |
|   } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {
 | |
|     // Handle primitives that the SourceNode will throw up on
 | |
|     return chunk + '';
 | |
|   }
 | |
|   return chunk;
 | |
| }
 | |
| 
 | |
| function CodeGen(srcFile) {
 | |
|   this.srcFile = srcFile;
 | |
|   this.source = [];
 | |
| }
 | |
| 
 | |
| CodeGen.prototype = {
 | |
|   isEmpty: function isEmpty() {
 | |
|     return !this.source.length;
 | |
|   },
 | |
|   prepend: function prepend(source, loc) {
 | |
|     this.source.unshift(this.wrap(source, loc));
 | |
|   },
 | |
|   push: function push(source, loc) {
 | |
|     this.source.push(this.wrap(source, loc));
 | |
|   },
 | |
| 
 | |
|   merge: function merge() {
 | |
|     var source = this.empty();
 | |
|     this.each(function (line) {
 | |
|       source.add(['  ', line, '\n']);
 | |
|     });
 | |
|     return source;
 | |
|   },
 | |
| 
 | |
|   each: function each(iter) {
 | |
|     for (var i = 0, len = this.source.length; i < len; i++) {
 | |
|       iter(this.source[i]);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   empty: function empty() {
 | |
|     var loc = this.currentLocation || { start: {} };
 | |
|     return new SourceNode(loc.start.line, loc.start.column, this.srcFile);
 | |
|   },
 | |
|   wrap: function wrap(chunk) {
 | |
|     var loc = arguments.length <= 1 || arguments[1] === undefined ? this.currentLocation || { start: {} } : arguments[1];
 | |
| 
 | |
|     if (chunk instanceof SourceNode) {
 | |
|       return chunk;
 | |
|     }
 | |
| 
 | |
|     chunk = castChunk(chunk, this, loc);
 | |
| 
 | |
|     return new SourceNode(loc.start.line, loc.start.column, this.srcFile, chunk);
 | |
|   },
 | |
| 
 | |
|   functionCall: function functionCall(fn, type, params) {
 | |
|     params = this.generateList(params);
 | |
|     return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);
 | |
|   },
 | |
| 
 | |
|   quotedString: function quotedString(str) {
 | |
|     return '"' + (str + '').replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\u2028/g, '\\u2028') // Per Ecma-262 7.3 + 7.8.4
 | |
|     .replace(/\u2029/g, '\\u2029') + '"';
 | |
|   },
 | |
| 
 | |
|   objectLiteral: function objectLiteral(obj) {
 | |
|     // istanbul ignore next
 | |
| 
 | |
|     var _this = this;
 | |
| 
 | |
|     var pairs = [];
 | |
| 
 | |
|     Object.keys(obj).forEach(function (key) {
 | |
|       var value = castChunk(obj[key], _this);
 | |
|       if (value !== 'undefined') {
 | |
|         pairs.push([_this.quotedString(key), ':', value]);
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     var ret = this.generateList(pairs);
 | |
|     ret.prepend('{');
 | |
|     ret.add('}');
 | |
|     return ret;
 | |
|   },
 | |
| 
 | |
|   generateList: function generateList(entries) {
 | |
|     var ret = this.empty();
 | |
| 
 | |
|     for (var i = 0, len = entries.length; i < len; i++) {
 | |
|       if (i) {
 | |
|         ret.add(',');
 | |
|       }
 | |
| 
 | |
|       ret.add(castChunk(entries[i], this));
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
|   },
 | |
| 
 | |
|   generateArray: function generateArray(entries) {
 | |
|     var ret = this.generateList(entries);
 | |
|     ret.prepend('[');
 | |
|     ret.add(']');
 | |
| 
 | |
|     return ret;
 | |
|   }
 | |
| };
 | |
| 
 | |
| exports.default = CodeGen;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvZGUtZ2VuLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O3FCQUN3QixVQUFVOztBQUVsQyxJQUFJLFVBQVUsWUFBQSxDQUFDOztBQUVmLElBQUk7O0FBRUYsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFOzs7QUFHL0MsUUFBSSxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQ3RDLGNBQVUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDO0dBQ25DO0NBQ0YsQ0FBQyxPQUFPLEdBQUcsRUFBRSxFQUViOzs7O0FBQUEsQUFHRCxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsWUFBVSxHQUFHLFVBQVMsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFO0FBQ25ELFFBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0FBQ2QsUUFBSSxNQUFNLEVBQUU7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQ2xCO0dBQ0YsQ0FBQzs7QUFFRixZQUFVLENBQUMsU0FBUyxHQUFHO0FBQ3JCLE9BQUcsRUFBRSxhQUFTLE1BQU0sRUFBRTtBQUNwQixVQUFJLGVBQVEsTUFBTSxDQUFDLEVBQUU7QUFDbkIsY0FBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7T0FDMUI7QUFDRCxVQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQztLQUNwQjtBQUNELFdBQU8sRUFBRSxpQkFBUyxNQUFNLEVBQUU7QUFDeEIsVUFBSSxlQUFRLE1BQU0sQ0FBQyxFQUFFO0FBQ25CLGNBQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO09BQzFCO0FBQ0QsVUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQztL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QUcsQ0FBQyxDQUFDO0FBQ2pCLE9BQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWIsV0FBTyxHQUFHLENBQUM7R0FDWjtDQUNGLENBQUM7O3FCQUVhLE9BQU8iLCJmaWxlIjoiY29kZS1nZW4uanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZGVmaW5lICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5sZXQgU291cmNlTm9kZTtcblxudHJ5IHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICdmdW5jdGlvbicgfHwgIWRlZmluZS5hbWQpIHtcbiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHRoaXMgaW4gQU1EIGVudmlyb25tZW50cy4gRm9yIHRoZXNlIGVudmlyb25tZW50cywgd2UgYXN1c21lIHRoYXRcbiAgICAvLyB0aGV5IGFyZSBydW5uaW5nIG9uIHRoZSBicm93c2VyIGFuZCB0aHVzIGhhdmUgbm8gbmVlZCBmb3IgdGhlIHNvdXJjZS1tYXAgbGlicmFyeS5cbiAgICBsZXQgU291cmNlTWFwID0gcmVxdWlyZSgnc291cmNlLW1hcCcpO1xuICAgIFNvdXJjZU5vZGUgPSBTb3VyY2VNYXAuU291cmNlTm9kZTtcbiAgfVxufSBjYXRjaCAoZXJyKSB7XG4gIC8qIE5PUCAqL1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IHRlc3RlZCBidXQgbm90IGNvdmVyZWQgaW4gaXN0YW5idWwgZHVlIHRvIGRpc3QgYnVpbGQgICovXG5pZiAoIVNvdXJjZU5vZGUpIHtcbiAgU291cmNlTm9kZSA9IGZ1bmN0aW9uKGxpbmUsIGNvbHVtbiwgc3JjRmlsZSwgY2h1bmtzKSB7XG4gICAgdGhpcy5zcmMgPSAnJztcbiAgICBpZiAoY2h1bmtzKSB7XG4gICAgICB0aGlzLmFkZChjaHVua3MpO1xuICAgIH1cbiAgfTtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgU291cmNlTm9kZS5wcm90b3R5cGUgPSB7XG4gICAgYWRkOiBmdW5jdGlvbihjaHVua3MpIHtcbiAgICAgIGlmIChpc0FycmF5KGNodW5rcykpIHtcbiAgICAgICAgY2h1bmtzID0gY2h1bmtzLmpvaW4oJycpO1xuICAgICAgfVxuICAgICAgdGhpcy5zcmMgKz0gY2h1bmtzO1xuICAgIH0sXG4gICAgcHJlcGVuZDogZnVuY3Rpb24oY2h1bmtzKSB7XG4gICAgICBpZiAoaXNBcnJheShjaHVua3MpKSB7XG4gICAgICAgIGNodW5rcyA9IGNodW5rcy5qb2luKCcnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc3JjID0gY2h1bmtzICsgdGhpcy5zcmM7XG4gICAgfSxcbiAgICB0b1N0cmluZ1dpdGhTb3VyY2VNYXA6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHsgY29kZTogdGhpcy50b1N0cmluZygpIH07XG4gICAgfSxcbiAgICB0b1N0cmluZzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5zcmM7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjYXN0Q2h1bmsoY2h1bmssIGNvZGVHZW4sIGxvYykge1xuICBpZiAoaXNBcnJheShjaHVuaykpIHtcbiAgICBsZXQgcmV0ID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY2h1bmsubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHJldC5wdXNoKGNvZGVHZW4ud3JhcChjaHVua1tpXSwgbG9jKSk7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGNodW5rID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNodW5rID09PSAnbnVtYmVyJykge1xuICAgIC8vIEhhbmRsZSBwcmltaXRpdmVzIHRoYXQgdGhlIFNvdXJjZU5vZGUgd2lsbCB0aHJvdyB1cCBvblxuICAgIHJldHVybiBjaHVuayArICcnO1xuICB9XG4gIHJldHVybiBjaHVuaztcbn1cblxuZnVuY3Rpb24gQ29kZUdlbihzcmNGaWxlKSB7XG4gIHRoaXMuc3JjRmlsZSA9IHNyY0ZpbGU7XG4gIHRoaXMuc291cmNlID0gW107XG59XG5cbkNvZGVHZW4ucHJvdG90eXBlID0ge1xuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiAhdGhpcy5zb3VyY2UubGVuZ3RoO1xuICB9LFxuICBwcmVwZW5kOiBmdW5jdGlvbihzb3VyY2UsIGxvYykge1xuICAgIHRoaXMuc291cmNlLnVuc2hpZnQodGhpcy53cmFwKHNvdXJjZSwgbG9jKSk7XG4gIH0sXG4gIHB1c2g6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jKSB7XG4gICAgdGhpcy5zb3VyY2UucHVzaCh0aGlzLndyYXAoc291cmNlLCBsb2MpKTtcbiAgfSxcblxuICBtZXJnZTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IHNvdXJjZSA9IHRoaXMuZW1wdHkoKTtcbiAgICB0aGlzLmVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgc291cmNlLmFkZChbJyAgJywgbGluZSwgJ1xcbiddKTtcbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9LFxuXG4gIGVhY2g6IGZ1bmN0aW9uKGl0ZXIpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5zb3VyY2UubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGl0ZXIodGhpcy5zb3VyY2VbaV0pO1xuICAgIH1cbiAgfSxcblxuICBlbXB0eTogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGxvYyA9IHRoaXMuY3VycmVudExvY2F0aW9uIHx8IHsgc3RhcnQ6IHt9IH07XG4gICAgcmV0dXJuIG5ldyBTb3VyY2VOb2RlKGxvYy5zdGFydC5saW5lLCBsb2Muc3RhcnQuY29sdW1uLCB0aGlzLnNyY0ZpbGUpO1xuICB9LFxuICB3cmFwOiBmdW5jdGlvbihjaHVuaywgbG9jID0gdGhpcy5jdXJyZW50TG9jYXRpb24gfHwgeyBzdGFydDoge30gfSkge1xuICAgIGlmIChjaHVuayBpbnN0YW5jZW9mIFNvdXJjZU5vZGUpIHtcbiAgICAgIHJldHVybiBjaHVuaztcbiAgICB9XG5cbiAgICBjaHVuayA9IGNhc3RDaHVuayhjaHVuaywgdGhpcywgbG9jKTtcblxuICAgIHJldHVybiBuZXcgU291cmNlTm9kZShcbiAgICAgIGxvYy5zdGFydC5saW5lLFxuICAgICAgbG9jLnN0YXJ0LmNvbHVtbixcbiAgICAgIHRoaXMuc3JjRmlsZSxcbiAgICAgIGNodW5rXG4gICAgKTtcbiAgfSxcblxuICBmdW5jdGlvbkNhbGw6IGZ1bmN0aW9uKGZuLCB0eXBlLCBwYXJhbXMpIHtcbiAgICBwYXJhbXMgPSB0aGlzLmdlbmVyYXRlTGlzdChwYXJhbXMpO1xuICAgIHJldHVybiB0aGlzLndyYXAoW2ZuLCB0eXBlID8gJy4nICsgdHlwZSArICcoJyA6ICcoJywgcGFyYW1zLCAnKSddKTtcbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiAoXG4gICAgICAnXCInICtcbiAgICAgIChzdHIgKyAnJylcbiAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJ1xcXFxcXFxcJylcbiAgICAgICAgLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKVxuICAgICAgICAucmVwbGFjZSgvXFxuL2csICdcXFxcbicpXG4gICAgICAgIC5yZXBsYWNlKC9cXHIvZywgJ1xcXFxyJylcbiAgICAgICAgLnJlcGxhY2UoL1xcdTIwMjgvZywgJ1xcXFx1MjAyOCcpIC8vIFBlciBFY21hLTI2MiA3LjMgKyA3LjguNFxuICAgICAgICAucmVwbGFjZSgvXFx1MjAyOS9nLCAnXFxcXHUyMDI5JykgK1xuICAgICAgJ1wiJ1xuICAgICk7XG4gIH0sXG5cbiAgb2JqZWN0TGl0ZXJhbDogZnVuY3Rpb24ob2JqKSB7XG4gICAgbGV0IHBhaXJzID0gW107XG5cbiAgICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGNhc3RDaHVuayhvYmpba2V5XSwgdGhpcyk7XG4gICAgICBpZiAodmFsdWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBhaXJzLnB1c2goW3RoaXMucXVvdGVkU3RyaW5nKGtleSksICc6JywgdmFsdWVdKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChwYWlycyk7XG4gICAgcmV0LnByZXBlbmQoJ3snKTtcbiAgICByZXQuYWRkKCd9Jyk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBnZW5lcmF0ZUxpc3Q6IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgICBsZXQgcmV0ID0gdGhpcy5lbXB0eSgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGVudHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChpKSB7XG4gICAgICAgIHJldC5hZGQoJywnKTtcbiAgICAgIH1cblxuICAgICAgcmV0LmFkZChjYXN0Q2h1bmsoZW50cmllc1tpXSwgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgZ2VuZXJhdGVBcnJheTogZnVuY3Rpb24oZW50cmllcykge1xuICAgIGxldCByZXQgPSB0aGlzLmdlbmVyYXRlTGlzdChlbnRyaWVzKTtcbiAgICByZXQucHJlcGVuZCgnWycpO1xuICAgIHJldC5hZGQoJ10nKTtcblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IENvZGVHZW47XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9081:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| /* eslint-disable new-cap */
 | |
| 
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.Compiler = Compiler;
 | |
| exports.precompile = precompile;
 | |
| exports.compile = compile;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var _ast = __webpack_require__(9211);
 | |
| 
 | |
| var _ast2 = _interopRequireDefault(_ast);
 | |
| 
 | |
| var slice = [].slice;
 | |
| 
 | |
| function Compiler() {}
 | |
| 
 | |
| // the foundHelper register will disambiguate helper lookup from finding a
 | |
| // function in a context. This is necessary for mustache compatibility, which
 | |
| // requires that context functions in blocks are evaluated by blockHelperMissing,
 | |
| // and then proceed as if the resulting value was provided to blockHelperMissing.
 | |
| 
 | |
| Compiler.prototype = {
 | |
|   compiler: Compiler,
 | |
| 
 | |
|   equals: function equals(other) {
 | |
|     var len = this.opcodes.length;
 | |
|     if (other.opcodes.length !== len) {
 | |
|       return false;
 | |
|     }
 | |
| 
 | |
|     for (var i = 0; i < len; i++) {
 | |
|       var opcode = this.opcodes[i],
 | |
|           otherOpcode = other.opcodes[i];
 | |
|       if (opcode.opcode !== otherOpcode.opcode || !argEquals(opcode.args, otherOpcode.args)) {
 | |
|         return false;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     // We know that length is the same between the two arrays because they are directly tied
 | |
|     // to the opcode behavior above.
 | |
|     len = this.children.length;
 | |
|     for (var i = 0; i < len; i++) {
 | |
|       if (!this.children[i].equals(other.children[i])) {
 | |
|         return false;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return true;
 | |
|   },
 | |
| 
 | |
|   guid: 0,
 | |
| 
 | |
|   compile: function compile(program, options) {
 | |
|     this.sourceNode = [];
 | |
|     this.opcodes = [];
 | |
|     this.children = [];
 | |
|     this.options = options;
 | |
|     this.stringParams = options.stringParams;
 | |
|     this.trackIds = options.trackIds;
 | |
| 
 | |
|     options.blockParams = options.blockParams || [];
 | |
| 
 | |
|     options.knownHelpers = _utils.extend(Object.create(null), {
 | |
|       helperMissing: true,
 | |
|       blockHelperMissing: true,
 | |
|       each: true,
 | |
|       'if': true,
 | |
|       unless: true,
 | |
|       'with': true,
 | |
|       log: true,
 | |
|       lookup: true
 | |
|     }, options.knownHelpers);
 | |
| 
 | |
|     return this.accept(program);
 | |
|   },
 | |
| 
 | |
|   compileProgram: function compileProgram(program) {
 | |
|     var childCompiler = new this.compiler(),
 | |
|         // eslint-disable-line new-cap
 | |
|     result = childCompiler.compile(program, this.options),
 | |
|         guid = this.guid++;
 | |
| 
 | |
|     this.usePartial = this.usePartial || result.usePartial;
 | |
| 
 | |
|     this.children[guid] = result;
 | |
|     this.useDepths = this.useDepths || result.useDepths;
 | |
| 
 | |
|     return guid;
 | |
|   },
 | |
| 
 | |
|   accept: function accept(node) {
 | |
|     /* istanbul ignore next: Sanity code */
 | |
|     if (!this[node.type]) {
 | |
|       throw new _exception2['default']('Unknown type: ' + node.type, node);
 | |
|     }
 | |
| 
 | |
|     this.sourceNode.unshift(node);
 | |
|     var ret = this[node.type](node);
 | |
|     this.sourceNode.shift();
 | |
|     return ret;
 | |
|   },
 | |
| 
 | |
|   Program: function Program(program) {
 | |
|     this.options.blockParams.unshift(program.blockParams);
 | |
| 
 | |
|     var body = program.body,
 | |
|         bodyLength = body.length;
 | |
|     for (var i = 0; i < bodyLength; i++) {
 | |
|       this.accept(body[i]);
 | |
|     }
 | |
| 
 | |
|     this.options.blockParams.shift();
 | |
| 
 | |
|     this.isSimple = bodyLength === 1;
 | |
|     this.blockParams = program.blockParams ? program.blockParams.length : 0;
 | |
| 
 | |
|     return this;
 | |
|   },
 | |
| 
 | |
|   BlockStatement: function BlockStatement(block) {
 | |
|     transformLiteralToPath(block);
 | |
| 
 | |
|     var program = block.program,
 | |
|         inverse = block.inverse;
 | |
| 
 | |
|     program = program && this.compileProgram(program);
 | |
|     inverse = inverse && this.compileProgram(inverse);
 | |
| 
 | |
|     var type = this.classifySexpr(block);
 | |
| 
 | |
|     if (type === 'helper') {
 | |
|       this.helperSexpr(block, program, inverse);
 | |
|     } else if (type === 'simple') {
 | |
|       this.simpleSexpr(block);
 | |
| 
 | |
|       // now that the simple mustache is resolved, we need to
 | |
|       // evaluate it by executing `blockHelperMissing`
 | |
|       this.opcode('pushProgram', program);
 | |
|       this.opcode('pushProgram', inverse);
 | |
|       this.opcode('emptyHash');
 | |
|       this.opcode('blockValue', block.path.original);
 | |
|     } else {
 | |
|       this.ambiguousSexpr(block, program, inverse);
 | |
| 
 | |
|       // now that the simple mustache is resolved, we need to
 | |
|       // evaluate it by executing `blockHelperMissing`
 | |
|       this.opcode('pushProgram', program);
 | |
|       this.opcode('pushProgram', inverse);
 | |
|       this.opcode('emptyHash');
 | |
|       this.opcode('ambiguousBlockValue');
 | |
|     }
 | |
| 
 | |
|     this.opcode('append');
 | |
|   },
 | |
| 
 | |
|   DecoratorBlock: function DecoratorBlock(decorator) {
 | |
|     var program = decorator.program && this.compileProgram(decorator.program);
 | |
|     var params = this.setupFullMustacheParams(decorator, program, undefined),
 | |
|         path = decorator.path;
 | |
| 
 | |
|     this.useDecorators = true;
 | |
|     this.opcode('registerDecorator', params.length, path.original);
 | |
|   },
 | |
| 
 | |
|   PartialStatement: function PartialStatement(partial) {
 | |
|     this.usePartial = true;
 | |
| 
 | |
|     var program = partial.program;
 | |
|     if (program) {
 | |
|       program = this.compileProgram(partial.program);
 | |
|     }
 | |
| 
 | |
|     var params = partial.params;
 | |
|     if (params.length > 1) {
 | |
|       throw new _exception2['default']('Unsupported number of partial arguments: ' + params.length, partial);
 | |
|     } else if (!params.length) {
 | |
|       if (this.options.explicitPartialContext) {
 | |
|         this.opcode('pushLiteral', 'undefined');
 | |
|       } else {
 | |
|         params.push({ type: 'PathExpression', parts: [], depth: 0 });
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     var partialName = partial.name.original,
 | |
|         isDynamic = partial.name.type === 'SubExpression';
 | |
|     if (isDynamic) {
 | |
|       this.accept(partial.name);
 | |
|     }
 | |
| 
 | |
|     this.setupFullMustacheParams(partial, program, undefined, true);
 | |
| 
 | |
|     var indent = partial.indent || '';
 | |
|     if (this.options.preventIndent && indent) {
 | |
|       this.opcode('appendContent', indent);
 | |
|       indent = '';
 | |
|     }
 | |
| 
 | |
|     this.opcode('invokePartial', isDynamic, partialName, indent);
 | |
|     this.opcode('append');
 | |
|   },
 | |
|   PartialBlockStatement: function PartialBlockStatement(partialBlock) {
 | |
|     this.PartialStatement(partialBlock);
 | |
|   },
 | |
| 
 | |
|   MustacheStatement: function MustacheStatement(mustache) {
 | |
|     this.SubExpression(mustache);
 | |
| 
 | |
|     if (mustache.escaped && !this.options.noEscape) {
 | |
|       this.opcode('appendEscaped');
 | |
|     } else {
 | |
|       this.opcode('append');
 | |
|     }
 | |
|   },
 | |
|   Decorator: function Decorator(decorator) {
 | |
|     this.DecoratorBlock(decorator);
 | |
|   },
 | |
| 
 | |
|   ContentStatement: function ContentStatement(content) {
 | |
|     if (content.value) {
 | |
|       this.opcode('appendContent', content.value);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   CommentStatement: function CommentStatement() {},
 | |
| 
 | |
|   SubExpression: function SubExpression(sexpr) {
 | |
|     transformLiteralToPath(sexpr);
 | |
|     var type = this.classifySexpr(sexpr);
 | |
| 
 | |
|     if (type === 'simple') {
 | |
|       this.simpleSexpr(sexpr);
 | |
|     } else if (type === 'helper') {
 | |
|       this.helperSexpr(sexpr);
 | |
|     } else {
 | |
|       this.ambiguousSexpr(sexpr);
 | |
|     }
 | |
|   },
 | |
|   ambiguousSexpr: function ambiguousSexpr(sexpr, program, inverse) {
 | |
|     var path = sexpr.path,
 | |
|         name = path.parts[0],
 | |
|         isBlock = program != null || inverse != null;
 | |
| 
 | |
|     this.opcode('getContext', path.depth);
 | |
| 
 | |
|     this.opcode('pushProgram', program);
 | |
|     this.opcode('pushProgram', inverse);
 | |
| 
 | |
|     path.strict = true;
 | |
|     this.accept(path);
 | |
| 
 | |
|     this.opcode('invokeAmbiguous', name, isBlock);
 | |
|   },
 | |
| 
 | |
|   simpleSexpr: function simpleSexpr(sexpr) {
 | |
|     var path = sexpr.path;
 | |
|     path.strict = true;
 | |
|     this.accept(path);
 | |
|     this.opcode('resolvePossibleLambda');
 | |
|   },
 | |
| 
 | |
|   helperSexpr: function helperSexpr(sexpr, program, inverse) {
 | |
|     var params = this.setupFullMustacheParams(sexpr, program, inverse),
 | |
|         path = sexpr.path,
 | |
|         name = path.parts[0];
 | |
| 
 | |
|     if (this.options.knownHelpers[name]) {
 | |
|       this.opcode('invokeKnownHelper', params.length, name);
 | |
|     } else if (this.options.knownHelpersOnly) {
 | |
|       throw new _exception2['default']('You specified knownHelpersOnly, but used the unknown helper ' + name, sexpr);
 | |
|     } else {
 | |
|       path.strict = true;
 | |
|       path.falsy = true;
 | |
| 
 | |
|       this.accept(path);
 | |
|       this.opcode('invokeHelper', params.length, path.original, _ast2['default'].helpers.simpleId(path));
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   PathExpression: function PathExpression(path) {
 | |
|     this.addDepth(path.depth);
 | |
|     this.opcode('getContext', path.depth);
 | |
| 
 | |
|     var name = path.parts[0],
 | |
|         scoped = _ast2['default'].helpers.scopedId(path),
 | |
|         blockParamId = !path.depth && !scoped && this.blockParamIndex(name);
 | |
| 
 | |
|     if (blockParamId) {
 | |
|       this.opcode('lookupBlockParam', blockParamId, path.parts);
 | |
|     } else if (!name) {
 | |
|       // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`
 | |
|       this.opcode('pushContext');
 | |
|     } else if (path.data) {
 | |
|       this.options.data = true;
 | |
|       this.opcode('lookupData', path.depth, path.parts, path.strict);
 | |
|     } else {
 | |
|       this.opcode('lookupOnContext', path.parts, path.falsy, path.strict, scoped);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   StringLiteral: function StringLiteral(string) {
 | |
|     this.opcode('pushString', string.value);
 | |
|   },
 | |
| 
 | |
|   NumberLiteral: function NumberLiteral(number) {
 | |
|     this.opcode('pushLiteral', number.value);
 | |
|   },
 | |
| 
 | |
|   BooleanLiteral: function BooleanLiteral(bool) {
 | |
|     this.opcode('pushLiteral', bool.value);
 | |
|   },
 | |
| 
 | |
|   UndefinedLiteral: function UndefinedLiteral() {
 | |
|     this.opcode('pushLiteral', 'undefined');
 | |
|   },
 | |
| 
 | |
|   NullLiteral: function NullLiteral() {
 | |
|     this.opcode('pushLiteral', 'null');
 | |
|   },
 | |
| 
 | |
|   Hash: function Hash(hash) {
 | |
|     var pairs = hash.pairs,
 | |
|         i = 0,
 | |
|         l = pairs.length;
 | |
| 
 | |
|     this.opcode('pushHash');
 | |
| 
 | |
|     for (; i < l; i++) {
 | |
|       this.pushParam(pairs[i].value);
 | |
|     }
 | |
|     while (i--) {
 | |
|       this.opcode('assignToHash', pairs[i].key);
 | |
|     }
 | |
|     this.opcode('popHash');
 | |
|   },
 | |
| 
 | |
|   // HELPERS
 | |
|   opcode: function opcode(name) {
 | |
|     this.opcodes.push({
 | |
|       opcode: name,
 | |
|       args: slice.call(arguments, 1),
 | |
|       loc: this.sourceNode[0].loc
 | |
|     });
 | |
|   },
 | |
| 
 | |
|   addDepth: function addDepth(depth) {
 | |
|     if (!depth) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     this.useDepths = true;
 | |
|   },
 | |
| 
 | |
|   classifySexpr: function classifySexpr(sexpr) {
 | |
|     var isSimple = _ast2['default'].helpers.simpleId(sexpr.path);
 | |
| 
 | |
|     var isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);
 | |
| 
 | |
|     // a mustache is an eligible helper if:
 | |
|     // * its id is simple (a single part, not `this` or `..`)
 | |
|     var isHelper = !isBlockParam && _ast2['default'].helpers.helperExpression(sexpr);
 | |
| 
 | |
|     // if a mustache is an eligible helper but not a definite
 | |
|     // helper, it is ambiguous, and will be resolved in a later
 | |
|     // pass or at runtime.
 | |
|     var isEligible = !isBlockParam && (isHelper || isSimple);
 | |
| 
 | |
|     // if ambiguous, we can possibly resolve the ambiguity now
 | |
|     // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.
 | |
|     if (isEligible && !isHelper) {
 | |
|       var _name = sexpr.path.parts[0],
 | |
|           options = this.options;
 | |
|       if (options.knownHelpers[_name]) {
 | |
|         isHelper = true;
 | |
|       } else if (options.knownHelpersOnly) {
 | |
|         isEligible = false;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (isHelper) {
 | |
|       return 'helper';
 | |
|     } else if (isEligible) {
 | |
|       return 'ambiguous';
 | |
|     } else {
 | |
|       return 'simple';
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   pushParams: function pushParams(params) {
 | |
|     for (var i = 0, l = params.length; i < l; i++) {
 | |
|       this.pushParam(params[i]);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   pushParam: function pushParam(val) {
 | |
|     var value = val.value != null ? val.value : val.original || '';
 | |
| 
 | |
|     if (this.stringParams) {
 | |
|       if (value.replace) {
 | |
|         value = value.replace(/^(\.?\.\/)*/g, '').replace(/\//g, '.');
 | |
|       }
 | |
| 
 | |
|       if (val.depth) {
 | |
|         this.addDepth(val.depth);
 | |
|       }
 | |
|       this.opcode('getContext', val.depth || 0);
 | |
|       this.opcode('pushStringParam', value, val.type);
 | |
| 
 | |
|       if (val.type === 'SubExpression') {
 | |
|         // SubExpressions get evaluated and passed in
 | |
|         // in string params mode.
 | |
|         this.accept(val);
 | |
|       }
 | |
|     } else {
 | |
|       if (this.trackIds) {
 | |
|         var blockParamIndex = undefined;
 | |
|         if (val.parts && !_ast2['default'].helpers.scopedId(val) && !val.depth) {
 | |
|           blockParamIndex = this.blockParamIndex(val.parts[0]);
 | |
|         }
 | |
|         if (blockParamIndex) {
 | |
|           var blockParamChild = val.parts.slice(1).join('.');
 | |
|           this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);
 | |
|         } else {
 | |
|           value = val.original || value;
 | |
|           if (value.replace) {
 | |
|             value = value.replace(/^this(?:\.|$)/, '').replace(/^\.\//, '').replace(/^\.$/, '');
 | |
|           }
 | |
| 
 | |
|           this.opcode('pushId', val.type, value);
 | |
|         }
 | |
|       }
 | |
|       this.accept(val);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   setupFullMustacheParams: function setupFullMustacheParams(sexpr, program, inverse, omitEmpty) {
 | |
|     var params = sexpr.params;
 | |
|     this.pushParams(params);
 | |
| 
 | |
|     this.opcode('pushProgram', program);
 | |
|     this.opcode('pushProgram', inverse);
 | |
| 
 | |
|     if (sexpr.hash) {
 | |
|       this.accept(sexpr.hash);
 | |
|     } else {
 | |
|       this.opcode('emptyHash', omitEmpty);
 | |
|     }
 | |
| 
 | |
|     return params;
 | |
|   },
 | |
| 
 | |
|   blockParamIndex: function blockParamIndex(name) {
 | |
|     for (var depth = 0, len = this.options.blockParams.length; depth < len; depth++) {
 | |
|       var blockParams = this.options.blockParams[depth],
 | |
|           param = blockParams && _utils.indexOf(blockParams, name);
 | |
|       if (blockParams && param >= 0) {
 | |
|         return [depth, param];
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| function precompile(input, options, env) {
 | |
|   if (input == null || typeof input !== 'string' && input.type !== 'Program') {
 | |
|     throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' + input);
 | |
|   }
 | |
| 
 | |
|   options = options || {};
 | |
|   if (!('data' in options)) {
 | |
|     options.data = true;
 | |
|   }
 | |
|   if (options.compat) {
 | |
|     options.useDepths = true;
 | |
|   }
 | |
| 
 | |
|   var ast = env.parse(input, options),
 | |
|       environment = new env.Compiler().compile(ast, options);
 | |
|   return new env.JavaScriptCompiler().compile(environment, options);
 | |
| }
 | |
| 
 | |
| function compile(input, options, env) {
 | |
|   if (options === undefined) options = {};
 | |
| 
 | |
|   if (input == null || typeof input !== 'string' && input.type !== 'Program') {
 | |
|     throw new _exception2['default']('You must pass a string or Handlebars AST to Handlebars.compile. You passed ' + input);
 | |
|   }
 | |
| 
 | |
|   options = _utils.extend({}, options);
 | |
|   if (!('data' in options)) {
 | |
|     options.data = true;
 | |
|   }
 | |
|   if (options.compat) {
 | |
|     options.useDepths = true;
 | |
|   }
 | |
| 
 | |
|   var compiled = undefined;
 | |
| 
 | |
|   function compileInput() {
 | |
|     var ast = env.parse(input, options),
 | |
|         environment = new env.Compiler().compile(ast, options),
 | |
|         templateSpec = new env.JavaScriptCompiler().compile(environment, options, undefined, true);
 | |
|     return env.template(templateSpec);
 | |
|   }
 | |
| 
 | |
|   // Template is only compiled on first use and cached after that point.
 | |
|   function ret(context, execOptions) {
 | |
|     if (!compiled) {
 | |
|       compiled = compileInput();
 | |
|     }
 | |
|     return compiled.call(this, context, execOptions);
 | |
|   }
 | |
|   ret._setup = function (setupOptions) {
 | |
|     if (!compiled) {
 | |
|       compiled = compileInput();
 | |
|     }
 | |
|     return compiled._setup(setupOptions);
 | |
|   };
 | |
|   ret._child = function (i, data, blockParams, depths) {
 | |
|     if (!compiled) {
 | |
|       compiled = compileInput();
 | |
|     }
 | |
|     return compiled._child(i, data, blockParams, depths);
 | |
|   };
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| function argEquals(a, b) {
 | |
|   if (a === b) {
 | |
|     return true;
 | |
|   }
 | |
| 
 | |
|   if (_utils.isArray(a) && _utils.isArray(b) && a.length === b.length) {
 | |
|     for (var i = 0; i < a.length; i++) {
 | |
|       if (!argEquals(a[i], b[i])) {
 | |
|         return false;
 | |
|       }
 | |
|     }
 | |
|     return true;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function transformLiteralToPath(sexpr) {
 | |
|   if (!sexpr.path.parts) {
 | |
|     var literal = sexpr.path;
 | |
|     // Casting to string here to make false and 0 literal values play nicely with the rest
 | |
|     // of the system.
 | |
|     sexpr.path = {
 | |
|       type: 'PathExpression',
 | |
|       data: false,
 | |
|       depth: 0,
 | |
|       parts: [literal.original + ''],
 | |
|       original: literal.original + '',
 | |
|       loc: literal.loc
 | |
|     };
 | |
|   }
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2NvbXBpbGVyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozt5QkFFc0IsY0FBYzs7OztxQkFDSyxVQUFVOzttQkFDbkMsT0FBTzs7OztBQUV2QixJQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVoQixTQUFTLFFBQVEsR0FBRyxFQUFFOzs7Ozs7O0FBTzdCLFFBQVEsQ0FBQyxTQUFTLEdBQUc7QUFDbkIsVUFBUSxFQUFFLFFBQVE7O0FBRWxCLFFBQU0sRUFBRSxnQkFBUyxLQUFLLEVBQUU7QUFDdEIsUUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDOUIsUUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7QUFDaEMsYUFBTyxLQUFLLENBQUM7S0FDZDs7QUFFRCxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVCLFVBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1VBQzFCLFdBQVcsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFVBQ0UsTUFBTSxDQUFDLE1BQU0sS0FBSyxXQUFXLENBQUMsTUFBTSxJQUNwQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFDekM7QUFDQSxlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7Ozs7QUFJRCxPQUFHLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUM1QixVQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEs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LENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUMxQixlQUFPLEtBQUssQ0FBQztPQUNkO0tBQ0Y7QUFDRCxXQUFPLElBQUksQ0FBQztHQUNiO0NBQ0Y7O0FBRUQsU0FBUyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUU7QUFDckMsTUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO0FBQ3JCLFFBQUksT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7OztBQUd6QixTQUFLLENBQUMsSUFBSSxHQUFHO0FBQ1gsVUFBSSxFQUFFLGdCQUFnQjtBQUN0QixVQUFJLEVBQUUsS0FBSztBQUNYLFdBQUssRUFBRSxDQUFDO0FBQ1IsV0FBSyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDOUIsY0FBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEdBQUcsRUFBRTtBQUMvQixTQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7S0FDakIsQ0FBQztHQUNIO0NBQ0YiLCJmaWxlIjoiY29tcGlsZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5cbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXksIGluZGV4T2YsIGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBBU1QgZnJvbSAnLi9hc3QnO1xuXG5jb25zdCBzbGljZSA9IFtdLnNsaWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29tcGlsZXIoKSB7fVxuXG4vLyB0aGUgZm91bmRIZWxwZXIgcmVnaXN0ZXIgd2lsbCBkaXNhbWJpZ3VhdGUgaGVscGVyIGxvb2t1cCBmcm9tIGZpbmRpbmcgYVxuLy8gZnVuY3Rpb24gaW4gYSBjb250ZXh0LiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IgbXVzdGFjaGUgY29tcGF0aWJpbGl0eSwgd2hpY2hcbi8vIHJlcXVpcmVzIHRoYXQgY29udGV4dCBmdW5jdGlvbnMgaW4gYmxvY2tzIGFyZSBldmFsdWF0ZWQgYnkgYmxvY2tIZWxwZXJNaXNzaW5nLFxuLy8gYW5kIHRoZW4gcHJvY2VlZCBhcyBpZiB0aGUgcmVzdWx0aW5nIHZhbHVlIHdhcyBwcm92aWRlZCB0byBibG9ja0hlbHBlck1pc3NpbmcuXG5cbkNvbXBpbGVyLnByb3RvdHlwZSA9IHtcbiAgY29tcGlsZXI6IENvbXBpbGVyLFxuXG4gIGVxdWFsczogZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5vcGNvZGVzLmxlbmd0aDtcbiAgICBpZiAob3RoZXIub3Bjb2Rlcy5sZW5ndGggIT09IGxlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBvcGNvZGUgPSB0aGlzLm9wY29kZXNbaV0sXG4gICAgICAgIG90aGVyT3Bjb2RlID0gb3RoZXIub3Bjb2Rlc1tpXTtcbiAgICAgIGlmIChcbiAgICAgICAgb3Bjb2RlLm9wY29kZSAhPT0gb3RoZXJPcGNvZGUub3Bjb2RlIHx8XG4gICAgICAgICFhcmdFcXVhbHMob3Bjb2RlLmFyZ3MsIG90aGVyT3Bjb2RlLmFyZ3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdlIGtub3cgdGhhdCBsZW5ndGggaXMgdGhlIHNhbWUgYmV0d2VlbiB0aGUgdHdvIGFycmF5cyBiZWNhdXNlIHRoZXkgYXJlIGRpcmVjdGx5IHRpZWRcbiAgICAvLyB0byB0aGUgb3Bjb2RlIGJlaGF2aW9yIGFib3ZlLlxuICAgIGxlbiA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghdGhpcy5jaGlsZHJlbltpXS5lcXVhbHMob3RoZXIuY2hpbGRyZW5baV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcblxuICBndWlkOiAwLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKHByb2dyYW0sIG9wdGlvbnMpIHtcbiAgICB0aGlzLnNvdXJjZU5vZGUgPSBbXTtcbiAgICB0aGlzLm9wY29kZXMgPSBbXTtcbiAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbiAgICB0aGlzLnN0cmluZ1BhcmFtcyA9IG9wdGlvbnMuc3RyaW5nUGFyYW1zO1xuICAgIHRoaXMudHJhY2tJZHMgPSBvcHRpb25zLnRyYWNrSWRzO1xuXG4gICAgb3B0aW9ucy5ibG9ja1BhcmFtcyA9IG9wdGlvbnMuYmxvY2tQYXJhbXMgfHwgW107XG5cbiAgICBvcHRpb25zLmtub3duSGVscGVycyA9IGV4dGVuZChcbiAgICAgIE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICB7XG4gICAgICAgIGhlbHBlck1pc3Npbmc6IHRydWUsXG4gICAgICAgIGJsb2NrSGVscGVyTWlzc2luZzogdHJ1ZSxcbiAgICAgICAgZWFjaDogdHJ1ZSxcbiAgICAgICAgaWY6IHRydWUsXG4gICAgICAgIHVubGVzczogdHJ1ZSxcbiAgICAgICAgd2l0aDogdHJ1ZSxcbiAgICAgICAgbG9nOiB0cnVlLFxuICAgICAgICBsb29rdXA6IHRydWVcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLmtub3duSGVscGVyc1xuICAgICk7XG5cbiAgICByZXR1cm4gdGhpcy5hY2NlcHQocHJvZ3JhbSk7XG4gIH0sXG5cbiAgY29tcGlsZVByb2dyYW06IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgICBsZXQgY2hpbGRDb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCksIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuICAgICAgcmVzdWx0ID0gY2hpbGRDb21waWxlci5jb21waWxlKHByb2dyYW0sIHRoaXMub3B0aW9ucyksXG4gICAgICBndWlkID0gdGhpcy5ndWlkKys7XG5cbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0aGlzLnVzZVBhcnRpYWwgfHwgcmVzdWx0LnVzZVBhcnRpYWw7XG5cbiAgICB0aGlzLmNoaWxkcmVuW2d1aWRdID0gcmVzdWx0O1xuICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgcmVzdWx0LnVzZURlcHRocztcblxuICAgIHJldHVybiBndWlkO1xuICB9LFxuXG4gIGFjY2VwdDogZnVuY3Rpb24obm9kZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBTYW5pdHkgY29kZSAqL1xuICAgIGlmICghdGhpc1tub2RlLnR5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHR5cGU6ICcgKyBub2RlLnR5cGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHRoaXMuc291cmNlTm9kZS51bnNoaWZ0KG5vZGUpO1xuICAgIGxldCByZXQgPSB0aGlzW25vZGUudHlwZV0obm9kZSk7XG4gICAgdGhpcy5zb3VyY2VOb2RlLnNoaWZ0KCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnVuc2hpZnQocHJvZ3JhbS5ibG9ja1BhcmFtcyk7XG5cbiAgICBsZXQgYm9keSA9IHByb2dyYW0uYm9keSxcbiAgICAgIGJvZHlMZW5ndGggPSBib2R5Lmxlbmd0aDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLnNoaWZ0KCk7XG5cbiAgICB0aGlzLmlzU2ltcGxlID0gYm9keUxlbmd0aCA9PT0gMTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gcHJvZ3JhbS5ibG9ja1BhcmFtcyA/IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoIDogMDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIEJsb2NrU3RhdGVtZW50OiBmdW5jdGlvbihibG9jaykge1xuICAgIHRyYW5zZm9ybUxpdGVyYWxUb1BhdGgoYmxvY2spO1xuXG4gICAgbGV0IHByb2dyYW0gPSBibG9jay5wcm9ncmFtLFxuICAgICAgaW52ZXJzZSA9IGJsb2NrLmludmVyc2U7XG5cbiAgICBwcm9ncmFtID0gcHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKHByb2dyYW0pO1xuICAgIGludmVyc2UgPSBpbnZlcnNlICYmIHRoaXMuY29tcGlsZVByb2dyYW0oaW52ZXJzZSk7XG5cbiAgICBsZXQgdHlwZSA9IHRoaXMuY2xhc3NpZnlTZXhwcihibG9jayk7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2hlbHBlcicpIHtcbiAgICAgIHRoaXMuaGVscGVyU2V4cHIoYmxvY2ssIHByb2dyYW0sIGludmVyc2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ3NpbXBsZScpIHtcbiAgICAgIHRoaXMuc2ltcGxlU2V4cHIoYmxvY2spO1xuXG4gICAgICAvLyBub3cgdGhhdCB0aGUgc2ltcGxlIG11c3RhY2hlIGlzIHJlc29sdmVkLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBldmFsdWF0ZSBpdCBieSBleGVjdXRpbmcgYGJsb2NrSGVscGVyTWlzc2luZ2BcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hQcm9ncmFtJywgaW52ZXJzZSk7XG4gICAgICB0aGlzLm9wY29kZSgnZW1wdHlIYXNoJyk7XG4gICAgICB0aGlzLm9wY29kZSgnYmxvY2tWYWx1ZScsIGJsb2NrLnBhdGgub3JpZ2luYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFtYmlndW91c1NleHByKGJsb2NrLCBwcm9ncmFtLCBpbnZlcnNlKTtcblxuICAgICAgLy8gbm93IHRoYXQgdGhlIHNpbXBsZSBtdXN0YWNoZSBpcyByZXNvbHZlZCwgd2UgbmVlZCB0b1xuICAgICAgLy8gZXZhbHVhdGUgaXQgYnkgZXhlY3V0aW5nIGBibG9ja0hlbHBlck1pc3NpbmdgXG4gICAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcpO1xuICAgICAgdGhpcy5vcGNvZGUoJ2FtYmlndW91c0Jsb2NrVmFsdWUnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG5cbiAgRGVjb3JhdG9yQmxvY2soZGVjb3JhdG9yKSB7XG4gICAgbGV0IHByb2dyYW0gPSBkZWNvcmF0b3IucHJvZ3JhbSAmJiB0aGlzLmNvbXBpbGVQcm9ncmFtKGRlY29yYXRvci5wcm9ncmFtKTtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhkZWNvcmF0b3IsIHByb2dyYW0sIHVuZGVmaW5lZCksXG4gICAgICBwYXRoID0gZGVjb3JhdG9yLnBhdGg7XG5cbiAgICB0aGlzLnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgIHRoaXMub3Bjb2RlKCdyZWdpc3RlckRlY29yYXRvcicsIHBhcmFtcy5sZW5ndGgsIHBhdGgub3JpZ2luYWwpO1xuICB9LFxuXG4gIFBhcnRpYWxTdGF0ZW1lbnQ6IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgICB0aGlzLnVzZVBhcnRpYWwgPSB0cnVlO1xuXG4gICAgbGV0IHByb2dyYW0gPSBwYXJ0aWFsLnByb2dyYW07XG4gICAgaWYgKHByb2dyYW0pIHtcbiAgICAgIHByb2dyYW0gPSB0aGlzLmNvbXBpbGVQcm9ncmFtKHBhcnRpYWwucHJvZ3JhbSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcmFtcyA9IHBhcnRpYWwucGFyYW1zO1xuICAgIGlmIChwYXJhbXMubGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBwYXJ0aWFsIGFyZ3VtZW50czogJyArIHBhcmFtcy5sZW5ndGgsXG4gICAgICAgIHBhcnRpYWxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmICghcGFyYW1zLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMub3B0aW9ucy5leHBsaWNpdFBhcnRpYWxDb250ZXh0KSB7XG4gICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICd1bmRlZmluZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtcy5wdXNoKHsgdHlwZTogJ1BhdGhFeHByZXNzaW9uJywgcGFydHM6IFtdLCBkZXB0aDogMCB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcGFydGlhbE5hbWUgPSBwYXJ0aWFsLm5hbWUub3JpZ2luYWwsXG4gICAgICBpc0R5bmFtaWMgPSBwYXJ0aWFsLm5hbWUudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nO1xuICAgIGlmIChpc0R5bmFtaWMpIHtcbiAgICAgIHRoaXMuYWNjZXB0KHBhcnRpYWwubmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cEZ1bGxNdXN0YWNoZVBhcmFtcyhwYXJ0aWFsLCBwcm9ncmFtLCB1bmRlZmluZWQsIHRydWUpO1xuXG4gICAgbGV0IGluZGVudCA9IHBhcnRpYWwuaW5kZW50IHx8ICcnO1xuICAgIGlmICh0aGlzLm9wdGlvbnMucHJldmVudEluZGVudCAmJiBpbmRlbnQpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRDb250ZW50JywgaW5kZW50KTtcbiAgICAgIGluZGVudCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMub3Bjb2RlKCdpbnZva2VQYXJ0aWFsJywgaXNEeW5hbWljLCBwYXJ0aWFsTmFtZSwgaW5kZW50KTtcbiAgICB0aGlzLm9wY29kZSgnYXBwZW5kJyk7XG4gIH0sXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbEJsb2NrKSB7XG4gICAgdGhpcy5QYXJ0aWFsU3RhdGVtZW50KHBhcnRpYWxCbG9jayk7XG4gIH0sXG5cbiAgTXVzdGFjaGVTdGF0ZW1lbnQ6IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gICAgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKTtcblxuICAgIGlmIChtdXN0YWNoZS5lc2NhcGVkICYmICF0aGlzLm9wdGlvbnMubm9Fc2NhcGUpIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmRFc2NhcGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhcHBlbmQnKTtcbiAgICB9XG4gIH0sXG4gIERlY29yYXRvcihkZWNvcmF0b3IpIHtcbiAgICB0aGlzLkRlY29yYXRvckJsb2NrKGRlY29yYXRvcik7XG4gIH0sXG5cbiAgQ29udGVudFN0YXRlbWVudDogZnVuY3Rpb24oY29udGVudCkge1xuICAgIGlmIChjb250ZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLm9wY29kZSgnYXBwZW5kQ29udGVudCcsIGNvbnRlbnQudmFsdWUpO1xuICAgIH1cbiAgfSxcblxuICBDb21tZW50U3RhdGVtZW50OiBmdW5jdGlvbigpIHt9LFxuXG4gIFN1YkV4cHJlc3Npb246IGZ1bmN0aW9uKHNleHByKSB7XG4gICAgdHJhbnNmb3JtTGl0ZXJhbFRvUGF0aChzZXhwcik7XG4gICAgbGV0IHR5cGUgPSB0aGlzLmNsYXNzaWZ5U2V4cHIoc2V4cHIpO1xuXG4gICAgaWYgKHR5cGUgPT09ICdzaW1wbGUnKSB7XG4gICAgICB0aGlzLnNpbXBsZVNleHByKHNleHByKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdoZWxwZXInKSB7XG4gICAgICB0aGlzLmhlbHBlclNleHByKHNleHByKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hbWJpZ3VvdXNTZXhwcihzZXhwcik7XG4gICAgfVxuICB9LFxuICBhbWJpZ3VvdXNTZXhwcjogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UpIHtcbiAgICBsZXQgcGF0aCA9IHNleHByLnBhdGgsXG4gICAgICBuYW1lID0gcGF0aC5wYXJ0c1swXSxcbiAgICAgIGlzQmxvY2sgPSBwcm9ncmFtICE9IG51bGwgfHwgaW52ZXJzZSAhPSBudWxsO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2dldENvbnRleHQnLCBwYXRoLmRlcHRoKTtcblxuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIHByb2dyYW0pO1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoUHJvZ3JhbScsIGludmVyc2UpO1xuXG4gICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuXG4gICAgdGhpcy5vcGNvZGUoJ2ludm9rZUFtYmlndW91cycsIG5hbWUsIGlzQmxvY2spO1xuICB9LFxuXG4gIHNpbXBsZVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBwYXRoID0gc2V4cHIucGF0aDtcbiAgICBwYXRoLnN0cmljdCA9IHRydWU7XG4gICAgdGhpcy5hY2NlcHQocGF0aCk7XG4gICAgdGhpcy5vcGNvZGUoJ3Jlc29sdmVQb3NzaWJsZUxhbWJkYScpO1xuICB9LFxuXG4gIGhlbHBlclNleHByOiBmdW5jdGlvbihzZXhwciwgcHJvZ3JhbSwgaW52ZXJzZSkge1xuICAgIGxldCBwYXJhbXMgPSB0aGlzLnNldHVwRnVsbE11c3RhY2hlUGFyYW1zKHNleHByLCBwcm9ncmFtLCBpbnZlcnNlKSxcbiAgICAgIHBhdGggPSBzZXhwci5wYXRoLFxuICAgICAgbmFtZSA9IHBhdGgucGFydHNbMF07XG5cbiAgICBpZiAodGhpcy5vcHRpb25zLmtub3duSGVscGVyc1tuYW1lXSkge1xuICAgICAgdGhpcy5vcGNvZGUoJ2ludm9rZUtub3duSGVscGVyJywgcGFyYW1zLmxlbmd0aCwgbmFtZSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMua25vd25IZWxwZXJzT25seSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICAgJ1lvdSBzcGVjaWZpZWQga25vd25IZWxwZXJzT25seSwgYnV0IHVzZWQgdGhlIHVua25vd24gaGVscGVyICcgKyBuYW1lLFxuICAgICAgICBzZXhwclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGF0aC5zdHJpY3QgPSB0cnVlO1xuICAgICAgcGF0aC5mYWxzeSA9IHRydWU7XG5cbiAgICAgIHRoaXMuYWNjZXB0KHBhdGgpO1xuICAgICAgdGhpcy5vcGNvZGUoXG4gICAgICAgICdpbnZva2VIZWxwZXInLFxuICAgICAgICBwYXJhbXMubGVuZ3RoLFxuICAgICAgICBwYXRoLm9yaWdpbmFsLFxuICAgICAgICBBU1QuaGVscGVycy5zaW1wbGVJZChwYXRoKVxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgUGF0aEV4cHJlc3Npb246IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICB0aGlzLmFkZERlcHRoKHBhdGguZGVwdGgpO1xuICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgcGF0aC5kZXB0aCk7XG5cbiAgICBsZXQgbmFtZSA9IHBhdGgucGFydHNbMF0sXG4gICAgICBzY29wZWQgPSBBU1QuaGVscGVycy5zY29wZWRJZChwYXRoKSxcbiAgICAgIGJsb2NrUGFyYW1JZCA9ICFwYXRoLmRlcHRoICYmICFzY29wZWQgJiYgdGhpcy5ibG9ja1BhcmFtSW5kZXgobmFtZSk7XG5cbiAgICBpZiAoYmxvY2tQYXJhbUlkKSB7XG4gICAgICB0aGlzLm9wY29kZSgnbG9va3VwQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JZCwgcGF0aC5wYXJ0cyk7XG4gICAgfSBlbHNlIGlmICghbmFtZSkge1xuICAgICAgLy8gQ29udGV4dCByZWZlcmVuY2UsIGkuZS4gYHt7Zm9vIC59fWAgb3IgYHt7Zm9vIC4ufX1gXG4gICAgICB0aGlzLm9wY29kZSgncHVzaENvbnRleHQnKTtcbiAgICB9IGVsc2UgaWYgKHBhdGguZGF0YSkge1xuICAgICAgdGhpcy5vcHRpb25zLmRhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5vcGNvZGUoJ2xvb2t1cERhdGEnLCBwYXRoLmRlcHRoLCBwYXRoLnBhcnRzLCBwYXRoLnN0cmljdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3Bjb2RlKFxuICAgICAgICAnbG9va3VwT25Db250ZXh0JyxcbiAgICAgICAgcGF0aC5wYXJ0cyxcbiAgICAgICAgcGF0aC5mYWxzeSxcbiAgICAgICAgcGF0aC5zdHJpY3QsXG4gICAgICAgIHNjb3BlZFxuICAgICAgKTtcbiAgICB9XG4gIH0sXG5cbiAgU3RyaW5nTGl0ZXJhbDogZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmcnLCBzdHJpbmcudmFsdWUpO1xuICB9LFxuXG4gIE51bWJlckxpdGVyYWw6IGZ1bmN0aW9uKG51bWJlcikge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsIG51bWJlci52YWx1ZSk7XG4gIH0sXG5cbiAgQm9vbGVhbkxpdGVyYWw6IGZ1bmN0aW9uKGJvb2wpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCBib29sLnZhbHVlKTtcbiAgfSxcblxuICBVbmRlZmluZWRMaXRlcmFsOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLm9wY29kZSgncHVzaExpdGVyYWwnLCAndW5kZWZpbmVkJyk7XG4gIH0sXG5cbiAgTnVsbExpdGVyYWw6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3Bjb2RlKCdwdXNoTGl0ZXJhbCcsICdudWxsJyk7XG4gIH0sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIGxldCBwYWlycyA9IGhhc2gucGFpcnMsXG4gICAgICBpID0gMCxcbiAgICAgIGwgPSBwYWlycy5sZW5ndGg7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaEhhc2gnKTtcblxuICAgIGZvciAoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB0aGlzLnB1c2hQYXJhbShwYWlyc1tpXS52YWx1ZSk7XG4gICAgfVxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIHRoaXMub3Bjb2RlKCdhc3NpZ25Ub0hhc2gnLCBwYWlyc1tpXS5rZXkpO1xuICAgIH1cbiAgICB0aGlzLm9wY29kZSgncG9wSGFzaCcpO1xuICB9LFxuXG4gIC8vIEhFTFBFUlNcbiAgb3Bjb2RlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdGhpcy5vcGNvZGVzLnB1c2goe1xuICAgICAgb3Bjb2RlOiBuYW1lLFxuICAgICAgYXJnczogc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpLFxuICAgICAgbG9jOiB0aGlzLnNvdXJjZU5vZGVbMF0ubG9jXG4gICAgfSk7XG4gIH0sXG5cbiAgYWRkRGVwdGg6IGZ1bmN0aW9uKGRlcHRoKSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfSxcblxuICBjbGFzc2lmeVNleHByOiBmdW5jdGlvbihzZXhwcikge1xuICAgIGxldCBpc1NpbXBsZSA9IEFTVC5oZWxwZXJzLnNpbXBsZUlkKHNleHByLnBhdGgpO1xuXG4gICAgbGV0IGlzQmxvY2tQYXJhbSA9IGlzU2ltcGxlICYmICEhdGhpcy5ibG9ja1BhcmFtSW5kZXgoc2V4cHIucGF0aC5wYXJ0c1swXSk7XG5cbiAgICAvLyBhIG11c3RhY2hlIGlzIGFuIGVsaWdpYmxlIGhlbHBlciBpZjpcbiAgICAvLyAqIGl0cyBpZCBpcyBzaW1wbGUgKGEgc2luZ2xlIHBhcnQsIG5vdCBgdGhpc2Agb3IgYC4uYClcbiAgICBsZXQgaXNIZWxwZXIgPSAhaXNCbG9ja1BhcmFtICYmIEFTVC5oZWxwZXJzLmhlbHBlckV4cHJlc3Npb24oc2V4cHIpO1xuXG4gICAgLy8gaWYgYSBtdXN0YWNoZSBpcyBhbiBlbGlnaWJsZSBoZWxwZXIgYnV0IG5vdCBhIGRlZmluaXRlXG4gICAgLy8gaGVscGVyLCBpdCBpcyBhbWJpZ3VvdXMsIGFuZCB3aWxsIGJlIHJlc29sdmVkIGluIGEgbGF0ZXJcbiAgICAvLyBwYXNzIG9yIGF0IHJ1bnRpbWUuXG4gICAgbGV0IGlzRWxpZ2libGUgPSAhaXNCbG9ja1BhcmFtICYmIChpc0hlbHBlciB8fCBpc1NpbXBsZSk7XG5cbiAgICAvLyBpZiBhbWJpZ3VvdXMsIHdlIGNhbiBwb3NzaWJseSByZXNvbHZlIHRoZSBhbWJpZ3VpdHkgbm93XG4gICAgLy8gQW4gZWxpZ2libGUgaGVscGVyIGlzIG9uZSB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb21wbGV4IHBhdGgsIGkuZS4gYHRoaXMuZm9vYCwgYC4uL2Zvb2AgZXRjLlxuICAgIGlmIChpc0VsaWdpYmxlICYmICFpc0hlbHBlcikge1xuICAgICAgbGV0IG5hbWUgPSBzZXhwci5wYXRoLnBhcnRzWzBdLFxuICAgICAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdGlvbnMua25vd25IZWxwZXJzW25hbWVdKSB7XG4gICAgICAgIGlzSGVscGVyID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy5rbm93bkhlbHBlcnNPbmx5KSB7XG4gICAgICAgIGlzRWxpZ2libGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNIZWxwZXIpIHtcbiAgICAgIHJldHVybiAnaGVscGVyJztcbiAgICB9IGVsc2UgaWYgKGlzRWxpZ2libGUpIHtcbiAgICAgIHJldHVybiAnYW1iaWd1b3VzJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdzaW1wbGUnO1xuICAgIH1cbiAgfSxcblxuICBwdXNoUGFyYW1zOiBmdW5jdGlvbihwYXJhbXMpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHBhcmFtcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMucHVzaFBhcmFtKHBhcmFtc1tpXSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2hQYXJhbTogZnVuY3Rpb24odmFsKSB7XG4gICAgbGV0IHZhbHVlID0gdmFsLnZhbHVlICE9IG51bGwgPyB2YWwudmFsdWUgOiB2YWwub3JpZ2luYWwgfHwgJyc7XG5cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIGlmICh2YWx1ZS5yZXBsYWNlKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihcXC4/XFwuXFwvKSovZywgJycpLnJlcGxhY2UoL1xcLy9nLCAnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsLmRlcHRoKSB7XG4gICAgICAgIHRoaXMuYWRkRGVwdGgodmFsLmRlcHRoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3Bjb2RlKCdnZXRDb250ZXh0JywgdmFsLmRlcHRoIHx8IDApO1xuICAgICAgdGhpcy5vcGNvZGUoJ3B1c2hTdHJpbmdQYXJhbScsIHZhbHVlLCB2YWwudHlwZSk7XG5cbiAgICAgIGlmICh2YWwudHlwZSA9PT0gJ1N1YkV4cHJlc3Npb24nKSB7XG4gICAgICAgIC8vIFN1YkV4cHJlc3Npb25zIGdldCBldmFsdWF0ZWQgYW5kIHBhc3NlZCBpblxuICAgICAgICAvLyBpbiBzdHJpbmcgcGFyYW1zIG1vZGUuXG4gICAgICAgIHRoaXMuYWNjZXB0KHZhbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICAgIGxldCBibG9ja1BhcmFtSW5kZXg7XG4gICAgICAgIGlmICh2YWwucGFydHMgJiYgIUFTVC5oZWxwZXJzLnNjb3BlZElkKHZhbCkgJiYgIXZhbC5kZXB0aCkge1xuICAgICAgICAgIGJsb2NrUGFyYW1JbmRleCA9IHRoaXMuYmxvY2tQYXJhbUluZGV4KHZhbC5wYXJ0c1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJsb2NrUGFyYW1JbmRleCkge1xuICAgICAgICAgIGxldCBibG9ja1BhcmFtQ2hpbGQgPSB2YWwucGFydHMuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCAnQmxvY2tQYXJhbScsIGJsb2NrUGFyYW1JbmRleCwgYmxvY2tQYXJhbUNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWx1ZSA9IHZhbC5vcmlnaW5hbCB8fCB2YWx1ZTtcbiAgICAgICAgICBpZiAodmFsdWUucmVwbGFjZSkge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAgICAgICAucmVwbGFjZSgvXnRoaXMoPzpcXC58JCkvLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC5cXC8vLCAnJylcbiAgICAgICAgICAgICAgLnJlcGxhY2UoL15cXC4kLywgJycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMub3Bjb2RlKCdwdXNoSWQnLCB2YWwudHlwZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmFjY2VwdCh2YWwpO1xuICAgIH1cbiAgfSxcblxuICBzZXR1cEZ1bGxNdXN0YWNoZVBhcmFtczogZnVuY3Rpb24oc2V4cHIsIHByb2dyYW0sIGludmVyc2UsIG9taXRFbXB0eSkge1xuICAgIGxldCBwYXJhbXMgPSBzZXhwci5wYXJhbXM7XG4gICAgdGhpcy5wdXNoUGFyYW1zKHBhcmFtcyk7XG5cbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBwcm9ncmFtKTtcbiAgICB0aGlzLm9wY29kZSgncHVzaFByb2dyYW0nLCBpbnZlcnNlKTtcblxuICAgIGlmIChzZXhwci5oYXNoKSB7XG4gICAgICB0aGlzLmFjY2VwdChzZXhwci5oYXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcGNvZGUoJ2VtcHR5SGFzaCcsIG9taXRFbXB0eSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcztcbiAgfSxcblxuICBibG9ja1BhcmFtSW5kZXg6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBmb3IgKFxuICAgICAgbGV0IGRlcHRoID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zLmxlbmd0aDtcbiAgICAgIGRlcHRoIDwgbGVuO1xuICAgICAgZGVwdGgrK1xuICAgICkge1xuICAgICAgbGV0IGJsb2NrUGFyYW1zID0gdGhpcy5vcHRpb25zLmJsb2NrUGFyYW1zW2RlcHRoXSxcbiAgICAgICAgcGFyYW0gPSBibG9ja1BhcmFtcyAmJiBpbmRleE9mKGJsb2NrUGFyYW1zLCBuYW1lKTtcbiAgICAgIGlmIChibG9ja1BhcmFtcyAmJiBwYXJhbSA+PSAwKSB7XG4gICAgICAgIHJldHVybiBbZGVwdGgsIHBhcmFtXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVjb21waWxlKGlucHV0LCBvcHRpb25zLCBlbnYpIHtcbiAgaWYgKFxuICAgIGlucHV0ID09IG51bGwgfHxcbiAgICAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyAmJiBpbnB1dC50eXBlICE9PSAnUHJvZ3JhbScpXG4gICkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAnWW91IG11c3QgcGFzcyBhIHN0cmluZyBvciBIYW5kbGViYXJzIEFTVCB0byBIYW5kbGViYXJzLnByZWNvbXBpbGUuIFlvdSBwYXNzZWQgJyArXG4gICAgICAgIGlucHV0XG4gICAgKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBpZiAoISgnZGF0YScgaW4gb3B0aW9ucykpIHtcbiAgICBvcHRpb25zLmRhdGEgPSB0cnVlO1xuICB9XG4gIGlmIChvcHRpb25zLmNvbXBhdCkge1xuICAgIG9wdGlvbnMudXNlRGVwdGhzID0gdHJ1ZTtcbiAgfVxuXG4gIGxldCBhc3QgPSBlbnYucGFyc2UoaW5wdXQsIG9wdGlvbnMpLFxuICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlKGlucHV0LCBvcHRpb25zID0ge30sIGVudikge1xuICBpZiAoXG4gICAgaW5wdXQgPT0gbnVsbCB8fFxuICAgICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnICYmIGlucHV0LnR5cGUgIT09ICdQcm9ncmFtJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEV4Y2VwdGlvbihcbiAgICAgICdZb3UgbXVzdCBwYXNzIGEgc3RyaW5nIG9yIEhhbmRsZWJhcnMgQVNUIHRvIEhhbmRsZWJhcnMuY29tcGlsZS4gWW91IHBhc3NlZCAnICtcbiAgICAgICAgaW5wdXRcbiAgICApO1xuICB9XG5cbiAgb3B0aW9ucyA9IGV4dGVuZCh7fSwgb3B0aW9ucyk7XG4gIGlmICghKCdkYXRhJyBpbiBvcHRpb25zKSkge1xuICAgIG9wdGlvbnMuZGF0YSA9IHRydWU7XG4gIH1cbiAgaWYgKG9wdGlvbnMuY29tcGF0KSB7XG4gICAgb3B0aW9ucy51c2VEZXB0aHMgPSB0cnVlO1xuICB9XG5cbiAgbGV0IGNvbXBpbGVkO1xuXG4gIGZ1bmN0aW9uIGNvbXBpbGVJbnB1dCgpIHtcbiAgICBsZXQgYXN0ID0gZW52LnBhcnNlKGlucHV0LCBvcHRpb25zKSxcbiAgICAgIGVudmlyb25tZW50ID0gbmV3IGVudi5Db21waWxlcigpLmNvbXBpbGUoYXN0LCBvcHRpb25zKSxcbiAgICAgIHRlbXBsYXRlU3BlYyA9IG5ldyBlbnYuSmF2YVNjcmlwdENvbXBpbGVyKCkuY29tcGlsZShcbiAgICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICByZXR1cm4gZW52LnRlbXBsYXRlKHRlbXBsYXRlU3BlYyk7XG4gIH1cblxuICAvLyBUZW1wbGF0ZSBpcyBvbmx5IGNvbXBpbGVkIG9uIGZpcnN0IHVzZSBhbmQgY2FjaGVkIGFmdGVyIHRoYXQgcG9pbnQuXG4gIGZ1bmN0aW9uIHJldChjb250ZXh0LCBleGVjT3B0aW9ucykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5jYWxsKHRoaXMsIGNvbnRleHQsIGV4ZWNPcHRpb25zKTtcbiAgfVxuICByZXQuX3NldHVwID0gZnVuY3Rpb24oc2V0dXBPcHRpb25zKSB7XG4gICAgaWYgKCFjb21waWxlZCkge1xuICAgICAgY29tcGlsZWQgPSBjb21waWxlSW5wdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBpbGVkLl9zZXR1cChzZXR1cE9wdGlvbnMpO1xuICB9O1xuICByZXQuX2NoaWxkID0gZnVuY3Rpb24oaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgIGlmICghY29tcGlsZWQpIHtcbiAgICAgIGNvbXBpbGVkID0gY29tcGlsZUlucHV0KCk7XG4gICAgfVxuICAgIHJldHVybiBjb21waWxlZC5fY2hpbGQoaSwgZGF0YSwgYmxvY2tQYXJhbXMsIGRlcHRocyk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmZ1bmN0aW9uIGFyZ0VxdWFscyhhLCBiKSB7XG4gIGlmIChhID09PSBiKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNBcnJheShhKSAmJiBpc0FycmF5KGIpICYmIGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFhcmdFcXVhbHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1MaXRlcmFsVG9QYXRoKHNleHByKSB7XG4gIGlmICghc2V4cHIucGF0aC5wYXJ0cykge1xuICAgIGxldCBsaXRlcmFsID0gc2V4cHIucGF0aDtcbiAgICAvLyBDYXN0aW5nIHRvIHN0cmluZyBoZXJlIHRvIG1ha2UgZmFsc2UgYW5kIDAgbGl0ZXJhbCB2YWx1ZXMgcGxheSBuaWNlbHkgd2l0aCB0aGUgcmVzdFxuICAgIC8vIG9mIHRoZSBzeXN0ZW0uXG4gICAgc2V4cHIucGF0aCA9IHtcbiAgICAgIHR5cGU6ICdQYXRoRXhwcmVzc2lvbicsXG4gICAgICBkYXRhOiBmYWxzZSxcbiAgICAgIGRlcHRoOiAwLFxuICAgICAgcGFydHM6IFtsaXRlcmFsLm9yaWdpbmFsICsgJyddLFxuICAgICAgb3JpZ2luYWw6IGxpdGVyYWwub3JpZ2luYWwgKyAnJyxcbiAgICAgIGxvYzogbGl0ZXJhbC5sb2NcbiAgICB9O1xuICB9XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4706:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.SourceLocation = SourceLocation;
 | |
| exports.id = id;
 | |
| exports.stripFlags = stripFlags;
 | |
| exports.stripComment = stripComment;
 | |
| exports.preparePath = preparePath;
 | |
| exports.prepareMustache = prepareMustache;
 | |
| exports.prepareRawBlock = prepareRawBlock;
 | |
| exports.prepareBlock = prepareBlock;
 | |
| exports.prepareProgram = prepareProgram;
 | |
| exports.preparePartialBlock = preparePartialBlock;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| function validateClose(open, close) {
 | |
|   close = close.path ? close.path.original : close;
 | |
| 
 | |
|   if (open.path.original !== close) {
 | |
|     var errorNode = { loc: open.path.loc };
 | |
| 
 | |
|     throw new _exception2['default'](open.path.original + " doesn't match " + close, errorNode);
 | |
|   }
 | |
| }
 | |
| 
 | |
| function SourceLocation(source, locInfo) {
 | |
|   this.source = source;
 | |
|   this.start = {
 | |
|     line: locInfo.first_line,
 | |
|     column: locInfo.first_column
 | |
|   };
 | |
|   this.end = {
 | |
|     line: locInfo.last_line,
 | |
|     column: locInfo.last_column
 | |
|   };
 | |
| }
 | |
| 
 | |
| function id(token) {
 | |
|   if (/^\[.*\]$/.test(token)) {
 | |
|     return token.substring(1, token.length - 1);
 | |
|   } else {
 | |
|     return token;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function stripFlags(open, close) {
 | |
|   return {
 | |
|     open: open.charAt(2) === '~',
 | |
|     close: close.charAt(close.length - 3) === '~'
 | |
|   };
 | |
| }
 | |
| 
 | |
| function stripComment(comment) {
 | |
|   return comment.replace(/^\{\{~?!-?-?/, '').replace(/-?-?~?\}\}$/, '');
 | |
| }
 | |
| 
 | |
| function preparePath(data, parts, loc) {
 | |
|   loc = this.locInfo(loc);
 | |
| 
 | |
|   var original = data ? '@' : '',
 | |
|       dig = [],
 | |
|       depth = 0;
 | |
| 
 | |
|   for (var i = 0, l = parts.length; i < l; i++) {
 | |
|     var part = parts[i].part,
 | |
| 
 | |
|     // If we have [] syntax then we do not treat path references as operators,
 | |
|     // i.e. foo.[this] resolves to approximately context.foo['this']
 | |
|     isLiteral = parts[i].original !== part;
 | |
|     original += (parts[i].separator || '') + part;
 | |
| 
 | |
|     if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {
 | |
|       if (dig.length > 0) {
 | |
|         throw new _exception2['default']('Invalid path: ' + original, { loc: loc });
 | |
|       } else if (part === '..') {
 | |
|         depth++;
 | |
|       }
 | |
|     } else {
 | |
|       dig.push(part);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     type: 'PathExpression',
 | |
|     data: data,
 | |
|     depth: depth,
 | |
|     parts: dig,
 | |
|     original: original,
 | |
|     loc: loc
 | |
|   };
 | |
| }
 | |
| 
 | |
| function prepareMustache(path, params, hash, open, strip, locInfo) {
 | |
|   // Must use charAt to support IE pre-10
 | |
|   var escapeFlag = open.charAt(3) || open.charAt(2),
 | |
|       escaped = escapeFlag !== '{' && escapeFlag !== '&';
 | |
| 
 | |
|   var decorator = /\*/.test(open);
 | |
|   return {
 | |
|     type: decorator ? 'Decorator' : 'MustacheStatement',
 | |
|     path: path,
 | |
|     params: params,
 | |
|     hash: hash,
 | |
|     escaped: escaped,
 | |
|     strip: strip,
 | |
|     loc: this.locInfo(locInfo)
 | |
|   };
 | |
| }
 | |
| 
 | |
| function prepareRawBlock(openRawBlock, contents, close, locInfo) {
 | |
|   validateClose(openRawBlock, close);
 | |
| 
 | |
|   locInfo = this.locInfo(locInfo);
 | |
|   var program = {
 | |
|     type: 'Program',
 | |
|     body: contents,
 | |
|     strip: {},
 | |
|     loc: locInfo
 | |
|   };
 | |
| 
 | |
|   return {
 | |
|     type: 'BlockStatement',
 | |
|     path: openRawBlock.path,
 | |
|     params: openRawBlock.params,
 | |
|     hash: openRawBlock.hash,
 | |
|     program: program,
 | |
|     openStrip: {},
 | |
|     inverseStrip: {},
 | |
|     closeStrip: {},
 | |
|     loc: locInfo
 | |
|   };
 | |
| }
 | |
| 
 | |
| function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {
 | |
|   if (close && close.path) {
 | |
|     validateClose(openBlock, close);
 | |
|   }
 | |
| 
 | |
|   var decorator = /\*/.test(openBlock.open);
 | |
| 
 | |
|   program.blockParams = openBlock.blockParams;
 | |
| 
 | |
|   var inverse = undefined,
 | |
|       inverseStrip = undefined;
 | |
| 
 | |
|   if (inverseAndProgram) {
 | |
|     if (decorator) {
 | |
|       throw new _exception2['default']('Unexpected inverse block on decorator', inverseAndProgram);
 | |
|     }
 | |
| 
 | |
|     if (inverseAndProgram.chain) {
 | |
|       inverseAndProgram.program.body[0].closeStrip = close.strip;
 | |
|     }
 | |
| 
 | |
|     inverseStrip = inverseAndProgram.strip;
 | |
|     inverse = inverseAndProgram.program;
 | |
|   }
 | |
| 
 | |
|   if (inverted) {
 | |
|     inverted = inverse;
 | |
|     inverse = program;
 | |
|     program = inverted;
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     type: decorator ? 'DecoratorBlock' : 'BlockStatement',
 | |
|     path: openBlock.path,
 | |
|     params: openBlock.params,
 | |
|     hash: openBlock.hash,
 | |
|     program: program,
 | |
|     inverse: inverse,
 | |
|     openStrip: openBlock.strip,
 | |
|     inverseStrip: inverseStrip,
 | |
|     closeStrip: close && close.strip,
 | |
|     loc: this.locInfo(locInfo)
 | |
|   };
 | |
| }
 | |
| 
 | |
| function prepareProgram(statements, loc) {
 | |
|   if (!loc && statements.length) {
 | |
|     var firstLoc = statements[0].loc,
 | |
|         lastLoc = statements[statements.length - 1].loc;
 | |
| 
 | |
|     /* istanbul ignore else */
 | |
|     if (firstLoc && lastLoc) {
 | |
|       loc = {
 | |
|         source: firstLoc.source,
 | |
|         start: {
 | |
|           line: firstLoc.start.line,
 | |
|           column: firstLoc.start.column
 | |
|         },
 | |
|         end: {
 | |
|           line: lastLoc.end.line,
 | |
|           column: lastLoc.end.column
 | |
|         }
 | |
|       };
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return {
 | |
|     type: 'Program',
 | |
|     body: statements,
 | |
|     strip: {},
 | |
|     loc: loc
 | |
|   };
 | |
| }
 | |
| 
 | |
| function preparePartialBlock(open, program, close, locInfo) {
 | |
|   validateClose(open, close);
 | |
| 
 | |
|   return {
 | |
|     type: 'PartialBlockStatement',
 | |
|     name: open.path,
 | |
|     params: open.params,
 | |
|     hash: open.hash,
 | |
|     program: program,
 | |
|     openStrip: open.strip,
 | |
|     closeStrip: close && close.strip,
 | |
|     loc: this.locInfo(locInfo)
 | |
|   };
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7eUJBQXNCLGNBQWM7Ozs7QUFFcEMsU0FBUyxhQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRTtBQUNsQyxPQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7O0FBRWpELE1BQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssS0FBSyxFQUFFO0FBQ2hDLFFBQUksU0FBUyxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7O0FBRXZDLFVBQU0sMkJBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxFQUM5QyxTQUFTLENBQ1YsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxjQUFjLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM5QyxNQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixNQUFJLENBQUMsS0FBSyxHQUFHO0FBQ1gsUUFBSSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQ3hCLFVBQU0sRUFBRSxPQUFPLENBQUMsWUFBWTtHQUM3QixDQUFDO0FBQ0YsTUFBSSxDQUFDLEdBQUcsR0FBRztBQUNULFFBQUksRUFBRSxPQUFPLENBQUMsU0FBUztBQUN2QixVQUFNLEVBQUUsT0FBTyxDQUFDLFdBQVc7R0FDNUIsQ0FBQztDQUNIOztBQUVNLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRTtBQUN4QixNQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDMUIsV0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzdD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R0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7OztBQUdsRCxRQUFJLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDdkIsU0FBRyxHQUFHO0FBQ0osY0FBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO0FBQ3ZCLGFBQUssRUFBRTtBQUNMLGNBQUksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUk7QUFDekIsZ0JBQU0sRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU07U0FDOUI7QUFDRCxXQUFHLEVBQUU7QUFDSCxjQUFJLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3RCLGdCQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1NBQzNCO09BQ0YsQ0FBQztLQUNIO0dBQ0Y7O0FBRUQsU0FBTztBQUNMLFFBQUksRUFBRSxTQUFTO0FBQ2YsUUFBSSxFQUFFLFVBQVU7QUFDaEIsU0FBSyxFQUFFLEVBQUU7QUFDVCxPQUFHLEVBQUUsR0FBRztHQUNULENBQUM7Q0FDSDs7QUFFTSxTQUFTLG1CQUFtQixDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUNqRSxlQUFhLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUUzQixTQUFPO0FBQ0wsUUFBSSxFQUFFLHVCQUF1QjtBQUM3QixRQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7QUFDZixVQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07QUFDbkIsUUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2YsV0FBTyxFQUFQLE9BQU87QUFDUCxhQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUs7QUFDckIsY0FBVSxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSztBQUNoQyxPQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7R0FDM0IsQ0FBQztDQUNIIiwiZmlsZSI6ImhlbHBlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpIHtcbiAgY2xvc2UgPSBjbG9zZS5wYXRoID8gY2xvc2UucGF0aC5vcmlnaW5hbCA6IGNsb3NlO1xuXG4gIGlmIChvcGVuLnBhdGgub3JpZ2luYWwgIT09IGNsb3NlKSB7XG4gICAgbGV0IGVycm9yTm9kZSA9IHsgbG9jOiBvcGVuLnBhdGgubG9jIH07XG5cbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgb3Blbi5wYXRoLm9yaWdpbmFsICsgXCIgZG9lc24ndCBtYXRjaCBcIiArIGNsb3NlLFxuICAgICAgZXJyb3JOb2RlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gU291cmNlTG9jYXRpb24oc291cmNlLCBsb2NJbmZvKSB7XG4gIHRoaXMuc291cmNlID0gc291cmNlO1xuICB0aGlzLnN0YXJ0ID0ge1xuICAgIGxpbmU6IGxvY0luZm8uZmlyc3RfbGluZSxcbiAgICBjb2x1bW46IGxvY0luZm8uZmlyc3RfY29sdW1uXG4gIH07XG4gIHRoaXMuZW5kID0ge1xuICAgIGxpbmU6IGxvY0luZm8ubGFzdF9saW5lLFxuICAgIGNvbHVtbjogbG9jSW5mby5sYXN0X2NvbHVtblxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaWQodG9rZW4pIHtcbiAgaWYgKC9eXFxbLipcXF0kLy50ZXN0KHRva2VuKSkge1xuICAgIHJldHVybiB0b2tlbi5zdWJzdHJpbmcoMSwgdG9rZW4ubGVuZ3RoIC0gMSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpcEZsYWdzKG9wZW4sIGNsb3NlKSB7XG4gIHJldHVybiB7XG4gICAgb3Blbjogb3Blbi5jaGFyQXQoMikgPT09ICd+JyxcbiAgICBjbG9zZTogY2xvc2UuY2hhckF0KGNsb3NlLmxlbmd0aCAtIDMpID09PSAnfidcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwQ29tbWVudChjb21tZW50KSB7XG4gIHJldHVybiBjb21tZW50LnJlcGxhY2UoL15cXHtcXHt+PyEtPy0/LywgJycpLnJlcGxhY2UoLy0/LT9+P1xcfVxcfSQvLCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0aChkYXRhLCBwYXJ0cywgbG9jKSB7XG4gIGxvYyA9IHRoaXMubG9jSW5mbyhsb2MpO1xuXG4gIGxldCBvcmlnaW5hbCA9IGRhdGEgPyAnQCcgOiAnJyxcbiAgICBkaWcgPSBbXSxcbiAgICBkZXB0aCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgcGFydCA9IHBhcnRzW2ldLnBhcnQsXG4gICAgICAvLyBJZiB3ZSBoYXZlIFtdIHN5bnRheCB0aGVuIHdlIGRvIG5vdCB0cmVhdCBwYXRoIHJlZmVyZW5jZXMgYXMgb3BlcmF0b3JzLFxuICAgICAgLy8gaS5lLiBmb28uW3RoaXNdIHJlc29sdmVzIHRvIGFwcHJveGltYXRlbHkgY29udGV4dC5mb29bJ3RoaXMnXVxuICAgICAgaXNMaXRlcmFsID0gcGFydHNbaV0ub3JpZ2luYWwgIT09IHBhcnQ7XG4gICAgb3JpZ2luYWwgKz0gKHBhcnRzW2ldLnNlcGFyYXRvciB8fCAnJykgKyBwYXJ0O1xuXG4gICAgaWYgKCFpc0xpdGVyYWwgJiYgKHBhcnQgPT09ICcuLicgfHwgcGFydCA9PT0gJy4nIHx8IHBhcnQgPT09ICd0aGlzJykpIHtcbiAgICAgIGlmIChkaWcubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHBhdGg6ICcgKyBvcmlnaW5hbCwgeyBsb2MgfSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcnQgPT09ICcuLicpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZGlnLnB1c2gocGFydCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUGF0aEV4cHJlc3Npb24nLFxuICAgIGRhdGEsXG4gICAgZGVwdGgsXG4gICAgcGFydHM6IGRpZyxcbiAgICBvcmlnaW5hbCxcbiAgICBsb2NcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVNdXN0YWNoZShwYXRoLCBwYXJhbXMsIGhhc2gsIG9wZW4sIHN0cmlwLCBsb2NJbmZvKSB7XG4gIC8vIE11c3QgdXNlIGNoYXJBdCB0byBzdXBwb3J0IElFIHByZS0xMFxuICBsZXQgZXNjYXBlRmxhZyA9IG9wZW4uY2hhckF0KDMpIHx8IG9wZW4uY2hhckF0KDIpLFxuICAgIGVzY2FwZWQgPSBlc2NhcGVGbGFnICE9PSAneycgJiYgZXNjYXBlRmxhZyAhPT0gJyYnO1xuXG4gIGxldCBkZWNvcmF0b3IgPSAvXFwqLy50ZXN0KG9wZW4pO1xuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3InIDogJ011c3RhY2hlU3RhdGVtZW50JyxcbiAgICBwYXRoLFxuICAgIHBhcmFtcyxcbiAgICBoYXNoLFxuICAgIGVzY2FwZWQsXG4gICAgc3RyaXAsXG4gICAgbG9jOiB0aGlzLmxvY0luZm8obG9jSW5mbylcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVSYXdCbG9jayhvcGVuUmF3QmxvY2ssIGNvbnRlbnRzLCBjbG9zZSwgbG9jSW5mbykge1xuICB2YWxpZGF0ZUNsb3NlKG9wZW5SYXdCbG9jaywgY2xvc2UpO1xuXG4gIGxvY0luZm8gPSB0aGlzLmxvY0luZm8obG9jSW5mbyk7XG4gIGxldCBwcm9ncmFtID0ge1xuICAgIHR5cGU6ICdQcm9ncmFtJyxcbiAgICBib2R5OiBjb250ZW50cyxcbiAgICBzdHJpcDoge30sXG4gICAgbG9jOiBsb2NJbmZvXG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5SYXdCbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlblJhd0Jsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuUmF3QmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIG9wZW5TdHJpcDoge30sXG4gICAgaW52ZXJzZVN0cmlwOiB7fSxcbiAgICBjbG9zZVN0cmlwOiB7fSxcbiAgICBsb2M6IGxvY0luZm9cbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVCbG9jayhcbiAgb3BlbkJsb2NrLFxuICBwcm9ncmFtLFxuICBpbnZlcnNlQW5kUHJvZ3JhbSxcbiAgY2xvc2UsXG4gIGludmVydGVkLFxuICBsb2NJbmZvXG4pIHtcbiAgaWYgKGNsb3NlICYmIGNsb3NlLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNsb3NlKG9wZW5CbG9jaywgY2xvc2UpO1xuICB9XG5cbiAgbGV0IGRlY29yYXRvciA9IC9cXCovLnRlc3Qob3BlbkJsb2NrLm9wZW4pO1xuXG4gIHByb2dyYW0uYmxvY2tQYXJhbXMgPSBvcGVuQmxvY2suYmxvY2tQYXJhbXM7XG5cbiAgbGV0IGludmVyc2UsIGludmVyc2VTdHJpcDtcblxuICBpZiAoaW52ZXJzZUFuZFByb2dyYW0pIHtcbiAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVW5leHBlY3RlZCBpbnZlcnNlIGJsb2NrIG9uIGRlY29yYXRvcicsXG4gICAgICAgIGludmVyc2VBbmRQcm9ncmFtXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnZlcnNlQW5kUHJvZ3JhbS5jaGFpbikge1xuICAgICAgaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbS5ib2R5WzBdLmNsb3NlU3RyaXAgPSBjbG9zZS5zdHJpcDtcbiAgICB9XG5cbiAgICBpbnZlcnNlU3RyaXAgPSBpbnZlcnNlQW5kUHJvZ3JhbS5zdHJpcDtcbiAgICBpbnZlcnNlID0gaW52ZXJzZUFuZFByb2dyYW0ucHJvZ3JhbTtcbiAgfVxuXG4gIGlmIChpbnZlcnRlZCkge1xuICAgIGludmVydGVkID0gaW52ZXJzZTtcbiAgICBpbnZlcnNlID0gcHJvZ3JhbTtcbiAgICBwcm9ncmFtID0gaW52ZXJ0ZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHR5cGU6IGRlY29yYXRvciA/ICdEZWNvcmF0b3JCbG9jaycgOiAnQmxvY2tTdGF0ZW1lbnQnLFxuICAgIHBhdGg6IG9wZW5CbG9jay5wYXRoLFxuICAgIHBhcmFtczogb3BlbkJsb2NrLnBhcmFtcyxcbiAgICBoYXNoOiBvcGVuQmxvY2suaGFzaCxcbiAgICBwcm9ncmFtLFxuICAgIGludmVyc2UsXG4gICAgb3BlblN0cmlwOiBvcGVuQmxvY2suc3RyaXAsXG4gICAgaW52ZXJzZVN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvZ3JhbShzdGF0ZW1lbnRzLCBsb2MpIHtcbiAgaWYgKCFsb2MgJiYgc3RhdGVtZW50cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmaXJzdExvYyA9IHN0YXRlbWVudHNbMF0ubG9jLFxuICAgICAgbGFzdExvYyA9IHN0YXRlbWVudHNbc3RhdGVtZW50cy5sZW5ndGggLSAxXS5sb2M7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmaXJzdExvYyAmJiBsYXN0TG9jKSB7XG4gICAgICBsb2MgPSB7XG4gICAgICAgIHNvdXJjZTogZmlyc3RMb2Muc291cmNlLFxuICAgICAgICBzdGFydDoge1xuICAgICAgICAgIGxpbmU6IGZpcnN0TG9jLnN0YXJ0LmxpbmUsXG4gICAgICAgICAgY29sdW1uOiBmaXJzdExvYy5zdGFydC5jb2x1bW5cbiAgICAgICAgfSxcbiAgICAgICAgZW5kOiB7XG4gICAgICAgICAgbGluZTogbGFzdExvYy5lbmQubGluZSxcbiAgICAgICAgICBjb2x1bW46IGxhc3RMb2MuZW5kLmNvbHVtblxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1Byb2dyYW0nLFxuICAgIGJvZHk6IHN0YXRlbWVudHMsXG4gICAgc3RyaXA6IHt9LFxuICAgIGxvYzogbG9jXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGFydGlhbEJsb2NrKG9wZW4sIHByb2dyYW0sIGNsb3NlLCBsb2NJbmZvKSB7XG4gIHZhbGlkYXRlQ2xvc2Uob3BlbiwgY2xvc2UpO1xuXG4gIHJldHVybiB7XG4gICAgdHlwZTogJ1BhcnRpYWxCbG9ja1N0YXRlbWVudCcsXG4gICAgbmFtZTogb3Blbi5wYXRoLFxuICAgIHBhcmFtczogb3Blbi5wYXJhbXMsXG4gICAgaGFzaDogb3Blbi5oYXNoLFxuICAgIHByb2dyYW0sXG4gICAgb3BlblN0cmlwOiBvcGVuLnN0cmlwLFxuICAgIGNsb3NlU3RyaXA6IGNsb3NlICYmIGNsb3NlLnN0cmlwLFxuICAgIGxvYzogdGhpcy5sb2NJbmZvKGxvY0luZm8pXG4gIH07XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1617:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _base = __webpack_require__(4211);
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var _codeGen = __webpack_require__(3612);
 | |
| 
 | |
| var _codeGen2 = _interopRequireDefault(_codeGen);
 | |
| 
 | |
| function Literal(value) {
 | |
|   this.value = value;
 | |
| }
 | |
| 
 | |
| function JavaScriptCompiler() {}
 | |
| 
 | |
| JavaScriptCompiler.prototype = {
 | |
|   // PUBLIC API: You can override these methods in a subclass to provide
 | |
|   // alternative compiled forms for name lookup and buffering semantics
 | |
|   nameLookup: function nameLookup(parent, name /*,  type */) {
 | |
|     return this.internalNameLookup(parent, name);
 | |
|   },
 | |
|   depthedLookup: function depthedLookup(name) {
 | |
|     return [this.aliasable('container.lookup'), '(depths, ', JSON.stringify(name), ')'];
 | |
|   },
 | |
| 
 | |
|   compilerInfo: function compilerInfo() {
 | |
|     var revision = _base.COMPILER_REVISION,
 | |
|         versions = _base.REVISION_CHANGES[revision];
 | |
|     return [revision, versions];
 | |
|   },
 | |
| 
 | |
|   appendToBuffer: function appendToBuffer(source, location, explicit) {
 | |
|     // Force a source as this simplifies the merge logic.
 | |
|     if (!_utils.isArray(source)) {
 | |
|       source = [source];
 | |
|     }
 | |
|     source = this.source.wrap(source, location);
 | |
| 
 | |
|     if (this.environment.isSimple) {
 | |
|       return ['return ', source, ';'];
 | |
|     } else if (explicit) {
 | |
|       // This is a case where the buffer operation occurs as a child of another
 | |
|       // construct, generally braces. We have to explicitly output these buffer
 | |
|       // operations to ensure that the emitted code goes in the correct location.
 | |
|       return ['buffer += ', source, ';'];
 | |
|     } else {
 | |
|       source.appendToBuffer = true;
 | |
|       return source;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   initializeBuffer: function initializeBuffer() {
 | |
|     return this.quotedString('');
 | |
|   },
 | |
|   // END PUBLIC API
 | |
|   internalNameLookup: function internalNameLookup(parent, name) {
 | |
|     this.lookupPropertyFunctionIsUsed = true;
 | |
|     return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];
 | |
|   },
 | |
| 
 | |
|   lookupPropertyFunctionIsUsed: false,
 | |
| 
 | |
|   compile: function compile(environment, options, context, asObject) {
 | |
|     this.environment = environment;
 | |
|     this.options = options;
 | |
|     this.stringParams = this.options.stringParams;
 | |
|     this.trackIds = this.options.trackIds;
 | |
|     this.precompile = !asObject;
 | |
| 
 | |
|     this.name = this.environment.name;
 | |
|     this.isChild = !!context;
 | |
|     this.context = context || {
 | |
|       decorators: [],
 | |
|       programs: [],
 | |
|       environments: []
 | |
|     };
 | |
| 
 | |
|     this.preamble();
 | |
| 
 | |
|     this.stackSlot = 0;
 | |
|     this.stackVars = [];
 | |
|     this.aliases = {};
 | |
|     this.registers = { list: [] };
 | |
|     this.hashes = [];
 | |
|     this.compileStack = [];
 | |
|     this.inlineStack = [];
 | |
|     this.blockParams = [];
 | |
| 
 | |
|     this.compileChildren(environment, options);
 | |
| 
 | |
|     this.useDepths = this.useDepths || environment.useDepths || environment.useDecorators || this.options.compat;
 | |
|     this.useBlockParams = this.useBlockParams || environment.useBlockParams;
 | |
| 
 | |
|     var opcodes = environment.opcodes,
 | |
|         opcode = undefined,
 | |
|         firstLoc = undefined,
 | |
|         i = undefined,
 | |
|         l = undefined;
 | |
| 
 | |
|     for (i = 0, l = opcodes.length; i < l; i++) {
 | |
|       opcode = opcodes[i];
 | |
| 
 | |
|       this.source.currentLocation = opcode.loc;
 | |
|       firstLoc = firstLoc || opcode.loc;
 | |
|       this[opcode.opcode].apply(this, opcode.args);
 | |
|     }
 | |
| 
 | |
|     // Flush any trailing content that might be pending.
 | |
|     this.source.currentLocation = firstLoc;
 | |
|     this.pushSource('');
 | |
| 
 | |
|     /* istanbul ignore next */
 | |
|     if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {
 | |
|       throw new _exception2['default']('Compile completed with content left on stack');
 | |
|     }
 | |
| 
 | |
|     if (!this.decorators.isEmpty()) {
 | |
|       this.useDecorators = true;
 | |
| 
 | |
|       this.decorators.prepend(['var decorators = container.decorators, ', this.lookupPropertyFunctionVarDeclaration(), ';\n']);
 | |
|       this.decorators.push('return fn;');
 | |
| 
 | |
|       if (asObject) {
 | |
|         this.decorators = Function.apply(this, ['fn', 'props', 'container', 'depth0', 'data', 'blockParams', 'depths', this.decorators.merge()]);
 | |
|       } else {
 | |
|         this.decorators.prepend('function(fn, props, container, depth0, data, blockParams, depths) {\n');
 | |
|         this.decorators.push('}\n');
 | |
|         this.decorators = this.decorators.merge();
 | |
|       }
 | |
|     } else {
 | |
|       this.decorators = undefined;
 | |
|     }
 | |
| 
 | |
|     var fn = this.createFunctionContext(asObject);
 | |
|     if (!this.isChild) {
 | |
|       var ret = {
 | |
|         compiler: this.compilerInfo(),
 | |
|         main: fn
 | |
|       };
 | |
| 
 | |
|       if (this.decorators) {
 | |
|         ret.main_d = this.decorators; // eslint-disable-line camelcase
 | |
|         ret.useDecorators = true;
 | |
|       }
 | |
| 
 | |
|       var _context = this.context;
 | |
|       var programs = _context.programs;
 | |
|       var decorators = _context.decorators;
 | |
| 
 | |
|       for (i = 0, l = programs.length; i < l; i++) {
 | |
|         if (programs[i]) {
 | |
|           ret[i] = programs[i];
 | |
|           if (decorators[i]) {
 | |
|             ret[i + '_d'] = decorators[i];
 | |
|             ret.useDecorators = true;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (this.environment.usePartial) {
 | |
|         ret.usePartial = true;
 | |
|       }
 | |
|       if (this.options.data) {
 | |
|         ret.useData = true;
 | |
|       }
 | |
|       if (this.useDepths) {
 | |
|         ret.useDepths = true;
 | |
|       }
 | |
|       if (this.useBlockParams) {
 | |
|         ret.useBlockParams = true;
 | |
|       }
 | |
|       if (this.options.compat) {
 | |
|         ret.compat = true;
 | |
|       }
 | |
| 
 | |
|       if (!asObject) {
 | |
|         ret.compiler = JSON.stringify(ret.compiler);
 | |
| 
 | |
|         this.source.currentLocation = { start: { line: 1, column: 0 } };
 | |
|         ret = this.objectLiteral(ret);
 | |
| 
 | |
|         if (options.srcName) {
 | |
|           ret = ret.toStringWithSourceMap({ file: options.destName });
 | |
|           ret.map = ret.map && ret.map.toString();
 | |
|         } else {
 | |
|           ret = ret.toString();
 | |
|         }
 | |
|       } else {
 | |
|         ret.compilerOptions = this.options;
 | |
|       }
 | |
| 
 | |
|       return ret;
 | |
|     } else {
 | |
|       return fn;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   preamble: function preamble() {
 | |
|     // track the last context pushed into place to allow skipping the
 | |
|     // getContext opcode when it would be a noop
 | |
|     this.lastContext = 0;
 | |
|     this.source = new _codeGen2['default'](this.options.srcName);
 | |
|     this.decorators = new _codeGen2['default'](this.options.srcName);
 | |
|   },
 | |
| 
 | |
|   createFunctionContext: function createFunctionContext(asObject) {
 | |
|     // istanbul ignore next
 | |
| 
 | |
|     var _this = this;
 | |
| 
 | |
|     var varDeclarations = '';
 | |
| 
 | |
|     var locals = this.stackVars.concat(this.registers.list);
 | |
|     if (locals.length > 0) {
 | |
|       varDeclarations += ', ' + locals.join(', ');
 | |
|     }
 | |
| 
 | |
|     // Generate minimizer alias mappings
 | |
|     //
 | |
|     // When using true SourceNodes, this will update all references to the given alias
 | |
|     // as the source nodes are reused in situ. For the non-source node compilation mode,
 | |
|     // aliases will not be used, but this case is already being run on the client and
 | |
|     // we aren't concern about minimizing the template size.
 | |
|     var aliasCount = 0;
 | |
|     Object.keys(this.aliases).forEach(function (alias) {
 | |
|       var node = _this.aliases[alias];
 | |
|       if (node.children && node.referenceCount > 1) {
 | |
|         varDeclarations += ', alias' + ++aliasCount + '=' + alias;
 | |
|         node.children[0] = 'alias' + aliasCount;
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     if (this.lookupPropertyFunctionIsUsed) {
 | |
|       varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();
 | |
|     }
 | |
| 
 | |
|     var params = ['container', 'depth0', 'helpers', 'partials', 'data'];
 | |
| 
 | |
|     if (this.useBlockParams || this.useDepths) {
 | |
|       params.push('blockParams');
 | |
|     }
 | |
|     if (this.useDepths) {
 | |
|       params.push('depths');
 | |
|     }
 | |
| 
 | |
|     // Perform a second pass over the output to merge content when possible
 | |
|     var source = this.mergeSource(varDeclarations);
 | |
| 
 | |
|     if (asObject) {
 | |
|       params.push(source);
 | |
| 
 | |
|       return Function.apply(this, params);
 | |
|     } else {
 | |
|       return this.source.wrap(['function(', params.join(','), ') {\n  ', source, '}']);
 | |
|     }
 | |
|   },
 | |
|   mergeSource: function mergeSource(varDeclarations) {
 | |
|     var isSimple = this.environment.isSimple,
 | |
|         appendOnly = !this.forceBuffer,
 | |
|         appendFirst = undefined,
 | |
|         sourceSeen = undefined,
 | |
|         bufferStart = undefined,
 | |
|         bufferEnd = undefined;
 | |
|     this.source.each(function (line) {
 | |
|       if (line.appendToBuffer) {
 | |
|         if (bufferStart) {
 | |
|           line.prepend('  + ');
 | |
|         } else {
 | |
|           bufferStart = line;
 | |
|         }
 | |
|         bufferEnd = line;
 | |
|       } else {
 | |
|         if (bufferStart) {
 | |
|           if (!sourceSeen) {
 | |
|             appendFirst = true;
 | |
|           } else {
 | |
|             bufferStart.prepend('buffer += ');
 | |
|           }
 | |
|           bufferEnd.add(';');
 | |
|           bufferStart = bufferEnd = undefined;
 | |
|         }
 | |
| 
 | |
|         sourceSeen = true;
 | |
|         if (!isSimple) {
 | |
|           appendOnly = false;
 | |
|         }
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     if (appendOnly) {
 | |
|       if (bufferStart) {
 | |
|         bufferStart.prepend('return ');
 | |
|         bufferEnd.add(';');
 | |
|       } else if (!sourceSeen) {
 | |
|         this.source.push('return "";');
 | |
|       }
 | |
|     } else {
 | |
|       varDeclarations += ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());
 | |
| 
 | |
|       if (bufferStart) {
 | |
|         bufferStart.prepend('return buffer + ');
 | |
|         bufferEnd.add(';');
 | |
|       } else {
 | |
|         this.source.push('return buffer;');
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (varDeclarations) {
 | |
|       this.source.prepend('var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\n'));
 | |
|     }
 | |
| 
 | |
|     return this.source.merge();
 | |
|   },
 | |
| 
 | |
|   lookupPropertyFunctionVarDeclaration: function lookupPropertyFunctionVarDeclaration() {
 | |
|     return '\n      lookupProperty = container.lookupProperty || function(parent, propertyName) {\n        if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n          return parent[propertyName];\n        }\n        return undefined\n    }\n    '.trim();
 | |
|   },
 | |
| 
 | |
|   // [blockValue]
 | |
|   //
 | |
|   // On stack, before: hash, inverse, program, value
 | |
|   // On stack, after: return value of blockHelperMissing
 | |
|   //
 | |
|   // The purpose of this opcode is to take a block of the form
 | |
|   // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and
 | |
|   // replace it on the stack with the result of properly
 | |
|   // invoking blockHelperMissing.
 | |
|   blockValue: function blockValue(name) {
 | |
|     var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),
 | |
|         params = [this.contextName(0)];
 | |
|     this.setupHelperArgs(name, 0, params);
 | |
| 
 | |
|     var blockName = this.popStack();
 | |
|     params.splice(1, 0, blockName);
 | |
| 
 | |
|     this.push(this.source.functionCall(blockHelperMissing, 'call', params));
 | |
|   },
 | |
| 
 | |
|   // [ambiguousBlockValue]
 | |
|   //
 | |
|   // On stack, before: hash, inverse, program, value
 | |
|   // Compiler value, before: lastHelper=value of last found helper, if any
 | |
|   // On stack, after, if no lastHelper: same as [blockValue]
 | |
|   // On stack, after, if lastHelper: value
 | |
|   ambiguousBlockValue: function ambiguousBlockValue() {
 | |
|     // We're being a bit cheeky and reusing the options value from the prior exec
 | |
|     var blockHelperMissing = this.aliasable('container.hooks.blockHelperMissing'),
 | |
|         params = [this.contextName(0)];
 | |
|     this.setupHelperArgs('', 0, params, true);
 | |
| 
 | |
|     this.flushInline();
 | |
| 
 | |
|     var current = this.topStack();
 | |
|     params.splice(1, 0, current);
 | |
| 
 | |
|     this.pushSource(['if (!', this.lastHelper, ') { ', current, ' = ', this.source.functionCall(blockHelperMissing, 'call', params), '}']);
 | |
|   },
 | |
| 
 | |
|   // [appendContent]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: ...
 | |
|   //
 | |
|   // Appends the string value of `content` to the current buffer
 | |
|   appendContent: function appendContent(content) {
 | |
|     if (this.pendingContent) {
 | |
|       content = this.pendingContent + content;
 | |
|     } else {
 | |
|       this.pendingLocation = this.source.currentLocation;
 | |
|     }
 | |
| 
 | |
|     this.pendingContent = content;
 | |
|   },
 | |
| 
 | |
|   // [append]
 | |
|   //
 | |
|   // On stack, before: value, ...
 | |
|   // On stack, after: ...
 | |
|   //
 | |
|   // Coerces `value` to a String and appends it to the current buffer.
 | |
|   //
 | |
|   // If `value` is truthy, or 0, it is coerced into a string and appended
 | |
|   // Otherwise, the empty string is appended
 | |
|   append: function append() {
 | |
|     if (this.isInline()) {
 | |
|       this.replaceStack(function (current) {
 | |
|         return [' != null ? ', current, ' : ""'];
 | |
|       });
 | |
| 
 | |
|       this.pushSource(this.appendToBuffer(this.popStack()));
 | |
|     } else {
 | |
|       var local = this.popStack();
 | |
|       this.pushSource(['if (', local, ' != null) { ', this.appendToBuffer(local, undefined, true), ' }']);
 | |
|       if (this.environment.isSimple) {
 | |
|         this.pushSource(['else { ', this.appendToBuffer("''", undefined, true), ' }']);
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // [appendEscaped]
 | |
|   //
 | |
|   // On stack, before: value, ...
 | |
|   // On stack, after: ...
 | |
|   //
 | |
|   // Escape `value` and append it to the buffer
 | |
|   appendEscaped: function appendEscaped() {
 | |
|     this.pushSource(this.appendToBuffer([this.aliasable('container.escapeExpression'), '(', this.popStack(), ')']));
 | |
|   },
 | |
| 
 | |
|   // [getContext]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: ...
 | |
|   // Compiler value, after: lastContext=depth
 | |
|   //
 | |
|   // Set the value of the `lastContext` compiler value to the depth
 | |
|   getContext: function getContext(depth) {
 | |
|     this.lastContext = depth;
 | |
|   },
 | |
| 
 | |
|   // [pushContext]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: currentContext, ...
 | |
|   //
 | |
|   // Pushes the value of the current context onto the stack.
 | |
|   pushContext: function pushContext() {
 | |
|     this.pushStackLiteral(this.contextName(this.lastContext));
 | |
|   },
 | |
| 
 | |
|   // [lookupOnContext]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: currentContext[name], ...
 | |
|   //
 | |
|   // Looks up the value of `name` on the current context and pushes
 | |
|   // it onto the stack.
 | |
|   lookupOnContext: function lookupOnContext(parts, falsy, strict, scoped) {
 | |
|     var i = 0;
 | |
| 
 | |
|     if (!scoped && this.options.compat && !this.lastContext) {
 | |
|       // The depthed query is expected to handle the undefined logic for the root level that
 | |
|       // is implemented below, so we evaluate that directly in compat mode
 | |
|       this.push(this.depthedLookup(parts[i++]));
 | |
|     } else {
 | |
|       this.pushContext();
 | |
|     }
 | |
| 
 | |
|     this.resolvePath('context', parts, i, falsy, strict);
 | |
|   },
 | |
| 
 | |
|   // [lookupBlockParam]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: blockParam[name], ...
 | |
|   //
 | |
|   // Looks up the value of `parts` on the given block param and pushes
 | |
|   // it onto the stack.
 | |
|   lookupBlockParam: function lookupBlockParam(blockParamId, parts) {
 | |
|     this.useBlockParams = true;
 | |
| 
 | |
|     this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);
 | |
|     this.resolvePath('context', parts, 1);
 | |
|   },
 | |
| 
 | |
|   // [lookupData]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: data, ...
 | |
|   //
 | |
|   // Push the data lookup operator
 | |
|   lookupData: function lookupData(depth, parts, strict) {
 | |
|     if (!depth) {
 | |
|       this.pushStackLiteral('data');
 | |
|     } else {
 | |
|       this.pushStackLiteral('container.data(data, ' + depth + ')');
 | |
|     }
 | |
| 
 | |
|     this.resolvePath('data', parts, 0, true, strict);
 | |
|   },
 | |
| 
 | |
|   resolvePath: function resolvePath(type, parts, i, falsy, strict) {
 | |
|     // istanbul ignore next
 | |
| 
 | |
|     var _this2 = this;
 | |
| 
 | |
|     if (this.options.strict || this.options.assumeObjects) {
 | |
|       this.push(strictLookup(this.options.strict && strict, this, parts, type));
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     var len = parts.length;
 | |
|     for (; i < len; i++) {
 | |
|       /* eslint-disable no-loop-func */
 | |
|       this.replaceStack(function (current) {
 | |
|         var lookup = _this2.nameLookup(current, parts[i], type);
 | |
|         // We want to ensure that zero and false are handled properly if the context (falsy flag)
 | |
|         // needs to have the special handling for these values.
 | |
|         if (!falsy) {
 | |
|           return [' != null ? ', lookup, ' : ', current];
 | |
|         } else {
 | |
|           // Otherwise we can use generic falsy handling
 | |
|           return [' && ', lookup];
 | |
|         }
 | |
|       });
 | |
|       /* eslint-enable no-loop-func */
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // [resolvePossibleLambda]
 | |
|   //
 | |
|   // On stack, before: value, ...
 | |
|   // On stack, after: resolved value, ...
 | |
|   //
 | |
|   // If the `value` is a lambda, replace it on the stack by
 | |
|   // the return value of the lambda
 | |
|   resolvePossibleLambda: function resolvePossibleLambda() {
 | |
|     this.push([this.aliasable('container.lambda'), '(', this.popStack(), ', ', this.contextName(0), ')']);
 | |
|   },
 | |
| 
 | |
|   // [pushStringParam]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: string, currentContext, ...
 | |
|   //
 | |
|   // This opcode is designed for use in string mode, which
 | |
|   // provides the string value of a parameter along with its
 | |
|   // depth rather than resolving it immediately.
 | |
|   pushStringParam: function pushStringParam(string, type) {
 | |
|     this.pushContext();
 | |
|     this.pushString(type);
 | |
| 
 | |
|     // If it's a subexpression, the string result
 | |
|     // will be pushed after this opcode.
 | |
|     if (type !== 'SubExpression') {
 | |
|       if (typeof string === 'string') {
 | |
|         this.pushString(string);
 | |
|       } else {
 | |
|         this.pushStackLiteral(string);
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   emptyHash: function emptyHash(omitEmpty) {
 | |
|     if (this.trackIds) {
 | |
|       this.push('{}'); // hashIds
 | |
|     }
 | |
|     if (this.stringParams) {
 | |
|       this.push('{}'); // hashContexts
 | |
|       this.push('{}'); // hashTypes
 | |
|     }
 | |
|     this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');
 | |
|   },
 | |
|   pushHash: function pushHash() {
 | |
|     if (this.hash) {
 | |
|       this.hashes.push(this.hash);
 | |
|     }
 | |
|     this.hash = { values: {}, types: [], contexts: [], ids: [] };
 | |
|   },
 | |
|   popHash: function popHash() {
 | |
|     var hash = this.hash;
 | |
|     this.hash = this.hashes.pop();
 | |
| 
 | |
|     if (this.trackIds) {
 | |
|       this.push(this.objectLiteral(hash.ids));
 | |
|     }
 | |
|     if (this.stringParams) {
 | |
|       this.push(this.objectLiteral(hash.contexts));
 | |
|       this.push(this.objectLiteral(hash.types));
 | |
|     }
 | |
| 
 | |
|     this.push(this.objectLiteral(hash.values));
 | |
|   },
 | |
| 
 | |
|   // [pushString]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: quotedString(string), ...
 | |
|   //
 | |
|   // Push a quoted version of `string` onto the stack
 | |
|   pushString: function pushString(string) {
 | |
|     this.pushStackLiteral(this.quotedString(string));
 | |
|   },
 | |
| 
 | |
|   // [pushLiteral]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: value, ...
 | |
|   //
 | |
|   // Pushes a value onto the stack. This operation prevents
 | |
|   // the compiler from creating a temporary variable to hold
 | |
|   // it.
 | |
|   pushLiteral: function pushLiteral(value) {
 | |
|     this.pushStackLiteral(value);
 | |
|   },
 | |
| 
 | |
|   // [pushProgram]
 | |
|   //
 | |
|   // On stack, before: ...
 | |
|   // On stack, after: program(guid), ...
 | |
|   //
 | |
|   // Push a program expression onto the stack. This takes
 | |
|   // a compile-time guid and converts it into a runtime-accessible
 | |
|   // expression.
 | |
|   pushProgram: function pushProgram(guid) {
 | |
|     if (guid != null) {
 | |
|       this.pushStackLiteral(this.programExpression(guid));
 | |
|     } else {
 | |
|       this.pushStackLiteral(null);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // [registerDecorator]
 | |
|   //
 | |
|   // On stack, before: hash, program, params..., ...
 | |
|   // On stack, after: ...
 | |
|   //
 | |
|   // Pops off the decorator's parameters, invokes the decorator,
 | |
|   // and inserts the decorator into the decorators list.
 | |
|   registerDecorator: function registerDecorator(paramSize, name) {
 | |
|     var foundDecorator = this.nameLookup('decorators', name, 'decorator'),
 | |
|         options = this.setupHelperArgs(name, paramSize);
 | |
| 
 | |
|     this.decorators.push(['fn = ', this.decorators.functionCall(foundDecorator, '', ['fn', 'props', 'container', options]), ' || fn;']);
 | |
|   },
 | |
| 
 | |
|   // [invokeHelper]
 | |
|   //
 | |
|   // On stack, before: hash, inverse, program, params..., ...
 | |
|   // On stack, after: result of helper invocation
 | |
|   //
 | |
|   // Pops off the helper's parameters, invokes the helper,
 | |
|   // and pushes the helper's return value onto the stack.
 | |
|   //
 | |
|   // If the helper is not found, `helperMissing` is called.
 | |
|   invokeHelper: function invokeHelper(paramSize, name, isSimple) {
 | |
|     var nonHelper = this.popStack(),
 | |
|         helper = this.setupHelper(paramSize, name);
 | |
| 
 | |
|     var possibleFunctionCalls = [];
 | |
| 
 | |
|     if (isSimple) {
 | |
|       // direct call to helper
 | |
|       possibleFunctionCalls.push(helper.name);
 | |
|     }
 | |
|     // call a function from the input object
 | |
|     possibleFunctionCalls.push(nonHelper);
 | |
|     if (!this.options.strict) {
 | |
|       possibleFunctionCalls.push(this.aliasable('container.hooks.helperMissing'));
 | |
|     }
 | |
| 
 | |
|     var functionLookupCode = ['(', this.itemsSeparatedBy(possibleFunctionCalls, '||'), ')'];
 | |
|     var functionCall = this.source.functionCall(functionLookupCode, 'call', helper.callParams);
 | |
|     this.push(functionCall);
 | |
|   },
 | |
| 
 | |
|   itemsSeparatedBy: function itemsSeparatedBy(items, separator) {
 | |
|     var result = [];
 | |
|     result.push(items[0]);
 | |
|     for (var i = 1; i < items.length; i++) {
 | |
|       result.push(separator, items[i]);
 | |
|     }
 | |
|     return result;
 | |
|   },
 | |
|   // [invokeKnownHelper]
 | |
|   //
 | |
|   // On stack, before: hash, inverse, program, params..., ...
 | |
|   // On stack, after: result of helper invocation
 | |
|   //
 | |
|   // This operation is used when the helper is known to exist,
 | |
|   // so a `helperMissing` fallback is not required.
 | |
|   invokeKnownHelper: function invokeKnownHelper(paramSize, name) {
 | |
|     var helper = this.setupHelper(paramSize, name);
 | |
|     this.push(this.source.functionCall(helper.name, 'call', helper.callParams));
 | |
|   },
 | |
| 
 | |
|   // [invokeAmbiguous]
 | |
|   //
 | |
|   // On stack, before: hash, inverse, program, params..., ...
 | |
|   // On stack, after: result of disambiguation
 | |
|   //
 | |
|   // This operation is used when an expression like `{{foo}}`
 | |
|   // is provided, but we don't know at compile-time whether it
 | |
|   // is a helper or a path.
 | |
|   //
 | |
|   // This operation emits more code than the other options,
 | |
|   // and can be avoided by passing the `knownHelpers` and
 | |
|   // `knownHelpersOnly` flags at compile-time.
 | |
|   invokeAmbiguous: function invokeAmbiguous(name, helperCall) {
 | |
|     this.useRegister('helper');
 | |
| 
 | |
|     var nonHelper = this.popStack();
 | |
| 
 | |
|     this.emptyHash();
 | |
|     var helper = this.setupHelper(0, name, helperCall);
 | |
| 
 | |
|     var helperName = this.lastHelper = this.nameLookup('helpers', name, 'helper');
 | |
| 
 | |
|     var lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];
 | |
|     if (!this.options.strict) {
 | |
|       lookup[0] = '(helper = ';
 | |
|       lookup.push(' != null ? helper : ', this.aliasable('container.hooks.helperMissing'));
 | |
|     }
 | |
| 
 | |
|     this.push(['(', lookup, helper.paramsInit ? ['),(', helper.paramsInit] : [], '),', '(typeof helper === ', this.aliasable('"function"'), ' ? ', this.source.functionCall('helper', 'call', helper.callParams), ' : helper))']);
 | |
|   },
 | |
| 
 | |
|   // [invokePartial]
 | |
|   //
 | |
|   // On stack, before: context, ...
 | |
|   // On stack after: result of partial invocation
 | |
|   //
 | |
|   // This operation pops off a context, invokes a partial with that context,
 | |
|   // and pushes the result of the invocation back.
 | |
|   invokePartial: function invokePartial(isDynamic, name, indent) {
 | |
|     var params = [],
 | |
|         options = this.setupParams(name, 1, params);
 | |
| 
 | |
|     if (isDynamic) {
 | |
|       name = this.popStack();
 | |
|       delete options.name;
 | |
|     }
 | |
| 
 | |
|     if (indent) {
 | |
|       options.indent = JSON.stringify(indent);
 | |
|     }
 | |
|     options.helpers = 'helpers';
 | |
|     options.partials = 'partials';
 | |
|     options.decorators = 'container.decorators';
 | |
| 
 | |
|     if (!isDynamic) {
 | |
|       params.unshift(this.nameLookup('partials', name, 'partial'));
 | |
|     } else {
 | |
|       params.unshift(name);
 | |
|     }
 | |
| 
 | |
|     if (this.options.compat) {
 | |
|       options.depths = 'depths';
 | |
|     }
 | |
|     options = this.objectLiteral(options);
 | |
|     params.push(options);
 | |
| 
 | |
|     this.push(this.source.functionCall('container.invokePartial', '', params));
 | |
|   },
 | |
| 
 | |
|   // [assignToHash]
 | |
|   //
 | |
|   // On stack, before: value, ..., hash, ...
 | |
|   // On stack, after: ..., hash, ...
 | |
|   //
 | |
|   // Pops a value off the stack and assigns it to the current hash
 | |
|   assignToHash: function assignToHash(key) {
 | |
|     var value = this.popStack(),
 | |
|         context = undefined,
 | |
|         type = undefined,
 | |
|         id = undefined;
 | |
| 
 | |
|     if (this.trackIds) {
 | |
|       id = this.popStack();
 | |
|     }
 | |
|     if (this.stringParams) {
 | |
|       type = this.popStack();
 | |
|       context = this.popStack();
 | |
|     }
 | |
| 
 | |
|     var hash = this.hash;
 | |
|     if (context) {
 | |
|       hash.contexts[key] = context;
 | |
|     }
 | |
|     if (type) {
 | |
|       hash.types[key] = type;
 | |
|     }
 | |
|     if (id) {
 | |
|       hash.ids[key] = id;
 | |
|     }
 | |
|     hash.values[key] = value;
 | |
|   },
 | |
| 
 | |
|   pushId: function pushId(type, name, child) {
 | |
|     if (type === 'BlockParam') {
 | |
|       this.pushStackLiteral('blockParams[' + name[0] + '].path[' + name[1] + ']' + (child ? ' + ' + JSON.stringify('.' + child) : ''));
 | |
|     } else if (type === 'PathExpression') {
 | |
|       this.pushString(name);
 | |
|     } else if (type === 'SubExpression') {
 | |
|       this.pushStackLiteral('true');
 | |
|     } else {
 | |
|       this.pushStackLiteral('null');
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // HELPERS
 | |
| 
 | |
|   compiler: JavaScriptCompiler,
 | |
| 
 | |
|   compileChildren: function compileChildren(environment, options) {
 | |
|     var children = environment.children,
 | |
|         child = undefined,
 | |
|         compiler = undefined;
 | |
| 
 | |
|     for (var i = 0, l = children.length; i < l; i++) {
 | |
|       child = children[i];
 | |
|       compiler = new this.compiler(); // eslint-disable-line new-cap
 | |
| 
 | |
|       var existing = this.matchExistingProgram(child);
 | |
| 
 | |
|       if (existing == null) {
 | |
|         this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children
 | |
|         var index = this.context.programs.length;
 | |
|         child.index = index;
 | |
|         child.name = 'program' + index;
 | |
|         this.context.programs[index] = compiler.compile(child, options, this.context, !this.precompile);
 | |
|         this.context.decorators[index] = compiler.decorators;
 | |
|         this.context.environments[index] = child;
 | |
| 
 | |
|         this.useDepths = this.useDepths || compiler.useDepths;
 | |
|         this.useBlockParams = this.useBlockParams || compiler.useBlockParams;
 | |
|         child.useDepths = this.useDepths;
 | |
|         child.useBlockParams = this.useBlockParams;
 | |
|       } else {
 | |
|         child.index = existing.index;
 | |
|         child.name = 'program' + existing.index;
 | |
| 
 | |
|         this.useDepths = this.useDepths || existing.useDepths;
 | |
|         this.useBlockParams = this.useBlockParams || existing.useBlockParams;
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   matchExistingProgram: function matchExistingProgram(child) {
 | |
|     for (var i = 0, len = this.context.environments.length; i < len; i++) {
 | |
|       var environment = this.context.environments[i];
 | |
|       if (environment && environment.equals(child)) {
 | |
|         return environment;
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   programExpression: function programExpression(guid) {
 | |
|     var child = this.environment.children[guid],
 | |
|         programParams = [child.index, 'data', child.blockParams];
 | |
| 
 | |
|     if (this.useBlockParams || this.useDepths) {
 | |
|       programParams.push('blockParams');
 | |
|     }
 | |
|     if (this.useDepths) {
 | |
|       programParams.push('depths');
 | |
|     }
 | |
| 
 | |
|     return 'container.program(' + programParams.join(', ') + ')';
 | |
|   },
 | |
| 
 | |
|   useRegister: function useRegister(name) {
 | |
|     if (!this.registers[name]) {
 | |
|       this.registers[name] = true;
 | |
|       this.registers.list.push(name);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   push: function push(expr) {
 | |
|     if (!(expr instanceof Literal)) {
 | |
|       expr = this.source.wrap(expr);
 | |
|     }
 | |
| 
 | |
|     this.inlineStack.push(expr);
 | |
|     return expr;
 | |
|   },
 | |
| 
 | |
|   pushStackLiteral: function pushStackLiteral(item) {
 | |
|     this.push(new Literal(item));
 | |
|   },
 | |
| 
 | |
|   pushSource: function pushSource(source) {
 | |
|     if (this.pendingContent) {
 | |
|       this.source.push(this.appendToBuffer(this.source.quotedString(this.pendingContent), this.pendingLocation));
 | |
|       this.pendingContent = undefined;
 | |
|     }
 | |
| 
 | |
|     if (source) {
 | |
|       this.source.push(source);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   replaceStack: function replaceStack(callback) {
 | |
|     var prefix = ['('],
 | |
|         stack = undefined,
 | |
|         createdStack = undefined,
 | |
|         usedLiteral = undefined;
 | |
| 
 | |
|     /* istanbul ignore next */
 | |
|     if (!this.isInline()) {
 | |
|       throw new _exception2['default']('replaceStack on non-inline');
 | |
|     }
 | |
| 
 | |
|     // We want to merge the inline statement into the replacement statement via ','
 | |
|     var top = this.popStack(true);
 | |
| 
 | |
|     if (top instanceof Literal) {
 | |
|       // Literals do not need to be inlined
 | |
|       stack = [top.value];
 | |
|       prefix = ['(', stack];
 | |
|       usedLiteral = true;
 | |
|     } else {
 | |
|       // Get or create the current stack name for use by the inline
 | |
|       createdStack = true;
 | |
|       var _name = this.incrStack();
 | |
| 
 | |
|       prefix = ['((', this.push(_name), ' = ', top, ')'];
 | |
|       stack = this.topStack();
 | |
|     }
 | |
| 
 | |
|     var item = callback.call(this, stack);
 | |
| 
 | |
|     if (!usedLiteral) {
 | |
|       this.popStack();
 | |
|     }
 | |
|     if (createdStack) {
 | |
|       this.stackSlot--;
 | |
|     }
 | |
|     this.push(prefix.concat(item, ')'));
 | |
|   },
 | |
| 
 | |
|   incrStack: function incrStack() {
 | |
|     this.stackSlot++;
 | |
|     if (this.stackSlot > this.stackVars.length) {
 | |
|       this.stackVars.push('stack' + this.stackSlot);
 | |
|     }
 | |
|     return this.topStackName();
 | |
|   },
 | |
|   topStackName: function topStackName() {
 | |
|     return 'stack' + this.stackSlot;
 | |
|   },
 | |
|   flushInline: function flushInline() {
 | |
|     var inlineStack = this.inlineStack;
 | |
|     this.inlineStack = [];
 | |
|     for (var i = 0, len = inlineStack.length; i < len; i++) {
 | |
|       var entry = inlineStack[i];
 | |
|       /* istanbul ignore if */
 | |
|       if (entry instanceof Literal) {
 | |
|         this.compileStack.push(entry);
 | |
|       } else {
 | |
|         var stack = this.incrStack();
 | |
|         this.pushSource([stack, ' = ', entry, ';']);
 | |
|         this.compileStack.push(stack);
 | |
|       }
 | |
|     }
 | |
|   },
 | |
|   isInline: function isInline() {
 | |
|     return this.inlineStack.length;
 | |
|   },
 | |
| 
 | |
|   popStack: function popStack(wrapped) {
 | |
|     var inline = this.isInline(),
 | |
|         item = (inline ? this.inlineStack : this.compileStack).pop();
 | |
| 
 | |
|     if (!wrapped && item instanceof Literal) {
 | |
|       return item.value;
 | |
|     } else {
 | |
|       if (!inline) {
 | |
|         /* istanbul ignore next */
 | |
|         if (!this.stackSlot) {
 | |
|           throw new _exception2['default']('Invalid stack pop');
 | |
|         }
 | |
|         this.stackSlot--;
 | |
|       }
 | |
|       return item;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   topStack: function topStack() {
 | |
|     var stack = this.isInline() ? this.inlineStack : this.compileStack,
 | |
|         item = stack[stack.length - 1];
 | |
| 
 | |
|     /* istanbul ignore if */
 | |
|     if (item instanceof Literal) {
 | |
|       return item.value;
 | |
|     } else {
 | |
|       return item;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   contextName: function contextName(context) {
 | |
|     if (this.useDepths && context) {
 | |
|       return 'depths[' + context + ']';
 | |
|     } else {
 | |
|       return 'depth' + context;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   quotedString: function quotedString(str) {
 | |
|     return this.source.quotedString(str);
 | |
|   },
 | |
| 
 | |
|   objectLiteral: function objectLiteral(obj) {
 | |
|     return this.source.objectLiteral(obj);
 | |
|   },
 | |
| 
 | |
|   aliasable: function aliasable(name) {
 | |
|     var ret = this.aliases[name];
 | |
|     if (ret) {
 | |
|       ret.referenceCount++;
 | |
|       return ret;
 | |
|     }
 | |
| 
 | |
|     ret = this.aliases[name] = this.source.wrap(name);
 | |
|     ret.aliasable = true;
 | |
|     ret.referenceCount = 1;
 | |
| 
 | |
|     return ret;
 | |
|   },
 | |
| 
 | |
|   setupHelper: function setupHelper(paramSize, name, blockHelper) {
 | |
|     var params = [],
 | |
|         paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);
 | |
|     var foundHelper = this.nameLookup('helpers', name, 'helper'),
 | |
|         callContext = this.aliasable(this.contextName(0) + ' != null ? ' + this.contextName(0) + ' : (container.nullContext || {})');
 | |
| 
 | |
|     return {
 | |
|       params: params,
 | |
|       paramsInit: paramsInit,
 | |
|       name: foundHelper,
 | |
|       callParams: [callContext].concat(params)
 | |
|     };
 | |
|   },
 | |
| 
 | |
|   setupParams: function setupParams(helper, paramSize, params) {
 | |
|     var options = {},
 | |
|         contexts = [],
 | |
|         types = [],
 | |
|         ids = [],
 | |
|         objectArgs = !params,
 | |
|         param = undefined;
 | |
| 
 | |
|     if (objectArgs) {
 | |
|       params = [];
 | |
|     }
 | |
| 
 | |
|     options.name = this.quotedString(helper);
 | |
|     options.hash = this.popStack();
 | |
| 
 | |
|     if (this.trackIds) {
 | |
|       options.hashIds = this.popStack();
 | |
|     }
 | |
|     if (this.stringParams) {
 | |
|       options.hashTypes = this.popStack();
 | |
|       options.hashContexts = this.popStack();
 | |
|     }
 | |
| 
 | |
|     var inverse = this.popStack(),
 | |
|         program = this.popStack();
 | |
| 
 | |
|     // Avoid setting fn and inverse if neither are set. This allows
 | |
|     // helpers to do a check for `if (options.fn)`
 | |
|     if (program || inverse) {
 | |
|       options.fn = program || 'container.noop';
 | |
|       options.inverse = inverse || 'container.noop';
 | |
|     }
 | |
| 
 | |
|     // The parameters go on to the stack in order (making sure that they are evaluated in order)
 | |
|     // so we need to pop them off the stack in reverse order
 | |
|     var i = paramSize;
 | |
|     while (i--) {
 | |
|       param = this.popStack();
 | |
|       params[i] = param;
 | |
| 
 | |
|       if (this.trackIds) {
 | |
|         ids[i] = this.popStack();
 | |
|       }
 | |
|       if (this.stringParams) {
 | |
|         types[i] = this.popStack();
 | |
|         contexts[i] = this.popStack();
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (objectArgs) {
 | |
|       options.args = this.source.generateArray(params);
 | |
|     }
 | |
| 
 | |
|     if (this.trackIds) {
 | |
|       options.ids = this.source.generateArray(ids);
 | |
|     }
 | |
|     if (this.stringParams) {
 | |
|       options.types = this.source.generateArray(types);
 | |
|       options.contexts = this.source.generateArray(contexts);
 | |
|     }
 | |
| 
 | |
|     if (this.options.data) {
 | |
|       options.data = 'data';
 | |
|     }
 | |
|     if (this.useBlockParams) {
 | |
|       options.blockParams = 'blockParams';
 | |
|     }
 | |
|     return options;
 | |
|   },
 | |
| 
 | |
|   setupHelperArgs: function setupHelperArgs(helper, paramSize, params, useRegister) {
 | |
|     var options = this.setupParams(helper, paramSize, params);
 | |
|     options.loc = JSON.stringify(this.source.currentLocation);
 | |
|     options = this.objectLiteral(options);
 | |
|     if (useRegister) {
 | |
|       this.useRegister('options');
 | |
|       params.push('options');
 | |
|       return ['options=', options];
 | |
|     } else if (params) {
 | |
|       params.push(options);
 | |
|       return '';
 | |
|     } else {
 | |
|       return options;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| (function () {
 | |
|   var reservedWords = ('break else new var' + ' case finally return void' + ' catch for switch while' + ' continue function this with' + ' default if throw' + ' delete in try' + ' do instanceof typeof' + ' abstract enum int short' + ' boolean export interface static' + ' byte extends long super' + ' char final native synchronized' + ' class float package throws' + ' const goto private transient' + ' debugger implements protected volatile' + ' double import public let yield await' + ' null true false').split(' ');
 | |
| 
 | |
|   var compilerWords = JavaScriptCompiler.RESERVED_WORDS = {};
 | |
| 
 | |
|   for (var i = 0, l = reservedWords.length; i < l; i++) {
 | |
|     compilerWords[reservedWords[i]] = true;
 | |
|   }
 | |
| })();
 | |
| 
 | |
| /**
 | |
|  * @deprecated May be removed in the next major version
 | |
|  */
 | |
| JavaScriptCompiler.isValidJavaScriptVariableName = function (name) {
 | |
|   return !JavaScriptCompiler.RESERVED_WORDS[name] && /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name);
 | |
| };
 | |
| 
 | |
| function strictLookup(requireTerminal, compiler, parts, type) {
 | |
|   var stack = compiler.popStack(),
 | |
|       i = 0,
 | |
|       len = parts.length;
 | |
|   if (requireTerminal) {
 | |
|     len--;
 | |
|   }
 | |
| 
 | |
|   for (; i < len; i++) {
 | |
|     stack = compiler.nameLookup(stack, parts[i], type);
 | |
|   }
 | |
| 
 | |
|   if (requireTerminal) {
 | |
|     return [compiler.aliasable('container.strict'), '(', stack, ', ', compiler.quotedString(parts[i]), ', ', JSON.stringify(compiler.source.currentLocation), ' )'];
 | |
|   } else {
 | |
|     return stack;
 | |
|   }
 | |
| }
 | |
| 
 | |
| exports.default = JavaScriptCompiler;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL2phdmFzY3JpcHQtY29tcGlsZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztvQkFBb0QsU0FBUzs7eUJBQ3ZDLGNBQWM7Ozs7cUJBQ1osVUFBVTs7dUJBQ2QsWUFBWTs7OztBQUVoQyxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDdEIsTUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Q0FDcEI7O0FBRUQsU0FBUyxrQkFBa0IsR0FBRyxFQUFFOztBQUVoQyxrQkFBa0IsQ0FBQyxTQUFTLEdBQUc7OztBQUc3QixZQUFVLEVBQUUsb0JBQVMsTUFBTSxFQUFFLElBQUksZUFBZTtBQUM5QyxXQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7R0FDOUM7QUFDRCxlQUFhLEVBQUUsdUJBQVMsSUFBSSxFQUFFO0FBQzVCLFdBQU8sQ0FDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEVBQ2xDLFdBQVcsRUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUNwQixHQUFHLENBQ0osQ0FBQztHQUNIOztBQUVELGNBQVksRUFBRSx3QkFBVztBQUN2QixRQUFNLFFBQVEsMEJBQW9CO1FBQ2hDLFFBQVEsR0FBRyx1QkFBaUIsUUFBUSxDQUFDLENBQUM7QUFDeEMsV0FBTyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztHQUM3Qjs7QUFFRCxnQkFBYyxFQUFFLHdCQUFTLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFOztBQUVuRCxRQUFJLENBQUMsZUFBUSxNQUFNLENBQUMsRUFBRTtBQUNwQixZQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuQjtBQUNELFVBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7O0FBRTVDLFFB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LEVBQUU7QUFDbkIsU0FBSyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztHQUNwRDs7QUFFRCxNQUFJLGVBQWUsRUFBRTtBQUNuQixXQUFPLENBQ0wsUUFBUSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUN0QyxHQUFHLEVBQ0gsS0FBSyxFQUNMLElBQUksRUFDSixRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMvQixJQUFJLEVBQ0osSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxFQUMvQyxJQUFJLENBQ0wsQ0FBQztHQUNILE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O3FCQUVjLGtCQUFrQiIsImZpbGUiOiJqYXZhc2NyaXB0LWNvbXBpbGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ09NUElMRVJfUkVWSVNJT04sIFJFVklTSU9OX0NIQU5HRVMgfSBmcm9tICcuLi9iYXNlJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgQ29kZUdlbiBmcm9tICcuL2NvZGUtZ2VuJztcblxuZnVuY3Rpb24gTGl0ZXJhbCh2YWx1ZSkge1xuICB0aGlzLnZhbHVlID0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEphdmFTY3JpcHRDb21waWxlcigpIHt9XG5cbkphdmFTY3JpcHRDb21waWxlci5wcm90b3R5cGUgPSB7XG4gIC8vIFBVQkxJQyBBUEk6IFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgbWV0aG9kcyBpbiBhIHN1YmNsYXNzIHRvIHByb3ZpZGVcbiAgLy8gYWx0ZXJuYXRpdmUgY29tcGlsZWQgZm9ybXMgZm9yIG5hbWUgbG9va3VwIGFuZCBidWZmZXJpbmcgc2VtYW50aWNzXG4gIG5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSAvKiwgIHR5cGUgKi8pIHtcbiAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE5hbWVMb29rdXAocGFyZW50LCBuYW1lKTtcbiAgfSxcbiAgZGVwdGhlZExvb2t1cDogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiBbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxvb2t1cCcpLFxuICAgICAgJyhkZXB0aHMsICcsXG4gICAgICBKU09OLnN0cmluZ2lmeShuYW1lKSxcbiAgICAgICcpJ1xuICAgIF07XG4gIH0sXG5cbiAgY29tcGlsZXJJbmZvOiBmdW5jdGlvbigpIHtcbiAgICBjb25zdCByZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OLFxuICAgICAgdmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW3JldmlzaW9uXTtcbiAgICByZXR1cm4gW3JldmlzaW9uLCB2ZXJzaW9uc107XG4gIH0sXG5cbiAgYXBwZW5kVG9CdWZmZXI6IGZ1bmN0aW9uKHNvdXJjZSwgbG9jYXRpb24sIGV4cGxpY2l0KSB7XG4gICAgLy8gRm9yY2UgYSBzb3VyY2UgYXMgdGhpcyBzaW1wbGlmaWVzIHRoZSBtZXJnZSBsb2dpYy5cbiAgICBpZiAoIWlzQXJyYXkoc291cmNlKSkge1xuICAgICAgc291cmNlID0gW3NvdXJjZV07XG4gICAgfVxuICAgIHNvdXJjZSA9IHRoaXMuc291cmNlLndyYXAoc291cmNlLCBsb2NhdGlvbik7XG5cbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5pc1NpbXBsZSkge1xuICAgICAgcmV0dXJuIFsncmV0dXJuICcsIHNvdXJjZSwgJzsnXTtcbiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0KSB7XG4gICAgICAvLyBUaGlzIGlzIGEgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIG9wZXJhdGlvbiBvY2N1cnMgYXMgYSBjaGlsZCBvZiBhbm90aGVyXG4gICAgICAvLyBjb25zdHJ1Y3QsIGdlbmVyYWxseSBicmFjZXMuIFdlIGhhdmUgdG8gZXhwbGljaXRseSBvdXRwdXQgdGhlc2UgYnVmZmVyXG4gICAgICAvLyBvcGVyYXRpb25zIHRvIGVuc3VyZSB0aGF0IHRoZSBlbWl0dGVkIGNvZGUgZ29lcyBpbiB0aGUgY29ycmVjdCBsb2NhdGlvbi5cbiAgICAgIHJldHVybiBbJ2J1ZmZlciArPSAnLCBzb3VyY2UsICc7J107XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvdXJjZS5hcHBlbmRUb0J1ZmZlciA9IHRydWU7XG4gICAgICByZXR1cm4gc291cmNlO1xuICAgIH1cbiAgfSxcblxuICBpbml0aWFsaXplQnVmZmVyOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdW90ZWRTdHJpbmcoJycpO1xuICB9LFxuICAvLyBFTkQgUFVCTElDIEFQSVxuICBpbnRlcm5hbE5hbWVMb29rdXA6IGZ1bmN0aW9uKHBhcmVudCwgbmFtZSkge1xuICAgIHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCA9IHRydWU7XG4gICAgcmV0dXJuIFsnbG9va3VwUHJvcGVydHkoJywgcGFyZW50LCAnLCcsIEpTT04uc3RyaW5naWZ5KG5hbWUpLCAnKSddO1xuICB9LFxuXG4gIGxvb2t1cFByb3BlcnR5RnVuY3Rpb25Jc1VzZWQ6IGZhbHNlLFxuXG4gIGNvbXBpbGU6IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zLCBjb250ZXh0LCBhc09iamVjdCkge1xuICAgIHRoaXMuZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RyaW5nUGFyYW1zID0gdGhpcy5vcHRpb25zLnN0cmluZ1BhcmFtcztcbiAgICB0aGlzLnRyYWNrSWRzID0gdGhpcy5vcHRpb25zLnRyYWNrSWRzO1xuICAgIHRoaXMucHJlY29tcGlsZSA9ICFhc09iamVjdDtcblxuICAgIHRoaXMubmFtZSA9IHRoaXMuZW52aXJvbm1lbnQubmFtZTtcbiAgICB0aGlzLmlzQ2hpbGQgPSAhIWNvbnRleHQ7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCB7XG4gICAgICBkZWNvcmF0b3JzOiBbXSxcbiAgICAgIHByb2dyYW1zOiBbXSxcbiAgICAgIGVudmlyb25tZW50czogW11cbiAgICB9O1xuXG4gICAgdGhpcy5wcmVhbWJsZSgpO1xuXG4gICAgdGhpcy5zdGFja1Nsb3QgPSAwO1xuICAgIHRoaXMuc3RhY2tWYXJzID0gW107XG4gICAgdGhpcy5hbGlhc2VzID0ge307XG4gICAgdGhpcy5yZWdpc3RlcnMgPSB7IGxpc3Q6IFtdIH07XG4gICAgdGhpcy5oYXNoZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBpbGVTdGFjayA9IFtdO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICB0aGlzLmJsb2NrUGFyYW1zID0gW107XG5cbiAgICB0aGlzLmNvbXBpbGVDaGlsZHJlbihlbnZpcm9ubWVudCwgb3B0aW9ucyk7XG5cbiAgICB0aGlzLnVzZURlcHRocyA9XG4gICAgICB0aGlzLnVzZURlcHRocyB8fFxuICAgICAgZW52aXJvbm1lbnQudXNlRGVwdGhzIHx8XG4gICAgICBlbnZpcm9ubWVudC51c2VEZWNvcmF0b3JzIHx8XG4gICAgICB0aGlzLm9wdGlvbnMuY29tcGF0O1xuICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGVudmlyb25tZW50LnVzZUJsb2NrUGFyYW1zO1xuXG4gICAgbGV0IG9wY29kZXMgPSBlbnZpcm9ubWVudC5vcGNvZGVzLFxuICAgICAgb3Bjb2RlLFxuICAgICAgZmlyc3RMb2MsXG4gICAgICBpLFxuICAgICAgbDtcblxuICAgIGZvciAoaSA9IDAsIGwgPSBvcGNvZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgb3Bjb2RlID0gb3Bjb2Rlc1tpXTtcblxuICAgICAgdGhpcy5zb3VyY2UuY3VycmVudExvY2F0aW9uID0gb3Bjb2RlLmxvYztcbiAgICAgIGZpcnN0TG9jID0gZmlyc3RMb2MgfHwgb3Bjb2RlLmxvYztcbiAgICAgIHRoaXNbb3Bjb2RlLm9wY29kZV0uYXBwbHkodGhpcywgb3Bjb2RlLmFyZ3MpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGFueSB0cmFpbGluZyBjb250ZW50IHRoYXQgbWlnaHQgYmUgcGVuZGluZy5cbiAgICB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb24gPSBmaXJzdExvYztcbiAgICB0aGlzLnB1c2hTb3VyY2UoJycpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBpZiAodGhpcy5zdGFja1Nsb3QgfHwgdGhpcy5pbmxpbmVTdGFjay5sZW5ndGggfHwgdGhpcy5jb21waWxlU3RhY2subGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDb21waWxlIGNvbXBsZXRlZCB3aXRoIGNvbnRlbnQgbGVmdCBvbiBzdGFjaycpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5kZWNvcmF0b3JzLmlzRW1wdHkoKSkge1xuICAgICAgdGhpcy51c2VEZWNvcmF0b3JzID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoW1xuICAgICAgICAndmFyIGRlY29yYXRvcnMgPSBjb250YWluZXIuZGVjb3JhdG9ycywgJyxcbiAgICAgICAgdGhpcy5sb29rdXBQcm9wZXJ0eUZ1bmN0aW9uVmFyRGVjbGFyYXRpb24oKSxcbiAgICAgICAgJztcXG4nXG4gICAgICBdKTtcbiAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCdyZXR1cm4gZm47Jyk7XG5cbiAgICAgIGlmIChhc09iamVjdCkge1xuICAgICAgICB0aGlzLmRlY29yYXRvcnMgPSBGdW5jdGlvbi5hcHBseSh0aGlzLCBbXG4gICAgICAgICAgJ2ZuJyxcbiAgICAgICAgICAncHJvcHMnLFxuICAgICAgICAgICdjb250YWluZXInLFxuICAgICAgICAgICdkZXB0aDAnLFxuICAgICAgICAgICdkYXRhJyxcbiAgICAgICAgICAnYmxvY2tQYXJhbXMnLFxuICAgICAgICAgICdkZXB0aHMnLFxuICAgICAgICAgIHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpXG4gICAgICAgIF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kZWNvcmF0b3JzLnByZXBlbmQoXG4gICAgICAgICAgJ2Z1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBkZXB0aDAsIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcXG4nXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKCd9XFxuJyk7XG4gICAgICAgIHRoaXMuZGVjb3JhdG9ycyA9IHRoaXMuZGVjb3JhdG9ycy5tZXJnZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlY29yYXRvcnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgbGV0IGZuID0gdGhpcy5jcmVhdGVGdW5jdGlvbkNvbnRleHQoYXNPYmplY3QpO1xuICAgIGlmICghdGhpcy5pc0NoaWxkKSB7XG4gICAgICBsZXQgcmV0ID0ge1xuICAgICAgICBjb21waWxlcjogdGhpcy5jb21waWxlckluZm8oKSxcbiAgICAgICAgbWFpbjogZm5cbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmRlY29yYXRvcnMpIHtcbiAgICAgICAgcmV0Lm1haW5fZCA9IHRoaXMuZGVjb3JhdG9yczsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgICAgICAgcmV0LnVzZURlY29yYXRvcnMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBsZXQgeyBwcm9ncmFtcywgZGVjb3JhdG9ycyB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW1zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAocHJvZ3JhbXNbaV0pIHtcbiAgICAgICAgICByZXRbaV0gPSBwcm9ncmFtc1tpXTtcbiAgICAgICAgICBpZiAoZGVjb3JhdG9yc1tpXSkge1xuICAgICAgICAgICAgcmV0W2kgKyAnX2QnXSA9IGRlY29yYXRvcnNbaV07XG4gICAgICAgICAgICByZXQudXNlRGVjb3JhdG9ycyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LnVzZVBhcnRpYWwpIHtcbiAgICAgICAgcmV0LnVzZVBhcnRpYWwgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICAgIHJldC51c2VEYXRhID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgICByZXQudXNlRGVwdGhzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICAgIHJldC51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5vcHRpb25zLmNvbXBhdCkge1xuICAgICAgICByZXQuY29tcGF0ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhc09iamVjdCkge1xuICAgICAgICByZXQuY29tcGlsZXIgPSBKU09OLnN0cmluZ2lmeShyZXQuY29tcGlsZXIpO1xuXG4gICAgICAgIHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbiA9IHsgc3RhcnQ6IHsgbGluZTogMSwgY29sdW1uOiAwIH0gfTtcbiAgICAgICAgcmV0ID0gdGhpcy5vYmplY3RMaXRlcmFsKHJldCk7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc3JjTmFtZSkge1xuICAgICAgICAgIHJldCA9IHJldC50b1N0cmluZ1dpdGhTb3VyY2VNYXAoeyBmaWxlOiBvcHRpb25zLmRlc3ROYW1lIH0pO1xuICAgICAgICAgIHJldC5tYXAgPSByZXQubWFwICYmIHJldC5tYXAudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXQgPSByZXQudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0LmNvbXBpbGVyT3B0aW9ucyA9IHRoaXMub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH1cbiAgfSxcblxuICBwcmVhbWJsZTogZnVuY3Rpb24oKSB7XG4gICAgLy8gdHJhY2sgdGhlIGxhc3QgY29udGV4dCBwdXNoZWQgaW50byBwbGFjZSB0byBhbGxvdyBza2lwcGluZyB0aGVcbiAgICAvLyBnZXRDb250ZXh0IG9wY29kZSB3aGVuIGl0IHdvdWxkIGJlIGEgbm9vcFxuICAgIHRoaXMubGFzdENvbnRleHQgPSAwO1xuICAgIHRoaXMuc291cmNlID0gbmV3IENvZGVHZW4odGhpcy5vcHRpb25zLnNyY05hbWUpO1xuICAgIHRoaXMuZGVjb3JhdG9ycyA9IG5ldyBDb2RlR2VuKHRoaXMub3B0aW9ucy5zcmNOYW1lKTtcbiAgfSxcblxuICBjcmVhdGVGdW5jdGlvbkNvbnRleHQ6IGZ1bmN0aW9uKGFzT2JqZWN0KSB7XG4gICAgbGV0IHZhckRlY2xhcmF0aW9ucyA9ICcnO1xuXG4gICAgbGV0IGxvY2FscyA9IHRoaXMuc3RhY2tWYXJzLmNvbmNhdCh0aGlzLnJlZ2lzdGVycy5saXN0KTtcbiAgICBpZiAobG9jYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCAnICsgbG9jYWxzLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgLy8gR2VuZXJhdGUgbWluaW1pemVyIGFsaWFzIG1hcHBpbmdzXG4gICAgLy9cbiAgICAvLyBXaGVuIHVzaW5nIHRydWUgU291cmNlTm9kZXMsIHRoaXMgd2lsbCB1cGRhdGUgYWxsIHJlZmVyZW5jZXMgdG8gdGhlIGdpdmVuIGFsaWFzXG4gICAgLy8gYXMgdGhlIHNvdXJjZSBub2RlcyBhcmUgcmV1c2VkIGluIHNpdHUuIEZvciB0aGUgbm9uLXNvdXJjZSBub2RlIGNvbXBpbGF0aW9uIG1vZGUsXG4gICAgLy8gYWxpYXNlcyB3aWxsIG5vdCBiZSB1c2VkLCBidXQgdGhpcyBjYXNlIGlzIGFscmVhZHkgYmVpbmcgcnVuIG9uIHRoZSBjbGllbnQgYW5kXG4gICAgLy8gd2UgYXJlbid0IGNvbmNlcm4gYWJvdXQgbWluaW1pemluZyB0aGUgdGVtcGxhdGUgc2l6ZS5cbiAgICBsZXQgYWxpYXNDb3VudCA9IDA7XG4gICAgT2JqZWN0LmtleXModGhpcy5hbGlhc2VzKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGxldCBub2RlID0gdGhpcy5hbGlhc2VzW2FsaWFzXTtcbiAgICAgIGlmIChub2RlLmNoaWxkcmVuICYmIG5vZGUucmVmZXJlbmNlQ291bnQgPiAxKSB7XG4gICAgICAgIHZhckRlY2xhcmF0aW9ucyArPSAnLCBhbGlhcycgKyArK2FsaWFzQ291bnQgKyAnPScgKyBhbGlhcztcbiAgICAgICAgbm9kZS5jaGlsZHJlblswXSA9ICdhbGlhcycgKyBhbGlhc0NvdW50O1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMubG9va3VwUHJvcGVydHlGdW5jdGlvbklzVXNlZCkge1xuICAgICAgdmFyRGVjbGFyYXRpb25zICs9ICcsICcgKyB0aGlzLmxvb2t1cFByb3BlcnR5RnVuY3Rpb25WYXJEZWNsYXJhdGlvbigpO1xuICAgIH1cblxuICAgIGxldCBwYXJhbXMgPSBbJ2NvbnRhaW5lcicsICdkZXB0aDAnLCAnaGVscGVycycsICdwYXJ0aWFscycsICdkYXRhJ107XG5cbiAgICBpZiAodGhpcy51c2VCbG9ja1BhcmFtcyB8fCB0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcGFyYW1zLnB1c2goJ2RlcHRocycpO1xuICAgIH1cblxuICAgIC8vIFBlcmZvcm0gYSBzZWNvbmQgcGFzcyBvdmVyIHRoZSBvdXRwdXQgdG8gbWVyZ2UgY29udGVudCB3aGVuIHBvc3NpYmxlXG4gICAgbGV0IHNvdXJjZSA9IHRoaXMubWVyZ2VTb3VyY2UodmFyRGVjbGFyYXRpb25zKTtcblxuICAgIGlmIChhc09iamVjdCkge1xuICAgICAgcGFyYW1zLnB1c2goc291cmNlKTtcblxuICAgICAgcmV0dXJuIEZ1bmN0aW9uLmFwcGx5KHRoaXMsIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS53cmFwKFtcbiAgICAgICAgJ2Z1bmN0aW9uKCcsXG4gICAgICAgIHBhcmFtcy5qb2luKCcsJyksXG4gICAgICAgICcpIHtcXG4gICcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgJ30nXG4gICAgICBdKTtcbiAgICB9XG4gIH0sXG4gIG1lcmdlU291cmNlOiBmdW5jdGlvbih2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICBsZXQgaXNTaW1wbGUgPSB0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlLFxuICAgICAgYXBwZW5kT25seSA9ICF0aGlzLmZvcmNlQnVmZmVyLFxuICAgICAgYXBwZW5kRmlyc3QsXG4gICAgICBzb3VyY2VTZWVuLFxuICAgICAgYnVmZmVyU3RhcnQsXG4gICAgICBidWZmZXJFbmQ7XG4gICAgdGhpcy5zb3VyY2UuZWFjaChsaW5lID0+IHtcbiAgICAgIGlmIChsaW5lLmFwcGVuZFRvQnVmZmVyKSB7XG4gICAgICAgIGlmIChidWZmZXJTdGFydCkge1xuICAgICAgICAgIGxpbmUucHJlcGVuZCgnICArICcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gbGluZTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJFbmQgPSBsaW5lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGJ1ZmZlclN0YXJ0KSB7XG4gICAgICAgICAgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgICAgICBhcHBlbmRGaXJzdCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZmZlclN0YXJ0LnByZXBlbmQoJ2J1ZmZlciArPSAnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnVmZmVyRW5kLmFkZCgnOycpO1xuICAgICAgICAgIGJ1ZmZlclN0YXJ0ID0gYnVmZmVyRW5kID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgc291cmNlU2VlbiA9IHRydWU7XG4gICAgICAgIGlmICghaXNTaW1wbGUpIHtcbiAgICAgICAgICBhcHBlbmRPbmx5ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChhcHBlbmRPbmx5KSB7XG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2UgaWYgKCFzb3VyY2VTZWVuKSB7XG4gICAgICAgIHRoaXMuc291cmNlLnB1c2goJ3JldHVybiBcIlwiOycpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXJEZWNsYXJhdGlvbnMgKz1cbiAgICAgICAgJywgYnVmZmVyID0gJyArIChhcHBlbmRGaXJzdCA/ICcnIDogdGhpcy5pbml0aWFsaXplQnVmZmVyKCkpO1xuXG4gICAgICBpZiAoYnVmZmVyU3RhcnQpIHtcbiAgICAgICAgYnVmZmVyU3RhcnQucHJlcGVuZCgncmV0dXJuIGJ1ZmZlciArICcpO1xuICAgICAgICBidWZmZXJFbmQuYWRkKCc7Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS5wdXNoKCdyZXR1cm4gYnVmZmVyOycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YXJEZWNsYXJhdGlvbnMpIHtcbiAgICAgIHRoaXMuc291cmNlLnByZXBlbmQoXG4gICAgICAgICd2YXIgJyArIHZhckRlY2xhcmF0aW9ucy5zdWJzdHJpbmcoMikgKyAoYXBwZW5kRmlyc3QgPyAnJyA6ICc7XFxuJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc291cmNlLm1lcmdlKCk7XG4gIH0sXG5cbiAgbG9va3VwUHJvcGVydHlGdW5jdGlvblZhckRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gYFxuICAgICAgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cbiAgICBgLnRyaW0oKTtcbiAgfSxcblxuICAvLyBbYmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gT24gc3RhY2ssIGFmdGVyOiByZXR1cm4gdmFsdWUgb2YgYmxvY2tIZWxwZXJNaXNzaW5nXG4gIC8vXG4gIC8vIFRoZSBwdXJwb3NlIG9mIHRoaXMgb3Bjb2RlIGlzIHRvIHRha2UgYSBibG9jayBvZiB0aGUgZm9ybVxuICAvLyBge3sjdGhpcy5mb299fS4uLnt7L3RoaXMuZm9vfX1gLCByZXNvbHZlIHRoZSB2YWx1ZSBvZiBgZm9vYCwgYW5kXG4gIC8vIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIHdpdGggdGhlIHJlc3VsdCBvZiBwcm9wZXJseVxuICAvLyBpbnZva2luZyBibG9ja0hlbHBlck1pc3NpbmcuXG4gIGJsb2NrVmFsdWU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBsZXQgYmxvY2tIZWxwZXJNaXNzaW5nID0gdGhpcy5hbGlhc2FibGUoXG4gICAgICAgICdjb250YWluZXIuaG9va3MuYmxvY2tIZWxwZXJNaXNzaW5nJ1xuICAgICAgKSxcbiAgICAgIHBhcmFtcyA9IFt0aGlzLmNvbnRleHROYW1lKDApXTtcbiAgICB0aGlzLnNldHVwSGVscGVyQXJncyhuYW1lLCAwLCBwYXJhbXMpO1xuXG4gICAgbGV0IGJsb2NrTmFtZSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICBwYXJhbXMuc3BsaWNlKDEsIDAsIGJsb2NrTmFtZSk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYW1iaWd1b3VzQmxvY2tWYWx1ZV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogaGFzaCwgaW52ZXJzZSwgcHJvZ3JhbSwgdmFsdWVcbiAgLy8gQ29tcGlsZXIgdmFsdWUsIGJlZm9yZTogbGFzdEhlbHBlcj12YWx1ZSBvZiBsYXN0IGZvdW5kIGhlbHBlciwgaWYgYW55XG4gIC8vIE9uIHN0YWNrLCBhZnRlciwgaWYgbm8gbGFzdEhlbHBlcjogc2FtZSBhcyBbYmxvY2tWYWx1ZV1cbiAgLy8gT24gc3RhY2ssIGFmdGVyLCBpZiBsYXN0SGVscGVyOiB2YWx1ZVxuICBhbWJpZ3VvdXNCbG9ja1ZhbHVlOiBmdW5jdGlvbigpIHtcbiAgICAvLyBXZSdyZSBiZWluZyBhIGJpdCBjaGVla3kgYW5kIHJldXNpbmcgdGhlIG9wdGlvbnMgdmFsdWUgZnJvbSB0aGUgcHJpb3IgZXhlY1xuICAgIGxldCBibG9ja0hlbHBlck1pc3NpbmcgPSB0aGlzLmFsaWFzYWJsZShcbiAgICAgICAgJ2NvbnRhaW5lci5ob29rcy5ibG9ja0hlbHBlck1pc3NpbmcnXG4gICAgICApLFxuICAgICAgcGFyYW1zID0gW3RoaXMuY29udGV4dE5hbWUoMCldO1xuICAgIHRoaXMuc2V0dXBIZWxwZXJBcmdzKCcnLCAwLCBwYXJhbXMsIHRydWUpO1xuXG4gICAgdGhpcy5mbHVzaElubGluZSgpO1xuXG4gICAgbGV0IGN1cnJlbnQgPSB0aGlzLnRvcFN0YWNrKCk7XG4gICAgcGFyYW1zLnNwbGljZSgxLCAwLCBjdXJyZW50KTtcblxuICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAnaWYgKCEnLFxuICAgICAgdGhpcy5sYXN0SGVscGVyLFxuICAgICAgJykgeyAnLFxuICAgICAgY3VycmVudCxcbiAgICAgICcgPSAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKGJsb2NrSGVscGVyTWlzc2luZywgJ2NhbGwnLCBwYXJhbXMpLFxuICAgICAgJ30nXG4gICAgXSk7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZENvbnRlbnRdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBBcHBlbmRzIHRoZSBzdHJpbmcgdmFsdWUgb2YgYGNvbnRlbnRgIHRvIHRoZSBjdXJyZW50IGJ1ZmZlclxuICBhcHBlbmRDb250ZW50OiBmdW5jdGlvbihjb250ZW50KSB7XG4gICAgaWYgKHRoaXMucGVuZGluZ0NvbnRlbnQpIHtcbiAgICAgIGNvbnRlbnQgPSB0aGlzLnBlbmRpbmdDb250ZW50ICsgY29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb24gPSB0aGlzLnNvdXJjZS5jdXJyZW50TG9jYXRpb247XG4gICAgfVxuXG4gICAgdGhpcy5wZW5kaW5nQ29udGVudCA9IGNvbnRlbnQ7XG4gIH0sXG5cbiAgLy8gW2FwcGVuZF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IC4uLlxuICAvL1xuICAvLyBDb2VyY2VzIGB2YWx1ZWAgdG8gYSBTdHJpbmcgYW5kIGFwcGVuZHMgaXQgdG8gdGhlIGN1cnJlbnQgYnVmZmVyLlxuICAvL1xuICAvLyBJZiBgdmFsdWVgIGlzIHRydXRoeSwgb3IgMCwgaXQgaXMgY29lcmNlZCBpbnRvIGEgc3RyaW5nIGFuZCBhcHBlbmRlZFxuICAvLyBPdGhlcndpc2UsIHRoZSBlbXB0eSBzdHJpbmcgaXMgYXBwZW5kZWRcbiAgYXBwZW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5pc0lubGluZSgpKSB7XG4gICAgICB0aGlzLnJlcGxhY2VTdGFjayhjdXJyZW50ID0+IFsnICE9IG51bGwgPyAnLCBjdXJyZW50LCAnIDogXCJcIiddKTtcblxuICAgICAgdGhpcy5wdXNoU291cmNlKHRoaXMuYXBwZW5kVG9CdWZmZXIodGhpcy5wb3BTdGFjaygpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBsb2NhbCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICdpZiAoJyxcbiAgICAgICAgbG9jYWwsXG4gICAgICAgICcgIT0gbnVsbCkgeyAnLFxuICAgICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKGxvY2FsLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAnIH0nXG4gICAgICBdKTtcbiAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmlzU2ltcGxlKSB7XG4gICAgICAgIHRoaXMucHVzaFNvdXJjZShbXG4gICAgICAgICAgJ2Vsc2UgeyAnLFxuICAgICAgICAgIHRoaXMuYXBwZW5kVG9CdWZmZXIoXCInJ1wiLCB1bmRlZmluZWQsIHRydWUpLFxuICAgICAgICAgICcgfSdcbiAgICAgICAgXSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFthcHBlbmRFc2NhcGVkXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIEVzY2FwZSBgdmFsdWVgIGFuZCBhcHBlbmQgaXQgdG8gdGhlIGJ1ZmZlclxuICBhcHBlbmRFc2NhcGVkOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnB1c2hTb3VyY2UoXG4gICAgICB0aGlzLmFwcGVuZFRvQnVmZmVyKFtcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uJyksXG4gICAgICAgICcoJyxcbiAgICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgICAnKSdcbiAgICAgIF0pXG4gICAgKTtcbiAgfSxcblxuICAvLyBbZ2V0Q29udGV4dF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vIENvbXBpbGVyIHZhbHVlLCBhZnRlcjogbGFzdENvbnRleHQ9ZGVwdGhcbiAgLy9cbiAgLy8gU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYGxhc3RDb250ZXh0YCBjb21waWxlciB2YWx1ZSB0byB0aGUgZGVwdGhcbiAgZ2V0Q29udGV4dDogZnVuY3Rpb24oZGVwdGgpIHtcbiAgICB0aGlzLmxhc3RDb250ZXh0ID0gZGVwdGg7XG4gIH0sXG5cbiAgLy8gW3B1c2hDb250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dCwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgY29udGV4dCBvbnRvIHRoZSBzdGFjay5cbiAgcHVzaENvbnRleHQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLmNvbnRleHROYW1lKHRoaXMubGFzdENvbnRleHQpKTtcbiAgfSxcblxuICAvLyBbbG9va3VwT25Db250ZXh0XVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBjdXJyZW50Q29udGV4dFtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgbmFtZWAgb24gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBPbkNvbnRleHQ6IGZ1bmN0aW9uKHBhcnRzLCBmYWxzeSwgc3RyaWN0LCBzY29wZWQpIHtcbiAgICBsZXQgaSA9IDA7XG5cbiAgICBpZiAoIXNjb3BlZCAmJiB0aGlzLm9wdGlvbnMuY29tcGF0ICYmICF0aGlzLmxhc3RDb250ZXh0KSB7XG4gICAgICAvLyBUaGUgZGVwdGhlZCBxdWVyeSBpcyBleHBlY3RlZCB0byBoYW5kbGUgdGhlIHVuZGVmaW5lZCBsb2dpYyBmb3IgdGhlIHJvb3QgbGV2ZWwgdGhhdFxuICAgICAgLy8gaXMgaW1wbGVtZW50ZWQgYmVsb3csIHNvIHdlIGV2YWx1YXRlIHRoYXQgZGlyZWN0bHkgaW4gY29tcGF0IG1vZGVcbiAgICAgIHRoaXMucHVzaCh0aGlzLmRlcHRoZWRMb29rdXAocGFydHNbaSsrXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnB1c2hDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KTtcbiAgfSxcblxuICAvLyBbbG9va3VwQmxvY2tQYXJhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogYmxvY2tQYXJhbVtuYW1lXSwgLi4uXG4gIC8vXG4gIC8vIExvb2tzIHVwIHRoZSB2YWx1ZSBvZiBgcGFydHNgIG9uIHRoZSBnaXZlbiBibG9jayBwYXJhbSBhbmQgcHVzaGVzXG4gIC8vIGl0IG9udG8gdGhlIHN0YWNrLlxuICBsb29rdXBCbG9ja1BhcmFtOiBmdW5jdGlvbihibG9ja1BhcmFtSWQsIHBhcnRzKSB7XG4gICAgdGhpcy51c2VCbG9ja1BhcmFtcyA9IHRydWU7XG5cbiAgICB0aGlzLnB1c2goWydibG9ja1BhcmFtc1snLCBibG9ja1BhcmFtSWRbMF0sICddWycsIGJsb2NrUGFyYW1JZFsxXSwgJ10nXSk7XG4gICAgdGhpcy5yZXNvbHZlUGF0aCgnY29udGV4dCcsIHBhcnRzLCAxKTtcbiAgfSxcblxuICAvLyBbbG9va3VwRGF0YV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogZGF0YSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggdGhlIGRhdGEgbG9va3VwIG9wZXJhdG9yXG4gIGxvb2t1cERhdGE6IGZ1bmN0aW9uKGRlcHRoLCBwYXJ0cywgc3RyaWN0KSB7XG4gICAgaWYgKCFkZXB0aCkge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCdkYXRhJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnY29udGFpbmVyLmRhdGEoZGF0YSwgJyArIGRlcHRoICsgJyknKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVQYXRoKCdkYXRhJywgcGFydHMsIDAsIHRydWUsIHN0cmljdCk7XG4gIH0sXG5cbiAgcmVzb2x2ZVBhdGg6IGZ1bmN0aW9uKHR5cGUsIHBhcnRzLCBpLCBmYWxzeSwgc3RyaWN0KSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdHJpY3QgfHwgdGhpcy5vcHRpb25zLmFzc3VtZU9iamVjdHMpIHtcbiAgICAgIHRoaXMucHVzaChzdHJpY3RMb29rdXAodGhpcy5vcHRpb25zLnN0cmljdCAmJiBzdHJpY3QsIHRoaXMsIHBhcnRzLCB0eXBlKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxlbiA9IHBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICAgIHRoaXMucmVwbGFjZVN0YWNrKGN1cnJlbnQgPT4ge1xuICAgICAgICBsZXQgbG9va3VwID0gdGhpcy5uYW1lTG9va3VwKGN1cnJlbnQsIHBhcnRzW2ldLCB0eXBlKTtcbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB6ZXJvIGFuZCBmYWxzZSBhcmUgaGFuZGxlZCBwcm9wZXJseSBpZiB0aGUgY29udGV4dCAoZmFsc3kgZmxhZylcbiAgICAgICAgLy8gbmVlZHMgdG8gaGF2ZSB0aGUgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlc2UgdmFsdWVzLlxuICAgICAgICBpZiAoIWZhbHN5KSB7XG4gICAgICAgICAgcmV0dXJuIFsnICE9IG51bGwgPyAnLCBsb29rdXAsICcgOiAnLCBjdXJyZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBPdGhlcndpc2Ugd2UgY2FuIHVzZSBnZW5lcmljIGZhbHN5IGhhbmRsaW5nXG4gICAgICAgICAgcmV0dXJuIFsnICYmICcsIGxvb2t1cF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cbiAgICB9XG4gIH0sXG5cbiAgLy8gW3Jlc29sdmVQb3NzaWJsZUxhbWJkYV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogdmFsdWUsIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc29sdmVkIHZhbHVlLCAuLi5cbiAgLy9cbiAgLy8gSWYgdGhlIGB2YWx1ZWAgaXMgYSBsYW1iZGEsIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGJ5XG4gIC8vIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGxhbWJkYVxuICByZXNvbHZlUG9zc2libGVMYW1iZGE6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucHVzaChbXG4gICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmxhbWJkYScpLFxuICAgICAgJygnLFxuICAgICAgdGhpcy5wb3BTdGFjaygpLFxuICAgICAgJywgJyxcbiAgICAgIHRoaXMuY29udGV4dE5hbWUoMCksXG4gICAgICAnKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbcHVzaFN0cmluZ1BhcmFtXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBzdHJpbmcsIGN1cnJlbnRDb250ZXh0LCAuLi5cbiAgLy9cbiAgLy8gVGhpcyBvcGNvZGUgaXMgZGVzaWduZWQgZm9yIHVzZSBpbiBzdHJpbmcgbW9kZSwgd2hpY2hcbiAgLy8gcHJvdmlkZXMgdGhlIHN0cmluZyB2YWx1ZSBvZiBhIHBhcmFtZXRlciBhbG9uZyB3aXRoIGl0c1xuICAvLyBkZXB0aCByYXRoZXIgdGhhbiByZXNvbHZpbmcgaXQgaW1tZWRpYXRlbHkuXG4gIHB1c2hTdHJpbmdQYXJhbTogZnVuY3Rpb24oc3RyaW5nLCB0eXBlKSB7XG4gICAgdGhpcy5wdXNoQ29udGV4dCgpO1xuICAgIHRoaXMucHVzaFN0cmluZyh0eXBlKTtcblxuICAgIC8vIElmIGl0J3MgYSBzdWJleHByZXNzaW9uLCB0aGUgc3RyaW5nIHJlc3VsdFxuICAgIC8vIHdpbGwgYmUgcHVzaGVkIGFmdGVyIHRoaXMgb3Bjb2RlLlxuICAgIGlmICh0eXBlICE9PSAnU3ViRXhwcmVzc2lvbicpIHtcbiAgICAgIGlmICh0eXBlb2Ygc3RyaW5nID09PSAnc3RyaW5nJykge1xuICAgICAgICB0aGlzLnB1c2hTdHJpbmcoc3RyaW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBlbXB0eUhhc2g6IGZ1bmN0aW9uKG9taXRFbXB0eSkge1xuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hJZHNcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0aGlzLnB1c2goJ3t9Jyk7IC8vIGhhc2hDb250ZXh0c1xuICAgICAgdGhpcy5wdXNoKCd7fScpOyAvLyBoYXNoVHlwZXNcbiAgICB9XG4gICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG9taXRFbXB0eSA/ICd1bmRlZmluZWQnIDogJ3t9Jyk7XG4gIH0sXG4gIHB1c2hIYXNoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5oYXNoKSB7XG4gICAgICB0aGlzLmhhc2hlcy5wdXNoKHRoaXMuaGFzaCk7XG4gICAgfVxuICAgIHRoaXMuaGFzaCA9IHsgdmFsdWVzOiB7fSwgdHlwZXM6IFtdLCBjb250ZXh0czogW10sIGlkczogW10gfTtcbiAgfSxcbiAgcG9wSGFzaDogZnVuY3Rpb24oKSB7XG4gICAgbGV0IGhhc2ggPSB0aGlzLmhhc2g7XG4gICAgdGhpcy5oYXNoID0gdGhpcy5oYXNoZXMucG9wKCk7XG5cbiAgICBpZiAodGhpcy50cmFja0lkcykge1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLmlkcykpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdHJpbmdQYXJhbXMpIHtcbiAgICAgIHRoaXMucHVzaCh0aGlzLm9iamVjdExpdGVyYWwoaGFzaC5jb250ZXh0cykpO1xuICAgICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnR5cGVzKSk7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHRoaXMub2JqZWN0TGl0ZXJhbChoYXNoLnZhbHVlcykpO1xuICB9LFxuXG4gIC8vIFtwdXNoU3RyaW5nXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiBxdW90ZWRTdHJpbmcoc3RyaW5nKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBxdW90ZWQgdmVyc2lvbiBvZiBgc3RyaW5nYCBvbnRvIHRoZSBzdGFja1xuICBwdXNoU3RyaW5nOiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodGhpcy5xdW90ZWRTdHJpbmcoc3RyaW5nKSk7XG4gIH0sXG5cbiAgLy8gW3B1c2hMaXRlcmFsXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiB2YWx1ZSwgLi4uXG4gIC8vXG4gIC8vIFB1c2hlcyBhIHZhbHVlIG9udG8gdGhlIHN0YWNrLiBUaGlzIG9wZXJhdGlvbiBwcmV2ZW50c1xuICAvLyB0aGUgY29tcGlsZXIgZnJvbSBjcmVhdGluZyBhIHRlbXBvcmFyeSB2YXJpYWJsZSB0byBob2xkXG4gIC8vIGl0LlxuICBwdXNoTGl0ZXJhbDogZnVuY3Rpb24odmFsdWUpIHtcbiAgICB0aGlzLnB1c2hTdGFja0xpdGVyYWwodmFsdWUpO1xuICB9LFxuXG4gIC8vIFtwdXNoUHJvZ3JhbV1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcHJvZ3JhbShndWlkKSwgLi4uXG4gIC8vXG4gIC8vIFB1c2ggYSBwcm9ncmFtIGV4cHJlc3Npb24gb250byB0aGUgc3RhY2suIFRoaXMgdGFrZXNcbiAgLy8gYSBjb21waWxlLXRpbWUgZ3VpZCBhbmQgY29udmVydHMgaXQgaW50byBhIHJ1bnRpbWUtYWNjZXNzaWJsZVxuICAvLyBleHByZXNzaW9uLlxuICBwdXNoUHJvZ3JhbTogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGlmIChndWlkICE9IG51bGwpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCh0aGlzLnByb2dyYW1FeHByZXNzaW9uKGd1aWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKG51bGwpO1xuICAgIH1cbiAgfSxcblxuICAvLyBbcmVnaXN0ZXJEZWNvcmF0b3JdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogLi4uXG4gIC8vXG4gIC8vIFBvcHMgb2ZmIHRoZSBkZWNvcmF0b3IncyBwYXJhbWV0ZXJzLCBpbnZva2VzIHRoZSBkZWNvcmF0b3IsXG4gIC8vIGFuZCBpbnNlcnRzIHRoZSBkZWNvcmF0b3IgaW50byB0aGUgZGVjb3JhdG9ycyBsaXN0LlxuICByZWdpc3RlckRlY29yYXRvcihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgZm91bmREZWNvcmF0b3IgPSB0aGlzLm5hbWVMb29rdXAoJ2RlY29yYXRvcnMnLCBuYW1lLCAnZGVjb3JhdG9yJyksXG4gICAgICBvcHRpb25zID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplKTtcblxuICAgIHRoaXMuZGVjb3JhdG9ycy5wdXNoKFtcbiAgICAgICdmbiA9ICcsXG4gICAgICB0aGlzLmRlY29yYXRvcnMuZnVuY3Rpb25DYWxsKGZvdW5kRGVjb3JhdG9yLCAnJywgW1xuICAgICAgICAnZm4nLFxuICAgICAgICAncHJvcHMnLFxuICAgICAgICAnY29udGFpbmVyJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICAgXSksXG4gICAgICAnIHx8IGZuOydcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlSGVscGVyXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBoZWxwZXIgaW52b2NhdGlvblxuICAvL1xuICAvLyBQb3BzIG9mZiB0aGUgaGVscGVyJ3MgcGFyYW1ldGVycywgaW52b2tlcyB0aGUgaGVscGVyLFxuICAvLyBhbmQgcHVzaGVzIHRoZSBoZWxwZXIncyByZXR1cm4gdmFsdWUgb250byB0aGUgc3RhY2suXG4gIC8vXG4gIC8vIElmIHRoZSBoZWxwZXIgaXMgbm90IGZvdW5kLCBgaGVscGVyTWlzc2luZ2AgaXMgY2FsbGVkLlxuICBpbnZva2VIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgaXNTaW1wbGUpIHtcbiAgICBsZXQgbm9uSGVscGVyID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuXG4gICAgbGV0IHBvc3NpYmxlRnVuY3Rpb25DYWxscyA9IFtdO1xuXG4gICAgaWYgKGlzU2ltcGxlKSB7XG4gICAgICAvLyBkaXJlY3QgY2FsbCB0byBoZWxwZXJcbiAgICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKGhlbHBlci5uYW1lKTtcbiAgICB9XG4gICAgLy8gY2FsbCBhIGZ1bmN0aW9uIGZyb20gdGhlIGlucHV0IG9iamVjdFxuICAgIHBvc3NpYmxlRnVuY3Rpb25DYWxscy5wdXNoKG5vbkhlbHBlcik7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICBwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMucHVzaChcbiAgICAgICAgdGhpcy5hbGlhc2FibGUoJ2NvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nJylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGZ1bmN0aW9uTG9va3VwQ29kZSA9IFtcbiAgICAgICcoJyxcbiAgICAgIHRoaXMuaXRlbXNTZXBhcmF0ZWRCeShwb3NzaWJsZUZ1bmN0aW9uQ2FsbHMsICd8fCcpLFxuICAgICAgJyknXG4gICAgXTtcbiAgICBsZXQgZnVuY3Rpb25DYWxsID0gdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKFxuICAgICAgZnVuY3Rpb25Mb29rdXBDb2RlLFxuICAgICAgJ2NhbGwnLFxuICAgICAgaGVscGVyLmNhbGxQYXJhbXNcbiAgICApO1xuICAgIHRoaXMucHVzaChmdW5jdGlvbkNhbGwpO1xuICB9LFxuXG4gIGl0ZW1zU2VwYXJhdGVkQnk6IGZ1bmN0aW9uKGl0ZW1zLCBzZXBhcmF0b3IpIHtcbiAgICBsZXQgcmVzdWx0ID0gW107XG4gICAgcmVzdWx0LnB1c2goaXRlbXNbMF0pO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdC5wdXNoKHNlcGFyYXRvciwgaXRlbXNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBbaW52b2tlS25vd25IZWxwZXJdXG4gIC8vXG4gIC8vIE9uIHN0YWNrLCBiZWZvcmU6IGhhc2gsIGludmVyc2UsIHByb2dyYW0sIHBhcmFtcy4uLiwgLi4uXG4gIC8vIE9uIHN0YWNrLCBhZnRlcjogcmVzdWx0IG9mIGhlbHBlciBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIGlzIHVzZWQgd2hlbiB0aGUgaGVscGVyIGlzIGtub3duIHRvIGV4aXN0LFxuICAvLyBzbyBhIGBoZWxwZXJNaXNzaW5nYCBmYWxsYmFjayBpcyBub3QgcmVxdWlyZWQuXG4gIGludm9rZUtub3duSGVscGVyOiBmdW5jdGlvbihwYXJhbVNpemUsIG5hbWUpIHtcbiAgICBsZXQgaGVscGVyID0gdGhpcy5zZXR1cEhlbHBlcihwYXJhbVNpemUsIG5hbWUpO1xuICAgIHRoaXMucHVzaCh0aGlzLnNvdXJjZS5mdW5jdGlvbkNhbGwoaGVscGVyLm5hbWUsICdjYWxsJywgaGVscGVyLmNhbGxQYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbaW52b2tlQW1iaWd1b3VzXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiBoYXNoLCBpbnZlcnNlLCBwcm9ncmFtLCBwYXJhbXMuLi4sIC4uLlxuICAvLyBPbiBzdGFjaywgYWZ0ZXI6IHJlc3VsdCBvZiBkaXNhbWJpZ3VhdGlvblxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBpcyB1c2VkIHdoZW4gYW4gZXhwcmVzc2lvbiBsaWtlIGB7e2Zvb319YFxuICAvLyBpcyBwcm92aWRlZCwgYnV0IHdlIGRvbid0IGtub3cgYXQgY29tcGlsZS10aW1lIHdoZXRoZXIgaXRcbiAgLy8gaXMgYSBoZWxwZXIgb3IgYSBwYXRoLlxuICAvL1xuICAvLyBUaGlzIG9wZXJhdGlvbiBlbWl0cyBtb3JlIGNvZGUgdGhhbiB0aGUgb3RoZXIgb3B0aW9ucyxcbiAgLy8gYW5kIGNhbiBiZSBhdm9pZGVkIGJ5IHBhc3NpbmcgdGhlIGBrbm93bkhlbHBlcnNgIGFuZFxuICAvLyBga25vd25IZWxwZXJzT25seWAgZmxhZ3MgYXQgY29tcGlsZS10aW1lLlxuICBpbnZva2VBbWJpZ3VvdXM6IGZ1bmN0aW9uKG5hbWUsIGhlbHBlckNhbGwpIHtcbiAgICB0aGlzLnVzZVJlZ2lzdGVyKCdoZWxwZXInKTtcblxuICAgIGxldCBub25IZWxwZXIgPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICB0aGlzLmVtcHR5SGFzaCgpO1xuICAgIGxldCBoZWxwZXIgPSB0aGlzLnNldHVwSGVscGVyKDAsIG5hbWUsIGhlbHBlckNhbGwpO1xuXG4gICAgbGV0IGhlbHBlck5hbWUgPSAodGhpcy5sYXN0SGVscGVyID0gdGhpcy5uYW1lTG9va3VwKFxuICAgICAgJ2hlbHBlcnMnLFxuICAgICAgbmFtZSxcbiAgICAgICdoZWxwZXInXG4gICAgKSk7XG5cbiAgICBsZXQgbG9va3VwID0gWycoJywgJyhoZWxwZXIgPSAnLCBoZWxwZXJOYW1lLCAnIHx8ICcsIG5vbkhlbHBlciwgJyknXTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgIGxvb2t1cFswXSA9ICcoaGVscGVyID0gJztcbiAgICAgIGxvb2t1cC5wdXNoKFxuICAgICAgICAnICE9IG51bGwgPyBoZWxwZXIgOiAnLFxuICAgICAgICB0aGlzLmFsaWFzYWJsZSgnY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcnKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnB1c2goW1xuICAgICAgJygnLFxuICAgICAgbG9va3VwLFxuICAgICAgaGVscGVyLnBhcmFtc0luaXQgPyBbJyksKCcsIGhlbHBlci5wYXJhbXNJbml0XSA6IFtdLFxuICAgICAgJyksJyxcbiAgICAgICcodHlwZW9mIGhlbHBlciA9PT0gJyxcbiAgICAgIHRoaXMuYWxpYXNhYmxlKCdcImZ1bmN0aW9uXCInKSxcbiAgICAgICcgPyAnLFxuICAgICAgdGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdoZWxwZXInLCAnY2FsbCcsIGhlbHBlci5jYWxsUGFyYW1zKSxcbiAgICAgICcgOiBoZWxwZXIpKSdcbiAgICBdKTtcbiAgfSxcblxuICAvLyBbaW52b2tlUGFydGlhbF1cbiAgLy9cbiAgLy8gT24gc3RhY2ssIGJlZm9yZTogY29udGV4dCwgLi4uXG4gIC8vIE9uIHN0YWNrIGFmdGVyOiByZXN1bHQgb2YgcGFydGlhbCBpbnZvY2F0aW9uXG4gIC8vXG4gIC8vIFRoaXMgb3BlcmF0aW9uIHBvcHMgb2ZmIGEgY29udGV4dCwgaW52b2tlcyBhIHBhcnRpYWwgd2l0aCB0aGF0IGNvbnRleHQsXG4gIC8vIGFuZCBwdXNoZXMgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBiYWNrLlxuICBpbnZva2VQYXJ0aWFsOiBmdW5jdGlvbihpc0R5bmFtaWMsIG5hbWUsIGluZGVudCkge1xuICAgIGxldCBwYXJhbXMgPSBbXSxcbiAgICAgIG9wdGlvbnMgPSB0aGlzLnNldHVwUGFyYW1zKG5hbWUsIDEsIHBhcmFtcyk7XG5cbiAgICBpZiAoaXNEeW5hbWljKSB7XG4gICAgICBuYW1lID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgZGVsZXRlIG9wdGlvbnMubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZW50KSB7XG4gICAgICBvcHRpb25zLmluZGVudCA9IEpTT04uc3RyaW5naWZ5KGluZGVudCk7XG4gICAgfVxuICAgIG9wdGlvbnMuaGVscGVycyA9ICdoZWxwZXJzJztcbiAgICBvcHRpb25zLnBhcnRpYWxzID0gJ3BhcnRpYWxzJztcbiAgICBvcHRpb25zLmRlY29yYXRvcnMgPSAnY29udGFpbmVyLmRlY29yYXRvcnMnO1xuXG4gICAgaWYgKCFpc0R5bmFtaWMpIHtcbiAgICAgIHBhcmFtcy51bnNoaWZ0KHRoaXMubmFtZUxvb2t1cCgncGFydGlhbHMnLCBuYW1lLCAncGFydGlhbCcpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLnVuc2hpZnQobmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb21wYXQpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGhzID0gJ2RlcHRocyc7XG4gICAgfVxuICAgIG9wdGlvbnMgPSB0aGlzLm9iamVjdExpdGVyYWwob3B0aW9ucyk7XG4gICAgcGFyYW1zLnB1c2gob3B0aW9ucyk7XG5cbiAgICB0aGlzLnB1c2godGhpcy5zb3VyY2UuZnVuY3Rpb25DYWxsKCdjb250YWluZXIuaW52b2tlUGFydGlhbCcsICcnLCBwYXJhbXMpKTtcbiAgfSxcblxuICAvLyBbYXNzaWduVG9IYXNoXVxuICAvL1xuICAvLyBPbiBzdGFjaywgYmVmb3JlOiB2YWx1ZSwgLi4uLCBoYXNoLCAuLi5cbiAgLy8gT24gc3RhY2ssIGFmdGVyOiAuLi4sIGhhc2gsIC4uLlxuICAvL1xuICAvLyBQb3BzIGEgdmFsdWUgb2ZmIHRoZSBzdGFjayBhbmQgYXNzaWducyBpdCB0byB0aGUgY3VycmVudCBoYXNoXG4gIGFzc2lnblRvSGFzaDogZnVuY3Rpb24oa2V5KSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5wb3BTdGFjaygpLFxuICAgICAgY29udGV4dCxcbiAgICAgIHR5cGUsXG4gICAgICBpZDtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBpZCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICB0eXBlID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgY29udGV4dCA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaGFzaCA9IHRoaXMuaGFzaDtcbiAgICBpZiAoY29udGV4dCkge1xuICAgICAgaGFzaC5jb250ZXh0c1trZXldID0gY29udGV4dDtcbiAgICB9XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIGhhc2gudHlwZXNba2V5XSA9IHR5cGU7XG4gICAgfVxuICAgIGlmIChpZCkge1xuICAgICAgaGFzaC5pZHNba2V5XSA9IGlkO1xuICAgIH1cbiAgICBoYXNoLnZhbHVlc1trZXldID0gdmFsdWU7XG4gIH0sXG5cbiAgcHVzaElkOiBmdW5jdGlvbih0eXBlLCBuYW1lLCBjaGlsZCkge1xuICAgIGlmICh0eXBlID09PSAnQmxvY2tQYXJhbScpIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbChcbiAgICAgICAgJ2Jsb2NrUGFyYW1zWycgK1xuICAgICAgICAgIG5hbWVbMF0gK1xuICAgICAgICAgICddLnBhdGhbJyArXG4gICAgICAgICAgbmFtZVsxXSArXG4gICAgICAgICAgJ10nICtcbiAgICAgICAgICAoY2hpbGQgPyAnICsgJyArIEpTT04uc3RyaW5naWZ5KCcuJyArIGNoaWxkKSA6ICcnKVxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdQYXRoRXhwcmVzc2lvbicpIHtcbiAgICAgIHRoaXMucHVzaFN0cmluZyhuYW1lKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdTdWJFeHByZXNzaW9uJykge1xuICAgICAgdGhpcy5wdXNoU3RhY2tMaXRlcmFsKCd0cnVlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFN0YWNrTGl0ZXJhbCgnbnVsbCcpO1xuICAgIH1cbiAgfSxcblxuICAvLyBIRUxQRVJTXG5cbiAgY29tcGlsZXI6IEphdmFTY3JpcHRDb21waWxlcixcblxuICBjb21waWxlQ2hpbGRyZW46IGZ1bmN0aW9uKGVudmlyb25tZW50LCBvcHRpb25zKSB7XG4gICAgbGV0IGNoaWxkcmVuID0gZW52aXJvbm1lbnQuY2hpbGRyZW4sXG4gICAgICBjaGlsZCxcbiAgICAgIGNvbXBpbGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBjb21waWxlciA9IG5ldyB0aGlzLmNvbXBpbGVyKCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gICAgICBsZXQgZXhpc3RpbmcgPSB0aGlzLm1hdGNoRXhpc3RpbmdQcm9ncmFtKGNoaWxkKTtcblxuICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0LnByb2dyYW1zLnB1c2goJycpOyAvLyBQbGFjZWhvbGRlciB0byBwcmV2ZW50IG5hbWUgY29uZmxpY3RzIGZvciBuZXN0ZWQgY2hpbGRyZW5cbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jb250ZXh0LnByb2dyYW1zLmxlbmd0aDtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBpbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGluZGV4O1xuICAgICAgICB0aGlzLmNvbnRleHQucHJvZ3JhbXNbaW5kZXhdID0gY29tcGlsZXIuY29tcGlsZShcbiAgICAgICAgICBjaGlsZCxcbiAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgIHRoaXMuY29udGV4dCxcbiAgICAgICAgICAhdGhpcy5wcmVjb21waWxlXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5kZWNvcmF0b3JzW2luZGV4XSA9IGNvbXBpbGVyLmRlY29yYXRvcnM7XG4gICAgICAgIHRoaXMuY29udGV4dC5lbnZpcm9ubWVudHNbaW5kZXhdID0gY2hpbGQ7XG5cbiAgICAgICAgdGhpcy51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocyB8fCBjb21waWxlci51c2VEZXB0aHM7XG4gICAgICAgIHRoaXMudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IGNvbXBpbGVyLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgICBjaGlsZC51c2VEZXB0aHMgPSB0aGlzLnVzZURlcHRocztcbiAgICAgICAgY2hpbGQudXNlQmxvY2tQYXJhbXMgPSB0aGlzLnVzZUJsb2NrUGFyYW1zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hpbGQuaW5kZXggPSBleGlzdGluZy5pbmRleDtcbiAgICAgICAgY2hpbGQubmFtZSA9ICdwcm9ncmFtJyArIGV4aXN0aW5nLmluZGV4O1xuXG4gICAgICAgIHRoaXMudXNlRGVwdGhzID0gdGhpcy51c2VEZXB0aHMgfHwgZXhpc3RpbmcudXNlRGVwdGhzO1xuICAgICAgICB0aGlzLnVzZUJsb2NrUGFyYW1zID0gdGhpcy51c2VCbG9ja1BhcmFtcyB8fCBleGlzdGluZy51c2VCbG9ja1BhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIG1hdGNoRXhpc3RpbmdQcm9ncmFtOiBmdW5jdGlvbihjaGlsZCkge1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBsZXQgZW52aXJvbm1lbnQgPSB0aGlzLmNvbnRleHQuZW52aXJvbm1lbnRzW2ldO1xuICAgICAgaWYgKGVudmlyb25tZW50ICYmIGVudmlyb25tZW50LmVxdWFscyhjaGlsZCkpIHtcbiAgICAgICAgcmV0dXJuIGVudmlyb25tZW50O1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBwcm9ncmFtRXhwcmVzc2lvbjogZnVuY3Rpb24oZ3VpZCkge1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZW52aXJvbm1lbnQuY2hpbGRyZW5bZ3VpZF0sXG4gICAgICBwcm9ncmFtUGFyYW1zID0gW2NoaWxkLmluZGV4LCAnZGF0YScsIGNoaWxkLmJsb2NrUGFyYW1zXTtcblxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zIHx8IHRoaXMudXNlRGVwdGhzKSB7XG4gICAgICBwcm9ncmFtUGFyYW1zLnB1c2goJ2Jsb2NrUGFyYW1zJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZURlcHRocykge1xuICAgICAgcHJvZ3JhbVBhcmFtcy5wdXNoKCdkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ2NvbnRhaW5lci5wcm9ncmFtKCcgKyBwcm9ncmFtUGFyYW1zLmpvaW4oJywgJykgKyAnKSc7XG4gIH0sXG5cbiAgdXNlUmVnaXN0ZXI6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAoIXRoaXMucmVnaXN0ZXJzW25hbWVdKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyc1tuYW1lXSA9IHRydWU7XG4gICAgICB0aGlzLnJlZ2lzdGVycy5saXN0LnB1c2gobmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIHB1c2g6IGZ1bmN0aW9uKGV4cHIpIHtcbiAgICBpZiAoIShleHByIGluc3RhbmNlb2YgTGl0ZXJhbCkpIHtcbiAgICAgIGV4cHIgPSB0aGlzLnNvdXJjZS53cmFwKGV4cHIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5saW5lU3RhY2sucHVzaChleHByKTtcbiAgICByZXR1cm4gZXhwcjtcbiAgfSxcblxuICBwdXNoU3RhY2tMaXRlcmFsOiBmdW5jdGlvbihpdGVtKSB7XG4gICAgdGhpcy5wdXNoKG5ldyBMaXRlcmFsKGl0ZW0pKTtcbiAgfSxcblxuICBwdXNoU291cmNlOiBmdW5jdGlvbihzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nQ29udGVudCkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChcbiAgICAgICAgdGhpcy5hcHBlbmRUb0J1ZmZlcihcbiAgICAgICAgICB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcodGhpcy5wZW5kaW5nQ29udGVudCksXG4gICAgICAgICAgdGhpcy5wZW5kaW5nTG9jYXRpb25cbiAgICAgICAgKVxuICAgICAgKTtcbiAgICAgIHRoaXMucGVuZGluZ0NvbnRlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5zb3VyY2UucHVzaChzb3VyY2UpO1xuICAgIH1cbiAgfSxcblxuICByZXBsYWNlU3RhY2s6IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gICAgbGV0IHByZWZpeCA9IFsnKCddLFxuICAgICAgc3RhY2ssXG4gICAgICBjcmVhdGVkU3RhY2ssXG4gICAgICB1c2VkTGl0ZXJhbDtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKCF0aGlzLmlzSW5saW5lKCkpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ3JlcGxhY2VTdGFjayBvbiBub24taW5saW5lJyk7XG4gICAgfVxuXG4gICAgLy8gV2Ugd2FudCB0byBtZXJnZSB0aGUgaW5saW5lIHN0YXRlbWVudCBpbnRvIHRoZSByZXBsYWNlbWVudCBzdGF0ZW1lbnQgdmlhICcsJ1xuICAgIGxldCB0b3AgPSB0aGlzLnBvcFN0YWNrKHRydWUpO1xuXG4gICAgaWYgKHRvcCBpbnN0YW5jZW9mIExpdGVyYWwpIHtcbiAgICAgIC8vIExpdGVyYWxzIGRvIG5vdCBuZWVkIHRvIGJlIGlubGluZWRcbiAgICAgIHN0YWNrID0gW3RvcC52YWx1ZV07XG4gICAgICBwcmVmaXggPSBbJygnLCBzdGFja107XG4gICAgICB1c2VkTGl0ZXJhbCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEdldCBvciBjcmVhdGUgdGhlIGN1cnJlbnQgc3RhY2sgbmFtZSBmb3IgdXNlIGJ5IHRoZSBpbmxpbmVcbiAgICAgIGNyZWF0ZWRTdGFjayA9IHRydWU7XG4gICAgICBsZXQgbmFtZSA9IHRoaXMuaW5jclN0YWNrKCk7XG5cbiAgICAgIHByZWZpeCA9IFsnKCgnLCB0aGlzLnB1c2gobmFtZSksICcgPSAnLCB0b3AsICcpJ107XG4gICAgICBzdGFjayA9IHRoaXMudG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbSA9IGNhbGxiYWNrLmNhbGwodGhpcywgc3RhY2spO1xuXG4gICAgaWYgKCF1c2VkTGl0ZXJhbCkge1xuICAgICAgdGhpcy5wb3BTdGFjaygpO1xuICAgIH1cbiAgICBpZiAoY3JlYXRlZFN0YWNrKSB7XG4gICAgICB0aGlzLnN0YWNrU2xvdC0tO1xuICAgIH1cbiAgICB0aGlzLnB1c2gocHJlZml4LmNvbmNhdChpdGVtLCAnKScpKTtcbiAgfSxcblxuICBpbmNyU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3RhY2tTbG90Kys7XG4gICAgaWYgKHRoaXMuc3RhY2tTbG90ID4gdGhpcy5zdGFja1ZhcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnN0YWNrVmFycy5wdXNoKCdzdGFjaycgKyB0aGlzLnN0YWNrU2xvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRvcFN0YWNrTmFtZSgpO1xuICB9LFxuICB0b3BTdGFja05hbWU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnc3RhY2snICsgdGhpcy5zdGFja1Nsb3Q7XG4gIH0sXG4gIGZsdXNoSW5saW5lOiBmdW5jdGlvbigpIHtcbiAgICBsZXQgaW5saW5lU3RhY2sgPSB0aGlzLmlubGluZVN0YWNrO1xuICAgIHRoaXMuaW5saW5lU3RhY2sgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gaW5saW5lU3RhY2subGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGxldCBlbnRyeSA9IGlubGluZVN0YWNrW2ldO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoZW50cnkgaW5zdGFuY2VvZiBMaXRlcmFsKSB7XG4gICAgICAgIHRoaXMuY29tcGlsZVN0YWNrLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHN0YWNrID0gdGhpcy5pbmNyU3RhY2soKTtcbiAgICAgICAgdGhpcy5wdXNoU291cmNlKFtzdGFjaywgJyA9ICcsIGVudHJ5LCAnOyddKTtcbiAgICAgICAgdGhpcy5jb21waWxlU3RhY2sucHVzaChzdGFjayk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBpc0lubGluZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5saW5lU3RhY2subGVuZ3RoO1xuICB9LFxuXG4gIHBvcFN0YWNrOiBmdW5jdGlvbih3cmFwcGVkKSB7XG4gICAgbGV0IGlubGluZSA9IHRoaXMuaXNJbmxpbmUoKSxcbiAgICAgIGl0ZW0gPSAoaW5saW5lID8gdGhpcy5pbmxpbmVTdGFjayA6IHRoaXMuY29tcGlsZVN0YWNrKS5wb3AoKTtcblxuICAgIGlmICghd3JhcHBlZCAmJiBpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaW5saW5lKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIGlmICghdGhpcy5zdGFja1Nsb3QpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdJbnZhbGlkIHN0YWNrIHBvcCcpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tTbG90LS07XG4gICAgICB9XG4gICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG4gIH0sXG5cbiAgdG9wU3RhY2s6IGZ1bmN0aW9uKCkge1xuICAgIGxldCBzdGFjayA9IHRoaXMuaXNJbmxpbmUoKSA/IHRoaXMuaW5saW5lU3RhY2sgOiB0aGlzLmNvbXBpbGVTdGFjayxcbiAgICAgIGl0ZW0gPSBzdGFja1tzdGFjay5sZW5ndGggLSAxXTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTGl0ZXJhbCkge1xuICAgICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cbiAgfSxcblxuICBjb250ZXh0TmFtZTogZnVuY3Rpb24oY29udGV4dCkge1xuICAgIGlmICh0aGlzLnVzZURlcHRocyAmJiBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gJ2RlcHRoc1snICsgY29udGV4dCArICddJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdkZXB0aCcgKyBjb250ZXh0O1xuICAgIH1cbiAgfSxcblxuICBxdW90ZWRTdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnNvdXJjZS5xdW90ZWRTdHJpbmcoc3RyKTtcbiAgfSxcblxuICBvYmplY3RMaXRlcmFsOiBmdW5jdGlvbihvYmopIHtcbiAgICByZXR1cm4gdGhpcy5zb3VyY2Uub2JqZWN0TGl0ZXJhbChvYmopO1xuICB9LFxuXG4gIGFsaWFzYWJsZTogZnVuY3Rpb24obmFtZSkge1xuICAgIGxldCByZXQgPSB0aGlzLmFsaWFzZXNbbmFtZV07XG4gICAgaWYgKHJldCkge1xuICAgICAgcmV0LnJlZmVyZW5jZUNvdW50Kys7XG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIHJldCA9IHRoaXMuYWxpYXNlc1tuYW1lXSA9IHRoaXMuc291cmNlLndyYXAobmFtZSk7XG4gICAgcmV0LmFsaWFzYWJsZSA9IHRydWU7XG4gICAgcmV0LnJlZmVyZW5jZUNvdW50ID0gMTtcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXI6IGZ1bmN0aW9uKHBhcmFtU2l6ZSwgbmFtZSwgYmxvY2tIZWxwZXIpIHtcbiAgICBsZXQgcGFyYW1zID0gW10sXG4gICAgICBwYXJhbXNJbml0ID0gdGhpcy5zZXR1cEhlbHBlckFyZ3MobmFtZSwgcGFyYW1TaXplLCBwYXJhbXMsIGJsb2NrSGVscGVyKTtcbiAgICBsZXQgZm91bmRIZWxwZXIgPSB0aGlzLm5hbWVMb29rdXAoJ2hlbHBlcnMnLCBuYW1lLCAnaGVscGVyJyksXG4gICAgICBjYWxsQ29udGV4dCA9IHRoaXMuYWxpYXNhYmxlKFxuICAgICAgICBgJHt0aGlzLmNvbnRleHROYW1lKDApfSAhPSBudWxsID8gJHt0aGlzLmNvbnRleHROYW1lKFxuICAgICAgICAgIDBcbiAgICAgICAgKX0gOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KWBcbiAgICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICBwYXJhbXNJbml0OiBwYXJhbXNJbml0LFxuICAgICAgbmFtZTogZm91bmRIZWxwZXIsXG4gICAgICBjYWxsUGFyYW1zOiBbY2FsbENvbnRleHRdLmNvbmNhdChwYXJhbXMpXG4gICAgfTtcbiAgfSxcblxuICBzZXR1cFBhcmFtczogZnVuY3Rpb24oaGVscGVyLCBwYXJhbVNpemUsIHBhcmFtcykge1xuICAgIGxldCBvcHRpb25zID0ge30sXG4gICAgICBjb250ZXh0cyA9IFtdLFxuICAgICAgdHlwZXMgPSBbXSxcbiAgICAgIGlkcyA9IFtdLFxuICAgICAgb2JqZWN0QXJncyA9ICFwYXJhbXMsXG4gICAgICBwYXJhbTtcblxuICAgIGlmIChvYmplY3RBcmdzKSB7XG4gICAgICBwYXJhbXMgPSBbXTtcbiAgICB9XG5cbiAgICBvcHRpb25zLm5hbWUgPSB0aGlzLnF1b3RlZFN0cmluZyhoZWxwZXIpO1xuICAgIG9wdGlvbnMuaGFzaCA9IHRoaXMucG9wU3RhY2soKTtcblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmhhc2hJZHMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0cmluZ1BhcmFtcykge1xuICAgICAgb3B0aW9ucy5oYXNoVHlwZXMgPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBvcHRpb25zLmhhc2hDb250ZXh0cyA9IHRoaXMucG9wU3RhY2soKTtcbiAgICB9XG5cbiAgICBsZXQgaW52ZXJzZSA9IHRoaXMucG9wU3RhY2soKSxcbiAgICAgIHByb2dyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG5cbiAgICAvLyBBdm9pZCBzZXR0aW5nIGZuIGFuZCBpbnZlcnNlIGlmIG5laXRoZXIgYXJlIHNldC4gVGhpcyBhbGxvd3NcbiAgICAvLyBoZWxwZXJzIHRvIGRvIGEgY2hlY2sgZm9yIGBpZiAob3B0aW9ucy5mbilgXG4gICAgaWYgKHByb2dyYW0gfHwgaW52ZXJzZSkge1xuICAgICAgb3B0aW9ucy5mbiA9IHByb2dyYW0gfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICAgIG9wdGlvbnMuaW52ZXJzZSA9IGludmVyc2UgfHwgJ2NvbnRhaW5lci5ub29wJztcbiAgICB9XG5cbiAgICAvLyBUaGUgcGFyYW1ldGVycyBnbyBvbiB0byB0aGUgc3RhY2sgaW4gb3JkZXIgKG1ha2luZyBzdXJlIHRoYXQgdGhleSBhcmUgZXZhbHVhdGVkIGluIG9yZGVyKVxuICAgIC8vIHNvIHdlIG5lZWQgdG8gcG9wIHRoZW0gb2ZmIHRoZSBzdGFjayBpbiByZXZlcnNlIG9yZGVyXG4gICAgbGV0IGkgPSBwYXJhbVNpemU7XG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgcGFyYW0gPSB0aGlzLnBvcFN0YWNrKCk7XG4gICAgICBwYXJhbXNbaV0gPSBwYXJhbTtcblxuICAgICAgaWYgKHRoaXMudHJhY2tJZHMpIHtcbiAgICAgICAgaWRzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICAgIHR5cGVzW2ldID0gdGhpcy5wb3BTdGFjaygpO1xuICAgICAgICBjb250ZXh0c1tpXSA9IHRoaXMucG9wU3RhY2soKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob2JqZWN0QXJncykge1xuICAgICAgb3B0aW9ucy5hcmdzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShwYXJhbXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYWNrSWRzKSB7XG4gICAgICBvcHRpb25zLmlkcyA9IHRoaXMuc291cmNlLmdlbmVyYXRlQXJyYXkoaWRzKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RyaW5nUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLnR5cGVzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheSh0eXBlcyk7XG4gICAgICBvcHRpb25zLmNvbnRleHRzID0gdGhpcy5zb3VyY2UuZ2VuZXJhdGVBcnJheShjb250ZXh0cyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhKSB7XG4gICAgICBvcHRpb25zLmRhdGEgPSAnZGF0YSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnVzZUJsb2NrUGFyYW1zKSB7XG4gICAgICBvcHRpb25zLmJsb2NrUGFyYW1zID0gJ2Jsb2NrUGFyYW1zJztcbiAgICB9XG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH0sXG5cbiAgc2V0dXBIZWxwZXJBcmdzOiBmdW5jdGlvbihoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zLCB1c2VSZWdpc3Rlcikge1xuICAgIGxldCBvcHRpb25zID0gdGhpcy5zZXR1cFBhcmFtcyhoZWxwZXIsIHBhcmFtU2l6ZSwgcGFyYW1zKTtcbiAgICBvcHRpb25zLmxvYyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuc291cmNlLmN1cnJlbnRMb2NhdGlvbik7XG4gICAgb3B0aW9ucyA9IHRoaXMub2JqZWN0TGl0ZXJhbChvcHRpb25zKTtcbiAgICBpZiAodXNlUmVnaXN0ZXIpIHtcbiAgICAgIHRoaXMudXNlUmVnaXN0ZXIoJ29wdGlvbnMnKTtcbiAgICAgIHBhcmFtcy5wdXNoKCdvcHRpb25zJyk7XG4gICAgICByZXR1cm4gWydvcHRpb25zPScsIG9wdGlvbnNdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zKSB7XG4gICAgICBwYXJhbXMucHVzaChvcHRpb25zKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICB9XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSAoXG4gICAgJ2JyZWFrIGVsc2UgbmV3IHZhcicgK1xuICAgICcgY2FzZSBmaW5hbGx5IHJldHVybiB2b2lkJyArXG4gICAgJyBjYXRjaCBmb3Igc3dpdGNoIHdoaWxlJyArXG4gICAgJyBjb250aW51ZSBmdW5jdGlvbiB0aGlzIHdpdGgnICtcbiAgICAnIGRlZmF1bHQgaWYgdGhyb3cnICtcbiAgICAnIGRlbGV0ZSBpbiB0cnknICtcbiAgICAnIGRvIGluc3RhbmNlb2YgdHlwZW9mJyArXG4gICAgJyBhYnN0cmFjdCBlbnVtIGludCBzaG9ydCcgK1xuICAgICcgYm9vbGVhbiBleHBvcnQgaW50ZXJmYWNlIHN0YXRpYycgK1xuICAgICcgYnl0ZSBleHRlbmRzIGxvbmcgc3VwZXInICtcbiAgICAnIGNoYXIgZmluYWwgbmF0aXZlIHN5bmNocm9uaXplZCcgK1xuICAgICcgY2xhc3MgZmxvYXQgcGFja2FnZSB0aHJvd3MnICtcbiAgICAnIGNvbnN0IGdvdG8gcHJpdmF0ZSB0cmFuc2llbnQnICtcbiAgICAnIGRlYnVnZ2VyIGltcGxlbWVudHMgcHJvdGVjdGVkIHZvbGF0aWxlJyArXG4gICAgJyBkb3VibGUgaW1wb3J0IHB1YmxpYyBsZXQgeWllbGQgYXdhaXQnICtcbiAgICAnIG51bGwgdHJ1ZSBmYWxzZSdcbiAgKS5zcGxpdCgnICcpO1xuXG4gIGNvbnN0IGNvbXBpbGVyV29yZHMgPSAoSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTID0ge30pO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gcmVzZXJ2ZWRXb3Jkcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb21waWxlcldvcmRzW3Jlc2VydmVkV29yZHNbaV1dID0gdHJ1ZTtcbiAgfVxufSkoKTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBNYXkgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uXG4gKi9cbkphdmFTY3JpcHRDb21waWxlci5pc1ZhbGlkSmF2YVNjcmlwdFZhcmlhYmxlTmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIChcbiAgICAhSmF2YVNjcmlwdENvbXBpbGVyLlJFU0VSVkVEX1dPUkRTW25hbWVdICYmXG4gICAgL15bYS16QS1aXyRdWzAtOWEtekEtWl8kXSokLy50ZXN0KG5hbWUpXG4gICk7XG59O1xuXG5mdW5jdGlvbiBzdHJpY3RMb29rdXAocmVxdWlyZVRlcm1pbmFsLCBjb21waWxlciwgcGFydHMsIHR5cGUpIHtcbiAgbGV0IHN0YWNrID0gY29tcGlsZXIucG9wU3RhY2soKSxcbiAgICBpID0gMCxcbiAgICBsZW4gPSBwYXJ0cy5sZW5ndGg7XG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICBsZW4tLTtcbiAgfVxuXG4gIGZvciAoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBzdGFjayA9IGNvbXBpbGVyLm5hbWVMb29rdXAoc3RhY2ssIHBhcnRzW2ldLCB0eXBlKTtcbiAgfVxuXG4gIGlmIChyZXF1aXJlVGVybWluYWwpIHtcbiAgICByZXR1cm4gW1xuICAgICAgY29tcGlsZXIuYWxpYXNhYmxlKCdjb250YWluZXIuc3RyaWN0JyksXG4gICAgICAnKCcsXG4gICAgICBzdGFjayxcbiAgICAgICcsICcsXG4gICAgICBjb21waWxlci5xdW90ZWRTdHJpbmcocGFydHNbaV0pLFxuICAgICAgJywgJyxcbiAgICAgIEpTT04uc3RyaW5naWZ5KGNvbXBpbGVyLnNvdXJjZS5jdXJyZW50TG9jYXRpb24pLFxuICAgICAgJyApJ1xuICAgIF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHN0YWNrO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEphdmFTY3JpcHRDb21waWxlcjtcbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5505:
 | |
| /***/ ((module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| // File ignored in coverage tests via setting in .istanbul.yml
 | |
| /* Jison generated parser */
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| var handlebars = (function () {
 | |
|     var parser = { trace: function trace() {},
 | |
|         yy: {},
 | |
|         symbols_: { "error": 2, "root": 3, "program": 4, "EOF": 5, "program_repetition0": 6, "statement": 7, "mustache": 8, "block": 9, "rawBlock": 10, "partial": 11, "partialBlock": 12, "content": 13, "COMMENT": 14, "CONTENT": 15, "openRawBlock": 16, "rawBlock_repetition0": 17, "END_RAW_BLOCK": 18, "OPEN_RAW_BLOCK": 19, "helperName": 20, "openRawBlock_repetition0": 21, "openRawBlock_option0": 22, "CLOSE_RAW_BLOCK": 23, "openBlock": 24, "block_option0": 25, "closeBlock": 26, "openInverse": 27, "block_option1": 28, "OPEN_BLOCK": 29, "openBlock_repetition0": 30, "openBlock_option0": 31, "openBlock_option1": 32, "CLOSE": 33, "OPEN_INVERSE": 34, "openInverse_repetition0": 35, "openInverse_option0": 36, "openInverse_option1": 37, "openInverseChain": 38, "OPEN_INVERSE_CHAIN": 39, "openInverseChain_repetition0": 40, "openInverseChain_option0": 41, "openInverseChain_option1": 42, "inverseAndProgram": 43, "INVERSE": 44, "inverseChain": 45, "inverseChain_option0": 46, "OPEN_ENDBLOCK": 47, "OPEN": 48, "mustache_repetition0": 49, "mustache_option0": 50, "OPEN_UNESCAPED": 51, "mustache_repetition1": 52, "mustache_option1": 53, "CLOSE_UNESCAPED": 54, "OPEN_PARTIAL": 55, "partialName": 56, "partial_repetition0": 57, "partial_option0": 58, "openPartialBlock": 59, "OPEN_PARTIAL_BLOCK": 60, "openPartialBlock_repetition0": 61, "openPartialBlock_option0": 62, "param": 63, "sexpr": 64, "OPEN_SEXPR": 65, "sexpr_repetition0": 66, "sexpr_option0": 67, "CLOSE_SEXPR": 68, "hash": 69, "hash_repetition_plus0": 70, "hashSegment": 71, "ID": 72, "EQUALS": 73, "blockParams": 74, "OPEN_BLOCK_PARAMS": 75, "blockParams_repetition_plus0": 76, "CLOSE_BLOCK_PARAMS": 77, "path": 78, "dataName": 79, "STRING": 80, "NUMBER": 81, "BOOLEAN": 82, "UNDEFINED": 83, "NULL": 84, "DATA": 85, "pathSegments": 86, "SEP": 87, "$accept": 0, "$end": 1 },
 | |
|         terminals_: { 2: "error", 5: "EOF", 14: "COMMENT", 15: "CONTENT", 18: "END_RAW_BLOCK", 19: "OPEN_RAW_BLOCK", 23: "CLOSE_RAW_BLOCK", 29: "OPEN_BLOCK", 33: "CLOSE", 34: "OPEN_INVERSE", 39: "OPEN_INVERSE_CHAIN", 44: "INVERSE", 47: "OPEN_ENDBLOCK", 48: "OPEN", 51: "OPEN_UNESCAPED", 54: "CLOSE_UNESCAPED", 55: "OPEN_PARTIAL", 60: "OPEN_PARTIAL_BLOCK", 65: "OPEN_SEXPR", 68: "CLOSE_SEXPR", 72: "ID", 73: "EQUALS", 75: "OPEN_BLOCK_PARAMS", 77: "CLOSE_BLOCK_PARAMS", 80: "STRING", 81: "NUMBER", 82: "BOOLEAN", 83: "UNDEFINED", 84: "NULL", 85: "DATA", 87: "SEP" },
 | |
|         productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [63, 1], [63, 1], [64, 5], [69, 1], [71, 3], [74, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [56, 1], [56, 1], [79, 2], [78, 1], [86, 3], [86, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [49, 0], [49, 2], [50, 0], [50, 1], [52, 0], [52, 2], [53, 0], [53, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [66, 0], [66, 2], [67, 0], [67, 1], [70, 1], [70, 2], [76, 1], [76, 2]],
 | |
|         performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
 | |
| 
 | |
|             var $0 = $$.length - 1;
 | |
|             switch (yystate) {
 | |
|                 case 1:
 | |
|                     return $$[$0 - 1];
 | |
|                     break;
 | |
|                 case 2:
 | |
|                     this.$ = yy.prepareProgram($$[$0]);
 | |
|                     break;
 | |
|                 case 3:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 4:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 5:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 6:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 7:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 8:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 9:
 | |
|                     this.$ = {
 | |
|                         type: 'CommentStatement',
 | |
|                         value: yy.stripComment($$[$0]),
 | |
|                         strip: yy.stripFlags($$[$0], $$[$0]),
 | |
|                         loc: yy.locInfo(this._$)
 | |
|                     };
 | |
| 
 | |
|                     break;
 | |
|                 case 10:
 | |
|                     this.$ = {
 | |
|                         type: 'ContentStatement',
 | |
|                         original: $$[$0],
 | |
|                         value: $$[$0],
 | |
|                         loc: yy.locInfo(this._$)
 | |
|                     };
 | |
| 
 | |
|                     break;
 | |
|                 case 11:
 | |
|                     this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
 | |
|                     break;
 | |
|                 case 12:
 | |
|                     this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1] };
 | |
|                     break;
 | |
|                 case 13:
 | |
|                     this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);
 | |
|                     break;
 | |
|                 case 14:
 | |
|                     this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);
 | |
|                     break;
 | |
|                 case 15:
 | |
|                     this.$ = { open: $$[$0 - 5], path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
 | |
|                     break;
 | |
|                 case 16:
 | |
|                     this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
 | |
|                     break;
 | |
|                 case 17:
 | |
|                     this.$ = { path: $$[$0 - 4], params: $$[$0 - 3], hash: $$[$0 - 2], blockParams: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 5], $$[$0]) };
 | |
|                     break;
 | |
|                 case 18:
 | |
|                     this.$ = { strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]), program: $$[$0] };
 | |
|                     break;
 | |
|                 case 19:
 | |
|                     var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),
 | |
|                         program = yy.prepareProgram([inverse], $$[$0 - 1].loc);
 | |
|                     program.chained = true;
 | |
| 
 | |
|                     this.$ = { strip: $$[$0 - 2].strip, program: program, chain: true };
 | |
| 
 | |
|                     break;
 | |
|                 case 20:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 21:
 | |
|                     this.$ = { path: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 2], $$[$0]) };
 | |
|                     break;
 | |
|                 case 22:
 | |
|                     this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
 | |
|                     break;
 | |
|                 case 23:
 | |
|                     this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);
 | |
|                     break;
 | |
|                 case 24:
 | |
|                     this.$ = {
 | |
|                         type: 'PartialStatement',
 | |
|                         name: $$[$0 - 3],
 | |
|                         params: $$[$0 - 2],
 | |
|                         hash: $$[$0 - 1],
 | |
|                         indent: '',
 | |
|                         strip: yy.stripFlags($$[$0 - 4], $$[$0]),
 | |
|                         loc: yy.locInfo(this._$)
 | |
|                     };
 | |
| 
 | |
|                     break;
 | |
|                 case 25:
 | |
|                     this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);
 | |
|                     break;
 | |
|                 case 26:
 | |
|                     this.$ = { path: $$[$0 - 3], params: $$[$0 - 2], hash: $$[$0 - 1], strip: yy.stripFlags($$[$0 - 4], $$[$0]) };
 | |
|                     break;
 | |
|                 case 27:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 28:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 29:
 | |
|                     this.$ = {
 | |
|                         type: 'SubExpression',
 | |
|                         path: $$[$0 - 3],
 | |
|                         params: $$[$0 - 2],
 | |
|                         hash: $$[$0 - 1],
 | |
|                         loc: yy.locInfo(this._$)
 | |
|                     };
 | |
| 
 | |
|                     break;
 | |
|                 case 30:
 | |
|                     this.$ = { type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$) };
 | |
|                     break;
 | |
|                 case 31:
 | |
|                     this.$ = { type: 'HashPair', key: yy.id($$[$0 - 2]), value: $$[$0], loc: yy.locInfo(this._$) };
 | |
|                     break;
 | |
|                 case 32:
 | |
|                     this.$ = yy.id($$[$0 - 1]);
 | |
|                     break;
 | |
|                 case 33:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 34:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 35:
 | |
|                     this.$ = { type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$) };
 | |
|                     break;
 | |
|                 case 36:
 | |
|                     this.$ = { type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$) };
 | |
|                     break;
 | |
|                 case 37:
 | |
|                     this.$ = { type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$) };
 | |
|                     break;
 | |
|                 case 38:
 | |
|                     this.$ = { type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$) };
 | |
|                     break;
 | |
|                 case 39:
 | |
|                     this.$ = { type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$) };
 | |
|                     break;
 | |
|                 case 40:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 41:
 | |
|                     this.$ = $$[$0];
 | |
|                     break;
 | |
|                 case 42:
 | |
|                     this.$ = yy.preparePath(true, $$[$0], this._$);
 | |
|                     break;
 | |
|                 case 43:
 | |
|                     this.$ = yy.preparePath(false, $$[$0], this._$);
 | |
|                     break;
 | |
|                 case 44:
 | |
|                     $$[$0 - 2].push({ part: yy.id($$[$0]), original: $$[$0], separator: $$[$0 - 1] });this.$ = $$[$0 - 2];
 | |
|                     break;
 | |
|                 case 45:
 | |
|                     this.$ = [{ part: yy.id($$[$0]), original: $$[$0] }];
 | |
|                     break;
 | |
|                 case 46:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 47:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 48:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 49:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 50:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 51:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 58:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 59:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 64:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 65:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 70:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 71:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 78:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 79:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 82:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 83:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 86:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 87:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 90:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 91:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 94:
 | |
|                     this.$ = [];
 | |
|                     break;
 | |
|                 case 95:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 98:
 | |
|                     this.$ = [$$[$0]];
 | |
|                     break;
 | |
|                 case 99:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|                 case 100:
 | |
|                     this.$ = [$$[$0]];
 | |
|                     break;
 | |
|                 case 101:
 | |
|                     $$[$0 - 1].push($$[$0]);
 | |
|                     break;
 | |
|             }
 | |
|         },
 | |
|         table: [{ 3: 1, 4: 2, 5: [2, 46], 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 1: [3] }, { 5: [1, 4] }, { 5: [2, 2], 7: 5, 8: 6, 9: 7, 10: 8, 11: 9, 12: 10, 13: 11, 14: [1, 12], 15: [1, 20], 16: 17, 19: [1, 23], 24: 15, 27: 16, 29: [1, 21], 34: [1, 22], 39: [2, 2], 44: [2, 2], 47: [2, 2], 48: [1, 13], 51: [1, 14], 55: [1, 18], 59: 19, 60: [1, 24] }, { 1: [2, 1] }, { 5: [2, 47], 14: [2, 47], 15: [2, 47], 19: [2, 47], 29: [2, 47], 34: [2, 47], 39: [2, 47], 44: [2, 47], 47: [2, 47], 48: [2, 47], 51: [2, 47], 55: [2, 47], 60: [2, 47] }, { 5: [2, 3], 14: [2, 3], 15: [2, 3], 19: [2, 3], 29: [2, 3], 34: [2, 3], 39: [2, 3], 44: [2, 3], 47: [2, 3], 48: [2, 3], 51: [2, 3], 55: [2, 3], 60: [2, 3] }, { 5: [2, 4], 14: [2, 4], 15: [2, 4], 19: [2, 4], 29: [2, 4], 34: [2, 4], 39: [2, 4], 44: [2, 4], 47: [2, 4], 48: [2, 4], 51: [2, 4], 55: [2, 4], 60: [2, 4] }, { 5: [2, 5], 14: [2, 5], 15: [2, 5], 19: [2, 5], 29: [2, 5], 34: [2, 5], 39: [2, 5], 44: [2, 5], 47: [2, 5], 48: [2, 5], 51: [2, 5], 55: [2, 5], 60: [2, 5] }, { 5: [2, 6], 14: [2, 6], 15: [2, 6], 19: [2, 6], 29: [2, 6], 34: [2, 6], 39: [2, 6], 44: [2, 6], 47: [2, 6], 48: [2, 6], 51: [2, 6], 55: [2, 6], 60: [2, 6] }, { 5: [2, 7], 14: [2, 7], 15: [2, 7], 19: [2, 7], 29: [2, 7], 34: [2, 7], 39: [2, 7], 44: [2, 7], 47: [2, 7], 48: [2, 7], 51: [2, 7], 55: [2, 7], 60: [2, 7] }, { 5: [2, 8], 14: [2, 8], 15: [2, 8], 19: [2, 8], 29: [2, 8], 34: [2, 8], 39: [2, 8], 44: [2, 8], 47: [2, 8], 48: [2, 8], 51: [2, 8], 55: [2, 8], 60: [2, 8] }, { 5: [2, 9], 14: [2, 9], 15: [2, 9], 19: [2, 9], 29: [2, 9], 34: [2, 9], 39: [2, 9], 44: [2, 9], 47: [2, 9], 48: [2, 9], 51: [2, 9], 55: [2, 9], 60: [2, 9] }, { 20: 25, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 36, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 37, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 4: 38, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 15: [2, 48], 17: 39, 18: [2, 48] }, { 20: 41, 56: 40, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 44, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 5: [2, 10], 14: [2, 10], 15: [2, 10], 18: [2, 10], 19: [2, 10], 29: [2, 10], 34: [2, 10], 39: [2, 10], 44: [2, 10], 47: [2, 10], 48: [2, 10], 51: [2, 10], 55: [2, 10], 60: [2, 10] }, { 20: 45, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 46, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 47, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 41, 56: 48, 64: 42, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [2, 78], 49: 49, 65: [2, 78], 72: [2, 78], 80: [2, 78], 81: [2, 78], 82: [2, 78], 83: [2, 78], 84: [2, 78], 85: [2, 78] }, { 23: [2, 33], 33: [2, 33], 54: [2, 33], 65: [2, 33], 68: [2, 33], 72: [2, 33], 75: [2, 33], 80: [2, 33], 81: [2, 33], 82: [2, 33], 83: [2, 33], 84: [2, 33], 85: [2, 33] }, { 23: [2, 34], 33: [2, 34], 54: [2, 34], 65: [2, 34], 68: [2, 34], 72: [2, 34], 75: [2, 34], 80: [2, 34], 81: [2, 34], 82: [2, 34], 83: [2, 34], 84: [2, 34], 85: [2, 34] }, { 23: [2, 35], 33: [2, 35], 54: [2, 35], 65: [2, 35], 68: [2, 35], 72: [2, 35], 75: [2, 35], 80: [2, 35], 81: [2, 35], 82: [2, 35], 83: [2, 35], 84: [2, 35], 85: [2, 35] }, { 23: [2, 36], 33: [2, 36], 54: [2, 36], 65: [2, 36], 68: [2, 36], 72: [2, 36], 75: [2, 36], 80: [2, 36], 81: [2, 36], 82: [2, 36], 83: [2, 36], 84: [2, 36], 85: [2, 36] }, { 23: [2, 37], 33: [2, 37], 54: [2, 37], 65: [2, 37], 68: [2, 37], 72: [2, 37], 75: [2, 37], 80: [2, 37], 81: [2, 37], 82: [2, 37], 83: [2, 37], 84: [2, 37], 85: [2, 37] }, { 23: [2, 38], 33: [2, 38], 54: [2, 38], 65: [2, 38], 68: [2, 38], 72: [2, 38], 75: [2, 38], 80: [2, 38], 81: [2, 38], 82: [2, 38], 83: [2, 38], 84: [2, 38], 85: [2, 38] }, { 23: [2, 39], 33: [2, 39], 54: [2, 39], 65: [2, 39], 68: [2, 39], 72: [2, 39], 75: [2, 39], 80: [2, 39], 81: [2, 39], 82: [2, 39], 83: [2, 39], 84: [2, 39], 85: [2, 39] }, { 23: [2, 43], 33: [2, 43], 54: [2, 43], 65: [2, 43], 68: [2, 43], 72: [2, 43], 75: [2, 43], 80: [2, 43], 81: [2, 43], 82: [2, 43], 83: [2, 43], 84: [2, 43], 85: [2, 43], 87: [1, 50] }, { 72: [1, 35], 86: 51 }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 52: 52, 54: [2, 82], 65: [2, 82], 72: [2, 82], 80: [2, 82], 81: [2, 82], 82: [2, 82], 83: [2, 82], 84: [2, 82], 85: [2, 82] }, { 25: 53, 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 54, 47: [2, 54] }, { 28: 59, 43: 60, 44: [1, 58], 47: [2, 56] }, { 13: 62, 15: [1, 20], 18: [1, 61] }, { 33: [2, 86], 57: 63, 65: [2, 86], 72: [2, 86], 80: [2, 86], 81: [2, 86], 82: [2, 86], 83: [2, 86], 84: [2, 86], 85: [2, 86] }, { 33: [2, 40], 65: [2, 40], 72: [2, 40], 80: [2, 40], 81: [2, 40], 82: [2, 40], 83: [2, 40], 84: [2, 40], 85: [2, 40] }, { 33: [2, 41], 65: [2, 41], 72: [2, 41], 80: [2, 41], 81: [2, 41], 82: [2, 41], 83: [2, 41], 84: [2, 41], 85: [2, 41] }, { 20: 64, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 65, 47: [1, 66] }, { 30: 67, 33: [2, 58], 65: [2, 58], 72: [2, 58], 75: [2, 58], 80: [2, 58], 81: [2, 58], 82: [2, 58], 83: [2, 58], 84: [2, 58], 85: [2, 58] }, { 33: [2, 64], 35: 68, 65: [2, 64], 72: [2, 64], 75: [2, 64], 80: [2, 64], 81: [2, 64], 82: [2, 64], 83: [2, 64], 84: [2, 64], 85: [2, 64] }, { 21: 69, 23: [2, 50], 65: [2, 50], 72: [2, 50], 80: [2, 50], 81: [2, 50], 82: [2, 50], 83: [2, 50], 84: [2, 50], 85: [2, 50] }, { 33: [2, 90], 61: 70, 65: [2, 90], 72: [2, 90], 80: [2, 90], 81: [2, 90], 82: [2, 90], 83: [2, 90], 84: [2, 90], 85: [2, 90] }, { 20: 74, 33: [2, 80], 50: 71, 63: 72, 64: 75, 65: [1, 43], 69: 73, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 72: [1, 79] }, { 23: [2, 42], 33: [2, 42], 54: [2, 42], 65: [2, 42], 68: [2, 42], 72: [2, 42], 75: [2, 42], 80: [2, 42], 81: [2, 42], 82: [2, 42], 83: [2, 42], 84: [2, 42], 85: [2, 42], 87: [1, 50] }, { 20: 74, 53: 80, 54: [2, 84], 63: 81, 64: 75, 65: [1, 43], 69: 82, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 26: 83, 47: [1, 66] }, { 47: [2, 55] }, { 4: 84, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 39: [2, 46], 44: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 47: [2, 20] }, { 20: 85, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 4: 86, 6: 3, 14: [2, 46], 15: [2, 46], 19: [2, 46], 29: [2, 46], 34: [2, 46], 47: [2, 46], 48: [2, 46], 51: [2, 46], 55: [2, 46], 60: [2, 46] }, { 26: 87, 47: [1, 66] }, { 47: [2, 57] }, { 5: [2, 11], 14: [2, 11], 15: [2, 11], 19: [2, 11], 29: [2, 11], 34: [2, 11], 39: [2, 11], 44: [2, 11], 47: [2, 11], 48: [2, 11], 51: [2, 11], 55: [2, 11], 60: [2, 11] }, { 15: [2, 49], 18: [2, 49] }, { 20: 74, 33: [2, 88], 58: 88, 63: 89, 64: 75, 65: [1, 43], 69: 90, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 65: [2, 94], 66: 91, 68: [2, 94], 72: [2, 94], 80: [2, 94], 81: [2, 94], 82: [2, 94], 83: [2, 94], 84: [2, 94], 85: [2, 94] }, { 5: [2, 25], 14: [2, 25], 15: [2, 25], 19: [2, 25], 29: [2, 25], 34: [2, 25], 39: [2, 25], 44: [2, 25], 47: [2, 25], 48: [2, 25], 51: [2, 25], 55: [2, 25], 60: [2, 25] }, { 20: 92, 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 31: 93, 33: [2, 60], 63: 94, 64: 75, 65: [1, 43], 69: 95, 70: 76, 71: 77, 72: [1, 78], 75: [2, 60], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 66], 36: 96, 63: 97, 64: 75, 65: [1, 43], 69: 98, 70: 76, 71: 77, 72: [1, 78], 75: [2, 66], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 22: 99, 23: [2, 52], 63: 100, 64: 75, 65: [1, 43], 69: 101, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 20: 74, 33: [2, 92], 62: 102, 63: 103, 64: 75, 65: [1, 43], 69: 104, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 105] }, { 33: [2, 79], 65: [2, 79], 72: [2, 79], 80: [2, 79], 81: [2, 79], 82: [2, 79], 83: [2, 79], 84: [2, 79], 85: [2, 79] }, { 33: [2, 81] }, { 23: [2, 27], 33: [2, 27], 54: [2, 27], 65: [2, 27], 68: [2, 27], 72: [2, 27], 75: [2, 27], 80: [2, 27], 81: [2, 27], 82: [2, 27], 83: [2, 27], 84: [2, 27], 85: [2, 27] }, { 23: [2, 28], 33: [2, 28], 54: [2, 28], 65: [2, 28], 68: [2, 28], 72: [2, 28], 75: [2, 28], 80: [2, 28], 81: [2, 28], 82: [2, 28], 83: [2, 28], 84: [2, 28], 85: [2, 28] }, { 23: [2, 30], 33: [2, 30], 54: [2, 30], 68: [2, 30], 71: 106, 72: [1, 107], 75: [2, 30] }, { 23: [2, 98], 33: [2, 98], 54: [2, 98], 68: [2, 98], 72: [2, 98], 75: [2, 98] }, { 23: [2, 45], 33: [2, 45], 54: [2, 45], 65: [2, 45], 68: [2, 45], 72: [2, 45], 73: [1, 108], 75: [2, 45], 80: [2, 45], 81: [2, 45], 82: [2, 45], 83: [2, 45], 84: [2, 45], 85: [2, 45], 87: [2, 45] }, { 23: [2, 44], 33: [2, 44], 54: [2, 44], 65: [2, 44], 68: [2, 44], 72: [2, 44], 75: [2, 44], 80: [2, 44], 81: [2, 44], 82: [2, 44], 83: [2, 44], 84: [2, 44], 85: [2, 44], 87: [2, 44] }, { 54: [1, 109] }, { 54: [2, 83], 65: [2, 83], 72: [2, 83], 80: [2, 83], 81: [2, 83], 82: [2, 83], 83: [2, 83], 84: [2, 83], 85: [2, 83] }, { 54: [2, 85] }, { 5: [2, 13], 14: [2, 13], 15: [2, 13], 19: [2, 13], 29: [2, 13], 34: [2, 13], 39: [2, 13], 44: [2, 13], 47: [2, 13], 48: [2, 13], 51: [2, 13], 55: [2, 13], 60: [2, 13] }, { 38: 55, 39: [1, 57], 43: 56, 44: [1, 58], 45: 111, 46: 110, 47: [2, 76] }, { 33: [2, 70], 40: 112, 65: [2, 70], 72: [2, 70], 75: [2, 70], 80: [2, 70], 81: [2, 70], 82: [2, 70], 83: [2, 70], 84: [2, 70], 85: [2, 70] }, { 47: [2, 18] }, { 5: [2, 14], 14: [2, 14], 15: [2, 14], 19: [2, 14], 29: [2, 14], 34: [2, 14], 39: [2, 14], 44: [2, 14], 47: [2, 14], 48: [2, 14], 51: [2, 14], 55: [2, 14], 60: [2, 14] }, { 33: [1, 113] }, { 33: [2, 87], 65: [2, 87], 72: [2, 87], 80: [2, 87], 81: [2, 87], 82: [2, 87], 83: [2, 87], 84: [2, 87], 85: [2, 87] }, { 33: [2, 89] }, { 20: 74, 63: 115, 64: 75, 65: [1, 43], 67: 114, 68: [2, 96], 69: 116, 70: 76, 71: 77, 72: [1, 78], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 33: [1, 117] }, { 32: 118, 33: [2, 62], 74: 119, 75: [1, 120] }, { 33: [2, 59], 65: [2, 59], 72: [2, 59], 75: [2, 59], 80: [2, 59], 81: [2, 59], 82: [2, 59], 83: [2, 59], 84: [2, 59], 85: [2, 59] }, { 33: [2, 61], 75: [2, 61] }, { 33: [2, 68], 37: 121, 74: 122, 75: [1, 120] }, { 33: [2, 65], 65: [2, 65], 72: [2, 65], 75: [2, 65], 80: [2, 65], 81: [2, 65], 82: [2, 65], 83: [2, 65], 84: [2, 65], 85: [2, 65] }, { 33: [2, 67], 75: [2, 67] }, { 23: [1, 123] }, { 23: [2, 51], 65: [2, 51], 72: [2, 51], 80: [2, 51], 81: [2, 51], 82: [2, 51], 83: [2, 51], 84: [2, 51], 85: [2, 51] }, { 23: [2, 53] }, { 33: [1, 124] }, { 33: [2, 91], 65: [2, 91], 72: [2, 91], 80: [2, 91], 81: [2, 91], 82: [2, 91], 83: [2, 91], 84: [2, 91], 85: [2, 91] }, { 33: [2, 93] }, { 5: [2, 22], 14: [2, 22], 15: [2, 22], 19: [2, 22], 29: [2, 22], 34: [2, 22], 39: [2, 22], 44: [2, 22], 47: [2, 22], 48: [2, 22], 51: [2, 22], 55: [2, 22], 60: [2, 22] }, { 23: [2, 99], 33: [2, 99], 54: [2, 99], 68: [2, 99], 72: [2, 99], 75: [2, 99] }, { 73: [1, 108] }, { 20: 74, 63: 125, 64: 75, 65: [1, 43], 72: [1, 35], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 23], 14: [2, 23], 15: [2, 23], 19: [2, 23], 29: [2, 23], 34: [2, 23], 39: [2, 23], 44: [2, 23], 47: [2, 23], 48: [2, 23], 51: [2, 23], 55: [2, 23], 60: [2, 23] }, { 47: [2, 19] }, { 47: [2, 77] }, { 20: 74, 33: [2, 72], 41: 126, 63: 127, 64: 75, 65: [1, 43], 69: 128, 70: 76, 71: 77, 72: [1, 78], 75: [2, 72], 78: 26, 79: 27, 80: [1, 28], 81: [1, 29], 82: [1, 30], 83: [1, 31], 84: [1, 32], 85: [1, 34], 86: 33 }, { 5: [2, 24], 14: [2, 24], 15: [2, 24], 19: [2, 24], 29: [2, 24], 34: [2, 24], 39: [2, 24], 44: [2, 24], 47: [2, 24], 48: [2, 24], 51: [2, 24], 55: [2, 24], 60: [2, 24] }, { 68: [1, 129] }, { 65: [2, 95], 68: [2, 95], 72: [2, 95], 80: [2, 95], 81: [2, 95], 82: [2, 95], 83: [2, 95], 84: [2, 95], 85: [2, 95] }, { 68: [2, 97] }, { 5: [2, 21], 14: [2, 21], 15: [2, 21], 19: [2, 21], 29: [2, 21], 34: [2, 21], 39: [2, 21], 44: [2, 21], 47: [2, 21], 48: [2, 21], 51: [2, 21], 55: [2, 21], 60: [2, 21] }, { 33: [1, 130] }, { 33: [2, 63] }, { 72: [1, 132], 76: 131 }, { 33: [1, 133] }, { 33: [2, 69] }, { 15: [2, 12], 18: [2, 12] }, { 14: [2, 26], 15: [2, 26], 19: [2, 26], 29: [2, 26], 34: [2, 26], 47: [2, 26], 48: [2, 26], 51: [2, 26], 55: [2, 26], 60: [2, 26] }, { 23: [2, 31], 33: [2, 31], 54: [2, 31], 68: [2, 31], 72: [2, 31], 75: [2, 31] }, { 33: [2, 74], 42: 134, 74: 135, 75: [1, 120] }, { 33: [2, 71], 65: [2, 71], 72: [2, 71], 75: [2, 71], 80: [2, 71], 81: [2, 71], 82: [2, 71], 83: [2, 71], 84: [2, 71], 85: [2, 71] }, { 33: [2, 73], 75: [2, 73] }, { 23: [2, 29], 33: [2, 29], 54: [2, 29], 65: [2, 29], 68: [2, 29], 72: [2, 29], 75: [2, 29], 80: [2, 29], 81: [2, 29], 82: [2, 29], 83: [2, 29], 84: [2, 29], 85: [2, 29] }, { 14: [2, 15], 15: [2, 15], 19: [2, 15], 29: [2, 15], 34: [2, 15], 39: [2, 15], 44: [2, 15], 47: [2, 15], 48: [2, 15], 51: [2, 15], 55: [2, 15], 60: [2, 15] }, { 72: [1, 137], 77: [1, 136] }, { 72: [2, 100], 77: [2, 100] }, { 14: [2, 16], 15: [2, 16], 19: [2, 16], 29: [2, 16], 34: [2, 16], 44: [2, 16], 47: [2, 16], 48: [2, 16], 51: [2, 16], 55: [2, 16], 60: [2, 16] }, { 33: [1, 138] }, { 33: [2, 75] }, { 33: [2, 32] }, { 72: [2, 101], 77: [2, 101] }, { 14: [2, 17], 15: [2, 17], 19: [2, 17], 29: [2, 17], 34: [2, 17], 39: [2, 17], 44: [2, 17], 47: [2, 17], 48: [2, 17], 51: [2, 17], 55: [2, 17], 60: [2, 17] }],
 | |
|         defaultActions: { 4: [2, 1], 54: [2, 55], 56: [2, 20], 60: [2, 57], 73: [2, 81], 82: [2, 85], 86: [2, 18], 90: [2, 89], 101: [2, 53], 104: [2, 93], 110: [2, 19], 111: [2, 77], 116: [2, 97], 119: [2, 63], 122: [2, 69], 135: [2, 75], 136: [2, 32] },
 | |
|         parseError: function parseError(str, hash) {
 | |
|             throw new Error(str);
 | |
|         },
 | |
|         parse: function parse(input) {
 | |
|             var self = this,
 | |
|                 stack = [0],
 | |
|                 vstack = [null],
 | |
|                 lstack = [],
 | |
|                 table = this.table,
 | |
|                 yytext = "",
 | |
|                 yylineno = 0,
 | |
|                 yyleng = 0,
 | |
|                 recovering = 0,
 | |
|                 TERROR = 2,
 | |
|                 EOF = 1;
 | |
|             this.lexer.setInput(input);
 | |
|             this.lexer.yy = this.yy;
 | |
|             this.yy.lexer = this.lexer;
 | |
|             this.yy.parser = this;
 | |
|             if (typeof this.lexer.yylloc == "undefined") this.lexer.yylloc = {};
 | |
|             var yyloc = this.lexer.yylloc;
 | |
|             lstack.push(yyloc);
 | |
|             var ranges = this.lexer.options && this.lexer.options.ranges;
 | |
|             if (typeof this.yy.parseError === "function") this.parseError = this.yy.parseError;
 | |
|             function popStack(n) {
 | |
|                 stack.length = stack.length - 2 * n;
 | |
|                 vstack.length = vstack.length - n;
 | |
|                 lstack.length = lstack.length - n;
 | |
|             }
 | |
|             function lex() {
 | |
|                 var token;
 | |
|                 token = self.lexer.lex() || 1;
 | |
|                 if (typeof token !== "number") {
 | |
|                     token = self.symbols_[token] || token;
 | |
|                 }
 | |
|                 return token;
 | |
|             }
 | |
|             var symbol,
 | |
|                 preErrorSymbol,
 | |
|                 state,
 | |
|                 action,
 | |
|                 a,
 | |
|                 r,
 | |
|                 yyval = {},
 | |
|                 p,
 | |
|                 len,
 | |
|                 newState,
 | |
|                 expected;
 | |
|             while (true) {
 | |
|                 state = stack[stack.length - 1];
 | |
|                 if (this.defaultActions[state]) {
 | |
|                     action = this.defaultActions[state];
 | |
|                 } else {
 | |
|                     if (symbol === null || typeof symbol == "undefined") {
 | |
|                         symbol = lex();
 | |
|                     }
 | |
|                     action = table[state] && table[state][symbol];
 | |
|                 }
 | |
|                 if (typeof action === "undefined" || !action.length || !action[0]) {
 | |
|                     var errStr = "";
 | |
|                     if (!recovering) {
 | |
|                         expected = [];
 | |
|                         for (p in table[state]) if (this.terminals_[p] && p > 2) {
 | |
|                             expected.push("'" + this.terminals_[p] + "'");
 | |
|                         }
 | |
|                         if (this.lexer.showPosition) {
 | |
|                             errStr = "Parse error on line " + (yylineno + 1) + ":\n" + this.lexer.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
 | |
|                         } else {
 | |
|                             errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == 1 ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
 | |
|                         }
 | |
|                         this.parseError(errStr, { text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, expected: expected });
 | |
|                     }
 | |
|                 }
 | |
|                 if (action[0] instanceof Array && action.length > 1) {
 | |
|                     throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
 | |
|                 }
 | |
|                 switch (action[0]) {
 | |
|                     case 1:
 | |
|                         stack.push(symbol);
 | |
|                         vstack.push(this.lexer.yytext);
 | |
|                         lstack.push(this.lexer.yylloc);
 | |
|                         stack.push(action[1]);
 | |
|                         symbol = null;
 | |
|                         if (!preErrorSymbol) {
 | |
|                             yyleng = this.lexer.yyleng;
 | |
|                             yytext = this.lexer.yytext;
 | |
|                             yylineno = this.lexer.yylineno;
 | |
|                             yyloc = this.lexer.yylloc;
 | |
|                             if (recovering > 0) recovering--;
 | |
|                         } else {
 | |
|                             symbol = preErrorSymbol;
 | |
|                             preErrorSymbol = null;
 | |
|                         }
 | |
|                         break;
 | |
|                     case 2:
 | |
|                         len = this.productions_[action[1]][1];
 | |
|                         yyval.$ = vstack[vstack.length - len];
 | |
|                         yyval._$ = { first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column };
 | |
|                         if (ranges) {
 | |
|                             yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];
 | |
|                         }
 | |
|                         r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);
 | |
|                         if (typeof r !== "undefined") {
 | |
|                             return r;
 | |
|                         }
 | |
|                         if (len) {
 | |
|                             stack = stack.slice(0, -1 * len * 2);
 | |
|                             vstack = vstack.slice(0, -1 * len);
 | |
|                             lstack = lstack.slice(0, -1 * len);
 | |
|                         }
 | |
|                         stack.push(this.productions_[action[1]][0]);
 | |
|                         vstack.push(yyval.$);
 | |
|                         lstack.push(yyval._$);
 | |
|                         newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
 | |
|                         stack.push(newState);
 | |
|                         break;
 | |
|                     case 3:
 | |
|                         return true;
 | |
|                 }
 | |
|             }
 | |
|             return true;
 | |
|         }
 | |
|     };
 | |
|     /* Jison generated lexer */
 | |
|     var lexer = (function () {
 | |
|         var lexer = { EOF: 1,
 | |
|             parseError: function parseError(str, hash) {
 | |
|                 if (this.yy.parser) {
 | |
|                     this.yy.parser.parseError(str, hash);
 | |
|                 } else {
 | |
|                     throw new Error(str);
 | |
|                 }
 | |
|             },
 | |
|             setInput: function setInput(input) {
 | |
|                 this._input = input;
 | |
|                 this._more = this._less = this.done = false;
 | |
|                 this.yylineno = this.yyleng = 0;
 | |
|                 this.yytext = this.matched = this.match = '';
 | |
|                 this.conditionStack = ['INITIAL'];
 | |
|                 this.yylloc = { first_line: 1, first_column: 0, last_line: 1, last_column: 0 };
 | |
|                 if (this.options.ranges) this.yylloc.range = [0, 0];
 | |
|                 this.offset = 0;
 | |
|                 return this;
 | |
|             },
 | |
|             input: function input() {
 | |
|                 var ch = this._input[0];
 | |
|                 this.yytext += ch;
 | |
|                 this.yyleng++;
 | |
|                 this.offset++;
 | |
|                 this.match += ch;
 | |
|                 this.matched += ch;
 | |
|                 var lines = ch.match(/(?:\r\n?|\n).*/g);
 | |
|                 if (lines) {
 | |
|                     this.yylineno++;
 | |
|                     this.yylloc.last_line++;
 | |
|                 } else {
 | |
|                     this.yylloc.last_column++;
 | |
|                 }
 | |
|                 if (this.options.ranges) this.yylloc.range[1]++;
 | |
| 
 | |
|                 this._input = this._input.slice(1);
 | |
|                 return ch;
 | |
|             },
 | |
|             unput: function unput(ch) {
 | |
|                 var len = ch.length;
 | |
|                 var lines = ch.split(/(?:\r\n?|\n)/g);
 | |
| 
 | |
|                 this._input = ch + this._input;
 | |
|                 this.yytext = this.yytext.substr(0, this.yytext.length - len - 1);
 | |
|                 //this.yyleng -= len;
 | |
|                 this.offset -= len;
 | |
|                 var oldLines = this.match.split(/(?:\r\n?|\n)/g);
 | |
|                 this.match = this.match.substr(0, this.match.length - 1);
 | |
|                 this.matched = this.matched.substr(0, this.matched.length - 1);
 | |
| 
 | |
|                 if (lines.length - 1) this.yylineno -= lines.length - 1;
 | |
|                 var r = this.yylloc.range;
 | |
| 
 | |
|                 this.yylloc = { first_line: this.yylloc.first_line,
 | |
|                     last_line: this.yylineno + 1,
 | |
|                     first_column: this.yylloc.first_column,
 | |
|                     last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
 | |
|                 };
 | |
| 
 | |
|                 if (this.options.ranges) {
 | |
|                     this.yylloc.range = [r[0], r[0] + this.yyleng - len];
 | |
|                 }
 | |
|                 return this;
 | |
|             },
 | |
|             more: function more() {
 | |
|                 this._more = true;
 | |
|                 return this;
 | |
|             },
 | |
|             less: function less(n) {
 | |
|                 this.unput(this.match.slice(n));
 | |
|             },
 | |
|             pastInput: function pastInput() {
 | |
|                 var past = this.matched.substr(0, this.matched.length - this.match.length);
 | |
|                 return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\n/g, "");
 | |
|             },
 | |
|             upcomingInput: function upcomingInput() {
 | |
|                 var next = this.match;
 | |
|                 if (next.length < 20) {
 | |
|                     next += this._input.substr(0, 20 - next.length);
 | |
|                 }
 | |
|                 return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\n/g, "");
 | |
|             },
 | |
|             showPosition: function showPosition() {
 | |
|                 var pre = this.pastInput();
 | |
|                 var c = new Array(pre.length + 1).join("-");
 | |
|                 return pre + this.upcomingInput() + "\n" + c + "^";
 | |
|             },
 | |
|             next: function next() {
 | |
|                 if (this.done) {
 | |
|                     return this.EOF;
 | |
|                 }
 | |
|                 if (!this._input) this.done = true;
 | |
| 
 | |
|                 var token, match, tempMatch, index, col, lines;
 | |
|                 if (!this._more) {
 | |
|                     this.yytext = '';
 | |
|                     this.match = '';
 | |
|                 }
 | |
|                 var rules = this._currentRules();
 | |
|                 for (var i = 0; i < rules.length; i++) {
 | |
|                     tempMatch = this._input.match(this.rules[rules[i]]);
 | |
|                     if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
 | |
|                         match = tempMatch;
 | |
|                         index = i;
 | |
|                         if (!this.options.flex) break;
 | |
|                     }
 | |
|                 }
 | |
|                 if (match) {
 | |
|                     lines = match[0].match(/(?:\r\n?|\n).*/g);
 | |
|                     if (lines) this.yylineno += lines.length;
 | |
|                     this.yylloc = { first_line: this.yylloc.last_line,
 | |
|                         last_line: this.yylineno + 1,
 | |
|                         first_column: this.yylloc.last_column,
 | |
|                         last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length };
 | |
|                     this.yytext += match[0];
 | |
|                     this.match += match[0];
 | |
|                     this.matches = match;
 | |
|                     this.yyleng = this.yytext.length;
 | |
|                     if (this.options.ranges) {
 | |
|                         this.yylloc.range = [this.offset, this.offset += this.yyleng];
 | |
|                     }
 | |
|                     this._more = false;
 | |
|                     this._input = this._input.slice(match[0].length);
 | |
|                     this.matched += match[0];
 | |
|                     token = this.performAction.call(this, this.yy, this, rules[index], this.conditionStack[this.conditionStack.length - 1]);
 | |
|                     if (this.done && this._input) this.done = false;
 | |
|                     if (token) return token;else return;
 | |
|                 }
 | |
|                 if (this._input === "") {
 | |
|                     return this.EOF;
 | |
|                 } else {
 | |
|                     return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\n' + this.showPosition(), { text: "", token: null, line: this.yylineno });
 | |
|                 }
 | |
|             },
 | |
|             lex: function lex() {
 | |
|                 var r = this.next();
 | |
|                 if (typeof r !== 'undefined') {
 | |
|                     return r;
 | |
|                 } else {
 | |
|                     return this.lex();
 | |
|                 }
 | |
|             },
 | |
|             begin: function begin(condition) {
 | |
|                 this.conditionStack.push(condition);
 | |
|             },
 | |
|             popState: function popState() {
 | |
|                 return this.conditionStack.pop();
 | |
|             },
 | |
|             _currentRules: function _currentRules() {
 | |
|                 return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
 | |
|             },
 | |
|             topState: function topState() {
 | |
|                 return this.conditionStack[this.conditionStack.length - 2];
 | |
|             },
 | |
|             pushState: function begin(condition) {
 | |
|                 this.begin(condition);
 | |
|             } };
 | |
|         lexer.options = {};
 | |
|         lexer.performAction = function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
 | |
| 
 | |
|             function strip(start, end) {
 | |
|                 return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);
 | |
|             }
 | |
| 
 | |
|             var YYSTATE = YY_START;
 | |
|             switch ($avoiding_name_collisions) {
 | |
|                 case 0:
 | |
|                     if (yy_.yytext.slice(-2) === "\\\\") {
 | |
|                         strip(0, 1);
 | |
|                         this.begin("mu");
 | |
|                     } else if (yy_.yytext.slice(-1) === "\\") {
 | |
|                         strip(0, 1);
 | |
|                         this.begin("emu");
 | |
|                     } else {
 | |
|                         this.begin("mu");
 | |
|                     }
 | |
|                     if (yy_.yytext) return 15;
 | |
| 
 | |
|                     break;
 | |
|                 case 1:
 | |
|                     return 15;
 | |
|                     break;
 | |
|                 case 2:
 | |
|                     this.popState();
 | |
|                     return 15;
 | |
| 
 | |
|                     break;
 | |
|                 case 3:
 | |
|                     this.begin('raw');return 15;
 | |
|                     break;
 | |
|                 case 4:
 | |
|                     this.popState();
 | |
|                     // Should be using `this.topState()` below, but it currently
 | |
|                     // returns the second top instead of the first top. Opened an
 | |
|                     // issue about it at https://github.com/zaach/jison/issues/291
 | |
|                     if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {
 | |
|                         return 15;
 | |
|                     } else {
 | |
|                         strip(5, 9);
 | |
|                         return 'END_RAW_BLOCK';
 | |
|                     }
 | |
| 
 | |
|                     break;
 | |
|                 case 5:
 | |
|                     return 15;
 | |
|                     break;
 | |
|                 case 6:
 | |
|                     this.popState();
 | |
|                     return 14;
 | |
| 
 | |
|                     break;
 | |
|                 case 7:
 | |
|                     return 65;
 | |
|                     break;
 | |
|                 case 8:
 | |
|                     return 68;
 | |
|                     break;
 | |
|                 case 9:
 | |
|                     return 19;
 | |
|                     break;
 | |
|                 case 10:
 | |
|                     this.popState();
 | |
|                     this.begin('raw');
 | |
|                     return 23;
 | |
| 
 | |
|                     break;
 | |
|                 case 11:
 | |
|                     return 55;
 | |
|                     break;
 | |
|                 case 12:
 | |
|                     return 60;
 | |
|                     break;
 | |
|                 case 13:
 | |
|                     return 29;
 | |
|                     break;
 | |
|                 case 14:
 | |
|                     return 47;
 | |
|                     break;
 | |
|                 case 15:
 | |
|                     this.popState();return 44;
 | |
|                     break;
 | |
|                 case 16:
 | |
|                     this.popState();return 44;
 | |
|                     break;
 | |
|                 case 17:
 | |
|                     return 34;
 | |
|                     break;
 | |
|                 case 18:
 | |
|                     return 39;
 | |
|                     break;
 | |
|                 case 19:
 | |
|                     return 51;
 | |
|                     break;
 | |
|                 case 20:
 | |
|                     return 48;
 | |
|                     break;
 | |
|                 case 21:
 | |
|                     this.unput(yy_.yytext);
 | |
|                     this.popState();
 | |
|                     this.begin('com');
 | |
| 
 | |
|                     break;
 | |
|                 case 22:
 | |
|                     this.popState();
 | |
|                     return 14;
 | |
| 
 | |
|                     break;
 | |
|                 case 23:
 | |
|                     return 48;
 | |
|                     break;
 | |
|                 case 24:
 | |
|                     return 73;
 | |
|                     break;
 | |
|                 case 25:
 | |
|                     return 72;
 | |
|                     break;
 | |
|                 case 26:
 | |
|                     return 72;
 | |
|                     break;
 | |
|                 case 27:
 | |
|                     return 87;
 | |
|                     break;
 | |
|                 case 28:
 | |
|                     // ignore whitespace
 | |
|                     break;
 | |
|                 case 29:
 | |
|                     this.popState();return 54;
 | |
|                     break;
 | |
|                 case 30:
 | |
|                     this.popState();return 33;
 | |
|                     break;
 | |
|                 case 31:
 | |
|                     yy_.yytext = strip(1, 2).replace(/\\"/g, '"');return 80;
 | |
|                     break;
 | |
|                 case 32:
 | |
|                     yy_.yytext = strip(1, 2).replace(/\\'/g, "'");return 80;
 | |
|                     break;
 | |
|                 case 33:
 | |
|                     return 85;
 | |
|                     break;
 | |
|                 case 34:
 | |
|                     return 82;
 | |
|                     break;
 | |
|                 case 35:
 | |
|                     return 82;
 | |
|                     break;
 | |
|                 case 36:
 | |
|                     return 83;
 | |
|                     break;
 | |
|                 case 37:
 | |
|                     return 84;
 | |
|                     break;
 | |
|                 case 38:
 | |
|                     return 81;
 | |
|                     break;
 | |
|                 case 39:
 | |
|                     return 75;
 | |
|                     break;
 | |
|                 case 40:
 | |
|                     return 77;
 | |
|                     break;
 | |
|                 case 41:
 | |
|                     return 72;
 | |
|                     break;
 | |
|                 case 42:
 | |
|                     yy_.yytext = yy_.yytext.replace(/\\([\\\]])/g, '$1');return 72;
 | |
|                     break;
 | |
|                 case 43:
 | |
|                     return 'INVALID';
 | |
|                     break;
 | |
|                 case 44:
 | |
|                     return 5;
 | |
|                     break;
 | |
|             }
 | |
|         };
 | |
|         lexer.rules = [/^(?:[^\x00]*?(?=(\{\{)))/, /^(?:[^\x00]+)/, /^(?:[^\x00]{2,}?(?=(\{\{|\\\{\{|\\\\\{\{|$)))/, /^(?:\{\{\{\{(?=[^\/]))/, /^(?:\{\{\{\{\/[^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=[=}\s\/.])\}\}\}\})/, /^(?:[^\x00]+?(?=(\{\{\{\{)))/, /^(?:[\s\S]*?--(~)?\}\})/, /^(?:\()/, /^(?:\))/, /^(?:\{\{\{\{)/, /^(?:\}\}\}\})/, /^(?:\{\{(~)?>)/, /^(?:\{\{(~)?#>)/, /^(?:\{\{(~)?#\*?)/, /^(?:\{\{(~)?\/)/, /^(?:\{\{(~)?\^\s*(~)?\}\})/, /^(?:\{\{(~)?\s*else\s*(~)?\}\})/, /^(?:\{\{(~)?\^)/, /^(?:\{\{(~)?\s*else\b)/, /^(?:\{\{(~)?\{)/, /^(?:\{\{(~)?&)/, /^(?:\{\{(~)?!--)/, /^(?:\{\{(~)?![\s\S]*?\}\})/, /^(?:\{\{(~)?\*?)/, /^(?:=)/, /^(?:\.\.)/, /^(?:\.(?=([=~}\s\/.)|])))/, /^(?:[\/.])/, /^(?:\s+)/, /^(?:\}(~)?\}\})/, /^(?:(~)?\}\})/, /^(?:"(\\["]|[^"])*")/, /^(?:'(\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\s)])))/, /^(?:false(?=([~}\s)])))/, /^(?:undefined(?=([~}\s)])))/, /^(?:null(?=([~}\s)])))/, /^(?:-?[0-9]+(?:\.[0-9]+)?(?=([~}\s)])))/, /^(?:as\s+\|)/, /^(?:\|)/, /^(?:([^\s!"#%-,\.\/;->@\[-\^`\{-~]+(?=([=~}\s\/.)|]))))/, /^(?:\[(\\\]|[^\]])*\])/, /^(?:.)/, /^(?:$)/];
 | |
|         lexer.conditions = { "mu": { "rules": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], "inclusive": false }, "emu": { "rules": [2], "inclusive": false }, "com": { "rules": [6], "inclusive": false }, "raw": { "rules": [3, 4, 5], "inclusive": false }, "INITIAL": { "rules": [0, 1, 44], "inclusive": true } };
 | |
|         return lexer;
 | |
|     })();
 | |
|     parser.lexer = lexer;
 | |
|     function Parser() {
 | |
|         this.yy = {};
 | |
|     }Parser.prototype = parser;parser.Parser = Parser;
 | |
|     return new Parser();
 | |
| })();exports.default = handlebars;
 | |
| module.exports = exports["default"];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3BhcnNlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLElBQUksVUFBVSxHQUFHLENBQUMsWUFBVTtBQUM1QixRQUFJLE1BQU0sR0FBRyxFQUFDLEtBQUssRUFBRSxTQUFTLEtBQUssR0FBSSxFQUFHO0FBQzFDLFVBQUUsRUFBRSxFQUFFO0FBQ04sZ0JBQVEsRUFBRSxFQUFDLE9BQU8sRUFBQyxDQUFDLEVBQUMsTUFBTSxFQUFDLENBQUMsRUFBQyxTQUFTLEVBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLEVBQUMscUJBQXFCLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxDQUFDLEVBQUMsVUFBVSxFQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFBRSxFQUFDLFNBQVMsRUFBQyxFQUFFLEVBQUMsU0FBUyxFQUFDLEVBQUUsRUFBQyxTQUFTLEVBQUMsRUFBRSxFQUFDLGNBQWMsRUFBQyxFQUFFLEVBQUMsc0JBQXNCLEVBQUMsRUFBRSxFQUFDLGVBQWUsRUFBQyxFQUFFLEVBQUMsZ0JBQWdCLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsMEJBQTBCLEVBQUMsRUFBRSxFQUFDLHNCQUFzQixFQUFDLEVBQUUsRUFBQyxpQkFBaUIsRUFBQyxFQUFFLEVBQUMsV0FBVyxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsYUFBYSxFQUFDLEVBQUUsRUFBQyxlQUFlLEVBQUMsRUFBRSxFQUFDLFlBQVksRUFBQyxFQUFFLEVBQUMsdUJBQXVCLEVBQUMsRUFBRSxFQUFDLG1CQUFtQixFQUFDLEVBQUUsRUFBQyxtQkFBbUIsRUFBQyxFQUFFLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBQyxjQUFjLEVBQUMsRUFB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RUFBRSxFQUFDLEtBQUssRUFBQztBQUM1ZSxvQkFBWSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsRUFB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QUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdEUsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0RiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3JKLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDckksMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNySSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQy9FLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0gsd0JBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQzdFLE9BQU8sR0FBRyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN6RCwyQkFBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7O0FBRXZCLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDOztBQUV0RSwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBQyxDQUFDO0FBQzFFLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEgsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0SCwwQkFBTTtBQUFB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QUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDcEcsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQ3BILDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDM0gsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7QUFDN0csMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxFQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQzlGLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2RCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEQsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBRSxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxBQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4RywwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztBQUMzRCwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNwQiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHNCQUFFLENBQUMsRUFBRSxHQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM5QiwwQkFBTTtBQUFBLEFBQ04scUJBQUssRUFBRTtBQUFDLHdCQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFBQyxzQkFBRSxDQUFDLEVBQUUsR0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEdBQUc7QUFBQyx3QkFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxHQUFHO0FBQUMsc0JBQUUsQ0FBQyxFQUFFLEdBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLDBCQUFNO0FBQUEsYUFDTDtTQUNBO0FBQ0QsYUFBSyxFQUFFLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLEVBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBQyxFQUFDLENBQUMsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUUsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsRUFBRSxFQUFDLEVBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUUsRUFBQyxHQUFHLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLEdBQUcsRUFBQyxFQUFFLEVBQUMsR0FBRyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxHQUFHLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsQ0FBQyxFQUFDLEVBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxDQUFDO0FBQy8vVixzQkFBYyxFQUFFLEVBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxFQUFFLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsRUFBRSxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFDLEVBQUUsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsRUFBQztBQUNsTSxrQkFBVSxFQUFFLFNBQVMsVUFBVSxDQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7QUFD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QUNOLHFCQUFLLENBQUM7QUFBRSwyQkFBTyxFQUFFLENBQUM7QUFDbEIsMEJBQU07QUFBQSxBQUNOLHFCQUFLLEVBQUU7QUFDMkIsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNoQix3QkFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQiwyQkFBTyxFQUFFLENBQUM7O0FBRTVDLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsd0JBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxBQUFDLE9BQU8sRUFBRSxDQUFDO0FBQ25DLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQUMsMkJBQU8sRUFBRSxDQUFDO0FBQ2xCLDBCQUFNO0FBQUEsQUFDTixxQkFBSyxFQUFFO0FBQ0wsd0JBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZCLHdCQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDaEIsd0JBQUksQ0FBQyxL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QyxXQUFXLEVBQUMsS0FBSyxFQUFDLEVBQUMsS0FBSyxFQUFDLEVBQUMsT0FBTyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLEtBQUssRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsQ0FBQyxDQUFDLEVBQUMsV0FBVyxFQUFDLEtBQUssRUFBQyxFQUFDLFNBQVMsRUFBQyxFQUFDLE9BQU8sRUFBQyxDQUFDLENBQUMsRUFBQyxDQUFDLEVBQUMsRUFBRSxDQUFDLEVBQUMsV0FBVyxFQUFDLElBQUksRUFBQyxFQUFDLENBQUM7QUFDM1UsZUFBTyxLQUFLLENBQUM7S0FBQyxDQUFBLEVBQUcsQ0FBQTtBQUNqQixVQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNyQixhQUFTLE1BQU0sR0FBSTtBQUFFLFlBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQUUsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckYsV0FBTyxJQUFJLE1BQU0sRUFBQSxDQUFDO0NBQ2pCLENBQUEsRUFBRyxDQUFDLHFCQUFlLFVBQVUiLCJmaWxlIjoicGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gRmlsZSBpZ25vcmVkIGluIGNvdmVyYWdlIHRlc3RzIHZpYSBzZXR0aW5nIGluIC5pc3RhbmJ1bC55bWxcbi8qIEppc29uIGdlbmVyYXRlZCBwYXJzZXIgKi9cbnZhciBoYW5kbGViYXJzID0gKGZ1bmN0aW9uKCl7XG52YXIgcGFyc2VyID0ge3RyYWNlOiBmdW5jdGlvbiB0cmFjZSAoKSB7IH0sXG55eToge30sXG5zeW1ib2xzXzoge1wiZXJyb3JcIjoyLFwicm9vdFwiOjMsXCJwcm9ncmFtXCI6NCxcIkVPRlwiOjUsXCJwcm9ncmFtX3JlcGV0aXRpb24wXCI6NixcInN0YXRlbWVudFwiOjcsXCJtdXN0YWNoZVwiOjgsXCJibG9ja1wiOjksXCJyYXdCbG9ja1wiOjEwLFwicGFydGlhbFwiOjExLFwicGFydGlhbEJsb2NrXCI6MTIsXCJjb250ZW50XCI6MTMsXCJDT01NRU5UXCI6MTQsXCJDT05URU5UXCI6MTUsXCJvcGVuUmF3QmxvY2tcIjoxNixcInJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MTcsXCJFTkRfUkFXX0JMT0NLXCI6MTgsXCJPUEVOX1JBV19CTE9DS1wiOjE5LFwiaGVscGVyTmFtZVwiOjIwLFwib3BlblJhd0Jsb2NrX3JlcGV0aXRpb24wXCI6MjEsXCJvcGVuUmF3QmxvY2tfb3B0aW9uMFwiOjIyLFwiQ0xPU0VfUkFXX0JMT0NLXCI6MjMsXCJvcGVuQmxvY2tcIjoyNCxcImJsb2NrX29wdGlvbjBcIjoyNSxcImNsb3NlQmxvY2tcIjoyNixcIm9wZW5JbnZlcnNlXCI6MjcsXCJibG9ja19vcHRpb24xXCI6MjgsXCJPUEVOX0JMT0NLXCI6MjksXCJvcGVuQmxvY2tfcmVwZXRpdGlvbjBcIjozMCxcIm9wZW5CbG9ja19vcHRpb24wXCI6MzEsXCJvcGVuQmxvY2tfb3B0aW9uMVwiOjMyLFwiQ0xPU0VcIjozMyxcIk9QRU5fSU5WRVJTRVwiOjM0LFwib3BlbkludmVyc2VfcmVwZXRpdGlvbjBcIjozNSxcIm9wZW5JbnZlcnNlX29wdGlvbjBcIjozNixcIm9wZW5JbnZlcnNlX29wdGlvbjFcIjozNyxcIm9wZW5JbnZlcnNlQ2hhaW5cIjozOCxcIk9QRU5fSU5WRVJTRV9DSEFJTlwiOjM5LFwib3BlbkludmVyc2VDaGFpbl9yZXBldGl0aW9uMFwiOjQwLFwib3BlbkludmVyc2VDaGFpbl9vcHRpb24wXCI6NDEsXCJvcGVuSW52ZXJzZUNoYWluX29wdGlvbjFcIjo0MixcImludmVyc2VBbmRQcm9ncmFtXCI6NDMsXCJJTlZFUlNFXCI6NDQsXCJpbnZlcnNlQ2hhaW5cIjo0NSxcImludmVyc2VDaGFpbl9vcHRpb24wXCI6NDYsXCJPUEVOX0VOREJMT0NLXCI6NDcsXCJPUEVOXCI6NDgsXCJtdXN0YWNoZV9yZXBldGl0aW9uMFwiOjQ5LFwibXVzdGFjaGVfb3B0aW9uMFwiOjUwLFwiT1BFTl9VTkVTQ0FQRURcIjo1MSxcIm11c3RhY2hlX3JlcGV0aXRpb24xXCI6NTIsXCJtdXN0YWNoZV9vcHRpb24xXCI6NTMsXCJDTE9TRV9VTkVTQ0FQRURcIjo1NCxcIk9QRU5fUEFSVElBTFwiOjU1LFwicGFydGlhbE5hbWVcIjo1NixcInBhcnRpYWxfcmVwZXRpdGlvbjBcIjo1NyxcInBhcnRpYWxfb3B0aW9uMFwiOjU4LFwib3BlblBhcnRpYWxCbG9ja1wiOjU5LFwiT1BFTl9QQVJUSUFMX0JMT0NLXCI6NjAsXCJvcGVuUGFydGlhbEJsb2NrX3JlcGV0aXRpb24wXCI6NjEsXCJvcGVuUGFydGlhbEJsb2NrX29wdGlvbjBcIjo2MixcInBhcmFtXCI6NjMsXCJzZXhwclwiOjY0LFwiT1BFTl9TRVhQUlwiOjY1LFwic2V4cHJfcmVwZXRpdGlvbjBcIjo2NixcInNleHByX29wdGlvbjBcIjo2NyxcIkNMT1NFX1NFWFBSXCI6NjgsXCJoYXNoXCI6NjksXCJoYXNoX3JlcGV0aXRpb25fcGx1czBcIjo3MCxcImhhc2hTZWdtZW50XCI6NzEsXCJJRFwiOjcyLFwiRVFVQUxTXCI6NzMsXCJibG9ja1BhcmFtc1wiOjc0LFwiT1BFTl9CTE9DS19QQVJBTVNcIjo3NSxcImJsb2NrUGFyYW1zX3JlcGV0aXRpb25fcGx1czBcIjo3NixcIkNMT1NFX0JMT0NLX1BBUkFNU1wiOjc3LFwicGF0aFwiOjc4LFwiZGF0YU5hbWVcIjo3OSxcIlNUUklOR1wiOjgwLFwiTlVNQkVSXCI6ODEsXCJCT09MRUFOXCI6ODIsXCJVTkRFRklORURcIjo4MyxcIk5VTExcIjo4NCxcIkRBVEFcIjo4NSxcInBhdGhTZWdtZW50c1wiOjg2LFwiU0VQXCI6ODcsXCIkYWNjZXB0XCI6MCxcIiRlbmRcIjoxfSxcbnRlcm1pbmFsc186IHsyOlwiZXJyb3JcIiw1OlwiRU9GXCIsMTQ6XCJDT01NRU5UXCIsMTU6XCJDT05URU5UXCIsMTg6XCJFTkRfUkFXX0JMT0NLXCIsMTk6XCJPUEVOX1JBV19CTE9DS1wiLDIzOlwiQ0xPU0VfUkFXX0JMT0NLXCIsMjk6XCJPUEVOX0JMT0NLXCIsMzM6XCJDTE9TRVwiLDM0OlwiT1BFTl9JTlZFUlNFXCIsMzk6XCJPUEVOX0lOVkVSU0VfQ0hBSU5cIiw0NDpcIklOVkVSU0VcIiw0NzpcIk9QRU5fRU5EQkxPQ0tcIiw0ODpcIk9QRU5cIiw1MTpcIk9QRU5fVU5FU0NBUEVEXCIsNTQ6XCJDTE9TRV9VTkVTQ0FQRURcIiw1NTpcIk9QRU5fUEFSVElBTFwiLDYwOlwiT1BFTl9QQVJUSUFMX0JMT0NLXCIsNjU6XCJPUEVOX1NFWFBSXCIsNjg6XCJDTE9TRV9TRVhQUlwiLDcyOlwiSURcIiw3MzpcIkVRVUFMU1wiLDc1OlwiT1BFTl9CTE9DS19QQVJBTVNcIiw3NzpcIkNMT1NFX0JMT0NLX1BBUkFNU1wiLDgwOlwiU1RSSU5HXCIsODE6XCJOVU1CRVJcIiw4MjpcIkJPT0xFQU5cIiw4MzpcIlVOREVGSU5FRFwiLDg0OlwiTlVMTFwiLDg1OlwiREFUQVwiLDg3OlwiU0VQXCJ9LFxucHJvZHVjdGlvbnNfOiBbMCxbMywyXSxbNCwxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbNywxXSxbMTMsMV0sWzEwLDNdLFsxNiw1XSxbOSw0XSxbOSw0XSxbMjQsNl0sWzI3LDZdLFszOCw2XSxbNDMsMl0sWzQ1LDNdLFs0NSwxXSxbMjYsM10sWzgsNV0sWzgsNV0sWzExLDVdLFsxMiwzXSxbNTksNV0sWzYzLDFdLFs2MywxXSxbNjQsNV0sWzY5LDFdLFs3MSwzXSxbNzQsM10sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFsyMCwxXSxbMjAsMV0sWzIwLDFdLFs1NiwxXSxbNTYsMV0sWzc5LDJdLFs3OCwxXSxbODYsM10sWzg2LDFdLFs2LDBdLFs2LDJdLFsxNywwXSxbMTcsMl0sWzIxLDBdLFsyMSwyXSxbMjIsMF0sWzIyLDFdLFsyNSwwXSxbMjUsMV0sWzI4LDBdLFsyOCwxXSxbMzAsMF0sWzMwLDJdLFszMSwwXSxbMzEsMV0sWzMyLDBdLFszMiwxXSxbMzUsMF0sWzM1LDJdLFszNiwwXSxbMzYsMV0sWzM3LDBdLFszNywxXSxbNDAsMF0sWzQwLDJdLFs0MSwwXSxbNDEsMV0sWzQyLDBdLFs0MiwxXSxbNDYsMF0sWzQ2LDFdLFs0OSwwXSxbNDksMl0sWzUwLDBdLFs1MCwxXSxbNTIsMF0sWzUyLDJdLFs1MywwXSxbNTMsMV0sWzU3LDBdLFs1NywyXSxbNTgsMF0sWzU4LDFdLFs2MSwwXSxbNjEsMl0sWzYyLDBdLFs2MiwxXSxbNjYsMF0sWzY2LDJdLFs2NywwXSxbNjcsMV0sWzcwLDFdLFs3MCwyXSxbNzYsMV0sWzc2LDJdXSxcbnBlcmZvcm1BY3Rpb246IGZ1bmN0aW9uIGFub255bW91cyh5eXRleHQseXlsZW5nLHl5bGluZW5vLHl5LHl5c3RhdGUsJCQsXyRcbikge1xuXG52YXIgJDAgPSAkJC5sZW5ndGggLSAxO1xuc3dpdGNoICh5eXN0YXRlKSB7XG5jYXNlIDE6IHJldHVybiAkJFskMC0xXTsgXG5icmVhaztcbmNhc2UgMjp0aGlzLiQgPSB5eS5wcmVwYXJlUHJvZ3JhbSgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDM6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDQ6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDU6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDY6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDc6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDk6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbW1lbnRTdGF0ZW1lbnQnLFxuICAgICAgdmFsdWU6IHl5LnN0cmlwQ29tbWVudCgkJFskMF0pLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDBdLCAkJFskMF0pLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMTA6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ0NvbnRlbnRTdGF0ZW1lbnQnLFxuICAgICAgb3JpZ2luYWw6ICQkWyQwXSxcbiAgICAgIHZhbHVlOiAkJFskMF0sXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAxMTp0aGlzLiQgPSB5eS5wcmVwYXJlUmF3QmxvY2soJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDEyOnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtM10sIHBhcmFtczogJCRbJDAtMl0sIGhhc2g6ICQkWyQwLTFdIH07XG5icmVhaztcbmNhc2UgMTM6dGhpcy4kID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTNdLCAkJFskMC0yXSwgJCRbJDAtMV0sICQkWyQwXSwgZmFsc2UsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE0OnRoaXMuJCA9IHl5LnByZXBhcmVCbG9jaygkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMF0sIHRydWUsIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMuJCA9IHsgb3BlbjogJCRbJDAtNV0sIHBhdGg6ICQkWyQwLTRdLCBwYXJhbXM6ICQkWyQwLTNdLCBoYXNoOiAkJFskMC0yXSwgYmxvY2tQYXJhbXM6ICQkWyQwLTFdLCBzdHJpcDogeXkuc3RyaXBGbGFncygkJFskMC01XSwgJCRbJDBdKSB9O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMuJCA9IHsgcGF0aDogJCRbJDAtNF0sIHBhcmFtczogJCRbJDAtM10sIGhhc2g6ICQkWyQwLTJdLCBibG9ja1BhcmFtczogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTVdLCAkJFskMF0pIH07XG5icmVhaztcbmNhc2UgMTc6dGhpcy4kID0geyBwYXRoOiAkJFskMC00XSwgcGFyYW1zOiAkJFskMC0zXSwgaGFzaDogJCRbJDAtMl0sIGJsb2NrUGFyYW1zOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNV0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAxODp0aGlzLiQgPSB7IHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTFdLCAkJFskMC0xXSksIHByb2dyYW06ICQkWyQwXSB9O1xuYnJlYWs7XG5jYXNlIDE5OlxuICAgIHZhciBpbnZlcnNlID0geXkucHJlcGFyZUJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCAkJFskMF0sIGZhbHNlLCB0aGlzLl8kKSxcbiAgICAgICAgcHJvZ3JhbSA9IHl5LnByZXBhcmVQcm9ncmFtKFtpbnZlcnNlXSwgJCRbJDAtMV0ubG9jKTtcbiAgICBwcm9ncmFtLmNoYWluZWQgPSB0cnVlO1xuXG4gICAgdGhpcy4kID0geyBzdHJpcDogJCRbJDAtMl0uc3RyaXAsIHByb2dyYW06IHByb2dyYW0sIGNoYWluOiB0cnVlIH07XG4gIFxuYnJlYWs7XG5jYXNlIDIwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAyMTp0aGlzLiQgPSB7cGF0aDogJCRbJDAtMV0sIHN0cmlwOiB5eS5zdHJpcEZsYWdzKCQkWyQwLTJdLCAkJFskMF0pfTtcbmJyZWFrO1xuY2FzZSAyMjp0aGlzLiQgPSB5eS5wcmVwYXJlTXVzdGFjaGUoJCRbJDAtM10sICQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDAtNF0sIHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksIHRoaXMuXyQpO1xuYnJlYWs7XG5jYXNlIDIzOnRoaXMuJCA9IHl5LnByZXBhcmVNdXN0YWNoZSgkJFskMC0zXSwgJCRbJDAtMl0sICQkWyQwLTFdLCAkJFskMC00XSwgeXkuc3RyaXBGbGFncygkJFskMC00XSwgJCRbJDBdKSwgdGhpcy5fJCk7XG5icmVhaztcbmNhc2UgMjQ6XG4gICAgdGhpcy4kID0ge1xuICAgICAgdHlwZTogJ1BhcnRpYWxTdGF0ZW1lbnQnLFxuICAgICAgbmFtZTogJCRbJDAtM10sXG4gICAgICBwYXJhbXM6ICQkWyQwLTJdLFxuICAgICAgaGFzaDogJCRbJDAtMV0sXG4gICAgICBpbmRlbnQ6ICcnLFxuICAgICAgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSksXG4gICAgICBsb2M6IHl5LmxvY0luZm8odGhpcy5fJClcbiAgICB9O1xuICBcbmJyZWFrO1xuY2FzZSAyNTp0aGlzLiQgPSB5eS5wcmVwYXJlUGFydGlhbEJsb2NrKCQkWyQwLTJdLCAkJFskMC0xXSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSAyNjp0aGlzLiQgPSB7IHBhdGg6ICQkWyQwLTNdLCBwYXJhbXM6ICQkWyQwLTJdLCBoYXNoOiAkJFskMC0xXSwgc3RyaXA6IHl5LnN0cmlwRmxhZ3MoJCRbJDAtNF0sICQkWyQwXSkgfTtcbmJyZWFrO1xuY2FzZSAyNzp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMjg6dGhpcy4kID0gJCRbJDBdO1xuYnJlYWs7XG5jYXNlIDI5OlxuICAgIHRoaXMuJCA9IHtcbiAgICAgIHR5cGU6ICdTdWJFeHByZXNzaW9uJyxcbiAgICAgIHBhdGg6ICQkWyQwLTNdLFxuICAgICAgcGFyYW1zOiAkJFskMC0yXSxcbiAgICAgIGhhc2g6ICQkWyQwLTFdLFxuICAgICAgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpXG4gICAgfTtcbiAgXG5icmVhaztcbmNhc2UgMzA6dGhpcy4kID0ge3R5cGU6ICdIYXNoJywgcGFpcnM6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzMTp0aGlzLiQgPSB7dHlwZTogJ0hhc2hQYWlyJywga2V5OiB5eS5pZCgkJFskMC0yXSksIHZhbHVlOiAkJFskMF0sIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzI6dGhpcy4kID0geXkuaWQoJCRbJDAtMV0pO1xuYnJlYWs7XG5jYXNlIDMzOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSAzNDp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgMzU6dGhpcy4kID0ge3R5cGU6ICdTdHJpbmdMaXRlcmFsJywgdmFsdWU6ICQkWyQwXSwgb3JpZ2luYWw6ICQkWyQwXSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNjp0aGlzLiQgPSB7dHlwZTogJ051bWJlckxpdGVyYWwnLCB2YWx1ZTogTnVtYmVyKCQkWyQwXSksIG9yaWdpbmFsOiBOdW1iZXIoJCRbJDBdKSwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzNzp0aGlzLiQgPSB7dHlwZTogJ0Jvb2xlYW5MaXRlcmFsJywgdmFsdWU6ICQkWyQwXSA9PT0gJ3RydWUnLCBvcmlnaW5hbDogJCRbJDBdID09PSAndHJ1ZScsIGxvYzogeXkubG9jSW5mbyh0aGlzLl8kKX07XG5icmVhaztcbmNhc2UgMzg6dGhpcy4kID0ge3R5cGU6ICdVbmRlZmluZWRMaXRlcmFsJywgb3JpZ2luYWw6IHVuZGVmaW5lZCwgdmFsdWU6IHVuZGVmaW5lZCwgbG9jOiB5eS5sb2NJbmZvKHRoaXMuXyQpfTtcbmJyZWFrO1xuY2FzZSAzOTp0aGlzLiQgPSB7dHlwZTogJ051bGxMaXRlcmFsJywgb3JpZ2luYWw6IG51bGwsIHZhbHVlOiBudWxsLCBsb2M6IHl5LmxvY0luZm8odGhpcy5fJCl9O1xuYnJlYWs7XG5jYXNlIDQwOnRoaXMuJCA9ICQkWyQwXTtcbmJyZWFrO1xuY2FzZSA0MTp0aGlzLiQgPSAkJFskMF07XG5icmVhaztcbmNhc2UgNDI6dGhpcy4kID0geXkucHJlcGFyZVBhdGgodHJ1ZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0Mzp0aGlzLiQgPSB5eS5wcmVwYXJlUGF0aChmYWxzZSwgJCRbJDBdLCB0aGlzLl8kKTtcbmJyZWFrO1xuY2FzZSA0NDogJCRbJDAtMl0ucHVzaCh7cGFydDogeXkuaWQoJCRbJDBdKSwgb3JpZ2luYWw6ICQkWyQwXSwgc2VwYXJhdG9yOiAkJFskMC0xXX0pOyB0aGlzLiQgPSAkJFskMC0yXTsgXG5icmVhaztcbmNhc2UgNDU6dGhpcy4kID0gW3twYXJ0OiB5eS5pZCgkJFskMF0pLCBvcmlnaW5hbDogJCRbJDBdfV07XG5icmVhaztcbmNhc2UgNDY6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNDc6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDQ4OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDQ5OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA1MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA1MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNTg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNTk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDY0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDY1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA3MDp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA3MTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgNzg6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgNzk6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDgyOnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDgzOiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA4Njp0aGlzLiQgPSBbXTtcbmJyZWFrO1xuY2FzZSA4NzokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgOTA6dGhpcy4kID0gW107XG5icmVhaztcbmNhc2UgOTE6JCRbJDAtMV0ucHVzaCgkJFskMF0pO1xuYnJlYWs7XG5jYXNlIDk0OnRoaXMuJCA9IFtdO1xuYnJlYWs7XG5jYXNlIDk1OiQkWyQwLTFdLnB1c2goJCRbJDBdKTtcbmJyZWFrO1xuY2FzZSA5ODp0aGlzLiQgPSBbJCRbJDBdXTtcbmJyZWFrO1xuY2FzZSA5OTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbmNhc2UgMTAwOnRoaXMuJCA9IFskJFskMF1dO1xuYnJlYWs7XG5jYXNlIDEwMTokJFskMC0xXS5wdXNoKCQkWyQwXSk7XG5icmVhaztcbn1cbn0sXG50YWJsZTogW3szOjEsNDoyLDU6WzIsNDZdLDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE6WzNdfSx7NTpbMSw0XX0sezU6WzIsMl0sNzo1LDg6Niw5OjcsMTA6OCwxMTo5LDEyOjEwLDEzOjExLDE0OlsxLDEyXSwxNTpbMSwyMF0sMTY6MTcsMTk6WzEsMjNdLDI0OjE1LDI3OjE2LDI5OlsxLDIxXSwzNDpbMSwyMl0sMzk6WzIsMl0sNDQ6WzIsMl0sNDc6WzIsMl0sNDg6WzEsMTNdLDUxOlsxLDE0XSw1NTpbMSwxOF0sNTk6MTksNjA6WzEsMjRdfSx7MTpbMiwxXX0sezU6WzIsNDddLDE0OlsyLDQ3XSwxNTpbMiw0N10sMTk6WzIsNDddLDI5OlsyLDQ3XSwzNDpbMiw0N10sMzk6WzIsNDddLDQ0OlsyLDQ3XSw0NzpbMiw0N10sNDg6WzIsNDddLDUxOlsyLDQ3XSw1NTpbMiw0N10sNjA6WzIsNDddfSx7NTpbMiwzXSwxNDpbMiwzXSwxNTpbMiwzXSwxOTpbMiwzXSwyOTpbMiwzXSwzNDpbMiwzXSwzOTpbMiwzXSw0NDpbMiwzXSw0NzpbMiwzXSw0ODpbMiwzXSw1MTpbMiwzXSw1NTpbMiwzXSw2MDpbMiwzXX0sezU6WzIsNF0sMTQ6WzIsNF0sMTU6WzIsNF0sMTk6WzIsNF0sMjk6WzIsNF0sMzQ6WzIsNF0sMzk6WzIsNF0sNDQ6WzIsNF0sNDc6WzIsNF0sNDg6WzIsNF0sNTE6WzIsNF0sNTU6WzIsNF0sNjA6WzIsNF19LHs1OlsyLDVdLDE0OlsyLDVdLDE1OlsyLDVdLDE5OlsyLDVdLDI5OlsyLDVdLDM0OlsyLDVdLDM5OlsyLDVdLDQ0OlsyLDVdLDQ3OlsyLDVdLDQ4OlsyLDVdLDUxOlsyLDVdLDU1OlsyLDVdLDYwOlsyLDVdfSx7NTpbMiw2XSwxNDpbMiw2XSwxNTpbMiw2XSwxOTpbMiw2XSwyOTpbMiw2XSwzNDpbMiw2XSwzOTpbMiw2XSw0NDpbMiw2XSw0NzpbMiw2XSw0ODpbMiw2XSw1MTpbMiw2XSw1NTpbMiw2XSw2MDpbMiw2XX0sezU6WzIsN10sMTQ6WzIsN10sMTU6WzIsN10sMTk6WzIsN10sMjk6WzIsN10sMzQ6WzIsN10sMzk6WzIsN10sNDQ6WzIsN10sNDc6WzIsN10sNDg6WzIsN10sNTE6WzIsN10sNTU6WzIsN10sNjA6WzIsN119LHs1OlsyLDhdLDE0OlsyLDhdLDE1OlsyLDhdLDE5OlsyLDhdLDI5OlsyLDhdLDM0OlsyLDhdLDM5OlsyLDhdLDQ0OlsyLDhdLDQ3OlsyLDhdLDQ4OlsyLDhdLDUxOlsyLDhdLDU1OlsyLDhdLDYwOlsyLDhdfSx7NTpbMiw5XSwxNDpbMiw5XSwxNTpbMiw5XSwxOTpbMiw5XSwyOTpbMiw5XSwzNDpbMiw5XSwzOTpbMiw5XSw0NDpbMiw5XSw0NzpbMiw5XSw0ODpbMiw5XSw1MTpbMiw5XSw1NTpbMiw5XSw2MDpbMiw5XX0sezIwOjI1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjM2LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6MzcsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sMzk6WzIsNDZdLDQ0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NDozOCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezE1OlsyLDQ4XSwxNzozOSwxODpbMiw0OF19LHsyMDo0MSw1Njo0MCw2NDo0Miw2NTpbMSw0M10sNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NDo0NCw2OjMsMTQ6WzIsNDZdLDE1OlsyLDQ2XSwxOTpbMiw0Nl0sMjk6WzIsNDZdLDM0OlsyLDQ2XSw0NzpbMiw0Nl0sNDg6WzIsNDZdLDUxOlsyLDQ2XSw1NTpbMiw0Nl0sNjA6WzIsNDZdfSx7NTpbMiwxMF0sMTQ6WzIsMTBdLDE1OlsyLDEwXSwxODpbMiwxMF0sMTk6WzIsMTBdLDI5OlsyLDEwXSwzNDpbMiwxMF0sMzk6WzIsMTBdLDQ0OlsyLDEwXSw0NzpbMiwxMF0sNDg6WzIsMTBdLDUxOlsyLDEwXSw1NTpbMiwxMF0sNjA6WzIsMTBdfSx7MjA6NDUsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDYsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDcsNzI6WzEsMzVdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7MjA6NDEsNTY6NDgsNjQ6NDIsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsyLDc4XSw0OTo0OSw2NTpbMiw3OF0sNzI6WzIsNzhdLDgwOlsyLDc4XSw4MTpbMiw3OF0sODI6WzIsNzhdLDgzOlsyLDc4XSw4NDpbMiw3OF0sODU6WzIsNzhdfSx7MjM6WzIsMzNdLDMzOlsyLDMzXSw1NDpbMiwzM10sNjU6WzIsMzNdLDY4OlsyLDMzXSw3MjpbMiwzM10sNzU6WzIsMzNdLDgwOlsyLDMzXSw4MTpbMiwzM10sODI6WzIsMzNdLDgzOlsyLDMzXSw4NDpbMiwzM10sODU6WzIsMzNdfSx7MjM6WzIsMzRdLDMzOlsyLDM0XSw1NDpbMiwzNF0sNjU6WzIsMzRdLDY4OlsyLDM0XSw3MjpbMiwzNF0sNzU6WzIsMzRdLDgwOlsyLDM0XSw4MTpbMiwzNF0sODI6WzIsMzRdLDgzOlsyLDM0XSw4NDpbMiwzNF0sODU6WzIsMzRdfSx7MjM6WzIsMzVdLDMzOlsyLDM1XSw1NDpbMiwzNV0sNjU6WzIsMzVdLDY4OlsyLDM1XSw3MjpbMiwzNV0sNzU6WzIsMzVdLDgwOlsyLDM1XSw4MTpbMiwzNV0sODI6WzIsMzVdLDgzOlsyLDM1XSw4NDpbMiwzNV0sODU6WzIsMzVdfSx7MjM6WzIsMzZdLDMzOlsyLDM2XSw1NDpbMiwzNl0sNjU6WzIsMzZdLDY4OlsyLDM2XSw3MjpbMiwzNl0sNzU6WzIsMzZdLDgwOlsyLDM2XSw4MTpbMiwzNl0sODI6WzIsMzZdLDgzOlsyLDM2XSw4NDpbMiwzNl0sODU6WzIsMzZdfSx7MjM6WzIsMzddLDMzOlsyLDM3XSw1NDpbMiwzN10sNjU6WzIsMzddLDY4OlsyLDM3XSw3MjpbMiwzN10sNzU6WzIsMzddLDgwOlsyLDM3XSw4MTpbMiwzN10sODI6WzIsMzddLDgzOlsyLDM3XSw4NDpbMiwzN10sODU6WzIsMzddfSx7MjM6WzIsMzhdLDMzOlsyLDM4XSw1NDpbMiwzOF0sNjU6WzIsMzhdLDY4OlsyLDM4XSw3MjpbMiwzOF0sNzU6WzIsMzhdLDgwOlsyLDM4XSw4MTpbMiwzOF0sODI6WzIsMzhdLDgzOlsyLDM4XSw4NDpbMiwzOF0sODU6WzIsMzhdfSx7MjM6WzIsMzldLDMzOlsyLDM5XSw1NDpbMiwzOV0sNjU6WzIsMzldLDY4OlsyLDM5XSw3MjpbMiwzOV0sNzU6WzIsMzldLDgwOlsyLDM5XSw4MTpbMiwzOV0sODI6WzIsMzldLDgzOlsyLDM5XSw4NDpbMiwzOV0sODU6WzIsMzldfSx7MjM6WzIsNDNdLDMzOlsyLDQzXSw1NDpbMiw0M10sNjU6WzIsNDNdLDY4OlsyLDQzXSw3MjpbMiw0M10sNzU6WzIsNDNdLDgwOlsyLDQzXSw4MTpbMiw0M10sODI6WzIsNDNdLDgzOlsyLDQzXSw4NDpbMiw0M10sODU6WzIsNDNdLDg3OlsxLDUwXX0sezcyOlsxLDM1XSw4Njo1MX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDc1OlsyLDQ1XSw4MDpbMiw0NV0sODE6WzIsNDVdLDgyOlsyLDQ1XSw4MzpbMiw0NV0sODQ6WzIsNDVdLDg1OlsyLDQ1XSw4NzpbMiw0NV19LHs1Mjo1Miw1NDpbMiw4Ml0sNjU6WzIsODJdLDcyOlsyLDgyXSw4MDpbMiw4Ml0sODE6WzIsODJdLDgyOlsyLDgyXSw4MzpbMiw4Ml0sODQ6WzIsODJdLDg1OlsyLDgyXX0sezI1OjUzLDM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6NTQsNDc6WzIsNTRdfSx7Mjg6NTksNDM6NjAsNDQ6WzEsNThdLDQ3OlsyLDU2XX0sezEzOjYyLDE1OlsxLDIwXSwxODpbMSw2MV19LHszMzpbMiw4Nl0sNTc6NjMsNjU6WzIsODZdLDcyOlsyLDg2XSw4MDpbMiw4Nl0sODE6WzIsODZdLDgyOlsyLDg2XSw4MzpbMiw4Nl0sODQ6WzIsODZdLDg1OlsyLDg2XX0sezMzOlsyLDQwXSw2NTpbMiw0MF0sNzI6WzIsNDBdLDgwOlsyLDQwXSw4MTpbMiw0MF0sODI6WzIsNDBdLDgzOlsyLDQwXSw4NDpbMiw0MF0sODU6WzIsNDBdfSx7MzM6WzIsNDFdLDY1OlsyLDQxXSw3MjpbMiw0MV0sODA6WzIsNDFdLDgxOlsyLDQxXSw4MjpbMiw0MV0sODM6WzIsNDFdLDg0OlsyLDQxXSw4NTpbMiw0MV19LHsyMDo2NCw3MjpbMSwzNV0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo2NSw0NzpbMSw2Nl19LHszMDo2NywzMzpbMiw1OF0sNjU6WzIsNThdLDcyOlsyLDU4XSw3NTpbMiw1OF0sODA6WzIsNThdLDgxOlsyLDU4XSw4MjpbMiw1OF0sODM6WzIsNThdLDg0OlsyLDU4XSw4NTpbMiw1OF19LHszMzpbMiw2NF0sMzU6NjgsNjU6WzIsNjRdLDcyOlsyLDY0XSw3NTpbMiw2NF0sODA6WzIsNjRdLDgxOlsyLDY0XSw4MjpbMiw2NF0sODM6WzIsNjRdLDg0OlsyLDY0XSw4NTpbMiw2NF19LHsyMTo2OSwyMzpbMiw1MF0sNjU6WzIsNTBdLDcyOlsyLDUwXSw4MDpbMiw1MF0sODE6WzIsNTBdLDgyOlsyLDUwXSw4MzpbMiw1MF0sODQ6WzIsNTBdLDg1OlsyLDUwXX0sezMzOlsyLDkwXSw2MTo3MCw2NTpbMiw5MF0sNzI6WzIsOTBdLDgwOlsyLDkwXSw4MTpbMiw5MF0sODI6WzIsOTBdLDgzOlsyLDkwXSw4NDpbMiw5MF0sODU6WzIsOTBdfSx7MjA6NzQsMzM6WzIsODBdLDUwOjcxLDYzOjcyLDY0Ojc1LDY1OlsxLDQzXSw2OTo3Myw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHs3MjpbMSw3OV19LHsyMzpbMiw0Ml0sMzM6WzIsNDJdLDU0OlsyLDQyXSw2NTpbMiw0Ml0sNjg6WzIsNDJdLDcyOlsyLDQyXSw3NTpbMiw0Ml0sODA6WzIsNDJdLDgxOlsyLDQyXSw4MjpbMiw0Ml0sODM6WzIsNDJdLDg0OlsyLDQyXSw4NTpbMiw0Ml0sODc6WzEsNTBdfSx7MjA6NzQsNTM6ODAsNTQ6WzIsODRdLDYzOjgxLDY0Ojc1LDY1OlsxLDQzXSw2OTo4Miw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyNjo4Myw0NzpbMSw2Nl19LHs0NzpbMiw1NV19LHs0Ojg0LDY6MywxNDpbMiw0Nl0sMTU6WzIsNDZdLDE5OlsyLDQ2XSwyOTpbMiw0Nl0sMzQ6WzIsNDZdLDM5OlsyLDQ2XSw0NDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezQ3OlsyLDIwXX0sezIwOjg1LDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezQ6ODYsNjozLDE0OlsyLDQ2XSwxNTpbMiw0Nl0sMTk6WzIsNDZdLDI5OlsyLDQ2XSwzNDpbMiw0Nl0sNDc6WzIsNDZdLDQ4OlsyLDQ2XSw1MTpbMiw0Nl0sNTU6WzIsNDZdLDYwOlsyLDQ2XX0sezI2Ojg3LDQ3OlsxLDY2XX0sezQ3OlsyLDU3XX0sezU6WzIsMTFdLDE0OlsyLDExXSwxNTpbMiwxMV0sMTk6WzIsMTFdLDI5OlsyLDExXSwzNDpbMiwxMV0sMzk6WzIsMTFdLDQ0OlsyLDExXSw0NzpbMiwxMV0sNDg6WzIsMTFdLDUxOlsyLDExXSw1NTpbMiwxMV0sNjA6WzIsMTFdfSx7MTU6WzIsNDldLDE4OlsyLDQ5XX0sezIwOjc0LDMzOlsyLDg4XSw1ODo4OCw2Mzo4OSw2NDo3NSw2NTpbMSw0M10sNjk6OTAsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NjU6WzIsOTRdLDY2OjkxLDY4OlsyLDk0XSw3MjpbMiw5NF0sODA6WzIsOTRdLDgxOlsyLDk0XSw4MjpbMiw5NF0sODM6WzIsOTRdLDg0OlsyLDk0XSw4NTpbMiw5NF19LHs1OlsyLDI1XSwxNDpbMiwyNV0sMTU6WzIsMjVdLDE5OlsyLDI1XSwyOTpbMiwyNV0sMzQ6WzIsMjVdLDM5OlsyLDI1XSw0NDpbMiwyNV0sNDc6WzIsMjVdLDQ4OlsyLDI1XSw1MTpbMiwyNV0sNTU6WzIsMjVdLDYwOlsyLDI1XX0sezIwOjkyLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMxOjkzLDMzOlsyLDYwXSw2Mzo5NCw2NDo3NSw2NTpbMSw0M10sNjk6OTUsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDYwXSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDMzOlsyLDY2XSwzNjo5Niw2Mzo5Nyw2NDo3NSw2NTpbMSw0M10sNjk6OTgsNzA6NzYsNzE6NzcsNzI6WzEsNzhdLDc1OlsyLDY2XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezIwOjc0LDIyOjk5LDIzOlsyLDUyXSw2MzoxMDAsNjQ6NzUsNjU6WzEsNDNdLDY5OjEwMSw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzg6MjYsNzk6MjcsODA6WzEsMjhdLDgxOlsxLDI5XSw4MjpbMSwzMF0sODM6WzEsMzFdLDg0OlsxLDMyXSw4NTpbMSwzNF0sODY6MzN9LHsyMDo3NCwzMzpbMiw5Ml0sNjI6MTAyLDYzOjEwMyw2NDo3NSw2NTpbMSw0M10sNjk6MTA0LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDEwNV19LHszMzpbMiw3OV0sNjU6WzIsNzldLDcyOlsyLDc5XSw4MDpbMiw3OV0sODE6WzIsNzldLDgyOlsyLDc5XSw4MzpbMiw3OV0sODQ6WzIsNzldLDg1OlsyLDc5XX0sezMzOlsyLDgxXX0sezIzOlsyLDI3XSwzMzpbMiwyN10sNTQ6WzIsMjddLDY1OlsyLDI3XSw2ODpbMiwyN10sNzI6WzIsMjddLDc1OlsyLDI3XSw4MDpbMiwyN10sODE6WzIsMjddLDgyOlsyLDI3XSw4MzpbMiwyN10sODQ6WzIsMjddLDg1OlsyLDI3XX0sezIzOlsyLDI4XSwzMzpbMiwyOF0sNTQ6WzIsMjhdLDY1OlsyLDI4XSw2ODpbMiwyOF0sNzI6WzIsMjhdLDc1OlsyLDI4XSw4MDpbMiwyOF0sODE6WzIsMjhdLDgyOlsyLDI4XSw4MzpbMiwyOF0sODQ6WzIsMjhdLDg1OlsyLDI4XX0sezIzOlsyLDMwXSwzMzpbMiwzMF0sNTQ6WzIsMzBdLDY4OlsyLDMwXSw3MToxMDYsNzI6WzEsMTA3XSw3NTpbMiwzMF19LHsyMzpbMiw5OF0sMzM6WzIsOThdLDU0OlsyLDk4XSw2ODpbMiw5OF0sNzI6WzIsOThdLDc1OlsyLDk4XX0sezIzOlsyLDQ1XSwzMzpbMiw0NV0sNTQ6WzIsNDVdLDY1OlsyLDQ1XSw2ODpbMiw0NV0sNzI6WzIsNDVdLDczOlsxLDEwOF0sNzU6WzIsNDVdLDgwOlsyLDQ1XSw4MTpbMiw0NV0sODI6WzIsNDVdLDgzOlsyLDQ1XSw4NDpbMiw0NV0sODU6WzIsNDVdLDg3OlsyLDQ1XX0sezIzOlsyLDQ0XSwzMzpbMiw0NF0sNTQ6WzIsNDRdLDY1OlsyLDQ0XSw2ODpbMiw0NF0sNzI6WzIsNDRdLDc1OlsyLDQ0XSw4MDpbMiw0NF0sODE6WzIsNDRdLDgyOlsyLDQ0XSw4MzpbMiw0NF0sODQ6WzIsNDRdLDg1OlsyLDQ0XSw4NzpbMiw0NF19LHs1NDpbMSwxMDldfSx7NTQ6WzIsODNdLDY1OlsyLDgzXSw3MjpbMiw4M10sODA6WzIsODNdLDgxOlsyLDgzXSw4MjpbMiw4M10sODM6WzIsODNdLDg0OlsyLDgzXSw4NTpbMiw4M119LHs1NDpbMiw4NV19LHs1OlsyLDEzXSwxNDpbMiwxM10sMTU6WzIsMTNdLDE5OlsyLDEzXSwyOTpbMiwxM10sMzQ6WzIsMTNdLDM5OlsyLDEzXSw0NDpbMiwxM10sNDc6WzIsMTNdLDQ4OlsyLDEzXSw1MTpbMiwxM10sNTU6WzIsMTNdLDYwOlsyLDEzXX0sezM4OjU1LDM5OlsxLDU3XSw0Mzo1Niw0NDpbMSw1OF0sNDU6MTExLDQ2OjExMCw0NzpbMiw3Nl19LHszMzpbMiw3MF0sNDA6MTEyLDY1OlsyLDcwXSw3MjpbMiw3MF0sNzU6WzIsNzBdLDgwOlsyLDcwXSw4MTpbMiw3MF0sODI6WzIsNzBdLDgzOlsyLDcwXSw4NDpbMiw3MF0sODU6WzIsNzBdfSx7NDc6WzIsMThdfSx7NTpbMiwxNF0sMTQ6WzIsMTRdLDE1OlsyLDE0XSwxOTpbMiwxNF0sMjk6WzIsMTRdLDM0OlsyLDE0XSwzOTpbMiwxNF0sNDQ6WzIsMTRdLDQ3OlsyLDE0XSw0ODpbMiwxNF0sNTE6WzIsMTRdLDU1OlsyLDE0XSw2MDpbMiwxNF19LHszMzpbMSwxMTNdfSx7MzM6WzIsODddLDY1OlsyLDg3XSw3MjpbMiw4N10sODA6WzIsODddLDgxOlsyLDg3XSw4MjpbMiw4N10sODM6WzIsODddLDg0OlsyLDg3XSw4NTpbMiw4N119LHszMzpbMiw4OV19LHsyMDo3NCw2MzoxMTUsNjQ6NzUsNjU6WzEsNDNdLDY3OjExNCw2ODpbMiw5Nl0sNjk6MTE2LDcwOjc2LDcxOjc3LDcyOlsxLDc4XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezMzOlsxLDExN119LHszMjoxMTgsMzM6WzIsNjJdLDc0OjExOSw3NTpbMSwxMjBdfSx7MzM6WzIsNTldLDY1OlsyLDU5XSw3MjpbMiw1OV0sNzU6WzIsNTldLDgwOlsyLDU5XSw4MTpbMiw1OV0sODI6WzIsNTldLDgzOlsyLDU5XSw4NDpbMiw1OV0sODU6WzIsNTldfSx7MzM6WzIsNjFdLDc1OlsyLDYxXX0sezMzOlsyLDY4XSwzNzoxMjEsNzQ6MTIyLDc1OlsxLDEyMF19LHszMzpbMiw2NV0sNjU6WzIsNjVdLDcyOlsyLDY1XSw3NTpbMiw2NV0sODA6WzIsNjVdLDgxOlsyLDY1XSw4MjpbMiw2NV0sODM6WzIsNjVdLDg0OlsyLDY1XSw4NTpbMiw2NV19LHszMzpbMiw2N10sNzU6WzIsNjddfSx7MjM6WzEsMTIzXX0sezIzOlsyLDUxXSw2NTpbMiw1MV0sNzI6WzIsNTFdLDgwOlsyLDUxXSw4MTpbMiw1MV0sODI6WzIsNTFdLDgzOlsyLDUxXSw4NDpbMiw1MV0sODU6WzIsNTFdfSx7MjM6WzIsNTNdfSx7MzM6WzEsMTI0XX0sezMzOlsyLDkxXSw2NTpbMiw5MV0sNzI6WzIsOTFdLDgwOlsyLDkxXSw4MTpbMiw5MV0sODI6WzIsOTFdLDgzOlsyLDkxXSw4NDpbMiw5MV0sODU6WzIsOTFdfSx7MzM6WzIsOTNdfSx7NTpbMiwyMl0sMTQ6WzIsMjJdLDE1OlsyLDIyXSwxOTpbMiwyMl0sMjk6WzIsMjJdLDM0OlsyLDIyXSwzOTpbMiwyMl0sNDQ6WzIsMjJdLDQ3OlsyLDIyXSw0ODpbMiwyMl0sNTE6WzIsMjJdLDU1OlsyLDIyXSw2MDpbMiwyMl19LHsyMzpbMiw5OV0sMzM6WzIsOTldLDU0OlsyLDk5XSw2ODpbMiw5OV0sNzI6WzIsOTldLDc1OlsyLDk5XX0sezczOlsxLDEwOF19LHsyMDo3NCw2MzoxMjUsNjQ6NzUsNjU6WzEsNDNdLDcyOlsxLDM1XSw3ODoyNiw3OToyNyw4MDpbMSwyOF0sODE6WzEsMjldLDgyOlsxLDMwXSw4MzpbMSwzMV0sODQ6WzEsMzJdLDg1OlsxLDM0XSw4NjozM30sezU6WzIsMjNdLDE0OlsyLDIzXSwxNTpbMiwyM10sMTk6WzIsMjNdLDI5OlsyLDIzXSwzNDpbMiwyM10sMzk6WzIsMjNdLDQ0OlsyLDIzXSw0NzpbMiwyM10sNDg6WzIsMjNdLDUxOlsyLDIzXSw1NTpbMiwyM10sNjA6WzIsMjNdfSx7NDc6WzIsMTldfSx7NDc6WzIsNzddfSx7MjA6NzQsMzM6WzIsNzJdLDQxOjEyNiw2MzoxMjcsNjQ6NzUsNjU6WzEsNDNdLDY5OjEyOCw3MDo3Niw3MTo3Nyw3MjpbMSw3OF0sNzU6WzIsNzJdLDc4OjI2LDc5OjI3LDgwOlsxLDI4XSw4MTpbMSwyOV0sODI6WzEsMzBdLDgzOlsxLDMxXSw4NDpbMSwzMl0sODU6WzEsMzRdLDg2OjMzfSx7NTpbMiwyNF0sMTQ6WzIsMjRdLDE1OlsyLDI0XSwxOTpbMiwyNF0sMjk6WzIsMjRdLDM0OlsyLDI0XSwzOTpbMiwyNF0sNDQ6WzIsMjRdLDQ3OlsyLDI0XSw0ODpbMiwyNF0sNTE6WzIsMjRdLDU1OlsyLDI0XSw2MDpbMiwyNF19LHs2ODpbMSwxMjldfSx7NjU6WzIsOTVdLDY4OlsyLDk1XSw3MjpbMiw5NV0sODA6WzIsOTVdLDgxOlsyLDk1XSw4MjpbMiw5NV0sODM6WzIsOTVdLDg0OlsyLDk1XSw4NTpbMiw5NV19LHs2ODpbMiw5N119LHs1OlsyLDIxXSwxNDpbMiwyMV0sMTU6WzIsMjFdLDE5OlsyLDIxXSwyOTpbMiwyMV0sMzQ6WzIsMjFdLDM5OlsyLDIxXSw0NDpbMiwyMV0sNDc6WzIsMjFdLDQ4OlsyLDIxXSw1MTpbMiwyMV0sNTU6WzIsMjFdLDYwOlsyLDIxXX0sezMzOlsxLDEzMF19LHszMzpbMiw2M119LHs3MjpbMSwxMzJdLDc2OjEzMX0sezMzOlsxLDEzM119LHszMzpbMiw2OV19LHsxNTpbMiwxMl0sMTg6WzIsMTJdfSx7MTQ6WzIsMjZdLDE1OlsyLDI2XSwxOTpbMiwyNl0sMjk6WzIsMjZdLDM0OlsyLDI2XSw0NzpbMiwyNl0sNDg6WzIsMjZdLDUxOlsyLDI2XSw1NTpbMiwyNl0sNjA6WzIsMjZdfSx7MjM6WzIsMzFdLDMzOlsyLDMxXSw1NDpbMiwzMV0sNjg6WzIsMzFdLDcyOlsyLDMxXSw3NTpbMiwzMV19LHszMzpbMiw3NF0sNDI6MTM0LDc0OjEzNSw3NTpbMSwxMjBdfSx7MzM6WzIsNzFdLDY1OlsyLDcxXSw3MjpbMiw3MV0sNzU6WzIsNzFdLDgwOlsyLDcxXSw4MTpbMiw3MV0sODI6WzIsNzFdLDgzOlsyLDcxXSw4NDpbMiw3MV0sODU6WzIsNzFdfSx7MzM6WzIsNzNdLDc1OlsyLDczXX0sezIzOlsyLDI5XSwzMzpbMiwyOV0sNTQ6WzIsMjldLDY1OlsyLDI5XSw2ODpbMiwyOV0sNzI6WzIsMjldLDc1OlsyLDI5XSw4MDpbMiwyOV0sODE6WzIsMjldLDgyOlsyLDI5XSw4MzpbMiwyOV0sODQ6WzIsMjldLDg1OlsyLDI5XX0sezE0OlsyLDE1XSwxNTpbMiwxNV0sMTk6WzIsMTVdLDI5OlsyLDE1XSwzNDpbMiwxNV0sMzk6WzIsMTVdLDQ0OlsyLDE1XSw0NzpbMiwxNV0sNDg6WzIsMTVdLDUxOlsyLDE1XSw1NTpbMiwxNV0sNjA6WzIsMTVdfSx7NzI6WzEsMTM3XSw3NzpbMSwxMzZdfSx7NzI6WzIsMTAwXSw3NzpbMiwxMDBdfSx7MTQ6WzIsMTZdLDE1OlsyLDE2XSwxOTpbMiwxNl0sMjk6WzIsMTZdLDM0OlsyLDE2XSw0NDpbMiwxNl0sNDc6WzIsMTZdLDQ4OlsyLDE2XSw1MTpbMiwxNl0sNTU6WzIsMTZdLDYwOlsyLDE2XX0sezMzOlsxLDEzOF19LHszMzpbMiw3NV19LHszMzpbMiwzMl19LHs3MjpbMiwxMDFdLDc3OlsyLDEwMV19LHsxNDpbMiwxN10sMTU6WzIsMTddLDE5OlsyLDE3XSwyOTpbMiwxN10sMzQ6WzIsMTddLDM5OlsyLDE3XSw0NDpbMiwxN10sNDc6WzIsMTddLDQ4OlsyLDE3XSw1MTpbMiwxN10sNTU6WzIsMTddLDYwOlsyLDE3XX1dLFxuZGVmYXVsdEFjdGlvbnM6IHs0OlsyLDFdLDU0OlsyLDU1XSw1NjpbMiwyMF0sNjA6WzIsNTddLDczOlsyLDgxXSw4MjpbMiw4NV0sODY6WzIsMThdLDkwOlsyLDg5XSwxMDE6WzIsNTNdLDEwNDpbMiw5M10sMTEwOlsyLDE5XSwxMTE6WzIsNzddLDExNjpbMiw5N10sMTE5OlsyLDYzXSwxMjI6WzIsNjldLDEzNTpbMiw3NV0sMTM2OlsyLDMyXX0sXG5wYXJzZUVycm9yOiBmdW5jdGlvbiBwYXJzZUVycm9yIChzdHIsIGhhc2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3Ioc3RyKTtcbn0sXG5wYXJzZTogZnVuY3Rpb24gcGFyc2UoaW5wdXQpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXMsIHN0YWNrID0gWzBdLCB2c3RhY2sgPSBbbnVsbF0sIGxzdGFjayA9IFtdLCB0YWJsZSA9IHRoaXMudGFibGUsIHl5dGV4dCA9IFwiXCIsIHl5bGluZW5vID0gMCwgeXlsZW5nID0gMCwgcmVjb3ZlcmluZyA9IDAsIFRFUlJPUiA9IDIsIEVPRiA9IDE7XG4gICAgdGhpcy5sZXhlci5zZXRJbnB1dChpbnB1dCk7XG4gICAgdGhpcy5sZXhlci55eSA9IHRoaXMueXk7XG4gICAgdGhpcy55eS5sZXhlciA9IHRoaXMubGV4ZXI7XG4gICAgdGhpcy55eS5wYXJzZXIgPSB0aGlzO1xuICAgIGlmICh0eXBlb2YgdGhpcy5sZXhlci55eWxsb2MgPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgdGhpcy5sZXhlci55eWxsb2MgPSB7fTtcbiAgICB2YXIgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICBsc3RhY2sucHVzaCh5eWxvYyk7XG4gICAgdmFyIHJhbmdlcyA9IHRoaXMubGV4ZXIub3B0aW9ucyAmJiB0aGlzLmxleGVyLm9wdGlvbnMucmFuZ2VzO1xuICAgIGlmICh0eXBlb2YgdGhpcy55eS5wYXJzZUVycm9yID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIHRoaXMucGFyc2VFcnJvciA9IHRoaXMueXkucGFyc2VFcnJvcjtcbiAgICBmdW5jdGlvbiBwb3BTdGFjayhuKSB7XG4gICAgICAgIHN0YWNrLmxlbmd0aCA9IHN0YWNrLmxlbmd0aCAtIDIgKiBuO1xuICAgICAgICB2c3RhY2subGVuZ3RoID0gdnN0YWNrLmxlbmd0aCAtIG47XG4gICAgICAgIGxzdGFjay5sZW5ndGggPSBsc3RhY2subGVuZ3RoIC0gbjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbGV4KCkge1xuICAgICAgICB2YXIgdG9rZW47XG4gICAgICAgIHRva2VuID0gc2VsZi5sZXhlci5sZXgoKSB8fCAxO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHNlbGYuc3ltYm9sc19bdG9rZW5dIHx8IHRva2VuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2tlbjtcbiAgICB9XG4gICAgdmFyIHN5bWJvbCwgcHJlRXJyb3JTeW1ib2wsIHN0YXRlLCBhY3Rpb24sIGEsIHIsIHl5dmFsID0ge30sIHAsIGxlbiwgbmV3U3RhdGUsIGV4cGVjdGVkO1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHN0YXRlID0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMV07XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRBY3Rpb25zW3N0YXRlXSkge1xuICAgICAgICAgICAgYWN0aW9uID0gdGhpcy5kZWZhdWx0QWN0aW9uc1tzdGF0ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoc3ltYm9sID09PSBudWxsIHx8IHR5cGVvZiBzeW1ib2wgPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgIHN5bWJvbCA9IGxleCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWN0aW9uID0gdGFibGVbc3RhdGVdICYmIHRhYmxlW3N0YXRlXVtzeW1ib2xdO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYWN0aW9uID09PSBcInVuZGVmaW5lZFwiIHx8ICFhY3Rpb24ubGVuZ3RoIHx8ICFhY3Rpb25bMF0pIHtcbiAgICAgICAgICAgIHZhciBlcnJTdHIgPSBcIlwiO1xuICAgICAgICAgICAgaWYgKCFyZWNvdmVyaW5nKSB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHAgaW4gdGFibGVbc3RhdGVdKVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtaW5hbHNfW3BdICYmIHAgPiAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZC5wdXNoKFwiJ1wiICsgdGhpcy50ZXJtaW5hbHNfW3BdICsgXCInXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGV4ZXIuc2hvd1Bvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGVyclN0ciA9IFwiUGFyc2UgZXJyb3Igb24gbGluZSBcIiArICh5eWxpbmVubyArIDEpICsgXCI6XFxuXCIgKyB0aGlzLmxleGVyLnNob3dQb3NpdGlvbigpICsgXCJcXG5FeHBlY3RpbmcgXCIgKyBleHBlY3RlZC5qb2luKFwiLCBcIikgKyBcIiwgZ290ICdcIiArICh0aGlzLnRlcm1pbmFsc19bc3ltYm9sXSB8fCBzeW1ib2wpICsgXCInXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyU3RyID0gXCJQYXJzZSBlcnJvciBvbiBsaW5lIFwiICsgKHl5bGluZW5vICsgMSkgKyBcIjogVW5leHBlY3RlZCBcIiArIChzeW1ib2wgPT0gMT9cImVuZCBvZiBpbnB1dFwiOlwiJ1wiICsgKHRoaXMudGVybWluYWxzX1tzeW1ib2xdIHx8IHN5bWJvbCkgKyBcIidcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucGFyc2VFcnJvcihlcnJTdHIsIHt0ZXh0OiB0aGlzLmxleGVyLm1hdGNoLCB0b2tlbjogdGhpcy50ZXJtaW5hbHNfW3N5bWJvbF0gfHwgc3ltYm9sLCBsaW5lOiB0aGlzLmxleGVyLnl5bGluZW5vLCBsb2M6IHl5bG9jLCBleHBlY3RlZDogZXhwZWN0ZWR9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWN0aW9uWzBdIGluc3RhbmNlb2YgQXJyYXkgJiYgYWN0aW9uLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlBhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiBcIiArIHN0YXRlICsgXCIsIHRva2VuOiBcIiArIHN5bWJvbCk7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoIChhY3Rpb25bMF0pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgc3RhY2sucHVzaChzeW1ib2wpO1xuICAgICAgICAgICAgdnN0YWNrLnB1c2godGhpcy5sZXhlci55eXRleHQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2godGhpcy5sZXhlci55eWxsb2MpO1xuICAgICAgICAgICAgc3RhY2sucHVzaChhY3Rpb25bMV0pO1xuICAgICAgICAgICAgc3ltYm9sID0gbnVsbDtcbiAgICAgICAgICAgIGlmICghcHJlRXJyb3JTeW1ib2wpIHtcbiAgICAgICAgICAgICAgICB5eWxlbmcgPSB0aGlzLmxleGVyLnl5bGVuZztcbiAgICAgICAgICAgICAgICB5eXRleHQgPSB0aGlzLmxleGVyLnl5dGV4dDtcbiAgICAgICAgICAgICAgICB5eWxpbmVubyA9IHRoaXMubGV4ZXIueXlsaW5lbm87XG4gICAgICAgICAgICAgICAgeXlsb2MgPSB0aGlzLmxleGVyLnl5bGxvYztcbiAgICAgICAgICAgICAgICBpZiAocmVjb3ZlcmluZyA+IDApXG4gICAgICAgICAgICAgICAgICAgIHJlY292ZXJpbmctLTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3ltYm9sID0gcHJlRXJyb3JTeW1ib2w7XG4gICAgICAgICAgICAgICAgcHJlRXJyb3JTeW1ib2wgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIGxlbiA9IHRoaXMucHJvZHVjdGlvbnNfW2FjdGlvblsxXV1bMV07XG4gICAgICAgICAgICB5eXZhbC4kID0gdnN0YWNrW3ZzdGFjay5sZW5ndGggLSBsZW5dO1xuICAgICAgICAgICAgeXl2YWwuXyQgPSB7Zmlyc3RfbGluZTogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5maXJzdF9saW5lLCBsYXN0X2xpbmU6IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gMV0ubGFzdF9saW5lLCBmaXJzdF9jb2x1bW46IGxzdGFja1tsc3RhY2subGVuZ3RoIC0gKGxlbiB8fCAxKV0uZmlyc3RfY29sdW1uLCBsYXN0X2NvbHVtbjogbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5sYXN0X2NvbHVtbn07XG4gICAgICAgICAgICBpZiAocmFuZ2VzKSB7XG4gICAgICAgICAgICAgICAgeXl2YWwuXyQucmFuZ2UgPSBbbHN0YWNrW2xzdGFjay5sZW5ndGggLSAobGVuIHx8IDEpXS5yYW5nZVswXSwgbHN0YWNrW2xzdGFjay5sZW5ndGggLSAxXS5yYW5nZVsxXV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByID0gdGhpcy5wZXJmb3JtQWN0aW9uLmNhbGwoeXl2YWwsIHl5dGV4dCwgeXlsZW5nLCB5eWxpbmVubywgdGhpcy55eSwgYWN0aW9uWzFdLCB2c3RhY2ssIGxzdGFjayk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHIgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsZW4pIHtcbiAgICAgICAgICAgICAgICBzdGFjayA9IHN0YWNrLnNsaWNlKDAsIC0xICogbGVuICogMik7XG4gICAgICAgICAgICAgICAgdnN0YWNrID0gdnN0YWNrLnNsaWNlKDAsIC0xICogbGVuKTtcbiAgICAgICAgICAgICAgICBsc3RhY2sgPSBsc3RhY2suc2xpY2UoMCwgLTEgKiBsZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhY2sucHVzaCh0aGlzLnByb2R1Y3Rpb25zX1thY3Rpb25bMV1dWzBdKTtcbiAgICAgICAgICAgIHZzdGFjay5wdXNoKHl5dmFsLiQpO1xuICAgICAgICAgICAgbHN0YWNrLnB1c2goeXl2YWwuXyQpO1xuICAgICAgICAgICAgbmV3U3RhdGUgPSB0YWJsZVtzdGFja1tzdGFjay5sZW5ndGggLSAyXV1bc3RhY2tbc3RhY2subGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgc3RhY2sucHVzaChuZXdTdGF0ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG59O1xuLyogSmlzb24gZ2VuZXJhdGVkIGxleGVyICovXG52YXIgbGV4ZXIgPSAoZnVuY3Rpb24oKXtcbnZhciBsZXhlciA9ICh7RU9GOjEsXG5wYXJzZUVycm9yOmZ1bmN0aW9uIHBhcnNlRXJyb3Ioc3RyLCBoYXNoKSB7XG4gICAgICAgIGlmICh0aGlzLnl5LnBhcnNlcikge1xuICAgICAgICAgICAgdGhpcy55eS5wYXJzZXIucGFyc2VFcnJvcihzdHIsIGhhc2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHN0cik7XG4gICAgICAgIH1cbiAgICB9LFxuc2V0SW5wdXQ6ZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0aGlzLl9sZXNzID0gdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICAgIHRoaXMueXlsaW5lbm8gPSB0aGlzLnl5bGVuZyA9IDA7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy5tYXRjaGVkID0gdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB0aGlzLmNvbmRpdGlvblN0YWNrID0gWydJTklUSUFMJ107XG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6MSxmaXJzdF9jb2x1bW46MCxsYXN0X2xpbmU6MSxsYXN0X2NvbHVtbjowfTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlID0gWzAsMF07XG4gICAgICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSxcbmlucHV0OmZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoID0gdGhpcy5faW5wdXRbMF07XG4gICAgICAgIHRoaXMueXl0ZXh0ICs9IGNoO1xuICAgICAgICB0aGlzLnl5bGVuZysrO1xuICAgICAgICB0aGlzLm9mZnNldCsrO1xuICAgICAgICB0aGlzLm1hdGNoICs9IGNoO1xuICAgICAgICB0aGlzLm1hdGNoZWQgKz0gY2g7XG4gICAgICAgIHZhciBsaW5lcyA9IGNoLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgaWYgKGxpbmVzKSB7XG4gICAgICAgICAgICB0aGlzLnl5bGluZW5vKys7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYy5sYXN0X2xpbmUrKztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMueXlsbG9jLmxhc3RfY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHRoaXMueXlsbG9jLnJhbmdlWzFdKys7XG5cbiAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZSgxKTtcbiAgICAgICAgcmV0dXJuIGNoO1xuICAgIH0sXG51bnB1dDpmdW5jdGlvbiAoY2gpIHtcbiAgICAgICAgdmFyIGxlbiA9IGNoLmxlbmd0aDtcbiAgICAgICAgdmFyIGxpbmVzID0gY2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcblxuICAgICAgICB0aGlzLl9pbnB1dCA9IGNoICsgdGhpcy5faW5wdXQ7XG4gICAgICAgIHRoaXMueXl0ZXh0ID0gdGhpcy55eXRleHQuc3Vic3RyKDAsIHRoaXMueXl0ZXh0Lmxlbmd0aC1sZW4tMSk7XG4gICAgICAgIC8vdGhpcy55eWxlbmcgLT0gbGVuO1xuICAgICAgICB0aGlzLm9mZnNldCAtPSBsZW47XG4gICAgICAgIHZhciBvbGRMaW5lcyA9IHRoaXMubWF0Y2guc3BsaXQoLyg/Olxcclxcbj98XFxuKS9nKTtcbiAgICAgICAgdGhpcy5tYXRjaCA9IHRoaXMubWF0Y2guc3Vic3RyKDAsIHRoaXMubWF0Y2gubGVuZ3RoLTEpO1xuICAgICAgICB0aGlzLm1hdGNoZWQgPSB0aGlzLm1hdGNoZWQuc3Vic3RyKDAsIHRoaXMubWF0Y2hlZC5sZW5ndGgtMSk7XG5cbiAgICAgICAgaWYgKGxpbmVzLmxlbmd0aC0xKSB0aGlzLnl5bGluZW5vIC09IGxpbmVzLmxlbmd0aC0xO1xuICAgICAgICB2YXIgciA9IHRoaXMueXlsbG9jLnJhbmdlO1xuXG4gICAgICAgIHRoaXMueXlsbG9jID0ge2ZpcnN0X2xpbmU6IHRoaXMueXlsbG9jLmZpcnN0X2xpbmUsXG4gICAgICAgICAgbGFzdF9saW5lOiB0aGlzLnl5bGluZW5vKzEsXG4gICAgICAgICAgZmlyc3RfY29sdW1uOiB0aGlzLnl5bGxvYy5maXJzdF9jb2x1bW4sXG4gICAgICAgICAgbGFzdF9jb2x1bW46IGxpbmVzID9cbiAgICAgICAgICAgICAgKGxpbmVzLmxlbmd0aCA9PT0gb2xkTGluZXMubGVuZ3RoID8gdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIDogMCkgKyBvbGRMaW5lc1tvbGRMaW5lcy5sZW5ndGggLSBsaW5lcy5sZW5ndGhdLmxlbmd0aCAtIGxpbmVzWzBdLmxlbmd0aDpcbiAgICAgICAgICAgICAgdGhpcy55eWxsb2MuZmlyc3RfY29sdW1uIC0gbGVuXG4gICAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnJhbmdlcykge1xuICAgICAgICAgICAgdGhpcy55eWxsb2MucmFuZ2UgPSBbclswXSwgclswXSArIHRoaXMueXlsZW5nIC0gbGVuXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubW9yZTpmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX21vcmUgPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxubGVzczpmdW5jdGlvbiAobikge1xuICAgICAgICB0aGlzLnVucHV0KHRoaXMubWF0Y2guc2xpY2UobikpO1xuICAgIH0sXG5wYXN0SW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFzdCA9IHRoaXMubWF0Y2hlZC5zdWJzdHIoMCwgdGhpcy5tYXRjaGVkLmxlbmd0aCAtIHRoaXMubWF0Y2gubGVuZ3RoKTtcbiAgICAgICAgcmV0dXJuIChwYXN0Lmxlbmd0aCA+IDIwID8gJy4uLic6JycpICsgcGFzdC5zdWJzdHIoLTIwKS5yZXBsYWNlKC9cXG4vZywgXCJcIik7XG4gICAgfSxcbnVwY29taW5nSW5wdXQ6ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubWF0Y2g7XG4gICAgICAgIGlmIChuZXh0Lmxlbmd0aCA8IDIwKSB7XG4gICAgICAgICAgICBuZXh0ICs9IHRoaXMuX2lucHV0LnN1YnN0cigwLCAyMC1uZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChuZXh0LnN1YnN0cigwLDIwKSsobmV4dC5sZW5ndGggPiAyMCA/ICcuLi4nOicnKSkucmVwbGFjZSgvXFxuL2csIFwiXCIpO1xuICAgIH0sXG5zaG93UG9zaXRpb246ZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcHJlID0gdGhpcy5wYXN0SW5wdXQoKTtcbiAgICAgICAgdmFyIGMgPSBuZXcgQXJyYXkocHJlLmxlbmd0aCArIDEpLmpvaW4oXCItXCIpO1xuICAgICAgICByZXR1cm4gcHJlICsgdGhpcy51cGNvbWluZ0lucHV0KCkgKyBcIlxcblwiICsgYytcIl5cIjtcbiAgICB9LFxubmV4dDpmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkVPRjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICAgIHZhciB0b2tlbixcbiAgICAgICAgICAgIG1hdGNoLFxuICAgICAgICAgICAgdGVtcE1hdGNoLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBjb2wsXG4gICAgICAgICAgICBsaW5lcztcbiAgICAgICAgaWYgKCF0aGlzLl9tb3JlKSB7XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCA9ICcnO1xuICAgICAgICAgICAgdGhpcy5tYXRjaCA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlcyA9IHRoaXMuX2N1cnJlbnRSdWxlcygpO1xuICAgICAgICBmb3IgKHZhciBpPTA7aSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0ZW1wTWF0Y2ggPSB0aGlzLl9pbnB1dC5tYXRjaCh0aGlzLnJ1bGVzW3J1bGVzW2ldXSk7XG4gICAgICAgICAgICBpZiAodGVtcE1hdGNoICYmICghbWF0Y2ggfHwgdGVtcE1hdGNoWzBdLmxlbmd0aCA+IG1hdGNoWzBdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBtYXRjaCA9IHRlbXBNYXRjaDtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMuZmxleCkgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBsaW5lcyA9IG1hdGNoWzBdLm1hdGNoKC8oPzpcXHJcXG4/fFxcbikuKi9nKTtcbiAgICAgICAgICAgIGlmIChsaW5lcykgdGhpcy55eWxpbmVubyArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLnl5bGxvYyA9IHtmaXJzdF9saW5lOiB0aGlzLnl5bGxvYy5sYXN0X2xpbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2xpbmU6IHRoaXMueXlsaW5lbm8rMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0X2NvbHVtbjogdGhpcy55eWxsb2MubGFzdF9jb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NvbHVtbjogbGluZXMgPyBsaW5lc1tsaW5lcy5sZW5ndGgtMV0ubGVuZ3RoLWxpbmVzW2xpbmVzLmxlbmd0aC0xXS5tYXRjaCgvXFxyP1xcbj8vKVswXS5sZW5ndGggOiB0aGlzLnl5bGxvYy5sYXN0X2NvbHVtbiArIG1hdGNoWzBdLmxlbmd0aH07XG4gICAgICAgICAgICB0aGlzLnl5dGV4dCArPSBtYXRjaFswXTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2ggKz0gbWF0Y2hbMF07XG4gICAgICAgICAgICB0aGlzLm1hdGNoZXMgPSBtYXRjaDtcbiAgICAgICAgICAgIHRoaXMueXlsZW5nID0gdGhpcy55eXRleHQubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yYW5nZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnl5bGxvYy5yYW5nZSA9IFt0aGlzLm9mZnNldCwgdGhpcy5vZmZzZXQgKz0gdGhpcy55eWxlbmddO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fbW9yZSA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQgPSB0aGlzLl9pbnB1dC5zbGljZShtYXRjaFswXS5sZW5ndGgpO1xuICAgICAgICAgICAgdGhpcy5tYXRjaGVkICs9IG1hdGNoWzBdO1xuICAgICAgICAgICAgdG9rZW4gPSB0aGlzLnBlcmZvcm1BY3Rpb24uY2FsbCh0aGlzLCB0aGlzLnl5LCB0aGlzLCBydWxlc1tpbmRleF0sdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kb25lICYmIHRoaXMuX2lucHV0KSB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbikgcmV0dXJuIHRva2VuO1xuICAgICAgICAgICAgZWxzZSByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2lucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5FT0Y7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUVycm9yKCdMZXhpY2FsIGVycm9yIG9uIGxpbmUgJysodGhpcy55eWxpbmVubysxKSsnLiBVbnJlY29nbml6ZWQgdGV4dC5cXG4nK3RoaXMuc2hvd1Bvc2l0aW9uKCksXG4gICAgICAgICAgICAgICAgICAgIHt0ZXh0OiBcIlwiLCB0b2tlbjogbnVsbCwgbGluZTogdGhpcy55eWxpbmVub30pO1xuICAgICAgICB9XG4gICAgfSxcbmxleDpmdW5jdGlvbiBsZXggKCkge1xuICAgICAgICB2YXIgciA9IHRoaXMubmV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxleCgpO1xuICAgICAgICB9XG4gICAgfSxcbmJlZ2luOmZ1bmN0aW9uIGJlZ2luIChjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy5jb25kaXRpb25TdGFjay5wdXNoKGNvbmRpdGlvbik7XG4gICAgfSxcbnBvcFN0YXRlOmZ1bmN0aW9uIHBvcFN0YXRlICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2sucG9wKCk7XG4gICAgfSxcbl9jdXJyZW50UnVsZXM6ZnVuY3Rpb24gX2N1cnJlbnRSdWxlcyAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmRpdGlvbnNbdGhpcy5jb25kaXRpb25TdGFja1t0aGlzLmNvbmRpdGlvblN0YWNrLmxlbmd0aC0xXV0ucnVsZXM7XG4gICAgfSxcbnRvcFN0YXRlOmZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMl07XG4gICAgfSxcbnB1c2hTdGF0ZTpmdW5jdGlvbiBiZWdpbiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuYmVnaW4oY29uZGl0aW9uKTtcbiAgICB9fSk7XG5sZXhlci5vcHRpb25zID0ge307XG5sZXhlci5wZXJmb3JtQWN0aW9uID0gZnVuY3Rpb24gYW5vbnltb3VzKHl5LHl5XywkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zLFlZX1NUQVJUXG4pIHtcblxuXG5mdW5jdGlvbiBzdHJpcChzdGFydCwgZW5kKSB7XG4gIHJldHVybiB5eV8ueXl0ZXh0ID0geXlfLnl5dGV4dC5zdWJzdHJpbmcoc3RhcnQsIHl5Xy55eWxlbmcgLSBlbmQgKyBzdGFydCk7XG59XG5cblxudmFyIFlZU1RBVEU9WVlfU1RBUlRcbnN3aXRjaCgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7XG5jYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHl5Xy55eXRleHQuc2xpY2UoLTIpID09PSBcIlxcXFxcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcCgwLDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVnaW4oXCJtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKHl5Xy55eXRleHQuc2xpY2UoLTEpID09PSBcIlxcXFxcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbihcImVtdVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZ2luKFwibXVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoeXlfLnl5dGV4dCkgcmV0dXJuIDE1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTpyZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSAzOnRoaXMuYmVnaW4oJ3JhdycpOyByZXR1cm4gMTU7XG5icmVhaztcbmNhc2UgNDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGJlIHVzaW5nIGB0aGlzLnRvcFN0YXRlKClgIGJlbG93LCBidXQgaXQgY3VycmVudGx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0aGUgc2Vjb25kIHRvcCBpbnN0ZWFkIG9mIHRoZSBmaXJzdCB0b3AuIE9wZW5lZCBhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlzc3VlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2l0aHViLmNvbS96YWFjaC9qaXNvbi9pc3N1ZXMvMjkxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uU3RhY2tbdGhpcy5jb25kaXRpb25TdGFjay5sZW5ndGgtMV0gPT09ICdyYXcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwKDUsIDkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdFTkRfUkFXX0JMT0NLJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmJyZWFrO1xuY2FzZSA1OiByZXR1cm4gMTU7IFxuYnJlYWs7XG5jYXNlIDY6XG4gIHRoaXMucG9wU3RhdGUoKTtcbiAgcmV0dXJuIDE0O1xuXG5icmVhaztcbmNhc2UgNzpyZXR1cm4gNjU7XG5icmVhaztcbmNhc2UgODpyZXR1cm4gNjg7XG5icmVhaztcbmNhc2UgOTogcmV0dXJuIDE5OyBcbmJyZWFrO1xuY2FzZSAxMDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcFN0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWdpbigncmF3Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG5icmVhaztcbmNhc2UgMTE6cmV0dXJuIDU1O1xuYnJlYWs7XG5jYXNlIDEyOnJldHVybiA2MDtcbmJyZWFrO1xuY2FzZSAxMzpyZXR1cm4gMjk7XG5icmVhaztcbmNhc2UgMTQ6cmV0dXJuIDQ3O1xuYnJlYWs7XG5jYXNlIDE1OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE2OnRoaXMucG9wU3RhdGUoKTsgcmV0dXJuIDQ0O1xuYnJlYWs7XG5jYXNlIDE3OnJldHVybiAzNDtcbmJyZWFrO1xuY2FzZSAxODpyZXR1cm4gMzk7XG5icmVhaztcbmNhc2UgMTk6cmV0dXJuIDUxO1xuYnJlYWs7XG5jYXNlIDIwOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyMTpcbiAgdGhpcy51bnB1dCh5eV8ueXl0ZXh0KTtcbiAgdGhpcy5wb3BTdGF0ZSgpO1xuICB0aGlzLmJlZ2luKCdjb20nKTtcblxuYnJlYWs7XG5jYXNlIDIyOlxuICB0aGlzLnBvcFN0YXRlKCk7XG4gIHJldHVybiAxNDtcblxuYnJlYWs7XG5jYXNlIDIzOnJldHVybiA0ODtcbmJyZWFrO1xuY2FzZSAyNDpyZXR1cm4gNzM7XG5icmVhaztcbmNhc2UgMjU6cmV0dXJuIDcyO1xuYnJlYWs7XG5jYXNlIDI2OnJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSAyNzpyZXR1cm4gODc7XG5icmVhaztcbmNhc2UgMjg6Ly8gaWdub3JlIHdoaXRlc3BhY2VcbmJyZWFrO1xuY2FzZSAyOTp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiA1NDtcbmJyZWFrO1xuY2FzZSAzMDp0aGlzLnBvcFN0YXRlKCk7IHJldHVybiAzMztcbmJyZWFrO1xuY2FzZSAzMTp5eV8ueXl0ZXh0ID0gc3RyaXAoMSwyKS5yZXBsYWNlKC9cXFxcXCIvZywnXCInKTsgcmV0dXJuIDgwO1xuYnJlYWs7XG5jYXNlIDMyOnl5Xy55eXRleHQgPSBzdHJpcCgxLDIpLnJlcGxhY2UoL1xcXFwnL2csXCInXCIpOyByZXR1cm4gODA7XG5icmVhaztcbmNhc2UgMzM6cmV0dXJuIDg1O1xuYnJlYWs7XG5jYXNlIDM0OnJldHVybiA4MjtcbmJyZWFrO1xuY2FzZSAzNTpyZXR1cm4gODI7XG5icmVhaztcbmNhc2UgMzY6cmV0dXJuIDgzO1xuYnJlYWs7XG5jYXNlIDM3OnJldHVybiA4NDtcbmJyZWFrO1xuY2FzZSAzODpyZXR1cm4gODE7XG5icmVhaztcbmNhc2UgMzk6cmV0dXJuIDc1O1xuYnJlYWs7XG5jYXNlIDQwOnJldHVybiA3NztcbmJyZWFrO1xuY2FzZSA0MTpyZXR1cm4gNzI7XG5icmVhaztcbmNhc2UgNDI6eXlfLnl5dGV4dCA9IHl5Xy55eXRleHQucmVwbGFjZSgvXFxcXChbXFxcXFxcXV0pL2csJyQxJyk7IHJldHVybiA3MjtcbmJyZWFrO1xuY2FzZSA0MzpyZXR1cm4gJ0lOVkFMSUQnO1xuYnJlYWs7XG5jYXNlIDQ0OnJldHVybiA1O1xuYnJlYWs7XG59XG59O1xubGV4ZXIucnVsZXMgPSBbL14oPzpbXlxceDAwXSo/KD89KFxce1xceykpKS8sL14oPzpbXlxceDAwXSspLywvXig/OlteXFx4MDBdezIsfT8oPz0oXFx7XFx7fFxcXFxcXHtcXHt8XFxcXFxcXFxcXHtcXHt8JCkpKS8sL14oPzpcXHtcXHtcXHtcXHsoPz1bXlxcL10pKS8sL14oPzpcXHtcXHtcXHtcXHtcXC9bXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89Wz19XFxzXFwvLl0pXFx9XFx9XFx9XFx9KS8sL14oPzpbXlxceDAwXSs/KD89KFxce1xce1xce1xceykpKS8sL14oPzpbXFxzXFxTXSo/LS0ofik/XFx9XFx9KS8sL14oPzpcXCgpLywvXig/OlxcKSkvLC9eKD86XFx7XFx7XFx7XFx7KS8sL14oPzpcXH1cXH1cXH1cXH0pLywvXig/Olxce1xceyh+KT8+KS8sL14oPzpcXHtcXHsofik/Iz4pLywvXig/Olxce1xceyh+KT8jXFwqPykvLC9eKD86XFx7XFx7KH4pP1xcLykvLC9eKD86XFx7XFx7KH4pP1xcXlxccyoofik/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFxzKmVsc2VcXHMqKH4pP1xcfVxcfSkvLC9eKD86XFx7XFx7KH4pP1xcXikvLC9eKD86XFx7XFx7KH4pP1xccyplbHNlXFxiKS8sL14oPzpcXHtcXHsofik/XFx7KS8sL14oPzpcXHtcXHsofik/JikvLC9eKD86XFx7XFx7KH4pPyEtLSkvLC9eKD86XFx7XFx7KH4pPyFbXFxzXFxTXSo/XFx9XFx9KS8sL14oPzpcXHtcXHsofik/XFwqPykvLC9eKD86PSkvLC9eKD86XFwuXFwuKS8sL14oPzpcXC4oPz0oWz1+fVxcc1xcLy4pfF0pKSkvLC9eKD86W1xcLy5dKS8sL14oPzpcXHMrKS8sL14oPzpcXH0ofik/XFx9XFx9KS8sL14oPzoofik/XFx9XFx9KS8sL14oPzpcIihcXFxcW1wiXXxbXlwiXSkqXCIpLywvXig/OicoXFxcXFsnXXxbXiddKSonKS8sL14oPzpAKS8sL14oPzp0cnVlKD89KFt+fVxccyldKSkpLywvXig/OmZhbHNlKD89KFt+fVxccyldKSkpLywvXig/OnVuZGVmaW5lZCg/PShbfn1cXHMpXSkpKS8sL14oPzpudWxsKD89KFt+fVxccyldKSkpLywvXig/Oi0/WzAtOV0rKD86XFwuWzAtOV0rKT8oPz0oW359XFxzKV0pKSkvLC9eKD86YXNcXHMrXFx8KS8sL14oPzpcXHwpLywvXig/OihbXlxccyFcIiMlLSxcXC5cXC87LT5AXFxbLVxcXmBcXHstfl0rKD89KFs9fn1cXHNcXC8uKXxdKSkpKS8sL14oPzpcXFsoXFxcXFxcXXxbXlxcXV0pKlxcXSkvLC9eKD86LikvLC9eKD86JCkvXTtcbmxleGVyLmNvbmRpdGlvbnMgPSB7XCJtdVwiOntcInJ1bGVzXCI6WzcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0XSxcImluY2x1c2l2ZVwiOmZhbHNlfSxcImVtdVwiOntcInJ1bGVzXCI6WzJdLFwiaW5jbHVzaXZlXCI6ZmFsc2V9LFwiY29tXCI6e1wicnVsZXNcIjpbNl0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJyYXdcIjp7XCJydWxlc1wiOlszLDQsNV0sXCJpbmNsdXNpdmVcIjpmYWxzZX0sXCJJTklUSUFMXCI6e1wicnVsZXNcIjpbMCwxLDQ0XSxcImluY2x1c2l2ZVwiOnRydWV9fTtcbnJldHVybiBsZXhlcjt9KSgpXG5wYXJzZXIubGV4ZXIgPSBsZXhlcjtcbmZ1bmN0aW9uIFBhcnNlciAoKSB7IHRoaXMueXkgPSB7fTsgfVBhcnNlci5wcm90b3R5cGUgPSBwYXJzZXI7cGFyc2VyLlBhcnNlciA9IFBhcnNlcjtcbnJldHVybiBuZXcgUGFyc2VyO1xufSkoKTtleHBvcnQgZGVmYXVsdCBoYW5kbGViYXJzO1xuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9286:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| /* eslint-disable new-cap */
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.print = print;
 | |
| exports.PrintVisitor = PrintVisitor;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _visitor = __webpack_require__(4166);
 | |
| 
 | |
| var _visitor2 = _interopRequireDefault(_visitor);
 | |
| 
 | |
| function print(ast) {
 | |
|   return new PrintVisitor().accept(ast);
 | |
| }
 | |
| 
 | |
| function PrintVisitor() {
 | |
|   this.padding = 0;
 | |
| }
 | |
| 
 | |
| PrintVisitor.prototype = new _visitor2['default']();
 | |
| 
 | |
| PrintVisitor.prototype.pad = function (string) {
 | |
|   var out = '';
 | |
| 
 | |
|   for (var i = 0, l = this.padding; i < l; i++) {
 | |
|     out += '  ';
 | |
|   }
 | |
| 
 | |
|   out += string + '\n';
 | |
|   return out;
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.Program = function (program) {
 | |
|   var out = '',
 | |
|       body = program.body,
 | |
|       i = undefined,
 | |
|       l = undefined;
 | |
| 
 | |
|   if (program.blockParams) {
 | |
|     var blockParams = 'BLOCK PARAMS: [';
 | |
|     for (i = 0, l = program.blockParams.length; i < l; i++) {
 | |
|       blockParams += ' ' + program.blockParams[i];
 | |
|     }
 | |
|     blockParams += ' ]';
 | |
|     out += this.pad(blockParams);
 | |
|   }
 | |
| 
 | |
|   for (i = 0, l = body.length; i < l; i++) {
 | |
|     out += this.accept(body[i]);
 | |
|   }
 | |
| 
 | |
|   this.padding--;
 | |
| 
 | |
|   return out;
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.MustacheStatement = function (mustache) {
 | |
|   return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');
 | |
| };
 | |
| PrintVisitor.prototype.Decorator = function (mustache) {
 | |
|   return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {
 | |
|   var out = '';
 | |
| 
 | |
|   out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');
 | |
|   this.padding++;
 | |
|   out += this.pad(this.SubExpression(block));
 | |
|   if (block.program) {
 | |
|     out += this.pad('PROGRAM:');
 | |
|     this.padding++;
 | |
|     out += this.accept(block.program);
 | |
|     this.padding--;
 | |
|   }
 | |
|   if (block.inverse) {
 | |
|     if (block.program) {
 | |
|       this.padding++;
 | |
|     }
 | |
|     out += this.pad('{{^}}');
 | |
|     this.padding++;
 | |
|     out += this.accept(block.inverse);
 | |
|     this.padding--;
 | |
|     if (block.program) {
 | |
|       this.padding--;
 | |
|     }
 | |
|   }
 | |
|   this.padding--;
 | |
| 
 | |
|   return out;
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.PartialStatement = function (partial) {
 | |
|   var content = 'PARTIAL:' + partial.name.original;
 | |
|   if (partial.params[0]) {
 | |
|     content += ' ' + this.accept(partial.params[0]);
 | |
|   }
 | |
|   if (partial.hash) {
 | |
|     content += ' ' + this.accept(partial.hash);
 | |
|   }
 | |
|   return this.pad('{{> ' + content + ' }}');
 | |
| };
 | |
| PrintVisitor.prototype.PartialBlockStatement = function (partial) {
 | |
|   var content = 'PARTIAL BLOCK:' + partial.name.original;
 | |
|   if (partial.params[0]) {
 | |
|     content += ' ' + this.accept(partial.params[0]);
 | |
|   }
 | |
|   if (partial.hash) {
 | |
|     content += ' ' + this.accept(partial.hash);
 | |
|   }
 | |
| 
 | |
|   content += ' ' + this.pad('PROGRAM:');
 | |
|   this.padding++;
 | |
|   content += this.accept(partial.program);
 | |
|   this.padding--;
 | |
| 
 | |
|   return this.pad('{{> ' + content + ' }}');
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.ContentStatement = function (content) {
 | |
|   return this.pad("CONTENT[ '" + content.value + "' ]");
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.CommentStatement = function (comment) {
 | |
|   return this.pad("{{! '" + comment.value + "' }}");
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.SubExpression = function (sexpr) {
 | |
|   var params = sexpr.params,
 | |
|       paramStrings = [],
 | |
|       hash = undefined;
 | |
| 
 | |
|   for (var i = 0, l = params.length; i < l; i++) {
 | |
|     paramStrings.push(this.accept(params[i]));
 | |
|   }
 | |
| 
 | |
|   params = '[' + paramStrings.join(', ') + ']';
 | |
| 
 | |
|   hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';
 | |
| 
 | |
|   return this.accept(sexpr.path) + ' ' + params + hash;
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.PathExpression = function (id) {
 | |
|   var path = id.parts.join('/');
 | |
|   return (id.data ? '@' : '') + 'PATH:' + path;
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.StringLiteral = function (string) {
 | |
|   return '"' + string.value + '"';
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.NumberLiteral = function (number) {
 | |
|   return 'NUMBER{' + number.value + '}';
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.BooleanLiteral = function (bool) {
 | |
|   return 'BOOLEAN{' + bool.value + '}';
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.UndefinedLiteral = function () {
 | |
|   return 'UNDEFINED';
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.NullLiteral = function () {
 | |
|   return 'NULL';
 | |
| };
 | |
| 
 | |
| PrintVisitor.prototype.Hash = function (hash) {
 | |
|   var pairs = hash.pairs,
 | |
|       joinedPairs = [];
 | |
| 
 | |
|   for (var i = 0, l = pairs.length; i < l; i++) {
 | |
|     joinedPairs.push(this.accept(pairs[i]));
 | |
|   }
 | |
| 
 | |
|   return 'HASH{' + joinedPairs.join(', ') + '}';
 | |
| };
 | |
| PrintVisitor.prototype.HashPair = function (pair) {
 | |
|   return pair.key + '=' + this.accept(pair.value);
 | |
| };
 | |
| /* eslint-enable new-cap */
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3ByaW50ZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozt1QkFDb0IsV0FBVzs7OztBQUV4QixTQUFTLEtBQUssQ0FBQyxHQUFHLEVBQUU7QUFDekIsU0FBTyxJQUFJLFlBQVksRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUN2Qzs7QUFFTSxTQUFTLFlBQVksR0FBRztBQUM3QixNQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztDQUNsQjs7QUFFRCxZQUFZLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRXZDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLFVBQVMsTUFBTSxFQUFFO0FBQzVDLE1BQUksR0FBRyxHQUFHLEVBQUUsQ0FBQzs7QUFFYixPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzVDLE9BQUcsSUFBSSxJQUFJLENBQUM7R0FDYjs7QUFFRCxLQUFHLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztBQUNyQixTQUFPLEdBQUcsQ0FBQztDQUNaLENBQUM7O0FBRUYsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDakQsTUFBSSxHQUFHLEdBQUcsRUFBRTtNQUNWLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSTtNQUNuQixDQUFDLFlBQUE7TUFDRCxDQUFDLFlBQUEsQ0FBQzs7QUFFSixNQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7QUFDdkIsUUFBSSxXQUFXLEdBQUcsaUJBQWlCLENBQUM7QUFDcEMsU0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMs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LElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztHQUN6Qzs7QUFFRCxTQUFPLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQztDQUMvQyxDQUFDO0FBQ0YsWUFBWSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBUyxJQUFJLEVBQUU7QUFDL0MsU0FBTyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztDQUNqRCxDQUFDIiwiZmlsZSI6InByaW50ZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuZXctY2FwICovXG5pbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJpbnQoYXN0KSB7XG4gIHJldHVybiBuZXcgUHJpbnRWaXNpdG9yKCkuYWNjZXB0KGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBQcmludFZpc2l0b3IoKSB7XG4gIHRoaXMucGFkZGluZyA9IDA7XG59XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUgPSBuZXcgVmlzaXRvcigpO1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLnBhZCA9IGZ1bmN0aW9uKHN0cmluZykge1xuICBsZXQgb3V0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnBhZGRpbmc7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gJyAgJztcbiAgfVxuXG4gIG91dCArPSBzdHJpbmcgKyAnXFxuJztcbiAgcmV0dXJuIG91dDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUHJvZ3JhbSA9IGZ1bmN0aW9uKHByb2dyYW0pIHtcbiAgbGV0IG91dCA9ICcnLFxuICAgIGJvZHkgPSBwcm9ncmFtLmJvZHksXG4gICAgaSxcbiAgICBsO1xuXG4gIGlmIChwcm9ncmFtLmJsb2NrUGFyYW1zKSB7XG4gICAgbGV0IGJsb2NrUGFyYW1zID0gJ0JMT0NLIFBBUkFNUzogWyc7XG4gICAgZm9yIChpID0gMCwgbCA9IHByb2dyYW0uYmxvY2tQYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBibG9ja1BhcmFtcyArPSAnICcgKyBwcm9ncmFtLmJsb2NrUGFyYW1zW2ldO1xuICAgIH1cbiAgICBibG9ja1BhcmFtcyArPSAnIF0nO1xuICAgIG91dCArPSB0aGlzLnBhZChibG9ja1BhcmFtcyk7XG4gIH1cblxuICBmb3IgKGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvdXQgKz0gdGhpcy5hY2NlcHQoYm9keVtpXSk7XG4gIH1cblxuICB0aGlzLnBhZGRpbmctLTtcblxuICByZXR1cm4gb3V0O1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKG11c3RhY2hlKSB7XG4gIHJldHVybiB0aGlzLnBhZCgne3sgJyArIHRoaXMuU3ViRXhwcmVzc2lvbihtdXN0YWNoZSkgKyAnIH19Jyk7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5EZWNvcmF0b3IgPSBmdW5jdGlvbihtdXN0YWNoZSkge1xuICByZXR1cm4gdGhpcy5wYWQoJ3t7IERJUkVDVElWRSAnICsgdGhpcy5TdWJFeHByZXNzaW9uKG11c3RhY2hlKSArICcgfX0nKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQmxvY2tTdGF0ZW1lbnQgPSBQcmludFZpc2l0b3IucHJvdG90eXBlLkRlY29yYXRvckJsb2NrID0gZnVuY3Rpb24oXG4gIGJsb2NrXG4pIHtcbiAgbGV0IG91dCA9ICcnO1xuXG4gIG91dCArPSB0aGlzLnBhZChcbiAgICAoYmxvY2sudHlwZSA9PT0gJ0RlY29yYXRvckJsb2NrJyA/ICdESVJFQ1RJVkUgJyA6ICcnKSArICdCTE9DSzonXG4gICk7XG4gIHRoaXMucGFkZGluZysrO1xuICBvdXQgKz0gdGhpcy5wYWQodGhpcy5TdWJFeHByZXNzaW9uKGJsb2NrKSk7XG4gIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgb3V0ICs9IHRoaXMucGFkKCdQUk9HUkFNOicpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgfVxuICBpZiAoYmxvY2suaW52ZXJzZSkge1xuICAgIGlmIChibG9jay5wcm9ncmFtKSB7XG4gICAgICB0aGlzLnBhZGRpbmcrKztcbiAgICB9XG4gICAgb3V0ICs9IHRoaXMucGFkKCd7e159fScpO1xuICAgIHRoaXMucGFkZGluZysrO1xuICAgIG91dCArPSB0aGlzLmFjY2VwdChibG9jay5pbnZlcnNlKTtcbiAgICB0aGlzLnBhZGRpbmctLTtcbiAgICBpZiAoYmxvY2sucHJvZ3JhbSkge1xuICAgICAgdGhpcy5wYWRkaW5nLS07XG4gICAgfVxuICB9XG4gIHRoaXMucGFkZGluZy0tO1xuXG4gIHJldHVybiBvdXQ7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxTdGF0ZW1lbnQgPSBmdW5jdGlvbihwYXJ0aWFsKSB7XG4gIGxldCBjb250ZW50ID0gJ1BBUlRJQUw6JyArIHBhcnRpYWwubmFtZS5vcmlnaW5hbDtcbiAgaWYgKHBhcnRpYWwucGFyYW1zWzBdKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLnBhcmFtc1swXSk7XG4gIH1cbiAgaWYgKHBhcnRpYWwuaGFzaCkge1xuICAgIGNvbnRlbnQgKz0gJyAnICsgdGhpcy5hY2NlcHQocGFydGlhbC5oYXNoKTtcbiAgfVxuICByZXR1cm4gdGhpcy5wYWQoJ3t7PiAnICsgY29udGVudCArICcgfX0nKTtcbn07XG5QcmludFZpc2l0b3IucHJvdG90eXBlLlBhcnRpYWxCbG9ja1N0YXRlbWVudCA9IGZ1bmN0aW9uKHBhcnRpYWwpIHtcbiAgbGV0IGNvbnRlbnQgPSAnUEFSVElBTCBCTE9DSzonICsgcGFydGlhbC5uYW1lLm9yaWdpbmFsO1xuICBpZiAocGFydGlhbC5wYXJhbXNbMF0pIHtcbiAgICBjb250ZW50ICs9ICcgJyArIHRoaXMuYWNjZXB0KHBhcnRpYWwucGFyYW1zWzBdKTtcbiAgfVxuICBpZiAocGFydGlhbC5oYXNoKSB7XG4gICAgY29udGVudCArPSAnICcgKyB0aGlzLmFjY2VwdChwYXJ0aWFsLmhhc2gpO1xuICB9XG5cbiAgY29udGVudCArPSAnICcgKyB0aGlzLnBhZCgnUFJPR1JBTTonKTtcbiAgdGhpcy5wYWRkaW5nKys7XG4gIGNvbnRlbnQgKz0gdGhpcy5hY2NlcHQocGFydGlhbC5wcm9ncmFtKTtcbiAgdGhpcy5wYWRkaW5nLS07XG5cbiAgcmV0dXJuIHRoaXMucGFkKCd7ez4gJyArIGNvbnRlbnQgKyAnIH19Jyk7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkNvbnRlbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihjb250ZW50KSB7XG4gIHJldHVybiB0aGlzLnBhZChcIkNPTlRFTlRbICdcIiArIGNvbnRlbnQudmFsdWUgKyBcIicgXVwiKTtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuQ29tbWVudFN0YXRlbWVudCA9IGZ1bmN0aW9uKGNvbW1lbnQpIHtcbiAgcmV0dXJuIHRoaXMucGFkKFwie3shICdcIiArIGNvbW1lbnQudmFsdWUgKyBcIicgfX1cIik7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN1YkV4cHJlc3Npb24gPSBmdW5jdGlvbihzZXhwcikge1xuICBsZXQgcGFyYW1zID0gc2V4cHIucGFyYW1zLFxuICAgIHBhcmFtU3RyaW5ncyA9IFtdLFxuICAgIGhhc2g7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYXJhbXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgcGFyYW1TdHJpbmdzLnB1c2godGhpcy5hY2NlcHQocGFyYW1zW2ldKSk7XG4gIH1cblxuICBwYXJhbXMgPSAnWycgKyBwYXJhbVN0cmluZ3Muam9pbignLCAnKSArICddJztcblxuICBoYXNoID0gc2V4cHIuaGFzaCA/ICcgJyArIHRoaXMuYWNjZXB0KHNleHByLmhhc2gpIDogJyc7XG5cbiAgcmV0dXJuIHRoaXMuYWNjZXB0KHNleHByLnBhdGgpICsgJyAnICsgcGFyYW1zICsgaGFzaDtcbn07XG5cblByaW50VmlzaXRvci5wcm90b3R5cGUuUGF0aEV4cHJlc3Npb24gPSBmdW5jdGlvbihpZCkge1xuICBsZXQgcGF0aCA9IGlkLnBhcnRzLmpvaW4oJy8nKTtcbiAgcmV0dXJuIChpZC5kYXRhID8gJ0AnIDogJycpICsgJ1BBVEg6JyArIHBhdGg7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlN0cmluZ0xpdGVyYWwgPSBmdW5jdGlvbihzdHJpbmcpIHtcbiAgcmV0dXJuICdcIicgKyBzdHJpbmcudmFsdWUgKyAnXCInO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdW1iZXJMaXRlcmFsID0gZnVuY3Rpb24obnVtYmVyKSB7XG4gIHJldHVybiAnTlVNQkVSeycgKyBudW1iZXIudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLkJvb2xlYW5MaXRlcmFsID0gZnVuY3Rpb24oYm9vbCkge1xuICByZXR1cm4gJ0JPT0xFQU57JyArIGJvb2wudmFsdWUgKyAnfSc7XG59O1xuXG5QcmludFZpc2l0b3IucHJvdG90eXBlLlVuZGVmaW5lZExpdGVyYWwgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICdVTkRFRklORUQnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5OdWxsTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gJ05VTEwnO1xufTtcblxuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoID0gZnVuY3Rpb24oaGFzaCkge1xuICBsZXQgcGFpcnMgPSBoYXNoLnBhaXJzLFxuICAgIGpvaW5lZFBhaXJzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBwYWlycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBqb2luZWRQYWlycy5wdXNoKHRoaXMuYWNjZXB0KHBhaXJzW2ldKSk7XG4gIH1cblxuICByZXR1cm4gJ0hBU0h7JyArIGpvaW5lZFBhaXJzLmpvaW4oJywgJykgKyAnfSc7XG59O1xuUHJpbnRWaXNpdG9yLnByb3RvdHlwZS5IYXNoUGFpciA9IGZ1bmN0aW9uKHBhaXIpIHtcbiAgcmV0dXJuIHBhaXIua2V5ICsgJz0nICsgdGhpcy5hY2NlcHQocGFpci52YWx1ZSk7XG59O1xuLyogZXNsaW50LWVuYWJsZSBuZXctY2FwICovXG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4166:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| function Visitor() {
 | |
|   this.parents = [];
 | |
| }
 | |
| 
 | |
| Visitor.prototype = {
 | |
|   constructor: Visitor,
 | |
|   mutating: false,
 | |
| 
 | |
|   // Visits a given value. If mutating, will replace the value if necessary.
 | |
|   acceptKey: function acceptKey(node, name) {
 | |
|     var value = this.accept(node[name]);
 | |
|     if (this.mutating) {
 | |
|       // Hacky sanity check: This may have a few false positives for type for the helper
 | |
|       // methods but will generally do the right thing without a lot of overhead.
 | |
|       if (value && !Visitor.prototype[value.type]) {
 | |
|         throw new _exception2['default']('Unexpected node type "' + value.type + '" found when accepting ' + name + ' on ' + node.type);
 | |
|       }
 | |
|       node[name] = value;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // Performs an accept operation with added sanity check to ensure
 | |
|   // required keys are not removed.
 | |
|   acceptRequired: function acceptRequired(node, name) {
 | |
|     this.acceptKey(node, name);
 | |
| 
 | |
|     if (!node[name]) {
 | |
|       throw new _exception2['default'](node.type + ' requires ' + name);
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   // Traverses a given array. If mutating, empty respnses will be removed
 | |
|   // for child elements.
 | |
|   acceptArray: function acceptArray(array) {
 | |
|     for (var i = 0, l = array.length; i < l; i++) {
 | |
|       this.acceptKey(array, i);
 | |
| 
 | |
|       if (!array[i]) {
 | |
|         array.splice(i, 1);
 | |
|         i--;
 | |
|         l--;
 | |
|       }
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   accept: function accept(object) {
 | |
|     if (!object) {
 | |
|       return;
 | |
|     }
 | |
| 
 | |
|     /* istanbul ignore next: Sanity code */
 | |
|     if (!this[object.type]) {
 | |
|       throw new _exception2['default']('Unknown type: ' + object.type, object);
 | |
|     }
 | |
| 
 | |
|     if (this.current) {
 | |
|       this.parents.unshift(this.current);
 | |
|     }
 | |
|     this.current = object;
 | |
| 
 | |
|     var ret = this[object.type](object);
 | |
| 
 | |
|     this.current = this.parents.shift();
 | |
| 
 | |
|     if (!this.mutating || ret) {
 | |
|       return ret;
 | |
|     } else if (ret !== false) {
 | |
|       return object;
 | |
|     }
 | |
|   },
 | |
| 
 | |
|   Program: function Program(program) {
 | |
|     this.acceptArray(program.body);
 | |
|   },
 | |
| 
 | |
|   MustacheStatement: visitSubExpression,
 | |
|   Decorator: visitSubExpression,
 | |
| 
 | |
|   BlockStatement: visitBlock,
 | |
|   DecoratorBlock: visitBlock,
 | |
| 
 | |
|   PartialStatement: visitPartial,
 | |
|   PartialBlockStatement: function PartialBlockStatement(partial) {
 | |
|     visitPartial.call(this, partial);
 | |
| 
 | |
|     this.acceptKey(partial, 'program');
 | |
|   },
 | |
| 
 | |
|   ContentStatement: function ContentStatement() /* content */{},
 | |
|   CommentStatement: function CommentStatement() /* comment */{},
 | |
| 
 | |
|   SubExpression: visitSubExpression,
 | |
| 
 | |
|   PathExpression: function PathExpression() /* path */{},
 | |
| 
 | |
|   StringLiteral: function StringLiteral() /* string */{},
 | |
|   NumberLiteral: function NumberLiteral() /* number */{},
 | |
|   BooleanLiteral: function BooleanLiteral() /* bool */{},
 | |
|   UndefinedLiteral: function UndefinedLiteral() /* literal */{},
 | |
|   NullLiteral: function NullLiteral() /* literal */{},
 | |
| 
 | |
|   Hash: function Hash(hash) {
 | |
|     this.acceptArray(hash.pairs);
 | |
|   },
 | |
|   HashPair: function HashPair(pair) {
 | |
|     this.acceptRequired(pair, 'value');
 | |
|   }
 | |
| };
 | |
| 
 | |
| function visitSubExpression(mustache) {
 | |
|   this.acceptRequired(mustache, 'path');
 | |
|   this.acceptArray(mustache.params);
 | |
|   this.acceptKey(mustache, 'hash');
 | |
| }
 | |
| function visitBlock(block) {
 | |
|   visitSubExpression.call(this, block);
 | |
| 
 | |
|   this.acceptKey(block, 'program');
 | |
|   this.acceptKey(block, 'inverse');
 | |
| }
 | |
| function visitPartial(partial) {
 | |
|   this.acceptRequired(partial, 'name');
 | |
|   this.acceptArray(partial.params);
 | |
|   this.acceptKey(partial, 'hash');
 | |
| }
 | |
| 
 | |
| exports.default = Visitor;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3Zpc2l0b3IuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztBQUVwQyxTQUFTLE9BQU8sR0FBRztBQUNqQixNQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztDQUNuQjs7QUFFRCxPQUFPLENBQUMsU0FBUyxHQUFHO0FBQ2xCLGFBQVcsRUFBRSxPQUFPO0FBQ3BCLFVBQVEsRUFBRSxLQUFLOzs7QUFHZixXQUFTLEVBQUUsbUJBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUM5QixRQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BDLFFBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTs7O0FBR2pCLFVBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDM0MsY0FBTSwyQkFDSix3QkFBd0IsR0FDdEIsS0FBSyxDQUFDLElBQUksR0FDVix5QkFBeUIsR0FDekIsSUFBSSxHQUNKLE1BQU0sR0FDTixJQUFJLENBQUMsSUFBSSxDQUNaLENBQUM7T0FDSDtBQUNELFVBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7S0FDcEI7R0FDRjs7OztBQUlELGdCQUFjLEVBQUUsd0JBQVMsSUFBSSxFQUFFLElBQUksRUFBRTtBQUNuQyxRQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQzs7QUFFM0IsUUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtBQUNmLFlBQU0sMkJBQWMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLENBQUM7S0FDdEQ7R0FDRjs7OztBQUlELGFBQVcsRUFBRSxxQkFBUyxLQUFLLEVBQUU7QUFDM0IsU0FBSyxJQUFJLENBQUMsR0FB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QztBQUNsQyxNQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsVUFBVSxDQUFDLEtBQUssRUFBRTtBQUN6QixvQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDOztBQUVyQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztDQUNsQztBQUNELFNBQVMsWUFBWSxDQUFDLE9BQU8sRUFBRTtBQUM3QixNQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNyQyxNQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxNQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztDQUNqQzs7cUJBRWMsT0FBTyIsImZpbGUiOiJ2aXNpdG9yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5mdW5jdGlvbiBWaXNpdG9yKCkge1xuICB0aGlzLnBhcmVudHMgPSBbXTtcbn1cblxuVmlzaXRvci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBWaXNpdG9yLFxuICBtdXRhdGluZzogZmFsc2UsXG5cbiAgLy8gVmlzaXRzIGEgZ2l2ZW4gdmFsdWUuIElmIG11dGF0aW5nLCB3aWxsIHJlcGxhY2UgdGhlIHZhbHVlIGlmIG5lY2Vzc2FyeS5cbiAgYWNjZXB0S2V5OiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgbGV0IHZhbHVlID0gdGhpcy5hY2NlcHQobm9kZVtuYW1lXSk7XG4gICAgaWYgKHRoaXMubXV0YXRpbmcpIHtcbiAgICAgIC8vIEhhY2t5IHNhbml0eSBjaGVjazogVGhpcyBtYXkgaGF2ZSBhIGZldyBmYWxzZSBwb3NpdGl2ZXMgZm9yIHR5cGUgZm9yIHRoZSBoZWxwZXJcbiAgICAgIC8vIG1ldGhvZHMgYnV0IHdpbGwgZ2VuZXJhbGx5IGRvIHRoZSByaWdodCB0aGluZyB3aXRob3V0IGEgbG90IG9mIG92ZXJoZWFkLlxuICAgICAgaWYgKHZhbHVlICYmICFWaXNpdG9yLnByb3RvdHlwZVt2YWx1ZS50eXBlXSkge1xuICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAgICdVbmV4cGVjdGVkIG5vZGUgdHlwZSBcIicgK1xuICAgICAgICAgICAgdmFsdWUudHlwZSArXG4gICAgICAgICAgICAnXCIgZm91bmQgd2hlbiBhY2NlcHRpbmcgJyArXG4gICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICcgb24gJyArXG4gICAgICAgICAgICBub2RlLnR5cGVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5vZGVbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gIH0sXG5cbiAgLy8gUGVyZm9ybXMgYW4gYWNjZXB0IG9wZXJhdGlvbiB3aXRoIGFkZGVkIHNhbml0eSBjaGVjayB0byBlbnN1cmVcbiAgLy8gcmVxdWlyZWQga2V5cyBhcmUgbm90IHJlbW92ZWQuXG4gIGFjY2VwdFJlcXVpcmVkOiBmdW5jdGlvbihub2RlLCBuYW1lKSB7XG4gICAgdGhpcy5hY2NlcHRLZXkobm9kZSwgbmFtZSk7XG5cbiAgICBpZiAoIW5vZGVbbmFtZV0pIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24obm9kZS50eXBlICsgJyByZXF1aXJlcyAnICsgbmFtZSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRyYXZlcnNlcyBhIGdpdmVuIGFycmF5LiBJZiBtdXRhdGluZywgZW1wdHkgcmVzcG5zZXMgd2lsbCBiZSByZW1vdmVkXG4gIC8vIGZvciBjaGlsZCBlbGVtZW50cy5cbiAgYWNjZXB0QXJyYXk6IGZ1bmN0aW9uKGFycmF5KSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHRoaXMuYWNjZXB0S2V5KGFycmF5LCBpKTtcblxuICAgICAgaWYgKCFhcnJheVtpXSkge1xuICAgICAgICBhcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGktLTtcbiAgICAgICAgbC0tO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhY2NlcHQ6IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmICghb2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IFNhbml0eSBjb2RlICovXG4gICAgaWYgKCF0aGlzW29iamVjdC50eXBlXSkge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignVW5rbm93biB0eXBlOiAnICsgb2JqZWN0LnR5cGUsIG9iamVjdCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VycmVudCkge1xuICAgICAgdGhpcy5wYXJlbnRzLnVuc2hpZnQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50ID0gb2JqZWN0O1xuXG4gICAgbGV0IHJldCA9IHRoaXNbb2JqZWN0LnR5cGVdKG9iamVjdCk7XG5cbiAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnBhcmVudHMuc2hpZnQoKTtcblxuICAgIGlmICghdGhpcy5tdXRhdGluZyB8fCByZXQpIHtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSBlbHNlIGlmIChyZXQgIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfSxcblxuICBQcm9ncmFtOiBmdW5jdGlvbihwcm9ncmFtKSB7XG4gICAgdGhpcy5hY2NlcHRBcnJheShwcm9ncmFtLmJvZHkpO1xuICB9LFxuXG4gIE11c3RhY2hlU3RhdGVtZW50OiB2aXNpdFN1YkV4cHJlc3Npb24sXG4gIERlY29yYXRvcjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIEJsb2NrU3RhdGVtZW50OiB2aXNpdEJsb2NrLFxuICBEZWNvcmF0b3JCbG9jazogdmlzaXRCbG9jayxcblxuICBQYXJ0aWFsU3RhdGVtZW50OiB2aXNpdFBhcnRpYWwsXG4gIFBhcnRpYWxCbG9ja1N0YXRlbWVudDogZnVuY3Rpb24ocGFydGlhbCkge1xuICAgIHZpc2l0UGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwpO1xuXG4gICAgdGhpcy5hY2NlcHRLZXkocGFydGlhbCwgJ3Byb2dyYW0nKTtcbiAgfSxcblxuICBDb250ZW50U3RhdGVtZW50OiBmdW5jdGlvbigvKiBjb250ZW50ICovKSB7fSxcbiAgQ29tbWVudFN0YXRlbWVudDogZnVuY3Rpb24oLyogY29tbWVudCAqLykge30sXG5cbiAgU3ViRXhwcmVzc2lvbjogdmlzaXRTdWJFeHByZXNzaW9uLFxuXG4gIFBhdGhFeHByZXNzaW9uOiBmdW5jdGlvbigvKiBwYXRoICovKSB7fSxcblxuICBTdHJpbmdMaXRlcmFsOiBmdW5jdGlvbigvKiBzdHJpbmcgKi8pIHt9LFxuICBOdW1iZXJMaXRlcmFsOiBmdW5jdGlvbigvKiBudW1iZXIgKi8pIHt9LFxuICBCb29sZWFuTGl0ZXJhbDogZnVuY3Rpb24oLyogYm9vbCAqLykge30sXG4gIFVuZGVmaW5lZExpdGVyYWw6IGZ1bmN0aW9uKC8qIGxpdGVyYWwgKi8pIHt9LFxuICBOdWxsTGl0ZXJhbDogZnVuY3Rpb24oLyogbGl0ZXJhbCAqLykge30sXG5cbiAgSGFzaDogZnVuY3Rpb24oaGFzaCkge1xuICAgIHRoaXMuYWNjZXB0QXJyYXkoaGFzaC5wYWlycyk7XG4gIH0sXG4gIEhhc2hQYWlyOiBmdW5jdGlvbihwYWlyKSB7XG4gICAgdGhpcy5hY2NlcHRSZXF1aXJlZChwYWlyLCAndmFsdWUnKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gdmlzaXRTdWJFeHByZXNzaW9uKG11c3RhY2hlKSB7XG4gIHRoaXMuYWNjZXB0UmVxdWlyZWQobXVzdGFjaGUsICdwYXRoJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkobXVzdGFjaGUucGFyYW1zKTtcbiAgdGhpcy5hY2NlcHRLZXkobXVzdGFjaGUsICdoYXNoJyk7XG59XG5mdW5jdGlvbiB2aXNpdEJsb2NrKGJsb2NrKSB7XG4gIHZpc2l0U3ViRXhwcmVzc2lvbi5jYWxsKHRoaXMsIGJsb2NrKTtcblxuICB0aGlzLmFjY2VwdEtleShibG9jaywgJ3Byb2dyYW0nKTtcbiAgdGhpcy5hY2NlcHRLZXkoYmxvY2ssICdpbnZlcnNlJyk7XG59XG5mdW5jdGlvbiB2aXNpdFBhcnRpYWwocGFydGlhbCkge1xuICB0aGlzLmFjY2VwdFJlcXVpcmVkKHBhcnRpYWwsICduYW1lJyk7XG4gIHRoaXMuYWNjZXB0QXJyYXkocGFydGlhbC5wYXJhbXMpO1xuICB0aGlzLmFjY2VwdEtleShwYXJ0aWFsLCAnaGFzaCcpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaXNpdG9yO1xuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5200:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _visitor = __webpack_require__(4166);
 | |
| 
 | |
| var _visitor2 = _interopRequireDefault(_visitor);
 | |
| 
 | |
| function WhitespaceControl() {
 | |
|   var options = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
 | |
| 
 | |
|   this.options = options;
 | |
| }
 | |
| WhitespaceControl.prototype = new _visitor2['default']();
 | |
| 
 | |
| WhitespaceControl.prototype.Program = function (program) {
 | |
|   var doStandalone = !this.options.ignoreStandalone;
 | |
| 
 | |
|   var isRoot = !this.isRootSeen;
 | |
|   this.isRootSeen = true;
 | |
| 
 | |
|   var body = program.body;
 | |
|   for (var i = 0, l = body.length; i < l; i++) {
 | |
|     var current = body[i],
 | |
|         strip = this.accept(current);
 | |
| 
 | |
|     if (!strip) {
 | |
|       continue;
 | |
|     }
 | |
| 
 | |
|     var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),
 | |
|         _isNextWhitespace = isNextWhitespace(body, i, isRoot),
 | |
|         openStandalone = strip.openStandalone && _isPrevWhitespace,
 | |
|         closeStandalone = strip.closeStandalone && _isNextWhitespace,
 | |
|         inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;
 | |
| 
 | |
|     if (strip.close) {
 | |
|       omitRight(body, i, true);
 | |
|     }
 | |
|     if (strip.open) {
 | |
|       omitLeft(body, i, true);
 | |
|     }
 | |
| 
 | |
|     if (doStandalone && inlineStandalone) {
 | |
|       omitRight(body, i);
 | |
| 
 | |
|       if (omitLeft(body, i)) {
 | |
|         // If we are on a standalone node, save the indent info for partials
 | |
|         if (current.type === 'PartialStatement') {
 | |
|           // Pull out the whitespace from the final line
 | |
|           current.indent = /([ \t]+$)/.exec(body[i - 1].original)[1];
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     if (doStandalone && openStandalone) {
 | |
|       omitRight((current.program || current.inverse).body);
 | |
| 
 | |
|       // Strip out the previous content node if it's whitespace only
 | |
|       omitLeft(body, i);
 | |
|     }
 | |
|     if (doStandalone && closeStandalone) {
 | |
|       // Always strip the next node
 | |
|       omitRight(body, i);
 | |
| 
 | |
|       omitLeft((current.inverse || current.program).body);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return program;
 | |
| };
 | |
| 
 | |
| WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {
 | |
|   this.accept(block.program);
 | |
|   this.accept(block.inverse);
 | |
| 
 | |
|   // Find the inverse program that is involed with whitespace stripping.
 | |
|   var program = block.program || block.inverse,
 | |
|       inverse = block.program && block.inverse,
 | |
|       firstInverse = inverse,
 | |
|       lastInverse = inverse;
 | |
| 
 | |
|   if (inverse && inverse.chained) {
 | |
|     firstInverse = inverse.body[0].program;
 | |
| 
 | |
|     // Walk the inverse chain to find the last inverse that is actually in the chain.
 | |
|     while (lastInverse.chained) {
 | |
|       lastInverse = lastInverse.body[lastInverse.body.length - 1].program;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   var strip = {
 | |
|     open: block.openStrip.open,
 | |
|     close: block.closeStrip.close,
 | |
| 
 | |
|     // Determine the standalone candiacy. Basically flag our content as being possibly standalone
 | |
|     // so our parent can determine if we actually are standalone
 | |
|     openStandalone: isNextWhitespace(program.body),
 | |
|     closeStandalone: isPrevWhitespace((firstInverse || program).body)
 | |
|   };
 | |
| 
 | |
|   if (block.openStrip.close) {
 | |
|     omitRight(program.body, null, true);
 | |
|   }
 | |
| 
 | |
|   if (inverse) {
 | |
|     var inverseStrip = block.inverseStrip;
 | |
| 
 | |
|     if (inverseStrip.open) {
 | |
|       omitLeft(program.body, null, true);
 | |
|     }
 | |
| 
 | |
|     if (inverseStrip.close) {
 | |
|       omitRight(firstInverse.body, null, true);
 | |
|     }
 | |
|     if (block.closeStrip.open) {
 | |
|       omitLeft(lastInverse.body, null, true);
 | |
|     }
 | |
| 
 | |
|     // Find standalone else statments
 | |
|     if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {
 | |
|       omitLeft(program.body);
 | |
|       omitRight(firstInverse.body);
 | |
|     }
 | |
|   } else if (block.closeStrip.open) {
 | |
|     omitLeft(program.body, null, true);
 | |
|   }
 | |
| 
 | |
|   return strip;
 | |
| };
 | |
| 
 | |
| WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {
 | |
|   return mustache.strip;
 | |
| };
 | |
| 
 | |
| WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {
 | |
|   /* istanbul ignore next */
 | |
|   var strip = node.strip || {};
 | |
|   return {
 | |
|     inlineStandalone: true,
 | |
|     open: strip.open,
 | |
|     close: strip.close
 | |
|   };
 | |
| };
 | |
| 
 | |
| function isPrevWhitespace(body, i, isRoot) {
 | |
|   if (i === undefined) {
 | |
|     i = body.length;
 | |
|   }
 | |
| 
 | |
|   // Nodes that end with newlines are considered whitespace (but are special
 | |
|   // cased for strip operations)
 | |
|   var prev = body[i - 1],
 | |
|       sibling = body[i - 2];
 | |
|   if (!prev) {
 | |
|     return isRoot;
 | |
|   }
 | |
| 
 | |
|   if (prev.type === 'ContentStatement') {
 | |
|     return (sibling || !isRoot ? /\r?\n\s*?$/ : /(^|\r?\n)\s*?$/).test(prev.original);
 | |
|   }
 | |
| }
 | |
| function isNextWhitespace(body, i, isRoot) {
 | |
|   if (i === undefined) {
 | |
|     i = -1;
 | |
|   }
 | |
| 
 | |
|   var next = body[i + 1],
 | |
|       sibling = body[i + 2];
 | |
|   if (!next) {
 | |
|     return isRoot;
 | |
|   }
 | |
| 
 | |
|   if (next.type === 'ContentStatement') {
 | |
|     return (sibling || !isRoot ? /^\s*?\r?\n/ : /^\s*?(\r?\n|$)/).test(next.original);
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Marks the node to the right of the position as omitted.
 | |
| // I.e. {{foo}}' ' will mark the ' ' node as omitted.
 | |
| //
 | |
| // If i is undefined, then the first child will be marked as such.
 | |
| //
 | |
| // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
 | |
| // content is met.
 | |
| function omitRight(body, i, multiple) {
 | |
|   var current = body[i == null ? 0 : i + 1];
 | |
|   if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   var original = current.value;
 | |
|   current.value = current.value.replace(multiple ? /^\s+/ : /^[ \t]*\r?\n?/, '');
 | |
|   current.rightStripped = current.value !== original;
 | |
| }
 | |
| 
 | |
| // Marks the node to the left of the position as omitted.
 | |
| // I.e. ' '{{foo}} will mark the ' ' node as omitted.
 | |
| //
 | |
| // If i is undefined then the last child will be marked as such.
 | |
| //
 | |
| // If mulitple is truthy then all whitespace will be stripped out until non-whitespace
 | |
| // content is met.
 | |
| function omitLeft(body, i, multiple) {
 | |
|   var current = body[i == null ? body.length - 1 : i - 1];
 | |
|   if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   // We omit the last node if it's whitespace only and not preceded by a non-content node.
 | |
|   var original = current.value;
 | |
|   current.value = current.value.replace(multiple ? /\s+$/ : /[ \t]+$/, '');
 | |
|   current.leftStripped = current.value !== original;
 | |
|   return current.leftStripped;
 | |
| }
 | |
| 
 | |
| exports.default = WhitespaceControl;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2NvbXBpbGVyL3doaXRlc3BhY2UtY29udHJvbC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3VCQUFvQixXQUFXOzs7O0FBRS9CLFNBQVMsaUJBQWlCLEdBQWU7TUFBZCxPQUFPLHlEQUFHLEVBQUU7O0FBQ3JDLE1BQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0NBQ3hCO0FBQ0QsaUJBQWlCLENBQUMsU0FBUyxHQUFHLDBCQUFhLENBQUM7O0FBRTVDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsVUFBUyxPQUFPLEVBQUU7QUFDdEQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDOztBQUVwRCxNQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7QUFDOUIsTUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7O0FBRXZCLE1BQUksSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7QUFDeEIsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxRQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25CLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztBQUUvQixRQUFJLENBQUMsS0FBSyxFQUFFO0FBQ1YsZUFBUztLQUNWOztBQUVELFFBQUksaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDdkQsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUM7UUFDckQsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksaUJBQWlCO1FBQzFE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QUFDLE9BQU8sSUFDUixPQUFPLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUNsQyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsWUFBWSxBQUFDLEVBQ25DO0FBQ0EsV0FBTztHQUNSOzs7QUFHRCxNQUFJLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQzdCLFNBQU8sQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLE1BQU0sR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDekUsU0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUNsRCxTQUFPLE9BQU8sQ0FBQyxZQUFZLENBQUM7Q0FDN0I7O3FCQUVjLGlCQUFpQiIsImZpbGUiOiJ3aGl0ZXNwYWNlLWNvbnRyb2wuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVmlzaXRvciBmcm9tICcuL3Zpc2l0b3InO1xuXG5mdW5jdGlvbiBXaGl0ZXNwYWNlQ29udHJvbChvcHRpb25zID0ge30pIHtcbiAgdGhpcy5vcHRpb25zID0gb3B0aW9ucztcbn1cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZSA9IG5ldyBWaXNpdG9yKCk7XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5Qcm9ncmFtID0gZnVuY3Rpb24ocHJvZ3JhbSkge1xuICBjb25zdCBkb1N0YW5kYWxvbmUgPSAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmU7XG5cbiAgbGV0IGlzUm9vdCA9ICF0aGlzLmlzUm9vdFNlZW47XG4gIHRoaXMuaXNSb290U2VlbiA9IHRydWU7XG5cbiAgbGV0IGJvZHkgPSBwcm9ncmFtLmJvZHk7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYm9keS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY3VycmVudCA9IGJvZHlbaV0sXG4gICAgICBzdHJpcCA9IHRoaXMuYWNjZXB0KGN1cnJlbnQpO1xuXG4gICAgaWYgKCFzdHJpcCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbGV0IF9pc1ByZXZXaGl0ZXNwYWNlID0gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpLFxuICAgICAgX2lzTmV4dFdoaXRlc3BhY2UgPSBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCksXG4gICAgICBvcGVuU3RhbmRhbG9uZSA9IHN0cmlwLm9wZW5TdGFuZGFsb25lICYmIF9pc1ByZXZXaGl0ZXNwYWNlLFxuICAgICAgY2xvc2VTdGFuZGFsb25lID0gc3RyaXAuY2xvc2VTdGFuZGFsb25lICYmIF9pc05leHRXaGl0ZXNwYWNlLFxuICAgICAgaW5saW5lU3RhbmRhbG9uZSA9XG4gICAgICAgIHN0cmlwLmlubGluZVN0YW5kYWxvbmUgJiYgX2lzUHJldldoaXRlc3BhY2UgJiYgX2lzTmV4dFdoaXRlc3BhY2U7XG5cbiAgICBpZiAoc3RyaXAuY2xvc2UpIHtcbiAgICAgIG9taXRSaWdodChib2R5LCBpLCB0cnVlKTtcbiAgICB9XG4gICAgaWYgKHN0cmlwLm9wZW4pIHtcbiAgICAgIG9taXRMZWZ0KGJvZHksIGksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgaW5saW5lU3RhbmRhbG9uZSkge1xuICAgICAgb21pdFJpZ2h0KGJvZHksIGkpO1xuXG4gICAgICBpZiAob21pdExlZnQoYm9keSwgaSkpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlIG9uIGEgc3RhbmRhbG9uZSBub2RlLCBzYXZlIHRoZSBpbmRlbnQgaW5mbyBmb3IgcGFydGlhbHNcbiAgICAgICAgaWYgKGN1cnJlbnQudHlwZSA9PT0gJ1BhcnRpYWxTdGF0ZW1lbnQnKSB7XG4gICAgICAgICAgLy8gUHVsbCBvdXQgdGhlIHdoaXRlc3BhY2UgZnJvbSB0aGUgZmluYWwgbGluZVxuICAgICAgICAgIGN1cnJlbnQuaW5kZW50ID0gLyhbIFxcdF0rJCkvLmV4ZWMoYm9keVtpIC0gMV0ub3JpZ2luYWwpWzFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChkb1N0YW5kYWxvbmUgJiYgb3BlblN0YW5kYWxvbmUpIHtcbiAgICAgIG9taXRSaWdodCgoY3VycmVudC5wcm9ncmFtIHx8IGN1cnJlbnQuaW52ZXJzZSkuYm9keSk7XG5cbiAgICAgIC8vIFN0cmlwIG91dCB0aGUgcHJldmlvdXMgY29udGVudCBub2RlIGlmIGl0J3Mgd2hpdGVzcGFjZSBvbmx5XG4gICAgICBvbWl0TGVmdChib2R5LCBpKTtcbiAgICB9XG4gICAgaWYgKGRvU3RhbmRhbG9uZSAmJiBjbG9zZVN0YW5kYWxvbmUpIHtcbiAgICAgIC8vIEFsd2F5cyBzdHJpcCB0aGUgbmV4dCBub2RlXG4gICAgICBvbWl0UmlnaHQoYm9keSwgaSk7XG5cbiAgICAgIG9taXRMZWZ0KChjdXJyZW50LmludmVyc2UgfHwgY3VycmVudC5wcm9ncmFtKS5ib2R5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvZ3JhbTtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5CbG9ja1N0YXRlbWVudCA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5EZWNvcmF0b3JCbG9jayA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsQmxvY2tTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgYmxvY2tcbikge1xuICB0aGlzLmFjY2VwdChibG9jay5wcm9ncmFtKTtcbiAgdGhpcy5hY2NlcHQoYmxvY2suaW52ZXJzZSk7XG5cbiAgLy8gRmluZCB0aGUgaW52ZXJzZSBwcm9ncmFtIHRoYXQgaXMgaW52b2xlZCB3aXRoIHdoaXRlc3BhY2Ugc3RyaXBwaW5nLlxuICBsZXQgcHJvZ3JhbSA9IGJsb2NrLnByb2dyYW0gfHwgYmxvY2suaW52ZXJzZSxcbiAgICBpbnZlcnNlID0gYmxvY2sucHJvZ3JhbSAmJiBibG9jay5pbnZlcnNlLFxuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UsXG4gICAgbGFzdEludmVyc2UgPSBpbnZlcnNlO1xuXG4gIGlmIChpbnZlcnNlICYmIGludmVyc2UuY2hhaW5lZCkge1xuICAgIGZpcnN0SW52ZXJzZSA9IGludmVyc2UuYm9keVswXS5wcm9ncmFtO1xuXG4gICAgLy8gV2FsayB0aGUgaW52ZXJzZSBjaGFpbiB0byBmaW5kIHRoZSBsYXN0IGludmVyc2UgdGhhdCBpcyBhY3R1YWxseSBpbiB0aGUgY2hhaW4uXG4gICAgd2hpbGUgKGxhc3RJbnZlcnNlLmNoYWluZWQpIHtcbiAgICAgIGxhc3RJbnZlcnNlID0gbGFzdEludmVyc2UuYm9keVtsYXN0SW52ZXJzZS5ib2R5Lmxlbmd0aCAtIDFdLnByb2dyYW07XG4gICAgfVxuICB9XG5cbiAgbGV0IHN0cmlwID0ge1xuICAgIG9wZW46IGJsb2NrLm9wZW5TdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBibG9jay5jbG9zZVN0cmlwLmNsb3NlLFxuXG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBzdGFuZGFsb25lIGNhbmRpYWN5LiBCYXNpY2FsbHkgZmxhZyBvdXIgY29udGVudCBhcyBiZWluZyBwb3NzaWJseSBzdGFuZGFsb25lXG4gICAgLy8gc28gb3VyIHBhcmVudCBjYW4gZGV0ZXJtaW5lIGlmIHdlIGFjdHVhbGx5IGFyZSBzdGFuZGFsb25lXG4gICAgb3BlblN0YW5kYWxvbmU6IGlzTmV4dFdoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSxcbiAgICBjbG9zZVN0YW5kYWxvbmU6IGlzUHJldldoaXRlc3BhY2UoKGZpcnN0SW52ZXJzZSB8fCBwcm9ncmFtKS5ib2R5KVxuICB9O1xuXG4gIGlmIChibG9jay5vcGVuU3RyaXAuY2xvc2UpIHtcbiAgICBvbWl0UmlnaHQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgfVxuXG4gIGlmIChpbnZlcnNlKSB7XG4gICAgbGV0IGludmVyc2VTdHJpcCA9IGJsb2NrLmludmVyc2VTdHJpcDtcblxuICAgIGlmIChpbnZlcnNlU3RyaXAub3Blbikge1xuICAgICAgb21pdExlZnQocHJvZ3JhbS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoaW52ZXJzZVN0cmlwLmNsb3NlKSB7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHksIG51bGwsIHRydWUpO1xuICAgIH1cbiAgICBpZiAoYmxvY2suY2xvc2VTdHJpcC5vcGVuKSB7XG4gICAgICBvbWl0TGVmdChsYXN0SW52ZXJzZS5ib2R5LCBudWxsLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBGaW5kIHN0YW5kYWxvbmUgZWxzZSBzdGF0bWVudHNcbiAgICBpZiAoXG4gICAgICAhdGhpcy5vcHRpb25zLmlnbm9yZVN0YW5kYWxvbmUgJiZcbiAgICAgIGlzUHJldldoaXRlc3BhY2UocHJvZ3JhbS5ib2R5KSAmJlxuICAgICAgaXNOZXh0V2hpdGVzcGFjZShmaXJzdEludmVyc2UuYm9keSlcbiAgICApIHtcbiAgICAgIG9taXRMZWZ0KHByb2dyYW0uYm9keSk7XG4gICAgICBvbWl0UmlnaHQoZmlyc3RJbnZlcnNlLmJvZHkpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChibG9jay5jbG9zZVN0cmlwLm9wZW4pIHtcbiAgICBvbWl0TGVmdChwcm9ncmFtLmJvZHksIG51bGwsIHRydWUpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmlwO1xufTtcblxuV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkRlY29yYXRvciA9IFdoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5NdXN0YWNoZVN0YXRlbWVudCA9IGZ1bmN0aW9uKFxuICBtdXN0YWNoZVxuKSB7XG4gIHJldHVybiBtdXN0YWNoZS5zdHJpcDtcbn07XG5cbldoaXRlc3BhY2VDb250cm9sLnByb3RvdHlwZS5QYXJ0aWFsU3RhdGVtZW50ID0gV2hpdGVzcGFjZUNvbnRyb2wucHJvdG90eXBlLkNvbW1lbnRTdGF0ZW1lbnQgPSBmdW5jdGlvbihcbiAgbm9kZVxuKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCBzdHJpcCA9IG5vZGUuc3RyaXAgfHwge307XG4gIHJldHVybiB7XG4gICAgaW5saW5lU3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBvcGVuOiBzdHJpcC5vcGVuLFxuICAgIGNsb3NlOiBzdHJpcC5jbG9zZVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNQcmV2V2hpdGVzcGFjZShib2R5LCBpLCBpc1Jvb3QpIHtcbiAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgIGkgPSBib2R5Lmxlbmd0aDtcbiAgfVxuXG4gIC8vIE5vZGVzIHRoYXQgZW5kIHdpdGggbmV3bGluZXMgYXJlIGNvbnNpZGVyZWQgd2hpdGVzcGFjZSAoYnV0IGFyZSBzcGVjaWFsXG4gIC8vIGNhc2VkIGZvciBzdHJpcCBvcGVyYXRpb25zKVxuICBsZXQgcHJldiA9IGJvZHlbaSAtIDFdLFxuICAgIHNpYmxpbmcgPSBib2R5W2kgLSAyXTtcbiAgaWYgKCFwcmV2KSB7XG4gICAgcmV0dXJuIGlzUm9vdDtcbiAgfVxuXG4gIGlmIChwcmV2LnR5cGUgPT09ICdDb250ZW50U3RhdGVtZW50Jykge1xuICAgIHJldHVybiAoc2libGluZyB8fCAhaXNSb290ID8gL1xccj9cXG5cXHMqPyQvIDogLyhefFxccj9cXG4pXFxzKj8kLykudGVzdChcbiAgICAgIHByZXYub3JpZ2luYWxcbiAgICApO1xuICB9XG59XG5mdW5jdGlvbiBpc05leHRXaGl0ZXNwYWNlKGJvZHksIGksIGlzUm9vdCkge1xuICBpZiAoaSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaSA9IC0xO1xuICB9XG5cbiAgbGV0IG5leHQgPSBib2R5W2kgKyAxXSxcbiAgICBzaWJsaW5nID0gYm9keVtpICsgMl07XG4gIGlmICghbmV4dCkge1xuICAgIHJldHVybiBpc1Jvb3Q7XG4gIH1cblxuICBpZiAobmV4dC50eXBlID09PSAnQ29udGVudFN0YXRlbWVudCcpIHtcbiAgICByZXR1cm4gKHNpYmxpbmcgfHwgIWlzUm9vdCA/IC9eXFxzKj9cXHI/XFxuLyA6IC9eXFxzKj8oXFxyP1xcbnwkKS8pLnRlc3QoXG4gICAgICBuZXh0Lm9yaWdpbmFsXG4gICAgKTtcbiAgfVxufVxuXG4vLyBNYXJrcyB0aGUgbm9kZSB0byB0aGUgcmlnaHQgb2YgdGhlIHBvc2l0aW9uIGFzIG9taXR0ZWQuXG4vLyBJLmUuIHt7Zm9vfX0nICcgd2lsbCBtYXJrIHRoZSAnICcgbm9kZSBhcyBvbWl0dGVkLlxuLy9cbi8vIElmIGkgaXMgdW5kZWZpbmVkLCB0aGVuIHRoZSBmaXJzdCBjaGlsZCB3aWxsIGJlIG1hcmtlZCBhcyBzdWNoLlxuLy9cbi8vIElmIG11bGl0cGxlIGlzIHRydXRoeSB0aGVuIGFsbCB3aGl0ZXNwYWNlIHdpbGwgYmUgc3RyaXBwZWQgb3V0IHVudGlsIG5vbi13aGl0ZXNwYWNlXG4vLyBjb250ZW50IGlzIG1ldC5cbmZ1bmN0aW9uIG9taXRSaWdodChib2R5LCBpLCBtdWx0aXBsZSkge1xuICBsZXQgY3VycmVudCA9IGJvZHlbaSA9PSBudWxsID8gMCA6IGkgKyAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQucmlnaHRTdHJpcHBlZClcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IG9yaWdpbmFsID0gY3VycmVudC52YWx1ZTtcbiAgY3VycmVudC52YWx1ZSA9IGN1cnJlbnQudmFsdWUucmVwbGFjZShcbiAgICBtdWx0aXBsZSA/IC9eXFxzKy8gOiAvXlsgXFx0XSpcXHI/XFxuPy8sXG4gICAgJydcbiAgKTtcbiAgY3VycmVudC5yaWdodFN0cmlwcGVkID0gY3VycmVudC52YWx1ZSAhPT0gb3JpZ2luYWw7XG59XG5cbi8vIE1hcmtzIHRoZSBub2RlIHRvIHRoZSBsZWZ0IG9mIHRoZSBwb3NpdGlvbiBhcyBvbWl0dGVkLlxuLy8gSS5lLiAnICd7e2Zvb319IHdpbGwgbWFyayB0aGUgJyAnIG5vZGUgYXMgb21pdHRlZC5cbi8vXG4vLyBJZiBpIGlzIHVuZGVmaW5lZCB0aGVuIHRoZSBsYXN0IGNoaWxkIHdpbGwgYmUgbWFya2VkIGFzIHN1Y2guXG4vL1xuLy8gSWYgbXVsaXRwbGUgaXMgdHJ1dGh5IHRoZW4gYWxsIHdoaXRlc3BhY2Ugd2lsbCBiZSBzdHJpcHBlZCBvdXQgdW50aWwgbm9uLXdoaXRlc3BhY2Vcbi8vIGNvbnRlbnQgaXMgbWV0LlxuZnVuY3Rpb24gb21pdExlZnQoYm9keSwgaSwgbXVsdGlwbGUpIHtcbiAgbGV0IGN1cnJlbnQgPSBib2R5W2kgPT0gbnVsbCA/IGJvZHkubGVuZ3RoIC0gMSA6IGkgLSAxXTtcbiAgaWYgKFxuICAgICFjdXJyZW50IHx8XG4gICAgY3VycmVudC50eXBlICE9PSAnQ29udGVudFN0YXRlbWVudCcgfHxcbiAgICAoIW11bHRpcGxlICYmIGN1cnJlbnQubGVmdFN0cmlwcGVkKVxuICApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBXZSBvbWl0IHRoZSBsYXN0IG5vZGUgaWYgaXQncyB3aGl0ZXNwYWNlIG9ubHkgYW5kIG5vdCBwcmVjZWRlZCBieSBhIG5vbi1jb250ZW50IG5vZGUuXG4gIGxldCBvcmlnaW5hbCA9IGN1cnJlbnQudmFsdWU7XG4gIGN1cnJlbnQudmFsdWUgPSBjdXJyZW50LnZhbHVlLnJlcGxhY2UobXVsdGlwbGUgPyAvXFxzKyQvIDogL1sgXFx0XSskLywgJycpO1xuICBjdXJyZW50LmxlZnRTdHJpcHBlZCA9IGN1cnJlbnQudmFsdWUgIT09IG9yaWdpbmFsO1xuICByZXR1cm4gY3VycmVudC5sZWZ0U3RyaXBwZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFdoaXRlc3BhY2VDb250cm9sO1xuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4168:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.registerDefaultDecorators = registerDefaultDecorators;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _decoratorsInline = __webpack_require__(975);
 | |
| 
 | |
| var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline);
 | |
| 
 | |
| function registerDefaultDecorators(instance) {
 | |
|   _decoratorsInline2['default'](instance);
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Z0NBQTJCLHFCQUFxQjs7OztBQUV6QyxTQUFTLHlCQUF5QixDQUFDLFFBQVEsRUFBRTtBQUNsRCxnQ0FBZSxRQUFRLENBQUMsQ0FBQztDQUMxQiIsImZpbGUiOiJkZWNvcmF0b3JzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVySW5saW5lIGZyb20gJy4vZGVjb3JhdG9ycy9pbmxpbmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycyhpbnN0YW5jZSkge1xuICByZWdpc3RlcklubGluZShpbnN0YW5jZSk7XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 975:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerDecorator('inline', function (fn, props, container, options) {
 | |
|     var ret = fn;
 | |
|     if (!props.partials) {
 | |
|       props.partials = {};
 | |
|       ret = function (context, options) {
 | |
|         // Create a new partials stack frame prior to exec.
 | |
|         var original = container.partials;
 | |
|         container.partials = _utils.extend({}, original, props.partials);
 | |
|         var ret = fn(context, options);
 | |
|         container.partials = original;
 | |
|         return ret;
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     props.partials[options.args[0]] = options.fn;
 | |
| 
 | |
|     return ret;
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQXVCLFVBQVU7O3FCQUVsQixVQUFTLFFBQVEsRUFBRTtBQUNoQyxVQUFRLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFO0FBQzNFLFFBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFO0FBQ25CLFdBQUssQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ3BCLFNBQUcsR0FBRyxVQUFTLE9BQU8sRUFBRSxPQUFPLEVBQUU7O0FBRS9CLFlBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUM7QUFDbEMsaUJBQVMsQ0FBQyxRQUFRLEdBQUcsY0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRCxZQUFJLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQy9CLGlCQUFTLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztBQUM5QixlQUFPLEdBQUcsQ0FBQztPQUNaLENBQUM7S0FDSDs7QUFFRCxTQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUU3QyxXQUFPLEdBQUcsQ0FBQztHQUNaLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlubGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4dGVuZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uKGZuLCBwcm9wcywgY29udGFpbmVyLCBvcHRpb25zKSB7XG4gICAgbGV0IHJldCA9IGZuO1xuICAgIGlmICghcHJvcHMucGFydGlhbHMpIHtcbiAgICAgIHByb3BzLnBhcnRpYWxzID0ge307XG4gICAgICByZXQgPSBmdW5jdGlvbihjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBwYXJ0aWFscyBzdGFjayBmcmFtZSBwcmlvciB0byBleGVjLlxuICAgICAgICBsZXQgb3JpZ2luYWwgPSBjb250YWluZXIucGFydGlhbHM7XG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgbGV0IHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2879:
 | |
| /***/ ((module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];
 | |
| 
 | |
| function Exception(message, node) {
 | |
|   var loc = node && node.loc,
 | |
|       line = undefined,
 | |
|       endLineNumber = undefined,
 | |
|       column = undefined,
 | |
|       endColumn = undefined;
 | |
| 
 | |
|   if (loc) {
 | |
|     line = loc.start.line;
 | |
|     endLineNumber = loc.end.line;
 | |
|     column = loc.start.column;
 | |
|     endColumn = loc.end.column;
 | |
| 
 | |
|     message += ' - ' + line + ':' + column;
 | |
|   }
 | |
| 
 | |
|   var tmp = Error.prototype.constructor.call(this, message);
 | |
| 
 | |
|   // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
 | |
|   for (var idx = 0; idx < errorProps.length; idx++) {
 | |
|     this[errorProps[idx]] = tmp[errorProps[idx]];
 | |
|   }
 | |
| 
 | |
|   /* istanbul ignore else */
 | |
|   if (Error.captureStackTrace) {
 | |
|     Error.captureStackTrace(this, Exception);
 | |
|   }
 | |
| 
 | |
|   try {
 | |
|     if (loc) {
 | |
|       this.lineNumber = line;
 | |
|       this.endLineNumber = endLineNumber;
 | |
| 
 | |
|       // Work around issue under safari where we can't directly set the column value
 | |
|       /* istanbul ignore next */
 | |
|       if (Object.defineProperty) {
 | |
|         Object.defineProperty(this, 'column', {
 | |
|           value: column,
 | |
|           enumerable: true
 | |
|         });
 | |
|         Object.defineProperty(this, 'endColumn', {
 | |
|           value: endColumn,
 | |
|           enumerable: true
 | |
|         });
 | |
|       } else {
 | |
|         this.column = column;
 | |
|         this.endColumn = endColumn;
 | |
|       }
 | |
|     }
 | |
|   } catch (nop) {
 | |
|     /* Ignore if the browser is very particular */
 | |
|   }
 | |
| }
 | |
| 
 | |
| Exception.prototype = new Error();
 | |
| 
 | |
| exports.default = Exception;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFNLFVBQVUsR0FBRyxDQUNqQixhQUFhLEVBQ2IsVUFBVSxFQUNWLFlBQVksRUFDWixlQUFlLEVBQ2YsU0FBUyxFQUNULE1BQU0sRUFDTixRQUFRLEVBQ1IsT0FBTyxDQUNSLENBQUM7O0FBRUYsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUNoQyxNQUFJLEdBQUcsR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUc7TUFDeEIsSUFBSSxZQUFBO01BQ0osYUFBYSxZQUFBO01BQ2IsTUFBTSxZQUFBO01BQ04sU0FBUyxZQUFBLENBQUM7O0FBRVosTUFBSSxHQUFHLEVBQUU7QUFDUCxRQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDdEIsaUJBQWEsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztBQUM3QixVQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDMUIsYUFBUyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOztBQUUzQixXQUFPLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0dBQ3hDOztBQUVELE1BQUksR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7OztBQUcxRCxPQUFLLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsRUFBRTtBQUNoRCxRQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0dBQzlDOzs7QUFHRCxNQUFJLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtBQUMzQixTQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQzFDOztBQUVELE1BQUk7QUFDRixRQUFJLEdBQUcsRUFBRTtBQUNQLFVBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO0FBQ3ZCLFVBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDOzs7O0FBSW5DLFVBQUksTUFBTSxDQUFDLGNBQWMsRUFBRTtBQUN6QixjQUFNLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7QUFDcEMsZUFBSyxFQUFFLE1BQU07QUFDYixvQkFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQyxDQUFDO0FBQ0gsY0FBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3ZDLGVBQUssRUFBRSxTQUFTO0FBQ2hCLG9CQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDLENBQUM7T0FDSixNQUFNO0FBQ0wsWUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDckIsWUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7T0FDNUI7S0FDRjtHQUNGLENBQUMsT0FBTyxHQUFHLEVBQUU7O0dBRWI7Q0FDRjs7QUFFRCxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7O3FCQUVuQixTQUFTIiwiZmlsZSI6ImV4Y2VwdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGVycm9yUHJvcHMgPSBbXG4gICdkZXNjcmlwdGlvbicsXG4gICdmaWxlTmFtZScsXG4gICdsaW5lTnVtYmVyJyxcbiAgJ2VuZExpbmVOdW1iZXInLFxuICAnbWVzc2FnZScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFjaydcbl07XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIGxldCBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgIGxpbmUsXG4gICAgZW5kTGluZU51bWJlcixcbiAgICBjb2x1bW4sXG4gICAgZW5kQ29sdW1uO1xuXG4gIGlmIChsb2MpIHtcbiAgICBsaW5lID0gbG9jLnN0YXJ0LmxpbmU7XG4gICAgZW5kTGluZU51bWJlciA9IGxvYy5lbmQubGluZTtcbiAgICBjb2x1bW4gPSBsb2Muc3RhcnQuY29sdW1uO1xuICAgIGVuZENvbHVtbiA9IGxvYy5lbmQuY29sdW1uO1xuXG4gICAgbWVzc2FnZSArPSAnIC0gJyArIGxpbmUgKyAnOicgKyBjb2x1bW47XG4gIH1cblxuICBsZXQgdG1wID0gRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yLmNhbGwodGhpcywgbWVzc2FnZSk7XG5cbiAgLy8gVW5mb3J0dW5hdGVseSBlcnJvcnMgYXJlIG5vdCBlbnVtZXJhYmxlIGluIENocm9tZSAoYXQgbGVhc3QpLCBzbyBgZm9yIHByb3AgaW4gdG1wYCBkb2Vzbid0IHdvcmsuXG4gIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVycm9yUHJvcHMubGVuZ3RoOyBpZHgrKykge1xuICAgIHRoaXNbZXJyb3JQcm9wc1tpZHhdXSA9IHRtcFtlcnJvclByb3BzW2lkeF1dO1xuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgRXhjZXB0aW9uKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGxvYykge1xuICAgICAgdGhpcy5saW5lTnVtYmVyID0gbGluZTtcbiAgICAgIHRoaXMuZW5kTGluZU51bWJlciA9IGVuZExpbmVOdW1iZXI7XG5cbiAgICAgIC8vIFdvcmsgYXJvdW5kIGlzc3VlIHVuZGVyIHNhZmFyaSB3aGVyZSB3ZSBjYW4ndCBkaXJlY3RseSBzZXQgdGhlIGNvbHVtbiB2YWx1ZVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdjb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGNvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VuZENvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogZW5kQ29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjtcbiAgICAgICAgdGhpcy5lbmRDb2x1bW4gPSBlbmRDb2x1bW47XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIChub3ApIHtcbiAgICAvKiBJZ25vcmUgaWYgdGhlIGJyb3dzZXIgaXMgdmVyeSBwYXJ0aWN1bGFyICovXG4gIH1cbn1cblxuRXhjZXB0aW9uLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuXG5leHBvcnQgZGVmYXVsdCBFeGNlcHRpb247XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3066:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.registerDefaultHelpers = registerDefaultHelpers;
 | |
| exports.moveHelperToHooks = moveHelperToHooks;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _helpersBlockHelperMissing = __webpack_require__(6247);
 | |
| 
 | |
| var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing);
 | |
| 
 | |
| var _helpersEach = __webpack_require__(9052);
 | |
| 
 | |
| var _helpersEach2 = _interopRequireDefault(_helpersEach);
 | |
| 
 | |
| var _helpersHelperMissing = __webpack_require__(8950);
 | |
| 
 | |
| var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing);
 | |
| 
 | |
| var _helpersIf = __webpack_require__(2767);
 | |
| 
 | |
| var _helpersIf2 = _interopRequireDefault(_helpersIf);
 | |
| 
 | |
| var _helpersLog = __webpack_require__(9072);
 | |
| 
 | |
| var _helpersLog2 = _interopRequireDefault(_helpersLog);
 | |
| 
 | |
| var _helpersLookup = __webpack_require__(8168);
 | |
| 
 | |
| var _helpersLookup2 = _interopRequireDefault(_helpersLookup);
 | |
| 
 | |
| var _helpersWith = __webpack_require__(9150);
 | |
| 
 | |
| var _helpersWith2 = _interopRequireDefault(_helpersWith);
 | |
| 
 | |
| function registerDefaultHelpers(instance) {
 | |
|   _helpersBlockHelperMissing2['default'](instance);
 | |
|   _helpersEach2['default'](instance);
 | |
|   _helpersHelperMissing2['default'](instance);
 | |
|   _helpersIf2['default'](instance);
 | |
|   _helpersLog2['default'](instance);
 | |
|   _helpersLookup2['default'](instance);
 | |
|   _helpersWith2['default'](instance);
 | |
| }
 | |
| 
 | |
| function moveHelperToHooks(instance, helperName, keepHelper) {
 | |
|   if (instance.helpers[helperName]) {
 | |
|     instance.hooks[helperName] = instance.helpers[helperName];
 | |
|     if (!keepHelper) {
 | |
|       delete instance.helpers[helperName];
 | |
|     }
 | |
|   }
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O3lDQUF1QyxnQ0FBZ0M7Ozs7MkJBQzlDLGdCQUFnQjs7OztvQ0FDUCwwQkFBMEI7Ozs7eUJBQ3JDLGNBQWM7Ozs7MEJBQ2IsZUFBZTs7Ozs2QkFDWixrQkFBa0I7Ozs7MkJBQ3BCLGdCQUFnQjs7OztBQUVsQyxTQUFTLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtBQUMvQyx5Q0FBMkIsUUFBUSxDQUFDLENBQUM7QUFDckMsMkJBQWEsUUFBUSxDQUFDLENBQUM7QUFDdkIsb0NBQXNCLFFBQVEsQ0FBQyxDQUFDO0FBQ2hDLHlCQUFXLFFBQVEsQ0FBQyxDQUFDO0FBQ3JCLDBCQUFZLFFBQVEsQ0FBQyxDQUFDO0FBQ3RCLDZCQUFlLFFBQVEsQ0FBQyxDQUFDO0FBQ3pCLDJCQUFhLFFBQVEsQ0FBQyxDQUFDO0NBQ3hCOztBQUVNLFNBQVMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUU7QUFDbEUsTUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO0FBQ2hDLFlBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMxRCxRQUFJLENBQUMsVUFBVSxFQUFFO0FBQ2YsYUFBTyxRQUFRLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQ3JDO0dBQ0Y7Q0FDRiIsImZpbGUiOiJoZWxwZXJzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlZ2lzdGVyQmxvY2tIZWxwZXJNaXNzaW5nIGZyb20gJy4vaGVscGVycy9ibG9jay1oZWxwZXItbWlzc2luZyc7XG5pbXBvcnQgcmVnaXN0ZXJFYWNoIGZyb20gJy4vaGVscGVycy9lYWNoJztcbmltcG9ydCByZWdpc3RlckhlbHBlck1pc3NpbmcgZnJvbSAnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJztcbmltcG9ydCByZWdpc3RlcklmIGZyb20gJy4vaGVscGVycy9pZic7XG5pbXBvcnQgcmVnaXN0ZXJMb2cgZnJvbSAnLi9oZWxwZXJzL2xvZyc7XG5pbXBvcnQgcmVnaXN0ZXJMb29rdXAgZnJvbSAnLi9oZWxwZXJzL2xvb2t1cCc7XG5pbXBvcnQgcmVnaXN0ZXJXaXRoIGZyb20gJy4vaGVscGVycy93aXRoJztcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMoaW5zdGFuY2UpIHtcbiAgcmVnaXN0ZXJCbG9ja0hlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlckVhY2goaW5zdGFuY2UpO1xuICByZWdpc3RlckhlbHBlck1pc3NpbmcoaW5zdGFuY2UpO1xuICByZWdpc3RlcklmKGluc3RhbmNlKTtcbiAgcmVnaXN0ZXJMb2coaW5zdGFuY2UpO1xuICByZWdpc3Rlckxvb2t1cChpbnN0YW5jZSk7XG4gIHJlZ2lzdGVyV2l0aChpbnN0YW5jZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6247:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerHelper('blockHelperMissing', function (context, options) {
 | |
|     var inverse = options.inverse,
 | |
|         fn = options.fn;
 | |
| 
 | |
|     if (context === true) {
 | |
|       return fn(this);
 | |
|     } else if (context === false || context == null) {
 | |
|       return inverse(this);
 | |
|     } else if (_utils.isArray(context)) {
 | |
|       if (context.length > 0) {
 | |
|         if (options.ids) {
 | |
|           options.ids = [options.name];
 | |
|         }
 | |
| 
 | |
|         return instance.helpers.each(context, options);
 | |
|       } else {
 | |
|         return inverse(this);
 | |
|       }
 | |
|     } else {
 | |
|       if (options.data && options.ids) {
 | |
|         var data = _utils.createFrame(options.data);
 | |
|         data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name);
 | |
|         options = { data: data };
 | |
|       }
 | |
| 
 | |
|       return fn(context, options);
 | |
|     }
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztxQkFBd0QsVUFBVTs7cUJBRW5ELFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsb0JBQW9CLEVBQUUsVUFBUyxPQUFPLEVBQUUsT0FBTyxFQUFFO0FBQ3ZFLFFBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1FBQzNCLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDOztBQUVsQixRQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7QUFDcEIsYUFBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakIsTUFBTSxJQUFJLE9BQU8sS0FBSyxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtBQUMvQyxhQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN0QixNQUFNLElBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUMzQixVQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO0FBQ3RCLFlBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUNmLGlCQUFPLENBQUMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzlCOztBQUVELGVBQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO09BQ2hELE1BQU07QUFDTCxlQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztPQUN0QjtLQUNGLE1BQU07QUFDTCxVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLElBQUksR0FBRyxtQkFBWSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDckMsWUFBSSxDQUFDLFdBQVcsR0FBRyx5QkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQ2IsQ0FBQztBQUNGLGVBQU8sR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztPQUMxQjs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDN0I7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJibG9jay1oZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFwcGVuZENvbnRleHRQYXRoLCBjcmVhdGVGcmFtZSwgaXNBcnJheSB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBsZXQgaW52ZXJzZSA9IG9wdGlvbnMuaW52ZXJzZSxcbiAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoaXNBcnJheShjb250ZXh0KSkge1xuICAgICAgaWYgKGNvbnRleHQubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgICBvcHRpb25zLmlkcyA9IFtvcHRpb25zLm5hbWVdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLmhlbHBlcnMuZWFjaChjb250ZXh0LCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIGxldCBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLm5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9052:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerHelper('each', function (context, options) {
 | |
|     if (!options) {
 | |
|       throw new _exception2['default']('Must pass iterator to #each');
 | |
|     }
 | |
| 
 | |
|     var fn = options.fn,
 | |
|         inverse = options.inverse,
 | |
|         i = 0,
 | |
|         ret = '',
 | |
|         data = undefined,
 | |
|         contextPath = undefined;
 | |
| 
 | |
|     if (options.data && options.ids) {
 | |
|       contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.';
 | |
|     }
 | |
| 
 | |
|     if (_utils.isFunction(context)) {
 | |
|       context = context.call(this);
 | |
|     }
 | |
| 
 | |
|     if (options.data) {
 | |
|       data = _utils.createFrame(options.data);
 | |
|     }
 | |
| 
 | |
|     function execIteration(field, index, last) {
 | |
|       if (data) {
 | |
|         data.key = field;
 | |
|         data.index = index;
 | |
|         data.first = index === 0;
 | |
|         data.last = !!last;
 | |
| 
 | |
|         if (contextPath) {
 | |
|           data.contextPath = contextPath + field;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       ret = ret + fn(context[field], {
 | |
|         data: data,
 | |
|         blockParams: _utils.blockParams([context[field], field], [contextPath + field, null])
 | |
|       });
 | |
|     }
 | |
| 
 | |
|     if (context && typeof context === 'object') {
 | |
|       if (_utils.isArray(context)) {
 | |
|         for (var j = context.length; i < j; i++) {
 | |
|           if (i in context) {
 | |
|             execIteration(i, i, i === context.length - 1);
 | |
|           }
 | |
|         }
 | |
|       } else if (global.Symbol && context[global.Symbol.iterator]) {
 | |
|         var newContext = [];
 | |
|         var iterator = context[global.Symbol.iterator]();
 | |
|         for (var it = iterator.next(); !it.done; it = iterator.next()) {
 | |
|           newContext.push(it.value);
 | |
|         }
 | |
|         context = newContext;
 | |
|         for (var j = context.length; i < j; i++) {
 | |
|           execIteration(i, i, i === context.length - 1);
 | |
|         }
 | |
|       } else {
 | |
|         (function () {
 | |
|           var priorKey = undefined;
 | |
| 
 | |
|           Object.keys(context).forEach(function (key) {
 | |
|             // We're running the iterations one step out of sync so we can detect
 | |
|             // the last iteration without have to scan the object twice and create
 | |
|             // an itermediate keys array.
 | |
|             if (priorKey !== undefined) {
 | |
|               execIteration(priorKey, i - 1);
 | |
|             }
 | |
|             priorKey = key;
 | |
|             i++;
 | |
|           });
 | |
|           if (priorKey !== undefined) {
 | |
|             execIteration(priorKey, i - 1, true);
 | |
|           }
 | |
|         })();
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (i === 0) {
 | |
|       ret = inverse(this);
 | |
|     }
 | |
| 
 | |
|     return ret;
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvZWFjaC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLENBQUMsT0FBTyxFQUFFO0FBQ1osWUFBTSwyQkFBYyw2QkFBNkIsQ0FBQyxDQUFDO0tBQ3BEOztBQUVELFFBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFO1FBQ2pCLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTztRQUN6QixDQUFDLEdBQUcsQ0FBQztRQUNMLEdBQUcsR0FBRyxFQUFFO1FBQ1IsSUFBSSxZQUFBO1FBQ0osV0FBVyxZQUFBLENBQUM7O0FBRWQsUUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7QUFDL0IsaUJBQVcsR0FDVCx5QkFBa0IsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztLQUNyRTs7QUFFRCxRQUFJLGtCQUFXLE9BQU8sQ0FBQyxFQUFFO0FBQ3ZCLGFBQU8sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCOztBQUVELFFBQUksT0FBTyxDQUFDLElBQUksRUFBRTtBQUNoQixVQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xDOztBQUVELGFBQVMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO0FBQ3pDLFVBQUksSUFBSSxFQUFFO0FBQ1IsWUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUM7QUFDakIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLFlBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzs7QUFFbkIsWUFBSSxXQUFXLEVBQUU7QUFDZixjQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDeEM7T0FDRjs7QUFFRCxTQUFHLEdBQ0QsR0FBRyxHQUNILEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUNYLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUN2QixDQUFDLFdBQVcsR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQzVCO09BQ0YsQ0FBQyxDQUFDO0tBQ047O0FBRUQsUUFBSSxPQUFPLElBQUksT0FBTyxPQUFPLEtBQUssUUFBUSxFQUFFO0FBQzFDLFVBQUksZUFBUSxPQUFPLENBQUMsRUFBRTtBQUNwQixhQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN2QyxjQUFJLENBQUMsSUFBSSxPQUFPLEVBQUU7QUFDaEIseUJBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1dBQy9DO1NBQ0Y7T0FDRixNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUMzRCxZQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7QUFDdEIsWUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUNuRCxhQUFLLElBQUksRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRTtBQUM3RCxvQkFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDM0I7QUFDRCxlQUFPLEdBQUcsVUFBVSxDQUFDO0FBQ3JCLGFBQUssSUFBSSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3ZDLHVCQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMvQztPQUNGLE1BQU07O0FBQ0wsY0FBSSxRQUFRLFlBQUEsQ0FBQzs7QUFFYixnQkFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLEVBQUk7Ozs7QUFJbEMsZ0JBQUksUUFBUSxLQUFLLFNBQVMsRUFBRTtBQUMxQiwyQkFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDaEM7QUFDRCxvQkFBUSxHQUFHLEdBQUcsQ0FBQztBQUNmLGFBQUMsRUFBRSxDQUFDO1dBQ0wsQ0FBQyxDQUFDO0FBQ0gsY0FBSSxRQUFRLEtBQUssU0FBUyxFQUFFO0FBQzFCLHlCQUFhLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7V0FDdEM7O09BQ0Y7S0FDRjs7QUFFRCxRQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7QUFDWCxTQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCOztBQUVELFdBQU8sR0FBRyxDQUFDO0dBQ1osQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoiZWFjaC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwcGVuZENvbnRleHRQYXRoLFxuICBibG9ja1BhcmFtcyxcbiAgY3JlYXRlRnJhbWUsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb25cbn0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tICcuLi9leGNlcHRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignZWFjaCcsIGZ1bmN0aW9uKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICBpbnZlcnNlID0gb3B0aW9ucy5pbnZlcnNlLFxuICAgICAgaSA9IDAsXG4gICAgICByZXQgPSAnJyxcbiAgICAgIGRhdGEsXG4gICAgICBjb250ZXh0UGF0aDtcblxuICAgIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5pZHMpIHtcbiAgICAgIGNvbnRleHRQYXRoID1cbiAgICAgICAgYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSkgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhlY0l0ZXJhdGlvbihmaWVsZCwgaW5kZXgsIGxhc3QpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGRhdGEua2V5ID0gZmllbGQ7XG4gICAgICAgIGRhdGEuaW5kZXggPSBpbmRleDtcbiAgICAgICAgZGF0YS5maXJzdCA9IGluZGV4ID09PSAwO1xuICAgICAgICBkYXRhLmxhc3QgPSAhIWxhc3Q7XG5cbiAgICAgICAgaWYgKGNvbnRleHRQYXRoKSB7XG4gICAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoICsgZmllbGQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0ID1cbiAgICAgICAgcmV0ICtcbiAgICAgICAgZm4oY29udGV4dFtmaWVsZF0sIHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIGJsb2NrUGFyYW1zOiBibG9ja1BhcmFtcyhcbiAgICAgICAgICAgIFtjb250ZXh0W2ZpZWxkXSwgZmllbGRdLFxuICAgICAgICAgICAgW2NvbnRleHRQYXRoICsgZmllbGQsIG51bGxdXG4gICAgICAgICAgKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChpc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIGNvbnN0IG5ld0NvbnRleHQgPSBbXTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKCk7XG4gICAgICAgIGZvciAobGV0IGl0ID0gaXRlcmF0b3IubmV4dCgpOyAhaXQuZG9uZTsgaXQgPSBpdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICBuZXdDb250ZXh0LnB1c2goaXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRleHQgPSBuZXdDb250ZXh0O1xuICAgICAgICBmb3IgKGxldCBqID0gY29udGV4dC5sZW5ndGg7IGkgPCBqOyBpKyspIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKGksIGksIGkgPT09IGNvbnRleHQubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBwcmlvcktleTtcblxuICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyB0aGUgaXRlcmF0aW9ucyBvbmUgc3RlcCBvdXQgb2Ygc3luYyBzbyB3ZSBjYW4gZGV0ZWN0XG4gICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgIC8vIGFuIGl0ZXJtZWRpYXRlIGtleXMgYXJyYXkuXG4gICAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJpb3JLZXkgPSBrZXk7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByaW9yS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgcmV0ID0gaW52ZXJzZSh0aGlzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn1cbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8950:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerHelper('helperMissing', function () /* [args, ]options */{
 | |
|     if (arguments.length === 1) {
 | |
|       // A missing field in a {{foo}} construct.
 | |
|       return undefined;
 | |
|     } else {
 | |
|       // Someone is actually trying to call something, blow up.
 | |
|       throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"');
 | |
|     }
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozt5QkFBc0IsY0FBYzs7OztxQkFFckIsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsaUNBQWdDO0FBQ3ZFLFFBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7O0FBRTFCLGFBQU8sU0FBUyxDQUFDO0tBQ2xCLE1BQU07O0FBRUwsWUFBTSwyQkFDSixtQkFBbUIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUNqRSxDQUFDO0tBQ0g7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJoZWxwZXItbWlzc2luZy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2hlbHBlck1pc3NpbmcnLCBmdW5jdGlvbigvKiBbYXJncywgXW9wdGlvbnMgKi8pIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gQSBtaXNzaW5nIGZpZWxkIGluIGEge3tmb299fSBjb25zdHJ1Y3QuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lb25lIGlzIGFjdHVhbGx5IHRyeWluZyB0byBjYWxsIHNvbWV0aGluZywgYmxvdyB1cC5cbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oXG4gICAgICAgICdNaXNzaW5nIGhlbHBlcjogXCInICsgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXS5uYW1lICsgJ1wiJ1xuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2767:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerHelper('if', function (conditional, options) {
 | |
|     if (arguments.length != 2) {
 | |
|       throw new _exception2['default']('#if requires exactly one argument');
 | |
|     }
 | |
|     if (_utils.isFunction(conditional)) {
 | |
|       conditional = conditional.call(this);
 | |
|     }
 | |
| 
 | |
|     // Default behavior is to render the positive path if the value is truthy and not empty.
 | |
|     // The `includeZero` option may be set to treat the condtional as purely not empty based on the
 | |
|     // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.
 | |
|     if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) {
 | |
|       return options.inverse(this);
 | |
|     } else {
 | |
|       return options.fn(this);
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   instance.registerHelper('unless', function (conditional, options) {
 | |
|     if (arguments.length != 2) {
 | |
|       throw new _exception2['default']('#unless requires exactly one argument');
 | |
|     }
 | |
|     return instance.helpers['if'].call(this, conditional, {
 | |
|       fn: options.inverse,
 | |
|       inverse: options.fn,
 | |
|       hash: options.hash
 | |
|     });
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFBb0MsVUFBVTs7eUJBQ3hCLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFVBQVMsV0FBVyxFQUFFLE9BQU8sRUFBRTtBQUMzRCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztLQUMxRDtBQUNELFFBQUksa0JBQVcsV0FBVyxDQUFDLEVBQUU7QUFDM0IsaUJBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RDOzs7OztBQUtELFFBQUksQUFBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsV0FBVyxJQUFLLGVBQVEsV0FBVyxDQUFDLEVBQUU7QUFDdkUsYUFBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzlCLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekI7R0FDRixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxXQUFXLEVBQUUsT0FBTyxFQUFFO0FBQy9ELFFBQUksU0FBUyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7QUFDekIsWUFBTSwyQkFBYyx1Q0FBdUMsQ0FBQyxDQUFDO0tBQzlEO0FBQ0QsV0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO0FBQ3BELFFBQUUsRUFBRSxPQUFPLENBQUMsT0FBTztBQUNuQixhQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUU7QUFDbkIsVUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO0tBQ25CLENBQUMsQ0FBQztHQUNKLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6ImlmLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi4vZXhjZXB0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2lmJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjaWYgcmVxdWlyZXMgZXhhY3RseSBvbmUgYXJndW1lbnQnKTtcbiAgICB9XG4gICAgaWYgKGlzRnVuY3Rpb24oY29uZGl0aW9uYWwpKSB7XG4gICAgICBjb25kaXRpb25hbCA9IGNvbmRpdGlvbmFsLmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gRGVmYXVsdCBiZWhhdmlvciBpcyB0byByZW5kZXIgdGhlIHBvc2l0aXZlIHBhdGggaWYgdGhlIHZhbHVlIGlzIHRydXRoeSBhbmQgbm90IGVtcHR5LlxuICAgIC8vIFRoZSBgaW5jbHVkZVplcm9gIG9wdGlvbiBtYXkgYmUgc2V0IHRvIHRyZWF0IHRoZSBjb25kdGlvbmFsIGFzIHB1cmVseSBub3QgZW1wdHkgYmFzZWQgb24gdGhlXG4gICAgLy8gYmVoYXZpb3Igb2YgaXNFbXB0eS4gRWZmZWN0aXZlbHkgdGhpcyBkZXRlcm1pbmVzIGlmIDAgaXMgaGFuZGxlZCBieSB0aGUgcG9zaXRpdmUgcGF0aCBvciBuZWdhdGl2ZS5cbiAgICBpZiAoKCFvcHRpb25zLmhhc2guaW5jbHVkZVplcm8gJiYgIWNvbmRpdGlvbmFsKSB8fCBpc0VtcHR5KGNvbmRpdGlvbmFsKSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuaW52ZXJzZSh0aGlzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZm4odGhpcyk7XG4gICAgfVxuICB9KTtcblxuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcigndW5sZXNzJywgZnVuY3Rpb24oY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufVxuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9072:
 | |
| /***/ ((module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerHelper('log', function () /* message, options */{
 | |
|     var args = [undefined],
 | |
|         options = arguments[arguments.length - 1];
 | |
|     for (var i = 0; i < arguments.length - 1; i++) {
 | |
|       args.push(arguments[i]);
 | |
|     }
 | |
| 
 | |
|     var level = 1;
 | |
|     if (options.hash.level != null) {
 | |
|       level = options.hash.level;
 | |
|     } else if (options.data && options.data.level != null) {
 | |
|       level = options.data.level;
 | |
|     }
 | |
|     args[0] = level;
 | |
| 
 | |
|     instance.log.apply(instance, args);
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsa0NBQWlDO0FBQzlELFFBQUksSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQ3BCLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM1QyxTQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDN0MsVUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN6Qjs7QUFFRCxRQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRTtBQUM5QixXQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDNUIsTUFBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO0FBQ3JELFdBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztLQUM1QjtBQUNELFFBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRWhCLFlBQVEsQ0FBQyxHQUFHLE1BQUEsQ0FBWixRQUFRLEVBQVEsSUFBSSxDQUFDLENBQUM7R0FDdkIsQ0FBQyxDQUFDO0NBQ0oiLCJmaWxlIjoibG9nLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvZycsIGZ1bmN0aW9uKC8qIG1lc3NhZ2UsIG9wdGlvbnMgKi8pIHtcbiAgICBsZXQgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgICB9XG5cbiAgICBsZXQgbGV2ZWwgPSAxO1xuICAgIGlmIChvcHRpb25zLmhhc2gubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmhhc2gubGV2ZWw7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhLmxldmVsICE9IG51bGwpIHtcbiAgICAgIGxldmVsID0gb3B0aW9ucy5kYXRhLmxldmVsO1xuICAgIH1cbiAgICBhcmdzWzBdID0gbGV2ZWw7XG5cbiAgICBpbnN0YW5jZS5sb2coLi4uYXJncyk7XG4gIH0pO1xufVxuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8168:
 | |
| /***/ ((module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerHelper('lookup', function (obj, field, options) {
 | |
|     if (!obj) {
 | |
|       // Note for 5.0: Change to "obj == null" in 5.0
 | |
|       return obj;
 | |
|     }
 | |
|     return options.lookupProperty(obj, field);
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxRQUFRLEVBQUU7QUFDaEMsVUFBUSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsVUFBUyxHQUFHLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtBQUM5RCxRQUFJLENBQUMsR0FBRyxFQUFFOztBQUVSLGFBQU8sR0FBRyxDQUFDO0tBQ1o7QUFDRCxXQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO0dBQzNDLENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6Imxvb2t1cC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdsb29rdXAnLCBmdW5jdGlvbihvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn1cbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9150:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| exports.default = function (instance) {
 | |
|   instance.registerHelper('with', function (context, options) {
 | |
|     if (arguments.length != 2) {
 | |
|       throw new _exception2['default']('#with requires exactly one argument');
 | |
|     }
 | |
|     if (_utils.isFunction(context)) {
 | |
|       context = context.call(this);
 | |
|     }
 | |
| 
 | |
|     var fn = options.fn;
 | |
| 
 | |
|     if (!_utils.isEmpty(context)) {
 | |
|       var data = options.data;
 | |
|       if (options.data && options.ids) {
 | |
|         data = _utils.createFrame(options.data);
 | |
|         data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]);
 | |
|       }
 | |
| 
 | |
|       return fn(context, {
 | |
|         data: data,
 | |
|         blockParams: _utils.blockParams([context], [data && data.contextPath])
 | |
|       });
 | |
|     } else {
 | |
|       return options.inverse(this);
 | |
|     }
 | |
|   });
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2hlbHBlcnMvd2l0aC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O3FCQU1PLFVBQVU7O3lCQUNLLGNBQWM7Ozs7cUJBRXJCLFVBQVMsUUFBUSxFQUFFO0FBQ2hDLFVBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVMsT0FBTyxFQUFFLE9BQU8sRUFBRTtBQUN6RCxRQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO0FBQ3pCLFlBQU0sMkJBQWMscUNBQXFDLENBQUMsQ0FBQztLQUM1RDtBQUNELFFBQUksa0JBQVcsT0FBTyxDQUFDLEVBQUU7QUFDdkIsYUFBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7O0FBRUQsUUFBSSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQzs7QUFFcEIsUUFBSSxDQUFDLGVBQVEsT0FBTyxDQUFDLEVBQUU7QUFDckIsVUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUN4QixVQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtBQUMvQixZQUFJLEdBQUcsbUJBQVksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2pDLFlBQUksQ0FBQyxXQUFXLEdBQUcseUJBQ2pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7T0FDSDs7QUFFRCxhQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUU7QUFDakIsWUFBSSxFQUFFLElBQUk7QUFDVixtQkFBVyxFQUFFLG1CQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO09BQ2hFLENBQUMsQ0FBQztLQUNKLE1BQU07QUFDTCxhQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDOUI7R0FDRixDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJ3aXRoLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYXBwZW5kQ29udGV4dFBhdGgsXG4gIGJsb2NrUGFyYW1zLFxuICBjcmVhdGVGcmFtZSxcbiAgaXNFbXB0eSxcbiAgaXNGdW5jdGlvblxufSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgRXhjZXB0aW9uIGZyb20gJy4uL2V4Y2VwdGlvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCd3aXRoJywgZnVuY3Rpb24oY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJyN3aXRoIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChpc0Z1bmN0aW9uKGNvbnRleHQpKSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5jYWxsKHRoaXMpO1xuICAgIH1cblxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG5cbiAgICBpZiAoIWlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgICAgZGF0YS5jb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoKFxuICAgICAgICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCxcbiAgICAgICAgICBvcHRpb25zLmlkc1swXVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwge1xuICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICBibG9ja1BhcmFtczogYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6025:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.createNewLookupObject = createNewLookupObject;
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| /**
 | |
|  * Create a new object with "null"-prototype to avoid truthy results on prototype properties.
 | |
|  * The resulting object can be used with "object[property]" to check if a property exists
 | |
|  * @param {...object} sources a varargs parameter of source objects that will be merged
 | |
|  * @returns {object}
 | |
|  */
 | |
| 
 | |
| function createNewLookupObject() {
 | |
|   for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) {
 | |
|     sources[_key] = arguments[_key];
 | |
|   }
 | |
| 
 | |
|   return _utils.extend.apply(undefined, [Object.create(null)].concat(sources));
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztxQkFBdUIsVUFBVTs7Ozs7Ozs7O0FBUTFCLFNBQVMscUJBQXFCLEdBQWE7b0NBQVQsT0FBTztBQUFQLFdBQU87OztBQUM5QyxTQUFPLGdDQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQUssT0FBTyxFQUFDLENBQUM7Q0FDaEQiLCJmaWxlIjoiY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXh0ZW5kIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOZXdMb29rdXBPYmplY3QoLi4uc291cmNlcykge1xuICByZXR1cm4gZXh0ZW5kKE9iamVjdC5jcmVhdGUobnVsbCksIC4uLnNvdXJjZXMpO1xufVxuIl19
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6066:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.createProtoAccessControl = createProtoAccessControl;
 | |
| exports.resultIsAllowed = resultIsAllowed;
 | |
| exports.resetLoggedProperties = resetLoggedProperties;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
 | |
| 
 | |
| var _createNewLookupObject = __webpack_require__(6025);
 | |
| 
 | |
| var _logger = __webpack_require__(7142);
 | |
| 
 | |
| var logger = _interopRequireWildcard(_logger);
 | |
| 
 | |
| var loggedProperties = Object.create(null);
 | |
| 
 | |
| function createProtoAccessControl(runtimeOptions) {
 | |
|   var defaultMethodWhiteList = Object.create(null);
 | |
|   defaultMethodWhiteList['constructor'] = false;
 | |
|   defaultMethodWhiteList['__defineGetter__'] = false;
 | |
|   defaultMethodWhiteList['__defineSetter__'] = false;
 | |
|   defaultMethodWhiteList['__lookupGetter__'] = false;
 | |
| 
 | |
|   var defaultPropertyWhiteList = Object.create(null);
 | |
|   // eslint-disable-next-line no-proto
 | |
|   defaultPropertyWhiteList['__proto__'] = false;
 | |
| 
 | |
|   return {
 | |
|     properties: {
 | |
|       whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties),
 | |
|       defaultValue: runtimeOptions.allowProtoPropertiesByDefault
 | |
|     },
 | |
|     methods: {
 | |
|       whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods),
 | |
|       defaultValue: runtimeOptions.allowProtoMethodsByDefault
 | |
|     }
 | |
|   };
 | |
| }
 | |
| 
 | |
| function resultIsAllowed(result, protoAccessControl, propertyName) {
 | |
|   if (typeof result === 'function') {
 | |
|     return checkWhiteList(protoAccessControl.methods, propertyName);
 | |
|   } else {
 | |
|     return checkWhiteList(protoAccessControl.properties, propertyName);
 | |
|   }
 | |
| }
 | |
| 
 | |
| function checkWhiteList(protoAccessControlForType, propertyName) {
 | |
|   if (protoAccessControlForType.whitelist[propertyName] !== undefined) {
 | |
|     return protoAccessControlForType.whitelist[propertyName] === true;
 | |
|   }
 | |
|   if (protoAccessControlForType.defaultValue !== undefined) {
 | |
|     return protoAccessControlForType.defaultValue;
 | |
|   }
 | |
|   logUnexpecedPropertyAccessOnce(propertyName);
 | |
|   return false;
 | |
| }
 | |
| 
 | |
| function logUnexpecedPropertyAccessOnce(propertyName) {
 | |
|   if (loggedProperties[propertyName] !== true) {
 | |
|     loggedProperties[propertyName] = true;
 | |
|     logger.log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details');
 | |
|   }
 | |
| }
 | |
| 
 | |
| function resetLoggedProperties() {
 | |
|   Object.keys(loggedProperties).forEach(function (propertyName) {
 | |
|     delete loggedProperties[propertyName];
 | |
|   });
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3FDQUFzQyw0QkFBNEI7O3NCQUMxQyxXQUFXOztJQUF2QixNQUFNOztBQUVsQixJQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7O0FBRXRDLFNBQVMsd0JBQXdCLENBQUMsY0FBYyxFQUFFO0FBQ3ZELE1BQUksc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRCx3QkFBc0IsQ0FBQyxhQUFhLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDOUMsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDbkQsd0JBQXNCLENBQUMsa0JBQWtCLENBQUMsR0FBRyxLQUFLLENBQUM7O0FBRW5ELE1BQUksd0JBQXdCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFbkQsMEJBQXdCLENBQUMsV0FBVyxDQUFDLEdBQUcsS0FBSyxDQUFDOztBQUU5QyxTQUFPO0FBQ0wsY0FBVSxFQUFFO0FBQ1YsZUFBUyxFQUFFLDZDQUNULHdCQUF3QixFQUN4QixjQUFjLENBQUMsc0JBQXNCLENBQ3RDO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsNkJBQTZCO0tBQzNEO0FBQ0QsV0FBTyxFQUFFO0FBQ1AsZUFBUyxFQUFFLDZDQUNULHNCQUFzQixFQUN0QixjQUFjLENBQUMsbUJBQW1CLENBQ25DO0FBQ0Qsa0JBQVksRUFBRSxjQUFjLENBQUMsMEJBQTBCO0tBQ3hEO0dBQ0YsQ0FBQztDQUNIOztBQUVNLFNBQVMsZUFBZSxDQUFDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUU7QUFDeEUsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7QUFDaEMsV0FBTyxjQUFjLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDO0dBQ2pFLE1BQU07QUFDTCxXQUFPLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7R0FDcEU7Q0FDRjs7QUFFRCxTQUFTLGNBQWMsQ0FBQyx5QkFBeUIsRUFBRSxZQUFZLEVBQUU7QUFDL0QsTUFBSSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ25FLFdBQU8seUJBQXlCLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksQ0FBQztHQUNuRTtBQUNELE1BQUkseUJBQXlCLENBQUMsWUFBWSxLQUFLLFNBQVMsRUFBRTtBQUN4RCxXQUFPLHlCQUF5QixDQUFDLFlBQVksQ0FBQztHQUMvQztBQUNELGdDQUE4QixDQUFDLFlBQVksQ0FBQyxDQUFDO0FBQzdDLFNBQU8sS0FBSyxDQUFDO0NBQ2Q7O0FBRUQsU0FBUyw4QkFBOEIsQ0FBQyxZQUFZLEVBQUU7QUFDcEQsTUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxJQUFJLEVBQUU7QUFDM0Msb0JBQWdCLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDO0FBQ3RDLFVBQU0sQ0FBQyxHQUFHLENBQ1IsT0FBTyxFQUNQLGlFQUErRCxZQUFZLG9JQUNILG9IQUMyQyxDQUNwSCxDQUFDO0dBQ0g7Q0FDRjs7QUFFTSxTQUFTLHFCQUFxQixHQUFHO0FBQ3RDLFFBQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxZQUFZLEVBQUk7QUFDcEQsV0FBTyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztHQUN2QyxDQUFDLENBQUM7Q0FDSiIsImZpbGUiOiJwcm90by1hY2Nlc3MuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVOZXdMb29rdXBPYmplY3QgfSBmcm9tICcuL2NyZWF0ZS1uZXctbG9va3VwLW9iamVjdCc7XG5pbXBvcnQgKiBhcyBsb2dnZXIgZnJvbSAnLi4vbG9nZ2VyJztcblxuY29uc3QgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgbGV0IGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgbGV0IGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IGNyZWF0ZU5ld0xvb2t1cE9iamVjdChcbiAgICAgICAgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LFxuICAgICAgICBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzXG4gICAgICApLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdFxuICAgIH0sXG4gICAgbWV0aG9kczoge1xuICAgICAgd2hpdGVsaXN0OiBjcmVhdGVOZXdMb29rdXBPYmplY3QoXG4gICAgICAgIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsXG4gICAgICAgIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHNcbiAgICAgICksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKFxuICAgICAgJ2Vycm9yJyxcbiAgICAgIGBIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJHtwcm9wZXJ0eU5hbWV9XCIgYmVjYXVzZSBpdCBpcyBub3QgYW4gXCJvd24gcHJvcGVydHlcIiBvZiBpdHMgcGFyZW50LlxcbmAgK1xuICAgICAgICBgWW91IGNhbiBhZGQgYSBydW50aW1lIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBjaGVjayBvciB0aGlzIHdhcm5pbmc6XFxuYCArXG4gICAgICAgIGBTZWUgaHR0cHM6Ly9oYW5kbGViYXJzanMuY29tL2FwaS1yZWZlcmVuY2UvcnVudGltZS1vcHRpb25zLmh0bWwjb3B0aW9ucy10by1jb250cm9sLXByb3RvdHlwZS1hY2Nlc3MgZm9yIGRldGFpbHNgXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3268:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.wrapHelper = wrapHelper;
 | |
| 
 | |
| function wrapHelper(helper, transformOptionsFn) {
 | |
|   if (typeof helper !== 'function') {
 | |
|     // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639
 | |
|     // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.
 | |
|     return helper;
 | |
|   }
 | |
|   var wrapper = function wrapper() /* dynamic arguments */{
 | |
|     var options = arguments[arguments.length - 1];
 | |
|     arguments[arguments.length - 1] = transformOptionsFn(options);
 | |
|     return helper.apply(this, arguments);
 | |
|   };
 | |
|   return wrapper;
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2ludGVybmFsL3dyYXBIZWxwZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTyxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLEVBQUU7QUFDckQsTUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7OztBQUdoQyxXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsTUFBSSxPQUFPLEdBQUcsU0FBVixPQUFPLDBCQUFxQztBQUM5QyxRQUFNLE9BQU8sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxhQUFTLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5RCxXQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0dBQ3RDLENBQUM7QUFDRixTQUFPLE9BQU8sQ0FBQztDQUNoQiIsImZpbGUiOiJ3cmFwSGVscGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIHdyYXBIZWxwZXIoaGVscGVyLCB0cmFuc2Zvcm1PcHRpb25zRm4pIHtcbiAgaWYgKHR5cGVvZiBoZWxwZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBidXQgYXBwYXJlbnRseSBpdCBkb2VzIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93eWNhdHMvaGFuZGxlYmFycy5qcy9pc3N1ZXMvMTYzOVxuICAgIC8vIFdlIHRyeSB0byBtYWtlIHRoZSB3cmFwcGVyIGxlYXN0LWludmFzaXZlIGJ5IG5vdCB3cmFwcGluZyBpdCwgaWYgdGhlIGhlbHBlciBpcyBub3QgYSBmdW5jdGlvbi5cbiAgICByZXR1cm4gaGVscGVyO1xuICB9XG4gIGxldCB3cmFwcGVyID0gZnVuY3Rpb24oLyogZHluYW1pYyBhcmd1bWVudHMgKi8pIHtcbiAgICBjb25zdCBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdID0gdHJhbnNmb3JtT3B0aW9uc0ZuKG9wdGlvbnMpO1xuICAgIHJldHVybiBoZWxwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbiAgcmV0dXJuIHdyYXBwZXI7XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7142:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var logger = {
 | |
|   methodMap: ['debug', 'info', 'warn', 'error'],
 | |
|   level: 'info',
 | |
| 
 | |
|   // Maps a given level value to the `methodMap` indexes above.
 | |
|   lookupLevel: function lookupLevel(level) {
 | |
|     if (typeof level === 'string') {
 | |
|       var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase());
 | |
|       if (levelMap >= 0) {
 | |
|         level = levelMap;
 | |
|       } else {
 | |
|         level = parseInt(level, 10);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return level;
 | |
|   },
 | |
| 
 | |
|   // Can be overridden in the host environment
 | |
|   log: function log(level) {
 | |
|     level = logger.lookupLevel(level);
 | |
| 
 | |
|     if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) {
 | |
|       var method = logger.methodMap[level];
 | |
|       // eslint-disable-next-line no-console
 | |
|       if (!console[method]) {
 | |
|         method = 'log';
 | |
|       }
 | |
| 
 | |
|       for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
 | |
|         message[_key - 1] = arguments[_key];
 | |
|       }
 | |
| 
 | |
|       console[method].apply(console, message); // eslint-disable-line no-console
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| exports.default = logger;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL2xvZ2dlci5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O3FCQUF3QixTQUFTOztBQUVqQyxJQUFJLE1BQU0sR0FBRztBQUNYLFdBQVMsRUFBRSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQztBQUM3QyxPQUFLLEVBQUUsTUFBTTs7O0FBR2IsYUFBVyxFQUFFLHFCQUFTLEtBQUssRUFBRTtBQUMzQixRQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtBQUM3QixVQUFJLFFBQVEsR0FBRyxlQUFRLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDOUQsVUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFO0FBQ2pCLGFBQUssR0FBRyxRQUFRLENBQUM7T0FDbEIsTUFBTTtBQUNMLGFBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO09BQzdCO0tBQ0Y7O0FBRUQsV0FBTyxLQUFLLENBQUM7R0FDZDs7O0FBR0QsS0FBRyxFQUFFLGFBQVMsS0FBSyxFQUFjO0FBQy9CLFNBQUssR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOztBQUVsQyxRQUNFLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFDOUIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxFQUN6QztBQUNBLFVBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7O0FBRXJDLFVBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDcEIsY0FBTSxHQUFHLEtBQUssQ0FBQztPQUNoQjs7d0NBWG1CLE9BQU87QUFBUCxlQUFPOzs7QUFZM0IsYUFBTyxDQUFDLE1BQU0sT0FBQyxDQUFmLE9BQU8sRUFBWSxPQUFPLENBQUMsQ0FBQztLQUM3QjtHQUNGO0NBQ0YsQ0FBQzs7cUJBRWEsTUFBTSIsImZpbGUiOiJsb2dnZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmRleE9mIH0gZnJvbSAnLi91dGlscyc7XG5cbmxldCBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbihsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbGV2ZWxNYXAgPSBpbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbihsZXZlbCwgLi4ubWVzc2FnZSkge1xuICAgIGxldmVsID0gbG9nZ2VyLmxvb2t1cExldmVsKGxldmVsKTtcblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgbG9nZ2VyLmxvb2t1cExldmVsKGxvZ2dlci5sZXZlbCkgPD0gbGV2ZWxcbiAgICApIHtcbiAgICAgIGxldCBtZXRob2QgPSBsb2dnZXIubWV0aG9kTWFwW2xldmVsXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBpZiAoIWNvbnNvbGVbbWV0aG9kXSkge1xuICAgICAgICBtZXRob2QgPSAnbG9nJztcbiAgICAgIH1cbiAgICAgIGNvbnNvbGVbbWV0aG9kXSguLi5tZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsb2dnZXI7XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1983:
 | |
| /***/ ((module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| 
 | |
| exports.default = function (Handlebars) {
 | |
|   /* istanbul ignore next */
 | |
|   var root = typeof global !== 'undefined' ? global : window,
 | |
|       $Handlebars = root.Handlebars;
 | |
|   /* istanbul ignore next */
 | |
|   Handlebars.noConflict = function () {
 | |
|     if (root.Handlebars === Handlebars) {
 | |
|       root.Handlebars = $Handlebars;
 | |
|     }
 | |
|     return Handlebars;
 | |
|   };
 | |
| };
 | |
| 
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7cUJBQWUsVUFBUyxVQUFVLEVBQUU7O0FBRWxDLE1BQUksSUFBSSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsR0FBRyxNQUFNLEdBQUcsTUFBTTtNQUN4RCxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzs7QUFFaEMsWUFBVSxDQUFDLFVBQVUsR0FBRyxZQUFXO0FBQ2pDLFFBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQUU7QUFDbEMsVUFBSSxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUM7S0FDL0I7QUFDRCxXQUFPLFVBQVUsQ0FBQztHQUNuQixDQUFDO0NBQ0giLCJmaWxlIjoibm8tY29uZmxpY3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihIYW5kbGViYXJzKSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGxldCByb290ID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB3aW5kb3csXG4gICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmIChyb290LkhhbmRsZWJhcnMgPT09IEhhbmRsZWJhcnMpIHtcbiAgICAgIHJvb3QuSGFuZGxlYmFycyA9ICRIYW5kbGViYXJzO1xuICAgIH1cbiAgICByZXR1cm4gSGFuZGxlYmFycztcbiAgfTtcbn1cbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7663:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.checkRevision = checkRevision;
 | |
| exports.template = template;
 | |
| exports.wrapProgram = wrapProgram;
 | |
| exports.resolvePartial = resolvePartial;
 | |
| exports.invokePartial = invokePartial;
 | |
| exports.noop = noop;
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 | |
| 
 | |
| // istanbul ignore next
 | |
| 
 | |
| function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } }
 | |
| 
 | |
| var _utils = __webpack_require__(1437);
 | |
| 
 | |
| var Utils = _interopRequireWildcard(_utils);
 | |
| 
 | |
| var _exception = __webpack_require__(2879);
 | |
| 
 | |
| var _exception2 = _interopRequireDefault(_exception);
 | |
| 
 | |
| var _base = __webpack_require__(4211);
 | |
| 
 | |
| var _helpers = __webpack_require__(3066);
 | |
| 
 | |
| var _internalWrapHelper = __webpack_require__(3268);
 | |
| 
 | |
| var _internalProtoAccess = __webpack_require__(6066);
 | |
| 
 | |
| function checkRevision(compilerInfo) {
 | |
|   var compilerRevision = compilerInfo && compilerInfo[0] || 1,
 | |
|       currentRevision = _base.COMPILER_REVISION;
 | |
| 
 | |
|   if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) {
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) {
 | |
|     var runtimeVersions = _base.REVISION_CHANGES[currentRevision],
 | |
|         compilerVersions = _base.REVISION_CHANGES[compilerRevision];
 | |
|     throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').');
 | |
|   } else {
 | |
|     // Use the embedded version info since the runtime doesn't know about this revision yet
 | |
|     throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').');
 | |
|   }
 | |
| }
 | |
| 
 | |
| function template(templateSpec, env) {
 | |
|   /* istanbul ignore next */
 | |
|   if (!env) {
 | |
|     throw new _exception2['default']('No environment passed to template');
 | |
|   }
 | |
|   if (!templateSpec || !templateSpec.main) {
 | |
|     throw new _exception2['default']('Unknown template object: ' + typeof templateSpec);
 | |
|   }
 | |
| 
 | |
|   templateSpec.main.decorator = templateSpec.main_d;
 | |
| 
 | |
|   // Note: Using env.VM references rather than local var references throughout this section to allow
 | |
|   // for external users to override these as pseudo-supported APIs.
 | |
|   env.VM.checkRevision(templateSpec.compiler);
 | |
| 
 | |
|   // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)
 | |
|   var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7;
 | |
| 
 | |
|   function invokePartialWrapper(partial, context, options) {
 | |
|     if (options.hash) {
 | |
|       context = Utils.extend({}, context, options.hash);
 | |
|       if (options.ids) {
 | |
|         options.ids[0] = true;
 | |
|       }
 | |
|     }
 | |
|     partial = env.VM.resolvePartial.call(this, partial, context, options);
 | |
| 
 | |
|     var extendedOptions = Utils.extend({}, options, {
 | |
|       hooks: this.hooks,
 | |
|       protoAccessControl: this.protoAccessControl
 | |
|     });
 | |
| 
 | |
|     var result = env.VM.invokePartial.call(this, partial, context, extendedOptions);
 | |
| 
 | |
|     if (result == null && env.compile) {
 | |
|       options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env);
 | |
|       result = options.partials[options.name](context, extendedOptions);
 | |
|     }
 | |
|     if (result != null) {
 | |
|       if (options.indent) {
 | |
|         var lines = result.split('\n');
 | |
|         for (var i = 0, l = lines.length; i < l; i++) {
 | |
|           if (!lines[i] && i + 1 === l) {
 | |
|             break;
 | |
|           }
 | |
| 
 | |
|           lines[i] = options.indent + lines[i];
 | |
|         }
 | |
|         result = lines.join('\n');
 | |
|       }
 | |
|       return result;
 | |
|     } else {
 | |
|       throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode');
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   // Just add water
 | |
|   var container = {
 | |
|     strict: function strict(obj, name, loc) {
 | |
|       if (!obj || !(name in obj)) {
 | |
|         throw new _exception2['default']('"' + name + '" not defined in ' + obj, {
 | |
|           loc: loc
 | |
|         });
 | |
|       }
 | |
|       return container.lookupProperty(obj, name);
 | |
|     },
 | |
|     lookupProperty: function lookupProperty(parent, propertyName) {
 | |
|       var result = parent[propertyName];
 | |
|       if (result == null) {
 | |
|         return result;
 | |
|       }
 | |
|       if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {
 | |
|         return result;
 | |
|       }
 | |
| 
 | |
|       if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) {
 | |
|         return result;
 | |
|       }
 | |
|       return undefined;
 | |
|     },
 | |
|     lookup: function lookup(depths, name) {
 | |
|       var len = depths.length;
 | |
|       for (var i = 0; i < len; i++) {
 | |
|         var result = depths[i] && container.lookupProperty(depths[i], name);
 | |
|         if (result != null) {
 | |
|           return depths[i][name];
 | |
|         }
 | |
|       }
 | |
|     },
 | |
|     lambda: function lambda(current, context) {
 | |
|       return typeof current === 'function' ? current.call(context) : current;
 | |
|     },
 | |
| 
 | |
|     escapeExpression: Utils.escapeExpression,
 | |
|     invokePartial: invokePartialWrapper,
 | |
| 
 | |
|     fn: function fn(i) {
 | |
|       var ret = templateSpec[i];
 | |
|       ret.decorator = templateSpec[i + '_d'];
 | |
|       return ret;
 | |
|     },
 | |
| 
 | |
|     programs: [],
 | |
|     program: function program(i, data, declaredBlockParams, blockParams, depths) {
 | |
|       var programWrapper = this.programs[i],
 | |
|           fn = this.fn(i);
 | |
|       if (data || depths || blockParams || declaredBlockParams) {
 | |
|         programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths);
 | |
|       } else if (!programWrapper) {
 | |
|         programWrapper = this.programs[i] = wrapProgram(this, i, fn);
 | |
|       }
 | |
|       return programWrapper;
 | |
|     },
 | |
| 
 | |
|     data: function data(value, depth) {
 | |
|       while (value && depth--) {
 | |
|         value = value._parent;
 | |
|       }
 | |
|       return value;
 | |
|     },
 | |
|     mergeIfNeeded: function mergeIfNeeded(param, common) {
 | |
|       var obj = param || common;
 | |
| 
 | |
|       if (param && common && param !== common) {
 | |
|         obj = Utils.extend({}, common, param);
 | |
|       }
 | |
| 
 | |
|       return obj;
 | |
|     },
 | |
|     // An empty object to use as replacement for null-contexts
 | |
|     nullContext: Object.seal({}),
 | |
| 
 | |
|     noop: env.VM.noop,
 | |
|     compilerInfo: templateSpec.compiler
 | |
|   };
 | |
| 
 | |
|   function ret(context) {
 | |
|     var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
 | |
| 
 | |
|     var data = options.data;
 | |
| 
 | |
|     ret._setup(options);
 | |
|     if (!options.partial && templateSpec.useData) {
 | |
|       data = initData(context, data);
 | |
|     }
 | |
|     var depths = undefined,
 | |
|         blockParams = templateSpec.useBlockParams ? [] : undefined;
 | |
|     if (templateSpec.useDepths) {
 | |
|       if (options.depths) {
 | |
|         depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths;
 | |
|       } else {
 | |
|         depths = [context];
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     function main(context /*, options*/) {
 | |
|       return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths);
 | |
|     }
 | |
| 
 | |
|     main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams);
 | |
|     return main(context, options);
 | |
|   }
 | |
| 
 | |
|   ret.isTop = true;
 | |
| 
 | |
|   ret._setup = function (options) {
 | |
|     if (!options.partial) {
 | |
|       var mergedHelpers = Utils.extend({}, env.helpers, options.helpers);
 | |
|       wrapHelpersToPassLookupProperty(mergedHelpers, container);
 | |
|       container.helpers = mergedHelpers;
 | |
| 
 | |
|       if (templateSpec.usePartial) {
 | |
|         // Use mergeIfNeeded here to prevent compiling global partials multiple times
 | |
|         container.partials = container.mergeIfNeeded(options.partials, env.partials);
 | |
|       }
 | |
|       if (templateSpec.usePartial || templateSpec.useDecorators) {
 | |
|         container.decorators = Utils.extend({}, env.decorators, options.decorators);
 | |
|       }
 | |
| 
 | |
|       container.hooks = {};
 | |
|       container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options);
 | |
| 
 | |
|       var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7;
 | |
|       _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);
 | |
|       _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);
 | |
|     } else {
 | |
|       container.protoAccessControl = options.protoAccessControl; // internal option
 | |
|       container.helpers = options.helpers;
 | |
|       container.partials = options.partials;
 | |
|       container.decorators = options.decorators;
 | |
|       container.hooks = options.hooks;
 | |
|     }
 | |
|   };
 | |
| 
 | |
|   ret._child = function (i, data, blockParams, depths) {
 | |
|     if (templateSpec.useBlockParams && !blockParams) {
 | |
|       throw new _exception2['default']('must pass block params');
 | |
|     }
 | |
|     if (templateSpec.useDepths && !depths) {
 | |
|       throw new _exception2['default']('must pass parent depths');
 | |
|     }
 | |
| 
 | |
|     return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths);
 | |
|   };
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) {
 | |
|   function prog(context) {
 | |
|     var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
 | |
| 
 | |
|     var currentDepths = depths;
 | |
|     if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) {
 | |
|       currentDepths = [context].concat(depths);
 | |
|     }
 | |
| 
 | |
|     return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths);
 | |
|   }
 | |
| 
 | |
|   prog = executeDecorators(fn, prog, container, depths, data, blockParams);
 | |
| 
 | |
|   prog.program = i;
 | |
|   prog.depth = depths ? depths.length : 0;
 | |
|   prog.blockParams = declaredBlockParams || 0;
 | |
|   return prog;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * This is currently part of the official API, therefore implementation details should not be changed.
 | |
|  */
 | |
| 
 | |
| function resolvePartial(partial, context, options) {
 | |
|   if (!partial) {
 | |
|     if (options.name === '@partial-block') {
 | |
|       partial = options.data['partial-block'];
 | |
|     } else {
 | |
|       partial = options.partials[options.name];
 | |
|     }
 | |
|   } else if (!partial.call && !options.name) {
 | |
|     // This is a dynamic partial that returned a string
 | |
|     options.name = partial;
 | |
|     partial = options.partials[partial];
 | |
|   }
 | |
|   return partial;
 | |
| }
 | |
| 
 | |
| function invokePartial(partial, context, options) {
 | |
|   // Use the current closure context to save the partial-block if this partial
 | |
|   var currentPartialBlock = options.data && options.data['partial-block'];
 | |
|   options.partial = true;
 | |
|   if (options.ids) {
 | |
|     options.data.contextPath = options.ids[0] || options.data.contextPath;
 | |
|   }
 | |
| 
 | |
|   var partialBlock = undefined;
 | |
|   if (options.fn && options.fn !== noop) {
 | |
|     (function () {
 | |
|       options.data = _base.createFrame(options.data);
 | |
|       // Wrapper function to get access to currentPartialBlock from the closure
 | |
|       var fn = options.fn;
 | |
|       partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) {
 | |
|         var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
 | |
| 
 | |
|         // Restore the partial-block from the closure for the execution of the block
 | |
|         // i.e. the part inside the block of the partial call.
 | |
|         options.data = _base.createFrame(options.data);
 | |
|         options.data['partial-block'] = currentPartialBlock;
 | |
|         return fn(context, options);
 | |
|       };
 | |
|       if (fn.partials) {
 | |
|         options.partials = Utils.extend({}, options.partials, fn.partials);
 | |
|       }
 | |
|     })();
 | |
|   }
 | |
| 
 | |
|   if (partial === undefined && partialBlock) {
 | |
|     partial = partialBlock;
 | |
|   }
 | |
| 
 | |
|   if (partial === undefined) {
 | |
|     throw new _exception2['default']('The partial ' + options.name + ' could not be found');
 | |
|   } else if (partial instanceof Function) {
 | |
|     return partial(context, options);
 | |
|   }
 | |
| }
 | |
| 
 | |
| function noop() {
 | |
|   return '';
 | |
| }
 | |
| 
 | |
| function initData(context, data) {
 | |
|   if (!data || !('root' in data)) {
 | |
|     data = data ? _base.createFrame(data) : {};
 | |
|     data.root = context;
 | |
|   }
 | |
|   return data;
 | |
| }
 | |
| 
 | |
| function executeDecorators(fn, prog, container, depths, data, blockParams) {
 | |
|   if (fn.decorator) {
 | |
|     var props = {};
 | |
|     prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths);
 | |
|     Utils.extend(prog, props);
 | |
|   }
 | |
|   return prog;
 | |
| }
 | |
| 
 | |
| function wrapHelpersToPassLookupProperty(mergedHelpers, container) {
 | |
|   Object.keys(mergedHelpers).forEach(function (helperName) {
 | |
|     var helper = mergedHelpers[helperName];
 | |
|     mergedHelpers[helperName] = passLookupPropertyOption(helper, container);
 | |
|   });
 | |
| }
 | |
| 
 | |
| function passLookupPropertyOption(helper, container) {
 | |
|   var lookupProperty = container.lookupProperty;
 | |
|   return _internalWrapHelper.wrapHelper(helper, function (options) {
 | |
|     return Utils.extend({ lookupProperty: lookupProperty }, options);
 | |
|   });
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3J1bnRpbWUuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBQXVCLFNBQVM7O0lBQXBCLEtBQUs7O3lCQUNLLGFBQWE7Ozs7b0JBTTVCLFFBQVE7O3VCQUNtQixXQUFXOztrQ0FDbEIsdUJBQXVCOzttQ0FJM0MseUJBQXlCOztBQUV6QixTQUFTLGFBQWEsQ0FBQyxZQUFZLEVBQUU7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxBQUFDLFlBQVksSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUssQ0FBQztNQUM3RCxlQUFlLDBCQUFvQixDQUFDOztBQUV0QyxNQUNFLGdCQUFnQiwyQ0FBcUMsSUFDckQsZ0JBQWdCLDJCQUFxQixFQUNyQztBQUNBLFdBQU87R0FDUjs7QUFFRCxNQUFJLGdCQUFnQiwwQ0FBb0MsRUFBRTtBQUN4RCxRQUFNLGVBQWUsR0FBRyx1QkFBaUIsZUFBZSxDQUFDO1FBQ3ZELGdCQUFnQixHQUFHLHVCQUFpQixnQkFBZ0IsQ0FBQyxDQUFDO0FBQ3hELFVBQU0sMkJBQ0oseUZBQXlGLEdBQ3ZGLHFEQUFxRCxHQUNyRCxlQUFlLEdBQ2YsbURBQW1ELEdBQ25ELGdCQUFnQixHQUNoQixJQUFJLENBQ1AsQ0FBQztHQUNILE1BQU07O0FBRUwsVUFBTSwyQkFDSix3RkFBd0YsR0FDdEYsaURBQWlELEdBQ2pELFlBQVksQ0FBQyxDQUFDLENBQUMsR0FDZixJQUFJLENBQ1AsQ0FBQztHQUNIO0NBQ0Y7O0FBRU0sU0FBUyxRQUFRLENBQUMsWUFBWSxFQUFFLEdBQUcsRUFBRTs7QUFFMUMsTUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNSLFVBQU0sMkJBQWMsbUNBQW1DLENBQUMsQ0FBQztHQUMxRDtBQUNELE1BQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFO0FBQ3ZDLFVBQU0sMkJBQWMsMkJBQTJCLEdBQUcsT0FBTyxZQUFZLENBQUMsQ0FBQztH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QUFDbkMsV0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsY0FBYyxFQUFkLGNBQWMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0dBQ2xELENBQUMsQ0FBQztDQUNKIiwiZmlsZSI6InJ1bnRpbWUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBFeGNlcHRpb24gZnJvbSAnLi9leGNlcHRpb24nO1xuaW1wb3J0IHtcbiAgQ09NUElMRVJfUkVWSVNJT04sXG4gIGNyZWF0ZUZyYW1lLFxuICBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04sXG4gIFJFVklTSU9OX0NIQU5HRVNcbn0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB7IG1vdmVIZWxwZXJUb0hvb2tzIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IHdyYXBIZWxwZXIgfSBmcm9tICcuL2ludGVybmFsL3dyYXBIZWxwZXInO1xuaW1wb3J0IHtcbiAgY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sLFxuICByZXN1bHRJc0FsbG93ZWRcbn0gZnJvbSAnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgY29uc3QgY29tcGlsZXJSZXZpc2lvbiA9IChjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdKSB8fCAxLFxuICAgIGN1cnJlbnRSZXZpc2lvbiA9IENPTVBJTEVSX1JFVklTSU9OO1xuXG4gIGlmIChcbiAgICBjb21waWxlclJldmlzaW9uID49IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiAmJlxuICAgIGNvbXBpbGVyUmV2aXNpb24gPD0gQ09NUElMRVJfUkVWSVNJT05cbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGNvbXBpbGVyUmV2aXNpb24gPCBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04pIHtcbiAgICBjb25zdCBydW50aW1lVmVyc2lvbnMgPSBSRVZJU0lPTl9DSEFOR0VTW2N1cnJlbnRSZXZpc2lvbl0sXG4gICAgICBjb21waWxlclZlcnNpb25zID0gUkVWSVNJT05fQ0hBTkdFU1tjb21waWxlclJldmlzaW9uXTtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgK1xuICAgICAgICAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIHJ1bnRpbWVWZXJzaW9ucyArXG4gICAgICAgICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArXG4gICAgICAgIGNvbXBpbGVyVmVyc2lvbnMgK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGEgbmV3ZXIgdmVyc2lvbiBvZiBIYW5kbGViYXJzIHRoYW4gdGhlIGN1cnJlbnQgcnVudGltZS4gJyArXG4gICAgICAgICdQbGVhc2UgdXBkYXRlIHlvdXIgcnVudGltZSB0byBhIG5ld2VyIHZlcnNpb24gKCcgK1xuICAgICAgICBjb21waWxlckluZm9bMV0gK1xuICAgICAgICAnKS4nXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGUodGVtcGxhdGVTcGVjLCBlbnYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgaWYgKCFlbnYpIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdObyBlbnZpcm9ubWVudCBwYXNzZWQgdG8gdGVtcGxhdGUnKTtcbiAgfVxuICBpZiAoIXRlbXBsYXRlU3BlYyB8fCAhdGVtcGxhdGVTcGVjLm1haW4pIHtcbiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgY29uc3QgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3ID1cbiAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXIgJiYgdGVtcGxhdGVTcGVjLmNvbXBpbGVyWzBdID09PSA3O1xuXG4gIGZ1bmN0aW9uIGludm9rZVBhcnRpYWxXcmFwcGVyKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgICBjb250ZXh0ID0gVXRpbHMuZXh0ZW5kKHt9LCBjb250ZXh0LCBvcHRpb25zLmhhc2gpO1xuICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgIG9wdGlvbnMuaWRzWzBdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcGFydGlhbCA9IGVudi5WTS5yZXNvbHZlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGV4dGVuZGVkT3B0aW9ucyA9IFV0aWxzLmV4dGVuZCh7fSwgb3B0aW9ucywge1xuICAgICAgaG9va3M6IHRoaXMuaG9va3MsXG4gICAgICBwcm90b0FjY2Vzc0NvbnRyb2w6IHRoaXMucHJvdG9BY2Nlc3NDb250cm9sXG4gICAgfSk7XG5cbiAgICBsZXQgcmVzdWx0ID0gZW52LlZNLmludm9rZVBhcnRpYWwuY2FsbChcbiAgICAgIHRoaXMsXG4gICAgICBwYXJ0aWFsLFxuICAgICAgY29udGV4dCxcbiAgICAgIGV4dGVuZGVkT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKFxuICAgICAgICBwYXJ0aWFsLFxuICAgICAgICB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJPcHRpb25zLFxuICAgICAgICBlbnZcbiAgICAgICk7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgbGV0IGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKFxuICAgICAgICAnVGhlIHBhcnRpYWwgJyArXG4gICAgICAgICAgb3B0aW9ucy5uYW1lICtcbiAgICAgICAgICAnIGNvdWxkIG5vdCBiZSBjb21waWxlZCB3aGVuIHJ1bm5pbmcgaW4gcnVudGltZS1vbmx5IG1vZGUnXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIGxldCBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbihvYmosIG5hbWUsIGxvYykge1xuICAgICAgaWYgKCFvYmogfHwgIShuYW1lIGluIG9iaikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignXCInICsgbmFtZSArICdcIiBub3QgZGVmaW5lZCBpbiAnICsgb2JqLCB7XG4gICAgICAgICAgbG9jOiBsb2NcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KG9iaiwgbmFtZSk7XG4gICAgfSxcbiAgICBsb29rdXBQcm9wZXJ0eTogZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgIGxldCByZXN1bHQgPSBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3VsdElzQWxsb3dlZChyZXN1bHQsIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSxcbiAgICBsb29rdXA6IGZ1bmN0aW9uKGRlcHRocywgbmFtZSkge1xuICAgICAgY29uc3QgbGVuID0gZGVwdGhzLmxlbmd0aDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGRlcHRoc1tpXSAmJiBjb250YWluZXIubG9va3VwUHJvcGVydHkoZGVwdGhzW2ldLCBuYW1lKTtcbiAgICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIGRlcHRoc1tpXVtuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgbGFtYmRhOiBmdW5jdGlvbihjdXJyZW50LCBjb250ZXh0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIGN1cnJlbnQgPT09ICdmdW5jdGlvbicgPyBjdXJyZW50LmNhbGwoY29udGV4dCkgOiBjdXJyZW50O1xuICAgIH0sXG5cbiAgICBlc2NhcGVFeHByZXNzaW9uOiBVdGlscy5lc2NhcGVFeHByZXNzaW9uLFxuICAgIGludm9rZVBhcnRpYWw6IGludm9rZVBhcnRpYWxXcmFwcGVyLFxuXG4gICAgZm46IGZ1bmN0aW9uKGkpIHtcbiAgICAgIGxldCByZXQgPSB0ZW1wbGF0ZVNwZWNbaV07XG4gICAgICByZXQuZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjW2kgKyAnX2QnXTtcbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIHByb2dyYW1zOiBbXSxcbiAgICBwcm9ncmFtOiBmdW5jdGlvbihpLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgICBsZXQgcHJvZ3JhbVdyYXBwZXIgPSB0aGlzLnByb2dyYW1zW2ldLFxuICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgaSxcbiAgICAgICAgICBmbixcbiAgICAgICAgICBkYXRhLFxuICAgICAgICAgIGRlY2xhcmVkQmxvY2tQYXJhbXMsXG4gICAgICAgICAgYmxvY2tQYXJhbXMsXG4gICAgICAgICAgZGVwdGhzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9ncmFtV3JhcHBlcikge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHRoaXMucHJvZ3JhbXNbaV0gPSB3cmFwUHJvZ3JhbSh0aGlzLCBpLCBmbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcHJvZ3JhbVdyYXBwZXI7XG4gICAgfSxcblxuICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlLCBkZXB0aCkge1xuICAgICAgd2hpbGUgKHZhbHVlICYmIGRlcHRoLS0pIHtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5fcGFyZW50O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG4gICAgbWVyZ2VJZk5lZWRlZDogZnVuY3Rpb24ocGFyYW0sIGNvbW1vbikge1xuICAgICAgbGV0IG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGxldCBkYXRhID0gb3B0aW9ucy5kYXRhO1xuXG4gICAgcmV0Ll9zZXR1cChvcHRpb25zKTtcbiAgICBpZiAoIW9wdGlvbnMucGFydGlhbCAmJiB0ZW1wbGF0ZVNwZWMudXNlRGF0YSkge1xuICAgICAgZGF0YSA9IGluaXREYXRhKGNvbnRleHQsIGRhdGEpO1xuICAgIH1cbiAgICBsZXQgZGVwdGhzLFxuICAgICAgYmxvY2tQYXJhbXMgPSB0ZW1wbGF0ZVNwZWMudXNlQmxvY2tQYXJhbXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZURlcHRocykge1xuICAgICAgaWYgKG9wdGlvbnMuZGVwdGhzKSB7XG4gICAgICAgIGRlcHRocyA9XG4gICAgICAgICAgY29udGV4dCAhPSBvcHRpb25zLmRlcHRoc1swXVxuICAgICAgICAgICAgPyBbY29udGV4dF0uY29uY2F0KG9wdGlvbnMuZGVwdGhzKVxuICAgICAgICAgICAgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgJycgK1xuICAgICAgICB0ZW1wbGF0ZVNwZWMubWFpbihcbiAgICAgICAgICBjb250YWluZXIsXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb250YWluZXIuaGVscGVycyxcbiAgICAgICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBibG9ja1BhcmFtcyxcbiAgICAgICAgICBkZXB0aHNcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnMoXG4gICAgICB0ZW1wbGF0ZVNwZWMubWFpbixcbiAgICAgIG1haW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBvcHRpb25zLmRlcHRocyB8fCBbXSxcbiAgICAgIGRhdGEsXG4gICAgICBibG9ja1BhcmFtc1xuICAgICk7XG4gICAgcmV0dXJuIG1haW4oY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cblxuICByZXQuaXNUb3AgPSB0cnVlO1xuXG4gIHJldC5fc2V0dXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIGxldCBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKFxuICAgICAgICAgIG9wdGlvbnMucGFydGlhbHMsXG4gICAgICAgICAgZW52LnBhcnRpYWxzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoXG4gICAgICAgICAge30sXG4gICAgICAgICAgZW52LmRlY29yYXRvcnMsXG4gICAgICAgICAgb3B0aW9ucy5kZWNvcmF0b3JzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IHt9O1xuICAgICAgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChvcHRpb25zKTtcblxuICAgICAgbGV0IGtlZXBIZWxwZXJJbkhlbHBlcnMgPVxuICAgICAgICBvcHRpb25zLmFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmcgfHxcbiAgICAgICAgdGVtcGxhdGVXYXNQcmVjb21waWxlZFdpdGhDb21waWxlclY3O1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnaGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgICAgbW92ZUhlbHBlclRvSG9va3MoY29udGFpbmVyLCAnYmxvY2tIZWxwZXJNaXNzaW5nJywga2VlcEhlbHBlckluSGVscGVycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBvcHRpb25zLnByb3RvQWNjZXNzQ29udHJvbDsgLy8gaW50ZXJuYWwgb3B0aW9uXG4gICAgICBjb250YWluZXIuaGVscGVycyA9IG9wdGlvbnMuaGVscGVycztcbiAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IG9wdGlvbnMucGFydGlhbHM7XG4gICAgICBjb250YWluZXIuZGVjb3JhdG9ycyA9IG9wdGlvbnMuZGVjb3JhdG9ycztcbiAgICAgIGNvbnRhaW5lci5ob29rcyA9IG9wdGlvbnMuaG9va3M7XG4gICAgfVxuICB9O1xuXG4gIHJldC5fY2hpbGQgPSBmdW5jdGlvbihpLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKSB7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VCbG9ja1BhcmFtcyAmJiAhYmxvY2tQYXJhbXMpIHtcbiAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignbXVzdCBwYXNzIHBhcmVudCBkZXB0aHMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcFByb2dyYW0oXG4gICAgICBjb250YWluZXIsXG4gICAgICBpLFxuICAgICAgdGVtcGxhdGVTcGVjW2ldLFxuICAgICAgZGF0YSxcbiAgICAgIDAsXG4gICAgICBibG9ja1BhcmFtcyxcbiAgICAgIGRlcHRoc1xuICAgICk7XG4gIH07XG4gIHJldHVybiByZXQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3cmFwUHJvZ3JhbShcbiAgY29udGFpbmVyLFxuICBpLFxuICBmbixcbiAgZGF0YSxcbiAgZGVjbGFyZWRCbG9ja1BhcmFtcyxcbiAgYmxvY2tQYXJhbXMsXG4gIGRlcHRoc1xuKSB7XG4gIGZ1bmN0aW9uIHByb2coY29udGV4dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKFxuICAgICAgZGVwdGhzICYmXG4gICAgICBjb250ZXh0ICE9IGRlcHRoc1swXSAmJlxuICAgICAgIShjb250ZXh0ID09PSBjb250YWluZXIubnVsbENvbnRleHQgJiYgZGVwdGhzWzBdID09PSBudWxsKVxuICAgICkge1xuICAgICAgY3VycmVudERlcHRocyA9IFtjb250ZXh0XS5jb25jYXQoZGVwdGhzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb250ZXh0LFxuICAgICAgY29udGFpbmVyLmhlbHBlcnMsXG4gICAgICBjb250YWluZXIucGFydGlhbHMsXG4gICAgICBvcHRpb25zLmRhdGEgfHwgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zICYmIFtvcHRpb25zLmJsb2NrUGFyYW1zXS5jb25jYXQoYmxvY2tQYXJhbXMpLFxuICAgICAgY3VycmVudERlcHRoc1xuICAgICk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXJ0aWFsKHBhcnRpYWwsIGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgaWYgKCFwYXJ0aWFsKSB7XG4gICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gJ0BwYXJ0aWFsLWJsb2NrJykge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1tvcHRpb25zLm5hbWVdO1xuICAgIH1cbiAgfSBlbHNlIGlmICghcGFydGlhbC5jYWxsICYmICFvcHRpb25zLm5hbWUpIHtcbiAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyBwYXJ0aWFsIHRoYXQgcmV0dXJuZWQgYSBzdHJpbmdcbiAgICBvcHRpb25zLm5hbWUgPSBwYXJ0aWFsO1xuICAgIHBhcnRpYWwgPSBvcHRpb25zLnBhcnRpYWxzW3BhcnRpYWxdO1xuICB9XG4gIHJldHVybiBwYXJ0aWFsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgY29uc3QgY3VycmVudFBhcnRpYWxCbG9jayA9IG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgb3B0aW9ucy5wYXJ0aWFsID0gdHJ1ZTtcbiAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoID0gb3B0aW9ucy5pZHNbMF0gfHwgb3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgbGV0IHBhcnRpYWxCbG9jaztcbiAgaWYgKG9wdGlvbnMuZm4gJiYgb3B0aW9ucy5mbiAhPT0gbm9vcCkge1xuICAgIG9wdGlvbnMuZGF0YSA9IGNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgLy8gV3JhcHBlciBmdW5jdGlvbiB0byBnZXQgYWNjZXNzIHRvIGN1cnJlbnRQYXJ0aWFsQmxvY2sgZnJvbSB0aGUgY2xvc3VyZVxuICAgIGxldCBmbiA9IG9wdGlvbnMuZm47XG4gICAgcGFydGlhbEJsb2NrID0gb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBmdW5jdGlvbiBwYXJ0aWFsQmxvY2tXcmFwcGVyKFxuICAgICAgY29udGV4dCxcbiAgICAgIG9wdGlvbnMgPSB7fVxuICAgICkge1xuICAgICAgLy8gUmVzdG9yZSB0aGUgcGFydGlhbC1ibG9jayBmcm9tIHRoZSBjbG9zdXJlIGZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9ja1xuICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICBvcHRpb25zLmRhdGEgPSBjcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ10gPSBjdXJyZW50UGFydGlhbEJsb2NrO1xuICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgaWYgKGZuLnBhcnRpYWxzKSB7XG4gICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCAmJiBwYXJ0aWFsQmxvY2spIHtcbiAgICBwYXJ0aWFsID0gcGFydGlhbEJsb2NrO1xuICB9XG5cbiAgaWYgKHBhcnRpYWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ1RoZSBwYXJ0aWFsICcgKyBvcHRpb25zLm5hbWUgKyAnIGNvdWxkIG5vdCBiZSBmb3VuZCcpO1xuICB9IGVsc2UgaWYgKHBhcnRpYWwgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgIHJldHVybiBwYXJ0aWFsKGNvbnRleHQsIG9wdGlvbnMpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkge1xuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGluaXREYXRhKGNvbnRleHQsIGRhdGEpIHtcbiAgaWYgKCFkYXRhIHx8ICEoJ3Jvb3QnIGluIGRhdGEpKSB7XG4gICAgZGF0YSA9IGRhdGEgPyBjcmVhdGVGcmFtZShkYXRhKSA6IHt9O1xuICAgIGRhdGEucm9vdCA9IGNvbnRleHQ7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEZWNvcmF0b3JzKGZuLCBwcm9nLCBjb250YWluZXIsIGRlcHRocywgZGF0YSwgYmxvY2tQYXJhbXMpIHtcbiAgaWYgKGZuLmRlY29yYXRvcikge1xuICAgIGxldCBwcm9wcyA9IHt9O1xuICAgIHByb2cgPSBmbi5kZWNvcmF0b3IoXG4gICAgICBwcm9nLFxuICAgICAgcHJvcHMsXG4gICAgICBjb250YWluZXIsXG4gICAgICBkZXB0aHMgJiYgZGVwdGhzWzBdLFxuICAgICAgZGF0YSxcbiAgICAgIGJsb2NrUGFyYW1zLFxuICAgICAgZGVwdGhzXG4gICAgKTtcbiAgICBVdGlscy5leHRlbmQocHJvZywgcHJvcHMpO1xuICB9XG4gIHJldHVybiBwcm9nO1xufVxuXG5mdW5jdGlvbiB3cmFwSGVscGVyc1RvUGFzc0xvb2t1cFByb3BlcnR5KG1lcmdlZEhlbHBlcnMsIGNvbnRhaW5lcikge1xuICBPYmplY3Qua2V5cyhtZXJnZWRIZWxwZXJzKS5mb3JFYWNoKGhlbHBlck5hbWUgPT4ge1xuICAgIGxldCBoZWxwZXIgPSBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIG1lcmdlZEhlbHBlcnNbaGVscGVyTmFtZV0gPSBwYXNzTG9va3VwUHJvcGVydHlPcHRpb24oaGVscGVyLCBjb250YWluZXIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKSB7XG4gIGNvbnN0IGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5O1xuICByZXR1cm4gd3JhcEhlbHBlcihoZWxwZXIsIG9wdGlvbnMgPT4ge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eSB9LCBvcHRpb25zKTtcbiAgfSk7XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3296:
 | |
| /***/ ((module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| // Build out our basic SafeString type
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| function SafeString(string) {
 | |
|   this.string = string;
 | |
| }
 | |
| 
 | |
| SafeString.prototype.toString = SafeString.prototype.toHTML = function () {
 | |
|   return '' + this.string;
 | |
| };
 | |
| 
 | |
| exports.default = SafeString;
 | |
| module.exports = exports['default'];
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3NhZmUtc3RyaW5nLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxTQUFTLFVBQVUsQ0FBQyxNQUFNLEVBQUU7QUFDMUIsTUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7Q0FDdEI7O0FBRUQsVUFBVSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsWUFBVztBQUN2RSxTQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0NBQ3pCLENBQUM7O3FCQUVhLFVBQVUiLCJmaWxlIjoic2FmZS1zdHJpbmcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBCdWlsZCBvdXQgb3VyIGJhc2ljIFNhZmVTdHJpbmcgdHlwZVxuZnVuY3Rpb24gU2FmZVN0cmluZyhzdHJpbmcpIHtcbiAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG59XG5cblNhZmVTdHJpbmcucHJvdG90eXBlLnRvU3RyaW5nID0gU2FmZVN0cmluZy5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnJyArIHRoaXMuc3RyaW5nO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgU2FmZVN0cmluZztcbiJdfQ==
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1437:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| exports.__esModule = true;
 | |
| exports.extend = extend;
 | |
| exports.indexOf = indexOf;
 | |
| exports.escapeExpression = escapeExpression;
 | |
| exports.isEmpty = isEmpty;
 | |
| exports.createFrame = createFrame;
 | |
| exports.blockParams = blockParams;
 | |
| exports.appendContextPath = appendContextPath;
 | |
| var escape = {
 | |
|   '&': '&',
 | |
|   '<': '<',
 | |
|   '>': '>',
 | |
|   '"': '"',
 | |
|   "'": ''',
 | |
|   '`': '`',
 | |
|   '=': '='
 | |
| };
 | |
| 
 | |
| var badChars = /[&<>"'`=]/g,
 | |
|     possible = /[&<>"'`=]/;
 | |
| 
 | |
| function escapeChar(chr) {
 | |
|   return escape[chr];
 | |
| }
 | |
| 
 | |
| function extend(obj /* , ...source */) {
 | |
|   for (var i = 1; i < arguments.length; i++) {
 | |
|     for (var key in arguments[i]) {
 | |
|       if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {
 | |
|         obj[key] = arguments[i][key];
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return obj;
 | |
| }
 | |
| 
 | |
| var toString = Object.prototype.toString;
 | |
| 
 | |
| exports.toString = toString;
 | |
| // Sourced from lodash
 | |
| // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt
 | |
| /* eslint-disable func-style */
 | |
| var isFunction = function isFunction(value) {
 | |
|   return typeof value === 'function';
 | |
| };
 | |
| // fallback for older versions of Chrome and Safari
 | |
| /* istanbul ignore next */
 | |
| if (isFunction(/x/)) {
 | |
|   exports.isFunction = isFunction = function (value) {
 | |
|     return typeof value === 'function' && toString.call(value) === '[object Function]';
 | |
|   };
 | |
| }
 | |
| exports.isFunction = isFunction;
 | |
| 
 | |
| /* eslint-enable func-style */
 | |
| 
 | |
| /* istanbul ignore next */
 | |
| var isArray = Array.isArray || function (value) {
 | |
|   return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false;
 | |
| };
 | |
| 
 | |
| exports.isArray = isArray;
 | |
| // Older IE versions do not directly support indexOf so we must implement our own, sadly.
 | |
| 
 | |
| function indexOf(array, value) {
 | |
|   for (var i = 0, len = array.length; i < len; i++) {
 | |
|     if (array[i] === value) {
 | |
|       return i;
 | |
|     }
 | |
|   }
 | |
|   return -1;
 | |
| }
 | |
| 
 | |
| function escapeExpression(string) {
 | |
|   if (typeof string !== 'string') {
 | |
|     // don't escape SafeStrings, since they're already safe
 | |
|     if (string && string.toHTML) {
 | |
|       return string.toHTML();
 | |
|     } else if (string == null) {
 | |
|       return '';
 | |
|     } else if (!string) {
 | |
|       return string + '';
 | |
|     }
 | |
| 
 | |
|     // Force a string conversion as this will be done by the append regardless and
 | |
|     // the regex test will do this transparently behind the scenes, causing issues if
 | |
|     // an object's to string has escaped characters in it.
 | |
|     string = '' + string;
 | |
|   }
 | |
| 
 | |
|   if (!possible.test(string)) {
 | |
|     return string;
 | |
|   }
 | |
|   return string.replace(badChars, escapeChar);
 | |
| }
 | |
| 
 | |
| function isEmpty(value) {
 | |
|   if (!value && value !== 0) {
 | |
|     return true;
 | |
|   } else if (isArray(value) && value.length === 0) {
 | |
|     return true;
 | |
|   } else {
 | |
|     return false;
 | |
|   }
 | |
| }
 | |
| 
 | |
| function createFrame(object) {
 | |
|   var frame = extend({}, object);
 | |
|   frame._parent = object;
 | |
|   return frame;
 | |
| }
 | |
| 
 | |
| function blockParams(params, ids) {
 | |
|   params.path = ids;
 | |
|   return params;
 | |
| }
 | |
| 
 | |
| function appendContextPath(contextPath, id) {
 | |
|   return (contextPath ? contextPath + '.' : '') + id;
 | |
| }
 | |
| //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9oYW5kbGViYXJzL3V0aWxzLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxJQUFNLE1BQU0sR0FBRztBQUNiLEtBQUcsRUFBRSxPQUFPO0FBQ1osS0FBRyxFQUFFLE1BQU07QUFDWCxLQUFHLEVBQUUsTUFBTTtBQUNYLEtBQUcsRUFBRSxRQUFRO0FBQ2IsS0FBRyxFQUFFLFFBQVE7QUFDYixLQUFHLEVBQUUsUUFBUTtBQUNiLEtBQUcsRUFBRSxRQUFRO0NBQ2QsQ0FBQzs7QUFFRixJQUFNLFFBQVEsR0FBRyxZQUFZO0lBQzNCLFFBQVEsR0FBRyxXQUFXLENBQUM7O0FBRXpCLFNBQVMsVUFBVSxDQUFDLEdBQUcsRUFBRTtBQUN2QixTQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztDQUNwQjs7QUFFTSxTQUFTLE1BQU0sQ0FBQyxHQUFHLG9CQUFvQjtBQUM1QyxPQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN6QyxTQUFLLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUM1QixVQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUU7QUFDM0QsV0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztPQUM5QjtLQUNGO0dBQ0Y7O0FBRUQsU0FBTyxHQUFHLENBQUM7Q0FDWjs7QUFFTSxJQUFJLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzs7Ozs7O0FBS2hELElBQUksVUFBVSxHQUFHLG9CQUFTLEtBQUssRUFBRTtBQUMvQixTQUFPLE9BQU8sS0FBSyxLQUFLLFVBQVUsQ0FBQztDQUNwQyxDQUFDOzs7QUFHRixJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUNuQixVQU9PLFVBQVUsR0FQakIsVUFBVSxHQUFHLFVBQVMsS0FBSyxFQUFFO0FBQzNCLFdBQ0UsT0FBTyxLQUFLLEtBQUssVUFBVSxJQUMzQixRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLG1CQUFtQixDQUM1QztHQUNILENBQUM7Q0FDSDtRQUNRLFVBQVUsR0FBVixVQUFVOzs7OztBQUlaLElBQU0sT0FBTyxHQUNsQixLQUFLLENBQUMsT0FBTyxJQUNiLFVBQVMsS0FBSyxFQUFFO0FBQ2QsU0FBTyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxHQUNyQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLGdCQUFnQixHQUN6QyxLQUFLLENBQUM7Q0FDWCxDQUFDOzs7OztBQUdHLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUU7QUFDcEMsT0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUNoRCxRQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUU7QUFDdEIsYUFBTyxDQUFDLENBQUM7S0FDVjtHQUNGO0FBQ0QsU0FBTyxDQUFDLENBQUMsQ0FBQztDQUNYOztBQUVNLFNBQVMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFO0FBQ3ZDLE1BQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFOztBQUU5QixRQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFO0FBQzNCLGFBQU8sTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0tBQ3hCLE1BQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFO0FBQ3pCLGFBQU8sRUFBRSxDQUFDO0tBQ1gsTUFBTSxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2xCLGFBQU8sTUFBTSxHQUFHLEVBQUUsQ0FBQztLQUNwQjs7Ozs7QUFLRCxVQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztHQUN0Qjs7QUFFRCxNQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUMxQixXQUFPLE1BQU0sQ0FBQztHQUNmO0FBQ0QsU0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztDQUM3Qzs7QUFFTSxTQUFTLE9BQU8sQ0FBQyxLQUFLLEVBQUU7QUFDN0IsTUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO0FBQ3pCLFdBQU8sSUFBSSxDQUFDO0dBQ2IsTUFBTSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtBQUMvQyxXQUFPLElBQUksQ0FBQztHQUNiLE1BQU07QUFDTCxXQUFPLEtBQUssQ0FBQztHQUNkO0NBQ0Y7O0FBRU0sU0FBUyxXQUFXLENBQUMsTUFBTSxFQUFFO0FBQ2xDLE1BQUksS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsT0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDdkIsU0FBTyxLQUFLLENBQUM7Q0FDZDs7QUFFTSxTQUFTLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFO0FBQ3ZDLFFBQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ2xCLFNBQU8sTUFBTSxDQUFDO0NBQ2Y7O0FBRU0sU0FBUyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFO0FBQ2pELFNBQU8sQ0FBQyxXQUFXLEdBQUcsV0FBVyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUEsR0FBSSxFQUFFLENBQUM7Q0FDcEQiLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBlc2NhcGUgPSB7XG4gICcmJzogJyZhbXA7JyxcbiAgJzwnOiAnJmx0OycsXG4gICc+JzogJyZndDsnLFxuICAnXCInOiAnJnF1b3Q7JyxcbiAgXCInXCI6ICcmI3gyNzsnLFxuICAnYCc6ICcmI3g2MDsnLFxuICAnPSc6ICcmI3gzRDsnXG59O1xuXG5jb25zdCBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gIHBvc3NpYmxlID0gL1smPD5cIidgPV0vO1xuXG5mdW5jdGlvbiBlc2NhcGVDaGFyKGNocikge1xuICByZXR1cm4gZXNjYXBlW2Nocl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAobGV0IGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yIChsZXQga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG5leHBvcnQgbGV0IHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xubGV0IGlzRnVuY3Rpb24gPSBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufTtcbi8vIGZhbGxiYWNrIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBDaHJvbWUgYW5kIFNhZmFyaVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmlmIChpc0Z1bmN0aW9uKC94LykpIHtcbiAgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICApO1xuICB9O1xufVxuZXhwb3J0IHsgaXNGdW5jdGlvbiB9O1xuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgaXNBcnJheSA9XG4gIEFycmF5LmlzQXJyYXkgfHxcbiAgZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgPyB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cbmV4cG9ydCBmdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIGxldCBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRDb250ZXh0UGF0aChjb250ZXh0UGF0aCwgaWQpIHtcbiAgcmV0dXJuIChjb250ZXh0UGF0aCA/IGNvbnRleHRQYXRoICsgJy4nIDogJycpICsgaWQ7XG59XG4iXX0=
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7492:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| // USAGE:
 | |
| // var handlebars = require('handlebars');
 | |
| /* eslint-disable no-var */
 | |
| 
 | |
| // var local = handlebars.create();
 | |
| 
 | |
| var handlebars = __webpack_require__(6956).default;
 | |
| 
 | |
| var printer = __webpack_require__(9286);
 | |
| handlebars.PrintVisitor = printer.PrintVisitor;
 | |
| handlebars.print = printer.print;
 | |
| 
 | |
| module.exports = handlebars;
 | |
| 
 | |
| // Publish a Node.js require() handler for .handlebars and .hbs files
 | |
| function extension(module, filename) {
 | |
|   var fs = __webpack_require__(5747);
 | |
|   var templateString = fs.readFileSync(filename, 'utf8');
 | |
|   module.exports = handlebars.compile(templateString);
 | |
| }
 | |
| /* istanbul ignore else */
 | |
| if ( true && require.extensions) {
 | |
|   require.extensions['.handlebars'] = extension;
 | |
|   require.extensions['.hbs'] = extension;
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3287:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| /*!
 | |
|  * is-plain-object <https://github.com/jonschlinkert/is-plain-object>
 | |
|  *
 | |
|  * Copyright (c) 2014-2017, Jon Schlinkert.
 | |
|  * Released under the MIT License.
 | |
|  */
 | |
| 
 | |
| function isObject(o) {
 | |
|   return Object.prototype.toString.call(o) === '[object Object]';
 | |
| }
 | |
| 
 | |
| function isPlainObject(o) {
 | |
|   var ctor,prot;
 | |
| 
 | |
|   if (isObject(o) === false) return false;
 | |
| 
 | |
|   // If has modified constructor
 | |
|   ctor = o.constructor;
 | |
|   if (ctor === undefined) return true;
 | |
| 
 | |
|   // If has modified prototype
 | |
|   prot = ctor.prototype;
 | |
|   if (isObject(prot) === false) return false;
 | |
| 
 | |
|   // If constructor does not have an Object-specific method
 | |
|   if (prot.hasOwnProperty('isPrototypeOf') === false) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   // Most likely a plain Object
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| exports.isPlainObject = isPlainObject;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7129:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| // A linked list to keep track of recently-used-ness
 | |
| const Yallist = __webpack_require__(665)
 | |
| 
 | |
| const MAX = Symbol('max')
 | |
| const LENGTH = Symbol('length')
 | |
| const LENGTH_CALCULATOR = Symbol('lengthCalculator')
 | |
| const ALLOW_STALE = Symbol('allowStale')
 | |
| const MAX_AGE = Symbol('maxAge')
 | |
| const DISPOSE = Symbol('dispose')
 | |
| const NO_DISPOSE_ON_SET = Symbol('noDisposeOnSet')
 | |
| const LRU_LIST = Symbol('lruList')
 | |
| const CACHE = Symbol('cache')
 | |
| const UPDATE_AGE_ON_GET = Symbol('updateAgeOnGet')
 | |
| 
 | |
| const naiveLength = () => 1
 | |
| 
 | |
| // lruList is a yallist where the head is the youngest
 | |
| // item, and the tail is the oldest.  the list contains the Hit
 | |
| // objects as the entries.
 | |
| // Each Hit object has a reference to its Yallist.Node.  This
 | |
| // never changes.
 | |
| //
 | |
| // cache is a Map (or PseudoMap) that matches the keys to
 | |
| // the Yallist.Node object.
 | |
| class LRUCache {
 | |
|   constructor (options) {
 | |
|     if (typeof options === 'number')
 | |
|       options = { max: options }
 | |
| 
 | |
|     if (!options)
 | |
|       options = {}
 | |
| 
 | |
|     if (options.max && (typeof options.max !== 'number' || options.max < 0))
 | |
|       throw new TypeError('max must be a non-negative number')
 | |
|     // Kind of weird to have a default max of Infinity, but oh well.
 | |
|     const max = this[MAX] = options.max || Infinity
 | |
| 
 | |
|     const lc = options.length || naiveLength
 | |
|     this[LENGTH_CALCULATOR] = (typeof lc !== 'function') ? naiveLength : lc
 | |
|     this[ALLOW_STALE] = options.stale || false
 | |
|     if (options.maxAge && typeof options.maxAge !== 'number')
 | |
|       throw new TypeError('maxAge must be a number')
 | |
|     this[MAX_AGE] = options.maxAge || 0
 | |
|     this[DISPOSE] = options.dispose
 | |
|     this[NO_DISPOSE_ON_SET] = options.noDisposeOnSet || false
 | |
|     this[UPDATE_AGE_ON_GET] = options.updateAgeOnGet || false
 | |
|     this.reset()
 | |
|   }
 | |
| 
 | |
|   // resize the cache when the max changes.
 | |
|   set max (mL) {
 | |
|     if (typeof mL !== 'number' || mL < 0)
 | |
|       throw new TypeError('max must be a non-negative number')
 | |
| 
 | |
|     this[MAX] = mL || Infinity
 | |
|     trim(this)
 | |
|   }
 | |
|   get max () {
 | |
|     return this[MAX]
 | |
|   }
 | |
| 
 | |
|   set allowStale (allowStale) {
 | |
|     this[ALLOW_STALE] = !!allowStale
 | |
|   }
 | |
|   get allowStale () {
 | |
|     return this[ALLOW_STALE]
 | |
|   }
 | |
| 
 | |
|   set maxAge (mA) {
 | |
|     if (typeof mA !== 'number')
 | |
|       throw new TypeError('maxAge must be a non-negative number')
 | |
| 
 | |
|     this[MAX_AGE] = mA
 | |
|     trim(this)
 | |
|   }
 | |
|   get maxAge () {
 | |
|     return this[MAX_AGE]
 | |
|   }
 | |
| 
 | |
|   // resize the cache when the lengthCalculator changes.
 | |
|   set lengthCalculator (lC) {
 | |
|     if (typeof lC !== 'function')
 | |
|       lC = naiveLength
 | |
| 
 | |
|     if (lC !== this[LENGTH_CALCULATOR]) {
 | |
|       this[LENGTH_CALCULATOR] = lC
 | |
|       this[LENGTH] = 0
 | |
|       this[LRU_LIST].forEach(hit => {
 | |
|         hit.length = this[LENGTH_CALCULATOR](hit.value, hit.key)
 | |
|         this[LENGTH] += hit.length
 | |
|       })
 | |
|     }
 | |
|     trim(this)
 | |
|   }
 | |
|   get lengthCalculator () { return this[LENGTH_CALCULATOR] }
 | |
| 
 | |
|   get length () { return this[LENGTH] }
 | |
|   get itemCount () { return this[LRU_LIST].length }
 | |
| 
 | |
|   rforEach (fn, thisp) {
 | |
|     thisp = thisp || this
 | |
|     for (let walker = this[LRU_LIST].tail; walker !== null;) {
 | |
|       const prev = walker.prev
 | |
|       forEachStep(this, fn, walker, thisp)
 | |
|       walker = prev
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   forEach (fn, thisp) {
 | |
|     thisp = thisp || this
 | |
|     for (let walker = this[LRU_LIST].head; walker !== null;) {
 | |
|       const next = walker.next
 | |
|       forEachStep(this, fn, walker, thisp)
 | |
|       walker = next
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   keys () {
 | |
|     return this[LRU_LIST].toArray().map(k => k.key)
 | |
|   }
 | |
| 
 | |
|   values () {
 | |
|     return this[LRU_LIST].toArray().map(k => k.value)
 | |
|   }
 | |
| 
 | |
|   reset () {
 | |
|     if (this[DISPOSE] &&
 | |
|         this[LRU_LIST] &&
 | |
|         this[LRU_LIST].length) {
 | |
|       this[LRU_LIST].forEach(hit => this[DISPOSE](hit.key, hit.value))
 | |
|     }
 | |
| 
 | |
|     this[CACHE] = new Map() // hash of items by key
 | |
|     this[LRU_LIST] = new Yallist() // list of items in order of use recency
 | |
|     this[LENGTH] = 0 // length of items in the list
 | |
|   }
 | |
| 
 | |
|   dump () {
 | |
|     return this[LRU_LIST].map(hit =>
 | |
|       isStale(this, hit) ? false : {
 | |
|         k: hit.key,
 | |
|         v: hit.value,
 | |
|         e: hit.now + (hit.maxAge || 0)
 | |
|       }).toArray().filter(h => h)
 | |
|   }
 | |
| 
 | |
|   dumpLru () {
 | |
|     return this[LRU_LIST]
 | |
|   }
 | |
| 
 | |
|   set (key, value, maxAge) {
 | |
|     maxAge = maxAge || this[MAX_AGE]
 | |
| 
 | |
|     if (maxAge && typeof maxAge !== 'number')
 | |
|       throw new TypeError('maxAge must be a number')
 | |
| 
 | |
|     const now = maxAge ? Date.now() : 0
 | |
|     const len = this[LENGTH_CALCULATOR](value, key)
 | |
| 
 | |
|     if (this[CACHE].has(key)) {
 | |
|       if (len > this[MAX]) {
 | |
|         del(this, this[CACHE].get(key))
 | |
|         return false
 | |
|       }
 | |
| 
 | |
|       const node = this[CACHE].get(key)
 | |
|       const item = node.value
 | |
| 
 | |
|       // dispose of the old one before overwriting
 | |
|       // split out into 2 ifs for better coverage tracking
 | |
|       if (this[DISPOSE]) {
 | |
|         if (!this[NO_DISPOSE_ON_SET])
 | |
|           this[DISPOSE](key, item.value)
 | |
|       }
 | |
| 
 | |
|       item.now = now
 | |
|       item.maxAge = maxAge
 | |
|       item.value = value
 | |
|       this[LENGTH] += len - item.length
 | |
|       item.length = len
 | |
|       this.get(key)
 | |
|       trim(this)
 | |
|       return true
 | |
|     }
 | |
| 
 | |
|     const hit = new Entry(key, value, len, now, maxAge)
 | |
| 
 | |
|     // oversized objects fall out of cache automatically.
 | |
|     if (hit.length > this[MAX]) {
 | |
|       if (this[DISPOSE])
 | |
|         this[DISPOSE](key, value)
 | |
| 
 | |
|       return false
 | |
|     }
 | |
| 
 | |
|     this[LENGTH] += hit.length
 | |
|     this[LRU_LIST].unshift(hit)
 | |
|     this[CACHE].set(key, this[LRU_LIST].head)
 | |
|     trim(this)
 | |
|     return true
 | |
|   }
 | |
| 
 | |
|   has (key) {
 | |
|     if (!this[CACHE].has(key)) return false
 | |
|     const hit = this[CACHE].get(key).value
 | |
|     return !isStale(this, hit)
 | |
|   }
 | |
| 
 | |
|   get (key) {
 | |
|     return get(this, key, true)
 | |
|   }
 | |
| 
 | |
|   peek (key) {
 | |
|     return get(this, key, false)
 | |
|   }
 | |
| 
 | |
|   pop () {
 | |
|     const node = this[LRU_LIST].tail
 | |
|     if (!node)
 | |
|       return null
 | |
| 
 | |
|     del(this, node)
 | |
|     return node.value
 | |
|   }
 | |
| 
 | |
|   del (key) {
 | |
|     del(this, this[CACHE].get(key))
 | |
|   }
 | |
| 
 | |
|   load (arr) {
 | |
|     // reset the cache
 | |
|     this.reset()
 | |
| 
 | |
|     const now = Date.now()
 | |
|     // A previous serialized cache has the most recent items first
 | |
|     for (let l = arr.length - 1; l >= 0; l--) {
 | |
|       const hit = arr[l]
 | |
|       const expiresAt = hit.e || 0
 | |
|       if (expiresAt === 0)
 | |
|         // the item was created without expiration in a non aged cache
 | |
|         this.set(hit.k, hit.v)
 | |
|       else {
 | |
|         const maxAge = expiresAt - now
 | |
|         // dont add already expired items
 | |
|         if (maxAge > 0) {
 | |
|           this.set(hit.k, hit.v, maxAge)
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   prune () {
 | |
|     this[CACHE].forEach((value, key) => get(this, key, false))
 | |
|   }
 | |
| }
 | |
| 
 | |
| const get = (self, key, doUse) => {
 | |
|   const node = self[CACHE].get(key)
 | |
|   if (node) {
 | |
|     const hit = node.value
 | |
|     if (isStale(self, hit)) {
 | |
|       del(self, node)
 | |
|       if (!self[ALLOW_STALE])
 | |
|         return undefined
 | |
|     } else {
 | |
|       if (doUse) {
 | |
|         if (self[UPDATE_AGE_ON_GET])
 | |
|           node.value.now = Date.now()
 | |
|         self[LRU_LIST].unshiftNode(node)
 | |
|       }
 | |
|     }
 | |
|     return hit.value
 | |
|   }
 | |
| }
 | |
| 
 | |
| const isStale = (self, hit) => {
 | |
|   if (!hit || (!hit.maxAge && !self[MAX_AGE]))
 | |
|     return false
 | |
| 
 | |
|   const diff = Date.now() - hit.now
 | |
|   return hit.maxAge ? diff > hit.maxAge
 | |
|     : self[MAX_AGE] && (diff > self[MAX_AGE])
 | |
| }
 | |
| 
 | |
| const trim = self => {
 | |
|   if (self[LENGTH] > self[MAX]) {
 | |
|     for (let walker = self[LRU_LIST].tail;
 | |
|       self[LENGTH] > self[MAX] && walker !== null;) {
 | |
|       // We know that we're about to delete this one, and also
 | |
|       // what the next least recently used key will be, so just
 | |
|       // go ahead and set it now.
 | |
|       const prev = walker.prev
 | |
|       del(self, walker)
 | |
|       walker = prev
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| const del = (self, node) => {
 | |
|   if (node) {
 | |
|     const hit = node.value
 | |
|     if (self[DISPOSE])
 | |
|       self[DISPOSE](hit.key, hit.value)
 | |
| 
 | |
|     self[LENGTH] -= hit.length
 | |
|     self[CACHE].delete(hit.key)
 | |
|     self[LRU_LIST].removeNode(node)
 | |
|   }
 | |
| }
 | |
| 
 | |
| class Entry {
 | |
|   constructor (key, value, length, now, maxAge) {
 | |
|     this.key = key
 | |
|     this.value = value
 | |
|     this.length = length
 | |
|     this.now = now
 | |
|     this.maxAge = maxAge || 0
 | |
|   }
 | |
| }
 | |
| 
 | |
| const forEachStep = (self, fn, node, thisp) => {
 | |
|   let hit = node.value
 | |
|   if (isStale(self, hit)) {
 | |
|     del(self, node)
 | |
|     if (!self[ALLOW_STALE])
 | |
|       hit = undefined
 | |
|   }
 | |
|   if (hit)
 | |
|     fn.call(thisp, hit.value, hit.key, self)
 | |
| }
 | |
| 
 | |
| module.exports = LRUCache
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9623:
 | |
| /***/ (function(module, __unused_webpack_exports, __webpack_require__) {
 | |
| 
 | |
| /* module decorator */ module = __webpack_require__.nmd(module);
 | |
| //! moment.js
 | |
| //! version : 2.29.1
 | |
| //! authors : Tim Wood, Iskren Chernev, Moment.js contributors
 | |
| //! license : MIT
 | |
| //! momentjs.com
 | |
| 
 | |
| ;(function (global, factory) {
 | |
|      true ? module.exports = factory() :
 | |
|     0
 | |
| }(this, (function () { 'use strict';
 | |
| 
 | |
|     var hookCallback;
 | |
| 
 | |
|     function hooks() {
 | |
|         return hookCallback.apply(null, arguments);
 | |
|     }
 | |
| 
 | |
|     // This is done to register the method called with moment()
 | |
|     // without creating circular dependencies.
 | |
|     function setHookCallback(callback) {
 | |
|         hookCallback = callback;
 | |
|     }
 | |
| 
 | |
|     function isArray(input) {
 | |
|         return (
 | |
|             input instanceof Array ||
 | |
|             Object.prototype.toString.call(input) === '[object Array]'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function isObject(input) {
 | |
|         // IE8 will treat undefined and null as object if it wasn't for
 | |
|         // input != null
 | |
|         return (
 | |
|             input != null &&
 | |
|             Object.prototype.toString.call(input) === '[object Object]'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function hasOwnProp(a, b) {
 | |
|         return Object.prototype.hasOwnProperty.call(a, b);
 | |
|     }
 | |
| 
 | |
|     function isObjectEmpty(obj) {
 | |
|         if (Object.getOwnPropertyNames) {
 | |
|             return Object.getOwnPropertyNames(obj).length === 0;
 | |
|         } else {
 | |
|             var k;
 | |
|             for (k in obj) {
 | |
|                 if (hasOwnProp(obj, k)) {
 | |
|                     return false;
 | |
|                 }
 | |
|             }
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function isUndefined(input) {
 | |
|         return input === void 0;
 | |
|     }
 | |
| 
 | |
|     function isNumber(input) {
 | |
|         return (
 | |
|             typeof input === 'number' ||
 | |
|             Object.prototype.toString.call(input) === '[object Number]'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function isDate(input) {
 | |
|         return (
 | |
|             input instanceof Date ||
 | |
|             Object.prototype.toString.call(input) === '[object Date]'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function map(arr, fn) {
 | |
|         var res = [],
 | |
|             i;
 | |
|         for (i = 0; i < arr.length; ++i) {
 | |
|             res.push(fn(arr[i], i));
 | |
|         }
 | |
|         return res;
 | |
|     }
 | |
| 
 | |
|     function extend(a, b) {
 | |
|         for (var i in b) {
 | |
|             if (hasOwnProp(b, i)) {
 | |
|                 a[i] = b[i];
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (hasOwnProp(b, 'toString')) {
 | |
|             a.toString = b.toString;
 | |
|         }
 | |
| 
 | |
|         if (hasOwnProp(b, 'valueOf')) {
 | |
|             a.valueOf = b.valueOf;
 | |
|         }
 | |
| 
 | |
|         return a;
 | |
|     }
 | |
| 
 | |
|     function createUTC(input, format, locale, strict) {
 | |
|         return createLocalOrUTC(input, format, locale, strict, true).utc();
 | |
|     }
 | |
| 
 | |
|     function defaultParsingFlags() {
 | |
|         // We need to deep clone this object.
 | |
|         return {
 | |
|             empty: false,
 | |
|             unusedTokens: [],
 | |
|             unusedInput: [],
 | |
|             overflow: -2,
 | |
|             charsLeftOver: 0,
 | |
|             nullInput: false,
 | |
|             invalidEra: null,
 | |
|             invalidMonth: null,
 | |
|             invalidFormat: false,
 | |
|             userInvalidated: false,
 | |
|             iso: false,
 | |
|             parsedDateParts: [],
 | |
|             era: null,
 | |
|             meridiem: null,
 | |
|             rfc2822: false,
 | |
|             weekdayMismatch: false,
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function getParsingFlags(m) {
 | |
|         if (m._pf == null) {
 | |
|             m._pf = defaultParsingFlags();
 | |
|         }
 | |
|         return m._pf;
 | |
|     }
 | |
| 
 | |
|     var some;
 | |
|     if (Array.prototype.some) {
 | |
|         some = Array.prototype.some;
 | |
|     } else {
 | |
|         some = function (fun) {
 | |
|             var t = Object(this),
 | |
|                 len = t.length >>> 0,
 | |
|                 i;
 | |
| 
 | |
|             for (i = 0; i < len; i++) {
 | |
|                 if (i in t && fun.call(this, t[i], i, t)) {
 | |
|                     return true;
 | |
|                 }
 | |
|             }
 | |
| 
 | |
|             return false;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function isValid(m) {
 | |
|         if (m._isValid == null) {
 | |
|             var flags = getParsingFlags(m),
 | |
|                 parsedParts = some.call(flags.parsedDateParts, function (i) {
 | |
|                     return i != null;
 | |
|                 }),
 | |
|                 isNowValid =
 | |
|                     !isNaN(m._d.getTime()) &&
 | |
|                     flags.overflow < 0 &&
 | |
|                     !flags.empty &&
 | |
|                     !flags.invalidEra &&
 | |
|                     !flags.invalidMonth &&
 | |
|                     !flags.invalidWeekday &&
 | |
|                     !flags.weekdayMismatch &&
 | |
|                     !flags.nullInput &&
 | |
|                     !flags.invalidFormat &&
 | |
|                     !flags.userInvalidated &&
 | |
|                     (!flags.meridiem || (flags.meridiem && parsedParts));
 | |
| 
 | |
|             if (m._strict) {
 | |
|                 isNowValid =
 | |
|                     isNowValid &&
 | |
|                     flags.charsLeftOver === 0 &&
 | |
|                     flags.unusedTokens.length === 0 &&
 | |
|                     flags.bigHour === undefined;
 | |
|             }
 | |
| 
 | |
|             if (Object.isFrozen == null || !Object.isFrozen(m)) {
 | |
|                 m._isValid = isNowValid;
 | |
|             } else {
 | |
|                 return isNowValid;
 | |
|             }
 | |
|         }
 | |
|         return m._isValid;
 | |
|     }
 | |
| 
 | |
|     function createInvalid(flags) {
 | |
|         var m = createUTC(NaN);
 | |
|         if (flags != null) {
 | |
|             extend(getParsingFlags(m), flags);
 | |
|         } else {
 | |
|             getParsingFlags(m).userInvalidated = true;
 | |
|         }
 | |
| 
 | |
|         return m;
 | |
|     }
 | |
| 
 | |
|     // Plugins that add properties should also add the key here (null value),
 | |
|     // so we can properly clone ourselves.
 | |
|     var momentProperties = (hooks.momentProperties = []),
 | |
|         updateInProgress = false;
 | |
| 
 | |
|     function copyConfig(to, from) {
 | |
|         var i, prop, val;
 | |
| 
 | |
|         if (!isUndefined(from._isAMomentObject)) {
 | |
|             to._isAMomentObject = from._isAMomentObject;
 | |
|         }
 | |
|         if (!isUndefined(from._i)) {
 | |
|             to._i = from._i;
 | |
|         }
 | |
|         if (!isUndefined(from._f)) {
 | |
|             to._f = from._f;
 | |
|         }
 | |
|         if (!isUndefined(from._l)) {
 | |
|             to._l = from._l;
 | |
|         }
 | |
|         if (!isUndefined(from._strict)) {
 | |
|             to._strict = from._strict;
 | |
|         }
 | |
|         if (!isUndefined(from._tzm)) {
 | |
|             to._tzm = from._tzm;
 | |
|         }
 | |
|         if (!isUndefined(from._isUTC)) {
 | |
|             to._isUTC = from._isUTC;
 | |
|         }
 | |
|         if (!isUndefined(from._offset)) {
 | |
|             to._offset = from._offset;
 | |
|         }
 | |
|         if (!isUndefined(from._pf)) {
 | |
|             to._pf = getParsingFlags(from);
 | |
|         }
 | |
|         if (!isUndefined(from._locale)) {
 | |
|             to._locale = from._locale;
 | |
|         }
 | |
| 
 | |
|         if (momentProperties.length > 0) {
 | |
|             for (i = 0; i < momentProperties.length; i++) {
 | |
|                 prop = momentProperties[i];
 | |
|                 val = from[prop];
 | |
|                 if (!isUndefined(val)) {
 | |
|                     to[prop] = val;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return to;
 | |
|     }
 | |
| 
 | |
|     // Moment prototype object
 | |
|     function Moment(config) {
 | |
|         copyConfig(this, config);
 | |
|         this._d = new Date(config._d != null ? config._d.getTime() : NaN);
 | |
|         if (!this.isValid()) {
 | |
|             this._d = new Date(NaN);
 | |
|         }
 | |
|         // Prevent infinite loop in case updateOffset creates new moment
 | |
|         // objects.
 | |
|         if (updateInProgress === false) {
 | |
|             updateInProgress = true;
 | |
|             hooks.updateOffset(this);
 | |
|             updateInProgress = false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function isMoment(obj) {
 | |
|         return (
 | |
|             obj instanceof Moment || (obj != null && obj._isAMomentObject != null)
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function warn(msg) {
 | |
|         if (
 | |
|             hooks.suppressDeprecationWarnings === false &&
 | |
|             typeof console !== 'undefined' &&
 | |
|             console.warn
 | |
|         ) {
 | |
|             console.warn('Deprecation warning: ' + msg);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function deprecate(msg, fn) {
 | |
|         var firstTime = true;
 | |
| 
 | |
|         return extend(function () {
 | |
|             if (hooks.deprecationHandler != null) {
 | |
|                 hooks.deprecationHandler(null, msg);
 | |
|             }
 | |
|             if (firstTime) {
 | |
|                 var args = [],
 | |
|                     arg,
 | |
|                     i,
 | |
|                     key;
 | |
|                 for (i = 0; i < arguments.length; i++) {
 | |
|                     arg = '';
 | |
|                     if (typeof arguments[i] === 'object') {
 | |
|                         arg += '\n[' + i + '] ';
 | |
|                         for (key in arguments[0]) {
 | |
|                             if (hasOwnProp(arguments[0], key)) {
 | |
|                                 arg += key + ': ' + arguments[0][key] + ', ';
 | |
|                             }
 | |
|                         }
 | |
|                         arg = arg.slice(0, -2); // Remove trailing comma and space
 | |
|                     } else {
 | |
|                         arg = arguments[i];
 | |
|                     }
 | |
|                     args.push(arg);
 | |
|                 }
 | |
|                 warn(
 | |
|                     msg +
 | |
|                         '\nArguments: ' +
 | |
|                         Array.prototype.slice.call(args).join('') +
 | |
|                         '\n' +
 | |
|                         new Error().stack
 | |
|                 );
 | |
|                 firstTime = false;
 | |
|             }
 | |
|             return fn.apply(this, arguments);
 | |
|         }, fn);
 | |
|     }
 | |
| 
 | |
|     var deprecations = {};
 | |
| 
 | |
|     function deprecateSimple(name, msg) {
 | |
|         if (hooks.deprecationHandler != null) {
 | |
|             hooks.deprecationHandler(name, msg);
 | |
|         }
 | |
|         if (!deprecations[name]) {
 | |
|             warn(msg);
 | |
|             deprecations[name] = true;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     hooks.suppressDeprecationWarnings = false;
 | |
|     hooks.deprecationHandler = null;
 | |
| 
 | |
|     function isFunction(input) {
 | |
|         return (
 | |
|             (typeof Function !== 'undefined' && input instanceof Function) ||
 | |
|             Object.prototype.toString.call(input) === '[object Function]'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function set(config) {
 | |
|         var prop, i;
 | |
|         for (i in config) {
 | |
|             if (hasOwnProp(config, i)) {
 | |
|                 prop = config[i];
 | |
|                 if (isFunction(prop)) {
 | |
|                     this[i] = prop;
 | |
|                 } else {
 | |
|                     this['_' + i] = prop;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         this._config = config;
 | |
|         // Lenient ordinal parsing accepts just a number in addition to
 | |
|         // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
 | |
|         // TODO: Remove "ordinalParse" fallback in next major release.
 | |
|         this._dayOfMonthOrdinalParseLenient = new RegExp(
 | |
|             (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
 | |
|                 '|' +
 | |
|                 /\d{1,2}/.source
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function mergeConfigs(parentConfig, childConfig) {
 | |
|         var res = extend({}, parentConfig),
 | |
|             prop;
 | |
|         for (prop in childConfig) {
 | |
|             if (hasOwnProp(childConfig, prop)) {
 | |
|                 if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
 | |
|                     res[prop] = {};
 | |
|                     extend(res[prop], parentConfig[prop]);
 | |
|                     extend(res[prop], childConfig[prop]);
 | |
|                 } else if (childConfig[prop] != null) {
 | |
|                     res[prop] = childConfig[prop];
 | |
|                 } else {
 | |
|                     delete res[prop];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         for (prop in parentConfig) {
 | |
|             if (
 | |
|                 hasOwnProp(parentConfig, prop) &&
 | |
|                 !hasOwnProp(childConfig, prop) &&
 | |
|                 isObject(parentConfig[prop])
 | |
|             ) {
 | |
|                 // make sure changes to properties don't modify parent config
 | |
|                 res[prop] = extend({}, res[prop]);
 | |
|             }
 | |
|         }
 | |
|         return res;
 | |
|     }
 | |
| 
 | |
|     function Locale(config) {
 | |
|         if (config != null) {
 | |
|             this.set(config);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     var keys;
 | |
| 
 | |
|     if (Object.keys) {
 | |
|         keys = Object.keys;
 | |
|     } else {
 | |
|         keys = function (obj) {
 | |
|             var i,
 | |
|                 res = [];
 | |
|             for (i in obj) {
 | |
|                 if (hasOwnProp(obj, i)) {
 | |
|                     res.push(i);
 | |
|                 }
 | |
|             }
 | |
|             return res;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     var defaultCalendar = {
 | |
|         sameDay: '[Today at] LT',
 | |
|         nextDay: '[Tomorrow at] LT',
 | |
|         nextWeek: 'dddd [at] LT',
 | |
|         lastDay: '[Yesterday at] LT',
 | |
|         lastWeek: '[Last] dddd [at] LT',
 | |
|         sameElse: 'L',
 | |
|     };
 | |
| 
 | |
|     function calendar(key, mom, now) {
 | |
|         var output = this._calendar[key] || this._calendar['sameElse'];
 | |
|         return isFunction(output) ? output.call(mom, now) : output;
 | |
|     }
 | |
| 
 | |
|     function zeroFill(number, targetLength, forceSign) {
 | |
|         var absNumber = '' + Math.abs(number),
 | |
|             zerosToFill = targetLength - absNumber.length,
 | |
|             sign = number >= 0;
 | |
|         return (
 | |
|             (sign ? (forceSign ? '+' : '') : '-') +
 | |
|             Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +
 | |
|             absNumber
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,
 | |
|         localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,
 | |
|         formatFunctions = {},
 | |
|         formatTokenFunctions = {};
 | |
| 
 | |
|     // token:    'M'
 | |
|     // padded:   ['MM', 2]
 | |
|     // ordinal:  'Mo'
 | |
|     // callback: function () { this.month() + 1 }
 | |
|     function addFormatToken(token, padded, ordinal, callback) {
 | |
|         var func = callback;
 | |
|         if (typeof callback === 'string') {
 | |
|             func = function () {
 | |
|                 return this[callback]();
 | |
|             };
 | |
|         }
 | |
|         if (token) {
 | |
|             formatTokenFunctions[token] = func;
 | |
|         }
 | |
|         if (padded) {
 | |
|             formatTokenFunctions[padded[0]] = function () {
 | |
|                 return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
 | |
|             };
 | |
|         }
 | |
|         if (ordinal) {
 | |
|             formatTokenFunctions[ordinal] = function () {
 | |
|                 return this.localeData().ordinal(
 | |
|                     func.apply(this, arguments),
 | |
|                     token
 | |
|                 );
 | |
|             };
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function removeFormattingTokens(input) {
 | |
|         if (input.match(/\[[\s\S]/)) {
 | |
|             return input.replace(/^\[|\]$/g, '');
 | |
|         }
 | |
|         return input.replace(/\\/g, '');
 | |
|     }
 | |
| 
 | |
|     function makeFormatFunction(format) {
 | |
|         var array = format.match(formattingTokens),
 | |
|             i,
 | |
|             length;
 | |
| 
 | |
|         for (i = 0, length = array.length; i < length; i++) {
 | |
|             if (formatTokenFunctions[array[i]]) {
 | |
|                 array[i] = formatTokenFunctions[array[i]];
 | |
|             } else {
 | |
|                 array[i] = removeFormattingTokens(array[i]);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return function (mom) {
 | |
|             var output = '',
 | |
|                 i;
 | |
|             for (i = 0; i < length; i++) {
 | |
|                 output += isFunction(array[i])
 | |
|                     ? array[i].call(mom, format)
 | |
|                     : array[i];
 | |
|             }
 | |
|             return output;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     // format date using native date object
 | |
|     function formatMoment(m, format) {
 | |
|         if (!m.isValid()) {
 | |
|             return m.localeData().invalidDate();
 | |
|         }
 | |
| 
 | |
|         format = expandFormat(format, m.localeData());
 | |
|         formatFunctions[format] =
 | |
|             formatFunctions[format] || makeFormatFunction(format);
 | |
| 
 | |
|         return formatFunctions[format](m);
 | |
|     }
 | |
| 
 | |
|     function expandFormat(format, locale) {
 | |
|         var i = 5;
 | |
| 
 | |
|         function replaceLongDateFormatTokens(input) {
 | |
|             return locale.longDateFormat(input) || input;
 | |
|         }
 | |
| 
 | |
|         localFormattingTokens.lastIndex = 0;
 | |
|         while (i >= 0 && localFormattingTokens.test(format)) {
 | |
|             format = format.replace(
 | |
|                 localFormattingTokens,
 | |
|                 replaceLongDateFormatTokens
 | |
|             );
 | |
|             localFormattingTokens.lastIndex = 0;
 | |
|             i -= 1;
 | |
|         }
 | |
| 
 | |
|         return format;
 | |
|     }
 | |
| 
 | |
|     var defaultLongDateFormat = {
 | |
|         LTS: 'h:mm:ss A',
 | |
|         LT: 'h:mm A',
 | |
|         L: 'MM/DD/YYYY',
 | |
|         LL: 'MMMM D, YYYY',
 | |
|         LLL: 'MMMM D, YYYY h:mm A',
 | |
|         LLLL: 'dddd, MMMM D, YYYY h:mm A',
 | |
|     };
 | |
| 
 | |
|     function longDateFormat(key) {
 | |
|         var format = this._longDateFormat[key],
 | |
|             formatUpper = this._longDateFormat[key.toUpperCase()];
 | |
| 
 | |
|         if (format || !formatUpper) {
 | |
|             return format;
 | |
|         }
 | |
| 
 | |
|         this._longDateFormat[key] = formatUpper
 | |
|             .match(formattingTokens)
 | |
|             .map(function (tok) {
 | |
|                 if (
 | |
|                     tok === 'MMMM' ||
 | |
|                     tok === 'MM' ||
 | |
|                     tok === 'DD' ||
 | |
|                     tok === 'dddd'
 | |
|                 ) {
 | |
|                     return tok.slice(1);
 | |
|                 }
 | |
|                 return tok;
 | |
|             })
 | |
|             .join('');
 | |
| 
 | |
|         return this._longDateFormat[key];
 | |
|     }
 | |
| 
 | |
|     var defaultInvalidDate = 'Invalid date';
 | |
| 
 | |
|     function invalidDate() {
 | |
|         return this._invalidDate;
 | |
|     }
 | |
| 
 | |
|     var defaultOrdinal = '%d',
 | |
|         defaultDayOfMonthOrdinalParse = /\d{1,2}/;
 | |
| 
 | |
|     function ordinal(number) {
 | |
|         return this._ordinal.replace('%d', number);
 | |
|     }
 | |
| 
 | |
|     var defaultRelativeTime = {
 | |
|         future: 'in %s',
 | |
|         past: '%s ago',
 | |
|         s: 'a few seconds',
 | |
|         ss: '%d seconds',
 | |
|         m: 'a minute',
 | |
|         mm: '%d minutes',
 | |
|         h: 'an hour',
 | |
|         hh: '%d hours',
 | |
|         d: 'a day',
 | |
|         dd: '%d days',
 | |
|         w: 'a week',
 | |
|         ww: '%d weeks',
 | |
|         M: 'a month',
 | |
|         MM: '%d months',
 | |
|         y: 'a year',
 | |
|         yy: '%d years',
 | |
|     };
 | |
| 
 | |
|     function relativeTime(number, withoutSuffix, string, isFuture) {
 | |
|         var output = this._relativeTime[string];
 | |
|         return isFunction(output)
 | |
|             ? output(number, withoutSuffix, string, isFuture)
 | |
|             : output.replace(/%d/i, number);
 | |
|     }
 | |
| 
 | |
|     function pastFuture(diff, output) {
 | |
|         var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
 | |
|         return isFunction(format) ? format(output) : format.replace(/%s/i, output);
 | |
|     }
 | |
| 
 | |
|     var aliases = {};
 | |
| 
 | |
|     function addUnitAlias(unit, shorthand) {
 | |
|         var lowerCase = unit.toLowerCase();
 | |
|         aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
 | |
|     }
 | |
| 
 | |
|     function normalizeUnits(units) {
 | |
|         return typeof units === 'string'
 | |
|             ? aliases[units] || aliases[units.toLowerCase()]
 | |
|             : undefined;
 | |
|     }
 | |
| 
 | |
|     function normalizeObjectUnits(inputObject) {
 | |
|         var normalizedInput = {},
 | |
|             normalizedProp,
 | |
|             prop;
 | |
| 
 | |
|         for (prop in inputObject) {
 | |
|             if (hasOwnProp(inputObject, prop)) {
 | |
|                 normalizedProp = normalizeUnits(prop);
 | |
|                 if (normalizedProp) {
 | |
|                     normalizedInput[normalizedProp] = inputObject[prop];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return normalizedInput;
 | |
|     }
 | |
| 
 | |
|     var priorities = {};
 | |
| 
 | |
|     function addUnitPriority(unit, priority) {
 | |
|         priorities[unit] = priority;
 | |
|     }
 | |
| 
 | |
|     function getPrioritizedUnits(unitsObj) {
 | |
|         var units = [],
 | |
|             u;
 | |
|         for (u in unitsObj) {
 | |
|             if (hasOwnProp(unitsObj, u)) {
 | |
|                 units.push({ unit: u, priority: priorities[u] });
 | |
|             }
 | |
|         }
 | |
|         units.sort(function (a, b) {
 | |
|             return a.priority - b.priority;
 | |
|         });
 | |
|         return units;
 | |
|     }
 | |
| 
 | |
|     function isLeapYear(year) {
 | |
|         return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
 | |
|     }
 | |
| 
 | |
|     function absFloor(number) {
 | |
|         if (number < 0) {
 | |
|             // -0 -> 0
 | |
|             return Math.ceil(number) || 0;
 | |
|         } else {
 | |
|             return Math.floor(number);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function toInt(argumentForCoercion) {
 | |
|         var coercedNumber = +argumentForCoercion,
 | |
|             value = 0;
 | |
| 
 | |
|         if (coercedNumber !== 0 && isFinite(coercedNumber)) {
 | |
|             value = absFloor(coercedNumber);
 | |
|         }
 | |
| 
 | |
|         return value;
 | |
|     }
 | |
| 
 | |
|     function makeGetSet(unit, keepTime) {
 | |
|         return function (value) {
 | |
|             if (value != null) {
 | |
|                 set$1(this, unit, value);
 | |
|                 hooks.updateOffset(this, keepTime);
 | |
|                 return this;
 | |
|             } else {
 | |
|                 return get(this, unit);
 | |
|             }
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function get(mom, unit) {
 | |
|         return mom.isValid()
 | |
|             ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()
 | |
|             : NaN;
 | |
|     }
 | |
| 
 | |
|     function set$1(mom, unit, value) {
 | |
|         if (mom.isValid() && !isNaN(value)) {
 | |
|             if (
 | |
|                 unit === 'FullYear' &&
 | |
|                 isLeapYear(mom.year()) &&
 | |
|                 mom.month() === 1 &&
 | |
|                 mom.date() === 29
 | |
|             ) {
 | |
|                 value = toInt(value);
 | |
|                 mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](
 | |
|                     value,
 | |
|                     mom.month(),
 | |
|                     daysInMonth(value, mom.month())
 | |
|                 );
 | |
|             } else {
 | |
|                 mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function stringGet(units) {
 | |
|         units = normalizeUnits(units);
 | |
|         if (isFunction(this[units])) {
 | |
|             return this[units]();
 | |
|         }
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     function stringSet(units, value) {
 | |
|         if (typeof units === 'object') {
 | |
|             units = normalizeObjectUnits(units);
 | |
|             var prioritized = getPrioritizedUnits(units),
 | |
|                 i;
 | |
|             for (i = 0; i < prioritized.length; i++) {
 | |
|                 this[prioritized[i].unit](units[prioritized[i].unit]);
 | |
|             }
 | |
|         } else {
 | |
|             units = normalizeUnits(units);
 | |
|             if (isFunction(this[units])) {
 | |
|                 return this[units](value);
 | |
|             }
 | |
|         }
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     var match1 = /\d/, //       0 - 9
 | |
|         match2 = /\d\d/, //      00 - 99
 | |
|         match3 = /\d{3}/, //     000 - 999
 | |
|         match4 = /\d{4}/, //    0000 - 9999
 | |
|         match6 = /[+-]?\d{6}/, // -999999 - 999999
 | |
|         match1to2 = /\d\d?/, //       0 - 99
 | |
|         match3to4 = /\d\d\d\d?/, //     999 - 9999
 | |
|         match5to6 = /\d\d\d\d\d\d?/, //   99999 - 999999
 | |
|         match1to3 = /\d{1,3}/, //       0 - 999
 | |
|         match1to4 = /\d{1,4}/, //       0 - 9999
 | |
|         match1to6 = /[+-]?\d{1,6}/, // -999999 - 999999
 | |
|         matchUnsigned = /\d+/, //       0 - inf
 | |
|         matchSigned = /[+-]?\d+/, //    -inf - inf
 | |
|         matchOffset = /Z|[+-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z
 | |
|         matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z
 | |
|         matchTimestamp = /[+-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123
 | |
|         // any word (or two) characters or numbers including two/three word month in arabic.
 | |
|         // includes scottish gaelic two word and hyphenated months
 | |
|         matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,
 | |
|         regexes;
 | |
| 
 | |
|     regexes = {};
 | |
| 
 | |
|     function addRegexToken(token, regex, strictRegex) {
 | |
|         regexes[token] = isFunction(regex)
 | |
|             ? regex
 | |
|             : function (isStrict, localeData) {
 | |
|                   return isStrict && strictRegex ? strictRegex : regex;
 | |
|               };
 | |
|     }
 | |
| 
 | |
|     function getParseRegexForToken(token, config) {
 | |
|         if (!hasOwnProp(regexes, token)) {
 | |
|             return new RegExp(unescapeFormat(token));
 | |
|         }
 | |
| 
 | |
|         return regexes[token](config._strict, config._locale);
 | |
|     }
 | |
| 
 | |
|     // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
 | |
|     function unescapeFormat(s) {
 | |
|         return regexEscape(
 | |
|             s
 | |
|                 .replace('\\', '')
 | |
|                 .replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (
 | |
|                     matched,
 | |
|                     p1,
 | |
|                     p2,
 | |
|                     p3,
 | |
|                     p4
 | |
|                 ) {
 | |
|                     return p1 || p2 || p3 || p4;
 | |
|                 })
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function regexEscape(s) {
 | |
|         return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
 | |
|     }
 | |
| 
 | |
|     var tokens = {};
 | |
| 
 | |
|     function addParseToken(token, callback) {
 | |
|         var i,
 | |
|             func = callback;
 | |
|         if (typeof token === 'string') {
 | |
|             token = [token];
 | |
|         }
 | |
|         if (isNumber(callback)) {
 | |
|             func = function (input, array) {
 | |
|                 array[callback] = toInt(input);
 | |
|             };
 | |
|         }
 | |
|         for (i = 0; i < token.length; i++) {
 | |
|             tokens[token[i]] = func;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function addWeekParseToken(token, callback) {
 | |
|         addParseToken(token, function (input, array, config, token) {
 | |
|             config._w = config._w || {};
 | |
|             callback(input, config._w, config, token);
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     function addTimeToArrayFromToken(token, input, config) {
 | |
|         if (input != null && hasOwnProp(tokens, token)) {
 | |
|             tokens[token](input, config._a, config, token);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     var YEAR = 0,
 | |
|         MONTH = 1,
 | |
|         DATE = 2,
 | |
|         HOUR = 3,
 | |
|         MINUTE = 4,
 | |
|         SECOND = 5,
 | |
|         MILLISECOND = 6,
 | |
|         WEEK = 7,
 | |
|         WEEKDAY = 8;
 | |
| 
 | |
|     function mod(n, x) {
 | |
|         return ((n % x) + x) % x;
 | |
|     }
 | |
| 
 | |
|     var indexOf;
 | |
| 
 | |
|     if (Array.prototype.indexOf) {
 | |
|         indexOf = Array.prototype.indexOf;
 | |
|     } else {
 | |
|         indexOf = function (o) {
 | |
|             // I know
 | |
|             var i;
 | |
|             for (i = 0; i < this.length; ++i) {
 | |
|                 if (this[i] === o) {
 | |
|                     return i;
 | |
|                 }
 | |
|             }
 | |
|             return -1;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function daysInMonth(year, month) {
 | |
|         if (isNaN(year) || isNaN(month)) {
 | |
|             return NaN;
 | |
|         }
 | |
|         var modMonth = mod(month, 12);
 | |
|         year += (month - modMonth) / 12;
 | |
|         return modMonth === 1
 | |
|             ? isLeapYear(year)
 | |
|                 ? 29
 | |
|                 : 28
 | |
|             : 31 - ((modMonth % 7) % 2);
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('M', ['MM', 2], 'Mo', function () {
 | |
|         return this.month() + 1;
 | |
|     });
 | |
| 
 | |
|     addFormatToken('MMM', 0, 0, function (format) {
 | |
|         return this.localeData().monthsShort(this, format);
 | |
|     });
 | |
| 
 | |
|     addFormatToken('MMMM', 0, 0, function (format) {
 | |
|         return this.localeData().months(this, format);
 | |
|     });
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('month', 'M');
 | |
| 
 | |
|     // PRIORITY
 | |
| 
 | |
|     addUnitPriority('month', 8);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('M', match1to2);
 | |
|     addRegexToken('MM', match1to2, match2);
 | |
|     addRegexToken('MMM', function (isStrict, locale) {
 | |
|         return locale.monthsShortRegex(isStrict);
 | |
|     });
 | |
|     addRegexToken('MMMM', function (isStrict, locale) {
 | |
|         return locale.monthsRegex(isStrict);
 | |
|     });
 | |
| 
 | |
|     addParseToken(['M', 'MM'], function (input, array) {
 | |
|         array[MONTH] = toInt(input) - 1;
 | |
|     });
 | |
| 
 | |
|     addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
 | |
|         var month = config._locale.monthsParse(input, token, config._strict);
 | |
|         // if we didn't find a month name, mark the date as invalid.
 | |
|         if (month != null) {
 | |
|             array[MONTH] = month;
 | |
|         } else {
 | |
|             getParsingFlags(config).invalidMonth = input;
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     // LOCALES
 | |
| 
 | |
|     var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split(
 | |
|             '_'
 | |
|         ),
 | |
|         defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split(
 | |
|             '_'
 | |
|         ),
 | |
|         MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,
 | |
|         defaultMonthsShortRegex = matchWord,
 | |
|         defaultMonthsRegex = matchWord;
 | |
| 
 | |
|     function localeMonths(m, format) {
 | |
|         if (!m) {
 | |
|             return isArray(this._months)
 | |
|                 ? this._months
 | |
|                 : this._months['standalone'];
 | |
|         }
 | |
|         return isArray(this._months)
 | |
|             ? this._months[m.month()]
 | |
|             : this._months[
 | |
|                   (this._months.isFormat || MONTHS_IN_FORMAT).test(format)
 | |
|                       ? 'format'
 | |
|                       : 'standalone'
 | |
|               ][m.month()];
 | |
|     }
 | |
| 
 | |
|     function localeMonthsShort(m, format) {
 | |
|         if (!m) {
 | |
|             return isArray(this._monthsShort)
 | |
|                 ? this._monthsShort
 | |
|                 : this._monthsShort['standalone'];
 | |
|         }
 | |
|         return isArray(this._monthsShort)
 | |
|             ? this._monthsShort[m.month()]
 | |
|             : this._monthsShort[
 | |
|                   MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'
 | |
|               ][m.month()];
 | |
|     }
 | |
| 
 | |
|     function handleStrictParse(monthName, format, strict) {
 | |
|         var i,
 | |
|             ii,
 | |
|             mom,
 | |
|             llc = monthName.toLocaleLowerCase();
 | |
|         if (!this._monthsParse) {
 | |
|             // this is not used
 | |
|             this._monthsParse = [];
 | |
|             this._longMonthsParse = [];
 | |
|             this._shortMonthsParse = [];
 | |
|             for (i = 0; i < 12; ++i) {
 | |
|                 mom = createUTC([2000, i]);
 | |
|                 this._shortMonthsParse[i] = this.monthsShort(
 | |
|                     mom,
 | |
|                     ''
 | |
|                 ).toLocaleLowerCase();
 | |
|                 this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (strict) {
 | |
|             if (format === 'MMM') {
 | |
|                 ii = indexOf.call(this._shortMonthsParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             } else {
 | |
|                 ii = indexOf.call(this._longMonthsParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             }
 | |
|         } else {
 | |
|             if (format === 'MMM') {
 | |
|                 ii = indexOf.call(this._shortMonthsParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._longMonthsParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             } else {
 | |
|                 ii = indexOf.call(this._longMonthsParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._shortMonthsParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function localeMonthsParse(monthName, format, strict) {
 | |
|         var i, mom, regex;
 | |
| 
 | |
|         if (this._monthsParseExact) {
 | |
|             return handleStrictParse.call(this, monthName, format, strict);
 | |
|         }
 | |
| 
 | |
|         if (!this._monthsParse) {
 | |
|             this._monthsParse = [];
 | |
|             this._longMonthsParse = [];
 | |
|             this._shortMonthsParse = [];
 | |
|         }
 | |
| 
 | |
|         // TODO: add sorting
 | |
|         // Sorting makes sure if one month (or abbr) is a prefix of another
 | |
|         // see sorting in computeMonthsParse
 | |
|         for (i = 0; i < 12; i++) {
 | |
|             // make the regex if we don't have it already
 | |
|             mom = createUTC([2000, i]);
 | |
|             if (strict && !this._longMonthsParse[i]) {
 | |
|                 this._longMonthsParse[i] = new RegExp(
 | |
|                     '^' + this.months(mom, '').replace('.', '') + '$',
 | |
|                     'i'
 | |
|                 );
 | |
|                 this._shortMonthsParse[i] = new RegExp(
 | |
|                     '^' + this.monthsShort(mom, '').replace('.', '') + '$',
 | |
|                     'i'
 | |
|                 );
 | |
|             }
 | |
|             if (!strict && !this._monthsParse[i]) {
 | |
|                 regex =
 | |
|                     '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
 | |
|                 this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
 | |
|             }
 | |
|             // test the regex
 | |
|             if (
 | |
|                 strict &&
 | |
|                 format === 'MMMM' &&
 | |
|                 this._longMonthsParse[i].test(monthName)
 | |
|             ) {
 | |
|                 return i;
 | |
|             } else if (
 | |
|                 strict &&
 | |
|                 format === 'MMM' &&
 | |
|                 this._shortMonthsParse[i].test(monthName)
 | |
|             ) {
 | |
|                 return i;
 | |
|             } else if (!strict && this._monthsParse[i].test(monthName)) {
 | |
|                 return i;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function setMonth(mom, value) {
 | |
|         var dayOfMonth;
 | |
| 
 | |
|         if (!mom.isValid()) {
 | |
|             // No op
 | |
|             return mom;
 | |
|         }
 | |
| 
 | |
|         if (typeof value === 'string') {
 | |
|             if (/^\d+$/.test(value)) {
 | |
|                 value = toInt(value);
 | |
|             } else {
 | |
|                 value = mom.localeData().monthsParse(value);
 | |
|                 // TODO: Another silent failure?
 | |
|                 if (!isNumber(value)) {
 | |
|                     return mom;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
 | |
|         mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
 | |
|         return mom;
 | |
|     }
 | |
| 
 | |
|     function getSetMonth(value) {
 | |
|         if (value != null) {
 | |
|             setMonth(this, value);
 | |
|             hooks.updateOffset(this, true);
 | |
|             return this;
 | |
|         } else {
 | |
|             return get(this, 'Month');
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function getDaysInMonth() {
 | |
|         return daysInMonth(this.year(), this.month());
 | |
|     }
 | |
| 
 | |
|     function monthsShortRegex(isStrict) {
 | |
|         if (this._monthsParseExact) {
 | |
|             if (!hasOwnProp(this, '_monthsRegex')) {
 | |
|                 computeMonthsParse.call(this);
 | |
|             }
 | |
|             if (isStrict) {
 | |
|                 return this._monthsShortStrictRegex;
 | |
|             } else {
 | |
|                 return this._monthsShortRegex;
 | |
|             }
 | |
|         } else {
 | |
|             if (!hasOwnProp(this, '_monthsShortRegex')) {
 | |
|                 this._monthsShortRegex = defaultMonthsShortRegex;
 | |
|             }
 | |
|             return this._monthsShortStrictRegex && isStrict
 | |
|                 ? this._monthsShortStrictRegex
 | |
|                 : this._monthsShortRegex;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function monthsRegex(isStrict) {
 | |
|         if (this._monthsParseExact) {
 | |
|             if (!hasOwnProp(this, '_monthsRegex')) {
 | |
|                 computeMonthsParse.call(this);
 | |
|             }
 | |
|             if (isStrict) {
 | |
|                 return this._monthsStrictRegex;
 | |
|             } else {
 | |
|                 return this._monthsRegex;
 | |
|             }
 | |
|         } else {
 | |
|             if (!hasOwnProp(this, '_monthsRegex')) {
 | |
|                 this._monthsRegex = defaultMonthsRegex;
 | |
|             }
 | |
|             return this._monthsStrictRegex && isStrict
 | |
|                 ? this._monthsStrictRegex
 | |
|                 : this._monthsRegex;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function computeMonthsParse() {
 | |
|         function cmpLenRev(a, b) {
 | |
|             return b.length - a.length;
 | |
|         }
 | |
| 
 | |
|         var shortPieces = [],
 | |
|             longPieces = [],
 | |
|             mixedPieces = [],
 | |
|             i,
 | |
|             mom;
 | |
|         for (i = 0; i < 12; i++) {
 | |
|             // make the regex if we don't have it already
 | |
|             mom = createUTC([2000, i]);
 | |
|             shortPieces.push(this.monthsShort(mom, ''));
 | |
|             longPieces.push(this.months(mom, ''));
 | |
|             mixedPieces.push(this.months(mom, ''));
 | |
|             mixedPieces.push(this.monthsShort(mom, ''));
 | |
|         }
 | |
|         // Sorting makes sure if one month (or abbr) is a prefix of another it
 | |
|         // will match the longer piece.
 | |
|         shortPieces.sort(cmpLenRev);
 | |
|         longPieces.sort(cmpLenRev);
 | |
|         mixedPieces.sort(cmpLenRev);
 | |
|         for (i = 0; i < 12; i++) {
 | |
|             shortPieces[i] = regexEscape(shortPieces[i]);
 | |
|             longPieces[i] = regexEscape(longPieces[i]);
 | |
|         }
 | |
|         for (i = 0; i < 24; i++) {
 | |
|             mixedPieces[i] = regexEscape(mixedPieces[i]);
 | |
|         }
 | |
| 
 | |
|         this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
 | |
|         this._monthsShortRegex = this._monthsRegex;
 | |
|         this._monthsStrictRegex = new RegExp(
 | |
|             '^(' + longPieces.join('|') + ')',
 | |
|             'i'
 | |
|         );
 | |
|         this._monthsShortStrictRegex = new RegExp(
 | |
|             '^(' + shortPieces.join('|') + ')',
 | |
|             'i'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('Y', 0, 0, function () {
 | |
|         var y = this.year();
 | |
|         return y <= 9999 ? zeroFill(y, 4) : '+' + y;
 | |
|     });
 | |
| 
 | |
|     addFormatToken(0, ['YY', 2], 0, function () {
 | |
|         return this.year() % 100;
 | |
|     });
 | |
| 
 | |
|     addFormatToken(0, ['YYYY', 4], 0, 'year');
 | |
|     addFormatToken(0, ['YYYYY', 5], 0, 'year');
 | |
|     addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('year', 'y');
 | |
| 
 | |
|     // PRIORITIES
 | |
| 
 | |
|     addUnitPriority('year', 1);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('Y', matchSigned);
 | |
|     addRegexToken('YY', match1to2, match2);
 | |
|     addRegexToken('YYYY', match1to4, match4);
 | |
|     addRegexToken('YYYYY', match1to6, match6);
 | |
|     addRegexToken('YYYYYY', match1to6, match6);
 | |
| 
 | |
|     addParseToken(['YYYYY', 'YYYYYY'], YEAR);
 | |
|     addParseToken('YYYY', function (input, array) {
 | |
|         array[YEAR] =
 | |
|             input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
 | |
|     });
 | |
|     addParseToken('YY', function (input, array) {
 | |
|         array[YEAR] = hooks.parseTwoDigitYear(input);
 | |
|     });
 | |
|     addParseToken('Y', function (input, array) {
 | |
|         array[YEAR] = parseInt(input, 10);
 | |
|     });
 | |
| 
 | |
|     // HELPERS
 | |
| 
 | |
|     function daysInYear(year) {
 | |
|         return isLeapYear(year) ? 366 : 365;
 | |
|     }
 | |
| 
 | |
|     // HOOKS
 | |
| 
 | |
|     hooks.parseTwoDigitYear = function (input) {
 | |
|         return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
 | |
|     };
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     var getSetYear = makeGetSet('FullYear', true);
 | |
| 
 | |
|     function getIsLeapYear() {
 | |
|         return isLeapYear(this.year());
 | |
|     }
 | |
| 
 | |
|     function createDate(y, m, d, h, M, s, ms) {
 | |
|         // can't just apply() to create a date:
 | |
|         // https://stackoverflow.com/q/181348
 | |
|         var date;
 | |
|         // the date constructor remaps years 0-99 to 1900-1999
 | |
|         if (y < 100 && y >= 0) {
 | |
|             // preserve leap years using a full 400 year cycle, then reset
 | |
|             date = new Date(y + 400, m, d, h, M, s, ms);
 | |
|             if (isFinite(date.getFullYear())) {
 | |
|                 date.setFullYear(y);
 | |
|             }
 | |
|         } else {
 | |
|             date = new Date(y, m, d, h, M, s, ms);
 | |
|         }
 | |
| 
 | |
|         return date;
 | |
|     }
 | |
| 
 | |
|     function createUTCDate(y) {
 | |
|         var date, args;
 | |
|         // the Date.UTC function remaps years 0-99 to 1900-1999
 | |
|         if (y < 100 && y >= 0) {
 | |
|             args = Array.prototype.slice.call(arguments);
 | |
|             // preserve leap years using a full 400 year cycle, then reset
 | |
|             args[0] = y + 400;
 | |
|             date = new Date(Date.UTC.apply(null, args));
 | |
|             if (isFinite(date.getUTCFullYear())) {
 | |
|                 date.setUTCFullYear(y);
 | |
|             }
 | |
|         } else {
 | |
|             date = new Date(Date.UTC.apply(null, arguments));
 | |
|         }
 | |
| 
 | |
|         return date;
 | |
|     }
 | |
| 
 | |
|     // start-of-first-week - start-of-year
 | |
|     function firstWeekOffset(year, dow, doy) {
 | |
|         var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
 | |
|             fwd = 7 + dow - doy,
 | |
|             // first-week day local weekday -- which local weekday is fwd
 | |
|             fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
 | |
| 
 | |
|         return -fwdlw + fwd - 1;
 | |
|     }
 | |
| 
 | |
|     // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
 | |
|     function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
 | |
|         var localWeekday = (7 + weekday - dow) % 7,
 | |
|             weekOffset = firstWeekOffset(year, dow, doy),
 | |
|             dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
 | |
|             resYear,
 | |
|             resDayOfYear;
 | |
| 
 | |
|         if (dayOfYear <= 0) {
 | |
|             resYear = year - 1;
 | |
|             resDayOfYear = daysInYear(resYear) + dayOfYear;
 | |
|         } else if (dayOfYear > daysInYear(year)) {
 | |
|             resYear = year + 1;
 | |
|             resDayOfYear = dayOfYear - daysInYear(year);
 | |
|         } else {
 | |
|             resYear = year;
 | |
|             resDayOfYear = dayOfYear;
 | |
|         }
 | |
| 
 | |
|         return {
 | |
|             year: resYear,
 | |
|             dayOfYear: resDayOfYear,
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function weekOfYear(mom, dow, doy) {
 | |
|         var weekOffset = firstWeekOffset(mom.year(), dow, doy),
 | |
|             week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
 | |
|             resWeek,
 | |
|             resYear;
 | |
| 
 | |
|         if (week < 1) {
 | |
|             resYear = mom.year() - 1;
 | |
|             resWeek = week + weeksInYear(resYear, dow, doy);
 | |
|         } else if (week > weeksInYear(mom.year(), dow, doy)) {
 | |
|             resWeek = week - weeksInYear(mom.year(), dow, doy);
 | |
|             resYear = mom.year() + 1;
 | |
|         } else {
 | |
|             resYear = mom.year();
 | |
|             resWeek = week;
 | |
|         }
 | |
| 
 | |
|         return {
 | |
|             week: resWeek,
 | |
|             year: resYear,
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function weeksInYear(year, dow, doy) {
 | |
|         var weekOffset = firstWeekOffset(year, dow, doy),
 | |
|             weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
 | |
|         return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('w', ['ww', 2], 'wo', 'week');
 | |
|     addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('week', 'w');
 | |
|     addUnitAlias('isoWeek', 'W');
 | |
| 
 | |
|     // PRIORITIES
 | |
| 
 | |
|     addUnitPriority('week', 5);
 | |
|     addUnitPriority('isoWeek', 5);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('w', match1to2);
 | |
|     addRegexToken('ww', match1to2, match2);
 | |
|     addRegexToken('W', match1to2);
 | |
|     addRegexToken('WW', match1to2, match2);
 | |
| 
 | |
|     addWeekParseToken(['w', 'ww', 'W', 'WW'], function (
 | |
|         input,
 | |
|         week,
 | |
|         config,
 | |
|         token
 | |
|     ) {
 | |
|         week[token.substr(0, 1)] = toInt(input);
 | |
|     });
 | |
| 
 | |
|     // HELPERS
 | |
| 
 | |
|     // LOCALES
 | |
| 
 | |
|     function localeWeek(mom) {
 | |
|         return weekOfYear(mom, this._week.dow, this._week.doy).week;
 | |
|     }
 | |
| 
 | |
|     var defaultLocaleWeek = {
 | |
|         dow: 0, // Sunday is the first day of the week.
 | |
|         doy: 6, // The week that contains Jan 6th is the first week of the year.
 | |
|     };
 | |
| 
 | |
|     function localeFirstDayOfWeek() {
 | |
|         return this._week.dow;
 | |
|     }
 | |
| 
 | |
|     function localeFirstDayOfYear() {
 | |
|         return this._week.doy;
 | |
|     }
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function getSetWeek(input) {
 | |
|         var week = this.localeData().week(this);
 | |
|         return input == null ? week : this.add((input - week) * 7, 'd');
 | |
|     }
 | |
| 
 | |
|     function getSetISOWeek(input) {
 | |
|         var week = weekOfYear(this, 1, 4).week;
 | |
|         return input == null ? week : this.add((input - week) * 7, 'd');
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('d', 0, 'do', 'day');
 | |
| 
 | |
|     addFormatToken('dd', 0, 0, function (format) {
 | |
|         return this.localeData().weekdaysMin(this, format);
 | |
|     });
 | |
| 
 | |
|     addFormatToken('ddd', 0, 0, function (format) {
 | |
|         return this.localeData().weekdaysShort(this, format);
 | |
|     });
 | |
| 
 | |
|     addFormatToken('dddd', 0, 0, function (format) {
 | |
|         return this.localeData().weekdays(this, format);
 | |
|     });
 | |
| 
 | |
|     addFormatToken('e', 0, 0, 'weekday');
 | |
|     addFormatToken('E', 0, 0, 'isoWeekday');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('day', 'd');
 | |
|     addUnitAlias('weekday', 'e');
 | |
|     addUnitAlias('isoWeekday', 'E');
 | |
| 
 | |
|     // PRIORITY
 | |
|     addUnitPriority('day', 11);
 | |
|     addUnitPriority('weekday', 11);
 | |
|     addUnitPriority('isoWeekday', 11);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('d', match1to2);
 | |
|     addRegexToken('e', match1to2);
 | |
|     addRegexToken('E', match1to2);
 | |
|     addRegexToken('dd', function (isStrict, locale) {
 | |
|         return locale.weekdaysMinRegex(isStrict);
 | |
|     });
 | |
|     addRegexToken('ddd', function (isStrict, locale) {
 | |
|         return locale.weekdaysShortRegex(isStrict);
 | |
|     });
 | |
|     addRegexToken('dddd', function (isStrict, locale) {
 | |
|         return locale.weekdaysRegex(isStrict);
 | |
|     });
 | |
| 
 | |
|     addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
 | |
|         var weekday = config._locale.weekdaysParse(input, token, config._strict);
 | |
|         // if we didn't get a weekday name, mark the date as invalid
 | |
|         if (weekday != null) {
 | |
|             week.d = weekday;
 | |
|         } else {
 | |
|             getParsingFlags(config).invalidWeekday = input;
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
 | |
|         week[token] = toInt(input);
 | |
|     });
 | |
| 
 | |
|     // HELPERS
 | |
| 
 | |
|     function parseWeekday(input, locale) {
 | |
|         if (typeof input !== 'string') {
 | |
|             return input;
 | |
|         }
 | |
| 
 | |
|         if (!isNaN(input)) {
 | |
|             return parseInt(input, 10);
 | |
|         }
 | |
| 
 | |
|         input = locale.weekdaysParse(input);
 | |
|         if (typeof input === 'number') {
 | |
|             return input;
 | |
|         }
 | |
| 
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     function parseIsoWeekday(input, locale) {
 | |
|         if (typeof input === 'string') {
 | |
|             return locale.weekdaysParse(input) % 7 || 7;
 | |
|         }
 | |
|         return isNaN(input) ? null : input;
 | |
|     }
 | |
| 
 | |
|     // LOCALES
 | |
|     function shiftWeekdays(ws, n) {
 | |
|         return ws.slice(n, 7).concat(ws.slice(0, n));
 | |
|     }
 | |
| 
 | |
|     var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(
 | |
|             '_'
 | |
|         ),
 | |
|         defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),
 | |
|         defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),
 | |
|         defaultWeekdaysRegex = matchWord,
 | |
|         defaultWeekdaysShortRegex = matchWord,
 | |
|         defaultWeekdaysMinRegex = matchWord;
 | |
| 
 | |
|     function localeWeekdays(m, format) {
 | |
|         var weekdays = isArray(this._weekdays)
 | |
|             ? this._weekdays
 | |
|             : this._weekdays[
 | |
|                   m && m !== true && this._weekdays.isFormat.test(format)
 | |
|                       ? 'format'
 | |
|                       : 'standalone'
 | |
|               ];
 | |
|         return m === true
 | |
|             ? shiftWeekdays(weekdays, this._week.dow)
 | |
|             : m
 | |
|             ? weekdays[m.day()]
 | |
|             : weekdays;
 | |
|     }
 | |
| 
 | |
|     function localeWeekdaysShort(m) {
 | |
|         return m === true
 | |
|             ? shiftWeekdays(this._weekdaysShort, this._week.dow)
 | |
|             : m
 | |
|             ? this._weekdaysShort[m.day()]
 | |
|             : this._weekdaysShort;
 | |
|     }
 | |
| 
 | |
|     function localeWeekdaysMin(m) {
 | |
|         return m === true
 | |
|             ? shiftWeekdays(this._weekdaysMin, this._week.dow)
 | |
|             : m
 | |
|             ? this._weekdaysMin[m.day()]
 | |
|             : this._weekdaysMin;
 | |
|     }
 | |
| 
 | |
|     function handleStrictParse$1(weekdayName, format, strict) {
 | |
|         var i,
 | |
|             ii,
 | |
|             mom,
 | |
|             llc = weekdayName.toLocaleLowerCase();
 | |
|         if (!this._weekdaysParse) {
 | |
|             this._weekdaysParse = [];
 | |
|             this._shortWeekdaysParse = [];
 | |
|             this._minWeekdaysParse = [];
 | |
| 
 | |
|             for (i = 0; i < 7; ++i) {
 | |
|                 mom = createUTC([2000, 1]).day(i);
 | |
|                 this._minWeekdaysParse[i] = this.weekdaysMin(
 | |
|                     mom,
 | |
|                     ''
 | |
|                 ).toLocaleLowerCase();
 | |
|                 this._shortWeekdaysParse[i] = this.weekdaysShort(
 | |
|                     mom,
 | |
|                     ''
 | |
|                 ).toLocaleLowerCase();
 | |
|                 this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         if (strict) {
 | |
|             if (format === 'dddd') {
 | |
|                 ii = indexOf.call(this._weekdaysParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             } else if (format === 'ddd') {
 | |
|                 ii = indexOf.call(this._shortWeekdaysParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             } else {
 | |
|                 ii = indexOf.call(this._minWeekdaysParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             }
 | |
|         } else {
 | |
|             if (format === 'dddd') {
 | |
|                 ii = indexOf.call(this._weekdaysParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._shortWeekdaysParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._minWeekdaysParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             } else if (format === 'ddd') {
 | |
|                 ii = indexOf.call(this._shortWeekdaysParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._weekdaysParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._minWeekdaysParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             } else {
 | |
|                 ii = indexOf.call(this._minWeekdaysParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._weekdaysParse, llc);
 | |
|                 if (ii !== -1) {
 | |
|                     return ii;
 | |
|                 }
 | |
|                 ii = indexOf.call(this._shortWeekdaysParse, llc);
 | |
|                 return ii !== -1 ? ii : null;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function localeWeekdaysParse(weekdayName, format, strict) {
 | |
|         var i, mom, regex;
 | |
| 
 | |
|         if (this._weekdaysParseExact) {
 | |
|             return handleStrictParse$1.call(this, weekdayName, format, strict);
 | |
|         }
 | |
| 
 | |
|         if (!this._weekdaysParse) {
 | |
|             this._weekdaysParse = [];
 | |
|             this._minWeekdaysParse = [];
 | |
|             this._shortWeekdaysParse = [];
 | |
|             this._fullWeekdaysParse = [];
 | |
|         }
 | |
| 
 | |
|         for (i = 0; i < 7; i++) {
 | |
|             // make the regex if we don't have it already
 | |
| 
 | |
|             mom = createUTC([2000, 1]).day(i);
 | |
|             if (strict && !this._fullWeekdaysParse[i]) {
 | |
|                 this._fullWeekdaysParse[i] = new RegExp(
 | |
|                     '^' + this.weekdays(mom, '').replace('.', '\\.?') + '$',
 | |
|                     'i'
 | |
|                 );
 | |
|                 this._shortWeekdaysParse[i] = new RegExp(
 | |
|                     '^' + this.weekdaysShort(mom, '').replace('.', '\\.?') + '$',
 | |
|                     'i'
 | |
|                 );
 | |
|                 this._minWeekdaysParse[i] = new RegExp(
 | |
|                     '^' + this.weekdaysMin(mom, '').replace('.', '\\.?') + '$',
 | |
|                     'i'
 | |
|                 );
 | |
|             }
 | |
|             if (!this._weekdaysParse[i]) {
 | |
|                 regex =
 | |
|                     '^' +
 | |
|                     this.weekdays(mom, '') +
 | |
|                     '|^' +
 | |
|                     this.weekdaysShort(mom, '') +
 | |
|                     '|^' +
 | |
|                     this.weekdaysMin(mom, '');
 | |
|                 this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
 | |
|             }
 | |
|             // test the regex
 | |
|             if (
 | |
|                 strict &&
 | |
|                 format === 'dddd' &&
 | |
|                 this._fullWeekdaysParse[i].test(weekdayName)
 | |
|             ) {
 | |
|                 return i;
 | |
|             } else if (
 | |
|                 strict &&
 | |
|                 format === 'ddd' &&
 | |
|                 this._shortWeekdaysParse[i].test(weekdayName)
 | |
|             ) {
 | |
|                 return i;
 | |
|             } else if (
 | |
|                 strict &&
 | |
|                 format === 'dd' &&
 | |
|                 this._minWeekdaysParse[i].test(weekdayName)
 | |
|             ) {
 | |
|                 return i;
 | |
|             } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
 | |
|                 return i;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function getSetDayOfWeek(input) {
 | |
|         if (!this.isValid()) {
 | |
|             return input != null ? this : NaN;
 | |
|         }
 | |
|         var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
 | |
|         if (input != null) {
 | |
|             input = parseWeekday(input, this.localeData());
 | |
|             return this.add(input - day, 'd');
 | |
|         } else {
 | |
|             return day;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function getSetLocaleDayOfWeek(input) {
 | |
|         if (!this.isValid()) {
 | |
|             return input != null ? this : NaN;
 | |
|         }
 | |
|         var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
 | |
|         return input == null ? weekday : this.add(input - weekday, 'd');
 | |
|     }
 | |
| 
 | |
|     function getSetISODayOfWeek(input) {
 | |
|         if (!this.isValid()) {
 | |
|             return input != null ? this : NaN;
 | |
|         }
 | |
| 
 | |
|         // behaves the same as moment#day except
 | |
|         // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
 | |
|         // as a setter, sunday should belong to the previous week.
 | |
| 
 | |
|         if (input != null) {
 | |
|             var weekday = parseIsoWeekday(input, this.localeData());
 | |
|             return this.day(this.day() % 7 ? weekday : weekday - 7);
 | |
|         } else {
 | |
|             return this.day() || 7;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function weekdaysRegex(isStrict) {
 | |
|         if (this._weekdaysParseExact) {
 | |
|             if (!hasOwnProp(this, '_weekdaysRegex')) {
 | |
|                 computeWeekdaysParse.call(this);
 | |
|             }
 | |
|             if (isStrict) {
 | |
|                 return this._weekdaysStrictRegex;
 | |
|             } else {
 | |
|                 return this._weekdaysRegex;
 | |
|             }
 | |
|         } else {
 | |
|             if (!hasOwnProp(this, '_weekdaysRegex')) {
 | |
|                 this._weekdaysRegex = defaultWeekdaysRegex;
 | |
|             }
 | |
|             return this._weekdaysStrictRegex && isStrict
 | |
|                 ? this._weekdaysStrictRegex
 | |
|                 : this._weekdaysRegex;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function weekdaysShortRegex(isStrict) {
 | |
|         if (this._weekdaysParseExact) {
 | |
|             if (!hasOwnProp(this, '_weekdaysRegex')) {
 | |
|                 computeWeekdaysParse.call(this);
 | |
|             }
 | |
|             if (isStrict) {
 | |
|                 return this._weekdaysShortStrictRegex;
 | |
|             } else {
 | |
|                 return this._weekdaysShortRegex;
 | |
|             }
 | |
|         } else {
 | |
|             if (!hasOwnProp(this, '_weekdaysShortRegex')) {
 | |
|                 this._weekdaysShortRegex = defaultWeekdaysShortRegex;
 | |
|             }
 | |
|             return this._weekdaysShortStrictRegex && isStrict
 | |
|                 ? this._weekdaysShortStrictRegex
 | |
|                 : this._weekdaysShortRegex;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function weekdaysMinRegex(isStrict) {
 | |
|         if (this._weekdaysParseExact) {
 | |
|             if (!hasOwnProp(this, '_weekdaysRegex')) {
 | |
|                 computeWeekdaysParse.call(this);
 | |
|             }
 | |
|             if (isStrict) {
 | |
|                 return this._weekdaysMinStrictRegex;
 | |
|             } else {
 | |
|                 return this._weekdaysMinRegex;
 | |
|             }
 | |
|         } else {
 | |
|             if (!hasOwnProp(this, '_weekdaysMinRegex')) {
 | |
|                 this._weekdaysMinRegex = defaultWeekdaysMinRegex;
 | |
|             }
 | |
|             return this._weekdaysMinStrictRegex && isStrict
 | |
|                 ? this._weekdaysMinStrictRegex
 | |
|                 : this._weekdaysMinRegex;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function computeWeekdaysParse() {
 | |
|         function cmpLenRev(a, b) {
 | |
|             return b.length - a.length;
 | |
|         }
 | |
| 
 | |
|         var minPieces = [],
 | |
|             shortPieces = [],
 | |
|             longPieces = [],
 | |
|             mixedPieces = [],
 | |
|             i,
 | |
|             mom,
 | |
|             minp,
 | |
|             shortp,
 | |
|             longp;
 | |
|         for (i = 0; i < 7; i++) {
 | |
|             // make the regex if we don't have it already
 | |
|             mom = createUTC([2000, 1]).day(i);
 | |
|             minp = regexEscape(this.weekdaysMin(mom, ''));
 | |
|             shortp = regexEscape(this.weekdaysShort(mom, ''));
 | |
|             longp = regexEscape(this.weekdays(mom, ''));
 | |
|             minPieces.push(minp);
 | |
|             shortPieces.push(shortp);
 | |
|             longPieces.push(longp);
 | |
|             mixedPieces.push(minp);
 | |
|             mixedPieces.push(shortp);
 | |
|             mixedPieces.push(longp);
 | |
|         }
 | |
|         // Sorting makes sure if one weekday (or abbr) is a prefix of another it
 | |
|         // will match the longer piece.
 | |
|         minPieces.sort(cmpLenRev);
 | |
|         shortPieces.sort(cmpLenRev);
 | |
|         longPieces.sort(cmpLenRev);
 | |
|         mixedPieces.sort(cmpLenRev);
 | |
| 
 | |
|         this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
 | |
|         this._weekdaysShortRegex = this._weekdaysRegex;
 | |
|         this._weekdaysMinRegex = this._weekdaysRegex;
 | |
| 
 | |
|         this._weekdaysStrictRegex = new RegExp(
 | |
|             '^(' + longPieces.join('|') + ')',
 | |
|             'i'
 | |
|         );
 | |
|         this._weekdaysShortStrictRegex = new RegExp(
 | |
|             '^(' + shortPieces.join('|') + ')',
 | |
|             'i'
 | |
|         );
 | |
|         this._weekdaysMinStrictRegex = new RegExp(
 | |
|             '^(' + minPieces.join('|') + ')',
 | |
|             'i'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     function hFormat() {
 | |
|         return this.hours() % 12 || 12;
 | |
|     }
 | |
| 
 | |
|     function kFormat() {
 | |
|         return this.hours() || 24;
 | |
|     }
 | |
| 
 | |
|     addFormatToken('H', ['HH', 2], 0, 'hour');
 | |
|     addFormatToken('h', ['hh', 2], 0, hFormat);
 | |
|     addFormatToken('k', ['kk', 2], 0, kFormat);
 | |
| 
 | |
|     addFormatToken('hmm', 0, 0, function () {
 | |
|         return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
 | |
|     });
 | |
| 
 | |
|     addFormatToken('hmmss', 0, 0, function () {
 | |
|         return (
 | |
|             '' +
 | |
|             hFormat.apply(this) +
 | |
|             zeroFill(this.minutes(), 2) +
 | |
|             zeroFill(this.seconds(), 2)
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     addFormatToken('Hmm', 0, 0, function () {
 | |
|         return '' + this.hours() + zeroFill(this.minutes(), 2);
 | |
|     });
 | |
| 
 | |
|     addFormatToken('Hmmss', 0, 0, function () {
 | |
|         return (
 | |
|             '' +
 | |
|             this.hours() +
 | |
|             zeroFill(this.minutes(), 2) +
 | |
|             zeroFill(this.seconds(), 2)
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     function meridiem(token, lowercase) {
 | |
|         addFormatToken(token, 0, 0, function () {
 | |
|             return this.localeData().meridiem(
 | |
|                 this.hours(),
 | |
|                 this.minutes(),
 | |
|                 lowercase
 | |
|             );
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     meridiem('a', true);
 | |
|     meridiem('A', false);
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('hour', 'h');
 | |
| 
 | |
|     // PRIORITY
 | |
|     addUnitPriority('hour', 13);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     function matchMeridiem(isStrict, locale) {
 | |
|         return locale._meridiemParse;
 | |
|     }
 | |
| 
 | |
|     addRegexToken('a', matchMeridiem);
 | |
|     addRegexToken('A', matchMeridiem);
 | |
|     addRegexToken('H', match1to2);
 | |
|     addRegexToken('h', match1to2);
 | |
|     addRegexToken('k', match1to2);
 | |
|     addRegexToken('HH', match1to2, match2);
 | |
|     addRegexToken('hh', match1to2, match2);
 | |
|     addRegexToken('kk', match1to2, match2);
 | |
| 
 | |
|     addRegexToken('hmm', match3to4);
 | |
|     addRegexToken('hmmss', match5to6);
 | |
|     addRegexToken('Hmm', match3to4);
 | |
|     addRegexToken('Hmmss', match5to6);
 | |
| 
 | |
|     addParseToken(['H', 'HH'], HOUR);
 | |
|     addParseToken(['k', 'kk'], function (input, array, config) {
 | |
|         var kInput = toInt(input);
 | |
|         array[HOUR] = kInput === 24 ? 0 : kInput;
 | |
|     });
 | |
|     addParseToken(['a', 'A'], function (input, array, config) {
 | |
|         config._isPm = config._locale.isPM(input);
 | |
|         config._meridiem = input;
 | |
|     });
 | |
|     addParseToken(['h', 'hh'], function (input, array, config) {
 | |
|         array[HOUR] = toInt(input);
 | |
|         getParsingFlags(config).bigHour = true;
 | |
|     });
 | |
|     addParseToken('hmm', function (input, array, config) {
 | |
|         var pos = input.length - 2;
 | |
|         array[HOUR] = toInt(input.substr(0, pos));
 | |
|         array[MINUTE] = toInt(input.substr(pos));
 | |
|         getParsingFlags(config).bigHour = true;
 | |
|     });
 | |
|     addParseToken('hmmss', function (input, array, config) {
 | |
|         var pos1 = input.length - 4,
 | |
|             pos2 = input.length - 2;
 | |
|         array[HOUR] = toInt(input.substr(0, pos1));
 | |
|         array[MINUTE] = toInt(input.substr(pos1, 2));
 | |
|         array[SECOND] = toInt(input.substr(pos2));
 | |
|         getParsingFlags(config).bigHour = true;
 | |
|     });
 | |
|     addParseToken('Hmm', function (input, array, config) {
 | |
|         var pos = input.length - 2;
 | |
|         array[HOUR] = toInt(input.substr(0, pos));
 | |
|         array[MINUTE] = toInt(input.substr(pos));
 | |
|     });
 | |
|     addParseToken('Hmmss', function (input, array, config) {
 | |
|         var pos1 = input.length - 4,
 | |
|             pos2 = input.length - 2;
 | |
|         array[HOUR] = toInt(input.substr(0, pos1));
 | |
|         array[MINUTE] = toInt(input.substr(pos1, 2));
 | |
|         array[SECOND] = toInt(input.substr(pos2));
 | |
|     });
 | |
| 
 | |
|     // LOCALES
 | |
| 
 | |
|     function localeIsPM(input) {
 | |
|         // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
 | |
|         // Using charAt should be more compatible.
 | |
|         return (input + '').toLowerCase().charAt(0) === 'p';
 | |
|     }
 | |
| 
 | |
|     var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i,
 | |
|         // Setting the hour should keep the time, because the user explicitly
 | |
|         // specified which hour they want. So trying to maintain the same hour (in
 | |
|         // a new timezone) makes sense. Adding/subtracting hours does not follow
 | |
|         // this rule.
 | |
|         getSetHour = makeGetSet('Hours', true);
 | |
| 
 | |
|     function localeMeridiem(hours, minutes, isLower) {
 | |
|         if (hours > 11) {
 | |
|             return isLower ? 'pm' : 'PM';
 | |
|         } else {
 | |
|             return isLower ? 'am' : 'AM';
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     var baseConfig = {
 | |
|         calendar: defaultCalendar,
 | |
|         longDateFormat: defaultLongDateFormat,
 | |
|         invalidDate: defaultInvalidDate,
 | |
|         ordinal: defaultOrdinal,
 | |
|         dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
 | |
|         relativeTime: defaultRelativeTime,
 | |
| 
 | |
|         months: defaultLocaleMonths,
 | |
|         monthsShort: defaultLocaleMonthsShort,
 | |
| 
 | |
|         week: defaultLocaleWeek,
 | |
| 
 | |
|         weekdays: defaultLocaleWeekdays,
 | |
|         weekdaysMin: defaultLocaleWeekdaysMin,
 | |
|         weekdaysShort: defaultLocaleWeekdaysShort,
 | |
| 
 | |
|         meridiemParse: defaultLocaleMeridiemParse,
 | |
|     };
 | |
| 
 | |
|     // internal storage for locale config files
 | |
|     var locales = {},
 | |
|         localeFamilies = {},
 | |
|         globalLocale;
 | |
| 
 | |
|     function commonPrefix(arr1, arr2) {
 | |
|         var i,
 | |
|             minl = Math.min(arr1.length, arr2.length);
 | |
|         for (i = 0; i < minl; i += 1) {
 | |
|             if (arr1[i] !== arr2[i]) {
 | |
|                 return i;
 | |
|             }
 | |
|         }
 | |
|         return minl;
 | |
|     }
 | |
| 
 | |
|     function normalizeLocale(key) {
 | |
|         return key ? key.toLowerCase().replace('_', '-') : key;
 | |
|     }
 | |
| 
 | |
|     // pick the locale from the array
 | |
|     // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
 | |
|     // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
 | |
|     function chooseLocale(names) {
 | |
|         var i = 0,
 | |
|             j,
 | |
|             next,
 | |
|             locale,
 | |
|             split;
 | |
| 
 | |
|         while (i < names.length) {
 | |
|             split = normalizeLocale(names[i]).split('-');
 | |
|             j = split.length;
 | |
|             next = normalizeLocale(names[i + 1]);
 | |
|             next = next ? next.split('-') : null;
 | |
|             while (j > 0) {
 | |
|                 locale = loadLocale(split.slice(0, j).join('-'));
 | |
|                 if (locale) {
 | |
|                     return locale;
 | |
|                 }
 | |
|                 if (
 | |
|                     next &&
 | |
|                     next.length >= j &&
 | |
|                     commonPrefix(split, next) >= j - 1
 | |
|                 ) {
 | |
|                     //the next array item is better than a shallower substring of this one
 | |
|                     break;
 | |
|                 }
 | |
|                 j--;
 | |
|             }
 | |
|             i++;
 | |
|         }
 | |
|         return globalLocale;
 | |
|     }
 | |
| 
 | |
|     function loadLocale(name) {
 | |
|         var oldLocale = null,
 | |
|             aliasedRequire;
 | |
|         // TODO: Find a better way to register and load all the locales in Node
 | |
|         if (
 | |
|             locales[name] === undefined &&
 | |
|             "object" !== 'undefined' &&
 | |
|             module &&
 | |
|             module.exports
 | |
|         ) {
 | |
|             try {
 | |
|                 oldLocale = globalLocale._abbr;
 | |
|                 aliasedRequire = require;
 | |
|                 aliasedRequire('./locale/' + name);
 | |
|                 getSetGlobalLocale(oldLocale);
 | |
|             } catch (e) {
 | |
|                 // mark as not found to avoid repeating expensive file require call causing high CPU
 | |
|                 // when trying to find en-US, en_US, en-us for every format call
 | |
|                 locales[name] = null; // null means not found
 | |
|             }
 | |
|         }
 | |
|         return locales[name];
 | |
|     }
 | |
| 
 | |
|     // This function will load locale and then set the global locale.  If
 | |
|     // no arguments are passed in, it will simply return the current global
 | |
|     // locale key.
 | |
|     function getSetGlobalLocale(key, values) {
 | |
|         var data;
 | |
|         if (key) {
 | |
|             if (isUndefined(values)) {
 | |
|                 data = getLocale(key);
 | |
|             } else {
 | |
|                 data = defineLocale(key, values);
 | |
|             }
 | |
| 
 | |
|             if (data) {
 | |
|                 // moment.duration._locale = moment._locale = data;
 | |
|                 globalLocale = data;
 | |
|             } else {
 | |
|                 if (typeof console !== 'undefined' && console.warn) {
 | |
|                     //warn user if arguments are passed but the locale could not be set
 | |
|                     console.warn(
 | |
|                         'Locale ' + key + ' not found. Did you forget to load it?'
 | |
|                     );
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return globalLocale._abbr;
 | |
|     }
 | |
| 
 | |
|     function defineLocale(name, config) {
 | |
|         if (config !== null) {
 | |
|             var locale,
 | |
|                 parentConfig = baseConfig;
 | |
|             config.abbr = name;
 | |
|             if (locales[name] != null) {
 | |
|                 deprecateSimple(
 | |
|                     'defineLocaleOverride',
 | |
|                     'use moment.updateLocale(localeName, config) to change ' +
 | |
|                         'an existing locale. moment.defineLocale(localeName, ' +
 | |
|                         'config) should only be used for creating a new locale ' +
 | |
|                         'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'
 | |
|                 );
 | |
|                 parentConfig = locales[name]._config;
 | |
|             } else if (config.parentLocale != null) {
 | |
|                 if (locales[config.parentLocale] != null) {
 | |
|                     parentConfig = locales[config.parentLocale]._config;
 | |
|                 } else {
 | |
|                     locale = loadLocale(config.parentLocale);
 | |
|                     if (locale != null) {
 | |
|                         parentConfig = locale._config;
 | |
|                     } else {
 | |
|                         if (!localeFamilies[config.parentLocale]) {
 | |
|                             localeFamilies[config.parentLocale] = [];
 | |
|                         }
 | |
|                         localeFamilies[config.parentLocale].push({
 | |
|                             name: name,
 | |
|                             config: config,
 | |
|                         });
 | |
|                         return null;
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|             locales[name] = new Locale(mergeConfigs(parentConfig, config));
 | |
| 
 | |
|             if (localeFamilies[name]) {
 | |
|                 localeFamilies[name].forEach(function (x) {
 | |
|                     defineLocale(x.name, x.config);
 | |
|                 });
 | |
|             }
 | |
| 
 | |
|             // backwards compat for now: also set the locale
 | |
|             // make sure we set the locale AFTER all child locales have been
 | |
|             // created, so we won't end up with the child locale set.
 | |
|             getSetGlobalLocale(name);
 | |
| 
 | |
|             return locales[name];
 | |
|         } else {
 | |
|             // useful for testing
 | |
|             delete locales[name];
 | |
|             return null;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function updateLocale(name, config) {
 | |
|         if (config != null) {
 | |
|             var locale,
 | |
|                 tmpLocale,
 | |
|                 parentConfig = baseConfig;
 | |
| 
 | |
|             if (locales[name] != null && locales[name].parentLocale != null) {
 | |
|                 // Update existing child locale in-place to avoid memory-leaks
 | |
|                 locales[name].set(mergeConfigs(locales[name]._config, config));
 | |
|             } else {
 | |
|                 // MERGE
 | |
|                 tmpLocale = loadLocale(name);
 | |
|                 if (tmpLocale != null) {
 | |
|                     parentConfig = tmpLocale._config;
 | |
|                 }
 | |
|                 config = mergeConfigs(parentConfig, config);
 | |
|                 if (tmpLocale == null) {
 | |
|                     // updateLocale is called for creating a new locale
 | |
|                     // Set abbr so it will have a name (getters return
 | |
|                     // undefined otherwise).
 | |
|                     config.abbr = name;
 | |
|                 }
 | |
|                 locale = new Locale(config);
 | |
|                 locale.parentLocale = locales[name];
 | |
|                 locales[name] = locale;
 | |
|             }
 | |
| 
 | |
|             // backwards compat for now: also set the locale
 | |
|             getSetGlobalLocale(name);
 | |
|         } else {
 | |
|             // pass null for config to unupdate, useful for tests
 | |
|             if (locales[name] != null) {
 | |
|                 if (locales[name].parentLocale != null) {
 | |
|                     locales[name] = locales[name].parentLocale;
 | |
|                     if (name === getSetGlobalLocale()) {
 | |
|                         getSetGlobalLocale(name);
 | |
|                     }
 | |
|                 } else if (locales[name] != null) {
 | |
|                     delete locales[name];
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         return locales[name];
 | |
|     }
 | |
| 
 | |
|     // returns locale data
 | |
|     function getLocale(key) {
 | |
|         var locale;
 | |
| 
 | |
|         if (key && key._locale && key._locale._abbr) {
 | |
|             key = key._locale._abbr;
 | |
|         }
 | |
| 
 | |
|         if (!key) {
 | |
|             return globalLocale;
 | |
|         }
 | |
| 
 | |
|         if (!isArray(key)) {
 | |
|             //short-circuit everything else
 | |
|             locale = loadLocale(key);
 | |
|             if (locale) {
 | |
|                 return locale;
 | |
|             }
 | |
|             key = [key];
 | |
|         }
 | |
| 
 | |
|         return chooseLocale(key);
 | |
|     }
 | |
| 
 | |
|     function listLocales() {
 | |
|         return keys(locales);
 | |
|     }
 | |
| 
 | |
|     function checkOverflow(m) {
 | |
|         var overflow,
 | |
|             a = m._a;
 | |
| 
 | |
|         if (a && getParsingFlags(m).overflow === -2) {
 | |
|             overflow =
 | |
|                 a[MONTH] < 0 || a[MONTH] > 11
 | |
|                     ? MONTH
 | |
|                     : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])
 | |
|                     ? DATE
 | |
|                     : a[HOUR] < 0 ||
 | |
|                       a[HOUR] > 24 ||
 | |
|                       (a[HOUR] === 24 &&
 | |
|                           (a[MINUTE] !== 0 ||
 | |
|                               a[SECOND] !== 0 ||
 | |
|                               a[MILLISECOND] !== 0))
 | |
|                     ? HOUR
 | |
|                     : a[MINUTE] < 0 || a[MINUTE] > 59
 | |
|                     ? MINUTE
 | |
|                     : a[SECOND] < 0 || a[SECOND] > 59
 | |
|                     ? SECOND
 | |
|                     : a[MILLISECOND] < 0 || a[MILLISECOND] > 999
 | |
|                     ? MILLISECOND
 | |
|                     : -1;
 | |
| 
 | |
|             if (
 | |
|                 getParsingFlags(m)._overflowDayOfYear &&
 | |
|                 (overflow < YEAR || overflow > DATE)
 | |
|             ) {
 | |
|                 overflow = DATE;
 | |
|             }
 | |
|             if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
 | |
|                 overflow = WEEK;
 | |
|             }
 | |
|             if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
 | |
|                 overflow = WEEKDAY;
 | |
|             }
 | |
| 
 | |
|             getParsingFlags(m).overflow = overflow;
 | |
|         }
 | |
| 
 | |
|         return m;
 | |
|     }
 | |
| 
 | |
|     // iso 8601 regex
 | |
|     // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
 | |
|     var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
 | |
|         basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,
 | |
|         tzRegex = /Z|[+-]\d\d(?::?\d\d)?/,
 | |
|         isoDates = [
 | |
|             ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
 | |
|             ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
 | |
|             ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
 | |
|             ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
 | |
|             ['YYYY-DDD', /\d{4}-\d{3}/],
 | |
|             ['YYYY-MM', /\d{4}-\d\d/, false],
 | |
|             ['YYYYYYMMDD', /[+-]\d{10}/],
 | |
|             ['YYYYMMDD', /\d{8}/],
 | |
|             ['GGGG[W]WWE', /\d{4}W\d{3}/],
 | |
|             ['GGGG[W]WW', /\d{4}W\d{2}/, false],
 | |
|             ['YYYYDDD', /\d{7}/],
 | |
|             ['YYYYMM', /\d{6}/, false],
 | |
|             ['YYYY', /\d{4}/, false],
 | |
|         ],
 | |
|         // iso time formats and regexes
 | |
|         isoTimes = [
 | |
|             ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
 | |
|             ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
 | |
|             ['HH:mm:ss', /\d\d:\d\d:\d\d/],
 | |
|             ['HH:mm', /\d\d:\d\d/],
 | |
|             ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
 | |
|             ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
 | |
|             ['HHmmss', /\d\d\d\d\d\d/],
 | |
|             ['HHmm', /\d\d\d\d/],
 | |
|             ['HH', /\d\d/],
 | |
|         ],
 | |
|         aspNetJsonRegex = /^\/?Date\((-?\d+)/i,
 | |
|         // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
 | |
|         rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,
 | |
|         obsOffsets = {
 | |
|             UT: 0,
 | |
|             GMT: 0,
 | |
|             EDT: -4 * 60,
 | |
|             EST: -5 * 60,
 | |
|             CDT: -5 * 60,
 | |
|             CST: -6 * 60,
 | |
|             MDT: -6 * 60,
 | |
|             MST: -7 * 60,
 | |
|             PDT: -7 * 60,
 | |
|             PST: -8 * 60,
 | |
|         };
 | |
| 
 | |
|     // date from iso format
 | |
|     function configFromISO(config) {
 | |
|         var i,
 | |
|             l,
 | |
|             string = config._i,
 | |
|             match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
 | |
|             allowTime,
 | |
|             dateFormat,
 | |
|             timeFormat,
 | |
|             tzFormat;
 | |
| 
 | |
|         if (match) {
 | |
|             getParsingFlags(config).iso = true;
 | |
| 
 | |
|             for (i = 0, l = isoDates.length; i < l; i++) {
 | |
|                 if (isoDates[i][1].exec(match[1])) {
 | |
|                     dateFormat = isoDates[i][0];
 | |
|                     allowTime = isoDates[i][2] !== false;
 | |
|                     break;
 | |
|                 }
 | |
|             }
 | |
|             if (dateFormat == null) {
 | |
|                 config._isValid = false;
 | |
|                 return;
 | |
|             }
 | |
|             if (match[3]) {
 | |
|                 for (i = 0, l = isoTimes.length; i < l; i++) {
 | |
|                     if (isoTimes[i][1].exec(match[3])) {
 | |
|                         // match[2] should be 'T' or space
 | |
|                         timeFormat = (match[2] || ' ') + isoTimes[i][0];
 | |
|                         break;
 | |
|                     }
 | |
|                 }
 | |
|                 if (timeFormat == null) {
 | |
|                     config._isValid = false;
 | |
|                     return;
 | |
|                 }
 | |
|             }
 | |
|             if (!allowTime && timeFormat != null) {
 | |
|                 config._isValid = false;
 | |
|                 return;
 | |
|             }
 | |
|             if (match[4]) {
 | |
|                 if (tzRegex.exec(match[4])) {
 | |
|                     tzFormat = 'Z';
 | |
|                 } else {
 | |
|                     config._isValid = false;
 | |
|                     return;
 | |
|                 }
 | |
|             }
 | |
|             config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
 | |
|             configFromStringAndFormat(config);
 | |
|         } else {
 | |
|             config._isValid = false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function extractFromRFC2822Strings(
 | |
|         yearStr,
 | |
|         monthStr,
 | |
|         dayStr,
 | |
|         hourStr,
 | |
|         minuteStr,
 | |
|         secondStr
 | |
|     ) {
 | |
|         var result = [
 | |
|             untruncateYear(yearStr),
 | |
|             defaultLocaleMonthsShort.indexOf(monthStr),
 | |
|             parseInt(dayStr, 10),
 | |
|             parseInt(hourStr, 10),
 | |
|             parseInt(minuteStr, 10),
 | |
|         ];
 | |
| 
 | |
|         if (secondStr) {
 | |
|             result.push(parseInt(secondStr, 10));
 | |
|         }
 | |
| 
 | |
|         return result;
 | |
|     }
 | |
| 
 | |
|     function untruncateYear(yearStr) {
 | |
|         var year = parseInt(yearStr, 10);
 | |
|         if (year <= 49) {
 | |
|             return 2000 + year;
 | |
|         } else if (year <= 999) {
 | |
|             return 1900 + year;
 | |
|         }
 | |
|         return year;
 | |
|     }
 | |
| 
 | |
|     function preprocessRFC2822(s) {
 | |
|         // Remove comments and folding whitespace and replace multiple-spaces with a single space
 | |
|         return s
 | |
|             .replace(/\([^)]*\)|[\n\t]/g, ' ')
 | |
|             .replace(/(\s\s+)/g, ' ')
 | |
|             .replace(/^\s\s*/, '')
 | |
|             .replace(/\s\s*$/, '');
 | |
|     }
 | |
| 
 | |
|     function checkWeekday(weekdayStr, parsedInput, config) {
 | |
|         if (weekdayStr) {
 | |
|             // TODO: Replace the vanilla JS Date object with an independent day-of-week check.
 | |
|             var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
 | |
|                 weekdayActual = new Date(
 | |
|                     parsedInput[0],
 | |
|                     parsedInput[1],
 | |
|                     parsedInput[2]
 | |
|                 ).getDay();
 | |
|             if (weekdayProvided !== weekdayActual) {
 | |
|                 getParsingFlags(config).weekdayMismatch = true;
 | |
|                 config._isValid = false;
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     function calculateOffset(obsOffset, militaryOffset, numOffset) {
 | |
|         if (obsOffset) {
 | |
|             return obsOffsets[obsOffset];
 | |
|         } else if (militaryOffset) {
 | |
|             // the only allowed military tz is Z
 | |
|             return 0;
 | |
|         } else {
 | |
|             var hm = parseInt(numOffset, 10),
 | |
|                 m = hm % 100,
 | |
|                 h = (hm - m) / 100;
 | |
|             return h * 60 + m;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // date and time from ref 2822 format
 | |
|     function configFromRFC2822(config) {
 | |
|         var match = rfc2822.exec(preprocessRFC2822(config._i)),
 | |
|             parsedArray;
 | |
|         if (match) {
 | |
|             parsedArray = extractFromRFC2822Strings(
 | |
|                 match[4],
 | |
|                 match[3],
 | |
|                 match[2],
 | |
|                 match[5],
 | |
|                 match[6],
 | |
|                 match[7]
 | |
|             );
 | |
|             if (!checkWeekday(match[1], parsedArray, config)) {
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             config._a = parsedArray;
 | |
|             config._tzm = calculateOffset(match[8], match[9], match[10]);
 | |
| 
 | |
|             config._d = createUTCDate.apply(null, config._a);
 | |
|             config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
 | |
| 
 | |
|             getParsingFlags(config).rfc2822 = true;
 | |
|         } else {
 | |
|             config._isValid = false;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict
 | |
|     function configFromString(config) {
 | |
|         var matched = aspNetJsonRegex.exec(config._i);
 | |
|         if (matched !== null) {
 | |
|             config._d = new Date(+matched[1]);
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         configFromISO(config);
 | |
|         if (config._isValid === false) {
 | |
|             delete config._isValid;
 | |
|         } else {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         configFromRFC2822(config);
 | |
|         if (config._isValid === false) {
 | |
|             delete config._isValid;
 | |
|         } else {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         if (config._strict) {
 | |
|             config._isValid = false;
 | |
|         } else {
 | |
|             // Final attempt, use Input Fallback
 | |
|             hooks.createFromInputFallback(config);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     hooks.createFromInputFallback = deprecate(
 | |
|         'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
 | |
|             'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
 | |
|             'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',
 | |
|         function (config) {
 | |
|             config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
 | |
|         }
 | |
|     );
 | |
| 
 | |
|     // Pick the first defined of two or three arguments.
 | |
|     function defaults(a, b, c) {
 | |
|         if (a != null) {
 | |
|             return a;
 | |
|         }
 | |
|         if (b != null) {
 | |
|             return b;
 | |
|         }
 | |
|         return c;
 | |
|     }
 | |
| 
 | |
|     function currentDateArray(config) {
 | |
|         // hooks is actually the exported moment object
 | |
|         var nowValue = new Date(hooks.now());
 | |
|         if (config._useUTC) {
 | |
|             return [
 | |
|                 nowValue.getUTCFullYear(),
 | |
|                 nowValue.getUTCMonth(),
 | |
|                 nowValue.getUTCDate(),
 | |
|             ];
 | |
|         }
 | |
|         return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
 | |
|     }
 | |
| 
 | |
|     // convert an array to a date.
 | |
|     // the array should mirror the parameters below
 | |
|     // note: all values past the year are optional and will default to the lowest possible value.
 | |
|     // [year, month, day , hour, minute, second, millisecond]
 | |
|     function configFromArray(config) {
 | |
|         var i,
 | |
|             date,
 | |
|             input = [],
 | |
|             currentDate,
 | |
|             expectedWeekday,
 | |
|             yearToUse;
 | |
| 
 | |
|         if (config._d) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         currentDate = currentDateArray(config);
 | |
| 
 | |
|         //compute day of the year from weeks and weekdays
 | |
|         if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
 | |
|             dayOfYearFromWeekInfo(config);
 | |
|         }
 | |
| 
 | |
|         //if the day of the year is set, figure out what it is
 | |
|         if (config._dayOfYear != null) {
 | |
|             yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
 | |
| 
 | |
|             if (
 | |
|                 config._dayOfYear > daysInYear(yearToUse) ||
 | |
|                 config._dayOfYear === 0
 | |
|             ) {
 | |
|                 getParsingFlags(config)._overflowDayOfYear = true;
 | |
|             }
 | |
| 
 | |
|             date = createUTCDate(yearToUse, 0, config._dayOfYear);
 | |
|             config._a[MONTH] = date.getUTCMonth();
 | |
|             config._a[DATE] = date.getUTCDate();
 | |
|         }
 | |
| 
 | |
|         // Default to current date.
 | |
|         // * if no year, month, day of month are given, default to today
 | |
|         // * if day of month is given, default month and year
 | |
|         // * if month is given, default only year
 | |
|         // * if year is given, don't default anything
 | |
|         for (i = 0; i < 3 && config._a[i] == null; ++i) {
 | |
|             config._a[i] = input[i] = currentDate[i];
 | |
|         }
 | |
| 
 | |
|         // Zero out whatever was not defaulted, including time
 | |
|         for (; i < 7; i++) {
 | |
|             config._a[i] = input[i] =
 | |
|                 config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];
 | |
|         }
 | |
| 
 | |
|         // Check for 24:00:00.000
 | |
|         if (
 | |
|             config._a[HOUR] === 24 &&
 | |
|             config._a[MINUTE] === 0 &&
 | |
|             config._a[SECOND] === 0 &&
 | |
|             config._a[MILLISECOND] === 0
 | |
|         ) {
 | |
|             config._nextDay = true;
 | |
|             config._a[HOUR] = 0;
 | |
|         }
 | |
| 
 | |
|         config._d = (config._useUTC ? createUTCDate : createDate).apply(
 | |
|             null,
 | |
|             input
 | |
|         );
 | |
|         expectedWeekday = config._useUTC
 | |
|             ? config._d.getUTCDay()
 | |
|             : config._d.getDay();
 | |
| 
 | |
|         // Apply timezone offset from input. The actual utcOffset can be changed
 | |
|         // with parseZone.
 | |
|         if (config._tzm != null) {
 | |
|             config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
 | |
|         }
 | |
| 
 | |
|         if (config._nextDay) {
 | |
|             config._a[HOUR] = 24;
 | |
|         }
 | |
| 
 | |
|         // check for mismatching day of week
 | |
|         if (
 | |
|             config._w &&
 | |
|             typeof config._w.d !== 'undefined' &&
 | |
|             config._w.d !== expectedWeekday
 | |
|         ) {
 | |
|             getParsingFlags(config).weekdayMismatch = true;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function dayOfYearFromWeekInfo(config) {
 | |
|         var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;
 | |
| 
 | |
|         w = config._w;
 | |
|         if (w.GG != null || w.W != null || w.E != null) {
 | |
|             dow = 1;
 | |
|             doy = 4;
 | |
| 
 | |
|             // TODO: We need to take the current isoWeekYear, but that depends on
 | |
|             // how we interpret now (local, utc, fixed offset). So create
 | |
|             // a now version of current config (take local/utc/offset flags, and
 | |
|             // create now).
 | |
|             weekYear = defaults(
 | |
|                 w.GG,
 | |
|                 config._a[YEAR],
 | |
|                 weekOfYear(createLocal(), 1, 4).year
 | |
|             );
 | |
|             week = defaults(w.W, 1);
 | |
|             weekday = defaults(w.E, 1);
 | |
|             if (weekday < 1 || weekday > 7) {
 | |
|                 weekdayOverflow = true;
 | |
|             }
 | |
|         } else {
 | |
|             dow = config._locale._week.dow;
 | |
|             doy = config._locale._week.doy;
 | |
| 
 | |
|             curWeek = weekOfYear(createLocal(), dow, doy);
 | |
| 
 | |
|             weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
 | |
| 
 | |
|             // Default to current week.
 | |
|             week = defaults(w.w, curWeek.week);
 | |
| 
 | |
|             if (w.d != null) {
 | |
|                 // weekday -- low day numbers are considered next week
 | |
|                 weekday = w.d;
 | |
|                 if (weekday < 0 || weekday > 6) {
 | |
|                     weekdayOverflow = true;
 | |
|                 }
 | |
|             } else if (w.e != null) {
 | |
|                 // local weekday -- counting starts from beginning of week
 | |
|                 weekday = w.e + dow;
 | |
|                 if (w.e < 0 || w.e > 6) {
 | |
|                     weekdayOverflow = true;
 | |
|                 }
 | |
|             } else {
 | |
|                 // default to beginning of week
 | |
|                 weekday = dow;
 | |
|             }
 | |
|         }
 | |
|         if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
 | |
|             getParsingFlags(config)._overflowWeeks = true;
 | |
|         } else if (weekdayOverflow != null) {
 | |
|             getParsingFlags(config)._overflowWeekday = true;
 | |
|         } else {
 | |
|             temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
 | |
|             config._a[YEAR] = temp.year;
 | |
|             config._dayOfYear = temp.dayOfYear;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // constant that refers to the ISO standard
 | |
|     hooks.ISO_8601 = function () {};
 | |
| 
 | |
|     // constant that refers to the RFC 2822 form
 | |
|     hooks.RFC_2822 = function () {};
 | |
| 
 | |
|     // date from string and format string
 | |
|     function configFromStringAndFormat(config) {
 | |
|         // TODO: Move this to another part of the creation flow to prevent circular deps
 | |
|         if (config._f === hooks.ISO_8601) {
 | |
|             configFromISO(config);
 | |
|             return;
 | |
|         }
 | |
|         if (config._f === hooks.RFC_2822) {
 | |
|             configFromRFC2822(config);
 | |
|             return;
 | |
|         }
 | |
|         config._a = [];
 | |
|         getParsingFlags(config).empty = true;
 | |
| 
 | |
|         // This array is used to make a Date, either with `new Date` or `Date.UTC`
 | |
|         var string = '' + config._i,
 | |
|             i,
 | |
|             parsedInput,
 | |
|             tokens,
 | |
|             token,
 | |
|             skipped,
 | |
|             stringLength = string.length,
 | |
|             totalParsedInputLength = 0,
 | |
|             era;
 | |
| 
 | |
|         tokens =
 | |
|             expandFormat(config._f, config._locale).match(formattingTokens) || [];
 | |
| 
 | |
|         for (i = 0; i < tokens.length; i++) {
 | |
|             token = tokens[i];
 | |
|             parsedInput = (string.match(getParseRegexForToken(token, config)) ||
 | |
|                 [])[0];
 | |
|             if (parsedInput) {
 | |
|                 skipped = string.substr(0, string.indexOf(parsedInput));
 | |
|                 if (skipped.length > 0) {
 | |
|                     getParsingFlags(config).unusedInput.push(skipped);
 | |
|                 }
 | |
|                 string = string.slice(
 | |
|                     string.indexOf(parsedInput) + parsedInput.length
 | |
|                 );
 | |
|                 totalParsedInputLength += parsedInput.length;
 | |
|             }
 | |
|             // don't parse if it's not a known token
 | |
|             if (formatTokenFunctions[token]) {
 | |
|                 if (parsedInput) {
 | |
|                     getParsingFlags(config).empty = false;
 | |
|                 } else {
 | |
|                     getParsingFlags(config).unusedTokens.push(token);
 | |
|                 }
 | |
|                 addTimeToArrayFromToken(token, parsedInput, config);
 | |
|             } else if (config._strict && !parsedInput) {
 | |
|                 getParsingFlags(config).unusedTokens.push(token);
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // add remaining unparsed input length to the string
 | |
|         getParsingFlags(config).charsLeftOver =
 | |
|             stringLength - totalParsedInputLength;
 | |
|         if (string.length > 0) {
 | |
|             getParsingFlags(config).unusedInput.push(string);
 | |
|         }
 | |
| 
 | |
|         // clear _12h flag if hour is <= 12
 | |
|         if (
 | |
|             config._a[HOUR] <= 12 &&
 | |
|             getParsingFlags(config).bigHour === true &&
 | |
|             config._a[HOUR] > 0
 | |
|         ) {
 | |
|             getParsingFlags(config).bigHour = undefined;
 | |
|         }
 | |
| 
 | |
|         getParsingFlags(config).parsedDateParts = config._a.slice(0);
 | |
|         getParsingFlags(config).meridiem = config._meridiem;
 | |
|         // handle meridiem
 | |
|         config._a[HOUR] = meridiemFixWrap(
 | |
|             config._locale,
 | |
|             config._a[HOUR],
 | |
|             config._meridiem
 | |
|         );
 | |
| 
 | |
|         // handle era
 | |
|         era = getParsingFlags(config).era;
 | |
|         if (era !== null) {
 | |
|             config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);
 | |
|         }
 | |
| 
 | |
|         configFromArray(config);
 | |
|         checkOverflow(config);
 | |
|     }
 | |
| 
 | |
|     function meridiemFixWrap(locale, hour, meridiem) {
 | |
|         var isPm;
 | |
| 
 | |
|         if (meridiem == null) {
 | |
|             // nothing to do
 | |
|             return hour;
 | |
|         }
 | |
|         if (locale.meridiemHour != null) {
 | |
|             return locale.meridiemHour(hour, meridiem);
 | |
|         } else if (locale.isPM != null) {
 | |
|             // Fallback
 | |
|             isPm = locale.isPM(meridiem);
 | |
|             if (isPm && hour < 12) {
 | |
|                 hour += 12;
 | |
|             }
 | |
|             if (!isPm && hour === 12) {
 | |
|                 hour = 0;
 | |
|             }
 | |
|             return hour;
 | |
|         } else {
 | |
|             // this is not supposed to happen
 | |
|             return hour;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // date from string and array of format strings
 | |
|     function configFromStringAndArray(config) {
 | |
|         var tempConfig,
 | |
|             bestMoment,
 | |
|             scoreToBeat,
 | |
|             i,
 | |
|             currentScore,
 | |
|             validFormatFound,
 | |
|             bestFormatIsValid = false;
 | |
| 
 | |
|         if (config._f.length === 0) {
 | |
|             getParsingFlags(config).invalidFormat = true;
 | |
|             config._d = new Date(NaN);
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         for (i = 0; i < config._f.length; i++) {
 | |
|             currentScore = 0;
 | |
|             validFormatFound = false;
 | |
|             tempConfig = copyConfig({}, config);
 | |
|             if (config._useUTC != null) {
 | |
|                 tempConfig._useUTC = config._useUTC;
 | |
|             }
 | |
|             tempConfig._f = config._f[i];
 | |
|             configFromStringAndFormat(tempConfig);
 | |
| 
 | |
|             if (isValid(tempConfig)) {
 | |
|                 validFormatFound = true;
 | |
|             }
 | |
| 
 | |
|             // if there is any input that was not parsed add a penalty for that format
 | |
|             currentScore += getParsingFlags(tempConfig).charsLeftOver;
 | |
| 
 | |
|             //or tokens
 | |
|             currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
 | |
| 
 | |
|             getParsingFlags(tempConfig).score = currentScore;
 | |
| 
 | |
|             if (!bestFormatIsValid) {
 | |
|                 if (
 | |
|                     scoreToBeat == null ||
 | |
|                     currentScore < scoreToBeat ||
 | |
|                     validFormatFound
 | |
|                 ) {
 | |
|                     scoreToBeat = currentScore;
 | |
|                     bestMoment = tempConfig;
 | |
|                     if (validFormatFound) {
 | |
|                         bestFormatIsValid = true;
 | |
|                     }
 | |
|                 }
 | |
|             } else {
 | |
|                 if (currentScore < scoreToBeat) {
 | |
|                     scoreToBeat = currentScore;
 | |
|                     bestMoment = tempConfig;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         extend(config, bestMoment || tempConfig);
 | |
|     }
 | |
| 
 | |
|     function configFromObject(config) {
 | |
|         if (config._d) {
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         var i = normalizeObjectUnits(config._i),
 | |
|             dayOrDate = i.day === undefined ? i.date : i.day;
 | |
|         config._a = map(
 | |
|             [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],
 | |
|             function (obj) {
 | |
|                 return obj && parseInt(obj, 10);
 | |
|             }
 | |
|         );
 | |
| 
 | |
|         configFromArray(config);
 | |
|     }
 | |
| 
 | |
|     function createFromConfig(config) {
 | |
|         var res = new Moment(checkOverflow(prepareConfig(config)));
 | |
|         if (res._nextDay) {
 | |
|             // Adding is smart enough around DST
 | |
|             res.add(1, 'd');
 | |
|             res._nextDay = undefined;
 | |
|         }
 | |
| 
 | |
|         return res;
 | |
|     }
 | |
| 
 | |
|     function prepareConfig(config) {
 | |
|         var input = config._i,
 | |
|             format = config._f;
 | |
| 
 | |
|         config._locale = config._locale || getLocale(config._l);
 | |
| 
 | |
|         if (input === null || (format === undefined && input === '')) {
 | |
|             return createInvalid({ nullInput: true });
 | |
|         }
 | |
| 
 | |
|         if (typeof input === 'string') {
 | |
|             config._i = input = config._locale.preparse(input);
 | |
|         }
 | |
| 
 | |
|         if (isMoment(input)) {
 | |
|             return new Moment(checkOverflow(input));
 | |
|         } else if (isDate(input)) {
 | |
|             config._d = input;
 | |
|         } else if (isArray(format)) {
 | |
|             configFromStringAndArray(config);
 | |
|         } else if (format) {
 | |
|             configFromStringAndFormat(config);
 | |
|         } else {
 | |
|             configFromInput(config);
 | |
|         }
 | |
| 
 | |
|         if (!isValid(config)) {
 | |
|             config._d = null;
 | |
|         }
 | |
| 
 | |
|         return config;
 | |
|     }
 | |
| 
 | |
|     function configFromInput(config) {
 | |
|         var input = config._i;
 | |
|         if (isUndefined(input)) {
 | |
|             config._d = new Date(hooks.now());
 | |
|         } else if (isDate(input)) {
 | |
|             config._d = new Date(input.valueOf());
 | |
|         } else if (typeof input === 'string') {
 | |
|             configFromString(config);
 | |
|         } else if (isArray(input)) {
 | |
|             config._a = map(input.slice(0), function (obj) {
 | |
|                 return parseInt(obj, 10);
 | |
|             });
 | |
|             configFromArray(config);
 | |
|         } else if (isObject(input)) {
 | |
|             configFromObject(config);
 | |
|         } else if (isNumber(input)) {
 | |
|             // from milliseconds
 | |
|             config._d = new Date(input);
 | |
|         } else {
 | |
|             hooks.createFromInputFallback(config);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function createLocalOrUTC(input, format, locale, strict, isUTC) {
 | |
|         var c = {};
 | |
| 
 | |
|         if (format === true || format === false) {
 | |
|             strict = format;
 | |
|             format = undefined;
 | |
|         }
 | |
| 
 | |
|         if (locale === true || locale === false) {
 | |
|             strict = locale;
 | |
|             locale = undefined;
 | |
|         }
 | |
| 
 | |
|         if (
 | |
|             (isObject(input) && isObjectEmpty(input)) ||
 | |
|             (isArray(input) && input.length === 0)
 | |
|         ) {
 | |
|             input = undefined;
 | |
|         }
 | |
|         // object construction must be done this way.
 | |
|         // https://github.com/moment/moment/issues/1423
 | |
|         c._isAMomentObject = true;
 | |
|         c._useUTC = c._isUTC = isUTC;
 | |
|         c._l = locale;
 | |
|         c._i = input;
 | |
|         c._f = format;
 | |
|         c._strict = strict;
 | |
| 
 | |
|         return createFromConfig(c);
 | |
|     }
 | |
| 
 | |
|     function createLocal(input, format, locale, strict) {
 | |
|         return createLocalOrUTC(input, format, locale, strict, false);
 | |
|     }
 | |
| 
 | |
|     var prototypeMin = deprecate(
 | |
|             'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
 | |
|             function () {
 | |
|                 var other = createLocal.apply(null, arguments);
 | |
|                 if (this.isValid() && other.isValid()) {
 | |
|                     return other < this ? this : other;
 | |
|                 } else {
 | |
|                     return createInvalid();
 | |
|                 }
 | |
|             }
 | |
|         ),
 | |
|         prototypeMax = deprecate(
 | |
|             'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
 | |
|             function () {
 | |
|                 var other = createLocal.apply(null, arguments);
 | |
|                 if (this.isValid() && other.isValid()) {
 | |
|                     return other > this ? this : other;
 | |
|                 } else {
 | |
|                     return createInvalid();
 | |
|                 }
 | |
|             }
 | |
|         );
 | |
| 
 | |
|     // Pick a moment m from moments so that m[fn](other) is true for all
 | |
|     // other. This relies on the function fn to be transitive.
 | |
|     //
 | |
|     // moments should either be an array of moment objects or an array, whose
 | |
|     // first element is an array of moment objects.
 | |
|     function pickBy(fn, moments) {
 | |
|         var res, i;
 | |
|         if (moments.length === 1 && isArray(moments[0])) {
 | |
|             moments = moments[0];
 | |
|         }
 | |
|         if (!moments.length) {
 | |
|             return createLocal();
 | |
|         }
 | |
|         res = moments[0];
 | |
|         for (i = 1; i < moments.length; ++i) {
 | |
|             if (!moments[i].isValid() || moments[i][fn](res)) {
 | |
|                 res = moments[i];
 | |
|             }
 | |
|         }
 | |
|         return res;
 | |
|     }
 | |
| 
 | |
|     // TODO: Use [].sort instead?
 | |
|     function min() {
 | |
|         var args = [].slice.call(arguments, 0);
 | |
| 
 | |
|         return pickBy('isBefore', args);
 | |
|     }
 | |
| 
 | |
|     function max() {
 | |
|         var args = [].slice.call(arguments, 0);
 | |
| 
 | |
|         return pickBy('isAfter', args);
 | |
|     }
 | |
| 
 | |
|     var now = function () {
 | |
|         return Date.now ? Date.now() : +new Date();
 | |
|     };
 | |
| 
 | |
|     var ordering = [
 | |
|         'year',
 | |
|         'quarter',
 | |
|         'month',
 | |
|         'week',
 | |
|         'day',
 | |
|         'hour',
 | |
|         'minute',
 | |
|         'second',
 | |
|         'millisecond',
 | |
|     ];
 | |
| 
 | |
|     function isDurationValid(m) {
 | |
|         var key,
 | |
|             unitHasDecimal = false,
 | |
|             i;
 | |
|         for (key in m) {
 | |
|             if (
 | |
|                 hasOwnProp(m, key) &&
 | |
|                 !(
 | |
|                     indexOf.call(ordering, key) !== -1 &&
 | |
|                     (m[key] == null || !isNaN(m[key]))
 | |
|                 )
 | |
|             ) {
 | |
|                 return false;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         for (i = 0; i < ordering.length; ++i) {
 | |
|             if (m[ordering[i]]) {
 | |
|                 if (unitHasDecimal) {
 | |
|                     return false; // only allow non-integers for smallest unit
 | |
|                 }
 | |
|                 if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
 | |
|                     unitHasDecimal = true;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     function isValid$1() {
 | |
|         return this._isValid;
 | |
|     }
 | |
| 
 | |
|     function createInvalid$1() {
 | |
|         return createDuration(NaN);
 | |
|     }
 | |
| 
 | |
|     function Duration(duration) {
 | |
|         var normalizedInput = normalizeObjectUnits(duration),
 | |
|             years = normalizedInput.year || 0,
 | |
|             quarters = normalizedInput.quarter || 0,
 | |
|             months = normalizedInput.month || 0,
 | |
|             weeks = normalizedInput.week || normalizedInput.isoWeek || 0,
 | |
|             days = normalizedInput.day || 0,
 | |
|             hours = normalizedInput.hour || 0,
 | |
|             minutes = normalizedInput.minute || 0,
 | |
|             seconds = normalizedInput.second || 0,
 | |
|             milliseconds = normalizedInput.millisecond || 0;
 | |
| 
 | |
|         this._isValid = isDurationValid(normalizedInput);
 | |
| 
 | |
|         // representation for dateAddRemove
 | |
|         this._milliseconds =
 | |
|             +milliseconds +
 | |
|             seconds * 1e3 + // 1000
 | |
|             minutes * 6e4 + // 1000 * 60
 | |
|             hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
 | |
|         // Because of dateAddRemove treats 24 hours as different from a
 | |
|         // day when working around DST, we need to store them separately
 | |
|         this._days = +days + weeks * 7;
 | |
|         // It is impossible to translate months into days without knowing
 | |
|         // which months you are are talking about, so we have to store
 | |
|         // it separately.
 | |
|         this._months = +months + quarters * 3 + years * 12;
 | |
| 
 | |
|         this._data = {};
 | |
| 
 | |
|         this._locale = getLocale();
 | |
| 
 | |
|         this._bubble();
 | |
|     }
 | |
| 
 | |
|     function isDuration(obj) {
 | |
|         return obj instanceof Duration;
 | |
|     }
 | |
| 
 | |
|     function absRound(number) {
 | |
|         if (number < 0) {
 | |
|             return Math.round(-1 * number) * -1;
 | |
|         } else {
 | |
|             return Math.round(number);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // compare two arrays, return the number of differences
 | |
|     function compareArrays(array1, array2, dontConvert) {
 | |
|         var len = Math.min(array1.length, array2.length),
 | |
|             lengthDiff = Math.abs(array1.length - array2.length),
 | |
|             diffs = 0,
 | |
|             i;
 | |
|         for (i = 0; i < len; i++) {
 | |
|             if (
 | |
|                 (dontConvert && array1[i] !== array2[i]) ||
 | |
|                 (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))
 | |
|             ) {
 | |
|                 diffs++;
 | |
|             }
 | |
|         }
 | |
|         return diffs + lengthDiff;
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     function offset(token, separator) {
 | |
|         addFormatToken(token, 0, 0, function () {
 | |
|             var offset = this.utcOffset(),
 | |
|                 sign = '+';
 | |
|             if (offset < 0) {
 | |
|                 offset = -offset;
 | |
|                 sign = '-';
 | |
|             }
 | |
|             return (
 | |
|                 sign +
 | |
|                 zeroFill(~~(offset / 60), 2) +
 | |
|                 separator +
 | |
|                 zeroFill(~~offset % 60, 2)
 | |
|             );
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     offset('Z', ':');
 | |
|     offset('ZZ', '');
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('Z', matchShortOffset);
 | |
|     addRegexToken('ZZ', matchShortOffset);
 | |
|     addParseToken(['Z', 'ZZ'], function (input, array, config) {
 | |
|         config._useUTC = true;
 | |
|         config._tzm = offsetFromString(matchShortOffset, input);
 | |
|     });
 | |
| 
 | |
|     // HELPERS
 | |
| 
 | |
|     // timezone chunker
 | |
|     // '+10:00' > ['10',  '00']
 | |
|     // '-1530'  > ['-15', '30']
 | |
|     var chunkOffset = /([\+\-]|\d\d)/gi;
 | |
| 
 | |
|     function offsetFromString(matcher, string) {
 | |
|         var matches = (string || '').match(matcher),
 | |
|             chunk,
 | |
|             parts,
 | |
|             minutes;
 | |
| 
 | |
|         if (matches === null) {
 | |
|             return null;
 | |
|         }
 | |
| 
 | |
|         chunk = matches[matches.length - 1] || [];
 | |
|         parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
 | |
|         minutes = +(parts[1] * 60) + toInt(parts[2]);
 | |
| 
 | |
|         return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;
 | |
|     }
 | |
| 
 | |
|     // Return a moment from input, that is local/utc/zone equivalent to model.
 | |
|     function cloneWithOffset(input, model) {
 | |
|         var res, diff;
 | |
|         if (model._isUTC) {
 | |
|             res = model.clone();
 | |
|             diff =
 | |
|                 (isMoment(input) || isDate(input)
 | |
|                     ? input.valueOf()
 | |
|                     : createLocal(input).valueOf()) - res.valueOf();
 | |
|             // Use low-level api, because this fn is low-level api.
 | |
|             res._d.setTime(res._d.valueOf() + diff);
 | |
|             hooks.updateOffset(res, false);
 | |
|             return res;
 | |
|         } else {
 | |
|             return createLocal(input).local();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function getDateOffset(m) {
 | |
|         // On Firefox.24 Date#getTimezoneOffset returns a floating point.
 | |
|         // https://github.com/moment/moment/pull/1871
 | |
|         return -Math.round(m._d.getTimezoneOffset());
 | |
|     }
 | |
| 
 | |
|     // HOOKS
 | |
| 
 | |
|     // This function will be called whenever a moment is mutated.
 | |
|     // It is intended to keep the offset in sync with the timezone.
 | |
|     hooks.updateOffset = function () {};
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     // keepLocalTime = true means only change the timezone, without
 | |
|     // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
 | |
|     // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
 | |
|     // +0200, so we adjust the time as needed, to be valid.
 | |
|     //
 | |
|     // Keeping the time actually adds/subtracts (one hour)
 | |
|     // from the actual represented time. That is why we call updateOffset
 | |
|     // a second time. In case it wants us to change the offset again
 | |
|     // _changeInProgress == true case, then we have to adjust, because
 | |
|     // there is no such time in the given timezone.
 | |
|     function getSetOffset(input, keepLocalTime, keepMinutes) {
 | |
|         var offset = this._offset || 0,
 | |
|             localAdjust;
 | |
|         if (!this.isValid()) {
 | |
|             return input != null ? this : NaN;
 | |
|         }
 | |
|         if (input != null) {
 | |
|             if (typeof input === 'string') {
 | |
|                 input = offsetFromString(matchShortOffset, input);
 | |
|                 if (input === null) {
 | |
|                     return this;
 | |
|                 }
 | |
|             } else if (Math.abs(input) < 16 && !keepMinutes) {
 | |
|                 input = input * 60;
 | |
|             }
 | |
|             if (!this._isUTC && keepLocalTime) {
 | |
|                 localAdjust = getDateOffset(this);
 | |
|             }
 | |
|             this._offset = input;
 | |
|             this._isUTC = true;
 | |
|             if (localAdjust != null) {
 | |
|                 this.add(localAdjust, 'm');
 | |
|             }
 | |
|             if (offset !== input) {
 | |
|                 if (!keepLocalTime || this._changeInProgress) {
 | |
|                     addSubtract(
 | |
|                         this,
 | |
|                         createDuration(input - offset, 'm'),
 | |
|                         1,
 | |
|                         false
 | |
|                     );
 | |
|                 } else if (!this._changeInProgress) {
 | |
|                     this._changeInProgress = true;
 | |
|                     hooks.updateOffset(this, true);
 | |
|                     this._changeInProgress = null;
 | |
|                 }
 | |
|             }
 | |
|             return this;
 | |
|         } else {
 | |
|             return this._isUTC ? offset : getDateOffset(this);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function getSetZone(input, keepLocalTime) {
 | |
|         if (input != null) {
 | |
|             if (typeof input !== 'string') {
 | |
|                 input = -input;
 | |
|             }
 | |
| 
 | |
|             this.utcOffset(input, keepLocalTime);
 | |
| 
 | |
|             return this;
 | |
|         } else {
 | |
|             return -this.utcOffset();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function setOffsetToUTC(keepLocalTime) {
 | |
|         return this.utcOffset(0, keepLocalTime);
 | |
|     }
 | |
| 
 | |
|     function setOffsetToLocal(keepLocalTime) {
 | |
|         if (this._isUTC) {
 | |
|             this.utcOffset(0, keepLocalTime);
 | |
|             this._isUTC = false;
 | |
| 
 | |
|             if (keepLocalTime) {
 | |
|                 this.subtract(getDateOffset(this), 'm');
 | |
|             }
 | |
|         }
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     function setOffsetToParsedOffset() {
 | |
|         if (this._tzm != null) {
 | |
|             this.utcOffset(this._tzm, false, true);
 | |
|         } else if (typeof this._i === 'string') {
 | |
|             var tZone = offsetFromString(matchOffset, this._i);
 | |
|             if (tZone != null) {
 | |
|                 this.utcOffset(tZone);
 | |
|             } else {
 | |
|                 this.utcOffset(0, true);
 | |
|             }
 | |
|         }
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     function hasAlignedHourOffset(input) {
 | |
|         if (!this.isValid()) {
 | |
|             return false;
 | |
|         }
 | |
|         input = input ? createLocal(input).utcOffset() : 0;
 | |
| 
 | |
|         return (this.utcOffset() - input) % 60 === 0;
 | |
|     }
 | |
| 
 | |
|     function isDaylightSavingTime() {
 | |
|         return (
 | |
|             this.utcOffset() > this.clone().month(0).utcOffset() ||
 | |
|             this.utcOffset() > this.clone().month(5).utcOffset()
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function isDaylightSavingTimeShifted() {
 | |
|         if (!isUndefined(this._isDSTShifted)) {
 | |
|             return this._isDSTShifted;
 | |
|         }
 | |
| 
 | |
|         var c = {},
 | |
|             other;
 | |
| 
 | |
|         copyConfig(c, this);
 | |
|         c = prepareConfig(c);
 | |
| 
 | |
|         if (c._a) {
 | |
|             other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
 | |
|             this._isDSTShifted =
 | |
|                 this.isValid() && compareArrays(c._a, other.toArray()) > 0;
 | |
|         } else {
 | |
|             this._isDSTShifted = false;
 | |
|         }
 | |
| 
 | |
|         return this._isDSTShifted;
 | |
|     }
 | |
| 
 | |
|     function isLocal() {
 | |
|         return this.isValid() ? !this._isUTC : false;
 | |
|     }
 | |
| 
 | |
|     function isUtcOffset() {
 | |
|         return this.isValid() ? this._isUTC : false;
 | |
|     }
 | |
| 
 | |
|     function isUtc() {
 | |
|         return this.isValid() ? this._isUTC && this._offset === 0 : false;
 | |
|     }
 | |
| 
 | |
|     // ASP.NET json date format regex
 | |
|     var aspNetRegex = /^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,
 | |
|         // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
 | |
|         // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
 | |
|         // and further modified to allow for strings containing both week and day
 | |
|         isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
 | |
| 
 | |
|     function createDuration(input, key) {
 | |
|         var duration = input,
 | |
|             // matching against regexp is expensive, do it on demand
 | |
|             match = null,
 | |
|             sign,
 | |
|             ret,
 | |
|             diffRes;
 | |
| 
 | |
|         if (isDuration(input)) {
 | |
|             duration = {
 | |
|                 ms: input._milliseconds,
 | |
|                 d: input._days,
 | |
|                 M: input._months,
 | |
|             };
 | |
|         } else if (isNumber(input) || !isNaN(+input)) {
 | |
|             duration = {};
 | |
|             if (key) {
 | |
|                 duration[key] = +input;
 | |
|             } else {
 | |
|                 duration.milliseconds = +input;
 | |
|             }
 | |
|         } else if ((match = aspNetRegex.exec(input))) {
 | |
|             sign = match[1] === '-' ? -1 : 1;
 | |
|             duration = {
 | |
|                 y: 0,
 | |
|                 d: toInt(match[DATE]) * sign,
 | |
|                 h: toInt(match[HOUR]) * sign,
 | |
|                 m: toInt(match[MINUTE]) * sign,
 | |
|                 s: toInt(match[SECOND]) * sign,
 | |
|                 ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match
 | |
|             };
 | |
|         } else if ((match = isoRegex.exec(input))) {
 | |
|             sign = match[1] === '-' ? -1 : 1;
 | |
|             duration = {
 | |
|                 y: parseIso(match[2], sign),
 | |
|                 M: parseIso(match[3], sign),
 | |
|                 w: parseIso(match[4], sign),
 | |
|                 d: parseIso(match[5], sign),
 | |
|                 h: parseIso(match[6], sign),
 | |
|                 m: parseIso(match[7], sign),
 | |
|                 s: parseIso(match[8], sign),
 | |
|             };
 | |
|         } else if (duration == null) {
 | |
|             // checks for null or undefined
 | |
|             duration = {};
 | |
|         } else if (
 | |
|             typeof duration === 'object' &&
 | |
|             ('from' in duration || 'to' in duration)
 | |
|         ) {
 | |
|             diffRes = momentsDifference(
 | |
|                 createLocal(duration.from),
 | |
|                 createLocal(duration.to)
 | |
|             );
 | |
| 
 | |
|             duration = {};
 | |
|             duration.ms = diffRes.milliseconds;
 | |
|             duration.M = diffRes.months;
 | |
|         }
 | |
| 
 | |
|         ret = new Duration(duration);
 | |
| 
 | |
|         if (isDuration(input) && hasOwnProp(input, '_locale')) {
 | |
|             ret._locale = input._locale;
 | |
|         }
 | |
| 
 | |
|         if (isDuration(input) && hasOwnProp(input, '_isValid')) {
 | |
|             ret._isValid = input._isValid;
 | |
|         }
 | |
| 
 | |
|         return ret;
 | |
|     }
 | |
| 
 | |
|     createDuration.fn = Duration.prototype;
 | |
|     createDuration.invalid = createInvalid$1;
 | |
| 
 | |
|     function parseIso(inp, sign) {
 | |
|         // We'd normally use ~~inp for this, but unfortunately it also
 | |
|         // converts floats to ints.
 | |
|         // inp may be undefined, so careful calling replace on it.
 | |
|         var res = inp && parseFloat(inp.replace(',', '.'));
 | |
|         // apply sign while we're at it
 | |
|         return (isNaN(res) ? 0 : res) * sign;
 | |
|     }
 | |
| 
 | |
|     function positiveMomentsDifference(base, other) {
 | |
|         var res = {};
 | |
| 
 | |
|         res.months =
 | |
|             other.month() - base.month() + (other.year() - base.year()) * 12;
 | |
|         if (base.clone().add(res.months, 'M').isAfter(other)) {
 | |
|             --res.months;
 | |
|         }
 | |
| 
 | |
|         res.milliseconds = +other - +base.clone().add(res.months, 'M');
 | |
| 
 | |
|         return res;
 | |
|     }
 | |
| 
 | |
|     function momentsDifference(base, other) {
 | |
|         var res;
 | |
|         if (!(base.isValid() && other.isValid())) {
 | |
|             return { milliseconds: 0, months: 0 };
 | |
|         }
 | |
| 
 | |
|         other = cloneWithOffset(other, base);
 | |
|         if (base.isBefore(other)) {
 | |
|             res = positiveMomentsDifference(base, other);
 | |
|         } else {
 | |
|             res = positiveMomentsDifference(other, base);
 | |
|             res.milliseconds = -res.milliseconds;
 | |
|             res.months = -res.months;
 | |
|         }
 | |
| 
 | |
|         return res;
 | |
|     }
 | |
| 
 | |
|     // TODO: remove 'name' arg after deprecation is removed
 | |
|     function createAdder(direction, name) {
 | |
|         return function (val, period) {
 | |
|             var dur, tmp;
 | |
|             //invert the arguments, but complain about it
 | |
|             if (period !== null && !isNaN(+period)) {
 | |
|                 deprecateSimple(
 | |
|                     name,
 | |
|                     'moment().' +
 | |
|                         name +
 | |
|                         '(period, number) is deprecated. Please use moment().' +
 | |
|                         name +
 | |
|                         '(number, period). ' +
 | |
|                         'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'
 | |
|                 );
 | |
|                 tmp = val;
 | |
|                 val = period;
 | |
|                 period = tmp;
 | |
|             }
 | |
| 
 | |
|             dur = createDuration(val, period);
 | |
|             addSubtract(this, dur, direction);
 | |
|             return this;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function addSubtract(mom, duration, isAdding, updateOffset) {
 | |
|         var milliseconds = duration._milliseconds,
 | |
|             days = absRound(duration._days),
 | |
|             months = absRound(duration._months);
 | |
| 
 | |
|         if (!mom.isValid()) {
 | |
|             // No op
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         updateOffset = updateOffset == null ? true : updateOffset;
 | |
| 
 | |
|         if (months) {
 | |
|             setMonth(mom, get(mom, 'Month') + months * isAdding);
 | |
|         }
 | |
|         if (days) {
 | |
|             set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
 | |
|         }
 | |
|         if (milliseconds) {
 | |
|             mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
 | |
|         }
 | |
|         if (updateOffset) {
 | |
|             hooks.updateOffset(mom, days || months);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     var add = createAdder(1, 'add'),
 | |
|         subtract = createAdder(-1, 'subtract');
 | |
| 
 | |
|     function isString(input) {
 | |
|         return typeof input === 'string' || input instanceof String;
 | |
|     }
 | |
| 
 | |
|     // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined
 | |
|     function isMomentInput(input) {
 | |
|         return (
 | |
|             isMoment(input) ||
 | |
|             isDate(input) ||
 | |
|             isString(input) ||
 | |
|             isNumber(input) ||
 | |
|             isNumberOrStringArray(input) ||
 | |
|             isMomentInputObject(input) ||
 | |
|             input === null ||
 | |
|             input === undefined
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function isMomentInputObject(input) {
 | |
|         var objectTest = isObject(input) && !isObjectEmpty(input),
 | |
|             propertyTest = false,
 | |
|             properties = [
 | |
|                 'years',
 | |
|                 'year',
 | |
|                 'y',
 | |
|                 'months',
 | |
|                 'month',
 | |
|                 'M',
 | |
|                 'days',
 | |
|                 'day',
 | |
|                 'd',
 | |
|                 'dates',
 | |
|                 'date',
 | |
|                 'D',
 | |
|                 'hours',
 | |
|                 'hour',
 | |
|                 'h',
 | |
|                 'minutes',
 | |
|                 'minute',
 | |
|                 'm',
 | |
|                 'seconds',
 | |
|                 'second',
 | |
|                 's',
 | |
|                 'milliseconds',
 | |
|                 'millisecond',
 | |
|                 'ms',
 | |
|             ],
 | |
|             i,
 | |
|             property;
 | |
| 
 | |
|         for (i = 0; i < properties.length; i += 1) {
 | |
|             property = properties[i];
 | |
|             propertyTest = propertyTest || hasOwnProp(input, property);
 | |
|         }
 | |
| 
 | |
|         return objectTest && propertyTest;
 | |
|     }
 | |
| 
 | |
|     function isNumberOrStringArray(input) {
 | |
|         var arrayTest = isArray(input),
 | |
|             dataTypeTest = false;
 | |
|         if (arrayTest) {
 | |
|             dataTypeTest =
 | |
|                 input.filter(function (item) {
 | |
|                     return !isNumber(item) && isString(input);
 | |
|                 }).length === 0;
 | |
|         }
 | |
|         return arrayTest && dataTypeTest;
 | |
|     }
 | |
| 
 | |
|     function isCalendarSpec(input) {
 | |
|         var objectTest = isObject(input) && !isObjectEmpty(input),
 | |
|             propertyTest = false,
 | |
|             properties = [
 | |
|                 'sameDay',
 | |
|                 'nextDay',
 | |
|                 'lastDay',
 | |
|                 'nextWeek',
 | |
|                 'lastWeek',
 | |
|                 'sameElse',
 | |
|             ],
 | |
|             i,
 | |
|             property;
 | |
| 
 | |
|         for (i = 0; i < properties.length; i += 1) {
 | |
|             property = properties[i];
 | |
|             propertyTest = propertyTest || hasOwnProp(input, property);
 | |
|         }
 | |
| 
 | |
|         return objectTest && propertyTest;
 | |
|     }
 | |
| 
 | |
|     function getCalendarFormat(myMoment, now) {
 | |
|         var diff = myMoment.diff(now, 'days', true);
 | |
|         return diff < -6
 | |
|             ? 'sameElse'
 | |
|             : diff < -1
 | |
|             ? 'lastWeek'
 | |
|             : diff < 0
 | |
|             ? 'lastDay'
 | |
|             : diff < 1
 | |
|             ? 'sameDay'
 | |
|             : diff < 2
 | |
|             ? 'nextDay'
 | |
|             : diff < 7
 | |
|             ? 'nextWeek'
 | |
|             : 'sameElse';
 | |
|     }
 | |
| 
 | |
|     function calendar$1(time, formats) {
 | |
|         // Support for single parameter, formats only overload to the calendar function
 | |
|         if (arguments.length === 1) {
 | |
|             if (!arguments[0]) {
 | |
|                 time = undefined;
 | |
|                 formats = undefined;
 | |
|             } else if (isMomentInput(arguments[0])) {
 | |
|                 time = arguments[0];
 | |
|                 formats = undefined;
 | |
|             } else if (isCalendarSpec(arguments[0])) {
 | |
|                 formats = arguments[0];
 | |
|                 time = undefined;
 | |
|             }
 | |
|         }
 | |
|         // We want to compare the start of today, vs this.
 | |
|         // Getting start-of-today depends on whether we're local/utc/offset or not.
 | |
|         var now = time || createLocal(),
 | |
|             sod = cloneWithOffset(now, this).startOf('day'),
 | |
|             format = hooks.calendarFormat(this, sod) || 'sameElse',
 | |
|             output =
 | |
|                 formats &&
 | |
|                 (isFunction(formats[format])
 | |
|                     ? formats[format].call(this, now)
 | |
|                     : formats[format]);
 | |
| 
 | |
|         return this.format(
 | |
|             output || this.localeData().calendar(format, this, createLocal(now))
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function clone() {
 | |
|         return new Moment(this);
 | |
|     }
 | |
| 
 | |
|     function isAfter(input, units) {
 | |
|         var localInput = isMoment(input) ? input : createLocal(input);
 | |
|         if (!(this.isValid() && localInput.isValid())) {
 | |
|             return false;
 | |
|         }
 | |
|         units = normalizeUnits(units) || 'millisecond';
 | |
|         if (units === 'millisecond') {
 | |
|             return this.valueOf() > localInput.valueOf();
 | |
|         } else {
 | |
|             return localInput.valueOf() < this.clone().startOf(units).valueOf();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function isBefore(input, units) {
 | |
|         var localInput = isMoment(input) ? input : createLocal(input);
 | |
|         if (!(this.isValid() && localInput.isValid())) {
 | |
|             return false;
 | |
|         }
 | |
|         units = normalizeUnits(units) || 'millisecond';
 | |
|         if (units === 'millisecond') {
 | |
|             return this.valueOf() < localInput.valueOf();
 | |
|         } else {
 | |
|             return this.clone().endOf(units).valueOf() < localInput.valueOf();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function isBetween(from, to, units, inclusivity) {
 | |
|         var localFrom = isMoment(from) ? from : createLocal(from),
 | |
|             localTo = isMoment(to) ? to : createLocal(to);
 | |
|         if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {
 | |
|             return false;
 | |
|         }
 | |
|         inclusivity = inclusivity || '()';
 | |
|         return (
 | |
|             (inclusivity[0] === '('
 | |
|                 ? this.isAfter(localFrom, units)
 | |
|                 : !this.isBefore(localFrom, units)) &&
 | |
|             (inclusivity[1] === ')'
 | |
|                 ? this.isBefore(localTo, units)
 | |
|                 : !this.isAfter(localTo, units))
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function isSame(input, units) {
 | |
|         var localInput = isMoment(input) ? input : createLocal(input),
 | |
|             inputMs;
 | |
|         if (!(this.isValid() && localInput.isValid())) {
 | |
|             return false;
 | |
|         }
 | |
|         units = normalizeUnits(units) || 'millisecond';
 | |
|         if (units === 'millisecond') {
 | |
|             return this.valueOf() === localInput.valueOf();
 | |
|         } else {
 | |
|             inputMs = localInput.valueOf();
 | |
|             return (
 | |
|                 this.clone().startOf(units).valueOf() <= inputMs &&
 | |
|                 inputMs <= this.clone().endOf(units).valueOf()
 | |
|             );
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function isSameOrAfter(input, units) {
 | |
|         return this.isSame(input, units) || this.isAfter(input, units);
 | |
|     }
 | |
| 
 | |
|     function isSameOrBefore(input, units) {
 | |
|         return this.isSame(input, units) || this.isBefore(input, units);
 | |
|     }
 | |
| 
 | |
|     function diff(input, units, asFloat) {
 | |
|         var that, zoneDelta, output;
 | |
| 
 | |
|         if (!this.isValid()) {
 | |
|             return NaN;
 | |
|         }
 | |
| 
 | |
|         that = cloneWithOffset(input, this);
 | |
| 
 | |
|         if (!that.isValid()) {
 | |
|             return NaN;
 | |
|         }
 | |
| 
 | |
|         zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
 | |
| 
 | |
|         units = normalizeUnits(units);
 | |
| 
 | |
|         switch (units) {
 | |
|             case 'year':
 | |
|                 output = monthDiff(this, that) / 12;
 | |
|                 break;
 | |
|             case 'month':
 | |
|                 output = monthDiff(this, that);
 | |
|                 break;
 | |
|             case 'quarter':
 | |
|                 output = monthDiff(this, that) / 3;
 | |
|                 break;
 | |
|             case 'second':
 | |
|                 output = (this - that) / 1e3;
 | |
|                 break; // 1000
 | |
|             case 'minute':
 | |
|                 output = (this - that) / 6e4;
 | |
|                 break; // 1000 * 60
 | |
|             case 'hour':
 | |
|                 output = (this - that) / 36e5;
 | |
|                 break; // 1000 * 60 * 60
 | |
|             case 'day':
 | |
|                 output = (this - that - zoneDelta) / 864e5;
 | |
|                 break; // 1000 * 60 * 60 * 24, negate dst
 | |
|             case 'week':
 | |
|                 output = (this - that - zoneDelta) / 6048e5;
 | |
|                 break; // 1000 * 60 * 60 * 24 * 7, negate dst
 | |
|             default:
 | |
|                 output = this - that;
 | |
|         }
 | |
| 
 | |
|         return asFloat ? output : absFloor(output);
 | |
|     }
 | |
| 
 | |
|     function monthDiff(a, b) {
 | |
|         if (a.date() < b.date()) {
 | |
|             // end-of-month calculations work correct when the start month has more
 | |
|             // days than the end month.
 | |
|             return -monthDiff(b, a);
 | |
|         }
 | |
|         // difference in months
 | |
|         var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),
 | |
|             // b is in (anchor - 1 month, anchor + 1 month)
 | |
|             anchor = a.clone().add(wholeMonthDiff, 'months'),
 | |
|             anchor2,
 | |
|             adjust;
 | |
| 
 | |
|         if (b - anchor < 0) {
 | |
|             anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
 | |
|             // linear across the month
 | |
|             adjust = (b - anchor) / (anchor - anchor2);
 | |
|         } else {
 | |
|             anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
 | |
|             // linear across the month
 | |
|             adjust = (b - anchor) / (anchor2 - anchor);
 | |
|         }
 | |
| 
 | |
|         //check for negative zero, return zero if negative zero
 | |
|         return -(wholeMonthDiff + adjust) || 0;
 | |
|     }
 | |
| 
 | |
|     hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
 | |
|     hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
 | |
| 
 | |
|     function toString() {
 | |
|         return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
 | |
|     }
 | |
| 
 | |
|     function toISOString(keepOffset) {
 | |
|         if (!this.isValid()) {
 | |
|             return null;
 | |
|         }
 | |
|         var utc = keepOffset !== true,
 | |
|             m = utc ? this.clone().utc() : this;
 | |
|         if (m.year() < 0 || m.year() > 9999) {
 | |
|             return formatMoment(
 | |
|                 m,
 | |
|                 utc
 | |
|                     ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'
 | |
|                     : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'
 | |
|             );
 | |
|         }
 | |
|         if (isFunction(Date.prototype.toISOString)) {
 | |
|             // native implementation is ~50x faster, use it when we can
 | |
|             if (utc) {
 | |
|                 return this.toDate().toISOString();
 | |
|             } else {
 | |
|                 return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)
 | |
|                     .toISOString()
 | |
|                     .replace('Z', formatMoment(m, 'Z'));
 | |
|             }
 | |
|         }
 | |
|         return formatMoment(
 | |
|             m,
 | |
|             utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Return a human readable representation of a moment that can
 | |
|      * also be evaluated to get a new moment which is the same
 | |
|      *
 | |
|      * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
 | |
|      */
 | |
|     function inspect() {
 | |
|         if (!this.isValid()) {
 | |
|             return 'moment.invalid(/* ' + this._i + ' */)';
 | |
|         }
 | |
|         var func = 'moment',
 | |
|             zone = '',
 | |
|             prefix,
 | |
|             year,
 | |
|             datetime,
 | |
|             suffix;
 | |
|         if (!this.isLocal()) {
 | |
|             func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
 | |
|             zone = 'Z';
 | |
|         }
 | |
|         prefix = '[' + func + '("]';
 | |
|         year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';
 | |
|         datetime = '-MM-DD[T]HH:mm:ss.SSS';
 | |
|         suffix = zone + '[")]';
 | |
| 
 | |
|         return this.format(prefix + year + datetime + suffix);
 | |
|     }
 | |
| 
 | |
|     function format(inputString) {
 | |
|         if (!inputString) {
 | |
|             inputString = this.isUtc()
 | |
|                 ? hooks.defaultFormatUtc
 | |
|                 : hooks.defaultFormat;
 | |
|         }
 | |
|         var output = formatMoment(this, inputString);
 | |
|         return this.localeData().postformat(output);
 | |
|     }
 | |
| 
 | |
|     function from(time, withoutSuffix) {
 | |
|         if (
 | |
|             this.isValid() &&
 | |
|             ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
 | |
|         ) {
 | |
|             return createDuration({ to: this, from: time })
 | |
|                 .locale(this.locale())
 | |
|                 .humanize(!withoutSuffix);
 | |
|         } else {
 | |
|             return this.localeData().invalidDate();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function fromNow(withoutSuffix) {
 | |
|         return this.from(createLocal(), withoutSuffix);
 | |
|     }
 | |
| 
 | |
|     function to(time, withoutSuffix) {
 | |
|         if (
 | |
|             this.isValid() &&
 | |
|             ((isMoment(time) && time.isValid()) || createLocal(time).isValid())
 | |
|         ) {
 | |
|             return createDuration({ from: this, to: time })
 | |
|                 .locale(this.locale())
 | |
|                 .humanize(!withoutSuffix);
 | |
|         } else {
 | |
|             return this.localeData().invalidDate();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function toNow(withoutSuffix) {
 | |
|         return this.to(createLocal(), withoutSuffix);
 | |
|     }
 | |
| 
 | |
|     // If passed a locale key, it will set the locale for this
 | |
|     // instance.  Otherwise, it will return the locale configuration
 | |
|     // variables for this instance.
 | |
|     function locale(key) {
 | |
|         var newLocaleData;
 | |
| 
 | |
|         if (key === undefined) {
 | |
|             return this._locale._abbr;
 | |
|         } else {
 | |
|             newLocaleData = getLocale(key);
 | |
|             if (newLocaleData != null) {
 | |
|                 this._locale = newLocaleData;
 | |
|             }
 | |
|             return this;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     var lang = deprecate(
 | |
|         'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
 | |
|         function (key) {
 | |
|             if (key === undefined) {
 | |
|                 return this.localeData();
 | |
|             } else {
 | |
|                 return this.locale(key);
 | |
|             }
 | |
|         }
 | |
|     );
 | |
| 
 | |
|     function localeData() {
 | |
|         return this._locale;
 | |
|     }
 | |
| 
 | |
|     var MS_PER_SECOND = 1000,
 | |
|         MS_PER_MINUTE = 60 * MS_PER_SECOND,
 | |
|         MS_PER_HOUR = 60 * MS_PER_MINUTE,
 | |
|         MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;
 | |
| 
 | |
|     // actual modulo - handles negative numbers (for dates before 1970):
 | |
|     function mod$1(dividend, divisor) {
 | |
|         return ((dividend % divisor) + divisor) % divisor;
 | |
|     }
 | |
| 
 | |
|     function localStartOfDate(y, m, d) {
 | |
|         // the date constructor remaps years 0-99 to 1900-1999
 | |
|         if (y < 100 && y >= 0) {
 | |
|             // preserve leap years using a full 400 year cycle, then reset
 | |
|             return new Date(y + 400, m, d) - MS_PER_400_YEARS;
 | |
|         } else {
 | |
|             return new Date(y, m, d).valueOf();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function utcStartOfDate(y, m, d) {
 | |
|         // Date.UTC remaps years 0-99 to 1900-1999
 | |
|         if (y < 100 && y >= 0) {
 | |
|             // preserve leap years using a full 400 year cycle, then reset
 | |
|             return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;
 | |
|         } else {
 | |
|             return Date.UTC(y, m, d);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function startOf(units) {
 | |
|         var time, startOfDate;
 | |
|         units = normalizeUnits(units);
 | |
|         if (units === undefined || units === 'millisecond' || !this.isValid()) {
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
 | |
| 
 | |
|         switch (units) {
 | |
|             case 'year':
 | |
|                 time = startOfDate(this.year(), 0, 1);
 | |
|                 break;
 | |
|             case 'quarter':
 | |
|                 time = startOfDate(
 | |
|                     this.year(),
 | |
|                     this.month() - (this.month() % 3),
 | |
|                     1
 | |
|                 );
 | |
|                 break;
 | |
|             case 'month':
 | |
|                 time = startOfDate(this.year(), this.month(), 1);
 | |
|                 break;
 | |
|             case 'week':
 | |
|                 time = startOfDate(
 | |
|                     this.year(),
 | |
|                     this.month(),
 | |
|                     this.date() - this.weekday()
 | |
|                 );
 | |
|                 break;
 | |
|             case 'isoWeek':
 | |
|                 time = startOfDate(
 | |
|                     this.year(),
 | |
|                     this.month(),
 | |
|                     this.date() - (this.isoWeekday() - 1)
 | |
|                 );
 | |
|                 break;
 | |
|             case 'day':
 | |
|             case 'date':
 | |
|                 time = startOfDate(this.year(), this.month(), this.date());
 | |
|                 break;
 | |
|             case 'hour':
 | |
|                 time = this._d.valueOf();
 | |
|                 time -= mod$1(
 | |
|                     time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
 | |
|                     MS_PER_HOUR
 | |
|                 );
 | |
|                 break;
 | |
|             case 'minute':
 | |
|                 time = this._d.valueOf();
 | |
|                 time -= mod$1(time, MS_PER_MINUTE);
 | |
|                 break;
 | |
|             case 'second':
 | |
|                 time = this._d.valueOf();
 | |
|                 time -= mod$1(time, MS_PER_SECOND);
 | |
|                 break;
 | |
|         }
 | |
| 
 | |
|         this._d.setTime(time);
 | |
|         hooks.updateOffset(this, true);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     function endOf(units) {
 | |
|         var time, startOfDate;
 | |
|         units = normalizeUnits(units);
 | |
|         if (units === undefined || units === 'millisecond' || !this.isValid()) {
 | |
|             return this;
 | |
|         }
 | |
| 
 | |
|         startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;
 | |
| 
 | |
|         switch (units) {
 | |
|             case 'year':
 | |
|                 time = startOfDate(this.year() + 1, 0, 1) - 1;
 | |
|                 break;
 | |
|             case 'quarter':
 | |
|                 time =
 | |
|                     startOfDate(
 | |
|                         this.year(),
 | |
|                         this.month() - (this.month() % 3) + 3,
 | |
|                         1
 | |
|                     ) - 1;
 | |
|                 break;
 | |
|             case 'month':
 | |
|                 time = startOfDate(this.year(), this.month() + 1, 1) - 1;
 | |
|                 break;
 | |
|             case 'week':
 | |
|                 time =
 | |
|                     startOfDate(
 | |
|                         this.year(),
 | |
|                         this.month(),
 | |
|                         this.date() - this.weekday() + 7
 | |
|                     ) - 1;
 | |
|                 break;
 | |
|             case 'isoWeek':
 | |
|                 time =
 | |
|                     startOfDate(
 | |
|                         this.year(),
 | |
|                         this.month(),
 | |
|                         this.date() - (this.isoWeekday() - 1) + 7
 | |
|                     ) - 1;
 | |
|                 break;
 | |
|             case 'day':
 | |
|             case 'date':
 | |
|                 time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;
 | |
|                 break;
 | |
|             case 'hour':
 | |
|                 time = this._d.valueOf();
 | |
|                 time +=
 | |
|                     MS_PER_HOUR -
 | |
|                     mod$1(
 | |
|                         time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),
 | |
|                         MS_PER_HOUR
 | |
|                     ) -
 | |
|                     1;
 | |
|                 break;
 | |
|             case 'minute':
 | |
|                 time = this._d.valueOf();
 | |
|                 time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;
 | |
|                 break;
 | |
|             case 'second':
 | |
|                 time = this._d.valueOf();
 | |
|                 time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;
 | |
|                 break;
 | |
|         }
 | |
| 
 | |
|         this._d.setTime(time);
 | |
|         hooks.updateOffset(this, true);
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     function valueOf() {
 | |
|         return this._d.valueOf() - (this._offset || 0) * 60000;
 | |
|     }
 | |
| 
 | |
|     function unix() {
 | |
|         return Math.floor(this.valueOf() / 1000);
 | |
|     }
 | |
| 
 | |
|     function toDate() {
 | |
|         return new Date(this.valueOf());
 | |
|     }
 | |
| 
 | |
|     function toArray() {
 | |
|         var m = this;
 | |
|         return [
 | |
|             m.year(),
 | |
|             m.month(),
 | |
|             m.date(),
 | |
|             m.hour(),
 | |
|             m.minute(),
 | |
|             m.second(),
 | |
|             m.millisecond(),
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     function toObject() {
 | |
|         var m = this;
 | |
|         return {
 | |
|             years: m.year(),
 | |
|             months: m.month(),
 | |
|             date: m.date(),
 | |
|             hours: m.hours(),
 | |
|             minutes: m.minutes(),
 | |
|             seconds: m.seconds(),
 | |
|             milliseconds: m.milliseconds(),
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     function toJSON() {
 | |
|         // new Date(NaN).toJSON() === null
 | |
|         return this.isValid() ? this.toISOString() : null;
 | |
|     }
 | |
| 
 | |
|     function isValid$2() {
 | |
|         return isValid(this);
 | |
|     }
 | |
| 
 | |
|     function parsingFlags() {
 | |
|         return extend({}, getParsingFlags(this));
 | |
|     }
 | |
| 
 | |
|     function invalidAt() {
 | |
|         return getParsingFlags(this).overflow;
 | |
|     }
 | |
| 
 | |
|     function creationData() {
 | |
|         return {
 | |
|             input: this._i,
 | |
|             format: this._f,
 | |
|             locale: this._locale,
 | |
|             isUTC: this._isUTC,
 | |
|             strict: this._strict,
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     addFormatToken('N', 0, 0, 'eraAbbr');
 | |
|     addFormatToken('NN', 0, 0, 'eraAbbr');
 | |
|     addFormatToken('NNN', 0, 0, 'eraAbbr');
 | |
|     addFormatToken('NNNN', 0, 0, 'eraName');
 | |
|     addFormatToken('NNNNN', 0, 0, 'eraNarrow');
 | |
| 
 | |
|     addFormatToken('y', ['y', 1], 'yo', 'eraYear');
 | |
|     addFormatToken('y', ['yy', 2], 0, 'eraYear');
 | |
|     addFormatToken('y', ['yyy', 3], 0, 'eraYear');
 | |
|     addFormatToken('y', ['yyyy', 4], 0, 'eraYear');
 | |
| 
 | |
|     addRegexToken('N', matchEraAbbr);
 | |
|     addRegexToken('NN', matchEraAbbr);
 | |
|     addRegexToken('NNN', matchEraAbbr);
 | |
|     addRegexToken('NNNN', matchEraName);
 | |
|     addRegexToken('NNNNN', matchEraNarrow);
 | |
| 
 | |
|     addParseToken(['N', 'NN', 'NNN', 'NNNN', 'NNNNN'], function (
 | |
|         input,
 | |
|         array,
 | |
|         config,
 | |
|         token
 | |
|     ) {
 | |
|         var era = config._locale.erasParse(input, token, config._strict);
 | |
|         if (era) {
 | |
|             getParsingFlags(config).era = era;
 | |
|         } else {
 | |
|             getParsingFlags(config).invalidEra = input;
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     addRegexToken('y', matchUnsigned);
 | |
|     addRegexToken('yy', matchUnsigned);
 | |
|     addRegexToken('yyy', matchUnsigned);
 | |
|     addRegexToken('yyyy', matchUnsigned);
 | |
|     addRegexToken('yo', matchEraYearOrdinal);
 | |
| 
 | |
|     addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);
 | |
|     addParseToken(['yo'], function (input, array, config, token) {
 | |
|         var match;
 | |
|         if (config._locale._eraYearOrdinalRegex) {
 | |
|             match = input.match(config._locale._eraYearOrdinalRegex);
 | |
|         }
 | |
| 
 | |
|         if (config._locale.eraYearOrdinalParse) {
 | |
|             array[YEAR] = config._locale.eraYearOrdinalParse(input, match);
 | |
|         } else {
 | |
|             array[YEAR] = parseInt(input, 10);
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     function localeEras(m, format) {
 | |
|         var i,
 | |
|             l,
 | |
|             date,
 | |
|             eras = this._eras || getLocale('en')._eras;
 | |
|         for (i = 0, l = eras.length; i < l; ++i) {
 | |
|             switch (typeof eras[i].since) {
 | |
|                 case 'string':
 | |
|                     // truncate time
 | |
|                     date = hooks(eras[i].since).startOf('day');
 | |
|                     eras[i].since = date.valueOf();
 | |
|                     break;
 | |
|             }
 | |
| 
 | |
|             switch (typeof eras[i].until) {
 | |
|                 case 'undefined':
 | |
|                     eras[i].until = +Infinity;
 | |
|                     break;
 | |
|                 case 'string':
 | |
|                     // truncate time
 | |
|                     date = hooks(eras[i].until).startOf('day').valueOf();
 | |
|                     eras[i].until = date.valueOf();
 | |
|                     break;
 | |
|             }
 | |
|         }
 | |
|         return eras;
 | |
|     }
 | |
| 
 | |
|     function localeErasParse(eraName, format, strict) {
 | |
|         var i,
 | |
|             l,
 | |
|             eras = this.eras(),
 | |
|             name,
 | |
|             abbr,
 | |
|             narrow;
 | |
|         eraName = eraName.toUpperCase();
 | |
| 
 | |
|         for (i = 0, l = eras.length; i < l; ++i) {
 | |
|             name = eras[i].name.toUpperCase();
 | |
|             abbr = eras[i].abbr.toUpperCase();
 | |
|             narrow = eras[i].narrow.toUpperCase();
 | |
| 
 | |
|             if (strict) {
 | |
|                 switch (format) {
 | |
|                     case 'N':
 | |
|                     case 'NN':
 | |
|                     case 'NNN':
 | |
|                         if (abbr === eraName) {
 | |
|                             return eras[i];
 | |
|                         }
 | |
|                         break;
 | |
| 
 | |
|                     case 'NNNN':
 | |
|                         if (name === eraName) {
 | |
|                             return eras[i];
 | |
|                         }
 | |
|                         break;
 | |
| 
 | |
|                     case 'NNNNN':
 | |
|                         if (narrow === eraName) {
 | |
|                             return eras[i];
 | |
|                         }
 | |
|                         break;
 | |
|                 }
 | |
|             } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {
 | |
|                 return eras[i];
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function localeErasConvertYear(era, year) {
 | |
|         var dir = era.since <= era.until ? +1 : -1;
 | |
|         if (year === undefined) {
 | |
|             return hooks(era.since).year();
 | |
|         } else {
 | |
|             return hooks(era.since).year() + (year - era.offset) * dir;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function getEraName() {
 | |
|         var i,
 | |
|             l,
 | |
|             val,
 | |
|             eras = this.localeData().eras();
 | |
|         for (i = 0, l = eras.length; i < l; ++i) {
 | |
|             // truncate time
 | |
|             val = this.clone().startOf('day').valueOf();
 | |
| 
 | |
|             if (eras[i].since <= val && val <= eras[i].until) {
 | |
|                 return eras[i].name;
 | |
|             }
 | |
|             if (eras[i].until <= val && val <= eras[i].since) {
 | |
|                 return eras[i].name;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return '';
 | |
|     }
 | |
| 
 | |
|     function getEraNarrow() {
 | |
|         var i,
 | |
|             l,
 | |
|             val,
 | |
|             eras = this.localeData().eras();
 | |
|         for (i = 0, l = eras.length; i < l; ++i) {
 | |
|             // truncate time
 | |
|             val = this.clone().startOf('day').valueOf();
 | |
| 
 | |
|             if (eras[i].since <= val && val <= eras[i].until) {
 | |
|                 return eras[i].narrow;
 | |
|             }
 | |
|             if (eras[i].until <= val && val <= eras[i].since) {
 | |
|                 return eras[i].narrow;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return '';
 | |
|     }
 | |
| 
 | |
|     function getEraAbbr() {
 | |
|         var i,
 | |
|             l,
 | |
|             val,
 | |
|             eras = this.localeData().eras();
 | |
|         for (i = 0, l = eras.length; i < l; ++i) {
 | |
|             // truncate time
 | |
|             val = this.clone().startOf('day').valueOf();
 | |
| 
 | |
|             if (eras[i].since <= val && val <= eras[i].until) {
 | |
|                 return eras[i].abbr;
 | |
|             }
 | |
|             if (eras[i].until <= val && val <= eras[i].since) {
 | |
|                 return eras[i].abbr;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return '';
 | |
|     }
 | |
| 
 | |
|     function getEraYear() {
 | |
|         var i,
 | |
|             l,
 | |
|             dir,
 | |
|             val,
 | |
|             eras = this.localeData().eras();
 | |
|         for (i = 0, l = eras.length; i < l; ++i) {
 | |
|             dir = eras[i].since <= eras[i].until ? +1 : -1;
 | |
| 
 | |
|             // truncate time
 | |
|             val = this.clone().startOf('day').valueOf();
 | |
| 
 | |
|             if (
 | |
|                 (eras[i].since <= val && val <= eras[i].until) ||
 | |
|                 (eras[i].until <= val && val <= eras[i].since)
 | |
|             ) {
 | |
|                 return (
 | |
|                     (this.year() - hooks(eras[i].since).year()) * dir +
 | |
|                     eras[i].offset
 | |
|                 );
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         return this.year();
 | |
|     }
 | |
| 
 | |
|     function erasNameRegex(isStrict) {
 | |
|         if (!hasOwnProp(this, '_erasNameRegex')) {
 | |
|             computeErasParse.call(this);
 | |
|         }
 | |
|         return isStrict ? this._erasNameRegex : this._erasRegex;
 | |
|     }
 | |
| 
 | |
|     function erasAbbrRegex(isStrict) {
 | |
|         if (!hasOwnProp(this, '_erasAbbrRegex')) {
 | |
|             computeErasParse.call(this);
 | |
|         }
 | |
|         return isStrict ? this._erasAbbrRegex : this._erasRegex;
 | |
|     }
 | |
| 
 | |
|     function erasNarrowRegex(isStrict) {
 | |
|         if (!hasOwnProp(this, '_erasNarrowRegex')) {
 | |
|             computeErasParse.call(this);
 | |
|         }
 | |
|         return isStrict ? this._erasNarrowRegex : this._erasRegex;
 | |
|     }
 | |
| 
 | |
|     function matchEraAbbr(isStrict, locale) {
 | |
|         return locale.erasAbbrRegex(isStrict);
 | |
|     }
 | |
| 
 | |
|     function matchEraName(isStrict, locale) {
 | |
|         return locale.erasNameRegex(isStrict);
 | |
|     }
 | |
| 
 | |
|     function matchEraNarrow(isStrict, locale) {
 | |
|         return locale.erasNarrowRegex(isStrict);
 | |
|     }
 | |
| 
 | |
|     function matchEraYearOrdinal(isStrict, locale) {
 | |
|         return locale._eraYearOrdinalRegex || matchUnsigned;
 | |
|     }
 | |
| 
 | |
|     function computeErasParse() {
 | |
|         var abbrPieces = [],
 | |
|             namePieces = [],
 | |
|             narrowPieces = [],
 | |
|             mixedPieces = [],
 | |
|             i,
 | |
|             l,
 | |
|             eras = this.eras();
 | |
| 
 | |
|         for (i = 0, l = eras.length; i < l; ++i) {
 | |
|             namePieces.push(regexEscape(eras[i].name));
 | |
|             abbrPieces.push(regexEscape(eras[i].abbr));
 | |
|             narrowPieces.push(regexEscape(eras[i].narrow));
 | |
| 
 | |
|             mixedPieces.push(regexEscape(eras[i].name));
 | |
|             mixedPieces.push(regexEscape(eras[i].abbr));
 | |
|             mixedPieces.push(regexEscape(eras[i].narrow));
 | |
|         }
 | |
| 
 | |
|         this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
 | |
|         this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');
 | |
|         this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');
 | |
|         this._erasNarrowRegex = new RegExp(
 | |
|             '^(' + narrowPieces.join('|') + ')',
 | |
|             'i'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken(0, ['gg', 2], 0, function () {
 | |
|         return this.weekYear() % 100;
 | |
|     });
 | |
| 
 | |
|     addFormatToken(0, ['GG', 2], 0, function () {
 | |
|         return this.isoWeekYear() % 100;
 | |
|     });
 | |
| 
 | |
|     function addWeekYearFormatToken(token, getter) {
 | |
|         addFormatToken(0, [token, token.length], 0, getter);
 | |
|     }
 | |
| 
 | |
|     addWeekYearFormatToken('gggg', 'weekYear');
 | |
|     addWeekYearFormatToken('ggggg', 'weekYear');
 | |
|     addWeekYearFormatToken('GGGG', 'isoWeekYear');
 | |
|     addWeekYearFormatToken('GGGGG', 'isoWeekYear');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('weekYear', 'gg');
 | |
|     addUnitAlias('isoWeekYear', 'GG');
 | |
| 
 | |
|     // PRIORITY
 | |
| 
 | |
|     addUnitPriority('weekYear', 1);
 | |
|     addUnitPriority('isoWeekYear', 1);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('G', matchSigned);
 | |
|     addRegexToken('g', matchSigned);
 | |
|     addRegexToken('GG', match1to2, match2);
 | |
|     addRegexToken('gg', match1to2, match2);
 | |
|     addRegexToken('GGGG', match1to4, match4);
 | |
|     addRegexToken('gggg', match1to4, match4);
 | |
|     addRegexToken('GGGGG', match1to6, match6);
 | |
|     addRegexToken('ggggg', match1to6, match6);
 | |
| 
 | |
|     addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (
 | |
|         input,
 | |
|         week,
 | |
|         config,
 | |
|         token
 | |
|     ) {
 | |
|         week[token.substr(0, 2)] = toInt(input);
 | |
|     });
 | |
| 
 | |
|     addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
 | |
|         week[token] = hooks.parseTwoDigitYear(input);
 | |
|     });
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function getSetWeekYear(input) {
 | |
|         return getSetWeekYearHelper.call(
 | |
|             this,
 | |
|             input,
 | |
|             this.week(),
 | |
|             this.weekday(),
 | |
|             this.localeData()._week.dow,
 | |
|             this.localeData()._week.doy
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function getSetISOWeekYear(input) {
 | |
|         return getSetWeekYearHelper.call(
 | |
|             this,
 | |
|             input,
 | |
|             this.isoWeek(),
 | |
|             this.isoWeekday(),
 | |
|             1,
 | |
|             4
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function getISOWeeksInYear() {
 | |
|         return weeksInYear(this.year(), 1, 4);
 | |
|     }
 | |
| 
 | |
|     function getISOWeeksInISOWeekYear() {
 | |
|         return weeksInYear(this.isoWeekYear(), 1, 4);
 | |
|     }
 | |
| 
 | |
|     function getWeeksInYear() {
 | |
|         var weekInfo = this.localeData()._week;
 | |
|         return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
 | |
|     }
 | |
| 
 | |
|     function getWeeksInWeekYear() {
 | |
|         var weekInfo = this.localeData()._week;
 | |
|         return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);
 | |
|     }
 | |
| 
 | |
|     function getSetWeekYearHelper(input, week, weekday, dow, doy) {
 | |
|         var weeksTarget;
 | |
|         if (input == null) {
 | |
|             return weekOfYear(this, dow, doy).year;
 | |
|         } else {
 | |
|             weeksTarget = weeksInYear(input, dow, doy);
 | |
|             if (week > weeksTarget) {
 | |
|                 week = weeksTarget;
 | |
|             }
 | |
|             return setWeekAll.call(this, input, week, weekday, dow, doy);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function setWeekAll(weekYear, week, weekday, dow, doy) {
 | |
|         var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
 | |
|             date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
 | |
| 
 | |
|         this.year(date.getUTCFullYear());
 | |
|         this.month(date.getUTCMonth());
 | |
|         this.date(date.getUTCDate());
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('Q', 0, 'Qo', 'quarter');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('quarter', 'Q');
 | |
| 
 | |
|     // PRIORITY
 | |
| 
 | |
|     addUnitPriority('quarter', 7);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('Q', match1);
 | |
|     addParseToken('Q', function (input, array) {
 | |
|         array[MONTH] = (toInt(input) - 1) * 3;
 | |
|     });
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function getSetQuarter(input) {
 | |
|         return input == null
 | |
|             ? Math.ceil((this.month() + 1) / 3)
 | |
|             : this.month((input - 1) * 3 + (this.month() % 3));
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('D', ['DD', 2], 'Do', 'date');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('date', 'D');
 | |
| 
 | |
|     // PRIORITY
 | |
|     addUnitPriority('date', 9);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('D', match1to2);
 | |
|     addRegexToken('DD', match1to2, match2);
 | |
|     addRegexToken('Do', function (isStrict, locale) {
 | |
|         // TODO: Remove "ordinalParse" fallback in next major release.
 | |
|         return isStrict
 | |
|             ? locale._dayOfMonthOrdinalParse || locale._ordinalParse
 | |
|             : locale._dayOfMonthOrdinalParseLenient;
 | |
|     });
 | |
| 
 | |
|     addParseToken(['D', 'DD'], DATE);
 | |
|     addParseToken('Do', function (input, array) {
 | |
|         array[DATE] = toInt(input.match(match1to2)[0]);
 | |
|     });
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     var getSetDayOfMonth = makeGetSet('Date', true);
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('dayOfYear', 'DDD');
 | |
| 
 | |
|     // PRIORITY
 | |
|     addUnitPriority('dayOfYear', 4);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('DDD', match1to3);
 | |
|     addRegexToken('DDDD', match3);
 | |
|     addParseToken(['DDD', 'DDDD'], function (input, array, config) {
 | |
|         config._dayOfYear = toInt(input);
 | |
|     });
 | |
| 
 | |
|     // HELPERS
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function getSetDayOfYear(input) {
 | |
|         var dayOfYear =
 | |
|             Math.round(
 | |
|                 (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5
 | |
|             ) + 1;
 | |
|         return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');
 | |
|     }
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('m', ['mm', 2], 0, 'minute');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('minute', 'm');
 | |
| 
 | |
|     // PRIORITY
 | |
| 
 | |
|     addUnitPriority('minute', 14);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('m', match1to2);
 | |
|     addRegexToken('mm', match1to2, match2);
 | |
|     addParseToken(['m', 'mm'], MINUTE);
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     var getSetMinute = makeGetSet('Minutes', false);
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('s', ['ss', 2], 0, 'second');
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('second', 's');
 | |
| 
 | |
|     // PRIORITY
 | |
| 
 | |
|     addUnitPriority('second', 15);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('s', match1to2);
 | |
|     addRegexToken('ss', match1to2, match2);
 | |
|     addParseToken(['s', 'ss'], SECOND);
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     var getSetSecond = makeGetSet('Seconds', false);
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('S', 0, 0, function () {
 | |
|         return ~~(this.millisecond() / 100);
 | |
|     });
 | |
| 
 | |
|     addFormatToken(0, ['SS', 2], 0, function () {
 | |
|         return ~~(this.millisecond() / 10);
 | |
|     });
 | |
| 
 | |
|     addFormatToken(0, ['SSS', 3], 0, 'millisecond');
 | |
|     addFormatToken(0, ['SSSS', 4], 0, function () {
 | |
|         return this.millisecond() * 10;
 | |
|     });
 | |
|     addFormatToken(0, ['SSSSS', 5], 0, function () {
 | |
|         return this.millisecond() * 100;
 | |
|     });
 | |
|     addFormatToken(0, ['SSSSSS', 6], 0, function () {
 | |
|         return this.millisecond() * 1000;
 | |
|     });
 | |
|     addFormatToken(0, ['SSSSSSS', 7], 0, function () {
 | |
|         return this.millisecond() * 10000;
 | |
|     });
 | |
|     addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
 | |
|         return this.millisecond() * 100000;
 | |
|     });
 | |
|     addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
 | |
|         return this.millisecond() * 1000000;
 | |
|     });
 | |
| 
 | |
|     // ALIASES
 | |
| 
 | |
|     addUnitAlias('millisecond', 'ms');
 | |
| 
 | |
|     // PRIORITY
 | |
| 
 | |
|     addUnitPriority('millisecond', 16);
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('S', match1to3, match1);
 | |
|     addRegexToken('SS', match1to3, match2);
 | |
|     addRegexToken('SSS', match1to3, match3);
 | |
| 
 | |
|     var token, getSetMillisecond;
 | |
|     for (token = 'SSSS'; token.length <= 9; token += 'S') {
 | |
|         addRegexToken(token, matchUnsigned);
 | |
|     }
 | |
| 
 | |
|     function parseMs(input, array) {
 | |
|         array[MILLISECOND] = toInt(('0.' + input) * 1000);
 | |
|     }
 | |
| 
 | |
|     for (token = 'S'; token.length <= 9; token += 'S') {
 | |
|         addParseToken(token, parseMs);
 | |
|     }
 | |
| 
 | |
|     getSetMillisecond = makeGetSet('Milliseconds', false);
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('z', 0, 0, 'zoneAbbr');
 | |
|     addFormatToken('zz', 0, 0, 'zoneName');
 | |
| 
 | |
|     // MOMENTS
 | |
| 
 | |
|     function getZoneAbbr() {
 | |
|         return this._isUTC ? 'UTC' : '';
 | |
|     }
 | |
| 
 | |
|     function getZoneName() {
 | |
|         return this._isUTC ? 'Coordinated Universal Time' : '';
 | |
|     }
 | |
| 
 | |
|     var proto = Moment.prototype;
 | |
| 
 | |
|     proto.add = add;
 | |
|     proto.calendar = calendar$1;
 | |
|     proto.clone = clone;
 | |
|     proto.diff = diff;
 | |
|     proto.endOf = endOf;
 | |
|     proto.format = format;
 | |
|     proto.from = from;
 | |
|     proto.fromNow = fromNow;
 | |
|     proto.to = to;
 | |
|     proto.toNow = toNow;
 | |
|     proto.get = stringGet;
 | |
|     proto.invalidAt = invalidAt;
 | |
|     proto.isAfter = isAfter;
 | |
|     proto.isBefore = isBefore;
 | |
|     proto.isBetween = isBetween;
 | |
|     proto.isSame = isSame;
 | |
|     proto.isSameOrAfter = isSameOrAfter;
 | |
|     proto.isSameOrBefore = isSameOrBefore;
 | |
|     proto.isValid = isValid$2;
 | |
|     proto.lang = lang;
 | |
|     proto.locale = locale;
 | |
|     proto.localeData = localeData;
 | |
|     proto.max = prototypeMax;
 | |
|     proto.min = prototypeMin;
 | |
|     proto.parsingFlags = parsingFlags;
 | |
|     proto.set = stringSet;
 | |
|     proto.startOf = startOf;
 | |
|     proto.subtract = subtract;
 | |
|     proto.toArray = toArray;
 | |
|     proto.toObject = toObject;
 | |
|     proto.toDate = toDate;
 | |
|     proto.toISOString = toISOString;
 | |
|     proto.inspect = inspect;
 | |
|     if (typeof Symbol !== 'undefined' && Symbol.for != null) {
 | |
|         proto[Symbol.for('nodejs.util.inspect.custom')] = function () {
 | |
|             return 'Moment<' + this.format() + '>';
 | |
|         };
 | |
|     }
 | |
|     proto.toJSON = toJSON;
 | |
|     proto.toString = toString;
 | |
|     proto.unix = unix;
 | |
|     proto.valueOf = valueOf;
 | |
|     proto.creationData = creationData;
 | |
|     proto.eraName = getEraName;
 | |
|     proto.eraNarrow = getEraNarrow;
 | |
|     proto.eraAbbr = getEraAbbr;
 | |
|     proto.eraYear = getEraYear;
 | |
|     proto.year = getSetYear;
 | |
|     proto.isLeapYear = getIsLeapYear;
 | |
|     proto.weekYear = getSetWeekYear;
 | |
|     proto.isoWeekYear = getSetISOWeekYear;
 | |
|     proto.quarter = proto.quarters = getSetQuarter;
 | |
|     proto.month = getSetMonth;
 | |
|     proto.daysInMonth = getDaysInMonth;
 | |
|     proto.week = proto.weeks = getSetWeek;
 | |
|     proto.isoWeek = proto.isoWeeks = getSetISOWeek;
 | |
|     proto.weeksInYear = getWeeksInYear;
 | |
|     proto.weeksInWeekYear = getWeeksInWeekYear;
 | |
|     proto.isoWeeksInYear = getISOWeeksInYear;
 | |
|     proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;
 | |
|     proto.date = getSetDayOfMonth;
 | |
|     proto.day = proto.days = getSetDayOfWeek;
 | |
|     proto.weekday = getSetLocaleDayOfWeek;
 | |
|     proto.isoWeekday = getSetISODayOfWeek;
 | |
|     proto.dayOfYear = getSetDayOfYear;
 | |
|     proto.hour = proto.hours = getSetHour;
 | |
|     proto.minute = proto.minutes = getSetMinute;
 | |
|     proto.second = proto.seconds = getSetSecond;
 | |
|     proto.millisecond = proto.milliseconds = getSetMillisecond;
 | |
|     proto.utcOffset = getSetOffset;
 | |
|     proto.utc = setOffsetToUTC;
 | |
|     proto.local = setOffsetToLocal;
 | |
|     proto.parseZone = setOffsetToParsedOffset;
 | |
|     proto.hasAlignedHourOffset = hasAlignedHourOffset;
 | |
|     proto.isDST = isDaylightSavingTime;
 | |
|     proto.isLocal = isLocal;
 | |
|     proto.isUtcOffset = isUtcOffset;
 | |
|     proto.isUtc = isUtc;
 | |
|     proto.isUTC = isUtc;
 | |
|     proto.zoneAbbr = getZoneAbbr;
 | |
|     proto.zoneName = getZoneName;
 | |
|     proto.dates = deprecate(
 | |
|         'dates accessor is deprecated. Use date instead.',
 | |
|         getSetDayOfMonth
 | |
|     );
 | |
|     proto.months = deprecate(
 | |
|         'months accessor is deprecated. Use month instead',
 | |
|         getSetMonth
 | |
|     );
 | |
|     proto.years = deprecate(
 | |
|         'years accessor is deprecated. Use year instead',
 | |
|         getSetYear
 | |
|     );
 | |
|     proto.zone = deprecate(
 | |
|         'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',
 | |
|         getSetZone
 | |
|     );
 | |
|     proto.isDSTShifted = deprecate(
 | |
|         'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',
 | |
|         isDaylightSavingTimeShifted
 | |
|     );
 | |
| 
 | |
|     function createUnix(input) {
 | |
|         return createLocal(input * 1000);
 | |
|     }
 | |
| 
 | |
|     function createInZone() {
 | |
|         return createLocal.apply(null, arguments).parseZone();
 | |
|     }
 | |
| 
 | |
|     function preParsePostFormat(string) {
 | |
|         return string;
 | |
|     }
 | |
| 
 | |
|     var proto$1 = Locale.prototype;
 | |
| 
 | |
|     proto$1.calendar = calendar;
 | |
|     proto$1.longDateFormat = longDateFormat;
 | |
|     proto$1.invalidDate = invalidDate;
 | |
|     proto$1.ordinal = ordinal;
 | |
|     proto$1.preparse = preParsePostFormat;
 | |
|     proto$1.postformat = preParsePostFormat;
 | |
|     proto$1.relativeTime = relativeTime;
 | |
|     proto$1.pastFuture = pastFuture;
 | |
|     proto$1.set = set;
 | |
|     proto$1.eras = localeEras;
 | |
|     proto$1.erasParse = localeErasParse;
 | |
|     proto$1.erasConvertYear = localeErasConvertYear;
 | |
|     proto$1.erasAbbrRegex = erasAbbrRegex;
 | |
|     proto$1.erasNameRegex = erasNameRegex;
 | |
|     proto$1.erasNarrowRegex = erasNarrowRegex;
 | |
| 
 | |
|     proto$1.months = localeMonths;
 | |
|     proto$1.monthsShort = localeMonthsShort;
 | |
|     proto$1.monthsParse = localeMonthsParse;
 | |
|     proto$1.monthsRegex = monthsRegex;
 | |
|     proto$1.monthsShortRegex = monthsShortRegex;
 | |
|     proto$1.week = localeWeek;
 | |
|     proto$1.firstDayOfYear = localeFirstDayOfYear;
 | |
|     proto$1.firstDayOfWeek = localeFirstDayOfWeek;
 | |
| 
 | |
|     proto$1.weekdays = localeWeekdays;
 | |
|     proto$1.weekdaysMin = localeWeekdaysMin;
 | |
|     proto$1.weekdaysShort = localeWeekdaysShort;
 | |
|     proto$1.weekdaysParse = localeWeekdaysParse;
 | |
| 
 | |
|     proto$1.weekdaysRegex = weekdaysRegex;
 | |
|     proto$1.weekdaysShortRegex = weekdaysShortRegex;
 | |
|     proto$1.weekdaysMinRegex = weekdaysMinRegex;
 | |
| 
 | |
|     proto$1.isPM = localeIsPM;
 | |
|     proto$1.meridiem = localeMeridiem;
 | |
| 
 | |
|     function get$1(format, index, field, setter) {
 | |
|         var locale = getLocale(),
 | |
|             utc = createUTC().set(setter, index);
 | |
|         return locale[field](utc, format);
 | |
|     }
 | |
| 
 | |
|     function listMonthsImpl(format, index, field) {
 | |
|         if (isNumber(format)) {
 | |
|             index = format;
 | |
|             format = undefined;
 | |
|         }
 | |
| 
 | |
|         format = format || '';
 | |
| 
 | |
|         if (index != null) {
 | |
|             return get$1(format, index, field, 'month');
 | |
|         }
 | |
| 
 | |
|         var i,
 | |
|             out = [];
 | |
|         for (i = 0; i < 12; i++) {
 | |
|             out[i] = get$1(format, i, field, 'month');
 | |
|         }
 | |
|         return out;
 | |
|     }
 | |
| 
 | |
|     // ()
 | |
|     // (5)
 | |
|     // (fmt, 5)
 | |
|     // (fmt)
 | |
|     // (true)
 | |
|     // (true, 5)
 | |
|     // (true, fmt, 5)
 | |
|     // (true, fmt)
 | |
|     function listWeekdaysImpl(localeSorted, format, index, field) {
 | |
|         if (typeof localeSorted === 'boolean') {
 | |
|             if (isNumber(format)) {
 | |
|                 index = format;
 | |
|                 format = undefined;
 | |
|             }
 | |
| 
 | |
|             format = format || '';
 | |
|         } else {
 | |
|             format = localeSorted;
 | |
|             index = format;
 | |
|             localeSorted = false;
 | |
| 
 | |
|             if (isNumber(format)) {
 | |
|                 index = format;
 | |
|                 format = undefined;
 | |
|             }
 | |
| 
 | |
|             format = format || '';
 | |
|         }
 | |
| 
 | |
|         var locale = getLocale(),
 | |
|             shift = localeSorted ? locale._week.dow : 0,
 | |
|             i,
 | |
|             out = [];
 | |
| 
 | |
|         if (index != null) {
 | |
|             return get$1(format, (index + shift) % 7, field, 'day');
 | |
|         }
 | |
| 
 | |
|         for (i = 0; i < 7; i++) {
 | |
|             out[i] = get$1(format, (i + shift) % 7, field, 'day');
 | |
|         }
 | |
|         return out;
 | |
|     }
 | |
| 
 | |
|     function listMonths(format, index) {
 | |
|         return listMonthsImpl(format, index, 'months');
 | |
|     }
 | |
| 
 | |
|     function listMonthsShort(format, index) {
 | |
|         return listMonthsImpl(format, index, 'monthsShort');
 | |
|     }
 | |
| 
 | |
|     function listWeekdays(localeSorted, format, index) {
 | |
|         return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
 | |
|     }
 | |
| 
 | |
|     function listWeekdaysShort(localeSorted, format, index) {
 | |
|         return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
 | |
|     }
 | |
| 
 | |
|     function listWeekdaysMin(localeSorted, format, index) {
 | |
|         return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
 | |
|     }
 | |
| 
 | |
|     getSetGlobalLocale('en', {
 | |
|         eras: [
 | |
|             {
 | |
|                 since: '0001-01-01',
 | |
|                 until: +Infinity,
 | |
|                 offset: 1,
 | |
|                 name: 'Anno Domini',
 | |
|                 narrow: 'AD',
 | |
|                 abbr: 'AD',
 | |
|             },
 | |
|             {
 | |
|                 since: '0000-12-31',
 | |
|                 until: -Infinity,
 | |
|                 offset: 1,
 | |
|                 name: 'Before Christ',
 | |
|                 narrow: 'BC',
 | |
|                 abbr: 'BC',
 | |
|             },
 | |
|         ],
 | |
|         dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
 | |
|         ordinal: function (number) {
 | |
|             var b = number % 10,
 | |
|                 output =
 | |
|                     toInt((number % 100) / 10) === 1
 | |
|                         ? 'th'
 | |
|                         : b === 1
 | |
|                         ? 'st'
 | |
|                         : b === 2
 | |
|                         ? 'nd'
 | |
|                         : b === 3
 | |
|                         ? 'rd'
 | |
|                         : 'th';
 | |
|             return number + output;
 | |
|         },
 | |
|     });
 | |
| 
 | |
|     // Side effect imports
 | |
| 
 | |
|     hooks.lang = deprecate(
 | |
|         'moment.lang is deprecated. Use moment.locale instead.',
 | |
|         getSetGlobalLocale
 | |
|     );
 | |
|     hooks.langData = deprecate(
 | |
|         'moment.langData is deprecated. Use moment.localeData instead.',
 | |
|         getLocale
 | |
|     );
 | |
| 
 | |
|     var mathAbs = Math.abs;
 | |
| 
 | |
|     function abs() {
 | |
|         var data = this._data;
 | |
| 
 | |
|         this._milliseconds = mathAbs(this._milliseconds);
 | |
|         this._days = mathAbs(this._days);
 | |
|         this._months = mathAbs(this._months);
 | |
| 
 | |
|         data.milliseconds = mathAbs(data.milliseconds);
 | |
|         data.seconds = mathAbs(data.seconds);
 | |
|         data.minutes = mathAbs(data.minutes);
 | |
|         data.hours = mathAbs(data.hours);
 | |
|         data.months = mathAbs(data.months);
 | |
|         data.years = mathAbs(data.years);
 | |
| 
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     function addSubtract$1(duration, input, value, direction) {
 | |
|         var other = createDuration(input, value);
 | |
| 
 | |
|         duration._milliseconds += direction * other._milliseconds;
 | |
|         duration._days += direction * other._days;
 | |
|         duration._months += direction * other._months;
 | |
| 
 | |
|         return duration._bubble();
 | |
|     }
 | |
| 
 | |
|     // supports only 2.0-style add(1, 's') or add(duration)
 | |
|     function add$1(input, value) {
 | |
|         return addSubtract$1(this, input, value, 1);
 | |
|     }
 | |
| 
 | |
|     // supports only 2.0-style subtract(1, 's') or subtract(duration)
 | |
|     function subtract$1(input, value) {
 | |
|         return addSubtract$1(this, input, value, -1);
 | |
|     }
 | |
| 
 | |
|     function absCeil(number) {
 | |
|         if (number < 0) {
 | |
|             return Math.floor(number);
 | |
|         } else {
 | |
|             return Math.ceil(number);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function bubble() {
 | |
|         var milliseconds = this._milliseconds,
 | |
|             days = this._days,
 | |
|             months = this._months,
 | |
|             data = this._data,
 | |
|             seconds,
 | |
|             minutes,
 | |
|             hours,
 | |
|             years,
 | |
|             monthsFromDays;
 | |
| 
 | |
|         // if we have a mix of positive and negative values, bubble down first
 | |
|         // check: https://github.com/moment/moment/issues/2166
 | |
|         if (
 | |
|             !(
 | |
|                 (milliseconds >= 0 && days >= 0 && months >= 0) ||
 | |
|                 (milliseconds <= 0 && days <= 0 && months <= 0)
 | |
|             )
 | |
|         ) {
 | |
|             milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
 | |
|             days = 0;
 | |
|             months = 0;
 | |
|         }
 | |
| 
 | |
|         // The following code bubbles up values, see the tests for
 | |
|         // examples of what that means.
 | |
|         data.milliseconds = milliseconds % 1000;
 | |
| 
 | |
|         seconds = absFloor(milliseconds / 1000);
 | |
|         data.seconds = seconds % 60;
 | |
| 
 | |
|         minutes = absFloor(seconds / 60);
 | |
|         data.minutes = minutes % 60;
 | |
| 
 | |
|         hours = absFloor(minutes / 60);
 | |
|         data.hours = hours % 24;
 | |
| 
 | |
|         days += absFloor(hours / 24);
 | |
| 
 | |
|         // convert days to months
 | |
|         monthsFromDays = absFloor(daysToMonths(days));
 | |
|         months += monthsFromDays;
 | |
|         days -= absCeil(monthsToDays(monthsFromDays));
 | |
| 
 | |
|         // 12 months -> 1 year
 | |
|         years = absFloor(months / 12);
 | |
|         months %= 12;
 | |
| 
 | |
|         data.days = days;
 | |
|         data.months = months;
 | |
|         data.years = years;
 | |
| 
 | |
|         return this;
 | |
|     }
 | |
| 
 | |
|     function daysToMonths(days) {
 | |
|         // 400 years have 146097 days (taking into account leap year rules)
 | |
|         // 400 years have 12 months === 4800
 | |
|         return (days * 4800) / 146097;
 | |
|     }
 | |
| 
 | |
|     function monthsToDays(months) {
 | |
|         // the reverse of daysToMonths
 | |
|         return (months * 146097) / 4800;
 | |
|     }
 | |
| 
 | |
|     function as(units) {
 | |
|         if (!this.isValid()) {
 | |
|             return NaN;
 | |
|         }
 | |
|         var days,
 | |
|             months,
 | |
|             milliseconds = this._milliseconds;
 | |
| 
 | |
|         units = normalizeUnits(units);
 | |
| 
 | |
|         if (units === 'month' || units === 'quarter' || units === 'year') {
 | |
|             days = this._days + milliseconds / 864e5;
 | |
|             months = this._months + daysToMonths(days);
 | |
|             switch (units) {
 | |
|                 case 'month':
 | |
|                     return months;
 | |
|                 case 'quarter':
 | |
|                     return months / 3;
 | |
|                 case 'year':
 | |
|                     return months / 12;
 | |
|             }
 | |
|         } else {
 | |
|             // handle milliseconds separately because of floating point math errors (issue #1867)
 | |
|             days = this._days + Math.round(monthsToDays(this._months));
 | |
|             switch (units) {
 | |
|                 case 'week':
 | |
|                     return days / 7 + milliseconds / 6048e5;
 | |
|                 case 'day':
 | |
|                     return days + milliseconds / 864e5;
 | |
|                 case 'hour':
 | |
|                     return days * 24 + milliseconds / 36e5;
 | |
|                 case 'minute':
 | |
|                     return days * 1440 + milliseconds / 6e4;
 | |
|                 case 'second':
 | |
|                     return days * 86400 + milliseconds / 1000;
 | |
|                 // Math.floor prevents floating point math errors here
 | |
|                 case 'millisecond':
 | |
|                     return Math.floor(days * 864e5) + milliseconds;
 | |
|                 default:
 | |
|                     throw new Error('Unknown unit ' + units);
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // TODO: Use this.as('ms')?
 | |
|     function valueOf$1() {
 | |
|         if (!this.isValid()) {
 | |
|             return NaN;
 | |
|         }
 | |
|         return (
 | |
|             this._milliseconds +
 | |
|             this._days * 864e5 +
 | |
|             (this._months % 12) * 2592e6 +
 | |
|             toInt(this._months / 12) * 31536e6
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     function makeAs(alias) {
 | |
|         return function () {
 | |
|             return this.as(alias);
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     var asMilliseconds = makeAs('ms'),
 | |
|         asSeconds = makeAs('s'),
 | |
|         asMinutes = makeAs('m'),
 | |
|         asHours = makeAs('h'),
 | |
|         asDays = makeAs('d'),
 | |
|         asWeeks = makeAs('w'),
 | |
|         asMonths = makeAs('M'),
 | |
|         asQuarters = makeAs('Q'),
 | |
|         asYears = makeAs('y');
 | |
| 
 | |
|     function clone$1() {
 | |
|         return createDuration(this);
 | |
|     }
 | |
| 
 | |
|     function get$2(units) {
 | |
|         units = normalizeUnits(units);
 | |
|         return this.isValid() ? this[units + 's']() : NaN;
 | |
|     }
 | |
| 
 | |
|     function makeGetter(name) {
 | |
|         return function () {
 | |
|             return this.isValid() ? this._data[name] : NaN;
 | |
|         };
 | |
|     }
 | |
| 
 | |
|     var milliseconds = makeGetter('milliseconds'),
 | |
|         seconds = makeGetter('seconds'),
 | |
|         minutes = makeGetter('minutes'),
 | |
|         hours = makeGetter('hours'),
 | |
|         days = makeGetter('days'),
 | |
|         months = makeGetter('months'),
 | |
|         years = makeGetter('years');
 | |
| 
 | |
|     function weeks() {
 | |
|         return absFloor(this.days() / 7);
 | |
|     }
 | |
| 
 | |
|     var round = Math.round,
 | |
|         thresholds = {
 | |
|             ss: 44, // a few seconds to seconds
 | |
|             s: 45, // seconds to minute
 | |
|             m: 45, // minutes to hour
 | |
|             h: 22, // hours to day
 | |
|             d: 26, // days to month/week
 | |
|             w: null, // weeks to month
 | |
|             M: 11, // months to year
 | |
|         };
 | |
| 
 | |
|     // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
 | |
|     function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
 | |
|         return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
 | |
|     }
 | |
| 
 | |
|     function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {
 | |
|         var duration = createDuration(posNegDuration).abs(),
 | |
|             seconds = round(duration.as('s')),
 | |
|             minutes = round(duration.as('m')),
 | |
|             hours = round(duration.as('h')),
 | |
|             days = round(duration.as('d')),
 | |
|             months = round(duration.as('M')),
 | |
|             weeks = round(duration.as('w')),
 | |
|             years = round(duration.as('y')),
 | |
|             a =
 | |
|                 (seconds <= thresholds.ss && ['s', seconds]) ||
 | |
|                 (seconds < thresholds.s && ['ss', seconds]) ||
 | |
|                 (minutes <= 1 && ['m']) ||
 | |
|                 (minutes < thresholds.m && ['mm', minutes]) ||
 | |
|                 (hours <= 1 && ['h']) ||
 | |
|                 (hours < thresholds.h && ['hh', hours]) ||
 | |
|                 (days <= 1 && ['d']) ||
 | |
|                 (days < thresholds.d && ['dd', days]);
 | |
| 
 | |
|         if (thresholds.w != null) {
 | |
|             a =
 | |
|                 a ||
 | |
|                 (weeks <= 1 && ['w']) ||
 | |
|                 (weeks < thresholds.w && ['ww', weeks]);
 | |
|         }
 | |
|         a = a ||
 | |
|             (months <= 1 && ['M']) ||
 | |
|             (months < thresholds.M && ['MM', months]) ||
 | |
|             (years <= 1 && ['y']) || ['yy', years];
 | |
| 
 | |
|         a[2] = withoutSuffix;
 | |
|         a[3] = +posNegDuration > 0;
 | |
|         a[4] = locale;
 | |
|         return substituteTimeAgo.apply(null, a);
 | |
|     }
 | |
| 
 | |
|     // This function allows you to set the rounding function for relative time strings
 | |
|     function getSetRelativeTimeRounding(roundingFunction) {
 | |
|         if (roundingFunction === undefined) {
 | |
|             return round;
 | |
|         }
 | |
|         if (typeof roundingFunction === 'function') {
 | |
|             round = roundingFunction;
 | |
|             return true;
 | |
|         }
 | |
|         return false;
 | |
|     }
 | |
| 
 | |
|     // This function allows you to set a threshold for relative time strings
 | |
|     function getSetRelativeTimeThreshold(threshold, limit) {
 | |
|         if (thresholds[threshold] === undefined) {
 | |
|             return false;
 | |
|         }
 | |
|         if (limit === undefined) {
 | |
|             return thresholds[threshold];
 | |
|         }
 | |
|         thresholds[threshold] = limit;
 | |
|         if (threshold === 's') {
 | |
|             thresholds.ss = limit - 1;
 | |
|         }
 | |
|         return true;
 | |
|     }
 | |
| 
 | |
|     function humanize(argWithSuffix, argThresholds) {
 | |
|         if (!this.isValid()) {
 | |
|             return this.localeData().invalidDate();
 | |
|         }
 | |
| 
 | |
|         var withSuffix = false,
 | |
|             th = thresholds,
 | |
|             locale,
 | |
|             output;
 | |
| 
 | |
|         if (typeof argWithSuffix === 'object') {
 | |
|             argThresholds = argWithSuffix;
 | |
|             argWithSuffix = false;
 | |
|         }
 | |
|         if (typeof argWithSuffix === 'boolean') {
 | |
|             withSuffix = argWithSuffix;
 | |
|         }
 | |
|         if (typeof argThresholds === 'object') {
 | |
|             th = Object.assign({}, thresholds, argThresholds);
 | |
|             if (argThresholds.s != null && argThresholds.ss == null) {
 | |
|                 th.ss = argThresholds.s - 1;
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         locale = this.localeData();
 | |
|         output = relativeTime$1(this, !withSuffix, th, locale);
 | |
| 
 | |
|         if (withSuffix) {
 | |
|             output = locale.pastFuture(+this, output);
 | |
|         }
 | |
| 
 | |
|         return locale.postformat(output);
 | |
|     }
 | |
| 
 | |
|     var abs$1 = Math.abs;
 | |
| 
 | |
|     function sign(x) {
 | |
|         return (x > 0) - (x < 0) || +x;
 | |
|     }
 | |
| 
 | |
|     function toISOString$1() {
 | |
|         // for ISO strings we do not use the normal bubbling rules:
 | |
|         //  * milliseconds bubble up until they become hours
 | |
|         //  * days do not bubble at all
 | |
|         //  * months bubble up until they become years
 | |
|         // This is because there is no context-free conversion between hours and days
 | |
|         // (think of clock changes)
 | |
|         // and also not between days and months (28-31 days per month)
 | |
|         if (!this.isValid()) {
 | |
|             return this.localeData().invalidDate();
 | |
|         }
 | |
| 
 | |
|         var seconds = abs$1(this._milliseconds) / 1000,
 | |
|             days = abs$1(this._days),
 | |
|             months = abs$1(this._months),
 | |
|             minutes,
 | |
|             hours,
 | |
|             years,
 | |
|             s,
 | |
|             total = this.asSeconds(),
 | |
|             totalSign,
 | |
|             ymSign,
 | |
|             daysSign,
 | |
|             hmsSign;
 | |
| 
 | |
|         if (!total) {
 | |
|             // this is the same as C#'s (Noda) and python (isodate)...
 | |
|             // but not other JS (goog.date)
 | |
|             return 'P0D';
 | |
|         }
 | |
| 
 | |
|         // 3600 seconds -> 60 minutes -> 1 hour
 | |
|         minutes = absFloor(seconds / 60);
 | |
|         hours = absFloor(minutes / 60);
 | |
|         seconds %= 60;
 | |
|         minutes %= 60;
 | |
| 
 | |
|         // 12 months -> 1 year
 | |
|         years = absFloor(months / 12);
 | |
|         months %= 12;
 | |
| 
 | |
|         // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
 | |
|         s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
 | |
| 
 | |
|         totalSign = total < 0 ? '-' : '';
 | |
|         ymSign = sign(this._months) !== sign(total) ? '-' : '';
 | |
|         daysSign = sign(this._days) !== sign(total) ? '-' : '';
 | |
|         hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
 | |
| 
 | |
|         return (
 | |
|             totalSign +
 | |
|             'P' +
 | |
|             (years ? ymSign + years + 'Y' : '') +
 | |
|             (months ? ymSign + months + 'M' : '') +
 | |
|             (days ? daysSign + days + 'D' : '') +
 | |
|             (hours || minutes || seconds ? 'T' : '') +
 | |
|             (hours ? hmsSign + hours + 'H' : '') +
 | |
|             (minutes ? hmsSign + minutes + 'M' : '') +
 | |
|             (seconds ? hmsSign + s + 'S' : '')
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     var proto$2 = Duration.prototype;
 | |
| 
 | |
|     proto$2.isValid = isValid$1;
 | |
|     proto$2.abs = abs;
 | |
|     proto$2.add = add$1;
 | |
|     proto$2.subtract = subtract$1;
 | |
|     proto$2.as = as;
 | |
|     proto$2.asMilliseconds = asMilliseconds;
 | |
|     proto$2.asSeconds = asSeconds;
 | |
|     proto$2.asMinutes = asMinutes;
 | |
|     proto$2.asHours = asHours;
 | |
|     proto$2.asDays = asDays;
 | |
|     proto$2.asWeeks = asWeeks;
 | |
|     proto$2.asMonths = asMonths;
 | |
|     proto$2.asQuarters = asQuarters;
 | |
|     proto$2.asYears = asYears;
 | |
|     proto$2.valueOf = valueOf$1;
 | |
|     proto$2._bubble = bubble;
 | |
|     proto$2.clone = clone$1;
 | |
|     proto$2.get = get$2;
 | |
|     proto$2.milliseconds = milliseconds;
 | |
|     proto$2.seconds = seconds;
 | |
|     proto$2.minutes = minutes;
 | |
|     proto$2.hours = hours;
 | |
|     proto$2.days = days;
 | |
|     proto$2.weeks = weeks;
 | |
|     proto$2.months = months;
 | |
|     proto$2.years = years;
 | |
|     proto$2.humanize = humanize;
 | |
|     proto$2.toISOString = toISOString$1;
 | |
|     proto$2.toString = toISOString$1;
 | |
|     proto$2.toJSON = toISOString$1;
 | |
|     proto$2.locale = locale;
 | |
|     proto$2.localeData = localeData;
 | |
| 
 | |
|     proto$2.toIsoString = deprecate(
 | |
|         'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',
 | |
|         toISOString$1
 | |
|     );
 | |
|     proto$2.lang = lang;
 | |
| 
 | |
|     // FORMATTING
 | |
| 
 | |
|     addFormatToken('X', 0, 0, 'unix');
 | |
|     addFormatToken('x', 0, 0, 'valueOf');
 | |
| 
 | |
|     // PARSING
 | |
| 
 | |
|     addRegexToken('x', matchSigned);
 | |
|     addRegexToken('X', matchTimestamp);
 | |
|     addParseToken('X', function (input, array, config) {
 | |
|         config._d = new Date(parseFloat(input) * 1000);
 | |
|     });
 | |
|     addParseToken('x', function (input, array, config) {
 | |
|         config._d = new Date(toInt(input));
 | |
|     });
 | |
| 
 | |
|     //! moment.js
 | |
| 
 | |
|     hooks.version = '2.29.1';
 | |
| 
 | |
|     setHookCallback(createLocal);
 | |
| 
 | |
|     hooks.fn = proto;
 | |
|     hooks.min = min;
 | |
|     hooks.max = max;
 | |
|     hooks.now = now;
 | |
|     hooks.utc = createUTC;
 | |
|     hooks.unix = createUnix;
 | |
|     hooks.months = listMonths;
 | |
|     hooks.isDate = isDate;
 | |
|     hooks.locale = getSetGlobalLocale;
 | |
|     hooks.invalid = createInvalid;
 | |
|     hooks.duration = createDuration;
 | |
|     hooks.isMoment = isMoment;
 | |
|     hooks.weekdays = listWeekdays;
 | |
|     hooks.parseZone = createInZone;
 | |
|     hooks.localeData = getLocale;
 | |
|     hooks.isDuration = isDuration;
 | |
|     hooks.monthsShort = listMonthsShort;
 | |
|     hooks.weekdaysMin = listWeekdaysMin;
 | |
|     hooks.defineLocale = defineLocale;
 | |
|     hooks.updateLocale = updateLocale;
 | |
|     hooks.locales = listLocales;
 | |
|     hooks.weekdaysShort = listWeekdaysShort;
 | |
|     hooks.normalizeUnits = normalizeUnits;
 | |
|     hooks.relativeTimeRounding = getSetRelativeTimeRounding;
 | |
|     hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
 | |
|     hooks.calendarFormat = getCalendarFormat;
 | |
|     hooks.prototype = proto;
 | |
| 
 | |
|     // currently HTML5 input type only supports 24-hour formats
 | |
|     hooks.HTML5_FMT = {
 | |
|         DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type="datetime-local" />
 | |
|         DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type="datetime-local" step="1" />
 | |
|         DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type="datetime-local" step="0.001" />
 | |
|         DATE: 'YYYY-MM-DD', // <input type="date" />
 | |
|         TIME: 'HH:mm', // <input type="time" />
 | |
|         TIME_SECONDS: 'HH:mm:ss', // <input type="time" step="1" />
 | |
|         TIME_MS: 'HH:mm:ss.SSS', // <input type="time" step="0.001" />
 | |
|         WEEK: 'GGGG-[W]WW', // <input type="week" />
 | |
|         MONTH: 'YYYY-MM', // <input type="month" />
 | |
|     };
 | |
| 
 | |
|     return hooks;
 | |
| 
 | |
| })));
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 467:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
 | |
| 
 | |
| var Stream = _interopDefault(__webpack_require__(2413));
 | |
| var http = _interopDefault(__webpack_require__(8605));
 | |
| var Url = _interopDefault(__webpack_require__(8835));
 | |
| var https = _interopDefault(__webpack_require__(7211));
 | |
| var zlib = _interopDefault(__webpack_require__(8761));
 | |
| 
 | |
| // Based on https://github.com/tmpvar/jsdom/blob/aa85b2abf07766ff7bf5c1f6daafb3726f2f2db5/lib/jsdom/living/blob.js
 | |
| 
 | |
| // fix for "Readable" isn't a named export issue
 | |
| const Readable = Stream.Readable;
 | |
| 
 | |
| const BUFFER = Symbol('buffer');
 | |
| const TYPE = Symbol('type');
 | |
| 
 | |
| class Blob {
 | |
| 	constructor() {
 | |
| 		this[TYPE] = '';
 | |
| 
 | |
| 		const blobParts = arguments[0];
 | |
| 		const options = arguments[1];
 | |
| 
 | |
| 		const buffers = [];
 | |
| 		let size = 0;
 | |
| 
 | |
| 		if (blobParts) {
 | |
| 			const a = blobParts;
 | |
| 			const length = Number(a.length);
 | |
| 			for (let i = 0; i < length; i++) {
 | |
| 				const element = a[i];
 | |
| 				let buffer;
 | |
| 				if (element instanceof Buffer) {
 | |
| 					buffer = element;
 | |
| 				} else if (ArrayBuffer.isView(element)) {
 | |
| 					buffer = Buffer.from(element.buffer, element.byteOffset, element.byteLength);
 | |
| 				} else if (element instanceof ArrayBuffer) {
 | |
| 					buffer = Buffer.from(element);
 | |
| 				} else if (element instanceof Blob) {
 | |
| 					buffer = element[BUFFER];
 | |
| 				} else {
 | |
| 					buffer = Buffer.from(typeof element === 'string' ? element : String(element));
 | |
| 				}
 | |
| 				size += buffer.length;
 | |
| 				buffers.push(buffer);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		this[BUFFER] = Buffer.concat(buffers);
 | |
| 
 | |
| 		let type = options && options.type !== undefined && String(options.type).toLowerCase();
 | |
| 		if (type && !/[^\u0020-\u007E]/.test(type)) {
 | |
| 			this[TYPE] = type;
 | |
| 		}
 | |
| 	}
 | |
| 	get size() {
 | |
| 		return this[BUFFER].length;
 | |
| 	}
 | |
| 	get type() {
 | |
| 		return this[TYPE];
 | |
| 	}
 | |
| 	text() {
 | |
| 		return Promise.resolve(this[BUFFER].toString());
 | |
| 	}
 | |
| 	arrayBuffer() {
 | |
| 		const buf = this[BUFFER];
 | |
| 		const ab = buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
 | |
| 		return Promise.resolve(ab);
 | |
| 	}
 | |
| 	stream() {
 | |
| 		const readable = new Readable();
 | |
| 		readable._read = function () {};
 | |
| 		readable.push(this[BUFFER]);
 | |
| 		readable.push(null);
 | |
| 		return readable;
 | |
| 	}
 | |
| 	toString() {
 | |
| 		return '[object Blob]';
 | |
| 	}
 | |
| 	slice() {
 | |
| 		const size = this.size;
 | |
| 
 | |
| 		const start = arguments[0];
 | |
| 		const end = arguments[1];
 | |
| 		let relativeStart, relativeEnd;
 | |
| 		if (start === undefined) {
 | |
| 			relativeStart = 0;
 | |
| 		} else if (start < 0) {
 | |
| 			relativeStart = Math.max(size + start, 0);
 | |
| 		} else {
 | |
| 			relativeStart = Math.min(start, size);
 | |
| 		}
 | |
| 		if (end === undefined) {
 | |
| 			relativeEnd = size;
 | |
| 		} else if (end < 0) {
 | |
| 			relativeEnd = Math.max(size + end, 0);
 | |
| 		} else {
 | |
| 			relativeEnd = Math.min(end, size);
 | |
| 		}
 | |
| 		const span = Math.max(relativeEnd - relativeStart, 0);
 | |
| 
 | |
| 		const buffer = this[BUFFER];
 | |
| 		const slicedBuffer = buffer.slice(relativeStart, relativeStart + span);
 | |
| 		const blob = new Blob([], { type: arguments[2] });
 | |
| 		blob[BUFFER] = slicedBuffer;
 | |
| 		return blob;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| Object.defineProperties(Blob.prototype, {
 | |
| 	size: { enumerable: true },
 | |
| 	type: { enumerable: true },
 | |
| 	slice: { enumerable: true }
 | |
| });
 | |
| 
 | |
| Object.defineProperty(Blob.prototype, Symbol.toStringTag, {
 | |
| 	value: 'Blob',
 | |
| 	writable: false,
 | |
| 	enumerable: false,
 | |
| 	configurable: true
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * fetch-error.js
 | |
|  *
 | |
|  * FetchError interface for operational errors
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Create FetchError instance
 | |
|  *
 | |
|  * @param   String      message      Error message for human
 | |
|  * @param   String      type         Error type for machine
 | |
|  * @param   String      systemError  For Node.js system error
 | |
|  * @return  FetchError
 | |
|  */
 | |
| function FetchError(message, type, systemError) {
 | |
|   Error.call(this, message);
 | |
| 
 | |
|   this.message = message;
 | |
|   this.type = type;
 | |
| 
 | |
|   // when err.type is `system`, err.code contains system error code
 | |
|   if (systemError) {
 | |
|     this.code = this.errno = systemError.code;
 | |
|   }
 | |
| 
 | |
|   // hide custom error implementation details from end-users
 | |
|   Error.captureStackTrace(this, this.constructor);
 | |
| }
 | |
| 
 | |
| FetchError.prototype = Object.create(Error.prototype);
 | |
| FetchError.prototype.constructor = FetchError;
 | |
| FetchError.prototype.name = 'FetchError';
 | |
| 
 | |
| let convert;
 | |
| try {
 | |
| 	convert = __webpack_require__(2877).convert;
 | |
| } catch (e) {}
 | |
| 
 | |
| const INTERNALS = Symbol('Body internals');
 | |
| 
 | |
| // fix an issue where "PassThrough" isn't a named export for node <10
 | |
| const PassThrough = Stream.PassThrough;
 | |
| 
 | |
| /**
 | |
|  * Body mixin
 | |
|  *
 | |
|  * Ref: https://fetch.spec.whatwg.org/#body
 | |
|  *
 | |
|  * @param   Stream  body  Readable stream
 | |
|  * @param   Object  opts  Response options
 | |
|  * @return  Void
 | |
|  */
 | |
| function Body(body) {
 | |
| 	var _this = this;
 | |
| 
 | |
| 	var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
 | |
| 	    _ref$size = _ref.size;
 | |
| 
 | |
| 	let size = _ref$size === undefined ? 0 : _ref$size;
 | |
| 	var _ref$timeout = _ref.timeout;
 | |
| 	let timeout = _ref$timeout === undefined ? 0 : _ref$timeout;
 | |
| 
 | |
| 	if (body == null) {
 | |
| 		// body is undefined or null
 | |
| 		body = null;
 | |
| 	} else if (isURLSearchParams(body)) {
 | |
| 		// body is a URLSearchParams
 | |
| 		body = Buffer.from(body.toString());
 | |
| 	} else if (isBlob(body)) ; else if (Buffer.isBuffer(body)) ; else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
 | |
| 		// body is ArrayBuffer
 | |
| 		body = Buffer.from(body);
 | |
| 	} else if (ArrayBuffer.isView(body)) {
 | |
| 		// body is ArrayBufferView
 | |
| 		body = Buffer.from(body.buffer, body.byteOffset, body.byteLength);
 | |
| 	} else if (body instanceof Stream) ; else {
 | |
| 		// none of the above
 | |
| 		// coerce to string then buffer
 | |
| 		body = Buffer.from(String(body));
 | |
| 	}
 | |
| 	this[INTERNALS] = {
 | |
| 		body,
 | |
| 		disturbed: false,
 | |
| 		error: null
 | |
| 	};
 | |
| 	this.size = size;
 | |
| 	this.timeout = timeout;
 | |
| 
 | |
| 	if (body instanceof Stream) {
 | |
| 		body.on('error', function (err) {
 | |
| 			const error = err.name === 'AbortError' ? err : new FetchError(`Invalid response body while trying to fetch ${_this.url}: ${err.message}`, 'system', err);
 | |
| 			_this[INTERNALS].error = error;
 | |
| 		});
 | |
| 	}
 | |
| }
 | |
| 
 | |
| Body.prototype = {
 | |
| 	get body() {
 | |
| 		return this[INTERNALS].body;
 | |
| 	},
 | |
| 
 | |
| 	get bodyUsed() {
 | |
| 		return this[INTERNALS].disturbed;
 | |
| 	},
 | |
| 
 | |
| 	/**
 | |
|   * Decode response as ArrayBuffer
 | |
|   *
 | |
|   * @return  Promise
 | |
|   */
 | |
| 	arrayBuffer() {
 | |
| 		return consumeBody.call(this).then(function (buf) {
 | |
| 			return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
 | |
| 		});
 | |
| 	},
 | |
| 
 | |
| 	/**
 | |
|   * Return raw response as Blob
 | |
|   *
 | |
|   * @return Promise
 | |
|   */
 | |
| 	blob() {
 | |
| 		let ct = this.headers && this.headers.get('content-type') || '';
 | |
| 		return consumeBody.call(this).then(function (buf) {
 | |
| 			return Object.assign(
 | |
| 			// Prevent copying
 | |
| 			new Blob([], {
 | |
| 				type: ct.toLowerCase()
 | |
| 			}), {
 | |
| 				[BUFFER]: buf
 | |
| 			});
 | |
| 		});
 | |
| 	},
 | |
| 
 | |
| 	/**
 | |
|   * Decode response as json
 | |
|   *
 | |
|   * @return  Promise
 | |
|   */
 | |
| 	json() {
 | |
| 		var _this2 = this;
 | |
| 
 | |
| 		return consumeBody.call(this).then(function (buffer) {
 | |
| 			try {
 | |
| 				return JSON.parse(buffer.toString());
 | |
| 			} catch (err) {
 | |
| 				return Body.Promise.reject(new FetchError(`invalid json response body at ${_this2.url} reason: ${err.message}`, 'invalid-json'));
 | |
| 			}
 | |
| 		});
 | |
| 	},
 | |
| 
 | |
| 	/**
 | |
|   * Decode response as text
 | |
|   *
 | |
|   * @return  Promise
 | |
|   */
 | |
| 	text() {
 | |
| 		return consumeBody.call(this).then(function (buffer) {
 | |
| 			return buffer.toString();
 | |
| 		});
 | |
| 	},
 | |
| 
 | |
| 	/**
 | |
|   * Decode response as buffer (non-spec api)
 | |
|   *
 | |
|   * @return  Promise
 | |
|   */
 | |
| 	buffer() {
 | |
| 		return consumeBody.call(this);
 | |
| 	},
 | |
| 
 | |
| 	/**
 | |
|   * Decode response as text, while automatically detecting the encoding and
 | |
|   * trying to decode to UTF-8 (non-spec api)
 | |
|   *
 | |
|   * @return  Promise
 | |
|   */
 | |
| 	textConverted() {
 | |
| 		var _this3 = this;
 | |
| 
 | |
| 		return consumeBody.call(this).then(function (buffer) {
 | |
| 			return convertBody(buffer, _this3.headers);
 | |
| 		});
 | |
| 	}
 | |
| };
 | |
| 
 | |
| // In browsers, all properties are enumerable.
 | |
| Object.defineProperties(Body.prototype, {
 | |
| 	body: { enumerable: true },
 | |
| 	bodyUsed: { enumerable: true },
 | |
| 	arrayBuffer: { enumerable: true },
 | |
| 	blob: { enumerable: true },
 | |
| 	json: { enumerable: true },
 | |
| 	text: { enumerable: true }
 | |
| });
 | |
| 
 | |
| Body.mixIn = function (proto) {
 | |
| 	for (const name of Object.getOwnPropertyNames(Body.prototype)) {
 | |
| 		// istanbul ignore else: future proof
 | |
| 		if (!(name in proto)) {
 | |
| 			const desc = Object.getOwnPropertyDescriptor(Body.prototype, name);
 | |
| 			Object.defineProperty(proto, name, desc);
 | |
| 		}
 | |
| 	}
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Consume and convert an entire Body to a Buffer.
 | |
|  *
 | |
|  * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body
 | |
|  *
 | |
|  * @return  Promise
 | |
|  */
 | |
| function consumeBody() {
 | |
| 	var _this4 = this;
 | |
| 
 | |
| 	if (this[INTERNALS].disturbed) {
 | |
| 		return Body.Promise.reject(new TypeError(`body used already for: ${this.url}`));
 | |
| 	}
 | |
| 
 | |
| 	this[INTERNALS].disturbed = true;
 | |
| 
 | |
| 	if (this[INTERNALS].error) {
 | |
| 		return Body.Promise.reject(this[INTERNALS].error);
 | |
| 	}
 | |
| 
 | |
| 	let body = this.body;
 | |
| 
 | |
| 	// body is null
 | |
| 	if (body === null) {
 | |
| 		return Body.Promise.resolve(Buffer.alloc(0));
 | |
| 	}
 | |
| 
 | |
| 	// body is blob
 | |
| 	if (isBlob(body)) {
 | |
| 		body = body.stream();
 | |
| 	}
 | |
| 
 | |
| 	// body is buffer
 | |
| 	if (Buffer.isBuffer(body)) {
 | |
| 		return Body.Promise.resolve(body);
 | |
| 	}
 | |
| 
 | |
| 	// istanbul ignore if: should never happen
 | |
| 	if (!(body instanceof Stream)) {
 | |
| 		return Body.Promise.resolve(Buffer.alloc(0));
 | |
| 	}
 | |
| 
 | |
| 	// body is stream
 | |
| 	// get ready to actually consume the body
 | |
| 	let accum = [];
 | |
| 	let accumBytes = 0;
 | |
| 	let abort = false;
 | |
| 
 | |
| 	return new Body.Promise(function (resolve, reject) {
 | |
| 		let resTimeout;
 | |
| 
 | |
| 		// allow timeout on slow response body
 | |
| 		if (_this4.timeout) {
 | |
| 			resTimeout = setTimeout(function () {
 | |
| 				abort = true;
 | |
| 				reject(new FetchError(`Response timeout while trying to fetch ${_this4.url} (over ${_this4.timeout}ms)`, 'body-timeout'));
 | |
| 			}, _this4.timeout);
 | |
| 		}
 | |
| 
 | |
| 		// handle stream errors
 | |
| 		body.on('error', function (err) {
 | |
| 			if (err.name === 'AbortError') {
 | |
| 				// if the request was aborted, reject with this Error
 | |
| 				abort = true;
 | |
| 				reject(err);
 | |
| 			} else {
 | |
| 				// other errors, such as incorrect content-encoding
 | |
| 				reject(new FetchError(`Invalid response body while trying to fetch ${_this4.url}: ${err.message}`, 'system', err));
 | |
| 			}
 | |
| 		});
 | |
| 
 | |
| 		body.on('data', function (chunk) {
 | |
| 			if (abort || chunk === null) {
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			if (_this4.size && accumBytes + chunk.length > _this4.size) {
 | |
| 				abort = true;
 | |
| 				reject(new FetchError(`content size at ${_this4.url} over limit: ${_this4.size}`, 'max-size'));
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			accumBytes += chunk.length;
 | |
| 			accum.push(chunk);
 | |
| 		});
 | |
| 
 | |
| 		body.on('end', function () {
 | |
| 			if (abort) {
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			clearTimeout(resTimeout);
 | |
| 
 | |
| 			try {
 | |
| 				resolve(Buffer.concat(accum, accumBytes));
 | |
| 			} catch (err) {
 | |
| 				// handle streams that have accumulated too much data (issue #414)
 | |
| 				reject(new FetchError(`Could not create Buffer from response body for ${_this4.url}: ${err.message}`, 'system', err));
 | |
| 			}
 | |
| 		});
 | |
| 	});
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Detect buffer encoding and convert to target encoding
 | |
|  * ref: http://www.w3.org/TR/2011/WD-html5-20110113/parsing.html#determining-the-character-encoding
 | |
|  *
 | |
|  * @param   Buffer  buffer    Incoming buffer
 | |
|  * @param   String  encoding  Target encoding
 | |
|  * @return  String
 | |
|  */
 | |
| function convertBody(buffer, headers) {
 | |
| 	if (typeof convert !== 'function') {
 | |
| 		throw new Error('The package `encoding` must be installed to use the textConverted() function');
 | |
| 	}
 | |
| 
 | |
| 	const ct = headers.get('content-type');
 | |
| 	let charset = 'utf-8';
 | |
| 	let res, str;
 | |
| 
 | |
| 	// header
 | |
| 	if (ct) {
 | |
| 		res = /charset=([^;]*)/i.exec(ct);
 | |
| 	}
 | |
| 
 | |
| 	// no charset in content type, peek at response body for at most 1024 bytes
 | |
| 	str = buffer.slice(0, 1024).toString();
 | |
| 
 | |
| 	// html5
 | |
| 	if (!res && str) {
 | |
| 		res = /<meta.+?charset=(['"])(.+?)\1/i.exec(str);
 | |
| 	}
 | |
| 
 | |
| 	// html4
 | |
| 	if (!res && str) {
 | |
| 		res = /<meta[\s]+?http-equiv=(['"])content-type\1[\s]+?content=(['"])(.+?)\2/i.exec(str);
 | |
| 		if (!res) {
 | |
| 			res = /<meta[\s]+?content=(['"])(.+?)\1[\s]+?http-equiv=(['"])content-type\3/i.exec(str);
 | |
| 			if (res) {
 | |
| 				res.pop(); // drop last quote
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if (res) {
 | |
| 			res = /charset=(.*)/i.exec(res.pop());
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// xml
 | |
| 	if (!res && str) {
 | |
| 		res = /<\?xml.+?encoding=(['"])(.+?)\1/i.exec(str);
 | |
| 	}
 | |
| 
 | |
| 	// found charset
 | |
| 	if (res) {
 | |
| 		charset = res.pop();
 | |
| 
 | |
| 		// prevent decode issues when sites use incorrect encoding
 | |
| 		// ref: https://hsivonen.fi/encoding-menu/
 | |
| 		if (charset === 'gb2312' || charset === 'gbk') {
 | |
| 			charset = 'gb18030';
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	// turn raw buffers into a single utf-8 buffer
 | |
| 	return convert(buffer, 'UTF-8', charset).toString();
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Detect a URLSearchParams object
 | |
|  * ref: https://github.com/bitinn/node-fetch/issues/296#issuecomment-307598143
 | |
|  *
 | |
|  * @param   Object  obj     Object to detect by type or brand
 | |
|  * @return  String
 | |
|  */
 | |
| function isURLSearchParams(obj) {
 | |
| 	// Duck-typing as a necessary condition.
 | |
| 	if (typeof obj !== 'object' || typeof obj.append !== 'function' || typeof obj.delete !== 'function' || typeof obj.get !== 'function' || typeof obj.getAll !== 'function' || typeof obj.has !== 'function' || typeof obj.set !== 'function') {
 | |
| 		return false;
 | |
| 	}
 | |
| 
 | |
| 	// Brand-checking and more duck-typing as optional condition.
 | |
| 	return obj.constructor.name === 'URLSearchParams' || Object.prototype.toString.call(obj) === '[object URLSearchParams]' || typeof obj.sort === 'function';
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Check if `obj` is a W3C `Blob` object (which `File` inherits from)
 | |
|  * @param  {*} obj
 | |
|  * @return {boolean}
 | |
|  */
 | |
| function isBlob(obj) {
 | |
| 	return typeof obj === 'object' && typeof obj.arrayBuffer === 'function' && typeof obj.type === 'string' && typeof obj.stream === 'function' && typeof obj.constructor === 'function' && typeof obj.constructor.name === 'string' && /^(Blob|File)$/.test(obj.constructor.name) && /^(Blob|File)$/.test(obj[Symbol.toStringTag]);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Clone body given Res/Req instance
 | |
|  *
 | |
|  * @param   Mixed  instance  Response or Request instance
 | |
|  * @return  Mixed
 | |
|  */
 | |
| function clone(instance) {
 | |
| 	let p1, p2;
 | |
| 	let body = instance.body;
 | |
| 
 | |
| 	// don't allow cloning a used body
 | |
| 	if (instance.bodyUsed) {
 | |
| 		throw new Error('cannot clone body after it is used');
 | |
| 	}
 | |
| 
 | |
| 	// check that body is a stream and not form-data object
 | |
| 	// note: we can't clone the form-data object without having it as a dependency
 | |
| 	if (body instanceof Stream && typeof body.getBoundary !== 'function') {
 | |
| 		// tee instance body
 | |
| 		p1 = new PassThrough();
 | |
| 		p2 = new PassThrough();
 | |
| 		body.pipe(p1);
 | |
| 		body.pipe(p2);
 | |
| 		// set instance body to teed body and return the other teed body
 | |
| 		instance[INTERNALS].body = p1;
 | |
| 		body = p2;
 | |
| 	}
 | |
| 
 | |
| 	return body;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Performs the operation "extract a `Content-Type` value from |object|" as
 | |
|  * specified in the specification:
 | |
|  * https://fetch.spec.whatwg.org/#concept-bodyinit-extract
 | |
|  *
 | |
|  * This function assumes that instance.body is present.
 | |
|  *
 | |
|  * @param   Mixed  instance  Any options.body input
 | |
|  */
 | |
| function extractContentType(body) {
 | |
| 	if (body === null) {
 | |
| 		// body is null
 | |
| 		return null;
 | |
| 	} else if (typeof body === 'string') {
 | |
| 		// body is string
 | |
| 		return 'text/plain;charset=UTF-8';
 | |
| 	} else if (isURLSearchParams(body)) {
 | |
| 		// body is a URLSearchParams
 | |
| 		return 'application/x-www-form-urlencoded;charset=UTF-8';
 | |
| 	} else if (isBlob(body)) {
 | |
| 		// body is blob
 | |
| 		return body.type || null;
 | |
| 	} else if (Buffer.isBuffer(body)) {
 | |
| 		// body is buffer
 | |
| 		return null;
 | |
| 	} else if (Object.prototype.toString.call(body) === '[object ArrayBuffer]') {
 | |
| 		// body is ArrayBuffer
 | |
| 		return null;
 | |
| 	} else if (ArrayBuffer.isView(body)) {
 | |
| 		// body is ArrayBufferView
 | |
| 		return null;
 | |
| 	} else if (typeof body.getBoundary === 'function') {
 | |
| 		// detect form data input from form-data module
 | |
| 		return `multipart/form-data;boundary=${body.getBoundary()}`;
 | |
| 	} else if (body instanceof Stream) {
 | |
| 		// body is stream
 | |
| 		// can't really do much about this
 | |
| 		return null;
 | |
| 	} else {
 | |
| 		// Body constructor defaults other things to string
 | |
| 		return 'text/plain;charset=UTF-8';
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * The Fetch Standard treats this as if "total bytes" is a property on the body.
 | |
|  * For us, we have to explicitly get it with a function.
 | |
|  *
 | |
|  * ref: https://fetch.spec.whatwg.org/#concept-body-total-bytes
 | |
|  *
 | |
|  * @param   Body    instance   Instance of Body
 | |
|  * @return  Number?            Number of bytes, or null if not possible
 | |
|  */
 | |
| function getTotalBytes(instance) {
 | |
| 	const body = instance.body;
 | |
| 
 | |
| 
 | |
| 	if (body === null) {
 | |
| 		// body is null
 | |
| 		return 0;
 | |
| 	} else if (isBlob(body)) {
 | |
| 		return body.size;
 | |
| 	} else if (Buffer.isBuffer(body)) {
 | |
| 		// body is buffer
 | |
| 		return body.length;
 | |
| 	} else if (body && typeof body.getLengthSync === 'function') {
 | |
| 		// detect form data input from form-data module
 | |
| 		if (body._lengthRetrievers && body._lengthRetrievers.length == 0 || // 1.x
 | |
| 		body.hasKnownLength && body.hasKnownLength()) {
 | |
| 			// 2.x
 | |
| 			return body.getLengthSync();
 | |
| 		}
 | |
| 		return null;
 | |
| 	} else {
 | |
| 		// body is stream
 | |
| 		return null;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Write a Body to a Node.js WritableStream (e.g. http.Request) object.
 | |
|  *
 | |
|  * @param   Body    instance   Instance of Body
 | |
|  * @return  Void
 | |
|  */
 | |
| function writeToStream(dest, instance) {
 | |
| 	const body = instance.body;
 | |
| 
 | |
| 
 | |
| 	if (body === null) {
 | |
| 		// body is null
 | |
| 		dest.end();
 | |
| 	} else if (isBlob(body)) {
 | |
| 		body.stream().pipe(dest);
 | |
| 	} else if (Buffer.isBuffer(body)) {
 | |
| 		// body is buffer
 | |
| 		dest.write(body);
 | |
| 		dest.end();
 | |
| 	} else {
 | |
| 		// body is stream
 | |
| 		body.pipe(dest);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // expose Promise
 | |
| Body.Promise = global.Promise;
 | |
| 
 | |
| /**
 | |
|  * headers.js
 | |
|  *
 | |
|  * Headers class offers convenient helpers
 | |
|  */
 | |
| 
 | |
| const invalidTokenRegex = /[^\^_`a-zA-Z\-0-9!#$%&'*+.|~]/;
 | |
| const invalidHeaderCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
 | |
| 
 | |
| function validateName(name) {
 | |
| 	name = `${name}`;
 | |
| 	if (invalidTokenRegex.test(name) || name === '') {
 | |
| 		throw new TypeError(`${name} is not a legal HTTP header name`);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| function validateValue(value) {
 | |
| 	value = `${value}`;
 | |
| 	if (invalidHeaderCharRegex.test(value)) {
 | |
| 		throw new TypeError(`${value} is not a legal HTTP header value`);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Find the key in the map object given a header name.
 | |
|  *
 | |
|  * Returns undefined if not found.
 | |
|  *
 | |
|  * @param   String  name  Header name
 | |
|  * @return  String|Undefined
 | |
|  */
 | |
| function find(map, name) {
 | |
| 	name = name.toLowerCase();
 | |
| 	for (const key in map) {
 | |
| 		if (key.toLowerCase() === name) {
 | |
| 			return key;
 | |
| 		}
 | |
| 	}
 | |
| 	return undefined;
 | |
| }
 | |
| 
 | |
| const MAP = Symbol('map');
 | |
| class Headers {
 | |
| 	/**
 | |
|   * Headers class
 | |
|   *
 | |
|   * @param   Object  headers  Response headers
 | |
|   * @return  Void
 | |
|   */
 | |
| 	constructor() {
 | |
| 		let init = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined;
 | |
| 
 | |
| 		this[MAP] = Object.create(null);
 | |
| 
 | |
| 		if (init instanceof Headers) {
 | |
| 			const rawHeaders = init.raw();
 | |
| 			const headerNames = Object.keys(rawHeaders);
 | |
| 
 | |
| 			for (const headerName of headerNames) {
 | |
| 				for (const value of rawHeaders[headerName]) {
 | |
| 					this.append(headerName, value);
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		// We don't worry about converting prop to ByteString here as append()
 | |
| 		// will handle it.
 | |
| 		if (init == null) ; else if (typeof init === 'object') {
 | |
| 			const method = init[Symbol.iterator];
 | |
| 			if (method != null) {
 | |
| 				if (typeof method !== 'function') {
 | |
| 					throw new TypeError('Header pairs must be iterable');
 | |
| 				}
 | |
| 
 | |
| 				// sequence<sequence<ByteString>>
 | |
| 				// Note: per spec we have to first exhaust the lists then process them
 | |
| 				const pairs = [];
 | |
| 				for (const pair of init) {
 | |
| 					if (typeof pair !== 'object' || typeof pair[Symbol.iterator] !== 'function') {
 | |
| 						throw new TypeError('Each header pair must be iterable');
 | |
| 					}
 | |
| 					pairs.push(Array.from(pair));
 | |
| 				}
 | |
| 
 | |
| 				for (const pair of pairs) {
 | |
| 					if (pair.length !== 2) {
 | |
| 						throw new TypeError('Each header pair must be a name/value tuple');
 | |
| 					}
 | |
| 					this.append(pair[0], pair[1]);
 | |
| 				}
 | |
| 			} else {
 | |
| 				// record<ByteString, ByteString>
 | |
| 				for (const key of Object.keys(init)) {
 | |
| 					const value = init[key];
 | |
| 					this.append(key, value);
 | |
| 				}
 | |
| 			}
 | |
| 		} else {
 | |
| 			throw new TypeError('Provided initializer must be an object');
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Return combined header value given name
 | |
|   *
 | |
|   * @param   String  name  Header name
 | |
|   * @return  Mixed
 | |
|   */
 | |
| 	get(name) {
 | |
| 		name = `${name}`;
 | |
| 		validateName(name);
 | |
| 		const key = find(this[MAP], name);
 | |
| 		if (key === undefined) {
 | |
| 			return null;
 | |
| 		}
 | |
| 
 | |
| 		return this[MAP][key].join(', ');
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Iterate over all headers
 | |
|   *
 | |
|   * @param   Function  callback  Executed for each item with parameters (value, name, thisArg)
 | |
|   * @param   Boolean   thisArg   `this` context for callback function
 | |
|   * @return  Void
 | |
|   */
 | |
| 	forEach(callback) {
 | |
| 		let thisArg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
 | |
| 
 | |
| 		let pairs = getHeaders(this);
 | |
| 		let i = 0;
 | |
| 		while (i < pairs.length) {
 | |
| 			var _pairs$i = pairs[i];
 | |
| 			const name = _pairs$i[0],
 | |
| 			      value = _pairs$i[1];
 | |
| 
 | |
| 			callback.call(thisArg, value, name, this);
 | |
| 			pairs = getHeaders(this);
 | |
| 			i++;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Overwrite header values given name
 | |
|   *
 | |
|   * @param   String  name   Header name
 | |
|   * @param   String  value  Header value
 | |
|   * @return  Void
 | |
|   */
 | |
| 	set(name, value) {
 | |
| 		name = `${name}`;
 | |
| 		value = `${value}`;
 | |
| 		validateName(name);
 | |
| 		validateValue(value);
 | |
| 		const key = find(this[MAP], name);
 | |
| 		this[MAP][key !== undefined ? key : name] = [value];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Append a value onto existing header
 | |
|   *
 | |
|   * @param   String  name   Header name
 | |
|   * @param   String  value  Header value
 | |
|   * @return  Void
 | |
|   */
 | |
| 	append(name, value) {
 | |
| 		name = `${name}`;
 | |
| 		value = `${value}`;
 | |
| 		validateName(name);
 | |
| 		validateValue(value);
 | |
| 		const key = find(this[MAP], name);
 | |
| 		if (key !== undefined) {
 | |
| 			this[MAP][key].push(value);
 | |
| 		} else {
 | |
| 			this[MAP][name] = [value];
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Check for header name existence
 | |
|   *
 | |
|   * @param   String   name  Header name
 | |
|   * @return  Boolean
 | |
|   */
 | |
| 	has(name) {
 | |
| 		name = `${name}`;
 | |
| 		validateName(name);
 | |
| 		return find(this[MAP], name) !== undefined;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Delete all header values given name
 | |
|   *
 | |
|   * @param   String  name  Header name
 | |
|   * @return  Void
 | |
|   */
 | |
| 	delete(name) {
 | |
| 		name = `${name}`;
 | |
| 		validateName(name);
 | |
| 		const key = find(this[MAP], name);
 | |
| 		if (key !== undefined) {
 | |
| 			delete this[MAP][key];
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Return raw headers (non-spec api)
 | |
|   *
 | |
|   * @return  Object
 | |
|   */
 | |
| 	raw() {
 | |
| 		return this[MAP];
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Get an iterator on keys.
 | |
|   *
 | |
|   * @return  Iterator
 | |
|   */
 | |
| 	keys() {
 | |
| 		return createHeadersIterator(this, 'key');
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Get an iterator on values.
 | |
|   *
 | |
|   * @return  Iterator
 | |
|   */
 | |
| 	values() {
 | |
| 		return createHeadersIterator(this, 'value');
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Get an iterator on entries.
 | |
|   *
 | |
|   * This is the default iterator of the Headers object.
 | |
|   *
 | |
|   * @return  Iterator
 | |
|   */
 | |
| 	[Symbol.iterator]() {
 | |
| 		return createHeadersIterator(this, 'key+value');
 | |
| 	}
 | |
| }
 | |
| Headers.prototype.entries = Headers.prototype[Symbol.iterator];
 | |
| 
 | |
| Object.defineProperty(Headers.prototype, Symbol.toStringTag, {
 | |
| 	value: 'Headers',
 | |
| 	writable: false,
 | |
| 	enumerable: false,
 | |
| 	configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperties(Headers.prototype, {
 | |
| 	get: { enumerable: true },
 | |
| 	forEach: { enumerable: true },
 | |
| 	set: { enumerable: true },
 | |
| 	append: { enumerable: true },
 | |
| 	has: { enumerable: true },
 | |
| 	delete: { enumerable: true },
 | |
| 	keys: { enumerable: true },
 | |
| 	values: { enumerable: true },
 | |
| 	entries: { enumerable: true }
 | |
| });
 | |
| 
 | |
| function getHeaders(headers) {
 | |
| 	let kind = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'key+value';
 | |
| 
 | |
| 	const keys = Object.keys(headers[MAP]).sort();
 | |
| 	return keys.map(kind === 'key' ? function (k) {
 | |
| 		return k.toLowerCase();
 | |
| 	} : kind === 'value' ? function (k) {
 | |
| 		return headers[MAP][k].join(', ');
 | |
| 	} : function (k) {
 | |
| 		return [k.toLowerCase(), headers[MAP][k].join(', ')];
 | |
| 	});
 | |
| }
 | |
| 
 | |
| const INTERNAL = Symbol('internal');
 | |
| 
 | |
| function createHeadersIterator(target, kind) {
 | |
| 	const iterator = Object.create(HeadersIteratorPrototype);
 | |
| 	iterator[INTERNAL] = {
 | |
| 		target,
 | |
| 		kind,
 | |
| 		index: 0
 | |
| 	};
 | |
| 	return iterator;
 | |
| }
 | |
| 
 | |
| const HeadersIteratorPrototype = Object.setPrototypeOf({
 | |
| 	next() {
 | |
| 		// istanbul ignore if
 | |
| 		if (!this || Object.getPrototypeOf(this) !== HeadersIteratorPrototype) {
 | |
| 			throw new TypeError('Value of `this` is not a HeadersIterator');
 | |
| 		}
 | |
| 
 | |
| 		var _INTERNAL = this[INTERNAL];
 | |
| 		const target = _INTERNAL.target,
 | |
| 		      kind = _INTERNAL.kind,
 | |
| 		      index = _INTERNAL.index;
 | |
| 
 | |
| 		const values = getHeaders(target, kind);
 | |
| 		const len = values.length;
 | |
| 		if (index >= len) {
 | |
| 			return {
 | |
| 				value: undefined,
 | |
| 				done: true
 | |
| 			};
 | |
| 		}
 | |
| 
 | |
| 		this[INTERNAL].index = index + 1;
 | |
| 
 | |
| 		return {
 | |
| 			value: values[index],
 | |
| 			done: false
 | |
| 		};
 | |
| 	}
 | |
| }, Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]())));
 | |
| 
 | |
| Object.defineProperty(HeadersIteratorPrototype, Symbol.toStringTag, {
 | |
| 	value: 'HeadersIterator',
 | |
| 	writable: false,
 | |
| 	enumerable: false,
 | |
| 	configurable: true
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Export the Headers object in a form that Node.js can consume.
 | |
|  *
 | |
|  * @param   Headers  headers
 | |
|  * @return  Object
 | |
|  */
 | |
| function exportNodeCompatibleHeaders(headers) {
 | |
| 	const obj = Object.assign({ __proto__: null }, headers[MAP]);
 | |
| 
 | |
| 	// http.request() only supports string as Host header. This hack makes
 | |
| 	// specifying custom Host header possible.
 | |
| 	const hostHeaderKey = find(headers[MAP], 'Host');
 | |
| 	if (hostHeaderKey !== undefined) {
 | |
| 		obj[hostHeaderKey] = obj[hostHeaderKey][0];
 | |
| 	}
 | |
| 
 | |
| 	return obj;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Create a Headers object from an object of headers, ignoring those that do
 | |
|  * not conform to HTTP grammar productions.
 | |
|  *
 | |
|  * @param   Object  obj  Object of headers
 | |
|  * @return  Headers
 | |
|  */
 | |
| function createHeadersLenient(obj) {
 | |
| 	const headers = new Headers();
 | |
| 	for (const name of Object.keys(obj)) {
 | |
| 		if (invalidTokenRegex.test(name)) {
 | |
| 			continue;
 | |
| 		}
 | |
| 		if (Array.isArray(obj[name])) {
 | |
| 			for (const val of obj[name]) {
 | |
| 				if (invalidHeaderCharRegex.test(val)) {
 | |
| 					continue;
 | |
| 				}
 | |
| 				if (headers[MAP][name] === undefined) {
 | |
| 					headers[MAP][name] = [val];
 | |
| 				} else {
 | |
| 					headers[MAP][name].push(val);
 | |
| 				}
 | |
| 			}
 | |
| 		} else if (!invalidHeaderCharRegex.test(obj[name])) {
 | |
| 			headers[MAP][name] = [obj[name]];
 | |
| 		}
 | |
| 	}
 | |
| 	return headers;
 | |
| }
 | |
| 
 | |
| const INTERNALS$1 = Symbol('Response internals');
 | |
| 
 | |
| // fix an issue where "STATUS_CODES" aren't a named export for node <10
 | |
| const STATUS_CODES = http.STATUS_CODES;
 | |
| 
 | |
| /**
 | |
|  * Response class
 | |
|  *
 | |
|  * @param   Stream  body  Readable stream
 | |
|  * @param   Object  opts  Response options
 | |
|  * @return  Void
 | |
|  */
 | |
| class Response {
 | |
| 	constructor() {
 | |
| 		let body = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
 | |
| 		let opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
 | |
| 
 | |
| 		Body.call(this, body, opts);
 | |
| 
 | |
| 		const status = opts.status || 200;
 | |
| 		const headers = new Headers(opts.headers);
 | |
| 
 | |
| 		if (body != null && !headers.has('Content-Type')) {
 | |
| 			const contentType = extractContentType(body);
 | |
| 			if (contentType) {
 | |
| 				headers.append('Content-Type', contentType);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		this[INTERNALS$1] = {
 | |
| 			url: opts.url,
 | |
| 			status,
 | |
| 			statusText: opts.statusText || STATUS_CODES[status],
 | |
| 			headers,
 | |
| 			counter: opts.counter
 | |
| 		};
 | |
| 	}
 | |
| 
 | |
| 	get url() {
 | |
| 		return this[INTERNALS$1].url || '';
 | |
| 	}
 | |
| 
 | |
| 	get status() {
 | |
| 		return this[INTERNALS$1].status;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Convenience property representing if the request ended normally
 | |
|   */
 | |
| 	get ok() {
 | |
| 		return this[INTERNALS$1].status >= 200 && this[INTERNALS$1].status < 300;
 | |
| 	}
 | |
| 
 | |
| 	get redirected() {
 | |
| 		return this[INTERNALS$1].counter > 0;
 | |
| 	}
 | |
| 
 | |
| 	get statusText() {
 | |
| 		return this[INTERNALS$1].statusText;
 | |
| 	}
 | |
| 
 | |
| 	get headers() {
 | |
| 		return this[INTERNALS$1].headers;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Clone this response
 | |
|   *
 | |
|   * @return  Response
 | |
|   */
 | |
| 	clone() {
 | |
| 		return new Response(clone(this), {
 | |
| 			url: this.url,
 | |
| 			status: this.status,
 | |
| 			statusText: this.statusText,
 | |
| 			headers: this.headers,
 | |
| 			ok: this.ok,
 | |
| 			redirected: this.redirected
 | |
| 		});
 | |
| 	}
 | |
| }
 | |
| 
 | |
| Body.mixIn(Response.prototype);
 | |
| 
 | |
| Object.defineProperties(Response.prototype, {
 | |
| 	url: { enumerable: true },
 | |
| 	status: { enumerable: true },
 | |
| 	ok: { enumerable: true },
 | |
| 	redirected: { enumerable: true },
 | |
| 	statusText: { enumerable: true },
 | |
| 	headers: { enumerable: true },
 | |
| 	clone: { enumerable: true }
 | |
| });
 | |
| 
 | |
| Object.defineProperty(Response.prototype, Symbol.toStringTag, {
 | |
| 	value: 'Response',
 | |
| 	writable: false,
 | |
| 	enumerable: false,
 | |
| 	configurable: true
 | |
| });
 | |
| 
 | |
| const INTERNALS$2 = Symbol('Request internals');
 | |
| 
 | |
| // fix an issue where "format", "parse" aren't a named export for node <10
 | |
| const parse_url = Url.parse;
 | |
| const format_url = Url.format;
 | |
| 
 | |
| const streamDestructionSupported = 'destroy' in Stream.Readable.prototype;
 | |
| 
 | |
| /**
 | |
|  * Check if a value is an instance of Request.
 | |
|  *
 | |
|  * @param   Mixed   input
 | |
|  * @return  Boolean
 | |
|  */
 | |
| function isRequest(input) {
 | |
| 	return typeof input === 'object' && typeof input[INTERNALS$2] === 'object';
 | |
| }
 | |
| 
 | |
| function isAbortSignal(signal) {
 | |
| 	const proto = signal && typeof signal === 'object' && Object.getPrototypeOf(signal);
 | |
| 	return !!(proto && proto.constructor.name === 'AbortSignal');
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Request class
 | |
|  *
 | |
|  * @param   Mixed   input  Url or Request instance
 | |
|  * @param   Object  init   Custom options
 | |
|  * @return  Void
 | |
|  */
 | |
| class Request {
 | |
| 	constructor(input) {
 | |
| 		let init = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
 | |
| 
 | |
| 		let parsedURL;
 | |
| 
 | |
| 		// normalize input
 | |
| 		if (!isRequest(input)) {
 | |
| 			if (input && input.href) {
 | |
| 				// in order to support Node.js' Url objects; though WHATWG's URL objects
 | |
| 				// will fall into this branch also (since their `toString()` will return
 | |
| 				// `href` property anyway)
 | |
| 				parsedURL = parse_url(input.href);
 | |
| 			} else {
 | |
| 				// coerce input to a string before attempting to parse
 | |
| 				parsedURL = parse_url(`${input}`);
 | |
| 			}
 | |
| 			input = {};
 | |
| 		} else {
 | |
| 			parsedURL = parse_url(input.url);
 | |
| 		}
 | |
| 
 | |
| 		let method = init.method || input.method || 'GET';
 | |
| 		method = method.toUpperCase();
 | |
| 
 | |
| 		if ((init.body != null || isRequest(input) && input.body !== null) && (method === 'GET' || method === 'HEAD')) {
 | |
| 			throw new TypeError('Request with GET/HEAD method cannot have body');
 | |
| 		}
 | |
| 
 | |
| 		let inputBody = init.body != null ? init.body : isRequest(input) && input.body !== null ? clone(input) : null;
 | |
| 
 | |
| 		Body.call(this, inputBody, {
 | |
| 			timeout: init.timeout || input.timeout || 0,
 | |
| 			size: init.size || input.size || 0
 | |
| 		});
 | |
| 
 | |
| 		const headers = new Headers(init.headers || input.headers || {});
 | |
| 
 | |
| 		if (inputBody != null && !headers.has('Content-Type')) {
 | |
| 			const contentType = extractContentType(inputBody);
 | |
| 			if (contentType) {
 | |
| 				headers.append('Content-Type', contentType);
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		let signal = isRequest(input) ? input.signal : null;
 | |
| 		if ('signal' in init) signal = init.signal;
 | |
| 
 | |
| 		if (signal != null && !isAbortSignal(signal)) {
 | |
| 			throw new TypeError('Expected signal to be an instanceof AbortSignal');
 | |
| 		}
 | |
| 
 | |
| 		this[INTERNALS$2] = {
 | |
| 			method,
 | |
| 			redirect: init.redirect || input.redirect || 'follow',
 | |
| 			headers,
 | |
| 			parsedURL,
 | |
| 			signal
 | |
| 		};
 | |
| 
 | |
| 		// node-fetch-only options
 | |
| 		this.follow = init.follow !== undefined ? init.follow : input.follow !== undefined ? input.follow : 20;
 | |
| 		this.compress = init.compress !== undefined ? init.compress : input.compress !== undefined ? input.compress : true;
 | |
| 		this.counter = init.counter || input.counter || 0;
 | |
| 		this.agent = init.agent || input.agent;
 | |
| 	}
 | |
| 
 | |
| 	get method() {
 | |
| 		return this[INTERNALS$2].method;
 | |
| 	}
 | |
| 
 | |
| 	get url() {
 | |
| 		return format_url(this[INTERNALS$2].parsedURL);
 | |
| 	}
 | |
| 
 | |
| 	get headers() {
 | |
| 		return this[INTERNALS$2].headers;
 | |
| 	}
 | |
| 
 | |
| 	get redirect() {
 | |
| 		return this[INTERNALS$2].redirect;
 | |
| 	}
 | |
| 
 | |
| 	get signal() {
 | |
| 		return this[INTERNALS$2].signal;
 | |
| 	}
 | |
| 
 | |
| 	/**
 | |
|   * Clone this request
 | |
|   *
 | |
|   * @return  Request
 | |
|   */
 | |
| 	clone() {
 | |
| 		return new Request(this);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| Body.mixIn(Request.prototype);
 | |
| 
 | |
| Object.defineProperty(Request.prototype, Symbol.toStringTag, {
 | |
| 	value: 'Request',
 | |
| 	writable: false,
 | |
| 	enumerable: false,
 | |
| 	configurable: true
 | |
| });
 | |
| 
 | |
| Object.defineProperties(Request.prototype, {
 | |
| 	method: { enumerable: true },
 | |
| 	url: { enumerable: true },
 | |
| 	headers: { enumerable: true },
 | |
| 	redirect: { enumerable: true },
 | |
| 	clone: { enumerable: true },
 | |
| 	signal: { enumerable: true }
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Convert a Request to Node.js http request options.
 | |
|  *
 | |
|  * @param   Request  A Request instance
 | |
|  * @return  Object   The options object to be passed to http.request
 | |
|  */
 | |
| function getNodeRequestOptions(request) {
 | |
| 	const parsedURL = request[INTERNALS$2].parsedURL;
 | |
| 	const headers = new Headers(request[INTERNALS$2].headers);
 | |
| 
 | |
| 	// fetch step 1.3
 | |
| 	if (!headers.has('Accept')) {
 | |
| 		headers.set('Accept', '*/*');
 | |
| 	}
 | |
| 
 | |
| 	// Basic fetch
 | |
| 	if (!parsedURL.protocol || !parsedURL.hostname) {
 | |
| 		throw new TypeError('Only absolute URLs are supported');
 | |
| 	}
 | |
| 
 | |
| 	if (!/^https?:$/.test(parsedURL.protocol)) {
 | |
| 		throw new TypeError('Only HTTP(S) protocols are supported');
 | |
| 	}
 | |
| 
 | |
| 	if (request.signal && request.body instanceof Stream.Readable && !streamDestructionSupported) {
 | |
| 		throw new Error('Cancellation of streamed requests with AbortSignal is not supported in node < 8');
 | |
| 	}
 | |
| 
 | |
| 	// HTTP-network-or-cache fetch steps 2.4-2.7
 | |
| 	let contentLengthValue = null;
 | |
| 	if (request.body == null && /^(POST|PUT)$/i.test(request.method)) {
 | |
| 		contentLengthValue = '0';
 | |
| 	}
 | |
| 	if (request.body != null) {
 | |
| 		const totalBytes = getTotalBytes(request);
 | |
| 		if (typeof totalBytes === 'number') {
 | |
| 			contentLengthValue = String(totalBytes);
 | |
| 		}
 | |
| 	}
 | |
| 	if (contentLengthValue) {
 | |
| 		headers.set('Content-Length', contentLengthValue);
 | |
| 	}
 | |
| 
 | |
| 	// HTTP-network-or-cache fetch step 2.11
 | |
| 	if (!headers.has('User-Agent')) {
 | |
| 		headers.set('User-Agent', 'node-fetch/1.0 (+https://github.com/bitinn/node-fetch)');
 | |
| 	}
 | |
| 
 | |
| 	// HTTP-network-or-cache fetch step 2.15
 | |
| 	if (request.compress && !headers.has('Accept-Encoding')) {
 | |
| 		headers.set('Accept-Encoding', 'gzip,deflate');
 | |
| 	}
 | |
| 
 | |
| 	let agent = request.agent;
 | |
| 	if (typeof agent === 'function') {
 | |
| 		agent = agent(parsedURL);
 | |
| 	}
 | |
| 
 | |
| 	if (!headers.has('Connection') && !agent) {
 | |
| 		headers.set('Connection', 'close');
 | |
| 	}
 | |
| 
 | |
| 	// HTTP-network fetch step 4.2
 | |
| 	// chunked encoding is handled by Node.js
 | |
| 
 | |
| 	return Object.assign({}, parsedURL, {
 | |
| 		method: request.method,
 | |
| 		headers: exportNodeCompatibleHeaders(headers),
 | |
| 		agent
 | |
| 	});
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * abort-error.js
 | |
|  *
 | |
|  * AbortError interface for cancelled requests
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Create AbortError instance
 | |
|  *
 | |
|  * @param   String      message      Error message for human
 | |
|  * @return  AbortError
 | |
|  */
 | |
| function AbortError(message) {
 | |
|   Error.call(this, message);
 | |
| 
 | |
|   this.type = 'aborted';
 | |
|   this.message = message;
 | |
| 
 | |
|   // hide custom error implementation details from end-users
 | |
|   Error.captureStackTrace(this, this.constructor);
 | |
| }
 | |
| 
 | |
| AbortError.prototype = Object.create(Error.prototype);
 | |
| AbortError.prototype.constructor = AbortError;
 | |
| AbortError.prototype.name = 'AbortError';
 | |
| 
 | |
| // fix an issue where "PassThrough", "resolve" aren't a named export for node <10
 | |
| const PassThrough$1 = Stream.PassThrough;
 | |
| const resolve_url = Url.resolve;
 | |
| 
 | |
| /**
 | |
|  * Fetch function
 | |
|  *
 | |
|  * @param   Mixed    url   Absolute url or Request instance
 | |
|  * @param   Object   opts  Fetch options
 | |
|  * @return  Promise
 | |
|  */
 | |
| function fetch(url, opts) {
 | |
| 
 | |
| 	// allow custom promise
 | |
| 	if (!fetch.Promise) {
 | |
| 		throw new Error('native promise missing, set fetch.Promise to your favorite alternative');
 | |
| 	}
 | |
| 
 | |
| 	Body.Promise = fetch.Promise;
 | |
| 
 | |
| 	// wrap http.request into fetch
 | |
| 	return new fetch.Promise(function (resolve, reject) {
 | |
| 		// build request object
 | |
| 		const request = new Request(url, opts);
 | |
| 		const options = getNodeRequestOptions(request);
 | |
| 
 | |
| 		const send = (options.protocol === 'https:' ? https : http).request;
 | |
| 		const signal = request.signal;
 | |
| 
 | |
| 		let response = null;
 | |
| 
 | |
| 		const abort = function abort() {
 | |
| 			let error = new AbortError('The user aborted a request.');
 | |
| 			reject(error);
 | |
| 			if (request.body && request.body instanceof Stream.Readable) {
 | |
| 				request.body.destroy(error);
 | |
| 			}
 | |
| 			if (!response || !response.body) return;
 | |
| 			response.body.emit('error', error);
 | |
| 		};
 | |
| 
 | |
| 		if (signal && signal.aborted) {
 | |
| 			abort();
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		const abortAndFinalize = function abortAndFinalize() {
 | |
| 			abort();
 | |
| 			finalize();
 | |
| 		};
 | |
| 
 | |
| 		// send request
 | |
| 		const req = send(options);
 | |
| 		let reqTimeout;
 | |
| 
 | |
| 		if (signal) {
 | |
| 			signal.addEventListener('abort', abortAndFinalize);
 | |
| 		}
 | |
| 
 | |
| 		function finalize() {
 | |
| 			req.abort();
 | |
| 			if (signal) signal.removeEventListener('abort', abortAndFinalize);
 | |
| 			clearTimeout(reqTimeout);
 | |
| 		}
 | |
| 
 | |
| 		if (request.timeout) {
 | |
| 			req.once('socket', function (socket) {
 | |
| 				reqTimeout = setTimeout(function () {
 | |
| 					reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
 | |
| 					finalize();
 | |
| 				}, request.timeout);
 | |
| 			});
 | |
| 		}
 | |
| 
 | |
| 		req.on('error', function (err) {
 | |
| 			reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
 | |
| 			finalize();
 | |
| 		});
 | |
| 
 | |
| 		req.on('response', function (res) {
 | |
| 			clearTimeout(reqTimeout);
 | |
| 
 | |
| 			const headers = createHeadersLenient(res.headers);
 | |
| 
 | |
| 			// HTTP fetch step 5
 | |
| 			if (fetch.isRedirect(res.statusCode)) {
 | |
| 				// HTTP fetch step 5.2
 | |
| 				const location = headers.get('Location');
 | |
| 
 | |
| 				// HTTP fetch step 5.3
 | |
| 				const locationURL = location === null ? null : resolve_url(request.url, location);
 | |
| 
 | |
| 				// HTTP fetch step 5.5
 | |
| 				switch (request.redirect) {
 | |
| 					case 'error':
 | |
| 						reject(new FetchError(`uri requested responds with a redirect, redirect mode is set to error: ${request.url}`, 'no-redirect'));
 | |
| 						finalize();
 | |
| 						return;
 | |
| 					case 'manual':
 | |
| 						// node-fetch-specific step: make manual redirect a bit easier to use by setting the Location header value to the resolved URL.
 | |
| 						if (locationURL !== null) {
 | |
| 							// handle corrupted header
 | |
| 							try {
 | |
| 								headers.set('Location', locationURL);
 | |
| 							} catch (err) {
 | |
| 								// istanbul ignore next: nodejs server prevent invalid response headers, we can't test this through normal request
 | |
| 								reject(err);
 | |
| 							}
 | |
| 						}
 | |
| 						break;
 | |
| 					case 'follow':
 | |
| 						// HTTP-redirect fetch step 2
 | |
| 						if (locationURL === null) {
 | |
| 							break;
 | |
| 						}
 | |
| 
 | |
| 						// HTTP-redirect fetch step 5
 | |
| 						if (request.counter >= request.follow) {
 | |
| 							reject(new FetchError(`maximum redirect reached at: ${request.url}`, 'max-redirect'));
 | |
| 							finalize();
 | |
| 							return;
 | |
| 						}
 | |
| 
 | |
| 						// HTTP-redirect fetch step 6 (counter increment)
 | |
| 						// Create a new Request object.
 | |
| 						const requestOpts = {
 | |
| 							headers: new Headers(request.headers),
 | |
| 							follow: request.follow,
 | |
| 							counter: request.counter + 1,
 | |
| 							agent: request.agent,
 | |
| 							compress: request.compress,
 | |
| 							method: request.method,
 | |
| 							body: request.body,
 | |
| 							signal: request.signal,
 | |
| 							timeout: request.timeout,
 | |
| 							size: request.size
 | |
| 						};
 | |
| 
 | |
| 						// HTTP-redirect fetch step 9
 | |
| 						if (res.statusCode !== 303 && request.body && getTotalBytes(request) === null) {
 | |
| 							reject(new FetchError('Cannot follow redirect with body being a readable stream', 'unsupported-redirect'));
 | |
| 							finalize();
 | |
| 							return;
 | |
| 						}
 | |
| 
 | |
| 						// HTTP-redirect fetch step 11
 | |
| 						if (res.statusCode === 303 || (res.statusCode === 301 || res.statusCode === 302) && request.method === 'POST') {
 | |
| 							requestOpts.method = 'GET';
 | |
| 							requestOpts.body = undefined;
 | |
| 							requestOpts.headers.delete('content-length');
 | |
| 						}
 | |
| 
 | |
| 						// HTTP-redirect fetch step 15
 | |
| 						resolve(fetch(new Request(locationURL, requestOpts)));
 | |
| 						finalize();
 | |
| 						return;
 | |
| 				}
 | |
| 			}
 | |
| 
 | |
| 			// prepare response
 | |
| 			res.once('end', function () {
 | |
| 				if (signal) signal.removeEventListener('abort', abortAndFinalize);
 | |
| 			});
 | |
| 			let body = res.pipe(new PassThrough$1());
 | |
| 
 | |
| 			const response_options = {
 | |
| 				url: request.url,
 | |
| 				status: res.statusCode,
 | |
| 				statusText: res.statusMessage,
 | |
| 				headers: headers,
 | |
| 				size: request.size,
 | |
| 				timeout: request.timeout,
 | |
| 				counter: request.counter
 | |
| 			};
 | |
| 
 | |
| 			// HTTP-network fetch step 12.1.1.3
 | |
| 			const codings = headers.get('Content-Encoding');
 | |
| 
 | |
| 			// HTTP-network fetch step 12.1.1.4: handle content codings
 | |
| 
 | |
| 			// in following scenarios we ignore compression support
 | |
| 			// 1. compression support is disabled
 | |
| 			// 2. HEAD request
 | |
| 			// 3. no Content-Encoding header
 | |
| 			// 4. no content response (204)
 | |
| 			// 5. content not modified response (304)
 | |
| 			if (!request.compress || request.method === 'HEAD' || codings === null || res.statusCode === 204 || res.statusCode === 304) {
 | |
| 				response = new Response(body, response_options);
 | |
| 				resolve(response);
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			// For Node v6+
 | |
| 			// Be less strict when decoding compressed responses, since sometimes
 | |
| 			// servers send slightly invalid responses that are still accepted
 | |
| 			// by common browsers.
 | |
| 			// Always using Z_SYNC_FLUSH is what cURL does.
 | |
| 			const zlibOptions = {
 | |
| 				flush: zlib.Z_SYNC_FLUSH,
 | |
| 				finishFlush: zlib.Z_SYNC_FLUSH
 | |
| 			};
 | |
| 
 | |
| 			// for gzip
 | |
| 			if (codings == 'gzip' || codings == 'x-gzip') {
 | |
| 				body = body.pipe(zlib.createGunzip(zlibOptions));
 | |
| 				response = new Response(body, response_options);
 | |
| 				resolve(response);
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			// for deflate
 | |
| 			if (codings == 'deflate' || codings == 'x-deflate') {
 | |
| 				// handle the infamous raw deflate response from old servers
 | |
| 				// a hack for old IIS and Apache servers
 | |
| 				const raw = res.pipe(new PassThrough$1());
 | |
| 				raw.once('data', function (chunk) {
 | |
| 					// see http://stackoverflow.com/questions/37519828
 | |
| 					if ((chunk[0] & 0x0F) === 0x08) {
 | |
| 						body = body.pipe(zlib.createInflate());
 | |
| 					} else {
 | |
| 						body = body.pipe(zlib.createInflateRaw());
 | |
| 					}
 | |
| 					response = new Response(body, response_options);
 | |
| 					resolve(response);
 | |
| 				});
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			// for br
 | |
| 			if (codings == 'br' && typeof zlib.createBrotliDecompress === 'function') {
 | |
| 				body = body.pipe(zlib.createBrotliDecompress());
 | |
| 				response = new Response(body, response_options);
 | |
| 				resolve(response);
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			// otherwise, use response as-is
 | |
| 			response = new Response(body, response_options);
 | |
| 			resolve(response);
 | |
| 		});
 | |
| 
 | |
| 		writeToStream(req, request);
 | |
| 	});
 | |
| }
 | |
| /**
 | |
|  * Redirect code matching
 | |
|  *
 | |
|  * @param   Number   code  Status code
 | |
|  * @return  Boolean
 | |
|  */
 | |
| fetch.isRedirect = function (code) {
 | |
| 	return code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
 | |
| };
 | |
| 
 | |
| // expose Promise
 | |
| fetch.Promise = global.Promise;
 | |
| 
 | |
| module.exports = exports = fetch;
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| exports.default = exports;
 | |
| exports.Headers = Headers;
 | |
| exports.Request = Request;
 | |
| exports.Response = Response;
 | |
| exports.FetchError = FetchError;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1223:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| var wrappy = __webpack_require__(2940)
 | |
| module.exports = wrappy(once)
 | |
| module.exports.strict = wrappy(onceStrict)
 | |
| 
 | |
| once.proto = once(function () {
 | |
|   Object.defineProperty(Function.prototype, 'once', {
 | |
|     value: function () {
 | |
|       return once(this)
 | |
|     },
 | |
|     configurable: true
 | |
|   })
 | |
| 
 | |
|   Object.defineProperty(Function.prototype, 'onceStrict', {
 | |
|     value: function () {
 | |
|       return onceStrict(this)
 | |
|     },
 | |
|     configurable: true
 | |
|   })
 | |
| })
 | |
| 
 | |
| function once (fn) {
 | |
|   var f = function () {
 | |
|     if (f.called) return f.value
 | |
|     f.called = true
 | |
|     return f.value = fn.apply(this, arguments)
 | |
|   }
 | |
|   f.called = false
 | |
|   return f
 | |
| }
 | |
| 
 | |
| function onceStrict (fn) {
 | |
|   var f = function () {
 | |
|     if (f.called)
 | |
|       throw new Error(f.onceError)
 | |
|     f.called = true
 | |
|     return f.value = fn.apply(this, arguments)
 | |
|   }
 | |
|   var name = fn.name || 'Function wrapped with `once`'
 | |
|   f.onceError = name + " shouldn't be called more than once"
 | |
|   f.called = false
 | |
|   return f
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1532:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const ANY = Symbol('SemVer ANY')
 | |
| // hoisted class for cyclic dependency
 | |
| class Comparator {
 | |
|   static get ANY () {
 | |
|     return ANY
 | |
|   }
 | |
|   constructor (comp, options) {
 | |
|     options = parseOptions(options)
 | |
| 
 | |
|     if (comp instanceof Comparator) {
 | |
|       if (comp.loose === !!options.loose) {
 | |
|         return comp
 | |
|       } else {
 | |
|         comp = comp.value
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     debug('comparator', comp, options)
 | |
|     this.options = options
 | |
|     this.loose = !!options.loose
 | |
|     this.parse(comp)
 | |
| 
 | |
|     if (this.semver === ANY) {
 | |
|       this.value = ''
 | |
|     } else {
 | |
|       this.value = this.operator + this.semver.version
 | |
|     }
 | |
| 
 | |
|     debug('comp', this)
 | |
|   }
 | |
| 
 | |
|   parse (comp) {
 | |
|     const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
 | |
|     const m = comp.match(r)
 | |
| 
 | |
|     if (!m) {
 | |
|       throw new TypeError(`Invalid comparator: ${comp}`)
 | |
|     }
 | |
| 
 | |
|     this.operator = m[1] !== undefined ? m[1] : ''
 | |
|     if (this.operator === '=') {
 | |
|       this.operator = ''
 | |
|     }
 | |
| 
 | |
|     // if it literally is just '>' or '' then allow anything.
 | |
|     if (!m[2]) {
 | |
|       this.semver = ANY
 | |
|     } else {
 | |
|       this.semver = new SemVer(m[2], this.options.loose)
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   toString () {
 | |
|     return this.value
 | |
|   }
 | |
| 
 | |
|   test (version) {
 | |
|     debug('Comparator.test', version, this.options.loose)
 | |
| 
 | |
|     if (this.semver === ANY || version === ANY) {
 | |
|       return true
 | |
|     }
 | |
| 
 | |
|     if (typeof version === 'string') {
 | |
|       try {
 | |
|         version = new SemVer(version, this.options)
 | |
|       } catch (er) {
 | |
|         return false
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return cmp(version, this.operator, this.semver, this.options)
 | |
|   }
 | |
| 
 | |
|   intersects (comp, options) {
 | |
|     if (!(comp instanceof Comparator)) {
 | |
|       throw new TypeError('a Comparator is required')
 | |
|     }
 | |
| 
 | |
|     if (!options || typeof options !== 'object') {
 | |
|       options = {
 | |
|         loose: !!options,
 | |
|         includePrerelease: false
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (this.operator === '') {
 | |
|       if (this.value === '') {
 | |
|         return true
 | |
|       }
 | |
|       return new Range(comp.value, options).test(this.value)
 | |
|     } else if (comp.operator === '') {
 | |
|       if (comp.value === '') {
 | |
|         return true
 | |
|       }
 | |
|       return new Range(this.value, options).test(comp.semver)
 | |
|     }
 | |
| 
 | |
|     const sameDirectionIncreasing =
 | |
|       (this.operator === '>=' || this.operator === '>') &&
 | |
|       (comp.operator === '>=' || comp.operator === '>')
 | |
|     const sameDirectionDecreasing =
 | |
|       (this.operator === '<=' || this.operator === '<') &&
 | |
|       (comp.operator === '<=' || comp.operator === '<')
 | |
|     const sameSemVer = this.semver.version === comp.semver.version
 | |
|     const differentDirectionsInclusive =
 | |
|       (this.operator === '>=' || this.operator === '<=') &&
 | |
|       (comp.operator === '>=' || comp.operator === '<=')
 | |
|     const oppositeDirectionsLessThan =
 | |
|       cmp(this.semver, '<', comp.semver, options) &&
 | |
|       (this.operator === '>=' || this.operator === '>') &&
 | |
|         (comp.operator === '<=' || comp.operator === '<')
 | |
|     const oppositeDirectionsGreaterThan =
 | |
|       cmp(this.semver, '>', comp.semver, options) &&
 | |
|       (this.operator === '<=' || this.operator === '<') &&
 | |
|         (comp.operator === '>=' || comp.operator === '>')
 | |
| 
 | |
|     return (
 | |
|       sameDirectionIncreasing ||
 | |
|       sameDirectionDecreasing ||
 | |
|       (sameSemVer && differentDirectionsInclusive) ||
 | |
|       oppositeDirectionsLessThan ||
 | |
|       oppositeDirectionsGreaterThan
 | |
|     )
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = Comparator
 | |
| 
 | |
| const parseOptions = __webpack_require__(785)
 | |
| const {re, t} = __webpack_require__(9523)
 | |
| const cmp = __webpack_require__(5098)
 | |
| const debug = __webpack_require__(427)
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const Range = __webpack_require__(9828)
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9828:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| // hoisted class for cyclic dependency
 | |
| class Range {
 | |
|   constructor (range, options) {
 | |
|     options = parseOptions(options)
 | |
| 
 | |
|     if (range instanceof Range) {
 | |
|       if (
 | |
|         range.loose === !!options.loose &&
 | |
|         range.includePrerelease === !!options.includePrerelease
 | |
|       ) {
 | |
|         return range
 | |
|       } else {
 | |
|         return new Range(range.raw, options)
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (range instanceof Comparator) {
 | |
|       // just put it in the set and return
 | |
|       this.raw = range.value
 | |
|       this.set = [[range]]
 | |
|       this.format()
 | |
|       return this
 | |
|     }
 | |
| 
 | |
|     this.options = options
 | |
|     this.loose = !!options.loose
 | |
|     this.includePrerelease = !!options.includePrerelease
 | |
| 
 | |
|     // First, split based on boolean or ||
 | |
|     this.raw = range
 | |
|     this.set = range
 | |
|       .split(/\s*\|\|\s*/)
 | |
|       // map the range to a 2d array of comparators
 | |
|       .map(range => this.parseRange(range.trim()))
 | |
|       // throw out any comparator lists that are empty
 | |
|       // this generally means that it was not a valid range, which is allowed
 | |
|       // in loose mode, but will still throw if the WHOLE range is invalid.
 | |
|       .filter(c => c.length)
 | |
| 
 | |
|     if (!this.set.length) {
 | |
|       throw new TypeError(`Invalid SemVer Range: ${range}`)
 | |
|     }
 | |
| 
 | |
|     // if we have any that are not the null set, throw out null sets.
 | |
|     if (this.set.length > 1) {
 | |
|       // keep the first one, in case they're all null sets
 | |
|       const first = this.set[0]
 | |
|       this.set = this.set.filter(c => !isNullSet(c[0]))
 | |
|       if (this.set.length === 0)
 | |
|         this.set = [first]
 | |
|       else if (this.set.length > 1) {
 | |
|         // if we have any that are *, then the range is just *
 | |
|         for (const c of this.set) {
 | |
|           if (c.length === 1 && isAny(c[0])) {
 | |
|             this.set = [c]
 | |
|             break
 | |
|           }
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     this.format()
 | |
|   }
 | |
| 
 | |
|   format () {
 | |
|     this.range = this.set
 | |
|       .map((comps) => {
 | |
|         return comps.join(' ').trim()
 | |
|       })
 | |
|       .join('||')
 | |
|       .trim()
 | |
|     return this.range
 | |
|   }
 | |
| 
 | |
|   toString () {
 | |
|     return this.range
 | |
|   }
 | |
| 
 | |
|   parseRange (range) {
 | |
|     range = range.trim()
 | |
| 
 | |
|     // memoize range parsing for performance.
 | |
|     // this is a very hot path, and fully deterministic.
 | |
|     const memoOpts = Object.keys(this.options).join(',')
 | |
|     const memoKey = `parseRange:${memoOpts}:${range}`
 | |
|     const cached = cache.get(memoKey)
 | |
|     if (cached)
 | |
|       return cached
 | |
| 
 | |
|     const loose = this.options.loose
 | |
|     // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
 | |
|     const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]
 | |
|     range = range.replace(hr, hyphenReplace(this.options.includePrerelease))
 | |
|     debug('hyphen replace', range)
 | |
|     // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
 | |
|     range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)
 | |
|     debug('comparator trim', range, re[t.COMPARATORTRIM])
 | |
| 
 | |
|     // `~ 1.2.3` => `~1.2.3`
 | |
|     range = range.replace(re[t.TILDETRIM], tildeTrimReplace)
 | |
| 
 | |
|     // `^ 1.2.3` => `^1.2.3`
 | |
|     range = range.replace(re[t.CARETTRIM], caretTrimReplace)
 | |
| 
 | |
|     // normalize spaces
 | |
|     range = range.split(/\s+/).join(' ')
 | |
| 
 | |
|     // At this point, the range is completely trimmed and
 | |
|     // ready to be split into comparators.
 | |
| 
 | |
|     const compRe = loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]
 | |
|     const rangeList = range
 | |
|       .split(' ')
 | |
|       .map(comp => parseComparator(comp, this.options))
 | |
|       .join(' ')
 | |
|       .split(/\s+/)
 | |
|       // >=0.0.0 is equivalent to *
 | |
|       .map(comp => replaceGTE0(comp, this.options))
 | |
|       // in loose mode, throw out any that are not valid comparators
 | |
|       .filter(this.options.loose ? comp => !!comp.match(compRe) : () => true)
 | |
|       .map(comp => new Comparator(comp, this.options))
 | |
| 
 | |
|     // if any comparators are the null set, then replace with JUST null set
 | |
|     // if more than one comparator, remove any * comparators
 | |
|     // also, don't include the same comparator more than once
 | |
|     const l = rangeList.length
 | |
|     const rangeMap = new Map()
 | |
|     for (const comp of rangeList) {
 | |
|       if (isNullSet(comp))
 | |
|         return [comp]
 | |
|       rangeMap.set(comp.value, comp)
 | |
|     }
 | |
|     if (rangeMap.size > 1 && rangeMap.has(''))
 | |
|       rangeMap.delete('')
 | |
| 
 | |
|     const result = [...rangeMap.values()]
 | |
|     cache.set(memoKey, result)
 | |
|     return result
 | |
|   }
 | |
| 
 | |
|   intersects (range, options) {
 | |
|     if (!(range instanceof Range)) {
 | |
|       throw new TypeError('a Range is required')
 | |
|     }
 | |
| 
 | |
|     return this.set.some((thisComparators) => {
 | |
|       return (
 | |
|         isSatisfiable(thisComparators, options) &&
 | |
|         range.set.some((rangeComparators) => {
 | |
|           return (
 | |
|             isSatisfiable(rangeComparators, options) &&
 | |
|             thisComparators.every((thisComparator) => {
 | |
|               return rangeComparators.every((rangeComparator) => {
 | |
|                 return thisComparator.intersects(rangeComparator, options)
 | |
|               })
 | |
|             })
 | |
|           )
 | |
|         })
 | |
|       )
 | |
|     })
 | |
|   }
 | |
| 
 | |
|   // if ANY of the sets match ALL of its comparators, then pass
 | |
|   test (version) {
 | |
|     if (!version) {
 | |
|       return false
 | |
|     }
 | |
| 
 | |
|     if (typeof version === 'string') {
 | |
|       try {
 | |
|         version = new SemVer(version, this.options)
 | |
|       } catch (er) {
 | |
|         return false
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     for (let i = 0; i < this.set.length; i++) {
 | |
|       if (testSet(this.set[i], version, this.options)) {
 | |
|         return true
 | |
|       }
 | |
|     }
 | |
|     return false
 | |
|   }
 | |
| }
 | |
| module.exports = Range
 | |
| 
 | |
| const LRU = __webpack_require__(7129)
 | |
| const cache = new LRU({ max: 1000 })
 | |
| 
 | |
| const parseOptions = __webpack_require__(785)
 | |
| const Comparator = __webpack_require__(1532)
 | |
| const debug = __webpack_require__(427)
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const {
 | |
|   re,
 | |
|   t,
 | |
|   comparatorTrimReplace,
 | |
|   tildeTrimReplace,
 | |
|   caretTrimReplace
 | |
| } = __webpack_require__(9523)
 | |
| 
 | |
| const isNullSet = c => c.value === '<0.0.0-0'
 | |
| const isAny = c => c.value === ''
 | |
| 
 | |
| // take a set of comparators and determine whether there
 | |
| // exists a version which can satisfy it
 | |
| const isSatisfiable = (comparators, options) => {
 | |
|   let result = true
 | |
|   const remainingComparators = comparators.slice()
 | |
|   let testComparator = remainingComparators.pop()
 | |
| 
 | |
|   while (result && remainingComparators.length) {
 | |
|     result = remainingComparators.every((otherComparator) => {
 | |
|       return testComparator.intersects(otherComparator, options)
 | |
|     })
 | |
| 
 | |
|     testComparator = remainingComparators.pop()
 | |
|   }
 | |
| 
 | |
|   return result
 | |
| }
 | |
| 
 | |
| // comprised of xranges, tildes, stars, and gtlt's at this point.
 | |
| // already replaced the hyphen ranges
 | |
| // turn into a set of JUST comparators.
 | |
| const parseComparator = (comp, options) => {
 | |
|   debug('comp', comp, options)
 | |
|   comp = replaceCarets(comp, options)
 | |
|   debug('caret', comp)
 | |
|   comp = replaceTildes(comp, options)
 | |
|   debug('tildes', comp)
 | |
|   comp = replaceXRanges(comp, options)
 | |
|   debug('xrange', comp)
 | |
|   comp = replaceStars(comp, options)
 | |
|   debug('stars', comp)
 | |
|   return comp
 | |
| }
 | |
| 
 | |
| const isX = id => !id || id.toLowerCase() === 'x' || id === '*'
 | |
| 
 | |
| // ~, ~> --> * (any, kinda silly)
 | |
| // ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0
 | |
| // ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0
 | |
| // ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0
 | |
| // ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0
 | |
| // ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0
 | |
| const replaceTildes = (comp, options) =>
 | |
|   comp.trim().split(/\s+/).map((comp) => {
 | |
|     return replaceTilde(comp, options)
 | |
|   }).join(' ')
 | |
| 
 | |
| const replaceTilde = (comp, options) => {
 | |
|   const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]
 | |
|   return comp.replace(r, (_, M, m, p, pr) => {
 | |
|     debug('tilde', comp, _, M, m, p, pr)
 | |
|     let ret
 | |
| 
 | |
|     if (isX(M)) {
 | |
|       ret = ''
 | |
|     } else if (isX(m)) {
 | |
|       ret = `>=${M}.0.0 <${+M + 1}.0.0-0`
 | |
|     } else if (isX(p)) {
 | |
|       // ~1.2 == >=1.2.0 <1.3.0-0
 | |
|       ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`
 | |
|     } else if (pr) {
 | |
|       debug('replaceTilde pr', pr)
 | |
|       ret = `>=${M}.${m}.${p}-${pr
 | |
|       } <${M}.${+m + 1}.0-0`
 | |
|     } else {
 | |
|       // ~1.2.3 == >=1.2.3 <1.3.0-0
 | |
|       ret = `>=${M}.${m}.${p
 | |
|       } <${M}.${+m + 1}.0-0`
 | |
|     }
 | |
| 
 | |
|     debug('tilde return', ret)
 | |
|     return ret
 | |
|   })
 | |
| }
 | |
| 
 | |
| // ^ --> * (any, kinda silly)
 | |
| // ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0
 | |
| // ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0
 | |
| // ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0
 | |
| // ^1.2.3 --> >=1.2.3 <2.0.0-0
 | |
| // ^1.2.0 --> >=1.2.0 <2.0.0-0
 | |
| const replaceCarets = (comp, options) =>
 | |
|   comp.trim().split(/\s+/).map((comp) => {
 | |
|     return replaceCaret(comp, options)
 | |
|   }).join(' ')
 | |
| 
 | |
| const replaceCaret = (comp, options) => {
 | |
|   debug('caret', comp, options)
 | |
|   const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]
 | |
|   const z = options.includePrerelease ? '-0' : ''
 | |
|   return comp.replace(r, (_, M, m, p, pr) => {
 | |
|     debug('caret', comp, _, M, m, p, pr)
 | |
|     let ret
 | |
| 
 | |
|     if (isX(M)) {
 | |
|       ret = ''
 | |
|     } else if (isX(m)) {
 | |
|       ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`
 | |
|     } else if (isX(p)) {
 | |
|       if (M === '0') {
 | |
|         ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`
 | |
|       } else {
 | |
|         ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`
 | |
|       }
 | |
|     } else if (pr) {
 | |
|       debug('replaceCaret pr', pr)
 | |
|       if (M === '0') {
 | |
|         if (m === '0') {
 | |
|           ret = `>=${M}.${m}.${p}-${pr
 | |
|           } <${M}.${m}.${+p + 1}-0`
 | |
|         } else {
 | |
|           ret = `>=${M}.${m}.${p}-${pr
 | |
|           } <${M}.${+m + 1}.0-0`
 | |
|         }
 | |
|       } else {
 | |
|         ret = `>=${M}.${m}.${p}-${pr
 | |
|         } <${+M + 1}.0.0-0`
 | |
|       }
 | |
|     } else {
 | |
|       debug('no pr')
 | |
|       if (M === '0') {
 | |
|         if (m === '0') {
 | |
|           ret = `>=${M}.${m}.${p
 | |
|           }${z} <${M}.${m}.${+p + 1}-0`
 | |
|         } else {
 | |
|           ret = `>=${M}.${m}.${p
 | |
|           }${z} <${M}.${+m + 1}.0-0`
 | |
|         }
 | |
|       } else {
 | |
|         ret = `>=${M}.${m}.${p
 | |
|         } <${+M + 1}.0.0-0`
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     debug('caret return', ret)
 | |
|     return ret
 | |
|   })
 | |
| }
 | |
| 
 | |
| const replaceXRanges = (comp, options) => {
 | |
|   debug('replaceXRanges', comp, options)
 | |
|   return comp.split(/\s+/).map((comp) => {
 | |
|     return replaceXRange(comp, options)
 | |
|   }).join(' ')
 | |
| }
 | |
| 
 | |
| const replaceXRange = (comp, options) => {
 | |
|   comp = comp.trim()
 | |
|   const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]
 | |
|   return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
 | |
|     debug('xRange', comp, ret, gtlt, M, m, p, pr)
 | |
|     const xM = isX(M)
 | |
|     const xm = xM || isX(m)
 | |
|     const xp = xm || isX(p)
 | |
|     const anyX = xp
 | |
| 
 | |
|     if (gtlt === '=' && anyX) {
 | |
|       gtlt = ''
 | |
|     }
 | |
| 
 | |
|     // if we're including prereleases in the match, then we need
 | |
|     // to fix this to -0, the lowest possible prerelease value
 | |
|     pr = options.includePrerelease ? '-0' : ''
 | |
| 
 | |
|     if (xM) {
 | |
|       if (gtlt === '>' || gtlt === '<') {
 | |
|         // nothing is allowed
 | |
|         ret = '<0.0.0-0'
 | |
|       } else {
 | |
|         // nothing is forbidden
 | |
|         ret = '*'
 | |
|       }
 | |
|     } else if (gtlt && anyX) {
 | |
|       // we know patch is an x, because we have any x at all.
 | |
|       // replace X with 0
 | |
|       if (xm) {
 | |
|         m = 0
 | |
|       }
 | |
|       p = 0
 | |
| 
 | |
|       if (gtlt === '>') {
 | |
|         // >1 => >=2.0.0
 | |
|         // >1.2 => >=1.3.0
 | |
|         gtlt = '>='
 | |
|         if (xm) {
 | |
|           M = +M + 1
 | |
|           m = 0
 | |
|           p = 0
 | |
|         } else {
 | |
|           m = +m + 1
 | |
|           p = 0
 | |
|         }
 | |
|       } else if (gtlt === '<=') {
 | |
|         // <=0.7.x is actually <0.8.0, since any 0.7.x should
 | |
|         // pass.  Similarly, <=7.x is actually <8.0.0, etc.
 | |
|         gtlt = '<'
 | |
|         if (xm) {
 | |
|           M = +M + 1
 | |
|         } else {
 | |
|           m = +m + 1
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       if (gtlt === '<')
 | |
|         pr = '-0'
 | |
| 
 | |
|       ret = `${gtlt + M}.${m}.${p}${pr}`
 | |
|     } else if (xm) {
 | |
|       ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`
 | |
|     } else if (xp) {
 | |
|       ret = `>=${M}.${m}.0${pr
 | |
|       } <${M}.${+m + 1}.0-0`
 | |
|     }
 | |
| 
 | |
|     debug('xRange return', ret)
 | |
| 
 | |
|     return ret
 | |
|   })
 | |
| }
 | |
| 
 | |
| // Because * is AND-ed with everything else in the comparator,
 | |
| // and '' means "any version", just remove the *s entirely.
 | |
| const replaceStars = (comp, options) => {
 | |
|   debug('replaceStars', comp, options)
 | |
|   // Looseness is ignored here.  star is always as loose as it gets!
 | |
|   return comp.trim().replace(re[t.STAR], '')
 | |
| }
 | |
| 
 | |
| const replaceGTE0 = (comp, options) => {
 | |
|   debug('replaceGTE0', comp, options)
 | |
|   return comp.trim()
 | |
|     .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
 | |
| }
 | |
| 
 | |
| // This function is passed to string.replace(re[t.HYPHENRANGE])
 | |
| // M, m, patch, prerelease, build
 | |
| // 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
 | |
| // 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do
 | |
| // 1.2 - 3.4 => >=1.2.0 <3.5.0-0
 | |
| const hyphenReplace = incPr => ($0,
 | |
|   from, fM, fm, fp, fpr, fb,
 | |
|   to, tM, tm, tp, tpr, tb) => {
 | |
|   if (isX(fM)) {
 | |
|     from = ''
 | |
|   } else if (isX(fm)) {
 | |
|     from = `>=${fM}.0.0${incPr ? '-0' : ''}`
 | |
|   } else if (isX(fp)) {
 | |
|     from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`
 | |
|   } else if (fpr) {
 | |
|     from = `>=${from}`
 | |
|   } else {
 | |
|     from = `>=${from}${incPr ? '-0' : ''}`
 | |
|   }
 | |
| 
 | |
|   if (isX(tM)) {
 | |
|     to = ''
 | |
|   } else if (isX(tm)) {
 | |
|     to = `<${+tM + 1}.0.0-0`
 | |
|   } else if (isX(tp)) {
 | |
|     to = `<${tM}.${+tm + 1}.0-0`
 | |
|   } else if (tpr) {
 | |
|     to = `<=${tM}.${tm}.${tp}-${tpr}`
 | |
|   } else if (incPr) {
 | |
|     to = `<${tM}.${tm}.${+tp + 1}-0`
 | |
|   } else {
 | |
|     to = `<=${to}`
 | |
|   }
 | |
| 
 | |
|   return (`${from} ${to}`).trim()
 | |
| }
 | |
| 
 | |
| const testSet = (set, version, options) => {
 | |
|   for (let i = 0; i < set.length; i++) {
 | |
|     if (!set[i].test(version)) {
 | |
|       return false
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   if (version.prerelease.length && !options.includePrerelease) {
 | |
|     // Find the set of versions that are allowed to have prereleases
 | |
|     // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
 | |
|     // That should allow `1.2.3-pr.2` to pass.
 | |
|     // However, `1.2.4-alpha.notready` should NOT be allowed,
 | |
|     // even though it's within the range set by the comparators.
 | |
|     for (let i = 0; i < set.length; i++) {
 | |
|       debug(set[i].semver)
 | |
|       if (set[i].semver === Comparator.ANY) {
 | |
|         continue
 | |
|       }
 | |
| 
 | |
|       if (set[i].semver.prerelease.length > 0) {
 | |
|         const allowed = set[i].semver
 | |
|         if (allowed.major === version.major &&
 | |
|             allowed.minor === version.minor &&
 | |
|             allowed.patch === version.patch) {
 | |
|           return true
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     // Version has a -pre, but it's not one of the ones we like.
 | |
|     return false
 | |
|   }
 | |
| 
 | |
|   return true
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8088:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const debug = __webpack_require__(427)
 | |
| const { MAX_LENGTH, MAX_SAFE_INTEGER } = __webpack_require__(2293)
 | |
| const { re, t } = __webpack_require__(9523)
 | |
| 
 | |
| const parseOptions = __webpack_require__(785)
 | |
| const { compareIdentifiers } = __webpack_require__(2463)
 | |
| class SemVer {
 | |
|   constructor (version, options) {
 | |
|     options = parseOptions(options)
 | |
| 
 | |
|     if (version instanceof SemVer) {
 | |
|       if (version.loose === !!options.loose &&
 | |
|           version.includePrerelease === !!options.includePrerelease) {
 | |
|         return version
 | |
|       } else {
 | |
|         version = version.version
 | |
|       }
 | |
|     } else if (typeof version !== 'string') {
 | |
|       throw new TypeError(`Invalid Version: ${version}`)
 | |
|     }
 | |
| 
 | |
|     if (version.length > MAX_LENGTH) {
 | |
|       throw new TypeError(
 | |
|         `version is longer than ${MAX_LENGTH} characters`
 | |
|       )
 | |
|     }
 | |
| 
 | |
|     debug('SemVer', version, options)
 | |
|     this.options = options
 | |
|     this.loose = !!options.loose
 | |
|     // this isn't actually relevant for versions, but keep it so that we
 | |
|     // don't run into trouble passing this.options around.
 | |
|     this.includePrerelease = !!options.includePrerelease
 | |
| 
 | |
|     const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])
 | |
| 
 | |
|     if (!m) {
 | |
|       throw new TypeError(`Invalid Version: ${version}`)
 | |
|     }
 | |
| 
 | |
|     this.raw = version
 | |
| 
 | |
|     // these are actually numbers
 | |
|     this.major = +m[1]
 | |
|     this.minor = +m[2]
 | |
|     this.patch = +m[3]
 | |
| 
 | |
|     if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
 | |
|       throw new TypeError('Invalid major version')
 | |
|     }
 | |
| 
 | |
|     if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
 | |
|       throw new TypeError('Invalid minor version')
 | |
|     }
 | |
| 
 | |
|     if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
 | |
|       throw new TypeError('Invalid patch version')
 | |
|     }
 | |
| 
 | |
|     // numberify any prerelease numeric ids
 | |
|     if (!m[4]) {
 | |
|       this.prerelease = []
 | |
|     } else {
 | |
|       this.prerelease = m[4].split('.').map((id) => {
 | |
|         if (/^[0-9]+$/.test(id)) {
 | |
|           const num = +id
 | |
|           if (num >= 0 && num < MAX_SAFE_INTEGER) {
 | |
|             return num
 | |
|           }
 | |
|         }
 | |
|         return id
 | |
|       })
 | |
|     }
 | |
| 
 | |
|     this.build = m[5] ? m[5].split('.') : []
 | |
|     this.format()
 | |
|   }
 | |
| 
 | |
|   format () {
 | |
|     this.version = `${this.major}.${this.minor}.${this.patch}`
 | |
|     if (this.prerelease.length) {
 | |
|       this.version += `-${this.prerelease.join('.')}`
 | |
|     }
 | |
|     return this.version
 | |
|   }
 | |
| 
 | |
|   toString () {
 | |
|     return this.version
 | |
|   }
 | |
| 
 | |
|   compare (other) {
 | |
|     debug('SemVer.compare', this.version, this.options, other)
 | |
|     if (!(other instanceof SemVer)) {
 | |
|       if (typeof other === 'string' && other === this.version) {
 | |
|         return 0
 | |
|       }
 | |
|       other = new SemVer(other, this.options)
 | |
|     }
 | |
| 
 | |
|     if (other.version === this.version) {
 | |
|       return 0
 | |
|     }
 | |
| 
 | |
|     return this.compareMain(other) || this.comparePre(other)
 | |
|   }
 | |
| 
 | |
|   compareMain (other) {
 | |
|     if (!(other instanceof SemVer)) {
 | |
|       other = new SemVer(other, this.options)
 | |
|     }
 | |
| 
 | |
|     return (
 | |
|       compareIdentifiers(this.major, other.major) ||
 | |
|       compareIdentifiers(this.minor, other.minor) ||
 | |
|       compareIdentifiers(this.patch, other.patch)
 | |
|     )
 | |
|   }
 | |
| 
 | |
|   comparePre (other) {
 | |
|     if (!(other instanceof SemVer)) {
 | |
|       other = new SemVer(other, this.options)
 | |
|     }
 | |
| 
 | |
|     // NOT having a prerelease is > having one
 | |
|     if (this.prerelease.length && !other.prerelease.length) {
 | |
|       return -1
 | |
|     } else if (!this.prerelease.length && other.prerelease.length) {
 | |
|       return 1
 | |
|     } else if (!this.prerelease.length && !other.prerelease.length) {
 | |
|       return 0
 | |
|     }
 | |
| 
 | |
|     let i = 0
 | |
|     do {
 | |
|       const a = this.prerelease[i]
 | |
|       const b = other.prerelease[i]
 | |
|       debug('prerelease compare', i, a, b)
 | |
|       if (a === undefined && b === undefined) {
 | |
|         return 0
 | |
|       } else if (b === undefined) {
 | |
|         return 1
 | |
|       } else if (a === undefined) {
 | |
|         return -1
 | |
|       } else if (a === b) {
 | |
|         continue
 | |
|       } else {
 | |
|         return compareIdentifiers(a, b)
 | |
|       }
 | |
|     } while (++i)
 | |
|   }
 | |
| 
 | |
|   compareBuild (other) {
 | |
|     if (!(other instanceof SemVer)) {
 | |
|       other = new SemVer(other, this.options)
 | |
|     }
 | |
| 
 | |
|     let i = 0
 | |
|     do {
 | |
|       const a = this.build[i]
 | |
|       const b = other.build[i]
 | |
|       debug('prerelease compare', i, a, b)
 | |
|       if (a === undefined && b === undefined) {
 | |
|         return 0
 | |
|       } else if (b === undefined) {
 | |
|         return 1
 | |
|       } else if (a === undefined) {
 | |
|         return -1
 | |
|       } else if (a === b) {
 | |
|         continue
 | |
|       } else {
 | |
|         return compareIdentifiers(a, b)
 | |
|       }
 | |
|     } while (++i)
 | |
|   }
 | |
| 
 | |
|   // preminor will bump the version up to the next minor release, and immediately
 | |
|   // down to pre-release. premajor and prepatch work the same way.
 | |
|   inc (release, identifier) {
 | |
|     switch (release) {
 | |
|       case 'premajor':
 | |
|         this.prerelease.length = 0
 | |
|         this.patch = 0
 | |
|         this.minor = 0
 | |
|         this.major++
 | |
|         this.inc('pre', identifier)
 | |
|         break
 | |
|       case 'preminor':
 | |
|         this.prerelease.length = 0
 | |
|         this.patch = 0
 | |
|         this.minor++
 | |
|         this.inc('pre', identifier)
 | |
|         break
 | |
|       case 'prepatch':
 | |
|         // If this is already a prerelease, it will bump to the next version
 | |
|         // drop any prereleases that might already exist, since they are not
 | |
|         // relevant at this point.
 | |
|         this.prerelease.length = 0
 | |
|         this.inc('patch', identifier)
 | |
|         this.inc('pre', identifier)
 | |
|         break
 | |
|       // If the input is a non-prerelease version, this acts the same as
 | |
|       // prepatch.
 | |
|       case 'prerelease':
 | |
|         if (this.prerelease.length === 0) {
 | |
|           this.inc('patch', identifier)
 | |
|         }
 | |
|         this.inc('pre', identifier)
 | |
|         break
 | |
| 
 | |
|       case 'major':
 | |
|         // If this is a pre-major version, bump up to the same major version.
 | |
|         // Otherwise increment major.
 | |
|         // 1.0.0-5 bumps to 1.0.0
 | |
|         // 1.1.0 bumps to 2.0.0
 | |
|         if (
 | |
|           this.minor !== 0 ||
 | |
|           this.patch !== 0 ||
 | |
|           this.prerelease.length === 0
 | |
|         ) {
 | |
|           this.major++
 | |
|         }
 | |
|         this.minor = 0
 | |
|         this.patch = 0
 | |
|         this.prerelease = []
 | |
|         break
 | |
|       case 'minor':
 | |
|         // If this is a pre-minor version, bump up to the same minor version.
 | |
|         // Otherwise increment minor.
 | |
|         // 1.2.0-5 bumps to 1.2.0
 | |
|         // 1.2.1 bumps to 1.3.0
 | |
|         if (this.patch !== 0 || this.prerelease.length === 0) {
 | |
|           this.minor++
 | |
|         }
 | |
|         this.patch = 0
 | |
|         this.prerelease = []
 | |
|         break
 | |
|       case 'patch':
 | |
|         // If this is not a pre-release version, it will increment the patch.
 | |
|         // If it is a pre-release it will bump up to the same patch version.
 | |
|         // 1.2.0-5 patches to 1.2.0
 | |
|         // 1.2.0 patches to 1.2.1
 | |
|         if (this.prerelease.length === 0) {
 | |
|           this.patch++
 | |
|         }
 | |
|         this.prerelease = []
 | |
|         break
 | |
|       // This probably shouldn't be used publicly.
 | |
|       // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.
 | |
|       case 'pre':
 | |
|         if (this.prerelease.length === 0) {
 | |
|           this.prerelease = [0]
 | |
|         } else {
 | |
|           let i = this.prerelease.length
 | |
|           while (--i >= 0) {
 | |
|             if (typeof this.prerelease[i] === 'number') {
 | |
|               this.prerelease[i]++
 | |
|               i = -2
 | |
|             }
 | |
|           }
 | |
|           if (i === -1) {
 | |
|             // didn't increment anything
 | |
|             this.prerelease.push(0)
 | |
|           }
 | |
|         }
 | |
|         if (identifier) {
 | |
|           // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
 | |
|           // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
 | |
|           if (this.prerelease[0] === identifier) {
 | |
|             if (isNaN(this.prerelease[1])) {
 | |
|               this.prerelease = [identifier, 0]
 | |
|             }
 | |
|           } else {
 | |
|             this.prerelease = [identifier, 0]
 | |
|           }
 | |
|         }
 | |
|         break
 | |
| 
 | |
|       default:
 | |
|         throw new Error(`invalid increment argument: ${release}`)
 | |
|     }
 | |
|     this.format()
 | |
|     this.raw = this.version
 | |
|     return this
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = SemVer
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8848:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const parse = __webpack_require__(5925)
 | |
| const clean = (version, options) => {
 | |
|   const s = parse(version.trim().replace(/^[=v]+/, ''), options)
 | |
|   return s ? s.version : null
 | |
| }
 | |
| module.exports = clean
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5098:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const eq = __webpack_require__(1898)
 | |
| const neq = __webpack_require__(6017)
 | |
| const gt = __webpack_require__(4123)
 | |
| const gte = __webpack_require__(5522)
 | |
| const lt = __webpack_require__(194)
 | |
| const lte = __webpack_require__(7520)
 | |
| 
 | |
| const cmp = (a, op, b, loose) => {
 | |
|   switch (op) {
 | |
|     case '===':
 | |
|       if (typeof a === 'object')
 | |
|         a = a.version
 | |
|       if (typeof b === 'object')
 | |
|         b = b.version
 | |
|       return a === b
 | |
| 
 | |
|     case '!==':
 | |
|       if (typeof a === 'object')
 | |
|         a = a.version
 | |
|       if (typeof b === 'object')
 | |
|         b = b.version
 | |
|       return a !== b
 | |
| 
 | |
|     case '':
 | |
|     case '=':
 | |
|     case '==':
 | |
|       return eq(a, b, loose)
 | |
| 
 | |
|     case '!=':
 | |
|       return neq(a, b, loose)
 | |
| 
 | |
|     case '>':
 | |
|       return gt(a, b, loose)
 | |
| 
 | |
|     case '>=':
 | |
|       return gte(a, b, loose)
 | |
| 
 | |
|     case '<':
 | |
|       return lt(a, b, loose)
 | |
| 
 | |
|     case '<=':
 | |
|       return lte(a, b, loose)
 | |
| 
 | |
|     default:
 | |
|       throw new TypeError(`Invalid operator: ${op}`)
 | |
|   }
 | |
| }
 | |
| module.exports = cmp
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3466:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const parse = __webpack_require__(5925)
 | |
| const {re, t} = __webpack_require__(9523)
 | |
| 
 | |
| const coerce = (version, options) => {
 | |
|   if (version instanceof SemVer) {
 | |
|     return version
 | |
|   }
 | |
| 
 | |
|   if (typeof version === 'number') {
 | |
|     version = String(version)
 | |
|   }
 | |
| 
 | |
|   if (typeof version !== 'string') {
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   options = options || {}
 | |
| 
 | |
|   let match = null
 | |
|   if (!options.rtl) {
 | |
|     match = version.match(re[t.COERCE])
 | |
|   } else {
 | |
|     // Find the right-most coercible string that does not share
 | |
|     // a terminus with a more left-ward coercible string.
 | |
|     // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
 | |
|     //
 | |
|     // Walk through the string checking with a /g regexp
 | |
|     // Manually set the index so as to pick up overlapping matches.
 | |
|     // Stop when we get a match that ends at the string end, since no
 | |
|     // coercible string can be more right-ward without the same terminus.
 | |
|     let next
 | |
|     while ((next = re[t.COERCERTL].exec(version)) &&
 | |
|         (!match || match.index + match[0].length !== version.length)
 | |
|     ) {
 | |
|       if (!match ||
 | |
|             next.index + next[0].length !== match.index + match[0].length) {
 | |
|         match = next
 | |
|       }
 | |
|       re[t.COERCERTL].lastIndex = next.index + next[1].length + next[2].length
 | |
|     }
 | |
|     // leave it in a clean state
 | |
|     re[t.COERCERTL].lastIndex = -1
 | |
|   }
 | |
| 
 | |
|   if (match === null)
 | |
|     return null
 | |
| 
 | |
|   return parse(`${match[2]}.${match[3] || '0'}.${match[4] || '0'}`, options)
 | |
| }
 | |
| module.exports = coerce
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2156:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const compareBuild = (a, b, loose) => {
 | |
|   const versionA = new SemVer(a, loose)
 | |
|   const versionB = new SemVer(b, loose)
 | |
|   return versionA.compare(versionB) || versionA.compareBuild(versionB)
 | |
| }
 | |
| module.exports = compareBuild
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2804:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const compareLoose = (a, b) => compare(a, b, true)
 | |
| module.exports = compareLoose
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4309:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const compare = (a, b, loose) =>
 | |
|   new SemVer(a, loose).compare(new SemVer(b, loose))
 | |
| 
 | |
| module.exports = compare
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4297:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const parse = __webpack_require__(5925)
 | |
| const eq = __webpack_require__(1898)
 | |
| 
 | |
| const diff = (version1, version2) => {
 | |
|   if (eq(version1, version2)) {
 | |
|     return null
 | |
|   } else {
 | |
|     const v1 = parse(version1)
 | |
|     const v2 = parse(version2)
 | |
|     const hasPre = v1.prerelease.length || v2.prerelease.length
 | |
|     const prefix = hasPre ? 'pre' : ''
 | |
|     const defaultResult = hasPre ? 'prerelease' : ''
 | |
|     for (const key in v1) {
 | |
|       if (key === 'major' || key === 'minor' || key === 'patch') {
 | |
|         if (v1[key] !== v2[key]) {
 | |
|           return prefix + key
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|     return defaultResult // may be undefined
 | |
|   }
 | |
| }
 | |
| module.exports = diff
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1898:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const eq = (a, b, loose) => compare(a, b, loose) === 0
 | |
| module.exports = eq
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4123:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const gt = (a, b, loose) => compare(a, b, loose) > 0
 | |
| module.exports = gt
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5522:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const gte = (a, b, loose) => compare(a, b, loose) >= 0
 | |
| module.exports = gte
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 900:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| 
 | |
| const inc = (version, release, options, identifier) => {
 | |
|   if (typeof (options) === 'string') {
 | |
|     identifier = options
 | |
|     options = undefined
 | |
|   }
 | |
| 
 | |
|   try {
 | |
|     return new SemVer(version, options).inc(release, identifier).version
 | |
|   } catch (er) {
 | |
|     return null
 | |
|   }
 | |
| }
 | |
| module.exports = inc
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 194:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const lt = (a, b, loose) => compare(a, b, loose) < 0
 | |
| module.exports = lt
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7520:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const lte = (a, b, loose) => compare(a, b, loose) <= 0
 | |
| module.exports = lte
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6688:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const major = (a, loose) => new SemVer(a, loose).major
 | |
| module.exports = major
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8447:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const minor = (a, loose) => new SemVer(a, loose).minor
 | |
| module.exports = minor
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6017:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const neq = (a, b, loose) => compare(a, b, loose) !== 0
 | |
| module.exports = neq
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5925:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const {MAX_LENGTH} = __webpack_require__(2293)
 | |
| const { re, t } = __webpack_require__(9523)
 | |
| const SemVer = __webpack_require__(8088)
 | |
| 
 | |
| const parseOptions = __webpack_require__(785)
 | |
| const parse = (version, options) => {
 | |
|   options = parseOptions(options)
 | |
| 
 | |
|   if (version instanceof SemVer) {
 | |
|     return version
 | |
|   }
 | |
| 
 | |
|   if (typeof version !== 'string') {
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   if (version.length > MAX_LENGTH) {
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   const r = options.loose ? re[t.LOOSE] : re[t.FULL]
 | |
|   if (!r.test(version)) {
 | |
|     return null
 | |
|   }
 | |
| 
 | |
|   try {
 | |
|     return new SemVer(version, options)
 | |
|   } catch (er) {
 | |
|     return null
 | |
|   }
 | |
| }
 | |
| 
 | |
| module.exports = parse
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2866:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const patch = (a, loose) => new SemVer(a, loose).patch
 | |
| module.exports = patch
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6014:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const parse = __webpack_require__(5925)
 | |
| const prerelease = (version, options) => {
 | |
|   const parsed = parse(version, options)
 | |
|   return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
 | |
| }
 | |
| module.exports = prerelease
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6417:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compare = __webpack_require__(4309)
 | |
| const rcompare = (a, b, loose) => compare(b, a, loose)
 | |
| module.exports = rcompare
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8701:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compareBuild = __webpack_require__(2156)
 | |
| const rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))
 | |
| module.exports = rsort
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6055:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const Range = __webpack_require__(9828)
 | |
| const satisfies = (version, range, options) => {
 | |
|   try {
 | |
|     range = new Range(range, options)
 | |
|   } catch (er) {
 | |
|     return false
 | |
|   }
 | |
|   return range.test(version)
 | |
| }
 | |
| module.exports = satisfies
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1426:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const compareBuild = __webpack_require__(2156)
 | |
| const sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))
 | |
| module.exports = sort
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9601:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const parse = __webpack_require__(5925)
 | |
| const valid = (version, options) => {
 | |
|   const v = parse(version, options)
 | |
|   return v ? v.version : null
 | |
| }
 | |
| module.exports = valid
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1383:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| // just pre-load all the stuff that index.js lazily exports
 | |
| const internalRe = __webpack_require__(9523)
 | |
| module.exports = {
 | |
|   re: internalRe.re,
 | |
|   src: internalRe.src,
 | |
|   tokens: internalRe.t,
 | |
|   SEMVER_SPEC_VERSION: __webpack_require__(2293).SEMVER_SPEC_VERSION,
 | |
|   SemVer: __webpack_require__(8088),
 | |
|   compareIdentifiers: __webpack_require__(2463).compareIdentifiers,
 | |
|   rcompareIdentifiers: __webpack_require__(2463).rcompareIdentifiers,
 | |
|   parse: __webpack_require__(5925),
 | |
|   valid: __webpack_require__(9601),
 | |
|   clean: __webpack_require__(8848),
 | |
|   inc: __webpack_require__(900),
 | |
|   diff: __webpack_require__(4297),
 | |
|   major: __webpack_require__(6688),
 | |
|   minor: __webpack_require__(8447),
 | |
|   patch: __webpack_require__(2866),
 | |
|   prerelease: __webpack_require__(6014),
 | |
|   compare: __webpack_require__(4309),
 | |
|   rcompare: __webpack_require__(6417),
 | |
|   compareLoose: __webpack_require__(2804),
 | |
|   compareBuild: __webpack_require__(2156),
 | |
|   sort: __webpack_require__(1426),
 | |
|   rsort: __webpack_require__(8701),
 | |
|   gt: __webpack_require__(4123),
 | |
|   lt: __webpack_require__(194),
 | |
|   eq: __webpack_require__(1898),
 | |
|   neq: __webpack_require__(6017),
 | |
|   gte: __webpack_require__(5522),
 | |
|   lte: __webpack_require__(7520),
 | |
|   cmp: __webpack_require__(5098),
 | |
|   coerce: __webpack_require__(3466),
 | |
|   Comparator: __webpack_require__(1532),
 | |
|   Range: __webpack_require__(9828),
 | |
|   satisfies: __webpack_require__(6055),
 | |
|   toComparators: __webpack_require__(2706),
 | |
|   maxSatisfying: __webpack_require__(579),
 | |
|   minSatisfying: __webpack_require__(832),
 | |
|   minVersion: __webpack_require__(4179),
 | |
|   validRange: __webpack_require__(2098),
 | |
|   outside: __webpack_require__(420),
 | |
|   gtr: __webpack_require__(9380),
 | |
|   ltr: __webpack_require__(3323),
 | |
|   intersects: __webpack_require__(7008),
 | |
|   simplifyRange: __webpack_require__(5297),
 | |
|   subset: __webpack_require__(7863),
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2293:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| // Note: this is the semver.org version of the spec that it implements
 | |
| // Not necessarily the package version of this code.
 | |
| const SEMVER_SPEC_VERSION = '2.0.0'
 | |
| 
 | |
| const MAX_LENGTH = 256
 | |
| const MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
 | |
|   /* istanbul ignore next */ 9007199254740991
 | |
| 
 | |
| // Max safe segment length for coercion.
 | |
| const MAX_SAFE_COMPONENT_LENGTH = 16
 | |
| 
 | |
| module.exports = {
 | |
|   SEMVER_SPEC_VERSION,
 | |
|   MAX_LENGTH,
 | |
|   MAX_SAFE_INTEGER,
 | |
|   MAX_SAFE_COMPONENT_LENGTH
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 427:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| const debug = (
 | |
|   typeof process === 'object' &&
 | |
|   process.env &&
 | |
|   process.env.NODE_DEBUG &&
 | |
|   /\bsemver\b/i.test(process.env.NODE_DEBUG)
 | |
| ) ? (...args) => console.error('SEMVER', ...args)
 | |
|   : () => {}
 | |
| 
 | |
| module.exports = debug
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2463:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| const numeric = /^[0-9]+$/
 | |
| const compareIdentifiers = (a, b) => {
 | |
|   const anum = numeric.test(a)
 | |
|   const bnum = numeric.test(b)
 | |
| 
 | |
|   if (anum && bnum) {
 | |
|     a = +a
 | |
|     b = +b
 | |
|   }
 | |
| 
 | |
|   return a === b ? 0
 | |
|     : (anum && !bnum) ? -1
 | |
|     : (bnum && !anum) ? 1
 | |
|     : a < b ? -1
 | |
|     : 1
 | |
| }
 | |
| 
 | |
| const rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)
 | |
| 
 | |
| module.exports = {
 | |
|   compareIdentifiers,
 | |
|   rcompareIdentifiers
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 785:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| // parse out just the options we care about so we always get a consistent
 | |
| // obj with keys in a consistent order.
 | |
| const opts = ['includePrerelease', 'loose', 'rtl']
 | |
| const parseOptions = options =>
 | |
|   !options ? {}
 | |
|   : typeof options !== 'object' ? { loose: true }
 | |
|   : opts.filter(k => options[k]).reduce((options, k) => {
 | |
|     options[k] = true
 | |
|     return options
 | |
|   }, {})
 | |
| module.exports = parseOptions
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9523:
 | |
| /***/ ((module, exports, __webpack_require__) => {
 | |
| 
 | |
| const { MAX_SAFE_COMPONENT_LENGTH } = __webpack_require__(2293)
 | |
| const debug = __webpack_require__(427)
 | |
| exports = module.exports = {}
 | |
| 
 | |
| // The actual regexps go on exports.re
 | |
| const re = exports.re = []
 | |
| const src = exports.src = []
 | |
| const t = exports.t = {}
 | |
| let R = 0
 | |
| 
 | |
| const createToken = (name, value, isGlobal) => {
 | |
|   const index = R++
 | |
|   debug(index, value)
 | |
|   t[name] = index
 | |
|   src[index] = value
 | |
|   re[index] = new RegExp(value, isGlobal ? 'g' : undefined)
 | |
| }
 | |
| 
 | |
| // The following Regular Expressions can be used for tokenizing,
 | |
| // validating, and parsing SemVer version strings.
 | |
| 
 | |
| // ## Numeric Identifier
 | |
| // A single `0`, or a non-zero digit followed by zero or more digits.
 | |
| 
 | |
| createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*')
 | |
| createToken('NUMERICIDENTIFIERLOOSE', '[0-9]+')
 | |
| 
 | |
| // ## Non-numeric Identifier
 | |
| // Zero or more digits, followed by a letter or hyphen, and then zero or
 | |
| // more letters, digits, or hyphens.
 | |
| 
 | |
| createToken('NONNUMERICIDENTIFIER', '\\d*[a-zA-Z-][a-zA-Z0-9-]*')
 | |
| 
 | |
| // ## Main Version
 | |
| // Three dot-separated numeric identifiers.
 | |
| 
 | |
| createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
 | |
|                    `(${src[t.NUMERICIDENTIFIER]})\\.` +
 | |
|                    `(${src[t.NUMERICIDENTIFIER]})`)
 | |
| 
 | |
| createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
 | |
|                         `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
 | |
|                         `(${src[t.NUMERICIDENTIFIERLOOSE]})`)
 | |
| 
 | |
| // ## Pre-release Version Identifier
 | |
| // A numeric identifier, or a non-numeric identifier.
 | |
| 
 | |
| createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NUMERICIDENTIFIER]
 | |
| }|${src[t.NONNUMERICIDENTIFIER]})`)
 | |
| 
 | |
| createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NUMERICIDENTIFIERLOOSE]
 | |
| }|${src[t.NONNUMERICIDENTIFIER]})`)
 | |
| 
 | |
| // ## Pre-release Version
 | |
| // Hyphen, followed by one or more dot-separated pre-release version
 | |
| // identifiers.
 | |
| 
 | |
| createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
 | |
| }(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`)
 | |
| 
 | |
| createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
 | |
| }(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)
 | |
| 
 | |
| // ## Build Metadata Identifier
 | |
| // Any combination of digits, letters, or hyphens.
 | |
| 
 | |
| createToken('BUILDIDENTIFIER', '[0-9A-Za-z-]+')
 | |
| 
 | |
| // ## Build Metadata
 | |
| // Plus sign, followed by one or more period-separated build metadata
 | |
| // identifiers.
 | |
| 
 | |
| createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
 | |
| }(?:\\.${src[t.BUILDIDENTIFIER]})*))`)
 | |
| 
 | |
| // ## Full Version String
 | |
| // A main version, followed optionally by a pre-release version and
 | |
| // build metadata.
 | |
| 
 | |
| // Note that the only major, minor, patch, and pre-release sections of
 | |
| // the version string are capturing groups.  The build metadata is not a
 | |
| // capturing group, because it should not ever be used in version
 | |
| // comparison.
 | |
| 
 | |
| createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
 | |
| }${src[t.PRERELEASE]}?${
 | |
|   src[t.BUILD]}?`)
 | |
| 
 | |
| createToken('FULL', `^${src[t.FULLPLAIN]}$`)
 | |
| 
 | |
| // like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
 | |
| // also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
 | |
| // common in the npm registry.
 | |
| createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
 | |
| }${src[t.PRERELEASELOOSE]}?${
 | |
|   src[t.BUILD]}?`)
 | |
| 
 | |
| createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)
 | |
| 
 | |
| createToken('GTLT', '((?:<|>)?=?)')
 | |
| 
 | |
| // Something like "2.*" or "1.2.x".
 | |
| // Note that "x.x" is a valid xRange identifer, meaning "any version"
 | |
| // Only the first item is strictly required.
 | |
| createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`)
 | |
| createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`)
 | |
| 
 | |
| createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
 | |
|                    `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
 | |
|                    `(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
 | |
|                    `(?:${src[t.PRERELEASE]})?${
 | |
|                      src[t.BUILD]}?` +
 | |
|                    `)?)?`)
 | |
| 
 | |
| createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
 | |
|                         `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
 | |
|                         `(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
 | |
|                         `(?:${src[t.PRERELEASELOOSE]})?${
 | |
|                           src[t.BUILD]}?` +
 | |
|                         `)?)?`)
 | |
| 
 | |
| createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`)
 | |
| createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`)
 | |
| 
 | |
| // Coercion.
 | |
| // Extract anything that could conceivably be a part of a valid semver
 | |
| createToken('COERCE', `${'(^|[^\\d])' +
 | |
|               '(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
 | |
|               `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
 | |
|               `(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
 | |
|               `(?:$|[^\\d])`)
 | |
| createToken('COERCERTL', src[t.COERCE], true)
 | |
| 
 | |
| // Tilde ranges.
 | |
| // Meaning is "reasonably at or greater than"
 | |
| createToken('LONETILDE', '(?:~>?)')
 | |
| 
 | |
| createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true)
 | |
| exports.tildeTrimReplace = '$1~'
 | |
| 
 | |
| createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)
 | |
| createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)
 | |
| 
 | |
| // Caret ranges.
 | |
| // Meaning is "at least and backwards compatible with"
 | |
| createToken('LONECARET', '(?:\\^)')
 | |
| 
 | |
| createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true)
 | |
| exports.caretTrimReplace = '$1^'
 | |
| 
 | |
| createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)
 | |
| createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)
 | |
| 
 | |
| // A simple gt/lt/eq thing, or just "" to indicate "any version"
 | |
| createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`)
 | |
| createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`)
 | |
| 
 | |
| // An expression to strip any whitespace between the gtlt and the thing
 | |
| // it modifies, so that `> 1.2.3` ==> `>1.2.3`
 | |
| createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
 | |
| }\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)
 | |
| exports.comparatorTrimReplace = '$1$2$3'
 | |
| 
 | |
| // Something like `1.2.3 - 1.2.4`
 | |
| // Note that these all use the loose form, because they'll be
 | |
| // checked against either the strict or loose comparator form
 | |
| // later.
 | |
| createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
 | |
|                    `\\s+-\\s+` +
 | |
|                    `(${src[t.XRANGEPLAIN]})` +
 | |
|                    `\\s*$`)
 | |
| 
 | |
| createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
 | |
|                         `\\s+-\\s+` +
 | |
|                         `(${src[t.XRANGEPLAINLOOSE]})` +
 | |
|                         `\\s*$`)
 | |
| 
 | |
| // Star ranges basically just allow anything at all.
 | |
| createToken('STAR', '(<|>)?=?\\s*\\*')
 | |
| // >=0.0.0 is like a star
 | |
| createToken('GTE0', '^\\s*>=\\s*0\.0\.0\\s*$')
 | |
| createToken('GTE0PRE', '^\\s*>=\\s*0\.0\.0-0\\s*$')
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9380:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| // Determine if version is greater than all the versions possible in the range.
 | |
| const outside = __webpack_require__(420)
 | |
| const gtr = (version, range, options) => outside(version, range, '>', options)
 | |
| module.exports = gtr
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7008:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const Range = __webpack_require__(9828)
 | |
| const intersects = (r1, r2, options) => {
 | |
|   r1 = new Range(r1, options)
 | |
|   r2 = new Range(r2, options)
 | |
|   return r1.intersects(r2)
 | |
| }
 | |
| module.exports = intersects
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3323:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const outside = __webpack_require__(420)
 | |
| // Determine if version is less than all the versions possible in the range
 | |
| const ltr = (version, range, options) => outside(version, range, '<', options)
 | |
| module.exports = ltr
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 579:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const Range = __webpack_require__(9828)
 | |
| 
 | |
| const maxSatisfying = (versions, range, options) => {
 | |
|   let max = null
 | |
|   let maxSV = null
 | |
|   let rangeObj = null
 | |
|   try {
 | |
|     rangeObj = new Range(range, options)
 | |
|   } catch (er) {
 | |
|     return null
 | |
|   }
 | |
|   versions.forEach((v) => {
 | |
|     if (rangeObj.test(v)) {
 | |
|       // satisfies(v, range, options)
 | |
|       if (!max || maxSV.compare(v) === -1) {
 | |
|         // compare(max, v, true)
 | |
|         max = v
 | |
|         maxSV = new SemVer(max, options)
 | |
|       }
 | |
|     }
 | |
|   })
 | |
|   return max
 | |
| }
 | |
| module.exports = maxSatisfying
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 832:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const Range = __webpack_require__(9828)
 | |
| const minSatisfying = (versions, range, options) => {
 | |
|   let min = null
 | |
|   let minSV = null
 | |
|   let rangeObj = null
 | |
|   try {
 | |
|     rangeObj = new Range(range, options)
 | |
|   } catch (er) {
 | |
|     return null
 | |
|   }
 | |
|   versions.forEach((v) => {
 | |
|     if (rangeObj.test(v)) {
 | |
|       // satisfies(v, range, options)
 | |
|       if (!min || minSV.compare(v) === 1) {
 | |
|         // compare(min, v, true)
 | |
|         min = v
 | |
|         minSV = new SemVer(min, options)
 | |
|       }
 | |
|     }
 | |
|   })
 | |
|   return min
 | |
| }
 | |
| module.exports = minSatisfying
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4179:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const Range = __webpack_require__(9828)
 | |
| const gt = __webpack_require__(4123)
 | |
| 
 | |
| const minVersion = (range, loose) => {
 | |
|   range = new Range(range, loose)
 | |
| 
 | |
|   let minver = new SemVer('0.0.0')
 | |
|   if (range.test(minver)) {
 | |
|     return minver
 | |
|   }
 | |
| 
 | |
|   minver = new SemVer('0.0.0-0')
 | |
|   if (range.test(minver)) {
 | |
|     return minver
 | |
|   }
 | |
| 
 | |
|   minver = null
 | |
|   for (let i = 0; i < range.set.length; ++i) {
 | |
|     const comparators = range.set[i]
 | |
| 
 | |
|     let setMin = null
 | |
|     comparators.forEach((comparator) => {
 | |
|       // Clone to avoid manipulating the comparator's semver object.
 | |
|       const compver = new SemVer(comparator.semver.version)
 | |
|       switch (comparator.operator) {
 | |
|         case '>':
 | |
|           if (compver.prerelease.length === 0) {
 | |
|             compver.patch++
 | |
|           } else {
 | |
|             compver.prerelease.push(0)
 | |
|           }
 | |
|           compver.raw = compver.format()
 | |
|           /* fallthrough */
 | |
|         case '':
 | |
|         case '>=':
 | |
|           if (!setMin || gt(compver, setMin)) {
 | |
|             setMin = compver
 | |
|           }
 | |
|           break
 | |
|         case '<':
 | |
|         case '<=':
 | |
|           /* Ignore maximum versions */
 | |
|           break
 | |
|         /* istanbul ignore next */
 | |
|         default:
 | |
|           throw new Error(`Unexpected operation: ${comparator.operator}`)
 | |
|       }
 | |
|     })
 | |
|     if (setMin && (!minver || gt(minver, setMin)))
 | |
|       minver = setMin
 | |
|   }
 | |
| 
 | |
|   if (minver && range.test(minver)) {
 | |
|     return minver
 | |
|   }
 | |
| 
 | |
|   return null
 | |
| }
 | |
| module.exports = minVersion
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 420:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const SemVer = __webpack_require__(8088)
 | |
| const Comparator = __webpack_require__(1532)
 | |
| const {ANY} = Comparator
 | |
| const Range = __webpack_require__(9828)
 | |
| const satisfies = __webpack_require__(6055)
 | |
| const gt = __webpack_require__(4123)
 | |
| const lt = __webpack_require__(194)
 | |
| const lte = __webpack_require__(7520)
 | |
| const gte = __webpack_require__(5522)
 | |
| 
 | |
| const outside = (version, range, hilo, options) => {
 | |
|   version = new SemVer(version, options)
 | |
|   range = new Range(range, options)
 | |
| 
 | |
|   let gtfn, ltefn, ltfn, comp, ecomp
 | |
|   switch (hilo) {
 | |
|     case '>':
 | |
|       gtfn = gt
 | |
|       ltefn = lte
 | |
|       ltfn = lt
 | |
|       comp = '>'
 | |
|       ecomp = '>='
 | |
|       break
 | |
|     case '<':
 | |
|       gtfn = lt
 | |
|       ltefn = gte
 | |
|       ltfn = gt
 | |
|       comp = '<'
 | |
|       ecomp = '<='
 | |
|       break
 | |
|     default:
 | |
|       throw new TypeError('Must provide a hilo val of "<" or ">"')
 | |
|   }
 | |
| 
 | |
|   // If it satisfies the range it is not outside
 | |
|   if (satisfies(version, range, options)) {
 | |
|     return false
 | |
|   }
 | |
| 
 | |
|   // From now on, variable terms are as if we're in "gtr" mode.
 | |
|   // but note that everything is flipped for the "ltr" function.
 | |
| 
 | |
|   for (let i = 0; i < range.set.length; ++i) {
 | |
|     const comparators = range.set[i]
 | |
| 
 | |
|     let high = null
 | |
|     let low = null
 | |
| 
 | |
|     comparators.forEach((comparator) => {
 | |
|       if (comparator.semver === ANY) {
 | |
|         comparator = new Comparator('>=0.0.0')
 | |
|       }
 | |
|       high = high || comparator
 | |
|       low = low || comparator
 | |
|       if (gtfn(comparator.semver, high.semver, options)) {
 | |
|         high = comparator
 | |
|       } else if (ltfn(comparator.semver, low.semver, options)) {
 | |
|         low = comparator
 | |
|       }
 | |
|     })
 | |
| 
 | |
|     // If the edge version comparator has a operator then our version
 | |
|     // isn't outside it
 | |
|     if (high.operator === comp || high.operator === ecomp) {
 | |
|       return false
 | |
|     }
 | |
| 
 | |
|     // If the lowest version comparator has an operator and our version
 | |
|     // is less than it then it isn't higher than the range
 | |
|     if ((!low.operator || low.operator === comp) &&
 | |
|         ltefn(version, low.semver)) {
 | |
|       return false
 | |
|     } else if (low.operator === ecomp && ltfn(version, low.semver)) {
 | |
|       return false
 | |
|     }
 | |
|   }
 | |
|   return true
 | |
| }
 | |
| 
 | |
| module.exports = outside
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5297:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| // given a set of versions and a range, create a "simplified" range
 | |
| // that includes the same versions that the original range does
 | |
| // If the original range is shorter than the simplified one, return that.
 | |
| const satisfies = __webpack_require__(6055)
 | |
| const compare = __webpack_require__(4309)
 | |
| module.exports = (versions, range, options) => {
 | |
|   const set = []
 | |
|   let min = null
 | |
|   let prev = null
 | |
|   const v = versions.sort((a, b) => compare(a, b, options))
 | |
|   for (const version of v) {
 | |
|     const included = satisfies(version, range, options)
 | |
|     if (included) {
 | |
|       prev = version
 | |
|       if (!min)
 | |
|         min = version
 | |
|     } else {
 | |
|       if (prev) {
 | |
|         set.push([min, prev])
 | |
|       }
 | |
|       prev = null
 | |
|       min = null
 | |
|     }
 | |
|   }
 | |
|   if (min)
 | |
|     set.push([min, null])
 | |
| 
 | |
|   const ranges = []
 | |
|   for (const [min, max] of set) {
 | |
|     if (min === max)
 | |
|       ranges.push(min)
 | |
|     else if (!max && min === v[0])
 | |
|       ranges.push('*')
 | |
|     else if (!max)
 | |
|       ranges.push(`>=${min}`)
 | |
|     else if (min === v[0])
 | |
|       ranges.push(`<=${max}`)
 | |
|     else
 | |
|       ranges.push(`${min} - ${max}`)
 | |
|   }
 | |
|   const simplified = ranges.join(' || ')
 | |
|   const original = typeof range.raw === 'string' ? range.raw : String(range)
 | |
|   return simplified.length < original.length ? simplified : range
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7863:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const Range = __webpack_require__(9828)
 | |
| const Comparator = __webpack_require__(1532)
 | |
| const { ANY } = Comparator
 | |
| const satisfies = __webpack_require__(6055)
 | |
| const compare = __webpack_require__(4309)
 | |
| 
 | |
| // Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:
 | |
| // - Every simple range `r1, r2, ...` is a null set, OR
 | |
| // - Every simple range `r1, r2, ...` which is not a null set is a subset of
 | |
| //   some `R1, R2, ...`
 | |
| //
 | |
| // Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:
 | |
| // - If c is only the ANY comparator
 | |
| //   - If C is only the ANY comparator, return true
 | |
| //   - Else if in prerelease mode, return false
 | |
| //   - else replace c with `[>=0.0.0]`
 | |
| // - If C is only the ANY comparator
 | |
| //   - if in prerelease mode, return true
 | |
| //   - else replace C with `[>=0.0.0]`
 | |
| // - Let EQ be the set of = comparators in c
 | |
| // - If EQ is more than one, return true (null set)
 | |
| // - Let GT be the highest > or >= comparator in c
 | |
| // - Let LT be the lowest < or <= comparator in c
 | |
| // - If GT and LT, and GT.semver > LT.semver, return true (null set)
 | |
| // - If any C is a = range, and GT or LT are set, return false
 | |
| // - If EQ
 | |
| //   - If GT, and EQ does not satisfy GT, return true (null set)
 | |
| //   - If LT, and EQ does not satisfy LT, return true (null set)
 | |
| //   - If EQ satisfies every C, return true
 | |
| //   - Else return false
 | |
| // - If GT
 | |
| //   - If GT.semver is lower than any > or >= comp in C, return false
 | |
| //   - If GT is >=, and GT.semver does not satisfy every C, return false
 | |
| //   - If GT.semver has a prerelease, and not in prerelease mode
 | |
| //     - If no C has a prerelease and the GT.semver tuple, return false
 | |
| // - If LT
 | |
| //   - If LT.semver is greater than any < or <= comp in C, return false
 | |
| //   - If LT is <=, and LT.semver does not satisfy every C, return false
 | |
| //   - If GT.semver has a prerelease, and not in prerelease mode
 | |
| //     - If no C has a prerelease and the LT.semver tuple, return false
 | |
| // - Else return true
 | |
| 
 | |
| const subset = (sub, dom, options = {}) => {
 | |
|   if (sub === dom)
 | |
|     return true
 | |
| 
 | |
|   sub = new Range(sub, options)
 | |
|   dom = new Range(dom, options)
 | |
|   let sawNonNull = false
 | |
| 
 | |
|   OUTER: for (const simpleSub of sub.set) {
 | |
|     for (const simpleDom of dom.set) {
 | |
|       const isSub = simpleSubset(simpleSub, simpleDom, options)
 | |
|       sawNonNull = sawNonNull || isSub !== null
 | |
|       if (isSub)
 | |
|         continue OUTER
 | |
|     }
 | |
|     // the null set is a subset of everything, but null simple ranges in
 | |
|     // a complex range should be ignored.  so if we saw a non-null range,
 | |
|     // then we know this isn't a subset, but if EVERY simple range was null,
 | |
|     // then it is a subset.
 | |
|     if (sawNonNull)
 | |
|       return false
 | |
|   }
 | |
|   return true
 | |
| }
 | |
| 
 | |
| const simpleSubset = (sub, dom, options) => {
 | |
|   if (sub === dom)
 | |
|     return true
 | |
| 
 | |
|   if (sub.length === 1 && sub[0].semver === ANY) {
 | |
|     if (dom.length === 1 && dom[0].semver === ANY)
 | |
|       return true
 | |
|     else if (options.includePrerelease)
 | |
|       sub = [ new Comparator('>=0.0.0-0') ]
 | |
|     else
 | |
|       sub = [ new Comparator('>=0.0.0') ]
 | |
|   }
 | |
| 
 | |
|   if (dom.length === 1 && dom[0].semver === ANY) {
 | |
|     if (options.includePrerelease)
 | |
|       return true
 | |
|     else
 | |
|       dom = [ new Comparator('>=0.0.0') ]
 | |
|   }
 | |
| 
 | |
|   const eqSet = new Set()
 | |
|   let gt, lt
 | |
|   for (const c of sub) {
 | |
|     if (c.operator === '>' || c.operator === '>=')
 | |
|       gt = higherGT(gt, c, options)
 | |
|     else if (c.operator === '<' || c.operator === '<=')
 | |
|       lt = lowerLT(lt, c, options)
 | |
|     else
 | |
|       eqSet.add(c.semver)
 | |
|   }
 | |
| 
 | |
|   if (eqSet.size > 1)
 | |
|     return null
 | |
| 
 | |
|   let gtltComp
 | |
|   if (gt && lt) {
 | |
|     gtltComp = compare(gt.semver, lt.semver, options)
 | |
|     if (gtltComp > 0)
 | |
|       return null
 | |
|     else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<='))
 | |
|       return null
 | |
|   }
 | |
| 
 | |
|   // will iterate one or zero times
 | |
|   for (const eq of eqSet) {
 | |
|     if (gt && !satisfies(eq, String(gt), options))
 | |
|       return null
 | |
| 
 | |
|     if (lt && !satisfies(eq, String(lt), options))
 | |
|       return null
 | |
| 
 | |
|     for (const c of dom) {
 | |
|       if (!satisfies(eq, String(c), options))
 | |
|         return false
 | |
|     }
 | |
| 
 | |
|     return true
 | |
|   }
 | |
| 
 | |
|   let higher, lower
 | |
|   let hasDomLT, hasDomGT
 | |
|   // if the subset has a prerelease, we need a comparator in the superset
 | |
|   // with the same tuple and a prerelease, or it's not a subset
 | |
|   let needDomLTPre = lt &&
 | |
|     !options.includePrerelease &&
 | |
|     lt.semver.prerelease.length ? lt.semver : false
 | |
|   let needDomGTPre = gt &&
 | |
|     !options.includePrerelease &&
 | |
|     gt.semver.prerelease.length ? gt.semver : false
 | |
|   // exception: <1.2.3-0 is the same as <1.2.3
 | |
|   if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
 | |
|       lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
 | |
|     needDomLTPre = false
 | |
|   }
 | |
| 
 | |
|   for (const c of dom) {
 | |
|     hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='
 | |
|     hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='
 | |
|     if (gt) {
 | |
|       if (needDomGTPre) {
 | |
|         if (c.semver.prerelease && c.semver.prerelease.length &&
 | |
|             c.semver.major === needDomGTPre.major &&
 | |
|             c.semver.minor === needDomGTPre.minor &&
 | |
|             c.semver.patch === needDomGTPre.patch) {
 | |
|           needDomGTPre = false
 | |
|         }
 | |
|       }
 | |
|       if (c.operator === '>' || c.operator === '>=') {
 | |
|         higher = higherGT(gt, c, options)
 | |
|         if (higher === c && higher !== gt)
 | |
|           return false
 | |
|       } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options))
 | |
|         return false
 | |
|     }
 | |
|     if (lt) {
 | |
|       if (needDomLTPre) {
 | |
|         if (c.semver.prerelease && c.semver.prerelease.length &&
 | |
|             c.semver.major === needDomLTPre.major &&
 | |
|             c.semver.minor === needDomLTPre.minor &&
 | |
|             c.semver.patch === needDomLTPre.patch) {
 | |
|           needDomLTPre = false
 | |
|         }
 | |
|       }
 | |
|       if (c.operator === '<' || c.operator === '<=') {
 | |
|         lower = lowerLT(lt, c, options)
 | |
|         if (lower === c && lower !== lt)
 | |
|           return false
 | |
|       } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options))
 | |
|         return false
 | |
|     }
 | |
|     if (!c.operator && (lt || gt) && gtltComp !== 0)
 | |
|       return false
 | |
|   }
 | |
| 
 | |
|   // if there was a < or >, and nothing in the dom, then must be false
 | |
|   // UNLESS it was limited by another range in the other direction.
 | |
|   // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0
 | |
|   if (gt && hasDomLT && !lt && gtltComp !== 0)
 | |
|     return false
 | |
| 
 | |
|   if (lt && hasDomGT && !gt && gtltComp !== 0)
 | |
|     return false
 | |
| 
 | |
|   // we needed a prerelease range in a specific tuple, but didn't get one
 | |
|   // then this isn't a subset.  eg >=1.2.3-pre is not a subset of >=1.0.0,
 | |
|   // because it includes prereleases in the 1.2.3 tuple
 | |
|   if (needDomGTPre || needDomLTPre)
 | |
|     return false
 | |
| 
 | |
|   return true
 | |
| }
 | |
| 
 | |
| // >=1.2.3 is lower than >1.2.3
 | |
| const higherGT = (a, b, options) => {
 | |
|   if (!a)
 | |
|     return b
 | |
|   const comp = compare(a.semver, b.semver, options)
 | |
|   return comp > 0 ? a
 | |
|     : comp < 0 ? b
 | |
|     : b.operator === '>' && a.operator === '>=' ? b
 | |
|     : a
 | |
| }
 | |
| 
 | |
| // <=1.2.3 is higher than <1.2.3
 | |
| const lowerLT = (a, b, options) => {
 | |
|   if (!a)
 | |
|     return b
 | |
|   const comp = compare(a.semver, b.semver, options)
 | |
|   return comp < 0 ? a
 | |
|     : comp > 0 ? b
 | |
|     : b.operator === '<' && a.operator === '<=' ? b
 | |
|     : a
 | |
| }
 | |
| 
 | |
| module.exports = subset
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2706:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const Range = __webpack_require__(9828)
 | |
| 
 | |
| // Mostly just for testing and legacy API reasons
 | |
| const toComparators = (range, options) =>
 | |
|   new Range(range, options).set
 | |
|     .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))
 | |
| 
 | |
| module.exports = toComparators
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2098:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| const Range = __webpack_require__(9828)
 | |
| const validRange = (range, options) => {
 | |
|   try {
 | |
|     // Return '*' instead of '' so that truthiness works.
 | |
|     // This will throw if it's invalid anyway
 | |
|     return new Range(range, options).range || '*'
 | |
|   } catch (er) {
 | |
|     return null
 | |
|   }
 | |
| }
 | |
| module.exports = validRange
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6375:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| var util = __webpack_require__(2344);
 | |
| var has = Object.prototype.hasOwnProperty;
 | |
| var hasNativeMap = typeof Map !== "undefined";
 | |
| 
 | |
| /**
 | |
|  * A data structure which is a combination of an array and a set. Adding a new
 | |
|  * member is O(1), testing for membership is O(1), and finding the index of an
 | |
|  * element is O(1). Removing elements from the set is not supported. Only
 | |
|  * strings are supported for membership.
 | |
|  */
 | |
| function ArraySet() {
 | |
|   this._array = [];
 | |
|   this._set = hasNativeMap ? new Map() : Object.create(null);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Static method for creating ArraySet instances from an existing array.
 | |
|  */
 | |
| ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
 | |
|   var set = new ArraySet();
 | |
|   for (var i = 0, len = aArray.length; i < len; i++) {
 | |
|     set.add(aArray[i], aAllowDuplicates);
 | |
|   }
 | |
|   return set;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Return how many unique items are in this ArraySet. If duplicates have been
 | |
|  * added, than those do not count towards the size.
 | |
|  *
 | |
|  * @returns Number
 | |
|  */
 | |
| ArraySet.prototype.size = function ArraySet_size() {
 | |
|   return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Add the given string to this set.
 | |
|  *
 | |
|  * @param String aStr
 | |
|  */
 | |
| ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
 | |
|   var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
 | |
|   var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
 | |
|   var idx = this._array.length;
 | |
|   if (!isDuplicate || aAllowDuplicates) {
 | |
|     this._array.push(aStr);
 | |
|   }
 | |
|   if (!isDuplicate) {
 | |
|     if (hasNativeMap) {
 | |
|       this._set.set(aStr, idx);
 | |
|     } else {
 | |
|       this._set[sStr] = idx;
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Is the given string a member of this set?
 | |
|  *
 | |
|  * @param String aStr
 | |
|  */
 | |
| ArraySet.prototype.has = function ArraySet_has(aStr) {
 | |
|   if (hasNativeMap) {
 | |
|     return this._set.has(aStr);
 | |
|   } else {
 | |
|     var sStr = util.toSetString(aStr);
 | |
|     return has.call(this._set, sStr);
 | |
|   }
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * What is the index of the given string in the array?
 | |
|  *
 | |
|  * @param String aStr
 | |
|  */
 | |
| ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
 | |
|   if (hasNativeMap) {
 | |
|     var idx = this._set.get(aStr);
 | |
|     if (idx >= 0) {
 | |
|         return idx;
 | |
|     }
 | |
|   } else {
 | |
|     var sStr = util.toSetString(aStr);
 | |
|     if (has.call(this._set, sStr)) {
 | |
|       return this._set[sStr];
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   throw new Error('"' + aStr + '" is not in the set.');
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * What is the element at the given index?
 | |
|  *
 | |
|  * @param Number aIdx
 | |
|  */
 | |
| ArraySet.prototype.at = function ArraySet_at(aIdx) {
 | |
|   if (aIdx >= 0 && aIdx < this._array.length) {
 | |
|     return this._array[aIdx];
 | |
|   }
 | |
|   throw new Error('No element indexed by ' + aIdx);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Returns the array representation of this set (which has the proper indices
 | |
|  * indicated by indexOf). Note that this is a copy of the internal array used
 | |
|  * for storing the members so that no one can mess with internal state.
 | |
|  */
 | |
| ArraySet.prototype.toArray = function ArraySet_toArray() {
 | |
|   return this._array.slice();
 | |
| };
 | |
| 
 | |
| exports.I = ArraySet;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5807:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  *
 | |
|  * Based on the Base 64 VLQ implementation in Closure Compiler:
 | |
|  * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
 | |
|  *
 | |
|  * Copyright 2011 The Closure Compiler Authors. All rights reserved.
 | |
|  * Redistribution and use in source and binary forms, with or without
 | |
|  * modification, are permitted provided that the following conditions are
 | |
|  * met:
 | |
|  *
 | |
|  *  * Redistributions of source code must retain the above copyright
 | |
|  *    notice, this list of conditions and the following disclaimer.
 | |
|  *  * Redistributions in binary form must reproduce the above
 | |
|  *    copyright notice, this list of conditions and the following
 | |
|  *    disclaimer in the documentation and/or other materials provided
 | |
|  *    with the distribution.
 | |
|  *  * Neither the name of Google Inc. nor the names of its
 | |
|  *    contributors may be used to endorse or promote products derived
 | |
|  *    from this software without specific prior written permission.
 | |
|  *
 | |
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | |
|  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | |
|  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | |
|  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 | |
|  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 | |
|  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 | |
|  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | |
|  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | |
|  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
|  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | |
|  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|  */
 | |
| 
 | |
| var base64 = __webpack_require__(6156);
 | |
| 
 | |
| // A single base 64 digit can contain 6 bits of data. For the base 64 variable
 | |
| // length quantities we use in the source map spec, the first bit is the sign,
 | |
| // the next four bits are the actual value, and the 6th bit is the
 | |
| // continuation bit. The continuation bit tells us whether there are more
 | |
| // digits in this value following this digit.
 | |
| //
 | |
| //   Continuation
 | |
| //   |    Sign
 | |
| //   |    |
 | |
| //   V    V
 | |
| //   101011
 | |
| 
 | |
| var VLQ_BASE_SHIFT = 5;
 | |
| 
 | |
| // binary: 100000
 | |
| var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
 | |
| 
 | |
| // binary: 011111
 | |
| var VLQ_BASE_MASK = VLQ_BASE - 1;
 | |
| 
 | |
| // binary: 100000
 | |
| var VLQ_CONTINUATION_BIT = VLQ_BASE;
 | |
| 
 | |
| /**
 | |
|  * Converts from a two-complement value to a value where the sign bit is
 | |
|  * placed in the least significant bit.  For example, as decimals:
 | |
|  *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
 | |
|  *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
 | |
|  */
 | |
| function toVLQSigned(aValue) {
 | |
|   return aValue < 0
 | |
|     ? ((-aValue) << 1) + 1
 | |
|     : (aValue << 1) + 0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Converts to a two-complement value from a value where the sign bit is
 | |
|  * placed in the least significant bit.  For example, as decimals:
 | |
|  *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
 | |
|  *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
 | |
|  */
 | |
| function fromVLQSigned(aValue) {
 | |
|   var isNegative = (aValue & 1) === 1;
 | |
|   var shifted = aValue >> 1;
 | |
|   return isNegative
 | |
|     ? -shifted
 | |
|     : shifted;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Returns the base 64 VLQ encoded value.
 | |
|  */
 | |
| exports.encode = function base64VLQ_encode(aValue) {
 | |
|   var encoded = "";
 | |
|   var digit;
 | |
| 
 | |
|   var vlq = toVLQSigned(aValue);
 | |
| 
 | |
|   do {
 | |
|     digit = vlq & VLQ_BASE_MASK;
 | |
|     vlq >>>= VLQ_BASE_SHIFT;
 | |
|     if (vlq > 0) {
 | |
|       // There are still more digits in this value, so we must make sure the
 | |
|       // continuation bit is marked.
 | |
|       digit |= VLQ_CONTINUATION_BIT;
 | |
|     }
 | |
|     encoded += base64.encode(digit);
 | |
|   } while (vlq > 0);
 | |
| 
 | |
|   return encoded;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Decodes the next base 64 VLQ value from the given string and returns the
 | |
|  * value and the rest of the string via the out parameter.
 | |
|  */
 | |
| exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
 | |
|   var strLen = aStr.length;
 | |
|   var result = 0;
 | |
|   var shift = 0;
 | |
|   var continuation, digit;
 | |
| 
 | |
|   do {
 | |
|     if (aIndex >= strLen) {
 | |
|       throw new Error("Expected more digits in base 64 VLQ value.");
 | |
|     }
 | |
| 
 | |
|     digit = base64.decode(aStr.charCodeAt(aIndex++));
 | |
|     if (digit === -1) {
 | |
|       throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
 | |
|     }
 | |
| 
 | |
|     continuation = !!(digit & VLQ_CONTINUATION_BIT);
 | |
|     digit &= VLQ_BASE_MASK;
 | |
|     result = result + (digit << shift);
 | |
|     shift += VLQ_BASE_SHIFT;
 | |
|   } while (continuation);
 | |
| 
 | |
|   aOutParam.value = fromVLQSigned(result);
 | |
|   aOutParam.rest = aIndex;
 | |
| };
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6156:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
 | |
| 
 | |
| /**
 | |
|  * Encode an integer in the range of 0 to 63 to a single base 64 digit.
 | |
|  */
 | |
| exports.encode = function (number) {
 | |
|   if (0 <= number && number < intToCharMap.length) {
 | |
|     return intToCharMap[number];
 | |
|   }
 | |
|   throw new TypeError("Must be between 0 and 63: " + number);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Decode a single base 64 character code digit to an integer. Returns -1 on
 | |
|  * failure.
 | |
|  */
 | |
| exports.decode = function (charCode) {
 | |
|   var bigA = 65;     // 'A'
 | |
|   var bigZ = 90;     // 'Z'
 | |
| 
 | |
|   var littleA = 97;  // 'a'
 | |
|   var littleZ = 122; // 'z'
 | |
| 
 | |
|   var zero = 48;     // '0'
 | |
|   var nine = 57;     // '9'
 | |
| 
 | |
|   var plus = 43;     // '+'
 | |
|   var slash = 47;    // '/'
 | |
| 
 | |
|   var littleOffset = 26;
 | |
|   var numberOffset = 52;
 | |
| 
 | |
|   // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
 | |
|   if (bigA <= charCode && charCode <= bigZ) {
 | |
|     return (charCode - bigA);
 | |
|   }
 | |
| 
 | |
|   // 26 - 51: abcdefghijklmnopqrstuvwxyz
 | |
|   if (littleA <= charCode && charCode <= littleZ) {
 | |
|     return (charCode - littleA + littleOffset);
 | |
|   }
 | |
| 
 | |
|   // 52 - 61: 0123456789
 | |
|   if (zero <= charCode && charCode <= nine) {
 | |
|     return (charCode - zero + numberOffset);
 | |
|   }
 | |
| 
 | |
|   // 62: +
 | |
|   if (charCode == plus) {
 | |
|     return 62;
 | |
|   }
 | |
| 
 | |
|   // 63: /
 | |
|   if (charCode == slash) {
 | |
|     return 63;
 | |
|   }
 | |
| 
 | |
|   // Invalid base64 digit.
 | |
|   return -1;
 | |
| };
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3600:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| exports.GREATEST_LOWER_BOUND = 1;
 | |
| exports.LEAST_UPPER_BOUND = 2;
 | |
| 
 | |
| /**
 | |
|  * Recursive implementation of binary search.
 | |
|  *
 | |
|  * @param aLow Indices here and lower do not contain the needle.
 | |
|  * @param aHigh Indices here and higher do not contain the needle.
 | |
|  * @param aNeedle The element being searched for.
 | |
|  * @param aHaystack The non-empty array being searched.
 | |
|  * @param aCompare Function which takes two elements and returns -1, 0, or 1.
 | |
|  * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 | |
|  *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 | |
|  *     closest element that is smaller than or greater than the one we are
 | |
|  *     searching for, respectively, if the exact element cannot be found.
 | |
|  */
 | |
| function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
 | |
|   // This function terminates when one of the following is true:
 | |
|   //
 | |
|   //   1. We find the exact element we are looking for.
 | |
|   //
 | |
|   //   2. We did not find the exact element, but we can return the index of
 | |
|   //      the next-closest element.
 | |
|   //
 | |
|   //   3. We did not find the exact element, and there is no next-closest
 | |
|   //      element than the one we are searching for, so we return -1.
 | |
|   var mid = Math.floor((aHigh - aLow) / 2) + aLow;
 | |
|   var cmp = aCompare(aNeedle, aHaystack[mid], true);
 | |
|   if (cmp === 0) {
 | |
|     // Found the element we are looking for.
 | |
|     return mid;
 | |
|   }
 | |
|   else if (cmp > 0) {
 | |
|     // Our needle is greater than aHaystack[mid].
 | |
|     if (aHigh - mid > 1) {
 | |
|       // The element is in the upper half.
 | |
|       return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
 | |
|     }
 | |
| 
 | |
|     // The exact needle element was not found in this haystack. Determine if
 | |
|     // we are in termination case (3) or (2) and return the appropriate thing.
 | |
|     if (aBias == exports.LEAST_UPPER_BOUND) {
 | |
|       return aHigh < aHaystack.length ? aHigh : -1;
 | |
|     } else {
 | |
|       return mid;
 | |
|     }
 | |
|   }
 | |
|   else {
 | |
|     // Our needle is less than aHaystack[mid].
 | |
|     if (mid - aLow > 1) {
 | |
|       // The element is in the lower half.
 | |
|       return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
 | |
|     }
 | |
| 
 | |
|     // we are in termination case (3) or (2) and return the appropriate thing.
 | |
|     if (aBias == exports.LEAST_UPPER_BOUND) {
 | |
|       return mid;
 | |
|     } else {
 | |
|       return aLow < 0 ? -1 : aLow;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * This is an implementation of binary search which will always try and return
 | |
|  * the index of the closest element if there is no exact hit. This is because
 | |
|  * mappings between original and generated line/col pairs are single points,
 | |
|  * and there is an implicit region between each of them, so a miss just means
 | |
|  * that you aren't on the very start of a region.
 | |
|  *
 | |
|  * @param aNeedle The element you are looking for.
 | |
|  * @param aHaystack The array that is being searched.
 | |
|  * @param aCompare A function which takes the needle and an element in the
 | |
|  *     array and returns -1, 0, or 1 depending on whether the needle is less
 | |
|  *     than, equal to, or greater than the element, respectively.
 | |
|  * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
 | |
|  *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
 | |
|  *     closest element that is smaller than or greater than the one we are
 | |
|  *     searching for, respectively, if the exact element cannot be found.
 | |
|  *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
 | |
|  */
 | |
| exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
 | |
|   if (aHaystack.length === 0) {
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
 | |
|                               aCompare, aBias || exports.GREATEST_LOWER_BOUND);
 | |
|   if (index < 0) {
 | |
|     return -1;
 | |
|   }
 | |
| 
 | |
|   // We have found either the exact element, or the next-closest element than
 | |
|   // the one we are searching for. However, there may be more than one such
 | |
|   // element. Make sure we always return the smallest of these.
 | |
|   while (index - 1 >= 0) {
 | |
|     if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
 | |
|       break;
 | |
|     }
 | |
|     --index;
 | |
|   }
 | |
| 
 | |
|   return index;
 | |
| };
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6817:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2014 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| var util = __webpack_require__(2344);
 | |
| 
 | |
| /**
 | |
|  * Determine whether mappingB is after mappingA with respect to generated
 | |
|  * position.
 | |
|  */
 | |
| function generatedPositionAfter(mappingA, mappingB) {
 | |
|   // Optimized for most common case
 | |
|   var lineA = mappingA.generatedLine;
 | |
|   var lineB = mappingB.generatedLine;
 | |
|   var columnA = mappingA.generatedColumn;
 | |
|   var columnB = mappingB.generatedColumn;
 | |
|   return lineB > lineA || lineB == lineA && columnB >= columnA ||
 | |
|          util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * A data structure to provide a sorted view of accumulated mappings in a
 | |
|  * performance conscious manner. It trades a neglibable overhead in general
 | |
|  * case for a large speedup in case of mappings being added in order.
 | |
|  */
 | |
| function MappingList() {
 | |
|   this._array = [];
 | |
|   this._sorted = true;
 | |
|   // Serves as infimum
 | |
|   this._last = {generatedLine: -1, generatedColumn: 0};
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Iterate through internal items. This method takes the same arguments that
 | |
|  * `Array.prototype.forEach` takes.
 | |
|  *
 | |
|  * NOTE: The order of the mappings is NOT guaranteed.
 | |
|  */
 | |
| MappingList.prototype.unsortedForEach =
 | |
|   function MappingList_forEach(aCallback, aThisArg) {
 | |
|     this._array.forEach(aCallback, aThisArg);
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Add the given source mapping.
 | |
|  *
 | |
|  * @param Object aMapping
 | |
|  */
 | |
| MappingList.prototype.add = function MappingList_add(aMapping) {
 | |
|   if (generatedPositionAfter(this._last, aMapping)) {
 | |
|     this._last = aMapping;
 | |
|     this._array.push(aMapping);
 | |
|   } else {
 | |
|     this._sorted = false;
 | |
|     this._array.push(aMapping);
 | |
|   }
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Returns the flat, sorted array of mappings. The mappings are sorted by
 | |
|  * generated position.
 | |
|  *
 | |
|  * WARNING: This method returns internal data without copying, for
 | |
|  * performance. The return value must NOT be mutated, and should be treated as
 | |
|  * an immutable borrow. If you want to take ownership, you must make your own
 | |
|  * copy.
 | |
|  */
 | |
| MappingList.prototype.toArray = function MappingList_toArray() {
 | |
|   if (!this._sorted) {
 | |
|     this._array.sort(util.compareByGeneratedPositionsInflated);
 | |
|     this._sorted = true;
 | |
|   }
 | |
|   return this._array;
 | |
| };
 | |
| 
 | |
| exports.H = MappingList;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 3254:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| // It turns out that some (most?) JavaScript engines don't self-host
 | |
| // `Array.prototype.sort`. This makes sense because C++ will likely remain
 | |
| // faster than JS when doing raw CPU-intensive sorting. However, when using a
 | |
| // custom comparator function, calling back and forth between the VM's C++ and
 | |
| // JIT'd JS is rather slow *and* loses JIT type information, resulting in
 | |
| // worse generated code for the comparator function than would be optimal. In
 | |
| // fact, when sorting with a comparator, these costs outweigh the benefits of
 | |
| // sorting in C++. By using our own JS-implemented Quick Sort (below), we get
 | |
| // a ~3500ms mean speed-up in `bench/bench.html`.
 | |
| 
 | |
| /**
 | |
|  * Swap the elements indexed by `x` and `y` in the array `ary`.
 | |
|  *
 | |
|  * @param {Array} ary
 | |
|  *        The array.
 | |
|  * @param {Number} x
 | |
|  *        The index of the first item.
 | |
|  * @param {Number} y
 | |
|  *        The index of the second item.
 | |
|  */
 | |
| function swap(ary, x, y) {
 | |
|   var temp = ary[x];
 | |
|   ary[x] = ary[y];
 | |
|   ary[y] = temp;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Returns a random integer within the range `low .. high` inclusive.
 | |
|  *
 | |
|  * @param {Number} low
 | |
|  *        The lower bound on the range.
 | |
|  * @param {Number} high
 | |
|  *        The upper bound on the range.
 | |
|  */
 | |
| function randomIntInRange(low, high) {
 | |
|   return Math.round(low + (Math.random() * (high - low)));
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * The Quick Sort algorithm.
 | |
|  *
 | |
|  * @param {Array} ary
 | |
|  *        An array to sort.
 | |
|  * @param {function} comparator
 | |
|  *        Function to use to compare two items.
 | |
|  * @param {Number} p
 | |
|  *        Start index of the array
 | |
|  * @param {Number} r
 | |
|  *        End index of the array
 | |
|  */
 | |
| function doQuickSort(ary, comparator, p, r) {
 | |
|   // If our lower bound is less than our upper bound, we (1) partition the
 | |
|   // array into two pieces and (2) recurse on each half. If it is not, this is
 | |
|   // the empty array and our base case.
 | |
| 
 | |
|   if (p < r) {
 | |
|     // (1) Partitioning.
 | |
|     //
 | |
|     // The partitioning chooses a pivot between `p` and `r` and moves all
 | |
|     // elements that are less than or equal to the pivot to the before it, and
 | |
|     // all the elements that are greater than it after it. The effect is that
 | |
|     // once partition is done, the pivot is in the exact place it will be when
 | |
|     // the array is put in sorted order, and it will not need to be moved
 | |
|     // again. This runs in O(n) time.
 | |
| 
 | |
|     // Always choose a random pivot so that an input array which is reverse
 | |
|     // sorted does not cause O(n^2) running time.
 | |
|     var pivotIndex = randomIntInRange(p, r);
 | |
|     var i = p - 1;
 | |
| 
 | |
|     swap(ary, pivotIndex, r);
 | |
|     var pivot = ary[r];
 | |
| 
 | |
|     // Immediately after `j` is incremented in this loop, the following hold
 | |
|     // true:
 | |
|     //
 | |
|     //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
 | |
|     //
 | |
|     //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
 | |
|     for (var j = p; j < r; j++) {
 | |
|       if (comparator(ary[j], pivot) <= 0) {
 | |
|         i += 1;
 | |
|         swap(ary, i, j);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     swap(ary, i + 1, j);
 | |
|     var q = i + 1;
 | |
| 
 | |
|     // (2) Recurse on each half.
 | |
| 
 | |
|     doQuickSort(ary, comparator, p, q - 1);
 | |
|     doQuickSort(ary, comparator, q + 1, r);
 | |
|   }
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Sort the given array in-place with the given comparator function.
 | |
|  *
 | |
|  * @param {Array} ary
 | |
|  *        An array to sort.
 | |
|  * @param {function} comparator
 | |
|  *        Function to use to compare two items.
 | |
|  */
 | |
| exports.U = function (ary, comparator) {
 | |
|   doQuickSort(ary, comparator, 0, ary.length - 1);
 | |
| };
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5155:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| var __webpack_unused_export__;
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| var util = __webpack_require__(2344);
 | |
| var binarySearch = __webpack_require__(3600);
 | |
| var ArraySet = __webpack_require__(6375)/* .ArraySet */ .I;
 | |
| var base64VLQ = __webpack_require__(5807);
 | |
| var quickSort = __webpack_require__(3254)/* .quickSort */ .U;
 | |
| 
 | |
| function SourceMapConsumer(aSourceMap, aSourceMapURL) {
 | |
|   var sourceMap = aSourceMap;
 | |
|   if (typeof aSourceMap === 'string') {
 | |
|     sourceMap = util.parseSourceMapInput(aSourceMap);
 | |
|   }
 | |
| 
 | |
|   return sourceMap.sections != null
 | |
|     ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
 | |
|     : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
 | |
| }
 | |
| 
 | |
| SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
 | |
|   return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * The version of the source mapping spec that we are consuming.
 | |
|  */
 | |
| SourceMapConsumer.prototype._version = 3;
 | |
| 
 | |
| // `__generatedMappings` and `__originalMappings` are arrays that hold the
 | |
| // parsed mapping coordinates from the source map's "mappings" attribute. They
 | |
| // are lazily instantiated, accessed via the `_generatedMappings` and
 | |
| // `_originalMappings` getters respectively, and we only parse the mappings
 | |
| // and create these arrays once queried for a source location. We jump through
 | |
| // these hoops because there can be many thousands of mappings, and parsing
 | |
| // them is expensive, so we only want to do it if we must.
 | |
| //
 | |
| // Each object in the arrays is of the form:
 | |
| //
 | |
| //     {
 | |
| //       generatedLine: The line number in the generated code,
 | |
| //       generatedColumn: The column number in the generated code,
 | |
| //       source: The path to the original source file that generated this
 | |
| //               chunk of code,
 | |
| //       originalLine: The line number in the original source that
 | |
| //                     corresponds to this chunk of generated code,
 | |
| //       originalColumn: The column number in the original source that
 | |
| //                       corresponds to this chunk of generated code,
 | |
| //       name: The name of the original symbol which generated this chunk of
 | |
| //             code.
 | |
| //     }
 | |
| //
 | |
| // All properties except for `generatedLine` and `generatedColumn` can be
 | |
| // `null`.
 | |
| //
 | |
| // `_generatedMappings` is ordered by the generated positions.
 | |
| //
 | |
| // `_originalMappings` is ordered by the original positions.
 | |
| 
 | |
| SourceMapConsumer.prototype.__generatedMappings = null;
 | |
| Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
 | |
|   configurable: true,
 | |
|   enumerable: true,
 | |
|   get: function () {
 | |
|     if (!this.__generatedMappings) {
 | |
|       this._parseMappings(this._mappings, this.sourceRoot);
 | |
|     }
 | |
| 
 | |
|     return this.__generatedMappings;
 | |
|   }
 | |
| });
 | |
| 
 | |
| SourceMapConsumer.prototype.__originalMappings = null;
 | |
| Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
 | |
|   configurable: true,
 | |
|   enumerable: true,
 | |
|   get: function () {
 | |
|     if (!this.__originalMappings) {
 | |
|       this._parseMappings(this._mappings, this.sourceRoot);
 | |
|     }
 | |
| 
 | |
|     return this.__originalMappings;
 | |
|   }
 | |
| });
 | |
| 
 | |
| SourceMapConsumer.prototype._charIsMappingSeparator =
 | |
|   function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
 | |
|     var c = aStr.charAt(index);
 | |
|     return c === ";" || c === ",";
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Parse the mappings in a string in to a data structure which we can easily
 | |
|  * query (the ordered arrays in the `this.__generatedMappings` and
 | |
|  * `this.__originalMappings` properties).
 | |
|  */
 | |
| SourceMapConsumer.prototype._parseMappings =
 | |
|   function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
 | |
|     throw new Error("Subclasses must implement _parseMappings");
 | |
|   };
 | |
| 
 | |
| SourceMapConsumer.GENERATED_ORDER = 1;
 | |
| SourceMapConsumer.ORIGINAL_ORDER = 2;
 | |
| 
 | |
| SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
 | |
| SourceMapConsumer.LEAST_UPPER_BOUND = 2;
 | |
| 
 | |
| /**
 | |
|  * Iterate over each mapping between an original source/line/column and a
 | |
|  * generated line/column in this source map.
 | |
|  *
 | |
|  * @param Function aCallback
 | |
|  *        The function that is called with each mapping.
 | |
|  * @param Object aContext
 | |
|  *        Optional. If specified, this object will be the value of `this` every
 | |
|  *        time that `aCallback` is called.
 | |
|  * @param aOrder
 | |
|  *        Either `SourceMapConsumer.GENERATED_ORDER` or
 | |
|  *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
 | |
|  *        iterate over the mappings sorted by the generated file's line/column
 | |
|  *        order or the original's source/line/column order, respectively. Defaults to
 | |
|  *        `SourceMapConsumer.GENERATED_ORDER`.
 | |
|  */
 | |
| SourceMapConsumer.prototype.eachMapping =
 | |
|   function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
 | |
|     var context = aContext || null;
 | |
|     var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
 | |
| 
 | |
|     var mappings;
 | |
|     switch (order) {
 | |
|     case SourceMapConsumer.GENERATED_ORDER:
 | |
|       mappings = this._generatedMappings;
 | |
|       break;
 | |
|     case SourceMapConsumer.ORIGINAL_ORDER:
 | |
|       mappings = this._originalMappings;
 | |
|       break;
 | |
|     default:
 | |
|       throw new Error("Unknown order of iteration.");
 | |
|     }
 | |
| 
 | |
|     var sourceRoot = this.sourceRoot;
 | |
|     mappings.map(function (mapping) {
 | |
|       var source = mapping.source === null ? null : this._sources.at(mapping.source);
 | |
|       source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
 | |
|       return {
 | |
|         source: source,
 | |
|         generatedLine: mapping.generatedLine,
 | |
|         generatedColumn: mapping.generatedColumn,
 | |
|         originalLine: mapping.originalLine,
 | |
|         originalColumn: mapping.originalColumn,
 | |
|         name: mapping.name === null ? null : this._names.at(mapping.name)
 | |
|       };
 | |
|     }, this).forEach(aCallback, context);
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Returns all generated line and column information for the original source,
 | |
|  * line, and column provided. If no column is provided, returns all mappings
 | |
|  * corresponding to a either the line we are searching for or the next
 | |
|  * closest line that has any mappings. Otherwise, returns all mappings
 | |
|  * corresponding to the given line and either the column we are searching for
 | |
|  * or the next closest column that has any offsets.
 | |
|  *
 | |
|  * The only argument is an object with the following properties:
 | |
|  *
 | |
|  *   - source: The filename of the original source.
 | |
|  *   - line: The line number in the original source.  The line number is 1-based.
 | |
|  *   - column: Optional. the column number in the original source.
 | |
|  *    The column number is 0-based.
 | |
|  *
 | |
|  * and an array of objects is returned, each with the following properties:
 | |
|  *
 | |
|  *   - line: The line number in the generated source, or null.  The
 | |
|  *    line number is 1-based.
 | |
|  *   - column: The column number in the generated source, or null.
 | |
|  *    The column number is 0-based.
 | |
|  */
 | |
| SourceMapConsumer.prototype.allGeneratedPositionsFor =
 | |
|   function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
 | |
|     var line = util.getArg(aArgs, 'line');
 | |
| 
 | |
|     // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
 | |
|     // returns the index of the closest mapping less than the needle. By
 | |
|     // setting needle.originalColumn to 0, we thus find the last mapping for
 | |
|     // the given line, provided such a mapping exists.
 | |
|     var needle = {
 | |
|       source: util.getArg(aArgs, 'source'),
 | |
|       originalLine: line,
 | |
|       originalColumn: util.getArg(aArgs, 'column', 0)
 | |
|     };
 | |
| 
 | |
|     needle.source = this._findSourceIndex(needle.source);
 | |
|     if (needle.source < 0) {
 | |
|       return [];
 | |
|     }
 | |
| 
 | |
|     var mappings = [];
 | |
| 
 | |
|     var index = this._findMapping(needle,
 | |
|                                   this._originalMappings,
 | |
|                                   "originalLine",
 | |
|                                   "originalColumn",
 | |
|                                   util.compareByOriginalPositions,
 | |
|                                   binarySearch.LEAST_UPPER_BOUND);
 | |
|     if (index >= 0) {
 | |
|       var mapping = this._originalMappings[index];
 | |
| 
 | |
|       if (aArgs.column === undefined) {
 | |
|         var originalLine = mapping.originalLine;
 | |
| 
 | |
|         // Iterate until either we run out of mappings, or we run into
 | |
|         // a mapping for a different line than the one we found. Since
 | |
|         // mappings are sorted, this is guaranteed to find all mappings for
 | |
|         // the line we found.
 | |
|         while (mapping && mapping.originalLine === originalLine) {
 | |
|           mappings.push({
 | |
|             line: util.getArg(mapping, 'generatedLine', null),
 | |
|             column: util.getArg(mapping, 'generatedColumn', null),
 | |
|             lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
 | |
|           });
 | |
| 
 | |
|           mapping = this._originalMappings[++index];
 | |
|         }
 | |
|       } else {
 | |
|         var originalColumn = mapping.originalColumn;
 | |
| 
 | |
|         // Iterate until either we run out of mappings, or we run into
 | |
|         // a mapping for a different line than the one we were searching for.
 | |
|         // Since mappings are sorted, this is guaranteed to find all mappings for
 | |
|         // the line we are searching for.
 | |
|         while (mapping &&
 | |
|                mapping.originalLine === line &&
 | |
|                mapping.originalColumn == originalColumn) {
 | |
|           mappings.push({
 | |
|             line: util.getArg(mapping, 'generatedLine', null),
 | |
|             column: util.getArg(mapping, 'generatedColumn', null),
 | |
|             lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
 | |
|           });
 | |
| 
 | |
|           mapping = this._originalMappings[++index];
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return mappings;
 | |
|   };
 | |
| 
 | |
| exports.SourceMapConsumer = SourceMapConsumer;
 | |
| 
 | |
| /**
 | |
|  * A BasicSourceMapConsumer instance represents a parsed source map which we can
 | |
|  * query for information about the original file positions by giving it a file
 | |
|  * position in the generated source.
 | |
|  *
 | |
|  * The first parameter is the raw source map (either as a JSON string, or
 | |
|  * already parsed to an object). According to the spec, source maps have the
 | |
|  * following attributes:
 | |
|  *
 | |
|  *   - version: Which version of the source map spec this map is following.
 | |
|  *   - sources: An array of URLs to the original source files.
 | |
|  *   - names: An array of identifiers which can be referrenced by individual mappings.
 | |
|  *   - sourceRoot: Optional. The URL root from which all sources are relative.
 | |
|  *   - sourcesContent: Optional. An array of contents of the original source files.
 | |
|  *   - mappings: A string of base64 VLQs which contain the actual mappings.
 | |
|  *   - file: Optional. The generated file this source map is associated with.
 | |
|  *
 | |
|  * Here is an example source map, taken from the source map spec[0]:
 | |
|  *
 | |
|  *     {
 | |
|  *       version : 3,
 | |
|  *       file: "out.js",
 | |
|  *       sourceRoot : "",
 | |
|  *       sources: ["foo.js", "bar.js"],
 | |
|  *       names: ["src", "maps", "are", "fun"],
 | |
|  *       mappings: "AA,AB;;ABCDE;"
 | |
|  *     }
 | |
|  *
 | |
|  * The second parameter, if given, is a string whose value is the URL
 | |
|  * at which the source map was found.  This URL is used to compute the
 | |
|  * sources array.
 | |
|  *
 | |
|  * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
 | |
|  */
 | |
| function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
 | |
|   var sourceMap = aSourceMap;
 | |
|   if (typeof aSourceMap === 'string') {
 | |
|     sourceMap = util.parseSourceMapInput(aSourceMap);
 | |
|   }
 | |
| 
 | |
|   var version = util.getArg(sourceMap, 'version');
 | |
|   var sources = util.getArg(sourceMap, 'sources');
 | |
|   // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
 | |
|   // requires the array) to play nice here.
 | |
|   var names = util.getArg(sourceMap, 'names', []);
 | |
|   var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
 | |
|   var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
 | |
|   var mappings = util.getArg(sourceMap, 'mappings');
 | |
|   var file = util.getArg(sourceMap, 'file', null);
 | |
| 
 | |
|   // Once again, Sass deviates from the spec and supplies the version as a
 | |
|   // string rather than a number, so we use loose equality checking here.
 | |
|   if (version != this._version) {
 | |
|     throw new Error('Unsupported version: ' + version);
 | |
|   }
 | |
| 
 | |
|   if (sourceRoot) {
 | |
|     sourceRoot = util.normalize(sourceRoot);
 | |
|   }
 | |
| 
 | |
|   sources = sources
 | |
|     .map(String)
 | |
|     // Some source maps produce relative source paths like "./foo.js" instead of
 | |
|     // "foo.js".  Normalize these first so that future comparisons will succeed.
 | |
|     // See bugzil.la/1090768.
 | |
|     .map(util.normalize)
 | |
|     // Always ensure that absolute sources are internally stored relative to
 | |
|     // the source root, if the source root is absolute. Not doing this would
 | |
|     // be particularly problematic when the source root is a prefix of the
 | |
|     // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
 | |
|     .map(function (source) {
 | |
|       return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
 | |
|         ? util.relative(sourceRoot, source)
 | |
|         : source;
 | |
|     });
 | |
| 
 | |
|   // Pass `true` below to allow duplicate names and sources. While source maps
 | |
|   // are intended to be compressed and deduplicated, the TypeScript compiler
 | |
|   // sometimes generates source maps with duplicates in them. See Github issue
 | |
|   // #72 and bugzil.la/889492.
 | |
|   this._names = ArraySet.fromArray(names.map(String), true);
 | |
|   this._sources = ArraySet.fromArray(sources, true);
 | |
| 
 | |
|   this._absoluteSources = this._sources.toArray().map(function (s) {
 | |
|     return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
 | |
|   });
 | |
| 
 | |
|   this.sourceRoot = sourceRoot;
 | |
|   this.sourcesContent = sourcesContent;
 | |
|   this._mappings = mappings;
 | |
|   this._sourceMapURL = aSourceMapURL;
 | |
|   this.file = file;
 | |
| }
 | |
| 
 | |
| BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
 | |
| BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
 | |
| 
 | |
| /**
 | |
|  * Utility function to find the index of a source.  Returns -1 if not
 | |
|  * found.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
 | |
|   var relativeSource = aSource;
 | |
|   if (this.sourceRoot != null) {
 | |
|     relativeSource = util.relative(this.sourceRoot, relativeSource);
 | |
|   }
 | |
| 
 | |
|   if (this._sources.has(relativeSource)) {
 | |
|     return this._sources.indexOf(relativeSource);
 | |
|   }
 | |
| 
 | |
|   // Maybe aSource is an absolute URL as returned by |sources|.  In
 | |
|   // this case we can't simply undo the transform.
 | |
|   var i;
 | |
|   for (i = 0; i < this._absoluteSources.length; ++i) {
 | |
|     if (this._absoluteSources[i] == aSource) {
 | |
|       return i;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return -1;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Create a BasicSourceMapConsumer from a SourceMapGenerator.
 | |
|  *
 | |
|  * @param SourceMapGenerator aSourceMap
 | |
|  *        The source map that will be consumed.
 | |
|  * @param String aSourceMapURL
 | |
|  *        The URL at which the source map can be found (optional)
 | |
|  * @returns BasicSourceMapConsumer
 | |
|  */
 | |
| BasicSourceMapConsumer.fromSourceMap =
 | |
|   function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
 | |
|     var smc = Object.create(BasicSourceMapConsumer.prototype);
 | |
| 
 | |
|     var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
 | |
|     var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
 | |
|     smc.sourceRoot = aSourceMap._sourceRoot;
 | |
|     smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
 | |
|                                                             smc.sourceRoot);
 | |
|     smc.file = aSourceMap._file;
 | |
|     smc._sourceMapURL = aSourceMapURL;
 | |
|     smc._absoluteSources = smc._sources.toArray().map(function (s) {
 | |
|       return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
 | |
|     });
 | |
| 
 | |
|     // Because we are modifying the entries (by converting string sources and
 | |
|     // names to indices into the sources and names ArraySets), we have to make
 | |
|     // a copy of the entry or else bad things happen. Shared mutable state
 | |
|     // strikes again! See github issue #191.
 | |
| 
 | |
|     var generatedMappings = aSourceMap._mappings.toArray().slice();
 | |
|     var destGeneratedMappings = smc.__generatedMappings = [];
 | |
|     var destOriginalMappings = smc.__originalMappings = [];
 | |
| 
 | |
|     for (var i = 0, length = generatedMappings.length; i < length; i++) {
 | |
|       var srcMapping = generatedMappings[i];
 | |
|       var destMapping = new Mapping;
 | |
|       destMapping.generatedLine = srcMapping.generatedLine;
 | |
|       destMapping.generatedColumn = srcMapping.generatedColumn;
 | |
| 
 | |
|       if (srcMapping.source) {
 | |
|         destMapping.source = sources.indexOf(srcMapping.source);
 | |
|         destMapping.originalLine = srcMapping.originalLine;
 | |
|         destMapping.originalColumn = srcMapping.originalColumn;
 | |
| 
 | |
|         if (srcMapping.name) {
 | |
|           destMapping.name = names.indexOf(srcMapping.name);
 | |
|         }
 | |
| 
 | |
|         destOriginalMappings.push(destMapping);
 | |
|       }
 | |
| 
 | |
|       destGeneratedMappings.push(destMapping);
 | |
|     }
 | |
| 
 | |
|     quickSort(smc.__originalMappings, util.compareByOriginalPositions);
 | |
| 
 | |
|     return smc;
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * The version of the source mapping spec that we are consuming.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype._version = 3;
 | |
| 
 | |
| /**
 | |
|  * The list of original sources.
 | |
|  */
 | |
| Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
 | |
|   get: function () {
 | |
|     return this._absoluteSources.slice();
 | |
|   }
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Provide the JIT with a nice shape / hidden class.
 | |
|  */
 | |
| function Mapping() {
 | |
|   this.generatedLine = 0;
 | |
|   this.generatedColumn = 0;
 | |
|   this.source = null;
 | |
|   this.originalLine = null;
 | |
|   this.originalColumn = null;
 | |
|   this.name = null;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Parse the mappings in a string in to a data structure which we can easily
 | |
|  * query (the ordered arrays in the `this.__generatedMappings` and
 | |
|  * `this.__originalMappings` properties).
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype._parseMappings =
 | |
|   function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
 | |
|     var generatedLine = 1;
 | |
|     var previousGeneratedColumn = 0;
 | |
|     var previousOriginalLine = 0;
 | |
|     var previousOriginalColumn = 0;
 | |
|     var previousSource = 0;
 | |
|     var previousName = 0;
 | |
|     var length = aStr.length;
 | |
|     var index = 0;
 | |
|     var cachedSegments = {};
 | |
|     var temp = {};
 | |
|     var originalMappings = [];
 | |
|     var generatedMappings = [];
 | |
|     var mapping, str, segment, end, value;
 | |
| 
 | |
|     while (index < length) {
 | |
|       if (aStr.charAt(index) === ';') {
 | |
|         generatedLine++;
 | |
|         index++;
 | |
|         previousGeneratedColumn = 0;
 | |
|       }
 | |
|       else if (aStr.charAt(index) === ',') {
 | |
|         index++;
 | |
|       }
 | |
|       else {
 | |
|         mapping = new Mapping();
 | |
|         mapping.generatedLine = generatedLine;
 | |
| 
 | |
|         // Because each offset is encoded relative to the previous one,
 | |
|         // many segments often have the same encoding. We can exploit this
 | |
|         // fact by caching the parsed variable length fields of each segment,
 | |
|         // allowing us to avoid a second parse if we encounter the same
 | |
|         // segment again.
 | |
|         for (end = index; end < length; end++) {
 | |
|           if (this._charIsMappingSeparator(aStr, end)) {
 | |
|             break;
 | |
|           }
 | |
|         }
 | |
|         str = aStr.slice(index, end);
 | |
| 
 | |
|         segment = cachedSegments[str];
 | |
|         if (segment) {
 | |
|           index += str.length;
 | |
|         } else {
 | |
|           segment = [];
 | |
|           while (index < end) {
 | |
|             base64VLQ.decode(aStr, index, temp);
 | |
|             value = temp.value;
 | |
|             index = temp.rest;
 | |
|             segment.push(value);
 | |
|           }
 | |
| 
 | |
|           if (segment.length === 2) {
 | |
|             throw new Error('Found a source, but no line and column');
 | |
|           }
 | |
| 
 | |
|           if (segment.length === 3) {
 | |
|             throw new Error('Found a source and line, but no column');
 | |
|           }
 | |
| 
 | |
|           cachedSegments[str] = segment;
 | |
|         }
 | |
| 
 | |
|         // Generated column.
 | |
|         mapping.generatedColumn = previousGeneratedColumn + segment[0];
 | |
|         previousGeneratedColumn = mapping.generatedColumn;
 | |
| 
 | |
|         if (segment.length > 1) {
 | |
|           // Original source.
 | |
|           mapping.source = previousSource + segment[1];
 | |
|           previousSource += segment[1];
 | |
| 
 | |
|           // Original line.
 | |
|           mapping.originalLine = previousOriginalLine + segment[2];
 | |
|           previousOriginalLine = mapping.originalLine;
 | |
|           // Lines are stored 0-based
 | |
|           mapping.originalLine += 1;
 | |
| 
 | |
|           // Original column.
 | |
|           mapping.originalColumn = previousOriginalColumn + segment[3];
 | |
|           previousOriginalColumn = mapping.originalColumn;
 | |
| 
 | |
|           if (segment.length > 4) {
 | |
|             // Original name.
 | |
|             mapping.name = previousName + segment[4];
 | |
|             previousName += segment[4];
 | |
|           }
 | |
|         }
 | |
| 
 | |
|         generatedMappings.push(mapping);
 | |
|         if (typeof mapping.originalLine === 'number') {
 | |
|           originalMappings.push(mapping);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
 | |
|     this.__generatedMappings = generatedMappings;
 | |
| 
 | |
|     quickSort(originalMappings, util.compareByOriginalPositions);
 | |
|     this.__originalMappings = originalMappings;
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Find the mapping that best matches the hypothetical "needle" mapping that
 | |
|  * we are searching for in the given "haystack" of mappings.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype._findMapping =
 | |
|   function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
 | |
|                                          aColumnName, aComparator, aBias) {
 | |
|     // To return the position we are searching for, we must first find the
 | |
|     // mapping for the given position and then return the opposite position it
 | |
|     // points to. Because the mappings are sorted, we can use binary search to
 | |
|     // find the best mapping.
 | |
| 
 | |
|     if (aNeedle[aLineName] <= 0) {
 | |
|       throw new TypeError('Line must be greater than or equal to 1, got '
 | |
|                           + aNeedle[aLineName]);
 | |
|     }
 | |
|     if (aNeedle[aColumnName] < 0) {
 | |
|       throw new TypeError('Column must be greater than or equal to 0, got '
 | |
|                           + aNeedle[aColumnName]);
 | |
|     }
 | |
| 
 | |
|     return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Compute the last column for each generated mapping. The last column is
 | |
|  * inclusive.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype.computeColumnSpans =
 | |
|   function SourceMapConsumer_computeColumnSpans() {
 | |
|     for (var index = 0; index < this._generatedMappings.length; ++index) {
 | |
|       var mapping = this._generatedMappings[index];
 | |
| 
 | |
|       // Mappings do not contain a field for the last generated columnt. We
 | |
|       // can come up with an optimistic estimate, however, by assuming that
 | |
|       // mappings are contiguous (i.e. given two consecutive mappings, the
 | |
|       // first mapping ends where the second one starts).
 | |
|       if (index + 1 < this._generatedMappings.length) {
 | |
|         var nextMapping = this._generatedMappings[index + 1];
 | |
| 
 | |
|         if (mapping.generatedLine === nextMapping.generatedLine) {
 | |
|           mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
 | |
|           continue;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       // The last mapping for each line spans the entire line.
 | |
|       mapping.lastGeneratedColumn = Infinity;
 | |
|     }
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Returns the original source, line, and column information for the generated
 | |
|  * source's line and column positions provided. The only argument is an object
 | |
|  * with the following properties:
 | |
|  *
 | |
|  *   - line: The line number in the generated source.  The line number
 | |
|  *     is 1-based.
 | |
|  *   - column: The column number in the generated source.  The column
 | |
|  *     number is 0-based.
 | |
|  *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 | |
|  *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 | |
|  *     closest element that is smaller than or greater than the one we are
 | |
|  *     searching for, respectively, if the exact element cannot be found.
 | |
|  *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 | |
|  *
 | |
|  * and an object is returned with the following properties:
 | |
|  *
 | |
|  *   - source: The original source file, or null.
 | |
|  *   - line: The line number in the original source, or null.  The
 | |
|  *     line number is 1-based.
 | |
|  *   - column: The column number in the original source, or null.  The
 | |
|  *     column number is 0-based.
 | |
|  *   - name: The original identifier, or null.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype.originalPositionFor =
 | |
|   function SourceMapConsumer_originalPositionFor(aArgs) {
 | |
|     var needle = {
 | |
|       generatedLine: util.getArg(aArgs, 'line'),
 | |
|       generatedColumn: util.getArg(aArgs, 'column')
 | |
|     };
 | |
| 
 | |
|     var index = this._findMapping(
 | |
|       needle,
 | |
|       this._generatedMappings,
 | |
|       "generatedLine",
 | |
|       "generatedColumn",
 | |
|       util.compareByGeneratedPositionsDeflated,
 | |
|       util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
 | |
|     );
 | |
| 
 | |
|     if (index >= 0) {
 | |
|       var mapping = this._generatedMappings[index];
 | |
| 
 | |
|       if (mapping.generatedLine === needle.generatedLine) {
 | |
|         var source = util.getArg(mapping, 'source', null);
 | |
|         if (source !== null) {
 | |
|           source = this._sources.at(source);
 | |
|           source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
 | |
|         }
 | |
|         var name = util.getArg(mapping, 'name', null);
 | |
|         if (name !== null) {
 | |
|           name = this._names.at(name);
 | |
|         }
 | |
|         return {
 | |
|           source: source,
 | |
|           line: util.getArg(mapping, 'originalLine', null),
 | |
|           column: util.getArg(mapping, 'originalColumn', null),
 | |
|           name: name
 | |
|         };
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return {
 | |
|       source: null,
 | |
|       line: null,
 | |
|       column: null,
 | |
|       name: null
 | |
|     };
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Return true if we have the source content for every source in the source
 | |
|  * map, false otherwise.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
 | |
|   function BasicSourceMapConsumer_hasContentsOfAllSources() {
 | |
|     if (!this.sourcesContent) {
 | |
|       return false;
 | |
|     }
 | |
|     return this.sourcesContent.length >= this._sources.size() &&
 | |
|       !this.sourcesContent.some(function (sc) { return sc == null; });
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Returns the original source content. The only argument is the url of the
 | |
|  * original source file. Returns null if no original source content is
 | |
|  * available.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype.sourceContentFor =
 | |
|   function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
 | |
|     if (!this.sourcesContent) {
 | |
|       return null;
 | |
|     }
 | |
| 
 | |
|     var index = this._findSourceIndex(aSource);
 | |
|     if (index >= 0) {
 | |
|       return this.sourcesContent[index];
 | |
|     }
 | |
| 
 | |
|     var relativeSource = aSource;
 | |
|     if (this.sourceRoot != null) {
 | |
|       relativeSource = util.relative(this.sourceRoot, relativeSource);
 | |
|     }
 | |
| 
 | |
|     var url;
 | |
|     if (this.sourceRoot != null
 | |
|         && (url = util.urlParse(this.sourceRoot))) {
 | |
|       // XXX: file:// URIs and absolute paths lead to unexpected behavior for
 | |
|       // many users. We can help them out when they expect file:// URIs to
 | |
|       // behave like it would if they were running a local HTTP server. See
 | |
|       // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
 | |
|       var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
 | |
|       if (url.scheme == "file"
 | |
|           && this._sources.has(fileUriAbsPath)) {
 | |
|         return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
 | |
|       }
 | |
| 
 | |
|       if ((!url.path || url.path == "/")
 | |
|           && this._sources.has("/" + relativeSource)) {
 | |
|         return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     // This function is used recursively from
 | |
|     // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
 | |
|     // don't want to throw if we can't find the source - we just want to
 | |
|     // return null, so we provide a flag to exit gracefully.
 | |
|     if (nullOnMissing) {
 | |
|       return null;
 | |
|     }
 | |
|     else {
 | |
|       throw new Error('"' + relativeSource + '" is not in the SourceMap.');
 | |
|     }
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Returns the generated line and column information for the original source,
 | |
|  * line, and column positions provided. The only argument is an object with
 | |
|  * the following properties:
 | |
|  *
 | |
|  *   - source: The filename of the original source.
 | |
|  *   - line: The line number in the original source.  The line number
 | |
|  *     is 1-based.
 | |
|  *   - column: The column number in the original source.  The column
 | |
|  *     number is 0-based.
 | |
|  *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
 | |
|  *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
 | |
|  *     closest element that is smaller than or greater than the one we are
 | |
|  *     searching for, respectively, if the exact element cannot be found.
 | |
|  *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
 | |
|  *
 | |
|  * and an object is returned with the following properties:
 | |
|  *
 | |
|  *   - line: The line number in the generated source, or null.  The
 | |
|  *     line number is 1-based.
 | |
|  *   - column: The column number in the generated source, or null.
 | |
|  *     The column number is 0-based.
 | |
|  */
 | |
| BasicSourceMapConsumer.prototype.generatedPositionFor =
 | |
|   function SourceMapConsumer_generatedPositionFor(aArgs) {
 | |
|     var source = util.getArg(aArgs, 'source');
 | |
|     source = this._findSourceIndex(source);
 | |
|     if (source < 0) {
 | |
|       return {
 | |
|         line: null,
 | |
|         column: null,
 | |
|         lastColumn: null
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     var needle = {
 | |
|       source: source,
 | |
|       originalLine: util.getArg(aArgs, 'line'),
 | |
|       originalColumn: util.getArg(aArgs, 'column')
 | |
|     };
 | |
| 
 | |
|     var index = this._findMapping(
 | |
|       needle,
 | |
|       this._originalMappings,
 | |
|       "originalLine",
 | |
|       "originalColumn",
 | |
|       util.compareByOriginalPositions,
 | |
|       util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
 | |
|     );
 | |
| 
 | |
|     if (index >= 0) {
 | |
|       var mapping = this._originalMappings[index];
 | |
| 
 | |
|       if (mapping.source === needle.source) {
 | |
|         return {
 | |
|           line: util.getArg(mapping, 'generatedLine', null),
 | |
|           column: util.getArg(mapping, 'generatedColumn', null),
 | |
|           lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
 | |
|         };
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return {
 | |
|       line: null,
 | |
|       column: null,
 | |
|       lastColumn: null
 | |
|     };
 | |
|   };
 | |
| 
 | |
| __webpack_unused_export__ = BasicSourceMapConsumer;
 | |
| 
 | |
| /**
 | |
|  * An IndexedSourceMapConsumer instance represents a parsed source map which
 | |
|  * we can query for information. It differs from BasicSourceMapConsumer in
 | |
|  * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
 | |
|  * input.
 | |
|  *
 | |
|  * The first parameter is a raw source map (either as a JSON string, or already
 | |
|  * parsed to an object). According to the spec for indexed source maps, they
 | |
|  * have the following attributes:
 | |
|  *
 | |
|  *   - version: Which version of the source map spec this map is following.
 | |
|  *   - file: Optional. The generated file this source map is associated with.
 | |
|  *   - sections: A list of section definitions.
 | |
|  *
 | |
|  * Each value under the "sections" field has two fields:
 | |
|  *   - offset: The offset into the original specified at which this section
 | |
|  *       begins to apply, defined as an object with a "line" and "column"
 | |
|  *       field.
 | |
|  *   - map: A source map definition. This source map could also be indexed,
 | |
|  *       but doesn't have to be.
 | |
|  *
 | |
|  * Instead of the "map" field, it's also possible to have a "url" field
 | |
|  * specifying a URL to retrieve a source map from, but that's currently
 | |
|  * unsupported.
 | |
|  *
 | |
|  * Here's an example source map, taken from the source map spec[0], but
 | |
|  * modified to omit a section which uses the "url" field.
 | |
|  *
 | |
|  *  {
 | |
|  *    version : 3,
 | |
|  *    file: "app.js",
 | |
|  *    sections: [{
 | |
|  *      offset: {line:100, column:10},
 | |
|  *      map: {
 | |
|  *        version : 3,
 | |
|  *        file: "section.js",
 | |
|  *        sources: ["foo.js", "bar.js"],
 | |
|  *        names: ["src", "maps", "are", "fun"],
 | |
|  *        mappings: "AAAA,E;;ABCDE;"
 | |
|  *      }
 | |
|  *    }],
 | |
|  *  }
 | |
|  *
 | |
|  * The second parameter, if given, is a string whose value is the URL
 | |
|  * at which the source map was found.  This URL is used to compute the
 | |
|  * sources array.
 | |
|  *
 | |
|  * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
 | |
|  */
 | |
| function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
 | |
|   var sourceMap = aSourceMap;
 | |
|   if (typeof aSourceMap === 'string') {
 | |
|     sourceMap = util.parseSourceMapInput(aSourceMap);
 | |
|   }
 | |
| 
 | |
|   var version = util.getArg(sourceMap, 'version');
 | |
|   var sections = util.getArg(sourceMap, 'sections');
 | |
| 
 | |
|   if (version != this._version) {
 | |
|     throw new Error('Unsupported version: ' + version);
 | |
|   }
 | |
| 
 | |
|   this._sources = new ArraySet();
 | |
|   this._names = new ArraySet();
 | |
| 
 | |
|   var lastOffset = {
 | |
|     line: -1,
 | |
|     column: 0
 | |
|   };
 | |
|   this._sections = sections.map(function (s) {
 | |
|     if (s.url) {
 | |
|       // The url field will require support for asynchronicity.
 | |
|       // See https://github.com/mozilla/source-map/issues/16
 | |
|       throw new Error('Support for url field in sections not implemented.');
 | |
|     }
 | |
|     var offset = util.getArg(s, 'offset');
 | |
|     var offsetLine = util.getArg(offset, 'line');
 | |
|     var offsetColumn = util.getArg(offset, 'column');
 | |
| 
 | |
|     if (offsetLine < lastOffset.line ||
 | |
|         (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
 | |
|       throw new Error('Section offsets must be ordered and non-overlapping.');
 | |
|     }
 | |
|     lastOffset = offset;
 | |
| 
 | |
|     return {
 | |
|       generatedOffset: {
 | |
|         // The offset fields are 0-based, but we use 1-based indices when
 | |
|         // encoding/decoding from VLQ.
 | |
|         generatedLine: offsetLine + 1,
 | |
|         generatedColumn: offsetColumn + 1
 | |
|       },
 | |
|       consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
 | |
|     }
 | |
|   });
 | |
| }
 | |
| 
 | |
| IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
 | |
| IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
 | |
| 
 | |
| /**
 | |
|  * The version of the source mapping spec that we are consuming.
 | |
|  */
 | |
| IndexedSourceMapConsumer.prototype._version = 3;
 | |
| 
 | |
| /**
 | |
|  * The list of original sources.
 | |
|  */
 | |
| Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
 | |
|   get: function () {
 | |
|     var sources = [];
 | |
|     for (var i = 0; i < this._sections.length; i++) {
 | |
|       for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
 | |
|         sources.push(this._sections[i].consumer.sources[j]);
 | |
|       }
 | |
|     }
 | |
|     return sources;
 | |
|   }
 | |
| });
 | |
| 
 | |
| /**
 | |
|  * Returns the original source, line, and column information for the generated
 | |
|  * source's line and column positions provided. The only argument is an object
 | |
|  * with the following properties:
 | |
|  *
 | |
|  *   - line: The line number in the generated source.  The line number
 | |
|  *     is 1-based.
 | |
|  *   - column: The column number in the generated source.  The column
 | |
|  *     number is 0-based.
 | |
|  *
 | |
|  * and an object is returned with the following properties:
 | |
|  *
 | |
|  *   - source: The original source file, or null.
 | |
|  *   - line: The line number in the original source, or null.  The
 | |
|  *     line number is 1-based.
 | |
|  *   - column: The column number in the original source, or null.  The
 | |
|  *     column number is 0-based.
 | |
|  *   - name: The original identifier, or null.
 | |
|  */
 | |
| IndexedSourceMapConsumer.prototype.originalPositionFor =
 | |
|   function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
 | |
|     var needle = {
 | |
|       generatedLine: util.getArg(aArgs, 'line'),
 | |
|       generatedColumn: util.getArg(aArgs, 'column')
 | |
|     };
 | |
| 
 | |
|     // Find the section containing the generated position we're trying to map
 | |
|     // to an original position.
 | |
|     var sectionIndex = binarySearch.search(needle, this._sections,
 | |
|       function(needle, section) {
 | |
|         var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
 | |
|         if (cmp) {
 | |
|           return cmp;
 | |
|         }
 | |
| 
 | |
|         return (needle.generatedColumn -
 | |
|                 section.generatedOffset.generatedColumn);
 | |
|       });
 | |
|     var section = this._sections[sectionIndex];
 | |
| 
 | |
|     if (!section) {
 | |
|       return {
 | |
|         source: null,
 | |
|         line: null,
 | |
|         column: null,
 | |
|         name: null
 | |
|       };
 | |
|     }
 | |
| 
 | |
|     return section.consumer.originalPositionFor({
 | |
|       line: needle.generatedLine -
 | |
|         (section.generatedOffset.generatedLine - 1),
 | |
|       column: needle.generatedColumn -
 | |
|         (section.generatedOffset.generatedLine === needle.generatedLine
 | |
|          ? section.generatedOffset.generatedColumn - 1
 | |
|          : 0),
 | |
|       bias: aArgs.bias
 | |
|     });
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Return true if we have the source content for every source in the source
 | |
|  * map, false otherwise.
 | |
|  */
 | |
| IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
 | |
|   function IndexedSourceMapConsumer_hasContentsOfAllSources() {
 | |
|     return this._sections.every(function (s) {
 | |
|       return s.consumer.hasContentsOfAllSources();
 | |
|     });
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Returns the original source content. The only argument is the url of the
 | |
|  * original source file. Returns null if no original source content is
 | |
|  * available.
 | |
|  */
 | |
| IndexedSourceMapConsumer.prototype.sourceContentFor =
 | |
|   function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
 | |
|     for (var i = 0; i < this._sections.length; i++) {
 | |
|       var section = this._sections[i];
 | |
| 
 | |
|       var content = section.consumer.sourceContentFor(aSource, true);
 | |
|       if (content) {
 | |
|         return content;
 | |
|       }
 | |
|     }
 | |
|     if (nullOnMissing) {
 | |
|       return null;
 | |
|     }
 | |
|     else {
 | |
|       throw new Error('"' + aSource + '" is not in the SourceMap.');
 | |
|     }
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Returns the generated line and column information for the original source,
 | |
|  * line, and column positions provided. The only argument is an object with
 | |
|  * the following properties:
 | |
|  *
 | |
|  *   - source: The filename of the original source.
 | |
|  *   - line: The line number in the original source.  The line number
 | |
|  *     is 1-based.
 | |
|  *   - column: The column number in the original source.  The column
 | |
|  *     number is 0-based.
 | |
|  *
 | |
|  * and an object is returned with the following properties:
 | |
|  *
 | |
|  *   - line: The line number in the generated source, or null.  The
 | |
|  *     line number is 1-based. 
 | |
|  *   - column: The column number in the generated source, or null.
 | |
|  *     The column number is 0-based.
 | |
|  */
 | |
| IndexedSourceMapConsumer.prototype.generatedPositionFor =
 | |
|   function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
 | |
|     for (var i = 0; i < this._sections.length; i++) {
 | |
|       var section = this._sections[i];
 | |
| 
 | |
|       // Only consider this section if the requested source is in the list of
 | |
|       // sources of the consumer.
 | |
|       if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
 | |
|         continue;
 | |
|       }
 | |
|       var generatedPosition = section.consumer.generatedPositionFor(aArgs);
 | |
|       if (generatedPosition) {
 | |
|         var ret = {
 | |
|           line: generatedPosition.line +
 | |
|             (section.generatedOffset.generatedLine - 1),
 | |
|           column: generatedPosition.column +
 | |
|             (section.generatedOffset.generatedLine === generatedPosition.line
 | |
|              ? section.generatedOffset.generatedColumn - 1
 | |
|              : 0)
 | |
|         };
 | |
|         return ret;
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     return {
 | |
|       line: null,
 | |
|       column: null
 | |
|     };
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Parse the mappings in a string in to a data structure which we can easily
 | |
|  * query (the ordered arrays in the `this.__generatedMappings` and
 | |
|  * `this.__originalMappings` properties).
 | |
|  */
 | |
| IndexedSourceMapConsumer.prototype._parseMappings =
 | |
|   function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
 | |
|     this.__generatedMappings = [];
 | |
|     this.__originalMappings = [];
 | |
|     for (var i = 0; i < this._sections.length; i++) {
 | |
|       var section = this._sections[i];
 | |
|       var sectionMappings = section.consumer._generatedMappings;
 | |
|       for (var j = 0; j < sectionMappings.length; j++) {
 | |
|         var mapping = sectionMappings[j];
 | |
| 
 | |
|         var source = section.consumer._sources.at(mapping.source);
 | |
|         source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
 | |
|         this._sources.add(source);
 | |
|         source = this._sources.indexOf(source);
 | |
| 
 | |
|         var name = null;
 | |
|         if (mapping.name) {
 | |
|           name = section.consumer._names.at(mapping.name);
 | |
|           this._names.add(name);
 | |
|           name = this._names.indexOf(name);
 | |
|         }
 | |
| 
 | |
|         // The mappings coming from the consumer for the section have
 | |
|         // generated positions relative to the start of the section, so we
 | |
|         // need to offset them to be relative to the start of the concatenated
 | |
|         // generated file.
 | |
|         var adjustedMapping = {
 | |
|           source: source,
 | |
|           generatedLine: mapping.generatedLine +
 | |
|             (section.generatedOffset.generatedLine - 1),
 | |
|           generatedColumn: mapping.generatedColumn +
 | |
|             (section.generatedOffset.generatedLine === mapping.generatedLine
 | |
|             ? section.generatedOffset.generatedColumn - 1
 | |
|             : 0),
 | |
|           originalLine: mapping.originalLine,
 | |
|           originalColumn: mapping.originalColumn,
 | |
|           name: name
 | |
|         };
 | |
| 
 | |
|         this.__generatedMappings.push(adjustedMapping);
 | |
|         if (typeof adjustedMapping.originalLine === 'number') {
 | |
|           this.__originalMappings.push(adjustedMapping);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
 | |
|     quickSort(this.__originalMappings, util.compareByOriginalPositions);
 | |
|   };
 | |
| 
 | |
| __webpack_unused_export__ = IndexedSourceMapConsumer;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 9425:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| var base64VLQ = __webpack_require__(5807);
 | |
| var util = __webpack_require__(2344);
 | |
| var ArraySet = __webpack_require__(6375)/* .ArraySet */ .I;
 | |
| var MappingList = __webpack_require__(6817)/* .MappingList */ .H;
 | |
| 
 | |
| /**
 | |
|  * An instance of the SourceMapGenerator represents a source map which is
 | |
|  * being built incrementally. You may pass an object with the following
 | |
|  * properties:
 | |
|  *
 | |
|  *   - file: The filename of the generated source.
 | |
|  *   - sourceRoot: A root for all relative URLs in this source map.
 | |
|  */
 | |
| function SourceMapGenerator(aArgs) {
 | |
|   if (!aArgs) {
 | |
|     aArgs = {};
 | |
|   }
 | |
|   this._file = util.getArg(aArgs, 'file', null);
 | |
|   this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
 | |
|   this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
 | |
|   this._sources = new ArraySet();
 | |
|   this._names = new ArraySet();
 | |
|   this._mappings = new MappingList();
 | |
|   this._sourcesContents = null;
 | |
| }
 | |
| 
 | |
| SourceMapGenerator.prototype._version = 3;
 | |
| 
 | |
| /**
 | |
|  * Creates a new SourceMapGenerator based on a SourceMapConsumer
 | |
|  *
 | |
|  * @param aSourceMapConsumer The SourceMap.
 | |
|  */
 | |
| SourceMapGenerator.fromSourceMap =
 | |
|   function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
 | |
|     var sourceRoot = aSourceMapConsumer.sourceRoot;
 | |
|     var generator = new SourceMapGenerator({
 | |
|       file: aSourceMapConsumer.file,
 | |
|       sourceRoot: sourceRoot
 | |
|     });
 | |
|     aSourceMapConsumer.eachMapping(function (mapping) {
 | |
|       var newMapping = {
 | |
|         generated: {
 | |
|           line: mapping.generatedLine,
 | |
|           column: mapping.generatedColumn
 | |
|         }
 | |
|       };
 | |
| 
 | |
|       if (mapping.source != null) {
 | |
|         newMapping.source = mapping.source;
 | |
|         if (sourceRoot != null) {
 | |
|           newMapping.source = util.relative(sourceRoot, newMapping.source);
 | |
|         }
 | |
| 
 | |
|         newMapping.original = {
 | |
|           line: mapping.originalLine,
 | |
|           column: mapping.originalColumn
 | |
|         };
 | |
| 
 | |
|         if (mapping.name != null) {
 | |
|           newMapping.name = mapping.name;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       generator.addMapping(newMapping);
 | |
|     });
 | |
|     aSourceMapConsumer.sources.forEach(function (sourceFile) {
 | |
|       var sourceRelative = sourceFile;
 | |
|       if (sourceRoot !== null) {
 | |
|         sourceRelative = util.relative(sourceRoot, sourceFile);
 | |
|       }
 | |
| 
 | |
|       if (!generator._sources.has(sourceRelative)) {
 | |
|         generator._sources.add(sourceRelative);
 | |
|       }
 | |
| 
 | |
|       var content = aSourceMapConsumer.sourceContentFor(sourceFile);
 | |
|       if (content != null) {
 | |
|         generator.setSourceContent(sourceFile, content);
 | |
|       }
 | |
|     });
 | |
|     return generator;
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Add a single mapping from original source line and column to the generated
 | |
|  * source's line and column for this source map being created. The mapping
 | |
|  * object should have the following properties:
 | |
|  *
 | |
|  *   - generated: An object with the generated line and column positions.
 | |
|  *   - original: An object with the original line and column positions.
 | |
|  *   - source: The original source file (relative to the sourceRoot).
 | |
|  *   - name: An optional original token name for this mapping.
 | |
|  */
 | |
| SourceMapGenerator.prototype.addMapping =
 | |
|   function SourceMapGenerator_addMapping(aArgs) {
 | |
|     var generated = util.getArg(aArgs, 'generated');
 | |
|     var original = util.getArg(aArgs, 'original', null);
 | |
|     var source = util.getArg(aArgs, 'source', null);
 | |
|     var name = util.getArg(aArgs, 'name', null);
 | |
| 
 | |
|     if (!this._skipValidation) {
 | |
|       this._validateMapping(generated, original, source, name);
 | |
|     }
 | |
| 
 | |
|     if (source != null) {
 | |
|       source = String(source);
 | |
|       if (!this._sources.has(source)) {
 | |
|         this._sources.add(source);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     if (name != null) {
 | |
|       name = String(name);
 | |
|       if (!this._names.has(name)) {
 | |
|         this._names.add(name);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     this._mappings.add({
 | |
|       generatedLine: generated.line,
 | |
|       generatedColumn: generated.column,
 | |
|       originalLine: original != null && original.line,
 | |
|       originalColumn: original != null && original.column,
 | |
|       source: source,
 | |
|       name: name
 | |
|     });
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Set the source content for a source file.
 | |
|  */
 | |
| SourceMapGenerator.prototype.setSourceContent =
 | |
|   function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
 | |
|     var source = aSourceFile;
 | |
|     if (this._sourceRoot != null) {
 | |
|       source = util.relative(this._sourceRoot, source);
 | |
|     }
 | |
| 
 | |
|     if (aSourceContent != null) {
 | |
|       // Add the source content to the _sourcesContents map.
 | |
|       // Create a new _sourcesContents map if the property is null.
 | |
|       if (!this._sourcesContents) {
 | |
|         this._sourcesContents = Object.create(null);
 | |
|       }
 | |
|       this._sourcesContents[util.toSetString(source)] = aSourceContent;
 | |
|     } else if (this._sourcesContents) {
 | |
|       // Remove the source file from the _sourcesContents map.
 | |
|       // If the _sourcesContents map is empty, set the property to null.
 | |
|       delete this._sourcesContents[util.toSetString(source)];
 | |
|       if (Object.keys(this._sourcesContents).length === 0) {
 | |
|         this._sourcesContents = null;
 | |
|       }
 | |
|     }
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Applies the mappings of a sub-source-map for a specific source file to the
 | |
|  * source map being generated. Each mapping to the supplied source file is
 | |
|  * rewritten using the supplied source map. Note: The resolution for the
 | |
|  * resulting mappings is the minimium of this map and the supplied map.
 | |
|  *
 | |
|  * @param aSourceMapConsumer The source map to be applied.
 | |
|  * @param aSourceFile Optional. The filename of the source file.
 | |
|  *        If omitted, SourceMapConsumer's file property will be used.
 | |
|  * @param aSourceMapPath Optional. The dirname of the path to the source map
 | |
|  *        to be applied. If relative, it is relative to the SourceMapConsumer.
 | |
|  *        This parameter is needed when the two source maps aren't in the same
 | |
|  *        directory, and the source map to be applied contains relative source
 | |
|  *        paths. If so, those relative source paths need to be rewritten
 | |
|  *        relative to the SourceMapGenerator.
 | |
|  */
 | |
| SourceMapGenerator.prototype.applySourceMap =
 | |
|   function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
 | |
|     var sourceFile = aSourceFile;
 | |
|     // If aSourceFile is omitted, we will use the file property of the SourceMap
 | |
|     if (aSourceFile == null) {
 | |
|       if (aSourceMapConsumer.file == null) {
 | |
|         throw new Error(
 | |
|           'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
 | |
|           'or the source map\'s "file" property. Both were omitted.'
 | |
|         );
 | |
|       }
 | |
|       sourceFile = aSourceMapConsumer.file;
 | |
|     }
 | |
|     var sourceRoot = this._sourceRoot;
 | |
|     // Make "sourceFile" relative if an absolute Url is passed.
 | |
|     if (sourceRoot != null) {
 | |
|       sourceFile = util.relative(sourceRoot, sourceFile);
 | |
|     }
 | |
|     // Applying the SourceMap can add and remove items from the sources and
 | |
|     // the names array.
 | |
|     var newSources = new ArraySet();
 | |
|     var newNames = new ArraySet();
 | |
| 
 | |
|     // Find mappings for the "sourceFile"
 | |
|     this._mappings.unsortedForEach(function (mapping) {
 | |
|       if (mapping.source === sourceFile && mapping.originalLine != null) {
 | |
|         // Check if it can be mapped by the source map, then update the mapping.
 | |
|         var original = aSourceMapConsumer.originalPositionFor({
 | |
|           line: mapping.originalLine,
 | |
|           column: mapping.originalColumn
 | |
|         });
 | |
|         if (original.source != null) {
 | |
|           // Copy mapping
 | |
|           mapping.source = original.source;
 | |
|           if (aSourceMapPath != null) {
 | |
|             mapping.source = util.join(aSourceMapPath, mapping.source)
 | |
|           }
 | |
|           if (sourceRoot != null) {
 | |
|             mapping.source = util.relative(sourceRoot, mapping.source);
 | |
|           }
 | |
|           mapping.originalLine = original.line;
 | |
|           mapping.originalColumn = original.column;
 | |
|           if (original.name != null) {
 | |
|             mapping.name = original.name;
 | |
|           }
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       var source = mapping.source;
 | |
|       if (source != null && !newSources.has(source)) {
 | |
|         newSources.add(source);
 | |
|       }
 | |
| 
 | |
|       var name = mapping.name;
 | |
|       if (name != null && !newNames.has(name)) {
 | |
|         newNames.add(name);
 | |
|       }
 | |
| 
 | |
|     }, this);
 | |
|     this._sources = newSources;
 | |
|     this._names = newNames;
 | |
| 
 | |
|     // Copy sourcesContents of applied map.
 | |
|     aSourceMapConsumer.sources.forEach(function (sourceFile) {
 | |
|       var content = aSourceMapConsumer.sourceContentFor(sourceFile);
 | |
|       if (content != null) {
 | |
|         if (aSourceMapPath != null) {
 | |
|           sourceFile = util.join(aSourceMapPath, sourceFile);
 | |
|         }
 | |
|         if (sourceRoot != null) {
 | |
|           sourceFile = util.relative(sourceRoot, sourceFile);
 | |
|         }
 | |
|         this.setSourceContent(sourceFile, content);
 | |
|       }
 | |
|     }, this);
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * A mapping can have one of the three levels of data:
 | |
|  *
 | |
|  *   1. Just the generated position.
 | |
|  *   2. The Generated position, original position, and original source.
 | |
|  *   3. Generated and original position, original source, as well as a name
 | |
|  *      token.
 | |
|  *
 | |
|  * To maintain consistency, we validate that any new mapping being added falls
 | |
|  * in to one of these categories.
 | |
|  */
 | |
| SourceMapGenerator.prototype._validateMapping =
 | |
|   function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
 | |
|                                               aName) {
 | |
|     // When aOriginal is truthy but has empty values for .line and .column,
 | |
|     // it is most likely a programmer error. In this case we throw a very
 | |
|     // specific error message to try to guide them the right way.
 | |
|     // For example: https://github.com/Polymer/polymer-bundler/pull/519
 | |
|     if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
 | |
|         throw new Error(
 | |
|             'original.line and original.column are not numbers -- you probably meant to omit ' +
 | |
|             'the original mapping entirely and only map the generated position. If so, pass ' +
 | |
|             'null for the original mapping instead of an object with empty or null values.'
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
 | |
|         && aGenerated.line > 0 && aGenerated.column >= 0
 | |
|         && !aOriginal && !aSource && !aName) {
 | |
|       // Case 1.
 | |
|       return;
 | |
|     }
 | |
|     else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
 | |
|              && aOriginal && 'line' in aOriginal && 'column' in aOriginal
 | |
|              && aGenerated.line > 0 && aGenerated.column >= 0
 | |
|              && aOriginal.line > 0 && aOriginal.column >= 0
 | |
|              && aSource) {
 | |
|       // Cases 2 and 3.
 | |
|       return;
 | |
|     }
 | |
|     else {
 | |
|       throw new Error('Invalid mapping: ' + JSON.stringify({
 | |
|         generated: aGenerated,
 | |
|         source: aSource,
 | |
|         original: aOriginal,
 | |
|         name: aName
 | |
|       }));
 | |
|     }
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Serialize the accumulated mappings in to the stream of base 64 VLQs
 | |
|  * specified by the source map format.
 | |
|  */
 | |
| SourceMapGenerator.prototype._serializeMappings =
 | |
|   function SourceMapGenerator_serializeMappings() {
 | |
|     var previousGeneratedColumn = 0;
 | |
|     var previousGeneratedLine = 1;
 | |
|     var previousOriginalColumn = 0;
 | |
|     var previousOriginalLine = 0;
 | |
|     var previousName = 0;
 | |
|     var previousSource = 0;
 | |
|     var result = '';
 | |
|     var next;
 | |
|     var mapping;
 | |
|     var nameIdx;
 | |
|     var sourceIdx;
 | |
| 
 | |
|     var mappings = this._mappings.toArray();
 | |
|     for (var i = 0, len = mappings.length; i < len; i++) {
 | |
|       mapping = mappings[i];
 | |
|       next = ''
 | |
| 
 | |
|       if (mapping.generatedLine !== previousGeneratedLine) {
 | |
|         previousGeneratedColumn = 0;
 | |
|         while (mapping.generatedLine !== previousGeneratedLine) {
 | |
|           next += ';';
 | |
|           previousGeneratedLine++;
 | |
|         }
 | |
|       }
 | |
|       else {
 | |
|         if (i > 0) {
 | |
|           if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
 | |
|             continue;
 | |
|           }
 | |
|           next += ',';
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       next += base64VLQ.encode(mapping.generatedColumn
 | |
|                                  - previousGeneratedColumn);
 | |
|       previousGeneratedColumn = mapping.generatedColumn;
 | |
| 
 | |
|       if (mapping.source != null) {
 | |
|         sourceIdx = this._sources.indexOf(mapping.source);
 | |
|         next += base64VLQ.encode(sourceIdx - previousSource);
 | |
|         previousSource = sourceIdx;
 | |
| 
 | |
|         // lines are stored 0-based in SourceMap spec version 3
 | |
|         next += base64VLQ.encode(mapping.originalLine - 1
 | |
|                                    - previousOriginalLine);
 | |
|         previousOriginalLine = mapping.originalLine - 1;
 | |
| 
 | |
|         next += base64VLQ.encode(mapping.originalColumn
 | |
|                                    - previousOriginalColumn);
 | |
|         previousOriginalColumn = mapping.originalColumn;
 | |
| 
 | |
|         if (mapping.name != null) {
 | |
|           nameIdx = this._names.indexOf(mapping.name);
 | |
|           next += base64VLQ.encode(nameIdx - previousName);
 | |
|           previousName = nameIdx;
 | |
|         }
 | |
|       }
 | |
| 
 | |
|       result += next;
 | |
|     }
 | |
| 
 | |
|     return result;
 | |
|   };
 | |
| 
 | |
| SourceMapGenerator.prototype._generateSourcesContent =
 | |
|   function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
 | |
|     return aSources.map(function (source) {
 | |
|       if (!this._sourcesContents) {
 | |
|         return null;
 | |
|       }
 | |
|       if (aSourceRoot != null) {
 | |
|         source = util.relative(aSourceRoot, source);
 | |
|       }
 | |
|       var key = util.toSetString(source);
 | |
|       return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
 | |
|         ? this._sourcesContents[key]
 | |
|         : null;
 | |
|     }, this);
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Externalize the source map.
 | |
|  */
 | |
| SourceMapGenerator.prototype.toJSON =
 | |
|   function SourceMapGenerator_toJSON() {
 | |
|     var map = {
 | |
|       version: this._version,
 | |
|       sources: this._sources.toArray(),
 | |
|       names: this._names.toArray(),
 | |
|       mappings: this._serializeMappings()
 | |
|     };
 | |
|     if (this._file != null) {
 | |
|       map.file = this._file;
 | |
|     }
 | |
|     if (this._sourceRoot != null) {
 | |
|       map.sourceRoot = this._sourceRoot;
 | |
|     }
 | |
|     if (this._sourcesContents) {
 | |
|       map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
 | |
|     }
 | |
| 
 | |
|     return map;
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Render the source map being generated to a string.
 | |
|  */
 | |
| SourceMapGenerator.prototype.toString =
 | |
|   function SourceMapGenerator_toString() {
 | |
|     return JSON.stringify(this.toJSON());
 | |
|   };
 | |
| 
 | |
| exports.SourceMapGenerator = SourceMapGenerator;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2616:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| var SourceMapGenerator = __webpack_require__(9425).SourceMapGenerator;
 | |
| var util = __webpack_require__(2344);
 | |
| 
 | |
| // Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
 | |
| // operating systems these days (capturing the result).
 | |
| var REGEX_NEWLINE = /(\r?\n)/;
 | |
| 
 | |
| // Newline character code for charCodeAt() comparisons
 | |
| var NEWLINE_CODE = 10;
 | |
| 
 | |
| // Private symbol for identifying `SourceNode`s when multiple versions of
 | |
| // the source-map library are loaded. This MUST NOT CHANGE across
 | |
| // versions!
 | |
| var isSourceNode = "$$$isSourceNode$$$";
 | |
| 
 | |
| /**
 | |
|  * SourceNodes provide a way to abstract over interpolating/concatenating
 | |
|  * snippets of generated JavaScript source code while maintaining the line and
 | |
|  * column information associated with the original source code.
 | |
|  *
 | |
|  * @param aLine The original line number.
 | |
|  * @param aColumn The original column number.
 | |
|  * @param aSource The original source's filename.
 | |
|  * @param aChunks Optional. An array of strings which are snippets of
 | |
|  *        generated JS, or other SourceNodes.
 | |
|  * @param aName The original identifier.
 | |
|  */
 | |
| function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
 | |
|   this.children = [];
 | |
|   this.sourceContents = {};
 | |
|   this.line = aLine == null ? null : aLine;
 | |
|   this.column = aColumn == null ? null : aColumn;
 | |
|   this.source = aSource == null ? null : aSource;
 | |
|   this.name = aName == null ? null : aName;
 | |
|   this[isSourceNode] = true;
 | |
|   if (aChunks != null) this.add(aChunks);
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Creates a SourceNode from generated code and a SourceMapConsumer.
 | |
|  *
 | |
|  * @param aGeneratedCode The generated code
 | |
|  * @param aSourceMapConsumer The SourceMap for the generated code
 | |
|  * @param aRelativePath Optional. The path that relative sources in the
 | |
|  *        SourceMapConsumer should be relative to.
 | |
|  */
 | |
| SourceNode.fromStringWithSourceMap =
 | |
|   function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
 | |
|     // The SourceNode we want to fill with the generated code
 | |
|     // and the SourceMap
 | |
|     var node = new SourceNode();
 | |
| 
 | |
|     // All even indices of this array are one line of the generated code,
 | |
|     // while all odd indices are the newlines between two adjacent lines
 | |
|     // (since `REGEX_NEWLINE` captures its match).
 | |
|     // Processed fragments are accessed by calling `shiftNextLine`.
 | |
|     var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
 | |
|     var remainingLinesIndex = 0;
 | |
|     var shiftNextLine = function() {
 | |
|       var lineContents = getNextLine();
 | |
|       // The last line of a file might not have a newline.
 | |
|       var newLine = getNextLine() || "";
 | |
|       return lineContents + newLine;
 | |
| 
 | |
|       function getNextLine() {
 | |
|         return remainingLinesIndex < remainingLines.length ?
 | |
|             remainingLines[remainingLinesIndex++] : undefined;
 | |
|       }
 | |
|     };
 | |
| 
 | |
|     // We need to remember the position of "remainingLines"
 | |
|     var lastGeneratedLine = 1, lastGeneratedColumn = 0;
 | |
| 
 | |
|     // The generate SourceNodes we need a code range.
 | |
|     // To extract it current and last mapping is used.
 | |
|     // Here we store the last mapping.
 | |
|     var lastMapping = null;
 | |
| 
 | |
|     aSourceMapConsumer.eachMapping(function (mapping) {
 | |
|       if (lastMapping !== null) {
 | |
|         // We add the code from "lastMapping" to "mapping":
 | |
|         // First check if there is a new line in between.
 | |
|         if (lastGeneratedLine < mapping.generatedLine) {
 | |
|           // Associate first line with "lastMapping"
 | |
|           addMappingWithCode(lastMapping, shiftNextLine());
 | |
|           lastGeneratedLine++;
 | |
|           lastGeneratedColumn = 0;
 | |
|           // The remaining code is added without mapping
 | |
|         } else {
 | |
|           // There is no new line in between.
 | |
|           // Associate the code between "lastGeneratedColumn" and
 | |
|           // "mapping.generatedColumn" with "lastMapping"
 | |
|           var nextLine = remainingLines[remainingLinesIndex] || '';
 | |
|           var code = nextLine.substr(0, mapping.generatedColumn -
 | |
|                                         lastGeneratedColumn);
 | |
|           remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
 | |
|                                               lastGeneratedColumn);
 | |
|           lastGeneratedColumn = mapping.generatedColumn;
 | |
|           addMappingWithCode(lastMapping, code);
 | |
|           // No more remaining code, continue
 | |
|           lastMapping = mapping;
 | |
|           return;
 | |
|         }
 | |
|       }
 | |
|       // We add the generated code until the first mapping
 | |
|       // to the SourceNode without any mapping.
 | |
|       // Each line is added as separate string.
 | |
|       while (lastGeneratedLine < mapping.generatedLine) {
 | |
|         node.add(shiftNextLine());
 | |
|         lastGeneratedLine++;
 | |
|       }
 | |
|       if (lastGeneratedColumn < mapping.generatedColumn) {
 | |
|         var nextLine = remainingLines[remainingLinesIndex] || '';
 | |
|         node.add(nextLine.substr(0, mapping.generatedColumn));
 | |
|         remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
 | |
|         lastGeneratedColumn = mapping.generatedColumn;
 | |
|       }
 | |
|       lastMapping = mapping;
 | |
|     }, this);
 | |
|     // We have processed all mappings.
 | |
|     if (remainingLinesIndex < remainingLines.length) {
 | |
|       if (lastMapping) {
 | |
|         // Associate the remaining code in the current line with "lastMapping"
 | |
|         addMappingWithCode(lastMapping, shiftNextLine());
 | |
|       }
 | |
|       // and add the remaining lines without any mapping
 | |
|       node.add(remainingLines.splice(remainingLinesIndex).join(""));
 | |
|     }
 | |
| 
 | |
|     // Copy sourcesContent into SourceNode
 | |
|     aSourceMapConsumer.sources.forEach(function (sourceFile) {
 | |
|       var content = aSourceMapConsumer.sourceContentFor(sourceFile);
 | |
|       if (content != null) {
 | |
|         if (aRelativePath != null) {
 | |
|           sourceFile = util.join(aRelativePath, sourceFile);
 | |
|         }
 | |
|         node.setSourceContent(sourceFile, content);
 | |
|       }
 | |
|     });
 | |
| 
 | |
|     return node;
 | |
| 
 | |
|     function addMappingWithCode(mapping, code) {
 | |
|       if (mapping === null || mapping.source === undefined) {
 | |
|         node.add(code);
 | |
|       } else {
 | |
|         var source = aRelativePath
 | |
|           ? util.join(aRelativePath, mapping.source)
 | |
|           : mapping.source;
 | |
|         node.add(new SourceNode(mapping.originalLine,
 | |
|                                 mapping.originalColumn,
 | |
|                                 source,
 | |
|                                 code,
 | |
|                                 mapping.name));
 | |
|       }
 | |
|     }
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Add a chunk of generated JS to this source node.
 | |
|  *
 | |
|  * @param aChunk A string snippet of generated JS code, another instance of
 | |
|  *        SourceNode, or an array where each member is one of those things.
 | |
|  */
 | |
| SourceNode.prototype.add = function SourceNode_add(aChunk) {
 | |
|   if (Array.isArray(aChunk)) {
 | |
|     aChunk.forEach(function (chunk) {
 | |
|       this.add(chunk);
 | |
|     }, this);
 | |
|   }
 | |
|   else if (aChunk[isSourceNode] || typeof aChunk === "string") {
 | |
|     if (aChunk) {
 | |
|       this.children.push(aChunk);
 | |
|     }
 | |
|   }
 | |
|   else {
 | |
|     throw new TypeError(
 | |
|       "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
 | |
|     );
 | |
|   }
 | |
|   return this;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Add a chunk of generated JS to the beginning of this source node.
 | |
|  *
 | |
|  * @param aChunk A string snippet of generated JS code, another instance of
 | |
|  *        SourceNode, or an array where each member is one of those things.
 | |
|  */
 | |
| SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
 | |
|   if (Array.isArray(aChunk)) {
 | |
|     for (var i = aChunk.length-1; i >= 0; i--) {
 | |
|       this.prepend(aChunk[i]);
 | |
|     }
 | |
|   }
 | |
|   else if (aChunk[isSourceNode] || typeof aChunk === "string") {
 | |
|     this.children.unshift(aChunk);
 | |
|   }
 | |
|   else {
 | |
|     throw new TypeError(
 | |
|       "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
 | |
|     );
 | |
|   }
 | |
|   return this;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Walk over the tree of JS snippets in this node and its children. The
 | |
|  * walking function is called once for each snippet of JS and is passed that
 | |
|  * snippet and the its original associated source's line/column location.
 | |
|  *
 | |
|  * @param aFn The traversal function.
 | |
|  */
 | |
| SourceNode.prototype.walk = function SourceNode_walk(aFn) {
 | |
|   var chunk;
 | |
|   for (var i = 0, len = this.children.length; i < len; i++) {
 | |
|     chunk = this.children[i];
 | |
|     if (chunk[isSourceNode]) {
 | |
|       chunk.walk(aFn);
 | |
|     }
 | |
|     else {
 | |
|       if (chunk !== '') {
 | |
|         aFn(chunk, { source: this.source,
 | |
|                      line: this.line,
 | |
|                      column: this.column,
 | |
|                      name: this.name });
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
 | |
|  * each of `this.children`.
 | |
|  *
 | |
|  * @param aSep The separator.
 | |
|  */
 | |
| SourceNode.prototype.join = function SourceNode_join(aSep) {
 | |
|   var newChildren;
 | |
|   var i;
 | |
|   var len = this.children.length;
 | |
|   if (len > 0) {
 | |
|     newChildren = [];
 | |
|     for (i = 0; i < len-1; i++) {
 | |
|       newChildren.push(this.children[i]);
 | |
|       newChildren.push(aSep);
 | |
|     }
 | |
|     newChildren.push(this.children[i]);
 | |
|     this.children = newChildren;
 | |
|   }
 | |
|   return this;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Call String.prototype.replace on the very right-most source snippet. Useful
 | |
|  * for trimming whitespace from the end of a source node, etc.
 | |
|  *
 | |
|  * @param aPattern The pattern to replace.
 | |
|  * @param aReplacement The thing to replace the pattern with.
 | |
|  */
 | |
| SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
 | |
|   var lastChild = this.children[this.children.length - 1];
 | |
|   if (lastChild[isSourceNode]) {
 | |
|     lastChild.replaceRight(aPattern, aReplacement);
 | |
|   }
 | |
|   else if (typeof lastChild === 'string') {
 | |
|     this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
 | |
|   }
 | |
|   else {
 | |
|     this.children.push(''.replace(aPattern, aReplacement));
 | |
|   }
 | |
|   return this;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Set the source content for a source file. This will be added to the SourceMapGenerator
 | |
|  * in the sourcesContent field.
 | |
|  *
 | |
|  * @param aSourceFile The filename of the source file
 | |
|  * @param aSourceContent The content of the source file
 | |
|  */
 | |
| SourceNode.prototype.setSourceContent =
 | |
|   function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
 | |
|     this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Walk over the tree of SourceNodes. The walking function is called for each
 | |
|  * source file content and is passed the filename and source content.
 | |
|  *
 | |
|  * @param aFn The traversal function.
 | |
|  */
 | |
| SourceNode.prototype.walkSourceContents =
 | |
|   function SourceNode_walkSourceContents(aFn) {
 | |
|     for (var i = 0, len = this.children.length; i < len; i++) {
 | |
|       if (this.children[i][isSourceNode]) {
 | |
|         this.children[i].walkSourceContents(aFn);
 | |
|       }
 | |
|     }
 | |
| 
 | |
|     var sources = Object.keys(this.sourceContents);
 | |
|     for (var i = 0, len = sources.length; i < len; i++) {
 | |
|       aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
 | |
|     }
 | |
|   };
 | |
| 
 | |
| /**
 | |
|  * Return the string representation of this source node. Walks over the tree
 | |
|  * and concatenates all the various snippets together to one string.
 | |
|  */
 | |
| SourceNode.prototype.toString = function SourceNode_toString() {
 | |
|   var str = "";
 | |
|   this.walk(function (chunk) {
 | |
|     str += chunk;
 | |
|   });
 | |
|   return str;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Returns the string representation of this source node along with a source
 | |
|  * map.
 | |
|  */
 | |
| SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
 | |
|   var generated = {
 | |
|     code: "",
 | |
|     line: 1,
 | |
|     column: 0
 | |
|   };
 | |
|   var map = new SourceMapGenerator(aArgs);
 | |
|   var sourceMappingActive = false;
 | |
|   var lastOriginalSource = null;
 | |
|   var lastOriginalLine = null;
 | |
|   var lastOriginalColumn = null;
 | |
|   var lastOriginalName = null;
 | |
|   this.walk(function (chunk, original) {
 | |
|     generated.code += chunk;
 | |
|     if (original.source !== null
 | |
|         && original.line !== null
 | |
|         && original.column !== null) {
 | |
|       if(lastOriginalSource !== original.source
 | |
|          || lastOriginalLine !== original.line
 | |
|          || lastOriginalColumn !== original.column
 | |
|          || lastOriginalName !== original.name) {
 | |
|         map.addMapping({
 | |
|           source: original.source,
 | |
|           original: {
 | |
|             line: original.line,
 | |
|             column: original.column
 | |
|           },
 | |
|           generated: {
 | |
|             line: generated.line,
 | |
|             column: generated.column
 | |
|           },
 | |
|           name: original.name
 | |
|         });
 | |
|       }
 | |
|       lastOriginalSource = original.source;
 | |
|       lastOriginalLine = original.line;
 | |
|       lastOriginalColumn = original.column;
 | |
|       lastOriginalName = original.name;
 | |
|       sourceMappingActive = true;
 | |
|     } else if (sourceMappingActive) {
 | |
|       map.addMapping({
 | |
|         generated: {
 | |
|           line: generated.line,
 | |
|           column: generated.column
 | |
|         }
 | |
|       });
 | |
|       lastOriginalSource = null;
 | |
|       sourceMappingActive = false;
 | |
|     }
 | |
|     for (var idx = 0, length = chunk.length; idx < length; idx++) {
 | |
|       if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
 | |
|         generated.line++;
 | |
|         generated.column = 0;
 | |
|         // Mappings end at eol
 | |
|         if (idx + 1 === length) {
 | |
|           lastOriginalSource = null;
 | |
|           sourceMappingActive = false;
 | |
|         } else if (sourceMappingActive) {
 | |
|           map.addMapping({
 | |
|             source: original.source,
 | |
|             original: {
 | |
|               line: original.line,
 | |
|               column: original.column
 | |
|             },
 | |
|             generated: {
 | |
|               line: generated.line,
 | |
|               column: generated.column
 | |
|             },
 | |
|             name: original.name
 | |
|           });
 | |
|         }
 | |
|       } else {
 | |
|         generated.column++;
 | |
|       }
 | |
|     }
 | |
|   });
 | |
|   this.walkSourceContents(function (sourceFile, sourceContent) {
 | |
|     map.setSourceContent(sourceFile, sourceContent);
 | |
|   });
 | |
| 
 | |
|   return { code: generated.code, map: map };
 | |
| };
 | |
| 
 | |
| exports.SourceNode = SourceNode;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2344:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| /* -*- Mode: js; js-indent-level: 2; -*- */
 | |
| /*
 | |
|  * Copyright 2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * This is a helper function for getting values from parameter/options
 | |
|  * objects.
 | |
|  *
 | |
|  * @param args The object we are extracting values from
 | |
|  * @param name The name of the property we are getting.
 | |
|  * @param defaultValue An optional value to return if the property is missing
 | |
|  * from the object. If this is not specified and the property is missing, an
 | |
|  * error will be thrown.
 | |
|  */
 | |
| function getArg(aArgs, aName, aDefaultValue) {
 | |
|   if (aName in aArgs) {
 | |
|     return aArgs[aName];
 | |
|   } else if (arguments.length === 3) {
 | |
|     return aDefaultValue;
 | |
|   } else {
 | |
|     throw new Error('"' + aName + '" is a required argument.');
 | |
|   }
 | |
| }
 | |
| exports.getArg = getArg;
 | |
| 
 | |
| var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
 | |
| var dataUrlRegexp = /^data:.+\,.+$/;
 | |
| 
 | |
| function urlParse(aUrl) {
 | |
|   var match = aUrl.match(urlRegexp);
 | |
|   if (!match) {
 | |
|     return null;
 | |
|   }
 | |
|   return {
 | |
|     scheme: match[1],
 | |
|     auth: match[2],
 | |
|     host: match[3],
 | |
|     port: match[4],
 | |
|     path: match[5]
 | |
|   };
 | |
| }
 | |
| exports.urlParse = urlParse;
 | |
| 
 | |
| function urlGenerate(aParsedUrl) {
 | |
|   var url = '';
 | |
|   if (aParsedUrl.scheme) {
 | |
|     url += aParsedUrl.scheme + ':';
 | |
|   }
 | |
|   url += '//';
 | |
|   if (aParsedUrl.auth) {
 | |
|     url += aParsedUrl.auth + '@';
 | |
|   }
 | |
|   if (aParsedUrl.host) {
 | |
|     url += aParsedUrl.host;
 | |
|   }
 | |
|   if (aParsedUrl.port) {
 | |
|     url += ":" + aParsedUrl.port
 | |
|   }
 | |
|   if (aParsedUrl.path) {
 | |
|     url += aParsedUrl.path;
 | |
|   }
 | |
|   return url;
 | |
| }
 | |
| exports.urlGenerate = urlGenerate;
 | |
| 
 | |
| /**
 | |
|  * Normalizes a path, or the path portion of a URL:
 | |
|  *
 | |
|  * - Replaces consecutive slashes with one slash.
 | |
|  * - Removes unnecessary '.' parts.
 | |
|  * - Removes unnecessary '<dir>/..' parts.
 | |
|  *
 | |
|  * Based on code in the Node.js 'path' core module.
 | |
|  *
 | |
|  * @param aPath The path or url to normalize.
 | |
|  */
 | |
| function normalize(aPath) {
 | |
|   var path = aPath;
 | |
|   var url = urlParse(aPath);
 | |
|   if (url) {
 | |
|     if (!url.path) {
 | |
|       return aPath;
 | |
|     }
 | |
|     path = url.path;
 | |
|   }
 | |
|   var isAbsolute = exports.isAbsolute(path);
 | |
| 
 | |
|   var parts = path.split(/\/+/);
 | |
|   for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
 | |
|     part = parts[i];
 | |
|     if (part === '.') {
 | |
|       parts.splice(i, 1);
 | |
|     } else if (part === '..') {
 | |
|       up++;
 | |
|     } else if (up > 0) {
 | |
|       if (part === '') {
 | |
|         // The first part is blank if the path is absolute. Trying to go
 | |
|         // above the root is a no-op. Therefore we can remove all '..' parts
 | |
|         // directly after the root.
 | |
|         parts.splice(i + 1, up);
 | |
|         up = 0;
 | |
|       } else {
 | |
|         parts.splice(i, 2);
 | |
|         up--;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   path = parts.join('/');
 | |
| 
 | |
|   if (path === '') {
 | |
|     path = isAbsolute ? '/' : '.';
 | |
|   }
 | |
| 
 | |
|   if (url) {
 | |
|     url.path = path;
 | |
|     return urlGenerate(url);
 | |
|   }
 | |
|   return path;
 | |
| }
 | |
| exports.normalize = normalize;
 | |
| 
 | |
| /**
 | |
|  * Joins two paths/URLs.
 | |
|  *
 | |
|  * @param aRoot The root path or URL.
 | |
|  * @param aPath The path or URL to be joined with the root.
 | |
|  *
 | |
|  * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
 | |
|  *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
 | |
|  *   first.
 | |
|  * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
 | |
|  *   is updated with the result and aRoot is returned. Otherwise the result
 | |
|  *   is returned.
 | |
|  *   - If aPath is absolute, the result is aPath.
 | |
|  *   - Otherwise the two paths are joined with a slash.
 | |
|  * - Joining for example 'http://' and 'www.example.com' is also supported.
 | |
|  */
 | |
| function join(aRoot, aPath) {
 | |
|   if (aRoot === "") {
 | |
|     aRoot = ".";
 | |
|   }
 | |
|   if (aPath === "") {
 | |
|     aPath = ".";
 | |
|   }
 | |
|   var aPathUrl = urlParse(aPath);
 | |
|   var aRootUrl = urlParse(aRoot);
 | |
|   if (aRootUrl) {
 | |
|     aRoot = aRootUrl.path || '/';
 | |
|   }
 | |
| 
 | |
|   // `join(foo, '//www.example.org')`
 | |
|   if (aPathUrl && !aPathUrl.scheme) {
 | |
|     if (aRootUrl) {
 | |
|       aPathUrl.scheme = aRootUrl.scheme;
 | |
|     }
 | |
|     return urlGenerate(aPathUrl);
 | |
|   }
 | |
| 
 | |
|   if (aPathUrl || aPath.match(dataUrlRegexp)) {
 | |
|     return aPath;
 | |
|   }
 | |
| 
 | |
|   // `join('http://', 'www.example.com')`
 | |
|   if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
 | |
|     aRootUrl.host = aPath;
 | |
|     return urlGenerate(aRootUrl);
 | |
|   }
 | |
| 
 | |
|   var joined = aPath.charAt(0) === '/'
 | |
|     ? aPath
 | |
|     : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
 | |
| 
 | |
|   if (aRootUrl) {
 | |
|     aRootUrl.path = joined;
 | |
|     return urlGenerate(aRootUrl);
 | |
|   }
 | |
|   return joined;
 | |
| }
 | |
| exports.join = join;
 | |
| 
 | |
| exports.isAbsolute = function (aPath) {
 | |
|   return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Make a path relative to a URL or another path.
 | |
|  *
 | |
|  * @param aRoot The root path or URL.
 | |
|  * @param aPath The path or URL to be made relative to aRoot.
 | |
|  */
 | |
| function relative(aRoot, aPath) {
 | |
|   if (aRoot === "") {
 | |
|     aRoot = ".";
 | |
|   }
 | |
| 
 | |
|   aRoot = aRoot.replace(/\/$/, '');
 | |
| 
 | |
|   // It is possible for the path to be above the root. In this case, simply
 | |
|   // checking whether the root is a prefix of the path won't work. Instead, we
 | |
|   // need to remove components from the root one by one, until either we find
 | |
|   // a prefix that fits, or we run out of components to remove.
 | |
|   var level = 0;
 | |
|   while (aPath.indexOf(aRoot + '/') !== 0) {
 | |
|     var index = aRoot.lastIndexOf("/");
 | |
|     if (index < 0) {
 | |
|       return aPath;
 | |
|     }
 | |
| 
 | |
|     // If the only part of the root that is left is the scheme (i.e. http://,
 | |
|     // file:///, etc.), one or more slashes (/), or simply nothing at all, we
 | |
|     // have exhausted all components, so the path is not relative to the root.
 | |
|     aRoot = aRoot.slice(0, index);
 | |
|     if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
 | |
|       return aPath;
 | |
|     }
 | |
| 
 | |
|     ++level;
 | |
|   }
 | |
| 
 | |
|   // Make sure we add a "../" for each component we removed from the root.
 | |
|   return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
 | |
| }
 | |
| exports.relative = relative;
 | |
| 
 | |
| var supportsNullProto = (function () {
 | |
|   var obj = Object.create(null);
 | |
|   return !('__proto__' in obj);
 | |
| }());
 | |
| 
 | |
| function identity (s) {
 | |
|   return s;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Because behavior goes wacky when you set `__proto__` on objects, we
 | |
|  * have to prefix all the strings in our set with an arbitrary character.
 | |
|  *
 | |
|  * See https://github.com/mozilla/source-map/pull/31 and
 | |
|  * https://github.com/mozilla/source-map/issues/30
 | |
|  *
 | |
|  * @param String aStr
 | |
|  */
 | |
| function toSetString(aStr) {
 | |
|   if (isProtoString(aStr)) {
 | |
|     return '$' + aStr;
 | |
|   }
 | |
| 
 | |
|   return aStr;
 | |
| }
 | |
| exports.toSetString = supportsNullProto ? identity : toSetString;
 | |
| 
 | |
| function fromSetString(aStr) {
 | |
|   if (isProtoString(aStr)) {
 | |
|     return aStr.slice(1);
 | |
|   }
 | |
| 
 | |
|   return aStr;
 | |
| }
 | |
| exports.fromSetString = supportsNullProto ? identity : fromSetString;
 | |
| 
 | |
| function isProtoString(s) {
 | |
|   if (!s) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   var length = s.length;
 | |
| 
 | |
|   if (length < 9 /* "__proto__".length */) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
 | |
|       s.charCodeAt(length - 2) !== 95  /* '_' */ ||
 | |
|       s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
 | |
|       s.charCodeAt(length - 4) !== 116 /* 't' */ ||
 | |
|       s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
 | |
|       s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
 | |
|       s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
 | |
|       s.charCodeAt(length - 8) !== 95  /* '_' */ ||
 | |
|       s.charCodeAt(length - 9) !== 95  /* '_' */) {
 | |
|     return false;
 | |
|   }
 | |
| 
 | |
|   for (var i = length - 10; i >= 0; i--) {
 | |
|     if (s.charCodeAt(i) !== 36 /* '$' */) {
 | |
|       return false;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Comparator between two mappings where the original positions are compared.
 | |
|  *
 | |
|  * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 | |
|  * mappings with the same original source/line/column, but different generated
 | |
|  * line and column the same. Useful when searching for a mapping with a
 | |
|  * stubbed out mapping.
 | |
|  */
 | |
| function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
 | |
|   var cmp = strcmp(mappingA.source, mappingB.source);
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.originalLine - mappingB.originalLine;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.originalColumn - mappingB.originalColumn;
 | |
|   if (cmp !== 0 || onlyCompareOriginal) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.generatedColumn - mappingB.generatedColumn;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.generatedLine - mappingB.generatedLine;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   return strcmp(mappingA.name, mappingB.name);
 | |
| }
 | |
| exports.compareByOriginalPositions = compareByOriginalPositions;
 | |
| 
 | |
| /**
 | |
|  * Comparator between two mappings with deflated source and name indices where
 | |
|  * the generated positions are compared.
 | |
|  *
 | |
|  * Optionally pass in `true` as `onlyCompareGenerated` to consider two
 | |
|  * mappings with the same generated line and column, but different
 | |
|  * source/name/original line and column the same. Useful when searching for a
 | |
|  * mapping with a stubbed out mapping.
 | |
|  */
 | |
| function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
 | |
|   var cmp = mappingA.generatedLine - mappingB.generatedLine;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.generatedColumn - mappingB.generatedColumn;
 | |
|   if (cmp !== 0 || onlyCompareGenerated) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = strcmp(mappingA.source, mappingB.source);
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.originalLine - mappingB.originalLine;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.originalColumn - mappingB.originalColumn;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   return strcmp(mappingA.name, mappingB.name);
 | |
| }
 | |
| exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
 | |
| 
 | |
| function strcmp(aStr1, aStr2) {
 | |
|   if (aStr1 === aStr2) {
 | |
|     return 0;
 | |
|   }
 | |
| 
 | |
|   if (aStr1 === null) {
 | |
|     return 1; // aStr2 !== null
 | |
|   }
 | |
| 
 | |
|   if (aStr2 === null) {
 | |
|     return -1; // aStr1 !== null
 | |
|   }
 | |
| 
 | |
|   if (aStr1 > aStr2) {
 | |
|     return 1;
 | |
|   }
 | |
| 
 | |
|   return -1;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Comparator between two mappings with inflated source and name strings where
 | |
|  * the generated positions are compared.
 | |
|  */
 | |
| function compareByGeneratedPositionsInflated(mappingA, mappingB) {
 | |
|   var cmp = mappingA.generatedLine - mappingB.generatedLine;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.generatedColumn - mappingB.generatedColumn;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = strcmp(mappingA.source, mappingB.source);
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.originalLine - mappingB.originalLine;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   cmp = mappingA.originalColumn - mappingB.originalColumn;
 | |
|   if (cmp !== 0) {
 | |
|     return cmp;
 | |
|   }
 | |
| 
 | |
|   return strcmp(mappingA.name, mappingB.name);
 | |
| }
 | |
| exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
 | |
| 
 | |
| /**
 | |
|  * Strip any JSON XSSI avoidance prefix from the string (as documented
 | |
|  * in the source maps specification), and then parse the string as
 | |
|  * JSON.
 | |
|  */
 | |
| function parseSourceMapInput(str) {
 | |
|   return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
 | |
| }
 | |
| exports.parseSourceMapInput = parseSourceMapInput;
 | |
| 
 | |
| /**
 | |
|  * Compute the URL of a source given the the source root, the source's
 | |
|  * URL, and the source map's URL.
 | |
|  */
 | |
| function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
 | |
|   sourceURL = sourceURL || '';
 | |
| 
 | |
|   if (sourceRoot) {
 | |
|     // This follows what Chrome does.
 | |
|     if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
 | |
|       sourceRoot += '/';
 | |
|     }
 | |
|     // The spec says:
 | |
|     //   Line 4: An optional source root, useful for relocating source
 | |
|     //   files on a server or removing repeated values in the
 | |
|     //   “sources” entry.  This value is prepended to the individual
 | |
|     //   entries in the “source” field.
 | |
|     sourceURL = sourceRoot + sourceURL;
 | |
|   }
 | |
| 
 | |
|   // Historically, SourceMapConsumer did not take the sourceMapURL as
 | |
|   // a parameter.  This mode is still somewhat supported, which is why
 | |
|   // this code block is conditional.  However, it's preferable to pass
 | |
|   // the source map URL to SourceMapConsumer, so that this function
 | |
|   // can implement the source URL resolution algorithm as outlined in
 | |
|   // the spec.  This block is basically the equivalent of:
 | |
|   //    new URL(sourceURL, sourceMapURL).toString()
 | |
|   // ... except it avoids using URL, which wasn't available in the
 | |
|   // older releases of node still supported by this library.
 | |
|   //
 | |
|   // The spec says:
 | |
|   //   If the sources are not absolute URLs after prepending of the
 | |
|   //   “sourceRoot”, the sources are resolved relative to the
 | |
|   //   SourceMap (like resolving script src in a html document).
 | |
|   if (sourceMapURL) {
 | |
|     var parsed = urlParse(sourceMapURL);
 | |
|     if (!parsed) {
 | |
|       throw new Error("sourceMapURL could not be parsed");
 | |
|     }
 | |
|     if (parsed.path) {
 | |
|       // Strip the last path component, but keep the "/".
 | |
|       var index = parsed.path.lastIndexOf('/');
 | |
|       if (index >= 0) {
 | |
|         parsed.path = parsed.path.substring(0, index + 1);
 | |
|       }
 | |
|     }
 | |
|     sourceURL = join(urlGenerate(parsed), sourceURL);
 | |
|   }
 | |
| 
 | |
|   return normalize(sourceURL);
 | |
| }
 | |
| exports.computeSourceURL = computeSourceURL;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 6594:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| /*
 | |
|  * Copyright 2009-2011 Mozilla Foundation and contributors
 | |
|  * Licensed under the New BSD license. See LICENSE.txt or:
 | |
|  * http://opensource.org/licenses/BSD-3-Clause
 | |
|  */
 | |
| exports.SourceMapGenerator = __webpack_require__(9425).SourceMapGenerator;
 | |
| exports.SourceMapConsumer = __webpack_require__(5155).SourceMapConsumer;
 | |
| exports.SourceNode = __webpack_require__(2616).SourceNode;
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4294:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| module.exports = __webpack_require__(4219);
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4219:
 | |
| /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| var net = __webpack_require__(1631);
 | |
| var tls = __webpack_require__(4016);
 | |
| var http = __webpack_require__(8605);
 | |
| var https = __webpack_require__(7211);
 | |
| var events = __webpack_require__(8614);
 | |
| var assert = __webpack_require__(2357);
 | |
| var util = __webpack_require__(1669);
 | |
| 
 | |
| 
 | |
| exports.httpOverHttp = httpOverHttp;
 | |
| exports.httpsOverHttp = httpsOverHttp;
 | |
| exports.httpOverHttps = httpOverHttps;
 | |
| exports.httpsOverHttps = httpsOverHttps;
 | |
| 
 | |
| 
 | |
| function httpOverHttp(options) {
 | |
|   var agent = new TunnelingAgent(options);
 | |
|   agent.request = http.request;
 | |
|   return agent;
 | |
| }
 | |
| 
 | |
| function httpsOverHttp(options) {
 | |
|   var agent = new TunnelingAgent(options);
 | |
|   agent.request = http.request;
 | |
|   agent.createSocket = createSecureSocket;
 | |
|   agent.defaultPort = 443;
 | |
|   return agent;
 | |
| }
 | |
| 
 | |
| function httpOverHttps(options) {
 | |
|   var agent = new TunnelingAgent(options);
 | |
|   agent.request = https.request;
 | |
|   return agent;
 | |
| }
 | |
| 
 | |
| function httpsOverHttps(options) {
 | |
|   var agent = new TunnelingAgent(options);
 | |
|   agent.request = https.request;
 | |
|   agent.createSocket = createSecureSocket;
 | |
|   agent.defaultPort = 443;
 | |
|   return agent;
 | |
| }
 | |
| 
 | |
| 
 | |
| function TunnelingAgent(options) {
 | |
|   var self = this;
 | |
|   self.options = options || {};
 | |
|   self.proxyOptions = self.options.proxy || {};
 | |
|   self.maxSockets = self.options.maxSockets || http.Agent.defaultMaxSockets;
 | |
|   self.requests = [];
 | |
|   self.sockets = [];
 | |
| 
 | |
|   self.on('free', function onFree(socket, host, port, localAddress) {
 | |
|     var options = toOptions(host, port, localAddress);
 | |
|     for (var i = 0, len = self.requests.length; i < len; ++i) {
 | |
|       var pending = self.requests[i];
 | |
|       if (pending.host === options.host && pending.port === options.port) {
 | |
|         // Detect the request to connect same origin server,
 | |
|         // reuse the connection.
 | |
|         self.requests.splice(i, 1);
 | |
|         pending.request.onSocket(socket);
 | |
|         return;
 | |
|       }
 | |
|     }
 | |
|     socket.destroy();
 | |
|     self.removeSocket(socket);
 | |
|   });
 | |
| }
 | |
| util.inherits(TunnelingAgent, events.EventEmitter);
 | |
| 
 | |
| TunnelingAgent.prototype.addRequest = function addRequest(req, host, port, localAddress) {
 | |
|   var self = this;
 | |
|   var options = mergeOptions({request: req}, self.options, toOptions(host, port, localAddress));
 | |
| 
 | |
|   if (self.sockets.length >= this.maxSockets) {
 | |
|     // We are over limit so we'll add it to the queue.
 | |
|     self.requests.push(options);
 | |
|     return;
 | |
|   }
 | |
| 
 | |
|   // If we are under maxSockets create a new one.
 | |
|   self.createSocket(options, function(socket) {
 | |
|     socket.on('free', onFree);
 | |
|     socket.on('close', onCloseOrRemove);
 | |
|     socket.on('agentRemove', onCloseOrRemove);
 | |
|     req.onSocket(socket);
 | |
| 
 | |
|     function onFree() {
 | |
|       self.emit('free', socket, options);
 | |
|     }
 | |
| 
 | |
|     function onCloseOrRemove(err) {
 | |
|       self.removeSocket(socket);
 | |
|       socket.removeListener('free', onFree);
 | |
|       socket.removeListener('close', onCloseOrRemove);
 | |
|       socket.removeListener('agentRemove', onCloseOrRemove);
 | |
|     }
 | |
|   });
 | |
| };
 | |
| 
 | |
| TunnelingAgent.prototype.createSocket = function createSocket(options, cb) {
 | |
|   var self = this;
 | |
|   var placeholder = {};
 | |
|   self.sockets.push(placeholder);
 | |
| 
 | |
|   var connectOptions = mergeOptions({}, self.proxyOptions, {
 | |
|     method: 'CONNECT',
 | |
|     path: options.host + ':' + options.port,
 | |
|     agent: false,
 | |
|     headers: {
 | |
|       host: options.host + ':' + options.port
 | |
|     }
 | |
|   });
 | |
|   if (options.localAddress) {
 | |
|     connectOptions.localAddress = options.localAddress;
 | |
|   }
 | |
|   if (connectOptions.proxyAuth) {
 | |
|     connectOptions.headers = connectOptions.headers || {};
 | |
|     connectOptions.headers['Proxy-Authorization'] = 'Basic ' +
 | |
|         new Buffer(connectOptions.proxyAuth).toString('base64');
 | |
|   }
 | |
| 
 | |
|   debug('making CONNECT request');
 | |
|   var connectReq = self.request(connectOptions);
 | |
|   connectReq.useChunkedEncodingByDefault = false; // for v0.6
 | |
|   connectReq.once('response', onResponse); // for v0.6
 | |
|   connectReq.once('upgrade', onUpgrade);   // for v0.6
 | |
|   connectReq.once('connect', onConnect);   // for v0.7 or later
 | |
|   connectReq.once('error', onError);
 | |
|   connectReq.end();
 | |
| 
 | |
|   function onResponse(res) {
 | |
|     // Very hacky. This is necessary to avoid http-parser leaks.
 | |
|     res.upgrade = true;
 | |
|   }
 | |
| 
 | |
|   function onUpgrade(res, socket, head) {
 | |
|     // Hacky.
 | |
|     process.nextTick(function() {
 | |
|       onConnect(res, socket, head);
 | |
|     });
 | |
|   }
 | |
| 
 | |
|   function onConnect(res, socket, head) {
 | |
|     connectReq.removeAllListeners();
 | |
|     socket.removeAllListeners();
 | |
| 
 | |
|     if (res.statusCode !== 200) {
 | |
|       debug('tunneling socket could not be established, statusCode=%d',
 | |
|         res.statusCode);
 | |
|       socket.destroy();
 | |
|       var error = new Error('tunneling socket could not be established, ' +
 | |
|         'statusCode=' + res.statusCode);
 | |
|       error.code = 'ECONNRESET';
 | |
|       options.request.emit('error', error);
 | |
|       self.removeSocket(placeholder);
 | |
|       return;
 | |
|     }
 | |
|     if (head.length > 0) {
 | |
|       debug('got illegal response body from proxy');
 | |
|       socket.destroy();
 | |
|       var error = new Error('got illegal response body from proxy');
 | |
|       error.code = 'ECONNRESET';
 | |
|       options.request.emit('error', error);
 | |
|       self.removeSocket(placeholder);
 | |
|       return;
 | |
|     }
 | |
|     debug('tunneling connection has established');
 | |
|     self.sockets[self.sockets.indexOf(placeholder)] = socket;
 | |
|     return cb(socket);
 | |
|   }
 | |
| 
 | |
|   function onError(cause) {
 | |
|     connectReq.removeAllListeners();
 | |
| 
 | |
|     debug('tunneling socket could not be established, cause=%s\n',
 | |
|           cause.message, cause.stack);
 | |
|     var error = new Error('tunneling socket could not be established, ' +
 | |
|                           'cause=' + cause.message);
 | |
|     error.code = 'ECONNRESET';
 | |
|     options.request.emit('error', error);
 | |
|     self.removeSocket(placeholder);
 | |
|   }
 | |
| };
 | |
| 
 | |
| TunnelingAgent.prototype.removeSocket = function removeSocket(socket) {
 | |
|   var pos = this.sockets.indexOf(socket)
 | |
|   if (pos === -1) {
 | |
|     return;
 | |
|   }
 | |
|   this.sockets.splice(pos, 1);
 | |
| 
 | |
|   var pending = this.requests.shift();
 | |
|   if (pending) {
 | |
|     // If we have pending requests and a socket gets closed a new one
 | |
|     // needs to be created to take over in the pool for the one that closed.
 | |
|     this.createSocket(pending, function(socket) {
 | |
|       pending.request.onSocket(socket);
 | |
|     });
 | |
|   }
 | |
| };
 | |
| 
 | |
| function createSecureSocket(options, cb) {
 | |
|   var self = this;
 | |
|   TunnelingAgent.prototype.createSocket.call(self, options, function(socket) {
 | |
|     var hostHeader = options.request.getHeader('host');
 | |
|     var tlsOptions = mergeOptions({}, self.options, {
 | |
|       socket: socket,
 | |
|       servername: hostHeader ? hostHeader.replace(/:.*$/, '') : options.host
 | |
|     });
 | |
| 
 | |
|     // 0 is dummy port for v0.6
 | |
|     var secureSocket = tls.connect(0, tlsOptions);
 | |
|     self.sockets[self.sockets.indexOf(socket)] = secureSocket;
 | |
|     cb(secureSocket);
 | |
|   });
 | |
| }
 | |
| 
 | |
| 
 | |
| function toOptions(host, port, localAddress) {
 | |
|   if (typeof host === 'string') { // since v0.10
 | |
|     return {
 | |
|       host: host,
 | |
|       port: port,
 | |
|       localAddress: localAddress
 | |
|     };
 | |
|   }
 | |
|   return host; // for v0.11 or later
 | |
| }
 | |
| 
 | |
| function mergeOptions(target) {
 | |
|   for (var i = 1, len = arguments.length; i < len; ++i) {
 | |
|     var overrides = arguments[i];
 | |
|     if (typeof overrides === 'object') {
 | |
|       var keys = Object.keys(overrides);
 | |
|       for (var j = 0, keyLen = keys.length; j < keyLen; ++j) {
 | |
|         var k = keys[j];
 | |
|         if (overrides[k] !== undefined) {
 | |
|           target[k] = overrides[k];
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   return target;
 | |
| }
 | |
| 
 | |
| 
 | |
| var debug;
 | |
| if (process.env.NODE_DEBUG && /\btunnel\b/.test(process.env.NODE_DEBUG)) {
 | |
|   debug = function() {
 | |
|     var args = Array.prototype.slice.call(arguments);
 | |
|     if (typeof args[0] === 'string') {
 | |
|       args[0] = 'TUNNEL: ' + args[0];
 | |
|     } else {
 | |
|       args.unshift('TUNNEL:');
 | |
|     }
 | |
|     console.error.apply(console, args);
 | |
|   }
 | |
| } else {
 | |
|   debug = function() {};
 | |
| }
 | |
| exports.debug = debug; // for test
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5030:
 | |
| /***/ ((__unused_webpack_module, exports) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| 
 | |
| Object.defineProperty(exports, "__esModule", ({ value: true }));
 | |
| 
 | |
| function getUserAgent() {
 | |
|   if (typeof navigator === "object" && "userAgent" in navigator) {
 | |
|     return navigator.userAgent;
 | |
|   }
 | |
| 
 | |
|   if (typeof process === "object" && "version" in process) {
 | |
|     return `Node.js/${process.version.substr(1)} (${process.platform}; ${process.arch})`;
 | |
|   }
 | |
| 
 | |
|   return "<environment undetectable>";
 | |
| }
 | |
| 
 | |
| exports.getUserAgent = getUserAgent;
 | |
| //# sourceMappingURL=index.js.map
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2940:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| // Returns a wrapper function that returns a wrapped callback
 | |
| // The wrapper function should do some stuff, and return a
 | |
| // presumably different callback function.
 | |
| // This makes sure that own properties are retained, so that
 | |
| // decorations and such are not lost along the way.
 | |
| module.exports = wrappy
 | |
| function wrappy (fn, cb) {
 | |
|   if (fn && cb) return wrappy(fn)(cb)
 | |
| 
 | |
|   if (typeof fn !== 'function')
 | |
|     throw new TypeError('need wrapper function')
 | |
| 
 | |
|   Object.keys(fn).forEach(function (k) {
 | |
|     wrapper[k] = fn[k]
 | |
|   })
 | |
| 
 | |
|   return wrapper
 | |
| 
 | |
|   function wrapper() {
 | |
|     var args = new Array(arguments.length)
 | |
|     for (var i = 0; i < args.length; i++) {
 | |
|       args[i] = arguments[i]
 | |
|     }
 | |
|     var ret = fn.apply(this, args)
 | |
|     var cb = args[args.length-1]
 | |
|     if (typeof ret === 'function' && ret !== cb) {
 | |
|       Object.keys(cb).forEach(function (k) {
 | |
|         ret[k] = cb[k]
 | |
|       })
 | |
|     }
 | |
|     return ret
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4091:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| module.exports = function (Yallist) {
 | |
|   Yallist.prototype[Symbol.iterator] = function* () {
 | |
|     for (let walker = this.head; walker; walker = walker.next) {
 | |
|       yield walker.value
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 665:
 | |
| /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
 | |
| 
 | |
| "use strict";
 | |
| 
 | |
| module.exports = Yallist
 | |
| 
 | |
| Yallist.Node = Node
 | |
| Yallist.create = Yallist
 | |
| 
 | |
| function Yallist (list) {
 | |
|   var self = this
 | |
|   if (!(self instanceof Yallist)) {
 | |
|     self = new Yallist()
 | |
|   }
 | |
| 
 | |
|   self.tail = null
 | |
|   self.head = null
 | |
|   self.length = 0
 | |
| 
 | |
|   if (list && typeof list.forEach === 'function') {
 | |
|     list.forEach(function (item) {
 | |
|       self.push(item)
 | |
|     })
 | |
|   } else if (arguments.length > 0) {
 | |
|     for (var i = 0, l = arguments.length; i < l; i++) {
 | |
|       self.push(arguments[i])
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return self
 | |
| }
 | |
| 
 | |
| Yallist.prototype.removeNode = function (node) {
 | |
|   if (node.list !== this) {
 | |
|     throw new Error('removing node which does not belong to this list')
 | |
|   }
 | |
| 
 | |
|   var next = node.next
 | |
|   var prev = node.prev
 | |
| 
 | |
|   if (next) {
 | |
|     next.prev = prev
 | |
|   }
 | |
| 
 | |
|   if (prev) {
 | |
|     prev.next = next
 | |
|   }
 | |
| 
 | |
|   if (node === this.head) {
 | |
|     this.head = next
 | |
|   }
 | |
|   if (node === this.tail) {
 | |
|     this.tail = prev
 | |
|   }
 | |
| 
 | |
|   node.list.length--
 | |
|   node.next = null
 | |
|   node.prev = null
 | |
|   node.list = null
 | |
| 
 | |
|   return next
 | |
| }
 | |
| 
 | |
| Yallist.prototype.unshiftNode = function (node) {
 | |
|   if (node === this.head) {
 | |
|     return
 | |
|   }
 | |
| 
 | |
|   if (node.list) {
 | |
|     node.list.removeNode(node)
 | |
|   }
 | |
| 
 | |
|   var head = this.head
 | |
|   node.list = this
 | |
|   node.next = head
 | |
|   if (head) {
 | |
|     head.prev = node
 | |
|   }
 | |
| 
 | |
|   this.head = node
 | |
|   if (!this.tail) {
 | |
|     this.tail = node
 | |
|   }
 | |
|   this.length++
 | |
| }
 | |
| 
 | |
| Yallist.prototype.pushNode = function (node) {
 | |
|   if (node === this.tail) {
 | |
|     return
 | |
|   }
 | |
| 
 | |
|   if (node.list) {
 | |
|     node.list.removeNode(node)
 | |
|   }
 | |
| 
 | |
|   var tail = this.tail
 | |
|   node.list = this
 | |
|   node.prev = tail
 | |
|   if (tail) {
 | |
|     tail.next = node
 | |
|   }
 | |
| 
 | |
|   this.tail = node
 | |
|   if (!this.head) {
 | |
|     this.head = node
 | |
|   }
 | |
|   this.length++
 | |
| }
 | |
| 
 | |
| Yallist.prototype.push = function () {
 | |
|   for (var i = 0, l = arguments.length; i < l; i++) {
 | |
|     push(this, arguments[i])
 | |
|   }
 | |
|   return this.length
 | |
| }
 | |
| 
 | |
| Yallist.prototype.unshift = function () {
 | |
|   for (var i = 0, l = arguments.length; i < l; i++) {
 | |
|     unshift(this, arguments[i])
 | |
|   }
 | |
|   return this.length
 | |
| }
 | |
| 
 | |
| Yallist.prototype.pop = function () {
 | |
|   if (!this.tail) {
 | |
|     return undefined
 | |
|   }
 | |
| 
 | |
|   var res = this.tail.value
 | |
|   this.tail = this.tail.prev
 | |
|   if (this.tail) {
 | |
|     this.tail.next = null
 | |
|   } else {
 | |
|     this.head = null
 | |
|   }
 | |
|   this.length--
 | |
|   return res
 | |
| }
 | |
| 
 | |
| Yallist.prototype.shift = function () {
 | |
|   if (!this.head) {
 | |
|     return undefined
 | |
|   }
 | |
| 
 | |
|   var res = this.head.value
 | |
|   this.head = this.head.next
 | |
|   if (this.head) {
 | |
|     this.head.prev = null
 | |
|   } else {
 | |
|     this.tail = null
 | |
|   }
 | |
|   this.length--
 | |
|   return res
 | |
| }
 | |
| 
 | |
| Yallist.prototype.forEach = function (fn, thisp) {
 | |
|   thisp = thisp || this
 | |
|   for (var walker = this.head, i = 0; walker !== null; i++) {
 | |
|     fn.call(thisp, walker.value, i, this)
 | |
|     walker = walker.next
 | |
|   }
 | |
| }
 | |
| 
 | |
| Yallist.prototype.forEachReverse = function (fn, thisp) {
 | |
|   thisp = thisp || this
 | |
|   for (var walker = this.tail, i = this.length - 1; walker !== null; i--) {
 | |
|     fn.call(thisp, walker.value, i, this)
 | |
|     walker = walker.prev
 | |
|   }
 | |
| }
 | |
| 
 | |
| Yallist.prototype.get = function (n) {
 | |
|   for (var i = 0, walker = this.head; walker !== null && i < n; i++) {
 | |
|     // abort out of the list early if we hit a cycle
 | |
|     walker = walker.next
 | |
|   }
 | |
|   if (i === n && walker !== null) {
 | |
|     return walker.value
 | |
|   }
 | |
| }
 | |
| 
 | |
| Yallist.prototype.getReverse = function (n) {
 | |
|   for (var i = 0, walker = this.tail; walker !== null && i < n; i++) {
 | |
|     // abort out of the list early if we hit a cycle
 | |
|     walker = walker.prev
 | |
|   }
 | |
|   if (i === n && walker !== null) {
 | |
|     return walker.value
 | |
|   }
 | |
| }
 | |
| 
 | |
| Yallist.prototype.map = function (fn, thisp) {
 | |
|   thisp = thisp || this
 | |
|   var res = new Yallist()
 | |
|   for (var walker = this.head; walker !== null;) {
 | |
|     res.push(fn.call(thisp, walker.value, this))
 | |
|     walker = walker.next
 | |
|   }
 | |
|   return res
 | |
| }
 | |
| 
 | |
| Yallist.prototype.mapReverse = function (fn, thisp) {
 | |
|   thisp = thisp || this
 | |
|   var res = new Yallist()
 | |
|   for (var walker = this.tail; walker !== null;) {
 | |
|     res.push(fn.call(thisp, walker.value, this))
 | |
|     walker = walker.prev
 | |
|   }
 | |
|   return res
 | |
| }
 | |
| 
 | |
| Yallist.prototype.reduce = function (fn, initial) {
 | |
|   var acc
 | |
|   var walker = this.head
 | |
|   if (arguments.length > 1) {
 | |
|     acc = initial
 | |
|   } else if (this.head) {
 | |
|     walker = this.head.next
 | |
|     acc = this.head.value
 | |
|   } else {
 | |
|     throw new TypeError('Reduce of empty list with no initial value')
 | |
|   }
 | |
| 
 | |
|   for (var i = 0; walker !== null; i++) {
 | |
|     acc = fn(acc, walker.value, i)
 | |
|     walker = walker.next
 | |
|   }
 | |
| 
 | |
|   return acc
 | |
| }
 | |
| 
 | |
| Yallist.prototype.reduceReverse = function (fn, initial) {
 | |
|   var acc
 | |
|   var walker = this.tail
 | |
|   if (arguments.length > 1) {
 | |
|     acc = initial
 | |
|   } else if (this.tail) {
 | |
|     walker = this.tail.prev
 | |
|     acc = this.tail.value
 | |
|   } else {
 | |
|     throw new TypeError('Reduce of empty list with no initial value')
 | |
|   }
 | |
| 
 | |
|   for (var i = this.length - 1; walker !== null; i--) {
 | |
|     acc = fn(acc, walker.value, i)
 | |
|     walker = walker.prev
 | |
|   }
 | |
| 
 | |
|   return acc
 | |
| }
 | |
| 
 | |
| Yallist.prototype.toArray = function () {
 | |
|   var arr = new Array(this.length)
 | |
|   for (var i = 0, walker = this.head; walker !== null; i++) {
 | |
|     arr[i] = walker.value
 | |
|     walker = walker.next
 | |
|   }
 | |
|   return arr
 | |
| }
 | |
| 
 | |
| Yallist.prototype.toArrayReverse = function () {
 | |
|   var arr = new Array(this.length)
 | |
|   for (var i = 0, walker = this.tail; walker !== null; i++) {
 | |
|     arr[i] = walker.value
 | |
|     walker = walker.prev
 | |
|   }
 | |
|   return arr
 | |
| }
 | |
| 
 | |
| Yallist.prototype.slice = function (from, to) {
 | |
|   to = to || this.length
 | |
|   if (to < 0) {
 | |
|     to += this.length
 | |
|   }
 | |
|   from = from || 0
 | |
|   if (from < 0) {
 | |
|     from += this.length
 | |
|   }
 | |
|   var ret = new Yallist()
 | |
|   if (to < from || to < 0) {
 | |
|     return ret
 | |
|   }
 | |
|   if (from < 0) {
 | |
|     from = 0
 | |
|   }
 | |
|   if (to > this.length) {
 | |
|     to = this.length
 | |
|   }
 | |
|   for (var i = 0, walker = this.head; walker !== null && i < from; i++) {
 | |
|     walker = walker.next
 | |
|   }
 | |
|   for (; walker !== null && i < to; i++, walker = walker.next) {
 | |
|     ret.push(walker.value)
 | |
|   }
 | |
|   return ret
 | |
| }
 | |
| 
 | |
| Yallist.prototype.sliceReverse = function (from, to) {
 | |
|   to = to || this.length
 | |
|   if (to < 0) {
 | |
|     to += this.length
 | |
|   }
 | |
|   from = from || 0
 | |
|   if (from < 0) {
 | |
|     from += this.length
 | |
|   }
 | |
|   var ret = new Yallist()
 | |
|   if (to < from || to < 0) {
 | |
|     return ret
 | |
|   }
 | |
|   if (from < 0) {
 | |
|     from = 0
 | |
|   }
 | |
|   if (to > this.length) {
 | |
|     to = this.length
 | |
|   }
 | |
|   for (var i = this.length, walker = this.tail; walker !== null && i > to; i--) {
 | |
|     walker = walker.prev
 | |
|   }
 | |
|   for (; walker !== null && i > from; i--, walker = walker.prev) {
 | |
|     ret.push(walker.value)
 | |
|   }
 | |
|   return ret
 | |
| }
 | |
| 
 | |
| Yallist.prototype.splice = function (start, deleteCount, ...nodes) {
 | |
|   if (start > this.length) {
 | |
|     start = this.length - 1
 | |
|   }
 | |
|   if (start < 0) {
 | |
|     start = this.length + start;
 | |
|   }
 | |
| 
 | |
|   for (var i = 0, walker = this.head; walker !== null && i < start; i++) {
 | |
|     walker = walker.next
 | |
|   }
 | |
| 
 | |
|   var ret = []
 | |
|   for (var i = 0; walker && i < deleteCount; i++) {
 | |
|     ret.push(walker.value)
 | |
|     walker = this.removeNode(walker)
 | |
|   }
 | |
|   if (walker === null) {
 | |
|     walker = this.tail
 | |
|   }
 | |
| 
 | |
|   if (walker !== this.head && walker !== this.tail) {
 | |
|     walker = walker.prev
 | |
|   }
 | |
| 
 | |
|   for (var i = 0; i < nodes.length; i++) {
 | |
|     walker = insert(this, walker, nodes[i])
 | |
|   }
 | |
|   return ret;
 | |
| }
 | |
| 
 | |
| Yallist.prototype.reverse = function () {
 | |
|   var head = this.head
 | |
|   var tail = this.tail
 | |
|   for (var walker = head; walker !== null; walker = walker.prev) {
 | |
|     var p = walker.prev
 | |
|     walker.prev = walker.next
 | |
|     walker.next = p
 | |
|   }
 | |
|   this.head = tail
 | |
|   this.tail = head
 | |
|   return this
 | |
| }
 | |
| 
 | |
| function insert (self, node, value) {
 | |
|   var inserted = node === self.head ?
 | |
|     new Node(value, null, node, self) :
 | |
|     new Node(value, node, node.next, self)
 | |
| 
 | |
|   if (inserted.next === null) {
 | |
|     self.tail = inserted
 | |
|   }
 | |
|   if (inserted.prev === null) {
 | |
|     self.head = inserted
 | |
|   }
 | |
| 
 | |
|   self.length++
 | |
| 
 | |
|   return inserted
 | |
| }
 | |
| 
 | |
| function push (self, item) {
 | |
|   self.tail = new Node(item, self.tail, null, self)
 | |
|   if (!self.head) {
 | |
|     self.head = self.tail
 | |
|   }
 | |
|   self.length++
 | |
| }
 | |
| 
 | |
| function unshift (self, item) {
 | |
|   self.head = new Node(item, null, self.head, self)
 | |
|   if (!self.tail) {
 | |
|     self.tail = self.head
 | |
|   }
 | |
|   self.length++
 | |
| }
 | |
| 
 | |
| function Node (value, prev, next, list) {
 | |
|   if (!(this instanceof Node)) {
 | |
|     return new Node(value, prev, next, list)
 | |
|   }
 | |
| 
 | |
|   this.list = list
 | |
|   this.value = value
 | |
| 
 | |
|   if (prev) {
 | |
|     prev.next = this
 | |
|     this.prev = prev
 | |
|   } else {
 | |
|     this.prev = null
 | |
|   }
 | |
| 
 | |
|   if (next) {
 | |
|     next.prev = this
 | |
|     this.next = next
 | |
|   } else {
 | |
|     this.next = null
 | |
|   }
 | |
| }
 | |
| 
 | |
| try {
 | |
|   // add if support for Symbol.iterator is present
 | |
|   __webpack_require__(4091)(Yallist)
 | |
| } catch (er) {}
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2877:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| module.exports = eval("require")("encoding");
 | |
| 
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2357:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("assert");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8614:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("events");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5747:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("fs");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8605:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("http");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 7211:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("https");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1631:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("net");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2087:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("os");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 5622:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("path");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 2413:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("stream");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 4016:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("tls");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8835:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("url");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 1669:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("util");
 | |
| 
 | |
| /***/ }),
 | |
| 
 | |
| /***/ 8761:
 | |
| /***/ ((module) => {
 | |
| 
 | |
| "use strict";
 | |
| module.exports = require("zlib");
 | |
| 
 | |
| /***/ })
 | |
| 
 | |
| /******/ 	});
 | |
| /************************************************************************/
 | |
| /******/ 	// The module cache
 | |
| /******/ 	var __webpack_module_cache__ = {};
 | |
| /******/ 	
 | |
| /******/ 	// The require function
 | |
| /******/ 	function __webpack_require__(moduleId) {
 | |
| /******/ 		// Check if module is in cache
 | |
| /******/ 		if(__webpack_module_cache__[moduleId]) {
 | |
| /******/ 			return __webpack_module_cache__[moduleId].exports;
 | |
| /******/ 		}
 | |
| /******/ 		// Create a new module (and put it into the cache)
 | |
| /******/ 		var module = __webpack_module_cache__[moduleId] = {
 | |
| /******/ 			id: moduleId,
 | |
| /******/ 			loaded: false,
 | |
| /******/ 			exports: {}
 | |
| /******/ 		};
 | |
| /******/ 	
 | |
| /******/ 		// Execute the module function
 | |
| /******/ 		var threw = true;
 | |
| /******/ 		try {
 | |
| /******/ 			__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
 | |
| /******/ 			threw = false;
 | |
| /******/ 		} finally {
 | |
| /******/ 			if(threw) delete __webpack_module_cache__[moduleId];
 | |
| /******/ 		}
 | |
| /******/ 	
 | |
| /******/ 		// Flag the module as loaded
 | |
| /******/ 		module.loaded = true;
 | |
| /******/ 	
 | |
| /******/ 		// Return the exports of the module
 | |
| /******/ 		return module.exports;
 | |
| /******/ 	}
 | |
| /******/ 	
 | |
| /************************************************************************/
 | |
| /******/ 	/* webpack/runtime/node module decorator */
 | |
| /******/ 	(() => {
 | |
| /******/ 		__webpack_require__.nmd = (module) => {
 | |
| /******/ 			module.paths = [];
 | |
| /******/ 			if (!module.children) module.children = [];
 | |
| /******/ 			return module;
 | |
| /******/ 		};
 | |
| /******/ 	})();
 | |
| /******/ 	
 | |
| /******/ 	/* webpack/runtime/compat */
 | |
| /******/ 	
 | |
| /******/ 	__webpack_require__.ab = __dirname + "/";/************************************************************************/
 | |
| /******/ 	// module exports must be returned from runtime so entry inlining is disabled
 | |
| /******/ 	// startup
 | |
| /******/ 	// Load entry module and return exports
 | |
| /******/ 	return __webpack_require__(3109);
 | |
| /******/ })()
 | |
| ; | 
