diff --git a/CHANGELOG.md b/CHANGELOG.md index f914aa5e..9e636083 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [9.0.1](https://github.com/AtomLinter/linter-eslint/compare/v9.0.0...v9.0.1) (2022-03-21) + + +### Bug Fixes + +* detect ESLint >= 8 and tell the user about linter-eslint-node ([#1464](https://github.com/AtomLinter/linter-eslint/issues/1464)) ([1297ab6](https://github.com/AtomLinter/linter-eslint/commit/1297ab6d91679a68b4c37834dc303a741cd13844)) + # [9.0.0](https://github.com/AtomLinter/linter-eslint/compare/v8.6.6...v9.0.0) (2021-10-30) diff --git a/dist/helpers.js b/dist/helpers.js index 38ee0774..3cedb375 100644 --- a/dist/helpers.js +++ b/dist/helpers.js @@ -7,6 +7,7 @@ exports.generateDebugString = generateDebugString; exports.generateUserMessage = generateUserMessage; exports.getDebugInfo = getDebugInfo; exports.handleError = handleError; +exports.isIncompatibleEslint = isIncompatibleEslint; exports.killWorker = killWorker; exports.processESLintMessages = processESLintMessages; exports.processJobResponse = processJobResponse; @@ -24,6 +25,8 @@ var _util = require("util"); var _atom = require("atom"); +var _electron = require("electron"); + var _rules = _interopRequireDefault(require("./rules")); var _editor = require("./validate/editor"); @@ -31,10 +34,13 @@ var _editor = require("./validate/editor"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // eslint-disable-next-line import/no-extraneous-dependencies, import/extensions +// eslint-disable-next-line import/no-unresolved const asyncRandomBytes = (0, _util.promisify)(_crypto.randomBytes); const rules = new _rules.default(); exports.rules = rules; let worker = null; +let isIncompatibleEslintVersion = false; +let seenIncompatibleVersionNotification = false; /** * Start the worker process if it hasn't already been started */ @@ -73,6 +79,10 @@ function killWorker() { worker = null; } } + +function isIncompatibleEslint() { + return isIncompatibleEslintVersion; +} /** * Send a job to the worker and return the results * @param {Object} config Configuration for the job to send to the worker @@ -102,12 +112,14 @@ async function sendJob(config) { // 'task:error' event const errSub = worker.on(`workerError:${config.emitKey}`, ({ msg, - stack + stack, + name }) => { // Re-throw errors from the task const error = new Error(msg); // Set the stack to the one given to us by the worker error.stack = stack; + error.name = name; errSub.dispose(); // eslint-disable-next-line no-use-before-define responseSub.dispose(); @@ -217,6 +229,43 @@ function generateUserMessage(textEditor, options) { } }]; } + +function isNewPackageInstalled() { + return atom.packages.isPackageLoaded('linter-eslint-node') || atom.packages.isPackageDisabled('linter-eslint-node'); +} + +function showIncompatibleVersionNotification(message) { + const notificationEnabled = atom.config.get('linter-eslint.advanced.showIncompatibleVersionNotification'); + + if (!notificationEnabled || seenIncompatibleVersionNotification || isNewPackageInstalled()) { + return; + } // Show this message only once per session. + + + seenIncompatibleVersionNotification = true; + const notification = atom.notifications.addWarning('linter-eslint: Incompatible version', { + description: message, + dismissable: true, + buttons: [{ + text: 'Install linter-eslint-node', + + onDidClick() { + _electron.shell.openExternal('https://atom.io/packages/linter-eslint-node'); + + notification.dismiss(); + } + + }, { + text: 'Don\'t show this notification again', + + onDidClick() { + atom.config.set('linter-eslint.advanced.showIncompatibleVersionNotification', false); + notification.dismiss(); + } + + }] + }); +} /** * Generates a message to the user in order to nicely display the Error being * thrown instead of depending on generic error handling. @@ -229,11 +278,22 @@ function generateUserMessage(textEditor, options) { function handleError(textEditor, error) { const { stack, - message - } = error; // Only show the first line of the message as the excerpt + message, + name + } = error; // We want this specific worker error to show up as a notification so that we + // can include a button for installing the new package. + + if (name === 'IncompatibleESLintError') { + isIncompatibleEslintVersion = true; + killWorker(); + showIncompatibleVersionNotification(message); + return; + } // Only show the first line of the message as the excerpt + const excerpt = `Error while running ESLint: ${message.split('\n')[0]}.`; - const description = `
${message}\n
${stack}
`; + const description = `
${message}\n
${stack}
`; // eslint-disable-next-line consistent-return + return generateUserMessage(textEditor, { severity: 'error', excerpt, @@ -407,4 +467,4 @@ async function processJobResponse(response, textEditor, showRule) { return processESLintMessages(response.messages, textEditor, showRule); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLmpzIl0sIm5hbWVzIjpbImFzeW5jUmFuZG9tQnl0ZXMiLCJyYW5kb21CeXRlcyIsInJ1bGVzIiwiUnVsZXMiLCJ3b3JrZXIiLCJzdGFydFdvcmtlciIsIlRhc2siLCJyZXF1aXJlIiwicmVzb2x2ZSIsIm9uIiwib2JqIiwiY29uc29sZSIsImxvZyIsIkpTT04iLCJwYXJzZSIsImV4Iiwic3RhcnRlZCIsInN0YXJ0Iiwia2lsbFdvcmtlciIsInRlcm1pbmF0ZSIsInNlbmRKb2IiLCJjb25maWciLCJjaGlsZFByb2Nlc3MiLCJjb25uZWN0ZWQiLCJlbWl0S2V5IiwidG9TdHJpbmciLCJQcm9taXNlIiwicmVqZWN0IiwiZXJyU3ViIiwibXNnIiwic3RhY2siLCJlcnJvciIsIkVycm9yIiwiZGlzcG9zZSIsInJlc3BvbnNlU3ViIiwiZGF0YSIsInNlbmQiLCJlIiwiZ2V0RGVidWdJbmZvIiwidGV4dEVkaXRvciIsImF0b20iLCJ3b3Jrc3BhY2UiLCJnZXRBY3RpdmVUZXh0RWRpdG9yIiwiZmlsZVBhdGgiLCJlZGl0b3JTY29wZXMiLCJpc1RleHRFZGl0b3IiLCJnZXRQYXRoIiwiZ2V0TGFzdEN1cnNvciIsImdldFNjb3BlRGVzY3JpcHRvciIsImdldFNjb3Blc0FycmF5IiwicGFja2FnZVBhdGgiLCJwYWNrYWdlcyIsInJlc29sdmVQYWNrYWdlUGF0aCIsImxpbnRlckVzbGludE1ldGEiLCJ1bmRlZmluZWQiLCJ2ZXJzaW9uIiwiZ2V0IiwiaG91cnNTaW5jZVJlc3RhcnQiLCJNYXRoIiwicm91bmQiLCJwcm9jZXNzIiwidXB0aW1lIiwicmV0dXJuVmFsIiwicmVzcG9uc2UiLCJ0eXBlIiwiYXRvbVZlcnNpb24iLCJnZXRWZXJzaW9uIiwibGludGVyRXNsaW50VmVyc2lvbiIsImxpbnRlckVzbGludENvbmZpZyIsImVzbGludFZlcnNpb24iLCJwYXRoIiwicGxhdGZvcm0iLCJlc2xpbnRUeXBlIiwiZXNsaW50UGF0aCIsIm5vdGlmaWNhdGlvbnMiLCJhZGRFcnJvciIsImdlbmVyYXRlRGVidWdTdHJpbmciLCJkZWJ1ZyIsImRldGFpbHMiLCJzdHJpbmdpZnkiLCJqb2luIiwiZ2VuZXJhdGVVc2VyTWVzc2FnZSIsIm9wdGlvbnMiLCJzZXZlcml0eSIsImV4Y2VycHQiLCJkZXNjcmlwdGlvbiIsImxvY2F0aW9uIiwiZmlsZSIsInBvc2l0aW9uIiwiaGFuZGxlRXJyb3IiLCJtZXNzYWdlIiwic3BsaXQiLCJnZW5lcmF0ZUludmFsaWRUcmFjZSIsIm1zZ0xpbmUiLCJtc2dDb2wiLCJtc2dFbmRMaW5lIiwibXNnRW5kQ29sIiwiZXNsaW50RnVsbFJhbmdlIiwicnVsZUlkIiwiZXJyTXNnUmFuZ2UiLCJyYW5nZVRleHQiLCJpc3N1ZVVSTCIsInRpdGxlVGV4dCIsInRpdGxlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYm9keSIsIm5ld0lzc3VlVVJMIiwidXJsIiwicHJvY2Vzc0VTTGludE1lc3NhZ2VzIiwibWVzc2FnZXMiLCJzaG93UnVsZSIsImFsbCIsIm1hcCIsImZhdGFsIiwib3JpZ2luYWxNZXNzYWdlIiwibGluZSIsImNvbHVtbiIsImZpeCIsImVuZExpbmUiLCJlbmRDb2x1bW4iLCJ0ZXh0QnVmZmVyIiwiZ2V0QnVmZmVyIiwibGludGVyRml4IiwiZml4UmFuZ2UiLCJSYW5nZSIsInBvc2l0aW9uRm9yQ2hhcmFjdGVySW5kZXgiLCJyYW5nZSIsInJlcGxhY2VXaXRoIiwidGV4dCIsIm1heCIsInJldCIsImdldFJ1bGVVcmwiLCJmaXhMaW5lRW5kaW5nIiwicnVsZUFwcGVuZGl4Iiwic29sdXRpb25zIiwiZXJyIiwicHJvY2Vzc0pvYlJlc3BvbnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVwbGFjZVJ1bGVzIiwidXBkYXRlZFJ1bGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7QUFIQTtBQUtBLE1B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LFNBQU9sQyxxQkFBcUIsQ0FBQzdDLFFBQVEsQ0FBQzhDLFFBQVYsRUFBb0J0RSxVQUFwQixFQUFnQ3VFLFFBQWhDLENBQTVCO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IGdlbmVyYXRlUmFuZ2UgfSBmcm9tICdhdG9tLWxpbnRlcidcbmltcG9ydCB7IHJhbmRvbUJ5dGVzIH0gZnJvbSAnY3J5cHRvJ1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMsIGltcG9ydC9leHRlbnNpb25zXG5pbXBvcnQgeyBSYW5nZSwgVGFzayB9IGZyb20gJ2F0b20nXG5pbXBvcnQgUnVsZXMgZnJvbSAnLi9ydWxlcydcbmltcG9ydCB7IHRocm93SWZJbnZhbGlkUG9pbnQgfSBmcm9tICcuL3ZhbGlkYXRlL2VkaXRvcidcblxuY29uc3QgYXN5bmNSYW5kb21CeXRlcyA9IHByb21pc2lmeShyYW5kb21CeXRlcylcbmV4cG9ydCBjb25zdCBydWxlcyA9IG5ldyBSdWxlcygpXG5sZXQgd29ya2VyID0gbnVsbFxuXG4vKipcbiAqIFN0YXJ0IHRoZSB3b3JrZXIgcHJvY2VzcyBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIHN0YXJ0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0V29ya2VyKCkge1xuICBpZiAod29ya2VyID09PSBudWxsKSB7XG4gICAgd29ya2VyID0gbmV3IFRhc2socmVxdWlyZS5yZXNvbHZlKCcuL3dvcmtlci5qcycpKVxuICB9XG5cbiAgd29ya2VyLm9uKCdsb2cnLCAob2JqKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUubG9nKEpTT04ucGFyc2Uob2JqKSlcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc29sZS5sb2cob2JqKVxuICAgIH1cbiAgfSlcblxuICBpZiAod29ya2VyLnN0YXJ0ZWQpIHtcbiAgICAvLyBXb3JrZXIgc3RhcnQgcmVxdWVzdCBoYXMgYWxyZWFkeSBiZWVuIHNlbnRcbiAgICByZXR1cm5cbiAgfVxuICAvLyBTZW5kIGVtcHR5IGFyZ3VtZW50cyBhcyB3ZSBkb24ndCB1c2UgdGhlbSBpbiB0aGUgd29ya2VyXG4gIHdvcmtlci5zdGFydChbXSlcblxuICAvLyBOT1RFOiBNb2RpZmllcyB0aGUgVGFzayBvZiB0aGUgd29ya2VyLCBidXQgaXQncyB0aGUgb25seSBjbGVhbiB3YXkgdG8gdHJhY2sgdGhpc1xuICB3b3JrZXIuc3RhcnRlZCA9IHRydWVcbn1cblxuLyoqXG4gKiBGb3JjZXMgdGhlIHdvcmtlciBUYXNrIHRvIGtpbGwgaXRzZWxmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBraWxsV29ya2VyKCkge1xuICBpZiAod29ya2VyICE9PSBudWxsKSB7XG4gICAgd29ya2VyLnRlcm1pbmF0ZSgpXG4gICAgd29ya2VyID0gbnVsbFxuICB9XG59XG5cbi8qKlxuICogU2VuZCBhIGpvYiB0byB0aGUgd29ya2VyIGFuZCByZXR1cm4gdGhlIHJlc3VsdHNcbiAqIEBwYXJhbSAge09iamVjdH0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBqb2IgdG8gc2VuZCB0byB0aGUgd29ya2VyXG4gKiBAcmV0dXJuIHtPYmplY3R8U3RyaW5nfEVycm9yfSAgICAgICAgVGhlIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgd29ya2VyXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZW5kSm9iKGNvbmZpZykge1xuICBpZiAod29ya2VyICYmICF3b3JrZXIuY2hpbGRQcm9jZXNzLmNvbm5lY3RlZCkge1xuICAgIC8vIFNvbWV0aW1lcyB0aGUgd29ya2VyIGRpZXMgYW5kIGJlY29tZXMgZGlzY29ubmVjdGVkXG4gICAgLy8gV2hlbiB0aGF0IGhhcHBlbnMsIGl0IHNlZW1zIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvIHJlY292ZXIgb3RoZXJcbiAgICAvLyB0aGFuIHRvIGtpbGwgdGhlIHdvcmtlciBhbmQgY3JlYXRlIGEgbmV3IG9uZS5cbiAgICBraWxsV29ya2VyKClcbiAgfVxuXG4gIC8vIEVuc3VyZSB0aGUgd29ya2VyIGlzIHN0YXJ0ZWRcbiAgc3RhcnRXb3JrZXIoKVxuXG4gIC8vIEV4cGFuZCB0aGUgY29uZmlnIHdpdGggYSB1bmlxdWUgSUQgdG8gZW1pdCBvblxuICAvLyBOT1RFOiBKb2JzIF9tdXN0XyBoYXZlIGEgdW5pcXVlIElEIGFzIHRoZXkgYXJlIGNvbXBsZXRlbHkgYXN5bmMgYW5kIHJlc3VsdHNcbiAgLy8gY2FuIGFycml2ZSBiYWNrIGluIGFueSBvcmRlci5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZy5lbWl0S2V5ID0gKGF3YWl0IGFzeW5jUmFuZG9tQnl0ZXMoNSkpLnRvU3RyaW5nKCdoZXgnKSAvLyA1IGJ5dGVzID0gMTAgaGV4IGNoYXJhY3RlcnNcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIC8vIEFsbCB3b3JrZXIgZXJyb3JzIGFyZSBjYXVnaHQgYW5kIHJlLWVtaXR0ZWQgYWxvbmcgd2l0aCB0aGVpciBhc3NvY2lhdGVkXG4gICAgLy8gZW1pdEtleSwgc28gdGhhdCB3ZSBkbyBub3QgY3JlYXRlIG11bHRpcGxlIGxpc3RlbmVycyBmb3IgdGhlIHNhbWVcbiAgICAvLyAndGFzazplcnJvcicgZXZlbnRcbiAgICBjb25zdCBlcnJTdWIgPSB3b3JrZXIub24oYHdvcmtlckVycm9yOiR7Y29uZmlnLmVtaXRLZXl9YCwgKHsgbXNnLCBzdGFjayB9KSA9PiB7XG4gICAgICAvLyBSZS10aHJvdyBlcnJvcnMgZnJvbSB0aGUgdGFza1xuICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobXNnKVxuICAgICAgLy8gU2V0IHRoZSBzdGFjayB0byB0aGUgb25lIGdpdmVuIHRvIHVzIGJ5IHRoZSB3b3JrZXJcbiAgICAgIGVycm9yLnN0YWNrID0gc3RhY2tcbiAgICAgIGVyclN1Yi5kaXNwb3NlKClcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgcmVzcG9uc2VTdWIuZGlzcG9zZSgpXG4gICAgICByZWplY3QoZXJyb3IpXG4gICAgfSlcbiAgICBjb25zdCByZXNwb25zZVN1YiA9IHdvcmtlci5vbihjb25maWcuZW1pdEtleSwgKGRhdGEpID0+IHtcbiAgICAgIGVyclN1Yi5kaXNwb3NlKClcbiAgICAgIHJlc3BvbnNlU3ViLmRpc3Bvc2UoKVxuICAgICAgcmVzb2x2ZShkYXRhKVxuICAgIH0pXG4gICAgLy8gU2VuZCB0aGUgam9iIG9uIHRvIHRoZSB3b3JrZXJcbiAgICB0cnkge1xuICAgICAgd29ya2VyLnNlbmQoY29uZmlnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVyclN1Yi5kaXNwb3NlKClcbiAgICAgIHJlc3BvbnNlU3ViLmRpc3Bvc2UoKVxuICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlYnVnSW5mbygpIHtcbiAgY29uc3QgdGV4dEVkaXRvciA9IGF0b20ud29ya3NwYWNlLmdldEFjdGl2ZVRleHRFZGl0b3IoKVxuICBsZXQgZmlsZVBhdGhcbiAgbGV0IGVkaXRvclNjb3Blc1xuICBpZiAoYXRvbS53b3Jrc3BhY2UuaXNUZXh0RWRpdG9yKHRleHRFZGl0b3IpKSB7XG4gICAgZmlsZVBhdGggPSB0ZXh0RWRpdG9yLmdldFBhdGgoKVxuICAgIGVkaXRvclNjb3BlcyA9IHRleHRFZGl0b3IuZ2V0TGFzdEN1cnNvcigpLmdldFNjb3BlRGVzY3JpcHRvcigpLmdldFNjb3Blc0FycmF5KClcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21laG93IHRoaXMgY2FuIGJlIGNhbGxlZCB3aXRoIG5vIGFjdGl2ZSBUZXh0RWRpdG9yLCBpbXBvc3NpYmxlIEkga25vdy4uLlxuICAgIGZpbGVQYXRoID0gJ3Vua25vd24nXG4gICAgZWRpdG9yU2NvcGVzID0gWyd1bmtub3duJ11cbiAgfVxuICBjb25zdCBwYWNrYWdlUGF0aCA9IGF0b20ucGFja2FnZXMucmVzb2x2ZVBhY2thZ2VQYXRoKCdsaW50ZXItZXNsaW50JylcbiAgbGV0IGxpbnRlckVzbGludE1ldGFcbiAgaWYgKHBhY2thZ2VQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBBcHBhcmVudGx5IGZvciBzb21lIHVzZXJzIHRoZSBwYWNrYWdlIHBhdGggZmFpbHMgdG8gcmVzb2x2ZVxuICAgIGxpbnRlckVzbGludE1ldGEgPSB7IHZlcnNpb246ICd1bmtub3duIScgfVxuICB9IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlXG4gICAgbGludGVyRXNsaW50TWV0YSA9IHJlcXVpcmUoam9pbihwYWNrYWdlUGF0aCwgJ3BhY2thZ2UuanNvbicpKVxuICB9XG4gIGNvbnN0IGNvbmZpZyA9IGF0b20uY29uZmlnLmdldCgnbGludGVyLWVzbGludCcpXG4gIGNvbnN0IGhvdXJzU2luY2VSZXN0YXJ0ID0gTWF0aC5yb3VuZCgocHJvY2Vzcy51cHRpbWUoKSAvIDM2MDApICogMTApIC8gMTBcbiAgbGV0IHJldHVyblZhbFxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZEpvYih7XG4gICAgICB0eXBlOiAnZGVidWcnLFxuICAgICAgY29uZmlnLFxuICAgICAgZmlsZVBhdGhcbiAgICB9KVxuICAgIHJldHVyblZhbCA9IHtcbiAgICAgIGF0b21WZXJzaW9uOiBhdG9tLmdldFZlcnNpb24oKSxcbiAgICAgIGxpbnRlckVzbGludFZlcnNpb246IGxpbnRlckVzbGludE1ldGEudmVyc2lvbixcbiAgICAgIGxpbnRlckVzbGludENvbmZpZzogY29uZmlnLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICAgIGVzbGludFZlcnNpb246IHJlcXVpcmUoam9pbihyZXNwb25zZS5wYXRoLCAncGFja2FnZS5qc29uJykpLnZlcnNpb24sXG4gICAgICBob3Vyc1NpbmNlUmVzdGFydCxcbiAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgZXNsaW50VHlwZTogcmVzcG9uc2UudHlwZSxcbiAgICAgIGVzbGludFBhdGg6IHJlc3BvbnNlLnBhdGgsXG4gICAgICBlZGl0b3JTY29wZXMsXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRFcnJvcihgJHtlcnJvcn1gKVxuICB9XG4gIHJldHVybiByZXR1cm5WYWxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRGVidWdTdHJpbmcoKSB7XG4gIGNvbnN0IGRlYnVnID0gYXdhaXQgZ2V0RGVidWdJbmZvKClcbiAgY29uc3QgZGV0YWlscyA9IFtcbiAgICBgQXRvbSB2ZXJzaW9uOiAke2RlYnVnLmF0b21WZXJzaW9ufWAsXG4gICAgYGxpbnRlci1lc2xpbnQgdmVyc2lvbjogJHtkZWJ1Zy5saW50ZXJFc2xpbnRWZXJzaW9ufWAsXG4gICAgYEVTTGludCB2ZXJzaW9uOiAke2RlYnVnLmVzbGludFZlcnNpb259YCxcbiAgICBgSG91cnMgc2luY2UgbGFzdCBBdG9tIHJlc3RhcnQ6ICR7ZGVidWcuaG91cnNTaW5jZVJlc3RhcnR9YCxcbiAgICBgUGxhdGZvcm06ICR7ZGVidWcucGxhdGZvcm19YCxcbiAgICBgVXNpbmcgJHtkZWJ1Zy5lc2xpbnRUeXBlfSBFU0xpbnQgZnJvbTogJHtkZWJ1Zy5lc2xpbnRQYXRofWAsXG4gICAgYEN1cnJlbnQgZmlsZSdzIHNjb3BlczogJHtKU09OLnN0cmluZ2lmeShkZWJ1Zy5lZGl0b3JTY29wZXMsIG51bGwsIDIpfWAsXG4gICAgYGxpbnRlci1lc2xpbnQgY29uZmlndXJhdGlvbjogJHtKU09OLnN0cmluZ2lmeShkZWJ1Zy5saW50ZXJFc2xpbnRDb25maWcsIG51bGwsIDIpfWBcbiAgXVxuICByZXR1cm4gZGV0YWlscy5qb2luKCdcXG4nKVxufVxuXG4vKipcbiAqIFR1cm4gdGhlIGdpdmVuIG9wdGlvbnMgaW50byBhIExpbnRlciBtZXNzYWdlIGFycmF5XG4gKiBAcGFyYW0gIHtUZXh0RWRpdG9yfSB0ZXh0RWRpdG9yIFRoZSBUZXh0RWRpdG9yIHRvIHVzZSB0byBidWlsZCB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zICAgIFRoZSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsbCBpbiB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5zZXZlcml0eT0nZXJyb3InXSBDYW4gYmUgb25lIG9mOiAnZXJyb3InLCAnd2FybmluZycsICdpbmZvJ1xuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5leGNlcnB0PScnXSBTaG9ydCB0ZXh0IHRvIHVzZSBpbiB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBbb3B0aW9ucy5kZXNjcmlwdGlvbl0gVXNlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIEByZXR1cm4ge2ltcG9ydChcImF0b20vbGludGVyXCIpLk1lc3NhZ2VbXX0gTWVzc2FnZSB0byB1c2VyIGdlbmVyYXRlZCBmcm9tIHRoZSBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVVzZXJNZXNzYWdlKHRleHRFZGl0b3IsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHNldmVyaXR5ID0gJ2Vycm9yJyxcbiAgICBleGNlcnB0ID0gJycsXG4gICAgZGVzY3JpcHRpb24sXG4gIH0gPSBvcHRpb25zXG4gIHJldHVybiBbe1xuICAgIHNldmVyaXR5LFxuICAgIGV4Y2VycHQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgbG9jYXRpb246IHtcbiAgICAgIGZpbGU6IHRleHRFZGl0b3IuZ2V0UGF0aCgpLFxuICAgICAgcG9zaXRpb246IGdlbmVyYXRlUmFuZ2UodGV4dEVkaXRvciksXG4gICAgfSxcbiAgfV1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIGluIG9yZGVyIHRvIG5pY2VseSBkaXNwbGF5IHRoZSBFcnJvciBiZWluZ1xuICogdGhyb3duIGluc3RlYWQgb2YgZGVwZW5kaW5nIG9uIGdlbmVyaWMgZXJyb3IgaGFuZGxpbmcuXG4gKiBAcGFyYW0gIHtpbXBvcnQoXCJhdG9tXCIpLlRleHRFZGl0b3J9IHRleHRFZGl0b3IgVGhlIFRleHRFZGl0b3IgdG8gdXNlIHRvIGJ1aWxkIHRoZSBtZXNzYWdlXG4gKiBAcGFyYW0gIHtFcnJvcn0gZXJyb3IgICAgICBFcnJvciB0byBnZW5lcmF0ZSBhIG1lc3NhZ2UgZm9yXG4gKiBAcmV0dXJuIHtpbXBvcnQoXCJhdG9tL2xpbnRlclwiKS5NZXNzYWdlW119IE1lc3NhZ2UgdG8gdXNlciBnZW5lcmF0ZWQgZnJvbSB0aGUgRXJyb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhbmRsZUVycm9yKHRleHRFZGl0b3IsIGVycm9yKSB7XG4gIGNvbnN0IHsgc3RhY2ssIG1lc3NhZ2UgfSA9IGVycm9yXG4gIC8vIE9ubHkgc2hvdyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgbWVzc2FnZSBhcyB0aGUgZXhjZXJwdFxuICBjb25zdCBleGNlcnB0ID0gYEVycm9yIHdoaWxlIHJ1bm5pbmcgRVNMaW50OiAke21lc3NhZ2Uuc3BsaXQoJ1xcbicpWzBdfS5gXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gYDxkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXBcIj4ke21lc3NhZ2V9XFxuPGhyIC8+JHtzdGFja308L2Rpdj5gXG4gIHJldHVybiBnZW5lcmF0ZVVzZXJNZXNzYWdlKHRleHRFZGl0b3IsIHsgc2V2ZXJpdHk6ICdlcnJvcicsIGV4Y2VycHQsIGRlc2NyaXB0aW9uIH0pXG59XG5cbmNvbnN0IGdlbmVyYXRlSW52YWxpZFRyYWNlID0gYXN5bmMgKHtcbiAgbXNnTGluZSwgbXNnQ29sLCBtc2dFbmRMaW5lLCBtc2dFbmRDb2wsXG4gIGVzbGludEZ1bGxSYW5nZSwgZmlsZVBhdGgsIHRleHRFZGl0b3IsIHJ1bGVJZCwgbWVzc2FnZVxufSkgPT4ge1xuICBsZXQgZXJyTXNnUmFuZ2UgPSBgJHttc2dMaW5lICsgMX06JHttc2dDb2x9YFxuICBpZiAoZXNsaW50RnVsbFJhbmdlKSB7XG4gICAgZXJyTXNnUmFuZ2UgKz0gYCAtICR7bXNnRW5kTGluZSArIDF9OiR7bXNnRW5kQ29sICsgMX1gXG4gIH1cbiAgY29uc3QgcmFuZ2VUZXh0ID0gYFJlcXVlc3RlZCAke2VzbGludEZ1bGxSYW5nZSA/ICdzdGFydCBwb2ludCcgOiAncmFuZ2UnfTogJHtlcnJNc2dSYW5nZX1gXG4gIGNvbnN0IGlzc3VlVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9BdG9tTGludGVyL2xpbnRlci1lc2xpbnQvaXNzdWVzL25ldydcbiAgY29uc3QgdGl0bGVUZXh0ID0gYEludmFsaWQgcG9zaXRpb24gZ2l2ZW4gYnkgJyR7cnVsZUlkfSdgXG4gIGNvbnN0IHRpdGxlID0gZW5jb2RlVVJJQ29tcG9uZW50KHRpdGxlVGV4dClcbiAgY29uc3QgYm9keSA9IGVuY29kZVVSSUNvbXBvbmVudChbXG4gICAgJ0VTTGludCByZXR1cm5lZCBhIHBvaW50IHRoYXQgZGlkIG5vdCBleGlzdCBpbiB0aGUgZG9jdW1lbnQgYmVpbmcgZWRpdGVkLicsXG4gICAgYFJ1bGU6IFxcYCR7cnVsZUlkfVxcYGAsXG4gICAgcmFuZ2VUZXh0LFxuICAgICcnLCAnJyxcbiAgICAnPCEtLSBJZiBhdCBhbGwgcG9zc2libGUsIHBsZWFzZSBpbmNsdWRlIGNvZGUgdG8gcmVwcm9kdWNlIHRoaXMgaXNzdWUhIC0tPicsXG4gICAgJycsICcnLFxuICAgICdEZWJ1ZyBpbmZvcm1hdGlvbjonLFxuICAgICdgYGBqc29uJyxcbiAgICBKU09OLnN0cmluZ2lmeShhd2FpdCBnZXREZWJ1Z0luZm8oKSwgbnVsbCwgMiksXG4gICAgJ2BgYCdcbiAgXS5qb2luKCdcXG4nKSlcblxuICBjb25zdCBsb2NhdGlvbiA9IHtcbiAgICBmaWxlOiBmaWxlUGF0aCxcbiAgICBwb3NpdGlvbjogZ2VuZXJhdGVSYW5nZSh0ZXh0RWRpdG9yLCAwKSxcbiAgfVxuICBjb25zdCBuZXdJc3N1ZVVSTCA9IGAke2lzc3VlVVJMfT90aXRsZT0ke3RpdGxlfSZib2R5PSR7Ym9keX1gXG5cbiAgcmV0dXJuIHtcbiAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICBleGNlcnB0OiBgJHt0aXRsZVRleHR9LiBTZWUgdGhlIGRlc2NyaXB0aW9uIGZvciBkZXRhaWxzLiBgXG4gICAgICArICdDbGljayB0aGUgVVJMIHRvIG9wZW4gYSBuZXcgaXNzdWUhJyxcbiAgICB1cmw6IG5ld0lzc3VlVVJMLFxuICAgIGxvY2F0aW9uLFxuICAgIGRlc2NyaXB0aW9uOiBgJHtyYW5nZVRleHR9XFxuT3JpZ2luYWwgbWVzc2FnZTogJHttZXNzYWdlfWBcbiAgfVxufVxuXG4vKipcbiAqIEdpdmVuIGEgcmF3IHJlc3BvbnNlIGZyb20gRVNMaW50LCB0aGlzIHByb2Nlc3NlcyB0aGUgbWVzc2FnZXMgaW50byBhIGZvcm1hdFxuICogY29tcGF0aWJsZSB3aXRoIHRoZSBMaW50ZXIgQVBJLlxuICogQHBhcmFtICB7T2JqZWN0fSAgICAgbWVzc2FnZXMgICBUaGUgbWVzc2FnZXMgZnJvbSBFU0xpbnQncyByZXNwb25zZVxuICogQHBhcmFtICB7VGV4dEVkaXRvcn0gdGV4dEVkaXRvciBUaGUgQXRvbTo6VGV4dEVkaXRvciBvZiB0aGUgZmlsZSB0aGUgbWVzc2FnZXMgYmVsb25nIHRvXG4gKiBAcGFyYW0gIHtib29sfSAgICAgICBzaG93UnVsZSAgIFdoZXRoZXIgdG8gc2hvdyB0aGUgcnVsZSBpbiB0aGUgbWVzc2FnZXNcbiAqIEByZXR1cm4ge1Byb21pc2V9ICAgICAgICAgICAgICAgVGhlIG1lc3NhZ2VzIHRyYW5zZm9ybWVkIGludG8gTGludGVyIG1lc3NhZ2VzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRVNMaW50TWVzc2FnZXMobWVzc2FnZXMsIHRleHRFZGl0b3IsIHNob3dSdWxlKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChtZXNzYWdlcy5tYXAoYXN5bmMgKHtcbiAgICBmYXRhbCwgbWVzc2FnZTogb3JpZ2luYWxNZXNzYWdlLCBsaW5lLCBzZXZlcml0eSwgcnVsZUlkLCBjb2x1bW4sIGZpeCwgZW5kTGluZSwgZW5kQ29sdW1uXG4gIH0pID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gZmF0YWwgPyBvcmlnaW5hbE1lc3NhZ2Uuc3BsaXQoJ1xcbicpWzBdIDogb3JpZ2luYWxNZXNzYWdlXG4gICAgY29uc3QgZmlsZVBhdGggPSB0ZXh0RWRpdG9yLmdldFBhdGgoKVxuICAgIGNvbnN0IHRleHRCdWZmZXIgPSB0ZXh0RWRpdG9yLmdldEJ1ZmZlcigpXG4gICAgbGV0IGxpbnRlckZpeCA9IG51bGxcbiAgICBpZiAoZml4KSB7XG4gICAgICBjb25zdCBmaXhSYW5nZSA9IG5ldyBSYW5nZShcbiAgICAgICAgdGV4dEJ1ZmZlci5wb3NpdGlvbkZvckNoYXJhY3RlckluZGV4KGZpeC5yYW5nZVswXSksXG4gICAgICAgIHRleHRCdWZmZXIucG9zaXRpb25Gb3JDaGFyYWN0ZXJJbmRleChmaXgucmFuZ2VbMV0pXG4gICAgICApXG4gICAgICBsaW50ZXJGaXggPSB7XG4gICAgICAgIHBvc2l0aW9uOiBmaXhSYW5nZSxcbiAgICAgICAgcmVwbGFjZVdpdGg6IGZpeC50ZXh0XG4gICAgICB9XG4gICAgfVxuICAgIGxldCBtc2dDb2xcbiAgICBsZXQgbXNnRW5kTGluZVxuICAgIGxldCBtc2dFbmRDb2xcbiAgICBsZXQgZXNsaW50RnVsbFJhbmdlID0gZmFsc2VcblxuICAgIC8qXG4gICAgIE5vdGU6IEVTTGludCBwb3NpdGlvbnMgYXJlIDEtaW5kZXhlZCwgd2hpbGUgQXRvbSBleHBlY3RzIDAtaW5kZXhlZCxcbiAgICAgcG9zaXRpb25zLiBXZSBhcmUgc3VidHJhY3RpbmcgMSBmcm9tIHRoZXNlIHZhbHVlcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG9cbiAgICAga2VlcCBkb2luZyBzbyBpbiBsYXRlciB1c2VzLlxuICAgICAqL1xuICAgIGNvbnN0IG1zZ0xpbmUgPSBsaW5lIC0gMVxuICAgIGlmICh0eXBlb2YgZW5kQ29sdW1uID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgZW5kTGluZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVzbGludEZ1bGxSYW5nZSA9IHRydWVcbiAgICAgIC8vIEhlcmUgd2UgYWx3YXlzIHdhbnQgdGhlIGNvbHVtbiB0byBiZSBhIG51bWJlclxuICAgICAgbXNnQ29sID0gTWF0aC5tYXgoMCwgY29sdW1uIC0gMSlcbiAgICAgIG1zZ0VuZExpbmUgPSBlbmRMaW5lIC0gMVxuICAgICAgbXNnRW5kQ29sID0gZW5kQ29sdW1uIC0gMVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3YW50IG1zZ0NvbCB0byByZW1haW4gdW5kZWZpbmVkIGlmIGl0IHdhcyBpbml0aWFsbHkgc29cbiAgICAgIC8vIGBnZW5lcmF0ZVJhbmdlYCB3aWxsIGdpdmUgdXMgYSByYW5nZSBvdmVyIHRoZSBlbnRpcmUgbGluZVxuICAgICAgbXNnQ29sID0gdHlwZW9mIGNvbHVtbiA9PT0gJ251bWJlcicgPyBjb2x1bW4gLSAxIDogY29sdW1uXG4gICAgfVxuXG4gICAgbGV0IHJldCA9IHtcbiAgICAgIHNldmVyaXR5OiBzZXZlcml0eSA9PT0gMSA/ICd3YXJuaW5nJyA6ICdlcnJvcicsXG4gICAgICBsb2NhdGlvbjoge1xuICAgICAgICBmaWxlOiBmaWxlUGF0aCxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocnVsZUlkKSB7XG4gICAgICByZXQudXJsID0gcnVsZXMuZ2V0UnVsZVVybChydWxlSWQpXG4gICAgfVxuXG4gICAgLy8gSEFDSyBmb3IgaHR0cHM6Ly9naXRodWIuY29tL0F0b21MaW50ZXIvbGludGVyLWVzbGludC9pc3N1ZXMvMTI0OVxuICAgIGxldCBmaXhMaW5lRW5kaW5nID0gZmFsc2VcbiAgICBpZiAocnVsZUlkID09PSAncHJldHRpZXIvcHJldHRpZXInICYmIChtZXNzYWdlID09PSAnRGVsZXRlIGDikI1gJykpIHtcbiAgICAgIGZpeExpbmVFbmRpbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgbGV0IHJhbmdlXG4gICAgdHJ5IHtcbiAgICAgIGlmIChlc2xpbnRGdWxsUmFuZ2UpIHtcbiAgICAgICAgaWYgKCFmaXhMaW5lRW5kaW5nKSB7XG4gICAgICAgICAgdGhyb3dJZkludmFsaWRQb2ludCh0ZXh0QnVmZmVyLCBtc2dMaW5lLCBtc2dDb2wpXG4gICAgICAgICAgdGhyb3dJZkludmFsaWRQb2ludCh0ZXh0QnVmZmVyLCBtc2dFbmRMaW5lLCBtc2dFbmRDb2wpXG4gICAgICAgIH1cbiAgICAgICAgcmFuZ2UgPSBbW21zZ0xpbmUsIG1zZ0NvbF0sIFttc2dFbmRMaW5lLCBtc2dFbmRDb2xdXVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2UgPSBnZW5lcmF0ZVJhbmdlKHRleHRFZGl0b3IsIG1zZ0xpbmUsIG1zZ0NvbClcbiAgICAgIH1cbiAgICAgIHJldC5sb2NhdGlvbi5wb3NpdGlvbiA9IHJhbmdlXG5cbiAgICAgIGNvbnN0IHJ1bGVBcHBlbmRpeCA9IHNob3dSdWxlID8gYCAoJHtydWxlSWQgfHwgJ0ZhdGFsJ30pYCA6ICcnXG4gICAgICByZXQuZXhjZXJwdCA9IGAke21lc3NhZ2V9JHtydWxlQXBwZW5kaXh9YFxuXG4gICAgICBpZiAobGludGVyRml4KSB7XG4gICAgICAgIHJldC5zb2x1dGlvbnMgPSBbbGludGVyRml4XVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0ID0gYXdhaXQgZ2VuZXJhdGVJbnZhbGlkVHJhY2Uoe1xuICAgICAgICBtc2dMaW5lLFxuICAgICAgICBtc2dDb2wsXG4gICAgICAgIG1zZ0VuZExpbmUsXG4gICAgICAgIG1zZ0VuZENvbCxcbiAgICAgICAgZXNsaW50RnVsbFJhbmdlLFxuICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgdGV4dEVkaXRvcixcbiAgICAgICAgcnVsZUlkLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH0pKVxufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgbGludCBqb2JcbiAqIEBwYXJhbSAge09iamVjdH0gICAgIHJlc3BvbnNlICAgVGhlIHJhdyByZXNwb25zZSBmcm9tIHRoZSBqb2JcbiAqIEBwYXJhbSAge1RleHRFZGl0b3J9IHRleHRFZGl0b3IgVGhlIEF0b206OlRleHRFZGl0b3Igb2YgdGhlIGZpbGUgdGhlIG1lc3NhZ2VzIGJlbG9uZyB0b1xuICogQHBhcmFtICB7Ym9vbH0gICAgICAgc2hvd1J1bGUgICBXaGV0aGVyIHRvIHNob3cgdGhlIHJ1bGUgaW4gdGhlIG1lc3NhZ2VzXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlcyB0cmFuc2Zvcm1lZCBpbnRvIExpbnRlciBtZXNzYWdlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0pvYlJlc3BvbnNlKHJlc3BvbnNlLCB0ZXh0RWRpdG9yLCBzaG93UnVsZSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlc3BvbnNlLCAndXBkYXRlZFJ1bGVzJykpIHtcbiAgICBydWxlcy5yZXBsYWNlUnVsZXMocmVzcG9uc2UudXBkYXRlZFJ1bGVzKVxuICB9XG4gIHJldHVybiBwcm9jZXNzRVNMaW50TWVzc2FnZXMocmVzcG9uc2UubWVzc2FnZXMsIHRleHRFZGl0b3IsIHNob3dSdWxlKVxufVxuIl19 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLmpzIl0sIm5hbWVzIjpbImFzeW5jUmFuZG9tQnl0ZXMiLCJyYW5kb21CeXRlcyIsInJ1bGVzIiwiUnVsZXMiLCJ3b3JrZXIiLCJpc0luY29tcGF0aWJsZUVzbGludFZlcnNpb24iLCJzZWVuSW5jb21wYXRpYmxlVmVyc2lvbk5vdGlmaWNhdGlvbiIsInN0YXJ0V29ya2VyIiwiVGFzayIsInJlcXVpcmUiLCJyZXNvbHZlIiwib24iLCJvYmoiLCJjb25zb2xlIiwibG9nIiwiSlNPTiIsInBhcnNlIiwiZXgiLCJzdGFydGVkIiwic3RhcnQiLCJraWxsV29ya2VyIiwidGVybWluYXRlIiwiaXNJbmNvbXBhdGlibGVFc2xpbnQiLCJzZW5kSm9iIiwiY29uZmlnIiwiY2hpbGRQcm9jZXNzIiwiY29ubmVjdGVkIiwiZW1pdEtleSIsInRvU3RyaW5nIiwiUHJvbWlzZSIsInJlamVjdCIsImVyclN1YiIsIm1zZyIsInN0YWNrIiwibmFtZSIsImVycm9yIiwiRXJyb3IiLCJkaXNwb3NlIiwicmVzcG9uc2VTdWIiLCJkYXRhIiwic2VuZCIsImUiLCJnZXREZWJ1Z0luZm8iLCJ0ZXh0RWRpdG9yIiwiYXRvbSIsIndvcmtzcGFjZSIsImdldEFjdGl2ZVRleHRFZGl0b3IiLCJmaWxlUGF0aCIsImVkaXRvclNjb3BlcyIsImlzVGV4dEVkaXRvciIsImdldFBhdGgiLCJnZXRMYXN0Q3Vyc29yIiwiZ2V0U2NvcGVEZXNjcmlwdG9yIiwiZ2V0U2NvcGVzQXJyYXkiLCJwYWNrYWdlUGF0aCIsInBhY2thZ2VzIiwicmVzb2x2ZVBhY2thZ2VQYXRoIiwibGludGVyRXNsaW50TWV0YSIsInVuZGVmaW5lZCIsInZlcnNpb24iLCJnZXQiLCJob3Vyc1NpbmNlUmVzdGFydCIsIk1hdGgiLCJyb3VuZCIsInByb2Nlc3MiLCJ1cHRpbWUiLCJyZXR1cm5WYWwiLCJyZXNwb25zZSIsInR5cGUiLCJhdG9tVmVyc2lvbiIsImdldFZlcnNpb24iLCJsaW50ZXJFc2xpbnRWZXJzaW9uIiwibGludGVyRXNsaW50Q29uZmlnIiwiZXNsaW50VmVyc2lvbiIsInBhdGgiLCJwbGF0Zm9ybSIsImVzbGludFR5cGUiLCJlc2xpbnRQYXRoIiwibm90aWZpY2F0aW9ucyIsImFkZEVycm9yIiwiZ2VuZXJhdGVEZWJ1Z1N0cmluZyIsImRlYnVnIiwiZGV0YWlscyIsInN0cmluZ2lmeSIsImpvaW4iLCJnZW5lcmF0ZVVzZXJNZXNzYWdlIiwib3B0aW9ucyIsInNldmVyaXR5IiwiZXhjZXJwdCIsImRlc2NyaXB0aW9uIiwibG9jYXRpb24iLCJmaWxlIiwicG9zaXRpb24iLCJpc05ld1BhY2thZ2VJbnN0YWxsZWQiLCJpc1BhY2thZ2VMb2FkZWQiLCJpc1BhY2thZ2VEaXNhYmxlZCIsInNob3dJbmNvbXBhdGlibGVWZXJzaW9uTm90aWZpY2F0aW9uIiwibWVzc2FnZSIsIm5vdGlmaWNhdGlvbkVuYWJsZWQiLCJub3RpZmljYXRpb24iLCJhZGRXYXJuaW5nIiwiZGlzbWlzc2FibGUiLCJidXR0b25zIiwidGV4dCIsIm9uRGlkQ2xpY2siLCJzaGVsbCIsIm9wZW5FeHRlcm5hbCIsImRpc21pc3MiLCJzZXQiLCJoYW5kbGVFcnJvciIsInNwbGl0IiwiZ2VuZXJhdGVJbnZhbGlkVHJhY2UiLCJtc2dMaW5lIiwibXNnQ29sIiwibXNnRW5kTGluZSIsIm1zZ0VuZENvbCIsImVzbGludEZ1bGxSYW5nZSIsInJ1bGVJZCIsImVyck1zZ1JhbmdlIiwicmFuZ2VUZXh0IiwiaXNzdWVVUkwiLCJ0aXRsZVRleHQiLCJ0aXRsZSIsImVuY29kZVVSSUNvbXBvbmVudCIsImJvZHkiLCJuZXdJc3N1ZVVSTCIsInVybCIsInByb2Nlc3NFU0xpbnRNZXNzYWdlcyIsIm1lc3NhZ2VzIiwic2hvd1J1bGUiLCJhbGwiLCJtYXAiLCJmYXRhbCIsIm9yaWdpbmFsTWVzc2FnZSIsImxpbmUiLCJjb2x1bW4iLCJmaXgiLCJlbmRMaW5lIiwiZW5kQ29sdW1uIiwidGV4dEJ1ZmZlciIsImdldEJ1ZmZlciIsImxpbnRlckZpeCIsImZpeFJhbmdlIiwiUmFuZ2UiLCJwb3NpdGlvbkZvckNoYXJhY3RlckluZGV4IiwicmFuZ2UiLCJyZXBsYWNlV2l0aCIsIm1heCIsInJldCIsImdldFJ1bGVVcmwiLCJmaXhMaW5lRW5kaW5nIiwicnVsZUFwcGVuZGl4Iiwic29sdXRpb25zIiwiZXJyIiwicHJvY2Vzc0pvYlJlc3BvbnNlIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwicmVwbGFjZVJ1bGVzIiwidXBkYXRlZFJ1bGVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBOztBQUNBOztBQUNBOzs7O0FBTEE7QUFFQTtBQUtBLE1BQU1BLGdCQUFnQixHQUFHLHFCQUFVQyxtQkFBVixDQUF6QjtBQUNPLE1BQU1DLEtBQUssR0FBRyxJQUFJQyxjQUFKLEVBQWQ7O0FBQ1AsSUFBSUMsTUFBTSxHQUFHLElBQWI7QUFDQSxJQUFJQywyQkFBMkIsR0FBRyxLQUFsQztBQUNBLElBQUlDLG1DQUFtQyxHQUFHLEtBQTFDO0FBRUE7QUFDQTtBQUNBOztBQUNPLFNBQVNDLFdBQVQsR0FBdUI7QUFDNUIsTUFBSUgsTUFBTSxLQUFLLElBQWYsRUFBcUI7QUFDbkJBLElBQUFBLE1BQU0sR0FBRyxJQUFJSSxVQUFKLENBQVNDLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQixhQUFoQixDQUFULENBQVQ7QUFDRDs7QUFFRE4sRUFBQUEsTUFBTSxDQUFDTyxFQUFQLENBQVUsS0FBVixFQUFrQkMsR0FBRCxJQUFTO0FBQ3hCLFFBQUk7QUFDRkMsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVlDLElBQUksQ0FBQ0MsS0FBTCxDQUFXSixHQUFYLENBQVo7QUFDRCxLQUZELENBRUUsT0FBT0ssRUFBUCxFQUFXO0FBQ1hKLE1BQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZRixHQUFaO0FBQ0Q7QUFDRixHQU5EOztBQVFBLE1BQUlSLE1BQU0sQ0FBQ2MsT0FBWCxFQUFvQjtBQUNsQjtBQUNBO0FBQ0QsR0FoQjJCLENBaUI1Qjs7O0FBQ0FkLEVBQUFBLE1BQU0sQ0FBQ2UsS0FBUCxDQUFhLEVBQWIsRUFsQjRCLENBb0I1Qjs7QUFDQWYsRUFBQUEsTUFBTSxDQUFDYyxPQUFQLEdBQWlCLElBQWpCO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7OztBQUNPLFNBQVNFLFVBQVQsR0FBc0I7QUFDM0IsTUFBSWhCLE1BQU0sS0FBSyxJQUFmLEVBQXFCO0FBQ25CQSxJQUFBQSxNQUFNLENBQUNpQixTQUFQO0FBQ0FqQixJQUFBQSxNQUFNLEdBQUcsSUFBVDtBQUNEO0FBQ0Y7O0FBRU0sU0FBU2tCLG9CQUFULEdBQWdDO0FBQ3JDLFNBQU9qQiwyQkFBUDtBQUNEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sZUFBZWtCLE9BQWYsQ0FBdUJDLE1BQXZCLEVBQStCO0FBQ3BDLE1BQUlwQixNQUFNLElBQUksQ0FBQ0EsTUFBTSxDQUFDcUIsWUFBUCxDQUFvQkMsU0FBbkMsRUFBOEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0FOLElBQUFBLFVBQVU7QUFDWCxHQU5tQyxDQVFwQzs7O0FBQ0FiLEVBQUFBLFdBQVcsR0FUeUIsQ0FXcEM7QUFDQTtBQUNBO0FBQ0E7O0FBQ0FpQixFQUFBQSxNQUFNLENBQUNHLE9BQVAsR0FBaUIsQ0FBQyxNQUFNM0IsZ0JBQWdCLENBQUMsQ0FBRCxDQUF2QixFQUE0QjRCLFFBQTVCLENBQXFDLEtBQXJDLENBQWpCLENBZm9DLENBZXlCOztBQUU3RCxTQUFPLElBQUlDLE9BQUosQ0FBWSxDQUFDbkIsT0FBRCxFQUFVb0IsTUFBVixLQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQSxVQUFNQyxNQUFNLEdBQUczQixNQUFNLENBQUNPLEVBQVAsQ0FBVyxlQUFjYSxNQUFNLENBQUNHLE9BQVEsRUFBeEMsRUFBMkMsQ0FBQztBQUFFSyxNQUFBQSxHQUFGO0FBQU9DLE1BQUFBLEtBQVA7QUFBY0MsTUFBQUE7QUFBZCxLQUFELEtBQTBCO0FBQ2xGO0FBQ0EsWUFBTUMsS0FBSyxHQUFHLElBQUlDLEtBQUosQ0FBVUosR0FBVixDQUFkLENBRmtGLENBR2xGOztBQUNBRyxNQUFBQSxLQUFLLENBQUNGLEtBQU4sR0FBY0EsS0FBZDtBQUNBRSxNQUFBQSxLQUFLLENBQUNELElBQU4sR0FBYUEsSUFBYjtBQUNBSCxNQUFBQSxNQUFNLENBQUNNLE9BQVAsR0FOa0YsQ0FPbEY7O0FBQ0FDLE1BQUFBLFdBQVcsQ0FBQ0QsT0FBWjtBQUNBUCxNQUFBQSxNQUFNLENBQUNLLEtBQUQsQ0FBTjtBQUNELEtBVmMsQ0FBZjtBQVdBLFVBQU1HLFdBQVcsR0FBR2xDLE1BQU0sQ0FBQ08sRUFBUCxDQUFVYSxNQUFNLENBQUNHLE9BQWpCLEVBQTJCWSxJQUFELElBQVU7QUFDdERSLE1BQUFBLE1BQU0sQ0FBQ00sT0FBUDtBQUNBQyxNQUFBQSxXQUFXLENBQUNELE9BQVo7QUFDQTNCLE1BQUFBLE9BQU8sQ0FBQzZCLElBQUQsQ0FBUDtBQUNELEtBSm1CLENBQXBCLENBZnNDLENBb0J0Qzs7QUFDQSxRQUFJO0FBQ0ZuQyxNQUFBQSxNQUFNLENBQUNvQyxJQUFQLENBQVloQixNQUFaO0FBQ0QsS0FGRCxDQUVFLE9BQU9pQixDQUFQLEVBQVU7QUFDVlYsTUFBQUEsTUFBTSxDQUFDTSxPQUFQO0FBQ0FDLE1BQUFBLFdBQVcsQ0FBQ0QsT0FBWjtBQUNBeEIsTUFBQUEsT0FBTyxDQUFDc0IsS0FBUixDQUFjTSxDQUFkO0FBQ0Q7QUFDRixHQTVCTSxDQUFQO0FBNkJEOztBQUVNLGVBQWVDLFlBQWYsR0FBOEI7QUFDbkMsUUFBTUMsVUFBVSxHQUFHQyxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsbUJBQWYsRUFBbkI7QUFDQSxNQUFJQyxRQUFKO0FBQ0EsTUFBSUMsWUFBSjs7QUFDQSxNQUFJSixJQUFJLENBQUNDLFNBQUwsQ0FBZUksWUFBZixDQUE0Qk4sVUFBNUIsQ0FBSixFQUE2QztBQUMzQ0ksSUFBQUEsUUFBUSxHQUFHSixVQUFVLENBQUNPLE9BQVgsRUFBWDtBQUNBRixJQUFBQSxZQUFZLEdBQUdMLFVBQVUsQ0FBQ1EsYUFBWCxHQUEyQkMsa0JBQTNCLEdBQWdEQyxjQUFoRCxFQUFmO0FBQ0QsR0FIRCxNQUdPO0FBQ0w7QUFDQU4sSUFBQUEsUUFBUSxHQUFHLFNBQVg7QUFDQUMsSUFBQUEsWUFBWSxHQUFHLENBQUMsU0FBRCxDQUFmO0FBQ0Q7O0FBQ0QsUUFBTU0sV0FBVyxHQUFHVixJQUFJLENBQUNXLFFBQUwsQ0FBY0Msa0JBQWQsQ0FBaUMsZUFBakMsQ0FBcEI7QUFDQSxNQUFJQyxnQkFBSjs7QUFDQSxNQUFJSCxXQUFXLEtBQUtJLFNBQXBCLEVBQStCO0FBQzdCO0FBQ0FELElBQUFBLGdCQUFnQixHQUFHO0FBQUVFLE1BQUFBLE9BQU8sRUFBRTtBQUFYLEtBQW5CO0FBQ0QsR0FIRCxNQUdPO0FBQ0w7QUFDQUYsSUFBQUEsZ0JBQWdCLEdBQUdoRCxPQUFPLENBQUMsZ0JBQUs2QyxXQUFMLEVBQWtCLGNBQWxCLENBQUQsQ0FBMUI7QUFDRDs7QUFDRCxRQUFNOUIsTUFBTSxHQUFHb0IsSUFBSSxDQUFDcEIsTUFBTCxDQUFZb0MsR0FBWixDQUFnQixlQUFoQixDQUFmO0FBQ0EsUUFBTUMsaUJBQWlCLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFZQyxPQUFPLENBQUNDLE1BQVIsS0FBbUIsSUFBcEIsR0FBNEIsRUFBdkMsSUFBNkMsRUFBdkU7QUFDQSxNQUFJQyxTQUFKOztBQUNBLE1BQUk7QUFDRixVQUFNQyxRQUFRLEdBQUcsTUFBTTVDLE9BQU8sQ0FBQztBQUM3QjZDLE1BQUFBLElBQUksRUFBRSxPQUR1QjtBQUU3QjVDLE1BQUFBLE1BRjZCO0FBRzdCdUIsTUFBQUE7QUFINkIsS0FBRCxDQUE5QjtBQUtBbUIsSUFBQUEsU0FBUyxHQUFHO0FBQ1ZHLE1BQUFBLFdBQVcsRUFBRXpCLElBQUksQ0FBQzBCLFVBQUwsRUFESDtBQUVWQyxNQUFBQSxtQkFBbUIsRUFBRWQsZ0JBQWdCLENBQUNFLE9BRjVCO0FBR1ZhLE1BQUFBLGtCQUFrQixFQUFFaEQsTUFIVjtBQUlWO0FBQ0FpRCxNQUFBQSxhQUFhLEVBQUVoRSxPQUFPLENBQUMsZ0JBQUswRCxRQUFRLENBQUNPLElBQWQsRUFBb0IsY0FBcEIsQ0FBRCxDQUFQLENBQTZDZixPQUxsRDtBQU1WRSxNQUFBQSxpQkFOVTtBQU9WYyxNQUFBQSxRQUFRLEVBQUVYLE9BQU8sQ0FBQ1csUUFQUjtBQVFWQyxNQUFBQSxVQUFVLEVBQUVULFFBQVEsQ0FBQ0MsSUFSWDtBQVNWUyxNQUFBQSxVQUFVLEVBQUVWLFFBQVEsQ0FBQ08sSUFUWDtBQVVWMUIsTUFBQUE7QUFWVSxLQUFaO0FBWUQsR0FsQkQsQ0FrQkUsT0FBT2IsS0FBUCxFQUFjO0FBQ2RTLElBQUFBLElBQUksQ0FBQ2tDLGFBQUwsQ0FBbUJDLFFBQW5CLENBQTZCLEdBQUU1QyxLQUFNLEVBQXJDO0FBQ0Q7O0FBQ0QsU0FBTytCLFNBQVA7QUFDRDs7QUFFTSxlQUFlYyxtQkFBZixHQUFxQztBQUMxQyxRQUFNQyxLQUFLLEdBQUcsTUFBTXZDLFlBQVksRUFBaEM7QUFDQSxRQUFNd0MsT0FBTyxHQUFHLENBQ2IsaUJBQWdCRCxLQUFLLENBQUNaLFdBQVksRUFEckIsRUFFYiwwQkFBeUJZLEtBQUssQ0FBQ1YsbUJBQW9CLEVBRnRDLEVBR2IsbUJBQWtCVSxLQUFLLENBQUNSLGFBQWMsRUFIekIsRUFJYixrQ0FBaUNRLEtBQUssQ0FBQ3BCLGlCQUFrQixFQUo1QyxFQUtiLGFBQVlvQixLQUFLLENBQUNOLFFBQVMsRUFMZCxFQU1iLFNBQVFNLEtBQUssQ0FBQ0wsVUFBVyxpQkFBZ0JLLEtBQUssQ0FBQ0osVUFBVyxFQU43QyxFQU9iLDBCQUF5QjlELElBQUksQ0FBQ29FLFNBQUwsQ0FBZUYsS0FBSyxDQUFDakMsWUFBckIsRUFBbUMsSUFBbkMsRUFBeUMsQ0FBekMsQ0FBNEMsRUFQeEQsRUFRYixnQ0FBK0JqQyxJQUFJLENBQUNvRSxTQUFMLENBQWVGLEtBQUssQ0FBQ1Qsa0JBQXJCLEVBQXlDLElBQXpDLEVBQStDLENBQS9DLENBQWtELEVBUnBFLENBQWhCO0FBVUEsU0FBT1UsT0FBTyxDQUFDRSxJQUFSLENBQWEsSUFBYixDQUFQO0FBQ0Q7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLFNBQVNDLG1CQUFULENBQTZCMUMsVUFBN0IsRUFBeUMyQyxPQUF6QyxFQUFrRDtBQUN2RCxRQUFNO0FBQ0pDLElBQUFBLFFBQVEsR0FBRyxPQURQO0FBRUpDLElBQUFBLE9BQU8sR0FBRyxFQUZOO0FBR0pDLElBQUFBO0FBSEksTUFJRkgsT0FKSjtBQUtBLFNBQU8sQ0FBQztBQUNOQyxJQUFBQSxRQURNO0FBRU5DLElBQUFBLE9BRk07QUFHTkMsSUFBQUEsV0FITTtBQUlOQyxJQUFBQSxRQUFRLEVBQUU7QUFDUkMsTUFBQUEsSUFBSSxFQUFFaEQsVUFBVSxDQUFDTyxPQUFYLEVBREU7QUFFUjBDLE1BQUFBLFFBQVEsRUFBRSwrQkFBY2pELFVBQWQ7QUFGRjtBQUpKLEdBQUQsQ0FBUDtBQVNEOztBQUVELFNBQVNrRCxxQkFBVCxHQUFpQztBQUMvQixTQUFPakQsSUFBSSxDQUFDVyxRQUFMLENBQWN1QyxlQUFkLENBQThCLG9CQUE5QixLQUNIbEQsSUFBSSxDQUFDVyxRQUFMLENBQWN3QyxpQkFBZCxDQUFnQyxvQkFBaEMsQ0FESjtBQUVEOztBQUVELFNBQVNDLG1DQUFULENBQTZDQyxPQUE3QyxFQUFzRDtBQUNwRCxRQUFNQyxtQkFBbUIsR0FBR3RELElBQUksQ0FBQ3BCLE1BQUwsQ0FBWW9DLEdBQVosQ0FBZ0IsNERBQWhCLENBQTVCOztBQUNBLE1BQUksQ0FBQ3NDLG1CQUFELElBQXdCNUYsbUNBQXhCLElBQStEdUYscUJBQXFCLEVBQXhGLEVBQTRGO0FBQzFGO0FBQ0QsR0FKbUQsQ0FNcEQ7OztBQUNBdkYsRUFBQUEsbUNBQW1DLEdBQUcsSUFBdEM7QUFDQSxRQUFNNkYsWUFBWSxHQUFHdkQsSUFBSSxDQUFDa0MsYUFBTCxDQUFtQnNCLFVBQW5CLENBQ25CLHFDQURtQixFQUVuQjtBQUNFWCxJQUFBQSxXQUFXLEVBQUVRLE9BRGY7QUFFRUksSUFBQUEsV0FBVyxFQUFFLElBRmY7QUFHRUMsSUFBQUEsT0FBTyxFQUFFLENBQ1A7QUFDRUMsTUFBQUEsSUFBSSxFQUFFLDRCQURSOztBQUVFQyxNQUFBQSxVQUFVLEdBQUc7QUFDWEMsd0JBQU1DLFlBQU4sQ0FBbUIsNkNBQW5COztBQUNBUCxRQUFBQSxZQUFZLENBQUNRLE9BQWI7QUFDRDs7QUFMSCxLQURPLEVBUVA7QUFDRUosTUFBQUEsSUFBSSxFQUFFLHFDQURSOztBQUVFQyxNQUFBQSxVQUFVLEdBQUc7QUFDWDVELFFBQUFBLElBQUksQ0FBQ3BCLE1BQUwsQ0FBWW9GLEdBQVosQ0FBZ0IsNERBQWhCLEVBQThFLEtBQTlFO0FBQ0FULFFBQUFBLFlBQVksQ0FBQ1EsT0FBYjtBQUNEOztBQUxILEtBUk87QUFIWCxHQUZtQixDQUFyQjtBQXVCRDtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDTyxTQUFTRSxXQUFULENBQXFCbEUsVUFBckIsRUFBaUNSLEtBQWpDLEVBQXdDO0FBQzdDLFFBQU07QUFBRUYsSUFBQUEsS0FBRjtBQUFTZ0UsSUFBQUEsT0FBVDtBQUFrQi9ELElBQUFBO0FBQWxCLE1BQTJCQyxLQUFqQyxDQUQ2QyxDQUU3QztBQUNBOztBQUNBLE1BQUlELElBQUksS0FBSyx5QkFBYixFQUF3QztBQUN0QzdCLElBQUFBLDJCQUEyQixHQUFHLElBQTlCO0FBQ0FlLElBQUFBLFVBQVU7QUFDVjRFLElBQUFBLG1DQUFtQyxDQUFDQyxPQUFELENBQW5DO0FBQ0E7QUFDRCxHQVQ0QyxDQVU3Qzs7O0FBQ0EsUUFBTVQsT0FBTyxHQUFJLCtCQUE4QlMsT0FBTyxDQUFDYSxLQUFSLENBQWMsSUFBZCxFQUFvQixDQUFwQixDQUF1QixHQUF0RTtBQUNBLFFBQU1yQixXQUFXLEdBQUksc0NBQXFDUSxPQUFRLFdBQVVoRSxLQUFNLFFBQWxGLENBWjZDLENBYTdDOztBQUNBLFNBQU9vRCxtQkFBbUIsQ0FBQzFDLFVBQUQsRUFBYTtBQUFFNEMsSUFBQUEsUUFBUSxFQUFFLE9BQVo7QUFBcUJDLElBQUFBLE9BQXJCO0FBQThCQyxJQUFBQTtBQUE5QixHQUFiLENBQTFCO0FBQ0Q7O0FBRUQsTUFBTXNCLG9CQUFvQixHQUFHLE9BQU87QUFDbENDLEVBQUFBLE9BRGtDO0FBQ3pCQyxFQUFBQSxNQUR5QjtBQUNqQkMsRUFBQUEsVUFEaUI7QUFDTEMsRUFBQUEsU0FESztBQUVsQ0MsRUFBQUEsZUFGa0M7QUFFakJyRSxFQUFBQSxRQUZpQjtBQUVQSixFQUFBQSxVQUZPO0FBRUswRSxFQUFBQSxNQUZMO0FBRWFwQixFQUFBQTtBQUZiLENBQVAsS0FHdkI7QUFDSixNQUFJcUIsV0FBVyxHQUFJLEdBQUVOLE9BQU8sR0FBRyxDQUFFLElBQUdDLE1BQU8sRUFBM0M7O0FBQ0EsTUFBSUcsZUFBSixFQUFxQjtBQUNuQkUsSUFBQUEsV0FBVyxJQUFLLE1BQUtKLFVBQVUsR0FBRyxDQUFFLElBQUdDLFNBQVMsR0FBRyxDQUFFLEVBQXJEO0FBQ0Q7O0FBQ0QsUUFBTUksU0FBUyxHQUFJLGFBQVlILGVBQWUsR0FBRyxhQUFILEdBQW1CLE9BQVEsS0FBSUUsV0FBWSxFQUF6RjtBQUNBLFFBQU1FLFFBQVEsR0FBRyx3REFBakI7QUFDQSxRQUFNQyxTQUFTLEdBQUksOEJBQTZCSixNQUFPLEdBQXZEO0FBQ0EsUUFBTUssS0FBSyxHQUFHQyxrQkFBa0IsQ0FBQ0YsU0FBRCxDQUFoQztBQUNBLFFBQU1HLElBQUksR0FBR0Qsa0JBQWtCLENBQUMsQ0FDOUIsMEVBRDhCLEVBRTdCLFdBQVVOLE1BQU8sSUFGWSxFQUc5QkUsU0FIOEIsRUFJOUIsRUFKOEIsRUFJMUIsRUFKMEIsRUFLOUIsMkVBTDhCLEVBTTlCLEVBTjhCLEVBTTFCLEVBTjBCLEVBTzlCLG9CQVA4QixFQVE5QixTQVI4QixFQVM5QnhHLElBQUksQ0FBQ29FLFNBQUwsQ0FBZSxNQUFNekMsWUFBWSxFQUFqQyxFQUFxQyxJQUFyQyxFQUEyQyxDQUEzQyxDQVQ4QixFQVU5QixLQVY4QixFQVc5QjBDLElBWDhCLENBV3pCLElBWHlCLENBQUQsQ0FBL0I7QUFhQSxRQUFNTSxRQUFRLEdBQUc7QUFDZkMsSUFBQUEsSUFBSSxFQUFFNUMsUUFEUztBQUVmNkMsSUFBQUEsUUFBUSxFQUFFLCtCQUFjakQsVUFBZCxFQUEwQixDQUExQjtBQUZLLEdBQWpCO0FBSUEsUUFBTWtGLFdBQVcsR0FBSSxHQUFFTCxRQUFTLFVBQVNFLEtBQU0sU0FBUUUsSUFBSyxFQUE1RDtBQUVBLFNBQU87QUFDTHJDLElBQUFBLFFBQVEsRUFBRSxPQURMO0FBRUxDLElBQUFBLE9BQU8sRUFBRyxHQUFFaUMsU0FBVSxxQ0FBYixHQUNMLG9DQUhDO0FBSUxLLElBQUFBLEdBQUcsRUFBRUQsV0FKQTtBQUtMbkMsSUFBQUEsUUFMSztBQU1MRCxJQUFBQSxXQUFXLEVBQUcsR0FBRThCLFNBQVUsdUJBQXNCdEIsT0FBUTtBQU5uRCxHQUFQO0FBUUQsQ0F2Q0Q7QUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBQ08sZUFBZThCLHFCQUFmLENBQXFDQyxRQUFyQyxFQUErQ3JGLFVBQS9DLEVBQTJEc0YsUUFBM0QsRUFBcUU7QUFDMUUsU0FBT3BHLE9BQU8sQ0FBQ3FHLEdBQVIsQ0FBWUYsUUFBUSxDQUFDRyxHQUFULENBQWEsT0FBTztBQUNyQ0MsSUFBQUEsS0FEcUM7QUFDOUJuQyxJQUFBQSxPQUFPLEVBQUVvQyxlQURxQjtBQUNKQyxJQUFBQSxJQURJO0FBQ0UvQyxJQUFBQSxRQURGO0FBQ1k4QixJQUFBQSxNQURaO0FBQ29Ca0IsSUFBQUEsTUFEcEI7QUFDNEJDLElBQUFBLEdBRDVCO0FBQ2lDQyxJQUFBQSxPQURqQztBQUMwQ0MsSUFBQUE7QUFEMUMsR0FBUCxLQUUxQjtBQUNKLFVBQU16QyxPQUFPLEdBQUdtQyxLQUFLLEdBQUdDLGVBQWUsQ0FBQ3ZCLEtBQWhCLENBQXNCLElBQXRCLEVBQTRCLENBQTVCLENBQUgsR0FBb0N1QixlQUF6RDtBQUNBLFVBQU10RixRQUFRLEdBQUdKLFVBQVUsQ0FBQ08sT0FBWCxFQUFqQjtBQUNBLFVBQU15RixVQUFVLEdBQUdoRyxVQUFVLENBQUNpRyxTQUFYLEVBQW5CO0FBQ0EsUUFBSUMsU0FBUyxHQUFHLElBQWhCOztBQUNBLFFBQUlMLEdBQUosRUFBUztBQUNQLFlBQU1NLFFBQVEsR0FBRyxJQUFJQyxXQUFKLENBQ2ZKLFVBQVUsQ0FBQ0sseUJBQVgsQ0FBcUNSLEdBQUcsQ0FBQ1MsS0FBSixDQUFVLENBQVYsQ0FBckMsQ0FEZSxFQUVmTixVQUFVLENBQUNLLHlCQUFYLENBQXFDUixHQUFHLENBQUNTLEtBQUosQ0FBVSxDQUFWLENBQXJDLENBRmUsQ0FBakI7QUFJQUosTUFBQUEsU0FBUyxHQUFHO0FBQ1ZqRCxRQUFBQSxRQUFRLEVBQUVrRCxRQURBO0FBRVZJLFFBQUFBLFdBQVcsRUFBRVYsR0FBRyxDQUFDakM7QUFGUCxPQUFaO0FBSUQ7O0FBQ0QsUUFBSVUsTUFBSjtBQUNBLFFBQUlDLFVBQUo7QUFDQSxRQUFJQyxTQUFKO0FBQ0EsUUFBSUMsZUFBZSxHQUFHLEtBQXRCO0FBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7QUFDSSxVQUFNSixPQUFPLEdBQUdzQixJQUFJLEdBQUcsQ0FBdkI7O0FBQ0EsUUFBSSxPQUFPSSxTQUFQLEtBQXFCLFFBQXJCLElBQWlDLE9BQU9ELE9BQVAsS0FBbUIsUUFBeEQsRUFBa0U7QUFDaEVyQixNQUFBQSxlQUFlLEdBQUcsSUFBbEIsQ0FEZ0UsQ0FFaEU7O0FBQ0FILE1BQUFBLE1BQU0sR0FBR25ELElBQUksQ0FBQ3FGLEdBQUwsQ0FBUyxDQUFULEVBQVlaLE1BQU0sR0FBRyxDQUFyQixDQUFUO0FBQ0FyQixNQUFBQSxVQUFVLEdBQUd1QixPQUFPLEdBQUcsQ0FBdkI7QUFDQXRCLE1BQUFBLFNBQVMsR0FBR3VCLFNBQVMsR0FBRyxDQUF4QjtBQUNELEtBTkQsTUFNTztBQUNMO0FBQ0E7QUFDQXpCLE1BQUFBLE1BQU0sR0FBRyxPQUFPc0IsTUFBUCxLQUFrQixRQUFsQixHQUE2QkEsTUFBTSxHQUFHLENBQXRDLEdBQTBDQSxNQUFuRDtBQUNEOztBQUVELFFBQUlhLEdBQUcsR0FBRztBQUNSN0QsTUFBQUEsUUFBUSxFQUFFQSxRQUFRLEtBQUssQ0FBYixHQUFpQixTQUFqQixHQUE2QixPQUQvQjtBQUVSRyxNQUFBQSxRQUFRLEVBQUU7QUFDUkMsUUFBQUEsSUFBSSxFQUFFNUM7QUFERTtBQUZGLEtBQVY7O0FBT0EsUUFBSXNFLE1BQUosRUFBWTtBQUNWK0IsTUFBQUEsR0FBRyxDQUFDdEIsR0FBSixHQUFVNUgsS0FBSyxDQUFDbUosVUFBTixDQUFpQmhDLE1BQWpCLENBQVY7QUFDRCxLQS9DRyxDQWlESjs7O0FBQ0EsUUFBSWlDLGFBQWEsR0FBRyxLQUFwQjs7QUFDQSxRQUFJakMsTUFBTSxLQUFLLG1CQUFYLElBQW1DcEIsT0FBTyxLQUFLLFlBQW5ELEVBQWtFO0FBQ2hFcUQsTUFBQUEsYUFBYSxHQUFHLElBQWhCO0FBQ0Q7O0FBRUQsUUFBSUwsS0FBSjs7QUFDQSxRQUFJO0FBQ0YsVUFBSTdCLGVBQUosRUFBcUI7QUFDbkIsWUFBSSxDQUFDa0MsYUFBTCxFQUFvQjtBQUNsQiwyQ0FBb0JYLFVBQXBCLEVBQWdDM0IsT0FBaEMsRUFBeUNDLE1BQXpDO0FBQ0EsMkNBQW9CMEIsVUFBcEIsRUFBZ0N6QixVQUFoQyxFQUE0Q0MsU0FBNUM7QUFDRDs7QUFDRDhCLFFBQUFBLEtBQUssR0FBRyxDQUFDLENBQUNqQyxPQUFELEVBQVVDLE1BQVYsQ0FBRCxFQUFvQixDQUFDQyxVQUFELEVBQWFDLFNBQWIsQ0FBcEIsQ0FBUjtBQUNELE9BTkQsTUFNTztBQUNMOEIsUUFBQUEsS0FBSyxHQUFHLCtCQUFjdEcsVUFBZCxFQUEwQnFFLE9BQTFCLEVBQW1DQyxNQUFuQyxDQUFSO0FBQ0Q7O0FBQ0RtQyxNQUFBQSxHQUFHLENBQUMxRCxRQUFKLENBQWFFLFFBQWIsR0FBd0JxRCxLQUF4QjtBQUVBLFlBQU1NLFlBQVksR0FBR3RCLFFBQVEsR0FBSSxLQUFJWixNQUFNLElBQUksT0FBUSxHQUExQixHQUErQixFQUE1RDtBQUNBK0IsTUFBQUEsR0FBRyxDQUFDNUQsT0FBSixHQUFlLEdBQUVTLE9BQVEsR0FBRXNELFlBQWEsRUFBeEM7O0FBRUEsVUFBSVYsU0FBSixFQUFlO0FBQ2JPLFFBQUFBLEdBQUcsQ0FBQ0ksU0FBSixHQUFnQixDQUFDWCxTQUFELENBQWhCO0FBQ0Q7QUFDRixLQWxCRCxDQWtCRSxPQUFPWSxHQUFQLEVBQVk7QUFDWkwsTUFBQUEsR0FBRyxHQUFHLE1BQU1yQyxvQkFBb0IsQ0FBQztBQUMvQkMsUUFBQUEsT0FEK0I7QUFFL0JDLFFBQUFBLE1BRitCO0FBRy9CQyxRQUFBQSxVQUgrQjtBQUkvQkMsUUFBQUEsU0FKK0I7QUFLL0JDLFFBQUFBLGVBTCtCO0FBTS9CckUsUUFBQUEsUUFOK0I7QUFPL0JKLFFBQUFBLFVBUCtCO0FBUS9CMEUsUUFBQUEsTUFSK0I7QUFTL0JwQixRQUFBQTtBQVQrQixPQUFELENBQWhDO0FBV0Q7O0FBRUQsV0FBT21ELEdBQVA7QUFDRCxHQTNGa0IsQ0FBWixDQUFQO0FBNEZEO0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNPLGVBQWVNLGtCQUFmLENBQWtDdkYsUUFBbEMsRUFBNEN4QixVQUE1QyxFQUF3RHNGLFFBQXhELEVBQWtFO0FBQ3ZFLE1BQUkwQixNQUFNLENBQUNDLFNBQVAsQ0FBaUJDLGNBQWpCLENBQWdDQyxJQUFoQyxDQUFxQzNGLFFBQXJDLEVBQStDLGNBQS9DLENBQUosRUFBb0U7QUFDbEVqRSxJQUFBQSxLQUFLLENBQUM2SixZQUFOLENBQW1CNUYsUUFBUSxDQUFDNkYsWUFBNUI7QUFDRDs7QUFDRCxTQUFPakMscUJBQXFCLENBQUM1RCxRQUFRLENBQUM2RCxRQUFWLEVBQW9CckYsVUFBcEIsRUFBZ0NzRixRQUFoQyxDQUE1QjtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmdlIH0gZnJvbSAnYXRvbS1saW50ZXInXG5pbXBvcnQgeyByYW5kb21CeXRlcyB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gJ3V0aWwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzLCBpbXBvcnQvZXh0ZW5zaW9uc1xuaW1wb3J0IHsgUmFuZ2UsIFRhc2sgfSBmcm9tICdhdG9tJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5pbXBvcnQgeyBzaGVsbCB9IGZyb20gJ2VsZWN0cm9uJ1xuaW1wb3J0IFJ1bGVzIGZyb20gJy4vcnVsZXMnXG5pbXBvcnQgeyB0aHJvd0lmSW52YWxpZFBvaW50IH0gZnJvbSAnLi92YWxpZGF0ZS9lZGl0b3InXG5cbmNvbnN0IGFzeW5jUmFuZG9tQnl0ZXMgPSBwcm9taXNpZnkocmFuZG9tQnl0ZXMpXG5leHBvcnQgY29uc3QgcnVsZXMgPSBuZXcgUnVsZXMoKVxubGV0IHdvcmtlciA9IG51bGxcbmxldCBpc0luY29tcGF0aWJsZUVzbGludFZlcnNpb24gPSBmYWxzZVxubGV0IHNlZW5JbmNvbXBhdGlibGVWZXJzaW9uTm90aWZpY2F0aW9uID0gZmFsc2VcblxuLyoqXG4gKiBTdGFydCB0aGUgd29ya2VyIHByb2Nlc3MgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlbiBzdGFydGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydFdvcmtlcigpIHtcbiAgaWYgKHdvcmtlciA9PT0gbnVsbCkge1xuICAgIHdvcmtlciA9IG5ldyBUYXNrKHJlcXVpcmUucmVzb2x2ZSgnLi93b3JrZXIuanMnKSlcbiAgfVxuXG4gIHdvcmtlci5vbignbG9nJywgKG9iaikgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmxvZyhKU09OLnBhcnNlKG9iaikpXG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnNvbGUubG9nKG9iailcbiAgICB9XG4gIH0pXG5cbiAgaWYgKHdvcmtlci5zdGFydGVkKSB7XG4gICAgLy8gV29ya2VyIHN0YXJ0IHJlcXVlc3QgaGFzIGFscmVhZHkgYmVlbiBzZW50XG4gICAgcmV0dXJuXG4gIH1cbiAgLy8gU2VuZCBlbXB0eSBhcmd1bWVudHMgYXMgd2UgZG9uJ3QgdXNlIHRoZW0gaW4gdGhlIHdvcmtlclxuICB3b3JrZXIuc3RhcnQoW10pXG5cbiAgLy8gTk9URTogTW9kaWZpZXMgdGhlIFRhc2sgb2YgdGhlIHdvcmtlciwgYnV0IGl0J3MgdGhlIG9ubHkgY2xlYW4gd2F5IHRvIHRyYWNrIHRoaXNcbiAgd29ya2VyLnN0YXJ0ZWQgPSB0cnVlXG59XG5cbi8qKlxuICogRm9yY2VzIHRoZSB3b3JrZXIgVGFzayB0byBraWxsIGl0c2VsZlxuICovXG5leHBvcnQgZnVuY3Rpb24ga2lsbFdvcmtlcigpIHtcbiAgaWYgKHdvcmtlciAhPT0gbnVsbCkge1xuICAgIHdvcmtlci50ZXJtaW5hdGUoKVxuICAgIHdvcmtlciA9IG51bGxcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmNvbXBhdGlibGVFc2xpbnQoKSB7XG4gIHJldHVybiBpc0luY29tcGF0aWJsZUVzbGludFZlcnNpb25cbn1cblxuLyoqXG4gKiBTZW5kIGEgam9iIHRvIHRoZSB3b3JrZXIgYW5kIHJldHVybiB0aGUgcmVzdWx0c1xuICogQHBhcmFtICB7T2JqZWN0fSBjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgdGhlIGpvYiB0byBzZW5kIHRvIHRoZSB3b3JrZXJcbiAqIEByZXR1cm4ge09iamVjdHxTdHJpbmd8RXJyb3J9ICAgICAgICBUaGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSB3b3JrZXJcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRKb2IoY29uZmlnKSB7XG4gIGlmICh3b3JrZXIgJiYgIXdvcmtlci5jaGlsZFByb2Nlc3MuY29ubmVjdGVkKSB7XG4gICAgLy8gU29tZXRpbWVzIHRoZSB3b3JrZXIgZGllcyBhbmQgYmVjb21lcyBkaXNjb25uZWN0ZWRcbiAgICAvLyBXaGVuIHRoYXQgaGFwcGVucywgaXQgc2VlbXMgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8gcmVjb3ZlciBvdGhlclxuICAgIC8vIHRoYW4gdG8ga2lsbCB0aGUgd29ya2VyIGFuZCBjcmVhdGUgYSBuZXcgb25lLlxuICAgIGtpbGxXb3JrZXIoKVxuICB9XG5cbiAgLy8gRW5zdXJlIHRoZSB3b3JrZXIgaXMgc3RhcnRlZFxuICBzdGFydFdvcmtlcigpXG5cbiAgLy8gRXhwYW5kIHRoZSBjb25maWcgd2l0aCBhIHVuaXF1ZSBJRCB0byBlbWl0IG9uXG4gIC8vIE5PVEU6IEpvYnMgX211c3RfIGhhdmUgYSB1bmlxdWUgSUQgYXMgdGhleSBhcmUgY29tcGxldGVseSBhc3luYyBhbmQgcmVzdWx0c1xuICAvLyBjYW4gYXJyaXZlIGJhY2sgaW4gYW55IG9yZGVyLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnLmVtaXRLZXkgPSAoYXdhaXQgYXN5bmNSYW5kb21CeXRlcyg1KSkudG9TdHJpbmcoJ2hleCcpIC8vIDUgYnl0ZXMgPSAxMCBoZXggY2hhcmFjdGVyc1xuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gQWxsIHdvcmtlciBlcnJvcnMgYXJlIGNhdWdodCBhbmQgcmUtZW1pdHRlZCBhbG9uZyB3aXRoIHRoZWlyIGFzc29jaWF0ZWRcbiAgICAvLyBlbWl0S2V5LCBzbyB0aGF0IHdlIGRvIG5vdCBjcmVhdGUgbXVsdGlwbGUgbGlzdGVuZXJzIGZvciB0aGUgc2FtZVxuICAgIC8vICd0YXNrOmVycm9yJyBldmVudFxuICAgIGNvbnN0IGVyclN1YiA9IHdvcmtlci5vbihgd29ya2VyRXJyb3I6JHtjb25maWcuZW1pdEtleX1gLCAoeyBtc2csIHN0YWNrLCBuYW1lIH0pID0+IHtcbiAgICAgIC8vIFJlLXRocm93IGVycm9ycyBmcm9tIHRoZSB0YXNrXG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihtc2cpXG4gICAgICAvLyBTZXQgdGhlIHN0YWNrIHRvIHRoZSBvbmUgZ2l2ZW4gdG8gdXMgYnkgdGhlIHdvcmtlclxuICAgICAgZXJyb3Iuc3RhY2sgPSBzdGFja1xuICAgICAgZXJyb3IubmFtZSA9IG5hbWVcbiAgICAgIGVyclN1Yi5kaXNwb3NlKClcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgcmVzcG9uc2VTdWIuZGlzcG9zZSgpXG4gICAgICByZWplY3QoZXJyb3IpXG4gICAgfSlcbiAgICBjb25zdCByZXNwb25zZVN1YiA9IHdvcmtlci5vbihjb25maWcuZW1pdEtleSwgKGRhdGEpID0+IHtcbiAgICAgIGVyclN1Yi5kaXNwb3NlKClcbiAgICAgIHJlc3BvbnNlU3ViLmRpc3Bvc2UoKVxuICAgICAgcmVzb2x2ZShkYXRhKVxuICAgIH0pXG4gICAgLy8gU2VuZCB0aGUgam9iIG9uIHRvIHRoZSB3b3JrZXJcbiAgICB0cnkge1xuICAgICAgd29ya2VyLnNlbmQoY29uZmlnKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVyclN1Yi5kaXNwb3NlKClcbiAgICAgIHJlc3BvbnNlU3ViLmRpc3Bvc2UoKVxuICAgICAgY29uc29sZS5lcnJvcihlKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlYnVnSW5mbygpIHtcbiAgY29uc3QgdGV4dEVkaXRvciA9IGF0b20ud29ya3NwYWNlLmdldEFjdGl2ZVRleHRFZGl0b3IoKVxuICBsZXQgZmlsZVBhdGhcbiAgbGV0IGVkaXRvclNjb3Blc1xuICBpZiAoYXRvbS53b3Jrc3BhY2UuaXNUZXh0RWRpdG9yKHRleHRFZGl0b3IpKSB7XG4gICAgZmlsZVBhdGggPSB0ZXh0RWRpdG9yLmdldFBhdGgoKVxuICAgIGVkaXRvclNjb3BlcyA9IHRleHRFZGl0b3IuZ2V0TGFzdEN1cnNvcigpLmdldFNjb3BlRGVzY3JpcHRvcigpLmdldFNjb3Blc0FycmF5KClcbiAgfSBlbHNlIHtcbiAgICAvLyBTb21laG93IHRoaXMgY2FuIGJlIGNhbGxlZCB3aXRoIG5vIGFjdGl2ZSBUZXh0RWRpdG9yLCBpbXBvc3NpYmxlIEkga25vdy4uLlxuICAgIGZpbGVQYXRoID0gJ3Vua25vd24nXG4gICAgZWRpdG9yU2NvcGVzID0gWyd1bmtub3duJ11cbiAgfVxuICBjb25zdCBwYWNrYWdlUGF0aCA9IGF0b20ucGFja2FnZXMucmVzb2x2ZVBhY2thZ2VQYXRoKCdsaW50ZXItZXNsaW50JylcbiAgbGV0IGxpbnRlckVzbGludE1ldGFcbiAgaWYgKHBhY2thZ2VQYXRoID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBBcHBhcmVudGx5IGZvciBzb21lIHVzZXJzIHRoZSBwYWNrYWdlIHBhdGggZmFpbHMgdG8gcmVzb2x2ZVxuICAgIGxpbnRlckVzbGludE1ldGEgPSB7IHZlcnNpb246ICd1bmtub3duIScgfVxuICB9IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZHluYW1pYy1yZXF1aXJlXG4gICAgbGludGVyRXNsaW50TWV0YSA9IHJlcXVpcmUoam9pbihwYWNrYWdlUGF0aCwgJ3BhY2thZ2UuanNvbicpKVxuICB9XG4gIGNvbnN0IGNvbmZpZyA9IGF0b20uY29uZmlnLmdldCgnbGludGVyLWVzbGludCcpXG4gIGNvbnN0IGhvdXJzU2luY2VSZXN0YXJ0ID0gTWF0aC5yb3VuZCgocHJvY2Vzcy51cHRpbWUoKSAvIDM2MDApICogMTApIC8gMTBcbiAgbGV0IHJldHVyblZhbFxuICB0cnkge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc2VuZEpvYih7XG4gICAgICB0eXBlOiAnZGVidWcnLFxuICAgICAgY29uZmlnLFxuICAgICAgZmlsZVBhdGhcbiAgICB9KVxuICAgIHJldHVyblZhbCA9IHtcbiAgICAgIGF0b21WZXJzaW9uOiBhdG9tLmdldFZlcnNpb24oKSxcbiAgICAgIGxpbnRlckVzbGludFZlcnNpb246IGxpbnRlckVzbGludE1ldGEudmVyc2lvbixcbiAgICAgIGxpbnRlckVzbGludENvbmZpZzogY29uZmlnLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICAgIGVzbGludFZlcnNpb246IHJlcXVpcmUoam9pbihyZXNwb25zZS5wYXRoLCAncGFja2FnZS5qc29uJykpLnZlcnNpb24sXG4gICAgICBob3Vyc1NpbmNlUmVzdGFydCxcbiAgICAgIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLFxuICAgICAgZXNsaW50VHlwZTogcmVzcG9uc2UudHlwZSxcbiAgICAgIGVzbGludFBhdGg6IHJlc3BvbnNlLnBhdGgsXG4gICAgICBlZGl0b3JTY29wZXMsXG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRFcnJvcihgJHtlcnJvcn1gKVxuICB9XG4gIHJldHVybiByZXR1cm5WYWxcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRGVidWdTdHJpbmcoKSB7XG4gIGNvbnN0IGRlYnVnID0gYXdhaXQgZ2V0RGVidWdJbmZvKClcbiAgY29uc3QgZGV0YWlscyA9IFtcbiAgICBgQXRvbSB2ZXJzaW9uOiAke2RlYnVnLmF0b21WZXJzaW9ufWAsXG4gICAgYGxpbnRlci1lc2xpbnQgdmVyc2lvbjogJHtkZWJ1Zy5saW50ZXJFc2xpbnRWZXJzaW9ufWAsXG4gICAgYEVTTGludCB2ZXJzaW9uOiAke2RlYnVnLmVzbGludFZlcnNpb259YCxcbiAgICBgSG91cnMgc2luY2UgbGFzdCBBdG9tIHJlc3RhcnQ6ICR7ZGVidWcuaG91cnNTaW5jZVJlc3RhcnR9YCxcbiAgICBgUGxhdGZvcm06ICR7ZGVidWcucGxhdGZvcm19YCxcbiAgICBgVXNpbmcgJHtkZWJ1Zy5lc2xpbnRUeXBlfSBFU0xpbnQgZnJvbTogJHtkZWJ1Zy5lc2xpbnRQYXRofWAsXG4gICAgYEN1cnJlbnQgZmlsZSdzIHNjb3BlczogJHtKU09OLnN0cmluZ2lmeShkZWJ1Zy5lZGl0b3JTY29wZXMsIG51bGwsIDIpfWAsXG4gICAgYGxpbnRlci1lc2xpbnQgY29uZmlndXJhdGlvbjogJHtKU09OLnN0cmluZ2lmeShkZWJ1Zy5saW50ZXJFc2xpbnRDb25maWcsIG51bGwsIDIpfWBcbiAgXVxuICByZXR1cm4gZGV0YWlscy5qb2luKCdcXG4nKVxufVxuXG4vKipcbiAqIFR1cm4gdGhlIGdpdmVuIG9wdGlvbnMgaW50byBhIExpbnRlciBtZXNzYWdlIGFycmF5XG4gKiBAcGFyYW0gIHtUZXh0RWRpdG9yfSB0ZXh0RWRpdG9yIFRoZSBUZXh0RWRpdG9yIHRvIHVzZSB0byBidWlsZCB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zICAgIFRoZSBwYXJhbWV0ZXJzIHVzZWQgdG8gZmlsbCBpbiB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5zZXZlcml0eT0nZXJyb3InXSBDYW4gYmUgb25lIG9mOiAnZXJyb3InLCAnd2FybmluZycsICdpbmZvJ1xuICogQHBhcmFtICB7c3RyaW5nfSBbb3B0aW9ucy5leGNlcnB0PScnXSBTaG9ydCB0ZXh0IHRvIHVzZSBpbiB0aGUgbWVzc2FnZVxuICogQHBhcmFtICB7c3RyaW5nfEZ1bmN0aW9ufSBbb3B0aW9ucy5kZXNjcmlwdGlvbl0gVXNlZCB0byBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cbiAqIEByZXR1cm4ge2ltcG9ydChcImF0b20vbGludGVyXCIpLk1lc3NhZ2VbXX0gTWVzc2FnZSB0byB1c2VyIGdlbmVyYXRlZCBmcm9tIHRoZSBwYXJhbWV0ZXJzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVVzZXJNZXNzYWdlKHRleHRFZGl0b3IsIG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHNldmVyaXR5ID0gJ2Vycm9yJyxcbiAgICBleGNlcnB0ID0gJycsXG4gICAgZGVzY3JpcHRpb24sXG4gIH0gPSBvcHRpb25zXG4gIHJldHVybiBbe1xuICAgIHNldmVyaXR5LFxuICAgIGV4Y2VycHQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgbG9jYXRpb246IHtcbiAgICAgIGZpbGU6IHRleHRFZGl0b3IuZ2V0UGF0aCgpLFxuICAgICAgcG9zaXRpb246IGdlbmVyYXRlUmFuZ2UodGV4dEVkaXRvciksXG4gICAgfSxcbiAgfV1cbn1cblxuZnVuY3Rpb24gaXNOZXdQYWNrYWdlSW5zdGFsbGVkKCkge1xuICByZXR1cm4gYXRvbS5wYWNrYWdlcy5pc1BhY2thZ2VMb2FkZWQoJ2xpbnRlci1lc2xpbnQtbm9kZScpXG4gICB8fCBhdG9tLnBhY2thZ2VzLmlzUGFja2FnZURpc2FibGVkKCdsaW50ZXItZXNsaW50LW5vZGUnKVxufVxuXG5mdW5jdGlvbiBzaG93SW5jb21wYXRpYmxlVmVyc2lvbk5vdGlmaWNhdGlvbihtZXNzYWdlKSB7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbkVuYWJsZWQgPSBhdG9tLmNvbmZpZy5nZXQoJ2xpbnRlci1lc2xpbnQuYWR2YW5jZWQuc2hvd0luY29tcGF0aWJsZVZlcnNpb25Ob3RpZmljYXRpb24nKVxuICBpZiAoIW5vdGlmaWNhdGlvbkVuYWJsZWQgfHwgc2VlbkluY29tcGF0aWJsZVZlcnNpb25Ob3RpZmljYXRpb24gfHwgaXNOZXdQYWNrYWdlSW5zdGFsbGVkKCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIFNob3cgdGhpcyBtZXNzYWdlIG9ubHkgb25jZSBwZXIgc2Vzc2lvbi5cbiAgc2VlbkluY29tcGF0aWJsZVZlcnNpb25Ob3RpZmljYXRpb24gPSB0cnVlXG4gIGNvbnN0IG5vdGlmaWNhdGlvbiA9IGF0b20ubm90aWZpY2F0aW9ucy5hZGRXYXJuaW5nKFxuICAgICdsaW50ZXItZXNsaW50OiBJbmNvbXBhdGlibGUgdmVyc2lvbicsXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246IG1lc3NhZ2UsXG4gICAgICBkaXNtaXNzYWJsZTogdHJ1ZSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6ICdJbnN0YWxsIGxpbnRlci1lc2xpbnQtbm9kZScsXG4gICAgICAgICAgb25EaWRDbGljaygpIHtcbiAgICAgICAgICAgIHNoZWxsLm9wZW5FeHRlcm5hbCgnaHR0cHM6Ly9hdG9tLmlvL3BhY2thZ2VzL2xpbnRlci1lc2xpbnQtbm9kZScpXG4gICAgICAgICAgICBub3RpZmljYXRpb24uZGlzbWlzcygpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdGV4dDogJ0RvblxcJ3Qgc2hvdyB0aGlzIG5vdGlmaWNhdGlvbiBhZ2FpbicsXG4gICAgICAgICAgb25EaWRDbGljaygpIHtcbiAgICAgICAgICAgIGF0b20uY29uZmlnLnNldCgnbGludGVyLWVzbGludC5hZHZhbmNlZC5zaG93SW5jb21wYXRpYmxlVmVyc2lvbk5vdGlmaWNhdGlvbicsIGZhbHNlKVxuICAgICAgICAgICAgbm90aWZpY2F0aW9uLmRpc21pc3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgKVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIG1lc3NhZ2UgdG8gdGhlIHVzZXIgaW4gb3JkZXIgdG8gbmljZWx5IGRpc3BsYXkgdGhlIEVycm9yIGJlaW5nXG4gKiB0aHJvd24gaW5zdGVhZCBvZiBkZXBlbmRpbmcgb24gZ2VuZXJpYyBlcnJvciBoYW5kbGluZy5cbiAqIEBwYXJhbSAge2ltcG9ydChcImF0b21cIikuVGV4dEVkaXRvcn0gdGV4dEVkaXRvciBUaGUgVGV4dEVkaXRvciB0byB1c2UgdG8gYnVpbGQgdGhlIG1lc3NhZ2VcbiAqIEBwYXJhbSAge0Vycm9yfSBlcnJvciAgICAgIEVycm9yIHRvIGdlbmVyYXRlIGEgbWVzc2FnZSBmb3JcbiAqIEByZXR1cm4ge2ltcG9ydChcImF0b20vbGludGVyXCIpLk1lc3NhZ2VbXX0gTWVzc2FnZSB0byB1c2VyIGdlbmVyYXRlZCBmcm9tIHRoZSBFcnJvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlRXJyb3IodGV4dEVkaXRvciwgZXJyb3IpIHtcbiAgY29uc3QgeyBzdGFjaywgbWVzc2FnZSwgbmFtZSB9ID0gZXJyb3JcbiAgLy8gV2Ugd2FudCB0aGlzIHNwZWNpZmljIHdvcmtlciBlcnJvciB0byBzaG93IHVwIGFzIGEgbm90aWZpY2F0aW9uIHNvIHRoYXQgd2VcbiAgLy8gY2FuIGluY2x1ZGUgYSBidXR0b24gZm9yIGluc3RhbGxpbmcgdGhlIG5ldyBwYWNrYWdlLlxuICBpZiAobmFtZSA9PT0gJ0luY29tcGF0aWJsZUVTTGludEVycm9yJykge1xuICAgIGlzSW5jb21wYXRpYmxlRXNsaW50VmVyc2lvbiA9IHRydWVcbiAgICBraWxsV29ya2VyKClcbiAgICBzaG93SW5jb21wYXRpYmxlVmVyc2lvbk5vdGlmaWNhdGlvbihtZXNzYWdlKVxuICAgIHJldHVyblxuICB9XG4gIC8vIE9ubHkgc2hvdyB0aGUgZmlyc3QgbGluZSBvZiB0aGUgbWVzc2FnZSBhcyB0aGUgZXhjZXJwdFxuICBjb25zdCBleGNlcnB0ID0gYEVycm9yIHdoaWxlIHJ1bm5pbmcgRVNMaW50OiAke21lc3NhZ2Uuc3BsaXQoJ1xcbicpWzBdfS5gXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gYDxkaXYgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXBcIj4ke21lc3NhZ2V9XFxuPGhyIC8+JHtzdGFja308L2Rpdj5gXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICByZXR1cm4gZ2VuZXJhdGVVc2VyTWVzc2FnZSh0ZXh0RWRpdG9yLCB7IHNldmVyaXR5OiAnZXJyb3InLCBleGNlcnB0LCBkZXNjcmlwdGlvbiB9KVxufVxuXG5jb25zdCBnZW5lcmF0ZUludmFsaWRUcmFjZSA9IGFzeW5jICh7XG4gIG1zZ0xpbmUsIG1zZ0NvbCwgbXNnRW5kTGluZSwgbXNnRW5kQ29sLFxuICBlc2xpbnRGdWxsUmFuZ2UsIGZpbGVQYXRoLCB0ZXh0RWRpdG9yLCBydWxlSWQsIG1lc3NhZ2Vcbn0pID0+IHtcbiAgbGV0IGVyck1zZ1JhbmdlID0gYCR7bXNnTGluZSArIDF9OiR7bXNnQ29sfWBcbiAgaWYgKGVzbGludEZ1bGxSYW5nZSkge1xuICAgIGVyck1zZ1JhbmdlICs9IGAgLSAke21zZ0VuZExpbmUgKyAxfToke21zZ0VuZENvbCArIDF9YFxuICB9XG4gIGNvbnN0IHJhbmdlVGV4dCA9IGBSZXF1ZXN0ZWQgJHtlc2xpbnRGdWxsUmFuZ2UgPyAnc3RhcnQgcG9pbnQnIDogJ3JhbmdlJ306ICR7ZXJyTXNnUmFuZ2V9YFxuICBjb25zdCBpc3N1ZVVSTCA9ICdodHRwczovL2dpdGh1Yi5jb20vQXRvbUxpbnRlci9saW50ZXItZXNsaW50L2lzc3Vlcy9uZXcnXG4gIGNvbnN0IHRpdGxlVGV4dCA9IGBJbnZhbGlkIHBvc2l0aW9uIGdpdmVuIGJ5ICcke3J1bGVJZH0nYFxuICBjb25zdCB0aXRsZSA9IGVuY29kZVVSSUNvbXBvbmVudCh0aXRsZVRleHQpXG4gIGNvbnN0IGJvZHkgPSBlbmNvZGVVUklDb21wb25lbnQoW1xuICAgICdFU0xpbnQgcmV0dXJuZWQgYSBwb2ludCB0aGF0IGRpZCBub3QgZXhpc3QgaW4gdGhlIGRvY3VtZW50IGJlaW5nIGVkaXRlZC4nLFxuICAgIGBSdWxlOiBcXGAke3J1bGVJZH1cXGBgLFxuICAgIHJhbmdlVGV4dCxcbiAgICAnJywgJycsXG4gICAgJzwhLS0gSWYgYXQgYWxsIHBvc3NpYmxlLCBwbGVhc2UgaW5jbHVkZSBjb2RlIHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlISAtLT4nLFxuICAgICcnLCAnJyxcbiAgICAnRGVidWcgaW5mb3JtYXRpb246JyxcbiAgICAnYGBganNvbicsXG4gICAgSlNPTi5zdHJpbmdpZnkoYXdhaXQgZ2V0RGVidWdJbmZvKCksIG51bGwsIDIpLFxuICAgICdgYGAnXG4gIF0uam9pbignXFxuJykpXG5cbiAgY29uc3QgbG9jYXRpb24gPSB7XG4gICAgZmlsZTogZmlsZVBhdGgsXG4gICAgcG9zaXRpb246IGdlbmVyYXRlUmFuZ2UodGV4dEVkaXRvciwgMCksXG4gIH1cbiAgY29uc3QgbmV3SXNzdWVVUkwgPSBgJHtpc3N1ZVVSTH0/dGl0bGU9JHt0aXRsZX0mYm9keT0ke2JvZHl9YFxuXG4gIHJldHVybiB7XG4gICAgc2V2ZXJpdHk6ICdlcnJvcicsXG4gICAgZXhjZXJwdDogYCR7dGl0bGVUZXh0fS4gU2VlIHRoZSBkZXNjcmlwdGlvbiBmb3IgZGV0YWlscy4gYFxuICAgICAgKyAnQ2xpY2sgdGhlIFVSTCB0byBvcGVuIGEgbmV3IGlzc3VlIScsXG4gICAgdXJsOiBuZXdJc3N1ZVVSTCxcbiAgICBsb2NhdGlvbixcbiAgICBkZXNjcmlwdGlvbjogYCR7cmFuZ2VUZXh0fVxcbk9yaWdpbmFsIG1lc3NhZ2U6ICR7bWVzc2FnZX1gXG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhIHJhdyByZXNwb25zZSBmcm9tIEVTTGludCwgdGhpcyBwcm9jZXNzZXMgdGhlIG1lc3NhZ2VzIGludG8gYSBmb3JtYXRcbiAqIGNvbXBhdGlibGUgd2l0aCB0aGUgTGludGVyIEFQSS5cbiAqIEBwYXJhbSAge09iamVjdH0gICAgIG1lc3NhZ2VzICAgVGhlIG1lc3NhZ2VzIGZyb20gRVNMaW50J3MgcmVzcG9uc2VcbiAqIEBwYXJhbSAge1RleHRFZGl0b3J9IHRleHRFZGl0b3IgVGhlIEF0b206OlRleHRFZGl0b3Igb2YgdGhlIGZpbGUgdGhlIG1lc3NhZ2VzIGJlbG9uZyB0b1xuICogQHBhcmFtICB7Ym9vbH0gICAgICAgc2hvd1J1bGUgICBXaGV0aGVyIHRvIHNob3cgdGhlIHJ1bGUgaW4gdGhlIG1lc3NhZ2VzXG4gKiBAcmV0dXJuIHtQcm9taXNlfSAgICAgICAgICAgICAgIFRoZSBtZXNzYWdlcyB0cmFuc2Zvcm1lZCBpbnRvIExpbnRlciBtZXNzYWdlc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0VTTGludE1lc3NhZ2VzKG1lc3NhZ2VzLCB0ZXh0RWRpdG9yLCBzaG93UnVsZSkge1xuICByZXR1cm4gUHJvbWlzZS5hbGwobWVzc2FnZXMubWFwKGFzeW5jICh7XG4gICAgZmF0YWwsIG1lc3NhZ2U6IG9yaWdpbmFsTWVzc2FnZSwgbGluZSwgc2V2ZXJpdHksIHJ1bGVJZCwgY29sdW1uLCBmaXgsIGVuZExpbmUsIGVuZENvbHVtblxuICB9KSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGZhdGFsID8gb3JpZ2luYWxNZXNzYWdlLnNwbGl0KCdcXG4nKVswXSA6IG9yaWdpbmFsTWVzc2FnZVxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGV4dEVkaXRvci5nZXRQYXRoKClcbiAgICBjb25zdCB0ZXh0QnVmZmVyID0gdGV4dEVkaXRvci5nZXRCdWZmZXIoKVxuICAgIGxldCBsaW50ZXJGaXggPSBudWxsXG4gICAgaWYgKGZpeCkge1xuICAgICAgY29uc3QgZml4UmFuZ2UgPSBuZXcgUmFuZ2UoXG4gICAgICAgIHRleHRCdWZmZXIucG9zaXRpb25Gb3JDaGFyYWN0ZXJJbmRleChmaXgucmFuZ2VbMF0pLFxuICAgICAgICB0ZXh0QnVmZmVyLnBvc2l0aW9uRm9yQ2hhcmFjdGVySW5kZXgoZml4LnJhbmdlWzFdKVxuICAgICAgKVxuICAgICAgbGludGVyRml4ID0ge1xuICAgICAgICBwb3NpdGlvbjogZml4UmFuZ2UsXG4gICAgICAgIHJlcGxhY2VXaXRoOiBmaXgudGV4dFxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgbXNnQ29sXG4gICAgbGV0IG1zZ0VuZExpbmVcbiAgICBsZXQgbXNnRW5kQ29sXG4gICAgbGV0IGVzbGludEZ1bGxSYW5nZSA9IGZhbHNlXG5cbiAgICAvKlxuICAgICBOb3RlOiBFU0xpbnQgcG9zaXRpb25zIGFyZSAxLWluZGV4ZWQsIHdoaWxlIEF0b20gZXhwZWN0cyAwLWluZGV4ZWQsXG4gICAgIHBvc2l0aW9ucy4gV2UgYXJlIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGVzZSB2YWx1ZXMgaGVyZSBzbyB3ZSBkb24ndCBoYXZlIHRvXG4gICAgIGtlZXAgZG9pbmcgc28gaW4gbGF0ZXIgdXNlcy5cbiAgICAgKi9cbiAgICBjb25zdCBtc2dMaW5lID0gbGluZSAtIDFcbiAgICBpZiAodHlwZW9mIGVuZENvbHVtbiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGVuZExpbmUgPT09ICdudW1iZXInKSB7XG4gICAgICBlc2xpbnRGdWxsUmFuZ2UgPSB0cnVlXG4gICAgICAvLyBIZXJlIHdlIGFsd2F5cyB3YW50IHRoZSBjb2x1bW4gdG8gYmUgYSBudW1iZXJcbiAgICAgIG1zZ0NvbCA9IE1hdGgubWF4KDAsIGNvbHVtbiAtIDEpXG4gICAgICBtc2dFbmRMaW5lID0gZW5kTGluZSAtIDFcbiAgICAgIG1zZ0VuZENvbCA9IGVuZENvbHVtbiAtIDFcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2Ugd2FudCBtc2dDb2wgdG8gcmVtYWluIHVuZGVmaW5lZCBpZiBpdCB3YXMgaW5pdGlhbGx5IHNvXG4gICAgICAvLyBgZ2VuZXJhdGVSYW5nZWAgd2lsbCBnaXZlIHVzIGEgcmFuZ2Ugb3ZlciB0aGUgZW50aXJlIGxpbmVcbiAgICAgIG1zZ0NvbCA9IHR5cGVvZiBjb2x1bW4gPT09ICdudW1iZXInID8gY29sdW1uIC0gMSA6IGNvbHVtblxuICAgIH1cblxuICAgIGxldCByZXQgPSB7XG4gICAgICBzZXZlcml0eTogc2V2ZXJpdHkgPT09IDEgPyAnd2FybmluZycgOiAnZXJyb3InLFxuICAgICAgbG9jYXRpb246IHtcbiAgICAgICAgZmlsZTogZmlsZVBhdGgsXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJ1bGVJZCkge1xuICAgICAgcmV0LnVybCA9IHJ1bGVzLmdldFJ1bGVVcmwocnVsZUlkKVxuICAgIH1cblxuICAgIC8vIEhBQ0sgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9BdG9tTGludGVyL2xpbnRlci1lc2xpbnQvaXNzdWVzLzEyNDlcbiAgICBsZXQgZml4TGluZUVuZGluZyA9IGZhbHNlXG4gICAgaWYgKHJ1bGVJZCA9PT0gJ3ByZXR0aWVyL3ByZXR0aWVyJyAmJiAobWVzc2FnZSA9PT0gJ0RlbGV0ZSBg4pCNYCcpKSB7XG4gICAgICBmaXhMaW5lRW5kaW5nID0gdHJ1ZVxuICAgIH1cblxuICAgIGxldCByYW5nZVxuICAgIHRyeSB7XG4gICAgICBpZiAoZXNsaW50RnVsbFJhbmdlKSB7XG4gICAgICAgIGlmICghZml4TGluZUVuZGluZykge1xuICAgICAgICAgIHRocm93SWZJbnZhbGlkUG9pbnQodGV4dEJ1ZmZlciwgbXNnTGluZSwgbXNnQ29sKVxuICAgICAgICAgIHRocm93SWZJbnZhbGlkUG9pbnQodGV4dEJ1ZmZlciwgbXNnRW5kTGluZSwgbXNnRW5kQ29sKVxuICAgICAgICB9XG4gICAgICAgIHJhbmdlID0gW1ttc2dMaW5lLCBtc2dDb2xdLCBbbXNnRW5kTGluZSwgbXNnRW5kQ29sXV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJhbmdlID0gZ2VuZXJhdGVSYW5nZSh0ZXh0RWRpdG9yLCBtc2dMaW5lLCBtc2dDb2wpXG4gICAgICB9XG4gICAgICByZXQubG9jYXRpb24ucG9zaXRpb24gPSByYW5nZVxuXG4gICAgICBjb25zdCBydWxlQXBwZW5kaXggPSBzaG93UnVsZSA/IGAgKCR7cnVsZUlkIHx8ICdGYXRhbCd9KWAgOiAnJ1xuICAgICAgcmV0LmV4Y2VycHQgPSBgJHttZXNzYWdlfSR7cnVsZUFwcGVuZGl4fWBcblxuICAgICAgaWYgKGxpbnRlckZpeCkge1xuICAgICAgICByZXQuc29sdXRpb25zID0gW2xpbnRlckZpeF1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJldCA9IGF3YWl0IGdlbmVyYXRlSW52YWxpZFRyYWNlKHtcbiAgICAgICAgbXNnTGluZSxcbiAgICAgICAgbXNnQ29sLFxuICAgICAgICBtc2dFbmRMaW5lLFxuICAgICAgICBtc2dFbmRDb2wsXG4gICAgICAgIGVzbGludEZ1bGxSYW5nZSxcbiAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgIHRleHRFZGl0b3IsXG4gICAgICAgIHJ1bGVJZCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHJldFxuICB9KSlcbn1cblxuLyoqXG4gKiBQcm9jZXNzZXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIGxpbnQgam9iXG4gKiBAcGFyYW0gIHtPYmplY3R9ICAgICByZXNwb25zZSAgIFRoZSByYXcgcmVzcG9uc2UgZnJvbSB0aGUgam9iXG4gKiBAcGFyYW0gIHtUZXh0RWRpdG9yfSB0ZXh0RWRpdG9yIFRoZSBBdG9tOjpUZXh0RWRpdG9yIG9mIHRoZSBmaWxlIHRoZSBtZXNzYWdlcyBiZWxvbmcgdG9cbiAqIEBwYXJhbSAge2Jvb2x9ICAgICAgIHNob3dSdWxlICAgV2hldGhlciB0byBzaG93IHRoZSBydWxlIGluIHRoZSBtZXNzYWdlc1xuICogQHJldHVybiB7UHJvbWlzZX0gICAgICAgICAgICAgICBUaGUgbWVzc2FnZXMgdHJhbnNmb3JtZWQgaW50byBMaW50ZXIgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NKb2JSZXNwb25zZShyZXNwb25zZSwgdGV4dEVkaXRvciwgc2hvd1J1bGUpIHtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXNwb25zZSwgJ3VwZGF0ZWRSdWxlcycpKSB7XG4gICAgcnVsZXMucmVwbGFjZVJ1bGVzKHJlc3BvbnNlLnVwZGF0ZWRSdWxlcylcbiAgfVxuICByZXR1cm4gcHJvY2Vzc0VTTGludE1lc3NhZ2VzKHJlc3BvbnNlLm1lc3NhZ2VzLCB0ZXh0RWRpdG9yLCBzaG93UnVsZSlcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/main.js b/dist/main.js index 8c9b3115..6dd585cc 100644 --- a/dist/main.js +++ b/dist/main.js @@ -175,6 +175,13 @@ module.exports = { return null; } + if (helpers.isIncompatibleEslint()) { + // The project's version of ESLint doesn't work with this package. Once + // this is detected, we won't try to send any jobs until the window is + // reloaded. + return null; + } + const filePath = textEditor.getPath(); if (!filePath) { @@ -242,6 +249,13 @@ module.exports = { return; } + if (helpers.isIncompatibleEslint()) { + // The project's version of ESLint doesn't work with this package. Once + // this is detected, we won't try to send any jobs until the window is + // reloaded. + return; + } + if (textEditor.isModified()) { // Abort for invalid or unsaved text editors const message = 'Linter-ESLint: Please save before fixing'; @@ -277,9 +291,13 @@ module.exports = { atom.notifications.addSuccess(response); } } catch (err) { + if (err.name === 'IncompatibleESLintError') { + return; + } + atom.notifications.addWarning(err.message); } } }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sIm5hbWVzIjpbImlkbGVDYWxsYmFja3MiLCJTZXQiLCJtYWtlSWRsZUNhbGxiYWNrIiwid29yayIsImNhbGxiYWNrSWQiLCJjYWxsQmFjayIsImRlbGV0ZSIsIndpbmRvdyIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJhZGQiLCJzY2hlZHVsZUlkbGVUYXNrcyIsImxpbnRlckVzbGludEluc3RhbGxQZWVyUGFja2FnZXMiLCJyZXF1aXJlIiwiaW5zdGFsbCIsImxpbnRlckVzbGludFN0YXJ0V29ya2VyIiwiaGVscGVycyIsInN0YXJ0V29ya2VyIiwiYXRvbSIsImluU3BlY01vZGUiLCJzY29wZXMiLCJzaG93UnVsZSIsImxpbnRIdG1sRmlsZXMiLCJpZ25vcmVkUnVsZXNXaGVuTW9kaWZpZWQiLCJpZ25vcmVkUnVsZXNXaGVuRml4aW5nIiwiaWdub3JlRml4YWJsZVJ1bGVzV2hpbGVUeXBpbmciLCJpZHNUb0lnbm9yZWRSdWxlcyIsInJ1bGVJZHMiLCJBcnJheSIsImZyb20iLCJyZWR1Y2UiLCJpZHMiLCJpZCIsIk9iamVjdCIsImFzc2lnbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJhY3RpdmF0ZSIsInN1YnNjcmlwdGlvbnMiLCJDb21wb3NpdGVEaXNwb3NhYmxlIiwiZW1iZWRkZWRTY29wZSIsImNvbmZpZyIsIm9ic2VydmUiLCJ2YWx1ZSIsInB1c2giLCJpbmRleE9mIiwic3BsaWNlIiwibGVuZ3RoIiwicHJvdG90eXBlIiwiYXBwbHkiLCJpbmNsdWRlcyIsIndvcmtzcGFjZSIsIm9ic2VydmVUZXh0RWRpdG9ycyIsImVkaXRvciIsIm9uRGlkU2F2ZSIsImdldCIsImZpeEpvYiIsImNvbW1hbmRzIiwiZGVidWdTdHJpbmciLCJnZW5lcmF0ZURlYnVnU3RyaW5nIiwibm90aWZpY2F0aW9uT3B0aW9ucyIsImRldGFpbCIsImRpc21pc3NhYmxlIiwibm90aWZpY2F0aW9ucyIsImFkZEluZm8iLCJjb250ZXh0TWVudSIsImxhYmVsIiwiY29tbWFuZCIsInNob3VsZERpc3BsYXkiLCJldnQiLCJhY3RpdmVFZGl0b3IiLCJnZXRBY3RpdmVUZXh0RWRpdG9yIiwiZXZ0SXNBY3RpdmVFZGl0b3IiLCJwYXRoIiwic29tZSIsImVsZW0iLCJjb21wb25lbnQiLCJkZWFjdGl2YXRlIiwiZm9yRWFjaCIsImNhbGxiYWNrSUQiLCJjYW5jZWxJZGxlQ2FsbGJhY2siLCJjbGVhciIsImtpbGxXb3JrZXIiLCJkaXNwb3NlIiwicHJvdmlkZUxpbnRlciIsIm5hbWUiLCJncmFtbWFyU2NvcGVzIiwic2NvcGUiLCJsaW50c09uQ2hhbmdlIiwibGludCIsInRleHRFZGl0b3IiLCJpc1RleHRFZGl0b3IiLCJmaWxlUGF0aCIsImdldFBhdGgiLCJnZW5lcmF0ZVVzZXJNZXNzYWdlIiwic2V2ZXJpdHkiLCJleGNlcnB0IiwidGV4dCIsImdldFRleHQiLCJydWxlcyIsImlzTW9kaWZpZWQiLCJpZ25vcmVkUnVsZXMiLCJnZXRGaXhhYmxlUnVsZXMiLCJydWxlSWQiLCJyZXNwb25zZSIsInNlbmRKb2IiLCJ0eXBlIiwiY29udGVudHMiLCJwcm9qZWN0UGF0aCIsInByb2plY3QiLCJyZWxhdGl2aXplUGF0aCIsInByb2Nlc3NKb2JSZXNwb25zZSIsImVycm9yIiwiaGFuZGxlRXJyb3IiLCJpc1NhdmUiLCJtZXNzYWdlIiwiYWRkRXJyb3IiLCJrZXlzIiwiYWRkU3VjY2VzcyIsImVyciIsImFkZFdhcm5pbmciXSwibWFwcGluZ3MiOiI7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7OztBQUpBO0FBTUE7QUFDQSxNQUFNQSxhQUFhLEdBQUcsSUFBSUMsR0FBSixFQUF0Qjs7QUFFQSxNQUFNQyxnQkFBZ0IsR0FBSUMsSUFBRCxJQUFVO0FBQ2pDLE1BQUlDLFVBQUo7O0FBQ0EsUUFBTUMsUUFBUSxHQUFHLE1BQU07QUFDckJMLElBQUFBLGFBQWEsQ0FBQ00sTUFBZCxDQUFxQkYsVUFBckI7QUFDQUQsSUFBQUEsSUFBSTtBQUNMLEdBSEQ7O0FBSUFDLEVBQUFBLFVB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Q0FBakQsRUFBb0Q7QUFDbERvRCxNQUFBQSxLQUFLLEdBQUczRSxzQkFBUjtBQUNEOztBQUVELFFBQUk7QUFDRixZQUFNZ0YsUUFBUSxHQUFHLE1BQU14RixPQUFPLENBQUN5RixPQUFSLENBQWdCO0FBQ3JDQyxRQUFBQSxJQUFJLEVBQUUsS0FEK0I7QUFFckNqRSxRQUFBQSxNQUFNLEVBQUV2QixJQUFJLENBQUN1QixNQUFMLENBQVljLEdBQVosQ0FBZ0IsZUFBaEIsQ0FGNkI7QUFHckNvRCxRQUFBQSxRQUFRLEVBQUVWLElBSDJCO0FBSXJDRSxRQUFBQSxLQUpxQztBQUtyQ1AsUUFBQUEsUUFMcUM7QUFNckNnQixRQUFBQTtBQU5xQyxPQUFoQixDQUF2Qjs7QUFRQSxVQUFJLENBQUNNLE1BQUwsRUFBYTtBQUNYaEcsUUFBQUEsSUFBSSxDQUFDNkMsYUFBTCxDQUFtQnVELFVBQW5CLENBQThCZCxRQUE5QjtBQUNEO0FBQ0YsS0FaRCxDQVlFLE9BQU9lLEdBQVAsRUFBWTtBQUNackcsTUFBQUEsSUFBSSxDQUFDNkMsYUFBTCxDQUFtQnlELFVBQW5CLENBQThCRCxHQUFHLENBQUNKLE9BQWxDO0FBQ0Q7QUFDRjs7QUFyT2MsQ0FBakIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzLCBpbXBvcnQvZXh0ZW5zaW9uc1xuaW1wb3J0IHsgQ29tcG9zaXRlRGlzcG9zYWJsZSB9IGZyb20gJ2F0b20nXG5pbXBvcnQgeyBoYXNWYWxpZFNjb3BlIH0gZnJvbSAnLi92YWxpZGF0ZS9lZGl0b3InXG5pbXBvcnQgKiBhcyBoZWxwZXJzIGZyb20gJy4vaGVscGVycydcbmltcG9ydCB7IG1pZ3JhdGVDb25maWdPcHRpb25zIH0gZnJvbSAnLi9taWdyYXRlLWNvbmZpZy1vcHRpb25zJ1xuXG4vLyBJbnRlcm5hbCB2YXJpYWJsZXNcbmNvbnN0IGlkbGVDYWxsYmFja3MgPSBuZXcgU2V0KClcblxuY29uc3QgbWFrZUlkbGVDYWxsYmFjayA9ICh3b3JrKSA9PiB7XG4gIGxldCBjYWxsYmFja0lkXG4gIGNvbnN0IGNhbGxCYWNrID0gKCkgPT4ge1xuICAgIGlkbGVDYWxsYmFja3MuZGVsZXRlKGNhbGxiYWNrSWQpXG4gICAgd29yaygpXG4gIH1cbiAgY2FsbGJhY2tJZCA9IHdpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrKGNhbGxCYWNrKVxuICBpZGxlQ2FsbGJhY2tzLmFkZChjYWxsYmFja0lkKVxufVxuXG5jb25zdCBzY2hlZHVsZUlkbGVUYXNrcyA9ICgpID0+IHtcbiAgY29uc3QgbGludGVyRXNsaW50SW5zdGFsbFBlZXJQYWNrYWdlcyA9ICgpID0+IHtcbiAgICByZXF1aXJlKCdhdG9tLXBhY2thZ2UtZGVwcycpLmluc3RhbGwoJ2xpbnRlci1lc2xpbnQnKVxuICB9XG4gIGNvbnN0IGxpbnRlckVzbGludFN0YXJ0V29ya2VyID0gKCkgPT4ge1xuICAgIGhlbHBlcnMuc3RhcnRXb3JrZXIoKVxuICB9XG5cbiAgaWYgKCFhdG9tLmluU3BlY01vZGUoKSkge1xuICAgIG1ha2VJZGxlQ2FsbGJhY2sobGludGVyRXNsaW50SW5zdGFsbFBlZXJQYWNrYWdlcylcbiAgICBtYWtlSWRsZUNhbGxiYWNrKGxpbnRlckVzbGludFN0YXJ0V29ya2VyKVxuICB9XG59XG5cbi8vIENvbmZpZ3VyYXRpb25cbmNvbnN0IHNjb3BlcyA9IFtdXG5sZXQgc2hvd1J1bGVcbmxldCBsaW50SHRtbEZpbGVzXG5sZXQgaWdub3JlZFJ1bGVzV2hlbk1vZGlmaWVkXG5sZXQgaWdub3JlZFJ1bGVzV2hlbkZpeGluZ1xubGV0IGlnbm9yZUZpeGFibGVSdWxlc1doaWxlVHlwaW5nXG5cbi8vIEludGVybmFsIGZ1bmN0aW9uc1xuLyoqXG4gKiBHaXZlbiBhbiBBcnJheSBvciBpdGVyYWJsZSBjb250YWluaW5nIGEgbGlzdCBvZiBSdWxlIElEcywgcmV0dXJuIGFuIE9iamVjdFxuICogdG8gYmUgc2VudCB0byBFU0xpbnQncyBjb25maWd1cmF0aW9uIHRoYXQgZGlzYWJsZXMgdGhvc2UgcnVsZXMuXG4gKiBAcGFyYW0gIHtbaXRlcmFibGVdfSBydWxlSWRzIEl0ZXJhYmxlIGNvbnRhaW5pbmcgcnVsZUlkcyB0byBpZ25vcmVcbiAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBmb3IgZWFjaCBydWxlIHRvIGlnbm9yZVxuICovXG5jb25zdCBpZHNUb0lnbm9yZWRSdWxlcyA9IChydWxlSWRzKSA9PiAoXG4gIEFycmF5LmZyb20ocnVsZUlkcykucmVkdWNlKFxuICAgIC8vIDAgaXMgdGhlIHNldmVyaXR5IHRvIHR1cm4gb2ZmIGEgcnVsZVxuICAgIChpZHMsIGlkKSA9PiBPYmplY3QuYXNzaWduKGlkcywgeyBbaWRdOiAwIH0pLFxuICAgIHt9XG4gICkpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhY3RpdmF0ZSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMgPSBuZXcgQ29tcG9zaXRlRGlzcG9zYWJsZSgpXG5cbiAgICBtaWdyYXRlQ29uZmlnT3B0aW9ucygpXG5cbiAgICBjb25zdCBlbWJlZGRlZFNjb3BlID0gJ3NvdXJjZS5qcy5lbWJlZGRlZC5odG1sJ1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS5jb25maWcub2JzZXJ2ZShcbiAgICAgICdsaW50ZXItZXNsaW50LmxpbnRIdG1sRmlsZXMnLFxuICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgIGxpbnRIdG1sRmlsZXMgPSB2YWx1ZVxuICAgICAgICBpZiAobGludEh0bWxGaWxlcykge1xuICAgICAgICAgIHNjb3Blcy5wdXNoKGVtYmVkZGVkU2NvcGUpXG4gICAgICAgIH0gZWxzZSBpZiAoc2NvcGVzLmluZGV4T2YoZW1iZWRkZWRTY29wZSkgIT09IC0xKSB7XG4gICAgICAgICAgc2NvcGVzLnNwbGljZShzY29wZXMuaW5kZXhPZihlbWJlZGRlZFNjb3BlKSwgMSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkpXG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGF0b20uY29uZmlnLm9ic2VydmUoXG4gICAgICAnbGludGVyLWVzbGludC5zY29wZXMnLFxuICAgICAgKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIFJlbW92ZSBhbnkgb2xkIHNjb3Blc1xuICAgICAgICBzY29wZXMuc3BsaWNlKDAsIHNjb3Blcy5sZW5ndGgpXG4gICAgICAgIC8vIEFkZCB0aGUgY3VycmVudCBzY29wZXNcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoc2NvcGVzLCB2YWx1ZSlcbiAgICAgICAgLy8gRW5zdXJlIEhUTUwgbGludGluZyBzdGlsbCB3b3JrcyBpZiB0aGUgc2V0dGluZyBpcyB1cGRhdGVkXG4gICAgICAgIGlmIChsaW50SHRtbEZpbGVzICYmICFzY29wZXMuaW5jbHVkZXMoZW1iZWRkZWRTY29wZSkpIHtcbiAgICAgICAgICBzY29wZXMucHVzaChlbWJlZGRlZFNjb3BlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS53b3Jrc3BhY2Uub2JzZXJ2ZVRleHRFZGl0b3JzKChlZGl0b3IpID0+IHtcbiAgICAgIGVkaXRvci5vbkRpZFNhdmUoYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoaGFzVmFsaWRTY29wZShlZGl0b3IsIHNjb3BlcylcbiAgICAgICAgICAmJiBhdG9tLmNvbmZpZy5nZXQoJ2xpbnRlci1lc2xpbnQuYXV0b2ZpeC5maXhPblNhdmUnKVxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmZpeEpvYih0cnVlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pKVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChhdG9tLmNvbW1hbmRzLmFkZCgnYXRvbS10ZXh0LWVkaXRvcicsIHtcbiAgICAgICdsaW50ZXItZXNsaW50OmRlYnVnJzogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWJ1Z1N0cmluZyA9IGF3YWl0IGhlbHBlcnMuZ2VuZXJhdGVEZWJ1Z1N0cmluZygpXG4gICAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbk9wdGlvbnMgPSB7IGRldGFpbDogZGVidWdTdHJpbmcsIGRpc21pc3NhYmxlOiB0cnVlIH1cbiAgICAgICAgYXRvbS5ub3RpZmljYXRpb25zLmFkZEluZm8oJ2xpbnRlci1lc2xpbnQgZGVidWdnaW5nIGluZm9ybWF0aW9uJywgbm90aWZpY2F0aW9uT3B0aW9ucylcbiAgICAgIH1cbiAgICB9KSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS5jb21tYW5kcy5hZGQoJ2F0b20tdGV4dC1lZGl0b3InLCB7XG4gICAgICAnbGludGVyLWVzbGludDpmaXgtZmlsZSc6IGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5maXhKb2IoKVxuICAgICAgfVxuICAgIH0pKVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChhdG9tLmNvbmZpZy5vYnNlcnZlKFxuICAgICAgJ2xpbnRlci1lc2xpbnQuYWR2YW5jZWQuc2hvd1J1bGVJZEluTWVzc2FnZScsXG4gICAgICAodmFsdWUpID0+IHsgc2hvd1J1bGUgPSB2YWx1ZSB9XG4gICAgKSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS5jb25maWcub2JzZXJ2ZShcbiAgICAgICdsaW50ZXItZXNsaW50LmRpc2FibGluZy5ydWxlc1RvU2lsZW5jZVdoaWxlVHlwaW5nJyxcbiAgICAgIChpZHMpID0+IHsgaWdub3JlZFJ1bGVzV2hlbk1vZGlmaWVkID0gaWRzIH1cbiAgICApKVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChhdG9tLmNvbmZpZy5vYnNlcnZlKFxuICAgICAgJ2xpbnRlci1lc2xpbnQuYXV0b2ZpeC5ydWxlc1RvRGlzYWJsZVdoaWxlRml4aW5nJyxcbiAgICAgIChpZHMpID0+IHsgaWdub3JlZFJ1bGVzV2hlbkZpeGluZyA9IGlkc1RvSWdub3JlZFJ1bGVzKGlkcykgfVxuICAgICkpXG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGF0b20uY29uZmlnLm9ic2VydmUoXG4gICAgICAnbGludGVyLWVzbGludC5hdXRvZml4Lmlnbm9yZUZpeGFibGVSdWxlc1doaWxlVHlwaW5nJyxcbiAgICAgICh2YWx1ZSkgPT4geyBpZ25vcmVGaXhhYmxlUnVsZXNXaGlsZVR5cGluZyA9IHZhbHVlIH1cbiAgICApKVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChhdG9tLmNvbnRleHRNZW51LmFkZCh7XG4gICAgICAnYXRvbS10ZXh0LWVkaXRvcjpub3QoLm1pbmkpLCAub3ZlcmxheWVyJzogW3tcbiAgICAgICAgbGFiZWw6ICdFU0xpbnQgRml4JyxcbiAgICAgICAgY29tbWFuZDogJ2xpbnRlci1lc2xpbnQ6Zml4LWZpbGUnLFxuICAgICAgICBzaG91bGREaXNwbGF5OiAoZXZ0KSA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aXZlRWRpdG9yID0gYXRvbS53b3Jrc3BhY2UuZ2V0QWN0aXZlVGV4dEVkaXRvcigpXG4gICAgICAgICAgaWYgKCFhY3RpdmVFZGl0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBCbGFjayBtYWdpYyFcbiAgICAgICAgICAvLyBDb21wYXJlcyB0aGUgcHJpdmF0ZSBjb21wb25lbnQgcHJvcGVydHkgb2YgdGhlIGFjdGl2ZSBUZXh0RWRpdG9yXG4gICAgICAgICAgLy8gICBhZ2FpbnN0IHRoZSBjb21wb25lbnRzIG9mIHRoZSBlbGVtZW50c1xuICAgICAgICAgIGNvbnN0IGV2dElzQWN0aXZlRWRpdG9yID0gZXZ0LnBhdGguc29tZSgoZWxlbSkgPT4gKFxuICAgICAgICAgICAgLy8gQXRvbSB2MS4xOS4wK1xuICAgICAgICAgICAgZWxlbS5jb21wb25lbnQgJiYgYWN0aXZlRWRpdG9yLmNvbXBvbmVudFxuICAgICAgICAgICAgICAmJiBlbGVtLmNvbXBvbmVudCA9PT0gYWN0aXZlRWRpdG9yLmNvbXBvbmVudCkpXG4gICAgICAgICAgLy8gT25seSBzaG93IGlmIGl0IHdhcyB0aGUgYWN0aXZlIGVkaXRvciBhbmQgaXQgaXMgYSB2YWxpZCBzY29wZVxuICAgICAgICAgIHJldHVybiBldnRJc0FjdGl2ZUVkaXRvciAmJiBoYXNWYWxpZFNjb3BlKGFjdGl2ZUVkaXRvciwgc2NvcGVzKVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH0pKVxuXG4gICAgc2NoZWR1bGVJZGxlVGFza3MoKVxuICB9LFxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWRsZUNhbGxiYWNrcy5mb3JFYWNoKChjYWxsYmFja0lEKSA9PiB3aW5kb3cuY2FuY2VsSWRsZUNhbGxiYWNrKGNhbGxiYWNrSUQpKVxuICAgIGlkbGVDYWxsYmFja3MuY2xlYXIoKVxuICAgIGlmIChoZWxwZXJzKSB7XG4gICAgICAvLyBJZiB0aGUgaGVscGVycyBtb2R1bGUgaGFzbid0IGJlZW4gbG9hZGVkIHRoZW4gdGhlcmUgd2FzIG5vIGNoYW5jZSBhXG4gICAgICAvLyB3b3JrZXIgd2FzIHN0YXJ0ZWQgYW55d2F5LlxuICAgICAgaGVscGVycy5raWxsV29ya2VyKClcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmRpc3Bvc2UoKVxuICB9LFxuXG4gIHByb3ZpZGVMaW50ZXIoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdFU0xpbnQnLFxuICAgICAgZ3JhbW1hclNjb3Blczogc2NvcGVzLFxuICAgICAgc2NvcGU6ICdmaWxlJyxcbiAgICAgIGxpbnRzT25DaGFuZ2U6IHRydWUsXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7aW1wb3J0KFwiYXRvbVwiKS5UZXh0RWRpdG9yfSB0ZXh0RWRpdG9yXG4gICAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxpbXBvcnQoXCJhdG9tL2xpbnRlclwiKS5NZXNzYWdlW10+fVxuICAgICAgICovXG4gICAgICBsaW50OiBhc3luYyAodGV4dEVkaXRvcikgPT4ge1xuICAgICAgICBpZiAoIWF0b20ud29ya3NwYWNlLmlzVGV4dEVkaXRvcih0ZXh0RWRpdG9yKSkge1xuICAgICAgICAgIC8vIElmIHdlIHNvbWVob3cgZ2V0IGZlZCBhbiBpbnZhbGlkIFRleHRFZGl0b3IganVzdCBpbW1lZGlhdGVseSByZXR1cm5cbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSB0ZXh0RWRpdG9yLmdldFBhdGgoKVxuICAgICAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgICAgLy8gVGhlIGVkaXRvciBjdXJyZW50bHkgaGFzIG5vIHBhdGgsIHdlIGNhbid0IHJlcG9ydCBtZXNzYWdlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gTGludGVyIHNvIGp1c3QgcmV0dXJuIG51bGxcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCc6Ly8nKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBwYXRoIGlzIGEgVVJMIChOdWNsaWRlIHJlbW90ZSBmaWxlKSByZXR1cm4gYSBtZXNzYWdlXG4gICAgICAgICAgLy8gdGVsbGluZyB0aGUgdXNlciB3ZSBhcmUgdW5hYmxlIHRvIHdvcmsgb24gcmVtb3RlIGZpbGVzLlxuICAgICAgICAgIHJldHVybiBoZWxwZXJzLmdlbmVyYXRlVXNlck1lc3NhZ2UodGV4dEVkaXRvciwge1xuICAgICAgICAgICAgc2V2ZXJpdHk6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgIGV4Y2VycHQ6ICdSZW1vdGUgZmlsZSBvcGVuLCBsaW50ZXItZXNsaW50IGlzIGRpc2FibGVkIGZvciB0aGlzIGZpbGUuJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IHRleHRFZGl0b3IuZ2V0VGV4dCgpXG5cbiAgICAgICAgbGV0IHJ1bGVzID0ge31cbiAgICAgICAgaWYgKHRleHRFZGl0b3IuaXNNb2RpZmllZCgpKSB7XG4gICAgICAgICAgaWYgKGlnbm9yZUZpeGFibGVSdWxlc1doaWxlVHlwaW5nKSB7XG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGZpeGFibGUgcnVsZXMgd2lsbCBvbmx5IGhhdmUgdmFsdWVzIGFmdGVyIHRoZSBmaXJzdCBsaW50IGpvYlxuICAgICAgICAgICAgY29uc3QgaWdub3JlZFJ1bGVzID0gbmV3IFNldChoZWxwZXJzLnJ1bGVzLmdldEZpeGFibGVSdWxlcygpKVxuICAgICAgICAgICAgaWdub3JlZFJ1bGVzV2hlbk1vZGlmaWVkLmZvckVhY2goKHJ1bGVJZCkgPT4gaWdub3JlZFJ1bGVzLmFkZChydWxlSWQpKVxuICAgICAgICAgICAgcnVsZXMgPSBpZHNUb0lnbm9yZWRSdWxlcyhpZ25vcmVkUnVsZXMpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1bGVzID0gaWRzVG9JZ25vcmVkUnVsZXMoaWdub3JlZFJ1bGVzV2hlbk1vZGlmaWVkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBoZWxwZXJzLnNlbmRKb2Ioe1xuICAgICAgICAgICAgdHlwZTogJ2xpbnQnLFxuICAgICAgICAgICAgY29udGVudHM6IHRleHQsXG4gICAgICAgICAgICBjb25maWc6IGF0b20uY29uZmlnLmdldCgnbGludGVyLWVzbGludCcpLFxuICAgICAgICAgICAgcnVsZXMsXG4gICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgIHByb2plY3RQYXRoOiBhdG9tLnByb2plY3QucmVsYXRpdml6ZVBhdGgoZmlsZVBhdGgpWzBdIHx8ICcnXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAodGV4dEVkaXRvci5nZXRUZXh0KCkgIT09IHRleHQpIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBUaGUgZWRpdG9yIHRleHQgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxpbnQgd2FzIHRyaWdnZXJlZCxcbiAgICAgICAgICAgIGFzIHdlIGNhbid0IGJlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyB3aWxsIG1hcCBwcm9wZXJseSBiYWNrIHRvXG4gICAgICAgICAgICB0aGUgbmV3IGNvbnRlbnRzLCBzaW1wbHkgcmV0dXJuIGBudWxsYCB0byB0ZWxsIHRoZVxuICAgICAgICAgICAgYHByb3ZpZGVMaW50ZXJgIGNvbnN1bWVyIG5vdCB0byB1cGRhdGUgdGhlIHNhdmVkIHJlc3VsdHMuXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhlbHBlcnMucHJvY2Vzc0pvYlJlc3BvbnNlKHJlc3BvbnNlLCB0ZXh0RWRpdG9yLCBzaG93UnVsZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gaGVscGVycy5oYW5kbGVFcnJvcih0ZXh0RWRpdG9yLCBlcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBmaXhKb2IoaXNTYXZlID0gZmFsc2UpIHtcbiAgICBjb25zdCB0ZXh0RWRpdG9yID0gYXRvbS53b3Jrc3BhY2UuZ2V0QWN0aXZlVGV4dEVkaXRvcigpXG5cbiAgICBpZiAoIXRleHRFZGl0b3IgfHwgIWF0b20ud29ya3NwYWNlLmlzVGV4dEVkaXRvcih0ZXh0RWRpdG9yKSkge1xuICAgICAgLy8gU2lsZW50bHkgcmV0dXJuIGlmIHRoZSBUZXh0RWRpdG9yIGlzIGludmFsaWRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0ZXh0RWRpdG9yLmlzTW9kaWZpZWQoKSkge1xuICAgICAgLy8gQWJvcnQgZm9yIGludmFsaWQgb3IgdW5zYXZlZCB0ZXh0IGVkaXRvcnNcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnTGludGVyLUVTTGludDogUGxlYXNlIHNhdmUgYmVmb3JlIGZpeGluZydcbiAgICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRFcnJvcihtZXNzYWdlKVxuICAgIH1cblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGV4dEVkaXRvci5nZXRQYXRoKClcbiAgICBjb25zdCBwcm9qZWN0UGF0aCA9IGF0b20ucHJvamVjdC5yZWxhdGl2aXplUGF0aChmaWxlUGF0aClbMF1cblxuICAgIC8vIEdldCB0aGUgdGV4dCBmcm9tIHRoZSBlZGl0b3IsIHNvIHdlIGNhbiB1c2UgZXhlY3V0ZU9uVGV4dFxuICAgIGNvbnN0IHRleHQgPSB0ZXh0RWRpdG9yLmdldFRleHQoKVxuICAgIC8vIERvIG5vdCB0cnkgdG8gbWFrZSBmaXhlcyBvbiBhbiBlbXB0eSBmaWxlXG4gICAgaWYgKHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgcnVsZXMgPSB7fVxuICAgIGlmIChPYmplY3Qua2V5cyhpZ25vcmVkUnVsZXNXaGVuRml4aW5nKS5sZW5ndGggPiAwKSB7XG4gICAgICBydWxlcyA9IGlnbm9yZWRSdWxlc1doZW5GaXhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBoZWxwZXJzLnNlbmRKb2Ioe1xuICAgICAgICB0eXBlOiAnZml4JyxcbiAgICAgICAgY29uZmlnOiBhdG9tLmNvbmZpZy5nZXQoJ2xpbnRlci1lc2xpbnQnKSxcbiAgICAgICAgY29udGVudHM6IHRleHQsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgcHJvamVjdFBhdGhcbiAgICAgIH0pXG4gICAgICBpZiAoIWlzU2F2ZSkge1xuICAgICAgICBhdG9tLm5vdGlmaWNhdGlvbnMuYWRkU3VjY2VzcyhyZXNwb25zZSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRXYXJuaW5nKGVyci5tZXNzYWdlKVxuICAgIH1cbiAgfSxcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sIm5hbWVzIjpbImlkbGVDYWxsYmFja3MiLCJTZXQiLCJtYWtlSWRsZUNhbGxiYWNrIiwid29yayIsImNhbGxiYWNrSWQiLCJjYWxsQmFjayIsImRlbGV0ZSIsIndpbmRvdyIsInJlcXVlc3RJZGxlQ2FsbGJhY2siLCJhZGQiLCJzY2hlZHVsZUlkbGVUYXNrcyIsImxpbnRlckVzbGludEluc3RhbGxQZWVyUGFja2FnZXMiLCJyZXF1aXJlIiwiaW5zdGFsbCIsImxpbnRlckVzbGludFN0YXJ0V29ya2VyIiwiaGVscGVycyIsInN0YXJ0V29ya2VyIiwiYXRvbSIsImluU3BlY01vZGUiLCJzY29wZXMiLCJzaG93UnVsZSIsImxpbnRIdG1sRmlsZXMiLCJpZ25vcmVkUnVsZXNXaGVuTW9kaWZpZWQiLCJpZ25vcmVkUnVsZXNXaGVuRml4aW5nIiwiaWdub3JlRml4YWJsZVJ1bGVzV2hpbGVUeXBpbmciLCJpZHNUb0lnbm9yZWRSdWxlcyIsInJ1bGVJZHMiLCJBcnJheSIsImZyb20iLCJyZWR1Y2UiLCJpZHMiLCJpZCIsIk9iamVjdCIsImFzc2lnbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJhY3RpdmF0ZSIsInN1YnNjcmlwdGlvbnMiLCJDb21wb3NpdGVEaXNwb3NhYmxlIiwiZW1iZWRkZWRTY29wZSIsImNvbmZpZyIsIm9ic2VydmUiLCJ2YWx1ZSIsInB1c2giLCJpbmRleE9mIiwic3BsaWNlIiwibGVuZ3RoIiwicHJvdG90eXBlIiwiYXBwbHkiLCJpbmNsdWRlcyIsIndvcmtzcGFjZSIsIm9ic2VydmVUZXh0RWRpdG9ycyIsImVkaXRvciIsIm9uRGlkU2F2ZSIsImdldCIsImZpeEpvYiIsImNvbW1hbmRzIiwiZGVidWdTdHJpbmciLCJnZW5lcmF0ZURlYnVnU3RyaW5nIiwibm90aWZpY2F0aW9uT3B0aW9ucyIsImRldGFpbCIsImRpc21pc3NhYmxlIiwibm90aWZpY2F0aW9ucyIsImFkZEluZm8iLCJjb250ZXh0TWVudSIsImxhYmVsIiwiY29tbWFuZCIsInNob3VsZERpc3BsYXkiLCJldnQiLCJhY3RpdmVFZGl0b3IiLCJnZXRBY3RpdmVUZXh0RWRpdG9yIiwiZXZ0SXNBY3RpdmVFZGl0b3IiLCJwYXRoIiwic29tZSIsImVsZW0iLCJjb21wb25lbnQiLCJkZWFjdGl2YXRlIiwiZm9yRWFjaCIsImNhbGxiYWNrSUQiLCJjYW5jZWxJZGxlQ2FsbGJhY2siLCJjbGVhciIsImtpbGxXb3JrZXIiLCJkaXNwb3NlIiwicHJvdmlkZUxpbnRlciIsIm5hbWUiLCJncmFtbWFyU2NvcGVzIiwic2NvcGUiLCJsaW50c09uQ2hhbmdlIiwibGludCIsInRleHRFZGl0b3IiLCJpc1RleHRFZGl0b3IiLCJpc0luY29tcGF0aWJsZUVzbGludCIsImZpbGVQYXRoIiwiZ2V0UGF0aCIsImdlbmVyYXRlVXNlck1lc3NhZ2UiLCJzZXZlcml0eSIsImV4Y2VycHQiLCJ0ZXh0IiwiZ2V0VGV4dCIsInJ1bGVzIiwiaXNNb2RpZmllZCIsImlnbm9yZWRSdWxlcyIsImdldEZpeGFibGVSdWxlcyIsInJ1bGVJZCIsInJlc3BvbnNlIiwic2VuZEpvYiIsInR5cGUiLCJjb250ZW50cyIsInByb2plY3RQYXRoIiwicHJvamVjdCIsInJlbGF0aXZpemVQYXRoIiwicHJvY2Vzc0pvYlJlc3BvbnNlIiwiZXJyb3IiLCJoYW5kbGVFcnJvciIsImlzU2F2ZSIsIm1lc3NhZ2UiLCJhZGRFcnJvciIsImtleXMiLCJhZGRTdWNjZXNzIiwiZXJyIiwiYWRkV2FybmluZyJdLCJtYXBwaW5ncyI6Ijs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBSkE7QUFNQTtBQUNBLE1BQU1BLGFBQWEsR0FBRyxJQUFJQyxHQUFKLEVBQXRCOztBQUVBLE1BQU1DLGdCQUFnQixHQUFJQyxJQUFELElBQVU7QUFDakMsTUFBSUMsVUFBSjs7QUFDQSxRQUFNQyxRQUFRLEdBQUcsTUFBTTtBQUNyQkwsSUFBQUEsYUFBYSxDQUFDTSxNQUFkLENBQXFCRixVQUFyQjtBQUNBRCxJQUFBQSxJQUFJO0FB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QVgsRUFBYixDQXpCMkIsQ0EwQjNCOztBQUNBLFFBQUlELElBQUksQ0FBQ25ELE1BQUwsS0FBZ0IsQ0FBcEIsRUFBdUI7QUFDckI7QUFDRDs7QUFFRCxRQUFJcUQsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsUUFBSW5FLE1BQU0sQ0FBQ3FGLElBQVAsQ0FBWTlGLHNCQUFaLEVBQW9DdUIsTUFBcEMsR0FBNkMsQ0FBakQsRUFBb0Q7QUFDbERxRCxNQUFBQSxLQUFLLEdBQUc1RSxzQkFBUjtBQUNEOztBQUVELFFBQUk7QUFDRixZQUFNaUYsUUFBUSxHQUFHLE1BQU16RixPQUFPLENBQUMwRixPQUFSLENBQWdCO0FBQ3JDQyxRQUFBQSxJQUFJLEVBQUUsS0FEK0I7QUFFckNsRSxRQUFBQSxNQUFNLEVBQUV2QixJQUFJLENBQUN1QixNQUFMLENBQVljLEdBQVosQ0FBZ0IsZUFBaEIsQ0FGNkI7QUFHckNxRCxRQUFBQSxRQUFRLEVBQUVWLElBSDJCO0FBSXJDRSxRQUFBQSxLQUpxQztBQUtyQ1AsUUFBQUEsUUFMcUM7QUFNckNnQixRQUFBQTtBQU5xQyxPQUFoQixDQUF2Qjs7QUFRQSxVQUFJLENBQUNNLE1BQUwsRUFBYTtBQUNYakcsUUFBQUEsSUFBSSxDQUFDNkMsYUFBTCxDQUFtQndELFVBQW5CLENBQThCZCxRQUE5QjtBQUNEO0FBQ0YsS0FaRCxDQVlFLE9BQU9lLEdBQVAsRUFBWTtBQUNaLFVBQUlBLEdBQUcsQ0FBQ25DLElBQUosS0FBYSx5QkFBakIsRUFBNEM7QUFDMUM7QUFDRDs7QUFDRG5FLE1BQUFBLElBQUksQ0FBQzZDLGFBQUwsQ0FBbUIwRCxVQUFuQixDQUE4QkQsR0FBRyxDQUFDSixPQUFsQztBQUNEO0FBQ0Y7O0FBdFBjLENBQWpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcywgaW1wb3J0L2V4dGVuc2lvbnNcbmltcG9ydCB7IENvbXBvc2l0ZURpc3Bvc2FibGUgfSBmcm9tICdhdG9tJ1xuaW1wb3J0IHsgaGFzVmFsaWRTY29wZSB9IGZyb20gJy4vdmFsaWRhdGUvZWRpdG9yJ1xuaW1wb3J0ICogYXMgaGVscGVycyBmcm9tICcuL2hlbHBlcnMnXG5pbXBvcnQgeyBtaWdyYXRlQ29uZmlnT3B0aW9ucyB9IGZyb20gJy4vbWlncmF0ZS1jb25maWctb3B0aW9ucydcblxuLy8gSW50ZXJuYWwgdmFyaWFibGVzXG5jb25zdCBpZGxlQ2FsbGJhY2tzID0gbmV3IFNldCgpXG5cbmNvbnN0IG1ha2VJZGxlQ2FsbGJhY2sgPSAod29yaykgPT4ge1xuICBsZXQgY2FsbGJhY2tJZFxuICBjb25zdCBjYWxsQmFjayA9ICgpID0+IHtcbiAgICBpZGxlQ2FsbGJhY2tzLmRlbGV0ZShjYWxsYmFja0lkKVxuICAgIHdvcmsoKVxuICB9XG4gIGNhbGxiYWNrSWQgPSB3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjayhjYWxsQmFjaylcbiAgaWRsZUNhbGxiYWNrcy5hZGQoY2FsbGJhY2tJZClcbn1cblxuY29uc3Qgc2NoZWR1bGVJZGxlVGFza3MgPSAoKSA9PiB7XG4gIGNvbnN0IGxpbnRlckVzbGludEluc3RhbGxQZWVyUGFja2FnZXMgPSAoKSA9PiB7XG4gICAgcmVxdWlyZSgnYXRvbS1wYWNrYWdlLWRlcHMnKS5pbnN0YWxsKCdsaW50ZXItZXNsaW50JylcbiAgfVxuICBjb25zdCBsaW50ZXJFc2xpbnRTdGFydFdvcmtlciA9ICgpID0+IHtcbiAgICBoZWxwZXJzLnN0YXJ0V29ya2VyKClcbiAgfVxuXG4gIGlmICghYXRvbS5pblNwZWNNb2RlKCkpIHtcbiAgICBtYWtlSWRsZUNhbGxiYWNrKGxpbnRlckVzbGludEluc3RhbGxQZWVyUGFja2FnZXMpXG4gICAgbWFrZUlkbGVDYWxsYmFjayhsaW50ZXJFc2xpbnRTdGFydFdvcmtlcilcbiAgfVxufVxuXG4vLyBDb25maWd1cmF0aW9uXG5jb25zdCBzY29wZXMgPSBbXVxubGV0IHNob3dSdWxlXG5sZXQgbGludEh0bWxGaWxlc1xubGV0IGlnbm9yZWRSdWxlc1doZW5Nb2RpZmllZFxubGV0IGlnbm9yZWRSdWxlc1doZW5GaXhpbmdcbmxldCBpZ25vcmVGaXhhYmxlUnVsZXNXaGlsZVR5cGluZ1xuXG4vLyBJbnRlcm5hbCBmdW5jdGlvbnNcbi8qKlxuICogR2l2ZW4gYW4gQXJyYXkgb3IgaXRlcmFibGUgY29udGFpbmluZyBhIGxpc3Qgb2YgUnVsZSBJRHMsIHJldHVybiBhbiBPYmplY3RcbiAqIHRvIGJlIHNlbnQgdG8gRVNMaW50J3MgY29uZmlndXJhdGlvbiB0aGF0IGRpc2FibGVzIHRob3NlIHJ1bGVzLlxuICogQHBhcmFtICB7W2l0ZXJhYmxlXX0gcnVsZUlkcyBJdGVyYWJsZSBjb250YWluaW5nIHJ1bGVJZHMgdG8gaWdub3JlXG4gKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgIE9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgZm9yIGVhY2ggcnVsZSB0byBpZ25vcmVcbiAqL1xuY29uc3QgaWRzVG9JZ25vcmVkUnVsZXMgPSAocnVsZUlkcykgPT4gKFxuICBBcnJheS5mcm9tKHJ1bGVJZHMpLnJlZHVjZShcbiAgICAvLyAwIGlzIHRoZSBzZXZlcml0eSB0byB0dXJuIG9mZiBhIHJ1bGVcbiAgICAoaWRzLCBpZCkgPT4gT2JqZWN0LmFzc2lnbihpZHMsIHsgW2lkXTogMCB9KSxcbiAgICB7fVxuICApKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWN0aXZhdGUoKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbmV3IENvbXBvc2l0ZURpc3Bvc2FibGUoKVxuXG4gICAgbWlncmF0ZUNvbmZpZ09wdGlvbnMoKVxuXG4gICAgY29uc3QgZW1iZWRkZWRTY29wZSA9ICdzb3VyY2UuanMuZW1iZWRkZWQuaHRtbCdcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGF0b20uY29uZmlnLm9ic2VydmUoXG4gICAgICAnbGludGVyLWVzbGludC5saW50SHRtbEZpbGVzJyxcbiAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICBsaW50SHRtbEZpbGVzID0gdmFsdWVcbiAgICAgICAgaWYgKGxpbnRIdG1sRmlsZXMpIHtcbiAgICAgICAgICBzY29wZXMucHVzaChlbWJlZGRlZFNjb3BlKVxuICAgICAgICB9IGVsc2UgaWYgKHNjb3Blcy5pbmRleE9mKGVtYmVkZGVkU2NvcGUpICE9PSAtMSkge1xuICAgICAgICAgIHNjb3Blcy5zcGxpY2Uoc2NvcGVzLmluZGV4T2YoZW1iZWRkZWRTY29wZSksIDEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChhdG9tLmNvbmZpZy5vYnNlcnZlKFxuICAgICAgJ2xpbnRlci1lc2xpbnQuc2NvcGVzJyxcbiAgICAgICh2YWx1ZSkgPT4ge1xuICAgICAgICAvLyBSZW1vdmUgYW55IG9sZCBzY29wZXNcbiAgICAgICAgc2NvcGVzLnNwbGljZSgwLCBzY29wZXMubGVuZ3RoKVxuICAgICAgICAvLyBBZGQgdGhlIGN1cnJlbnQgc2NvcGVzXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHNjb3BlcywgdmFsdWUpXG4gICAgICAgIC8vIEVuc3VyZSBIVE1MIGxpbnRpbmcgc3RpbGwgd29ya3MgaWYgdGhlIHNldHRpbmcgaXMgdXBkYXRlZFxuICAgICAgICBpZiAobGludEh0bWxGaWxlcyAmJiAhc2NvcGVzLmluY2x1ZGVzKGVtYmVkZGVkU2NvcGUpKSB7XG4gICAgICAgICAgc2NvcGVzLnB1c2goZW1iZWRkZWRTY29wZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkpXG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGF0b20ud29ya3NwYWNlLm9ic2VydmVUZXh0RWRpdG9ycygoZWRpdG9yKSA9PiB7XG4gICAgICBlZGl0b3Iub25EaWRTYXZlKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGhhc1ZhbGlkU2NvcGUoZWRpdG9yLCBzY29wZXMpXG4gICAgICAgICAgJiYgYXRvbS5jb25maWcuZ2V0KCdsaW50ZXItZXNsaW50LmF1dG9maXguZml4T25TYXZlJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5maXhKb2IodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS5jb21tYW5kcy5hZGQoJ2F0b20tdGV4dC1lZGl0b3InLCB7XG4gICAgICAnbGludGVyLWVzbGludDpkZWJ1Zyc6IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgZGVidWdTdHJpbmcgPSBhd2FpdCBoZWxwZXJzLmdlbmVyYXRlRGVidWdTdHJpbmcoKVxuICAgICAgICBjb25zdCBub3RpZmljYXRpb25PcHRpb25zID0geyBkZXRhaWw6IGRlYnVnU3RyaW5nLCBkaXNtaXNzYWJsZTogdHJ1ZSB9XG4gICAgICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRJbmZvKCdsaW50ZXItZXNsaW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbicsIG5vdGlmaWNhdGlvbk9wdGlvbnMpXG4gICAgICB9XG4gICAgfSkpXG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGF0b20uY29tbWFuZHMuYWRkKCdhdG9tLXRleHQtZWRpdG9yJywge1xuICAgICAgJ2xpbnRlci1lc2xpbnQ6Zml4LWZpbGUnOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMuZml4Sm9iKClcbiAgICAgIH1cbiAgICB9KSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS5jb25maWcub2JzZXJ2ZShcbiAgICAgICdsaW50ZXItZXNsaW50LmFkdmFuY2VkLnNob3dSdWxlSWRJbk1lc3NhZ2UnLFxuICAgICAgKHZhbHVlKSA9PiB7IHNob3dSdWxlID0gdmFsdWUgfVxuICAgICkpXG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKGF0b20uY29uZmlnLm9ic2VydmUoXG4gICAgICAnbGludGVyLWVzbGludC5kaXNhYmxpbmcucnVsZXNUb1NpbGVuY2VXaGlsZVR5cGluZycsXG4gICAgICAoaWRzKSA9PiB7IGlnbm9yZWRSdWxlc1doZW5Nb2RpZmllZCA9IGlkcyB9XG4gICAgKSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS5jb25maWcub2JzZXJ2ZShcbiAgICAgICdsaW50ZXItZXNsaW50LmF1dG9maXgucnVsZXNUb0Rpc2FibGVXaGlsZUZpeGluZycsXG4gICAgICAoaWRzKSA9PiB7IGlnbm9yZWRSdWxlc1doZW5GaXhpbmcgPSBpZHNUb0lnbm9yZWRSdWxlcyhpZHMpIH1cbiAgICApKVxuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChhdG9tLmNvbmZpZy5vYnNlcnZlKFxuICAgICAgJ2xpbnRlci1lc2xpbnQuYXV0b2ZpeC5pZ25vcmVGaXhhYmxlUnVsZXNXaGlsZVR5cGluZycsXG4gICAgICAodmFsdWUpID0+IHsgaWdub3JlRml4YWJsZVJ1bGVzV2hpbGVUeXBpbmcgPSB2YWx1ZSB9XG4gICAgKSlcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoYXRvbS5jb250ZXh0TWVudS5hZGQoe1xuICAgICAgJ2F0b20tdGV4dC1lZGl0b3I6bm90KC5taW5pKSwgLm92ZXJsYXllcic6IFt7XG4gICAgICAgIGxhYmVsOiAnRVNMaW50IEZpeCcsXG4gICAgICAgIGNvbW1hbmQ6ICdsaW50ZXItZXNsaW50OmZpeC1maWxlJyxcbiAgICAgICAgc2hvdWxkRGlzcGxheTogKGV2dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFjdGl2ZUVkaXRvciA9IGF0b20ud29ya3NwYWNlLmdldEFjdGl2ZVRleHRFZGl0b3IoKVxuICAgICAgICAgIGlmICghYWN0aXZlRWRpdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gQmxhY2sgbWFnaWMhXG4gICAgICAgICAgLy8gQ29tcGFyZXMgdGhlIHByaXZhdGUgY29tcG9uZW50IHByb3BlcnR5IG9mIHRoZSBhY3RpdmUgVGV4dEVkaXRvclxuICAgICAgICAgIC8vICAgYWdhaW5zdCB0aGUgY29tcG9uZW50cyBvZiB0aGUgZWxlbWVudHNcbiAgICAgICAgICBjb25zdCBldnRJc0FjdGl2ZUVkaXRvciA9IGV2dC5wYXRoLnNvbWUoKGVsZW0pID0+IChcbiAgICAgICAgICAgIC8vIEF0b20gdjEuMTkuMCtcbiAgICAgICAgICAgIGVsZW0uY29tcG9uZW50ICYmIGFjdGl2ZUVkaXRvci5jb21wb25lbnRcbiAgICAgICAgICAgICAgJiYgZWxlbS5jb21wb25lbnQgPT09IGFjdGl2ZUVkaXRvci5jb21wb25lbnQpKVxuICAgICAgICAgIC8vIE9ubHkgc2hvdyBpZiBpdCB3YXMgdGhlIGFjdGl2ZSBlZGl0b3IgYW5kIGl0IGlzIGEgdmFsaWQgc2NvcGVcbiAgICAgICAgICByZXR1cm4gZXZ0SXNBY3RpdmVFZGl0b3IgJiYgaGFzVmFsaWRTY29wZShhY3RpdmVFZGl0b3IsIHNjb3BlcylcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9KSlcblxuICAgIHNjaGVkdWxlSWRsZVRhc2tzKClcbiAgfSxcblxuICBkZWFjdGl2YXRlKCkge1xuICAgIGlkbGVDYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2tJRCkgPT4gd2luZG93LmNhbmNlbElkbGVDYWxsYmFjayhjYWxsYmFja0lEKSlcbiAgICBpZGxlQ2FsbGJhY2tzLmNsZWFyKClcbiAgICBpZiAoaGVscGVycykge1xuICAgICAgLy8gSWYgdGhlIGhlbHBlcnMgbW9kdWxlIGhhc24ndCBiZWVuIGxvYWRlZCB0aGVuIHRoZXJlIHdhcyBubyBjaGFuY2UgYVxuICAgICAgLy8gd29ya2VyIHdhcyBzdGFydGVkIGFueXdheS5cbiAgICAgIGhlbHBlcnMua2lsbFdvcmtlcigpXG4gICAgfVxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5kaXNwb3NlKClcbiAgfSxcblxuICBwcm92aWRlTGludGVyKCkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiAnRVNMaW50JyxcbiAgICAgIGdyYW1tYXJTY29wZXM6IHNjb3BlcyxcbiAgICAgIHNjb3BlOiAnZmlsZScsXG4gICAgICBsaW50c09uQ2hhbmdlOiB0cnVlLFxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0ge2ltcG9ydChcImF0b21cIikuVGV4dEVkaXRvcn0gdGV4dEVkaXRvclxuICAgICAgICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiYXRvbS9saW50ZXJcIikuTWVzc2FnZVtdPn1cbiAgICAgICAqL1xuICAgICAgbGludDogYXN5bmMgKHRleHRFZGl0b3IpID0+IHtcbiAgICAgICAgaWYgKCFhdG9tLndvcmtzcGFjZS5pc1RleHRFZGl0b3IodGV4dEVkaXRvcikpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBzb21laG93IGdldCBmZWQgYW4gaW52YWxpZCBUZXh0RWRpdG9yIGp1c3QgaW1tZWRpYXRlbHkgcmV0dXJuXG4gICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoZWxwZXJzLmlzSW5jb21wYXRpYmxlRXNsaW50KCkpIHtcbiAgICAgICAgICAvLyBUaGUgcHJvamVjdCdzIHZlcnNpb24gb2YgRVNMaW50IGRvZXNuJ3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4gT25jZVxuICAgICAgICAgIC8vIHRoaXMgaXMgZGV0ZWN0ZWQsIHdlIHdvbid0IHRyeSB0byBzZW5kIGFueSBqb2JzIHVudGlsIHRoZSB3aW5kb3cgaXNcbiAgICAgICAgICAvLyByZWxvYWRlZC5cbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSB0ZXh0RWRpdG9yLmdldFBhdGgoKVxuICAgICAgICBpZiAoIWZpbGVQYXRoKSB7XG4gICAgICAgICAgLy8gVGhlIGVkaXRvciBjdXJyZW50bHkgaGFzIG5vIHBhdGgsIHdlIGNhbid0IHJlcG9ydCBtZXNzYWdlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gTGludGVyIHNvIGp1c3QgcmV0dXJuIG51bGxcbiAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVQYXRoLmluY2x1ZGVzKCc6Ly8nKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBwYXRoIGlzIGEgVVJMIChOdWNsaWRlIHJlbW90ZSBmaWxlKSByZXR1cm4gYSBtZXNzYWdlXG4gICAgICAgICAgLy8gdGVsbGluZyB0aGUgdXNlciB3ZSBhcmUgdW5hYmxlIHRvIHdvcmsgb24gcmVtb3RlIGZpbGVzLlxuICAgICAgICAgIHJldHVybiBoZWxwZXJzLmdlbmVyYXRlVXNlck1lc3NhZ2UodGV4dEVkaXRvciwge1xuICAgICAgICAgICAgc2V2ZXJpdHk6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgIGV4Y2VycHQ6ICdSZW1vdGUgZmlsZSBvcGVuLCBsaW50ZXItZXNsaW50IGlzIGRpc2FibGVkIGZvciB0aGlzIGZpbGUuJyxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IHRleHRFZGl0b3IuZ2V0VGV4dCgpXG5cbiAgICAgICAgbGV0IHJ1bGVzID0ge31cbiAgICAgICAgaWYgKHRleHRFZGl0b3IuaXNNb2RpZmllZCgpKSB7XG4gICAgICAgICAgaWYgKGlnbm9yZUZpeGFibGVSdWxlc1doaWxlVHlwaW5nKSB7XG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIGZpeGFibGUgcnVsZXMgd2lsbCBvbmx5IGhhdmUgdmFsdWVzIGFmdGVyIHRoZSBmaXJzdCBsaW50IGpvYlxuICAgICAgICAgICAgY29uc3QgaWdub3JlZFJ1bGVzID0gbmV3IFNldChoZWxwZXJzLnJ1bGVzLmdldEZpeGFibGVSdWxlcygpKVxuICAgICAgICAgICAgaWdub3JlZFJ1bGVzV2hlbk1vZGlmaWVkLmZvckVhY2goKHJ1bGVJZCkgPT4gaWdub3JlZFJ1bGVzLmFkZChydWxlSWQpKVxuICAgICAgICAgICAgcnVsZXMgPSBpZHNUb0lnbm9yZWRSdWxlcyhpZ25vcmVkUnVsZXMpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJ1bGVzID0gaWRzVG9JZ25vcmVkUnVsZXMoaWdub3JlZFJ1bGVzV2hlbk1vZGlmaWVkKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBoZWxwZXJzLnNlbmRKb2Ioe1xuICAgICAgICAgICAgdHlwZTogJ2xpbnQnLFxuICAgICAgICAgICAgY29udGVudHM6IHRleHQsXG4gICAgICAgICAgICBjb25maWc6IGF0b20uY29uZmlnLmdldCgnbGludGVyLWVzbGludCcpLFxuICAgICAgICAgICAgcnVsZXMsXG4gICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgIHByb2plY3RQYXRoOiBhdG9tLnByb2plY3QucmVsYXRpdml6ZVBhdGgoZmlsZVBhdGgpWzBdIHx8ICcnXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAodGV4dEVkaXRvci5nZXRUZXh0KCkgIT09IHRleHQpIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBUaGUgZWRpdG9yIHRleHQgaGFzIGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIGxpbnQgd2FzIHRyaWdnZXJlZCxcbiAgICAgICAgICAgIGFzIHdlIGNhbid0IGJlIHN1cmUgdGhhdCB0aGUgcmVzdWx0cyB3aWxsIG1hcCBwcm9wZXJseSBiYWNrIHRvXG4gICAgICAgICAgICB0aGUgbmV3IGNvbnRlbnRzLCBzaW1wbHkgcmV0dXJuIGBudWxsYCB0byB0ZWxsIHRoZVxuICAgICAgICAgICAgYHByb3ZpZGVMaW50ZXJgIGNvbnN1bWVyIG5vdCB0byB1cGRhdGUgdGhlIHNhdmVkIHJlc3VsdHMuXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGhlbHBlcnMucHJvY2Vzc0pvYlJlc3BvbnNlKHJlc3BvbnNlLCB0ZXh0RWRpdG9yLCBzaG93UnVsZSlcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gaGVscGVycy5oYW5kbGVFcnJvcih0ZXh0RWRpdG9yLCBlcnJvcilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBmaXhKb2IoaXNTYXZlID0gZmFsc2UpIHtcbiAgICBjb25zdCB0ZXh0RWRpdG9yID0gYXRvbS53b3Jrc3BhY2UuZ2V0QWN0aXZlVGV4dEVkaXRvcigpXG5cbiAgICBpZiAoIXRleHRFZGl0b3IgfHwgIWF0b20ud29ya3NwYWNlLmlzVGV4dEVkaXRvcih0ZXh0RWRpdG9yKSkge1xuICAgICAgLy8gU2lsZW50bHkgcmV0dXJuIGlmIHRoZSBUZXh0RWRpdG9yIGlzIGludmFsaWRcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChoZWxwZXJzLmlzSW5jb21wYXRpYmxlRXNsaW50KCkpIHtcbiAgICAgIC8vIFRoZSBwcm9qZWN0J3MgdmVyc2lvbiBvZiBFU0xpbnQgZG9lc24ndCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLiBPbmNlXG4gICAgICAvLyB0aGlzIGlzIGRldGVjdGVkLCB3ZSB3b24ndCB0cnkgdG8gc2VuZCBhbnkgam9icyB1bnRpbCB0aGUgd2luZG93IGlzXG4gICAgICAvLyByZWxvYWRlZC5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0ZXh0RWRpdG9yLmlzTW9kaWZpZWQoKSkge1xuICAgICAgLy8gQWJvcnQgZm9yIGludmFsaWQgb3IgdW5zYXZlZCB0ZXh0IGVkaXRvcnNcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnTGludGVyLUVTTGludDogUGxlYXNlIHNhdmUgYmVmb3JlIGZpeGluZydcbiAgICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRFcnJvcihtZXNzYWdlKVxuICAgIH1cblxuICAgIGNvbnN0IGZpbGVQYXRoID0gdGV4dEVkaXRvci5nZXRQYXRoKClcbiAgICBjb25zdCBwcm9qZWN0UGF0aCA9IGF0b20ucHJvamVjdC5yZWxhdGl2aXplUGF0aChmaWxlUGF0aClbMF1cblxuICAgIC8vIEdldCB0aGUgdGV4dCBmcm9tIHRoZSBlZGl0b3IsIHNvIHdlIGNhbiB1c2UgZXhlY3V0ZU9uVGV4dFxuICAgIGNvbnN0IHRleHQgPSB0ZXh0RWRpdG9yLmdldFRleHQoKVxuICAgIC8vIERvIG5vdCB0cnkgdG8gbWFrZSBmaXhlcyBvbiBhbiBlbXB0eSBmaWxlXG4gICAgaWYgKHRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgcnVsZXMgPSB7fVxuICAgIGlmIChPYmplY3Qua2V5cyhpZ25vcmVkUnVsZXNXaGVuRml4aW5nKS5sZW5ndGggPiAwKSB7XG4gICAgICBydWxlcyA9IGlnbm9yZWRSdWxlc1doZW5GaXhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBoZWxwZXJzLnNlbmRKb2Ioe1xuICAgICAgICB0eXBlOiAnZml4JyxcbiAgICAgICAgY29uZmlnOiBhdG9tLmNvbmZpZy5nZXQoJ2xpbnRlci1lc2xpbnQnKSxcbiAgICAgICAgY29udGVudHM6IHRleHQsXG4gICAgICAgIHJ1bGVzLFxuICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgcHJvamVjdFBhdGhcbiAgICAgIH0pXG4gICAgICBpZiAoIWlzU2F2ZSkge1xuICAgICAgICBhdG9tLm5vdGlmaWNhdGlvbnMuYWRkU3VjY2VzcyhyZXNwb25zZSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIubmFtZSA9PT0gJ0luY29tcGF0aWJsZUVTTGludEVycm9yJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGF0b20ubm90aWZpY2F0aW9ucy5hZGRXYXJuaW5nKGVyci5tZXNzYWdlKVxuICAgIH1cbiAgfSxcbn1cbiJdfQ== \ No newline at end of file diff --git a/dist/worker-helpers.js b/dist/worker-helpers.js index 41a15d90..6aa89e67 100644 --- a/dist/worker-helpers.js +++ b/dist/worker-helpers.js @@ -37,6 +37,15 @@ const Cache = { NODE_PREFIX_PATH: null, LAST_MODULES_PATH: null }; + +class IncompatibleESLintError extends Error { + constructor(version) { + // eslint-disable-next-line max-len + super(`The version of ESLint used in this project is ${version}, which is incompatible with this package. The \`linter-eslint-node\` Atom package provides support for ESLint versions 8 and higher.\n\nYou can disable this notice in the linter-eslint package settings under **Uncommon → Notify when incompatible ESLint is detected**.`); + this.name = 'IncompatibleESLintError'; + } + +} /** * Takes a path and translates `~` to the user's home directory, and replaces * all environment variables with their value. @@ -44,6 +53,7 @@ const Cache = { * @return {string} The cleaned path */ + const cleanPath = path => path ? (0, _resolveEnv.default)(_fsPlus.default.normalize(path)) : ''; /** * @returns {string} @@ -144,6 +154,31 @@ function findESLintDirectory(modulesDir, config, projectPath, fallbackForGlobal path: Cache.ESLINT_LOCAL_PATH, type: 'bundled fallback' }; +} // Given an ESLint module path, checks its version and throws if the version is +// too new for this package to support. + + +function checkForIncompatibleESLint(directory) { + let packageMeta; + + try { + // eslint-disable-next-line import/no-dynamic-require + packageMeta = require(_path.default.join(directory, 'package.json')); + + if (!packageMeta || !packageMeta.version) { + return; + } + } catch (_) { + return; + } // We don't need sophisticated parsing logic here; we just need to look at + // the major version. + + + const m = packageMeta.version.match(/^([\d]+)\./); + + if (m && Number(m[1]) > 7) { + throw new IncompatibleESLintError(packageMeta.version); + } } /** * @param {string} modulesDir @@ -157,11 +192,22 @@ function getESLintFromDirectory(modulesDir, config, projectPath) { const { path: ESLintDirectory } = findESLintDirectory(modulesDir, config, projectPath); + let eslint; try { // eslint-disable-next-line import/no-dynamic-require - return require(ESLintDirectory); + eslint = require(ESLintDirectory); + + if (!('CLIEngine' in eslint)) { + checkForIncompatibleESLint(ESLintDirectory); + } + + return eslint; } catch (e) { + // If this is the result of an incompatible ESLint, an error will be + // thrown; otherwise we should proceed with the local-path fallback. + checkForIncompatibleESLint(ESLintDirectory); + if (config.global.useGlobalEslint && e.code === 'MODULE_NOT_FOUND') { throw new Error('ESLint not found, try restarting Atom to clear caches.'); } // eslint-disable-next-line import/no-dynamic-require @@ -332,4 +378,4 @@ function getRules(cliEngine) { function didRulesChange(currentRules, newRules) { return !(currentRules.size === newRules.size && Array.from(currentRules.keys()).every(ruleId => newRules.has(ruleId))); } -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZXItaGVscGVycy5qcyJdLCJuYW1lcyI6WyJDYWNoZSIsIkVTTElOVF9MT0NBTF9QQVRIIiwiUGF0aCIsIm5vcm1hbGl6ZSIsImpvaW4iLCJfX2Rpcm5hbWUiLCJOT0RFX1BSRUZJWF9QQVRIIiwiTEFTVF9NT0RVTEVTX1BBVEgiLCJjbGVhblBhdGgiLCJwYXRoIiwiZnMiLCJnZXROb2RlUHJlZml4UGF0aCIsIm5wbUNvbW1hbmQiLCJwcm9jZXNzIiwicGxhdGZvcm0iLCJDaGlsZFByb2Nlc3MiLCJzcGF3blN5bmMiLCJlbnYiLCJQQVRIIiwib3V0cHV0IiwidG9TdHJpbmciLCJ0cmltIiwiZSIsImVyck1zZyIsIkVycm9yIiwiaXNEaXJlY3RvcnkiLCJkaXJQYXRoIiwiaXNEaXIiLCJzdGF0U3luYyIsImZhbGxiYWNrRm9yR2xvYmFsRXJyb3JUaHJvd24iLCJmaW5kRVNMaW50RGlyZWN0b3J5IiwibW9kdWxlc0RpciIsImNvbmZpZyIsInByb2plY3RQYXRoIiwiZmFsbGJhY2tGb3JHbG9iYWwiLCJlc2xpbnREaXIiLCJsb2NhdGlvblR5cGUiLCJnbG9iYWwiLCJ1c2VHbG9iYWxFc2xpbnQiLCJjb25maWdHbG9iYWwiLCJnbG9iYWxOb2RlUGF0aCIsInByZWZpeFBhdGgiLCJhZHZhbmNlZCIsImxvY2FsTm9kZU1vZHVsZXMiLCJpc0Fic29sdXRlIiwidHlwZSIsImNvbnNvbGUiLCJlcnJvciIsImdldEVTTGludEZyb21EaXJlY3RvcnkiLCJFU0xpbnREaXJlY3RvcnkiLCJyZXF1aXJlIiwiY29kZSIsInJlZnJlc2hNb2R1bGVzUGF0aCIsIk5PREVfUEFUSCIsIk1vZHVsZSIsIl9pbml0UGF0aHMiLCJnZXRFU0xpbnRJbnN0YW5jZSIsImZpbGVEaXIiLCJkaXJuYW1lIiwibG9nIiwiYXJncyIsIm9iaiIsImxlbmd0aCIsInN0ciIsIkpTT04iLCJzdHJpbmdpZnkiLCJVdGlsIiwiaW5zcGVjdCIsImVtaXQiLCJnZXRDb25maWdGb3JGaWxlIiwiZXNsaW50IiwiZmlsZVBhdGgiLCJjbGkiLCJDTElFbmdpbmUiLCJnZXRSZWxhdGl2ZVBhdGgiLCJpZ25vcmVGaWxlIiwiZGlzYWJsZUVzbGludElnbm9yZSIsImlnbm9yZURpciIsImNoZGlyIiwicmVsYXRpdmUiLCJiYXNlbmFtZSIsImdldENMSUVuZ2luZU9wdGlvbnMiLCJydWxlcyIsImZpbGVDb25maWciLCJjbGlFbmdpbmVDb25maWciLCJpZ25vcmUiLCJmaXgiLCJydWxlUGF0aHMiLCJlc2xpbnRSdWxlc0RpcnMiLCJtYXAiLCJydWxlc0RpciIsImZpbHRlciIsImVzbGludHJjUGF0aCIsImNvbmZpZ0ZpbGUiLCJnZXRSdWxlcyIsImNsaUVuZ2luZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImxpbnRlciIsIk1hcCIsImRpZFJ1bGVzQ2hhbmdlIiwiY3VycmVudFJ1bGVzIiwibmV3UnVsZXMiLCJzaXplIiwiQXJyYXkiLCJmcm9tIiwia2V5cyIsImV2ZXJ5IiwicnVsZUlkIiwiaGFzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBUkE7QUFVQSxNQUFNQSxLQUFLLEdBQUc7QUFDWkMsRUFBQUEsaUJBQWlCLEVBQUVDLGNBQUtDLFNBQUwsQ0FBZUQsY0FBS0UsSUFBTCxDQUFVQyxTQUFWLEVBQXFCLElBQXJCLEVBQTJCLGNBQTNCLEVBQTJDLFFBQTNDLENBQWYsQ0FEUDtBQUVaQyxFQUFBQSxnQkFBZ0IsRUFBRSxJQUZOO0FBR1pDLEVBQUFBLGlCQUFpQixFQUFFO0FBSFAsQ0FBZDtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQSxNQUFNQyxTQUFTLEdBQUlDLElBQUQsSUFBV0EsSUFBSSxHQUFHLHlCQUFXQyxnQkFBR1AsU0FBSCxDQUFhTSxJQUFiLENBQVgsQ0FBSCxHQUFvQyxFQUFyRTtBQUVBO0FBQ0E7QUFDQTs7O0FBQ08sU0FBU0Us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cGF0aCc7XG5pbXBvcnQgVXRpbCBmcm9tICd1dGlsJztcbmltcG9ydCBmcyBmcm9tICdmcy1wbHVzJ1xuaW1wb3J0IENoaWxkUHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHJlc29sdmVFbnYgZnJvbSAncmVzb2x2ZS1lbnYnXG5pbXBvcnQgeyBmaW5kQ2FjaGVkIH0gZnJvbSAnYXRvbS1saW50ZXInXG5pbXBvcnQgZ2V0UGF0aCBmcm9tICdjb25zaXN0ZW50LXBhdGgnXG5cbmNvbnN0IENhY2hlID0ge1xuICBFU0xJTlRfTE9DQUxfUEFUSDogUGF0aC5ub3JtYWxpemUoUGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ25vZGVfbW9kdWxlcycsICdlc2xpbnQnKSksXG4gIE5PREVfUFJFRklYX1BBVEg6IG51bGwsXG4gIExBU1RfTU9EVUxFU19QQVRIOiBudWxsXG59XG5cbi8qKlxuICogVGFrZXMgYSBwYXRoIGFuZCB0cmFuc2xhdGVzIGB+YCB0byB0aGUgdXNlcidzIGhvbWUgZGlyZWN0b3J5LCBhbmQgcmVwbGFjZXNcbiAqIGFsbCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2l0aCB0aGVpciB2YWx1ZS5cbiAqIEBwYXJhbSAge3N0cmluZ30gcGF0aCBUaGUgcGF0aCB0byByZW1vdmUgXCJzdHJhbmdlbmVzc1wiIGZyb21cbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICBUaGUgY2xlYW5lZCBwYXRoXG4gKi9cbmNvbnN0IGNsZWFuUGF0aCA9IChwYXRoKSA9PiAocGF0aCA/IHJlc29sdmVFbnYoZnMubm9ybWFsaXplKHBhdGgpKSA6ICcnKVxuXG4vKipcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlUHJlZml4UGF0aCgpIHtcbiAgaWYgKENhY2hlLk5PREVfUFJFRklYX1BBVEggPT09IG51bGwpIHtcbiAgICBjb25zdCBucG1Db21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJyA/ICducG0uY21kJyA6ICducG0nXG4gICAgdHJ5IHtcbiAgICAgIENhY2hlLk5PREVfUFJFRklYX1BBVEggPSBDaGlsZFByb2Nlc3Muc3Bhd25TeW5jKG5wbUNvbW1hbmQsIFsnZ2V0JywgJ3ByZWZpeCddLCB7XG4gICAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgUEFUSDogZ2V0UGF0aCgpIH1cbiAgICAgIH0pLm91dHB1dFsxXS50b1N0cmluZygpLnRyaW0oKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnN0IGVyck1zZyA9ICdVbmFibGUgdG8gZXhlY3V0ZSBgbnBtIGdldCBwcmVmaXhgLiBQbGVhc2UgbWFrZSBzdXJlICdcbiAgICAgICAgKyAnQXRvbSBpcyBnZXR0aW5nICRQQVRIIGNvcnJlY3RseS4nXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKVxuICAgIH1cbiAgfVxuICByZXR1cm4gQ2FjaGUuTk9ERV9QUkVGSVhfUEFUSFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJQYXRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNEaXJlY3RvcnkoZGlyUGF0aCkge1xuICBsZXQgaXNEaXJcbiAgdHJ5IHtcbiAgICBpc0RpciA9IGZzLnN0YXRTeW5jKGRpclBhdGgpLmlzRGlyZWN0b3J5KClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlzRGlyID0gZmFsc2VcbiAgfVxuICByZXR1cm4gaXNEaXJcbn1cblxubGV0IGZhbGxiYWNrRm9yR2xvYmFsRXJyb3JUaHJvd24gPSBmYWxzZVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVzRGlyXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdFBhdGhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZmFsbGJhY2tGb3JHbG9iYWxcbiAqIEByZXR1cm5zIHt7IHBhdGg6IHN0cmluZywgdHlwZTogJ2xvY2FsIHByb2plY3QnIHwgJ2dsb2JhbCcgfCAnYWR2YW5jZWQgc3BlY2lmaWVkJyB8ICdidW5kbGVkIGZhbGxiYWNrJyB9fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmluZEVTTGludERpcmVjdG9yeShtb2R1bGVzRGlyLCBjb25maWcsIHByb2plY3RQYXRoLCBmYWxsYmFja0Zvckdsb2JhbCA9IGZhbHNlKSB7XG4gIGxldCBlc2xpbnREaXIgPSBudWxsXG4gIGxldCBsb2NhdGlvblR5cGUgPSBudWxsXG4gIGlmIChjb25maWcuZ2xvYmFsLnVzZUdsb2JhbEVzbGludCAmJiAhZmFsbGJhY2tGb3JHbG9iYWwpIHtcbiAgICBsb2NhdGlvblR5cGUgPSAnZ2xvYmFsJ1xuICAgIGNvbnN0IGNvbmZpZ0dsb2JhbCA9IGNsZWFuUGF0aChjb25maWcuZ2xvYmFsLmdsb2JhbE5vZGVQYXRoKVxuICAgIGNvbnN0IHByZWZpeFBhdGggPSBjb25maWdHbG9iYWwgfHwgZ2V0Tm9kZVByZWZpeFBhdGgoKVxuICAgIC8vIE5QTSBvbiBXaW5kb3dzIGFuZCBZYXJuIG9uIGFsbCBwbGF0Zm9ybXNcbiAgICBlc2xpbnREaXIgPSBQYXRoLmpvaW4ocHJlZml4UGF0aCwgJ25vZGVfbW9kdWxlcycsICdlc2xpbnQnKVxuICAgIGlmICghaXNEaXJlY3RvcnkoZXNsaW50RGlyKSkge1xuICAgICAgLy8gTlBNIG9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIFdpbmRvd3NcbiAgICAgIGVzbGludERpciA9IFBhdGguam9pbihwcmVmaXhQYXRoLCAnbGliJywgJ25vZGVfbW9kdWxlcycsICdlc2xpbnQnKVxuICAgIH1cbiAgfSBlbHNlIGlmICghY29uZmlnLmFkdmFuY2VkLmxvY2FsTm9kZU1vZHVsZXMpIHtcbiAgICBsb2NhdGlvblR5cGUgPSAnbG9jYWwgcHJvamVjdCdcbiAgICBlc2xpbnREaXIgPSBQYXRoLmpvaW4obW9kdWxlc0RpciB8fCAnJywgJ2VzbGludCcpXG4gIH0gZWxzZSBpZiAoUGF0aC5pc0Fic29sdXRlKGNsZWFuUGF0aChjb25maWcuYWR2YW5jZWQubG9jYWxOb2RlTW9kdWxlcykpKSB7XG4gICAgbG9jYXRpb25UeXBlID0gJ2FkdmFuY2VkIHNwZWNpZmllZCdcbiAgICBlc2xpbnREaXIgPSBQYXRoLmpvaW4oY2xlYW5QYXRoKGNvbmZpZy5hZHZhbmNlZC5sb2NhbE5vZGVNb2R1bGVzKSwgJ2VzbGludCcpXG4gIH0gZWxzZSB7XG4gICAgbG9jYXRpb25UeXBlID0gJ2FkdmFuY2VkIHNwZWNpZmllZCdcbiAgICBlc2xpbnREaXIgPSBQYXRoLmpvaW4ocHJvamVjdFBhdGggfHwgJycsIGNsZWFuUGF0aChjb25maWcuYWR2YW5jZWQubG9jYWxOb2RlTW9kdWxlcyksICdlc2xpbnQnKVxuICB9XG5cbiAgaWYgKGlzRGlyZWN0b3J5KGVzbGludERpcikpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogZXNsaW50RGlyLFxuICAgICAgdHlwZTogbG9jYXRpb25UeXBlLFxuICAgIH1cbiAgfVxuXG4gIGlmIChjb25maWcuZ2xvYmFsLnVzZUdsb2JhbEVzbGludCAmJiAhZmFsbGJhY2tGb3JHbG9iYWwpIHtcbiAgICBpZiAoIWZhbGxiYWNrRm9yR2xvYmFsRXJyb3JUaHJvd24pIHtcbiAgICAgIC8vIFRocm93IHRoZSBlcnJvciBvbmx5IG9uY2UgdG8gcHJldmVudCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAgICAgIGZhbGxiYWNrRm9yR2xvYmFsRXJyb3JUaHJvd24gPSB0cnVlXG4gICAgICBjb25zb2xlLmVycm9yKGBHbG9iYWwgRVNMaW50IGlzIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIG90aGVyIEVzbGludCBpbnN0YWxsYXRpb25zLi4uXG4gICAgICAgIFBsZWFzZSBlbnN1cmUgdGhlIGdsb2JhbCBOb2RlIHBhdGggaXMgc2V0IGNvcnJlY3RseS5cbiAgICAgICAgSWYgeW91IHdhbnRlZCB0byB1c2UgYSBsb2NhbCBpbnN0YWxsYXRpb24gb2YgRXNsaW50LCBkaXNhYmxlIEdsb2JhbCBFc2xpbnQgb3B0aW9uIGluIHRoZSBsaW50ZXItZXNsaW50IGNvbmZpZy5gKVxuICAgIH1cbiAgICByZXR1cm4gZmluZEVTTGludERpcmVjdG9yeShtb2R1bGVzRGlyLCBjb25maWcsIHByb2plY3RQYXRoLCB0cnVlKVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBDYWNoZS5FU0xJTlRfTE9DQUxfUEFUSCxcbiAgICB0eXBlOiAnYnVuZGxlZCBmYWxsYmFjaycsXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlc0RpclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3RQYXRoXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiZXNsaW50XCIpfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RVNMaW50RnJvbURpcmVjdG9yeShtb2R1bGVzRGlyLCBjb25maWcsIHByb2plY3RQYXRoKSB7XG4gIGNvbnN0IHsgcGF0aDogRVNMaW50RGlyZWN0b3J5IH0gPSBmaW5kRVNMaW50RGlyZWN0b3J5KG1vZHVsZXNEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgpXG4gIHRyeSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICByZXR1cm4gcmVxdWlyZShFU0xpbnREaXJlY3RvcnkpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoY29uZmlnLmdsb2JhbC51c2VHbG9iYWxFc2xpbnQgJiYgZS5jb2RlID09PSAnTU9EVUxFX05PVF9GT1VORCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRVNMaW50IG5vdCBmb3VuZCwgdHJ5IHJlc3RhcnRpbmcgQXRvbSB0byBjbGVhciBjYWNoZXMuJylcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1keW5hbWljLXJlcXVpcmVcbiAgICByZXR1cm4gcmVxdWlyZShDYWNoZS5FU0xJTlRfTE9DQUxfUEFUSClcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtb2R1bGVzRGlyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWZyZXNoTW9kdWxlc1BhdGgobW9kdWxlc0Rpcikge1xuICBpZiAoQ2FjaGUuTEFTVF9NT0RVTEVTX1BBVEggIT09IG1vZHVsZXNEaXIpIHtcbiAgICBDYWNoZS5MQVNUX01PRFVMRVNfUEFUSCA9IG1vZHVsZXNEaXJcbiAgICBwcm9jZXNzLmVudi5OT0RFX1BBVEggPSBtb2R1bGVzRGlyIHx8ICcnXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlXG4gICAgcmVxdWlyZSgnbW9kdWxlJykuTW9kdWxlLl9pbml0UGF0aHMoKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVEaXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0UGF0aFxuICogQHJldHVybnMge2ltcG9ydChcImVzbGludFwiKX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVTTGludEluc3RhbmNlKGZpbGVEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgpIHtcbiAgY29uc3QgbW9kdWxlc0RpciA9IFBhdGguZGlybmFtZShmaW5kQ2FjaGVkKGZpbGVEaXIsICdub2RlX21vZHVsZXMvZXNsaW50JykgfHwgJycpXG4gIHJlZnJlc2hNb2R1bGVzUGF0aChtb2R1bGVzRGlyKVxuICByZXR1cm4gZ2V0RVNMaW50RnJvbURpcmVjdG9yeShtb2R1bGVzRGlyLCBjb25maWcsIHByb2plY3RQYXRoKVxufVxuXG4vKipcbiAqIGNvbnNvbGUubG9nXG4gKiBAcGFyYW0gIHthbnl9IGFyZ3NcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2coLi4uYXJncykge1xuICBjb25zdCBvYmogPSBhcmdzLmxlbmd0aCA9PT0gMSA/IGFyZ3NbMF0gOiBhcmdzXG4gIGxldCBzdHJcbiAgdHJ5IHtcbiAgICBzdHIgPSBKU09OLnN0cmluZ2lmeShvYmopXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBzdHIgPSBVdGlsLmluc3BlY3Qob2JqKVxuICB9XG5cbiAgZW1pdCgnbG9nJywgc3RyKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KFwiZXNsaW50XCIpfSBlc2xpbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlnRm9yRmlsZShlc2xpbnQsIGZpbGVQYXRoKSB7XG4gIGNvbnN0IGNsaSA9IG5ldyBlc2xpbnQuQ0xJRW5naW5lKClcbiAgdHJ5IHtcbiAgICByZXR1cm4gY2xpLmdldENvbmZpZ0ZvckZpbGUoZmlsZVBhdGgpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBObyBjb25maWd1cmF0aW9uIHdhcyBmb3VuZFxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZURpclxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvamVjdFBhdGhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxhdGl2ZVBhdGgoZmlsZURpciwgZmlsZVBhdGgsIGNvbmZpZywgcHJvamVjdFBhdGgpIHtcbiAgY29uc3QgaWdub3JlRmlsZSA9IGNvbmZpZy5hZHZhbmNlZC5kaXNhYmxlRXNsaW50SWdub3JlID8gbnVsbCA6IGZpbmRDYWNoZWQoZmlsZURpciwgJy5lc2xpbnRpZ25vcmUnKVxuXG4gIC8vIElmIHdlIGNhbiBmaW5kIGFuIC5lc2xpbnRpZ25vcmUgZmlsZSwgd2UgY2FuIHNldCBjd2QgdGhlcmVcbiAgLy8gKGJlY2F1c2UgdGhleSBhcmUgZXhwZWN0ZWQgdG8gYmUgYXQgdGhlIHByb2plY3Qgcm9vdClcbiAgaWYgKGlnbm9yZUZpbGUpIHtcbiAgICBjb25zdCBpZ25vcmVEaXIgPSBQYXRoLmRpcm5hbWUoaWdub3JlRmlsZSlcbiAgICBwcm9jZXNzLmNoZGlyKGlnbm9yZURpcilcbiAgICByZXR1cm4gUGF0aC5yZWxhdGl2ZShpZ25vcmVEaXIsIGZpbGVQYXRoKVxuICB9XG4gIC8vIE90aGVyd2lzZSwgd2UnbGwgc2V0IHRoZSBjd2QgdG8gdGhlIGF0b20gcHJvamVjdCByb290IGFzIGxvbmcgYXMgdGhhdCBleGlzdHNcbiAgaWYgKHByb2plY3RQYXRoKSB7XG4gICAgcHJvY2Vzcy5jaGRpcihwcm9qZWN0UGF0aClcbiAgICByZXR1cm4gUGF0aC5yZWxhdGl2ZShwcm9qZWN0UGF0aCwgZmlsZVBhdGgpXG4gIH1cbiAgLy8gSWYgYWxsIGVsc2UgZmFpbHMsIHVzZSB0aGUgZmlsZSBsb2NhdGlvbiBpdHNlbGZcbiAgcHJvY2Vzcy5jaGRpcihmaWxlRGlyKVxuICByZXR1cm4gUGF0aC5iYXNlbmFtZShmaWxlUGF0aClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICogQHBhcmFtIHtvYmplY3R9IGZpbGVDb25maWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENMSUVuZ2luZU9wdGlvbnModHlwZSwgY29uZmlnLCBydWxlcywgZmlsZVBhdGgsIGZpbGVDb25maWcpIHtcbiAgY29uc3QgY2xpRW5naW5lQ29uZmlnID0ge1xuICAgIHJ1bGVzLFxuICAgIGlnbm9yZTogIWNvbmZpZy5hZHZhbmNlZC5kaXNhYmxlRXNsaW50SWdub3JlLFxuICAgIGZpeDogdHlwZSA9PT0gJ2ZpeCdcbiAgfVxuXG4gIGNsaUVuZ2luZUNvbmZpZy5ydWxlUGF0aHMgPSBjb25maWcuYWR2YW5jZWQuZXNsaW50UnVsZXNEaXJzLm1hcCgocGF0aCkgPT4ge1xuICAgIGNvbnN0IHJ1bGVzRGlyID0gY2xlYW5QYXRoKHBhdGgpXG4gICAgaWYgKCFQYXRoLmlzQWJzb2x1dGUocnVsZXNEaXIpKSB7XG4gICAgICByZXR1cm4gZmluZENhY2hlZChQYXRoLmRpcm5hbWUoZmlsZVBhdGgpLCBydWxlc0RpcilcbiAgICB9XG4gICAgcmV0dXJuIHJ1bGVzRGlyXG4gIH0pLmZpbHRlcigocGF0aCkgPT4gcGF0aClcblxuICBpZiAoZmlsZUNvbmZpZyA9PT0gbnVsbCAmJiBjb25maWcuZ2xvYmFsLmVzbGludHJjUGF0aCkge1xuICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGEgY29uZmlndXJhdGlvbiB1c2UgdGhlIGZhbGxiYWNrIGZyb20gdGhlIHNldHRpbmdzXG4gICAgY2xpRW5naW5lQ29uZmlnLmNvbmZpZ0ZpbGUgPSBjbGVhblBhdGgoY29uZmlnLmdsb2JhbC5lc2xpbnRyY1BhdGgpXG4gIH1cblxuICByZXR1cm4gY2xpRW5naW5lQ29uZmlnXG59XG5cbi8qKlxuICogR2V0cyB0aGUgbGlzdCBvZiBydWxlcyB1c2VkIGZvciBhIGxpbnQgam9iXG4gKiBAcGFyYW0gIHtpbXBvcnQoXCJlc2xpbnRcIikuQ0xJRW5naW5lfSBjbGlFbmdpbmUgVGhlIENMSUVuZ2luZSBpbnN0YW5jZSB1c2VkIGZvciB0aGUgbGludCBqb2JcbiAqIEByZXR1cm4ge01hcH0gICAgICAgICAgICAgIEEgTWFwIG9mIHRoZSBydWxlcyB1c2VkLCBydWxlIG5hbWVzIGFzIGtleXMsIHJ1bGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgYXMgdGhlIGNvbnRlbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UnVsZXMoY2xpRW5naW5lKSB7XG4gIC8vIFB1bGwgdGhlIGxpc3Qgb2YgcnVsZXMgdXNlZCBkaXJlY3RseSBmcm9tIHRoZSBDTElFbmdpbmVcbiAgaWYgKHR5cGVvZiBjbGlFbmdpbmUuZ2V0UnVsZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2xpRW5naW5lLmdldFJ1bGVzKClcbiAgfVxuXG4gIC8vIEF0dGVtcHQgdG8gdXNlIHRoZSBpbnRlcm5hbCAodW5kb2N1bWVudGVkKSBgbGludGVyYCBpbnN0YW5jZSBhdHRhY2hlZCB0b1xuICAvLyB0aGUgQ0xJRW5naW5lIHRvIGdldCB0aGUgbG9hZGVkIHJ1bGVzIChpbmNsdWRpbmcgcGx1Z2luIHJ1bGVzKS5cbiAgLy8gQWRkZWQgaW4gRVNMaW50IHY0XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2xpRW5naW5lLCAnbGludGVyJykpIHtcbiAgICByZXR1cm4gY2xpRW5naW5lLmxpbnRlci5nZXRSdWxlcygpXG4gIH1cblxuICAvLyBPbGRlciB2ZXJzaW9ucyBvZiBFU0xpbnQgZG9uJ3QgKGVhc2lseSkgc3VwcG9ydCBnZXR0aW5nIGEgbGlzdCBvZiBydWxlc1xuICByZXR1cm4gbmV3IE1hcCgpXG59XG5cbi8qKlxuICogR2l2ZW4gYW4gZXhpdGluZyBydWxlIGxpc3QgYW5kIGEgbmV3IHJ1bGUgbGlzdCwgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlXG4gKiBoYXZlIGJlZW4gY2hhbmdlcy5cbiAqIE5PVEU6IFRoaXMgb25seSBhY2NvdW50cyBmb3IgcHJlc2VuY2Ugb2YgdGhlIHJ1bGVzLCBjaGFuZ2VzIHRvIHRoZWlyIG1ldGFkYXRhXG4gKiBhcmUgbm90IHRha2VuIGludG8gYWNjb3VudC5cbiAqIEBwYXJhbSAge01hcH0gbmV3UnVsZXMgICAgIEEgTWFwIG9mIHRoZSBuZXcgcnVsZXNcbiAqIEBwYXJhbSAge01hcH0gY3VycmVudFJ1bGVzIEEgTWFwIG9mIHRoZSBjdXJyZW50IHJ1bGVzXG4gKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICBXaGV0aGVyIG9yIG5vdCB0aGVyZSB3ZXJlIGNoYW5nZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpZFJ1bGVzQ2hhbmdlKGN1cnJlbnRSdWxlcywgbmV3UnVsZXMpIHtcbiAgcmV0dXJuICEoY3VycmVudFJ1bGVzLnNpemUgPT09IG5ld1J1bGVzLnNpemVcbiAgICAmJiBBcnJheS5mcm9tKGN1cnJlbnRSdWxlcy5rZXlzKCkpLmV2ZXJ5KChydWxlSWQpID0+IG5ld1J1bGVzLmhhcyhydWxlSWQpKSlcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZXItaGVscGVycy5qcyJdLCJuYW1lcyI6WyJDYWNoZSIsIkVTTElOVF9MT0NBTF9QQVRIIiwiUGF0aCIsIm5vcm1hbGl6ZSIsImpvaW4iLCJfX2Rpcm5hbWUiLCJOT0RFX1BSRUZJWF9QQVRIIiwiTEFTVF9NT0RVTEVTX1BBVEgiLCJJbmNvbXBhdGlibGVFU0xpbnRFcnJvciIsIkVycm9yIiwiY29uc3RydWN0b3IiLCJ2ZXJzaW9uIiwibmFtZSIsImNsZWFuUGF0aCIsInBhdGgiLCJmcyIsImdldE5vZGVQcmVmaXhQYXRoIiwibnBtQ29tbWFuZCIsInByb2Nlc3MiLCJwbGF0Zm9ybSIsIkNoaWxkUHJvY2VzcyIsInNwYXduU3luYyIsImVudiIsIlBBVEgiLCJvdXRwdXQiLCJ0b1N0cmluZyIsInRyaW0iLCJlIiwiZXJyTXNnIiwiaXNEaXJlY3RvcnkiLCJkaXJQYXRoIiwiaXNEaXIiLCJzdGF0U3luYyIsImZhbGxiYWNrRm9yR2xvYmFsRXJyb3JUaHJvd24iLCJmaW5kRVNMaW50RGlyZWN0b3J5IiwibW9kdWxlc0RpciIsImNvbmZpZyIsInByb2plY3RQYXRoIiwiZmFsbGJhY2tGb3JHbG9iYWwiLCJlc2xpbnREaXIiLCJsb2NhdGlvblR5cGUiLCJnbG9iYWwiLCJ1c2VHbG9iYWxFc2xpbnQiLCJjb25maWdHbG9iYWwiLCJnbG9iYWxOb2RlUGF0aCIsInByZWZpeFBhdGgiLCJhZHZhbmNlZCIsImxvY2FsTm9kZU1vZHVsZXMiLCJpc0Fic29sdXRlIiwidHlwZSIsImNvbnNvbGUiLCJlcnJvciIsImNoZWNrRm9ySW5jb21wYXRpYmxlRVNMaW50IiwiZGlyZWN0b3J5IiwicGFja2FnZU1ldGEiLCJyZXF1aXJlIiwiXyIsIm0iLCJtYXRjaCIsIk51bWJlciIsImdldEVTTGludEZyb21EaXJlY3RvcnkiLCJFU0xpbnREaXJlY3RvcnkiLCJlc2xpbnQiLCJjb2RlIiwicmVmcmVzaE1vZHVsZXNQYXRoIiwiTk9ERV9QQVRIIiwiTW9kdWxlIiwiX2luaXRQYXRocyIsImdldEVTTGludEluc3RhbmNlIiwiZmlsZURpciIsImRpcm5hbWUiLCJsb2ciLCJhcmdzIiwib2JqIiwibGVuZ3RoIiwic3RyIiwiSlNPTiIsInN0cmluZ2lmeSIsIlV0aWwiLCJpbnNwZWN0IiwiZW1pdCIsImdldENvbmZpZ0ZvckZpbGUiLCJmaWxlUGF0aCIsImNsaSIsIkNMSUVuZ2luZSIsImdldFJlbGF0aXZlUGF0aCIsImlnbm9yZUZpbGUiLCJkaXNhYmxlRXNsaW50SWdub3JlIiwiaWdub3JlRGlyIiwiY2hkaXIiLCJyZWxhdGl2ZSIsImJhc2VuYW1lIiwiZ2V0Q0xJRW5naW5lT3B0aW9ucyIsInJ1bGVzIiwiZmlsZUNvbmZpZyIsImNsaUVuZ2luZUNvbmZpZyIsImlnbm9yZSIsImZpeCIsInJ1bGVQYXRocyIsImVzbGludFJ1bGVzRGlycyIsIm1hcCIsInJ1bGVzRGlyIiwiZmlsdGVyIiwiZXNsaW50cmNQYXRoIiwiY29uZmlnRmlsZSIsImdldFJ1bGVzIiwiY2xpRW5naW5lIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwibGludGVyIiwiTWFwIiwiZGlkUnVsZXNDaGFuZ2UiLCJjdXJyZW50UnVsZXMiLCJuZXdSdWxlcyIsInNpemUiLCJBcnJheSIsImZyb20iLCJrZXlzIiwiZXZlcnkiLCJydWxlSWQiLCJoYXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7QUFSQTtBQVVBLE1BQU1BLEtBQUssR0FBRztBQUNaQyxFQUFBQSxpQkFBaUIsRUFBRUMsY0FBS0MsU0FBTCxDQUFlRCxjQUFLRSxJQUFMLENBQVVDLFNBQVYsRUFBcUIsSUFBckIsRUFBMkIsY0FBM0IsRUFBMkMsUUFBM0MsQ0FBZixDQURQO0FBRVpDLEVBQUFBLGdCQUFnQixFQUFFLElBRk47QUFHWkMsRUFBQUEsaUJBQWlCLEVBQUU7QUFIUCxDQUFkOztBQU1BLE1BQU1DLHVCQUFO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Q0FERSxDQUFQO0FBRUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBnbG9iYWwgZW1pdCAqL1xuXG5pbXBvcnQgUGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IFV0aWwgZnJvbSAndXRpbCdcbmltcG9ydCBmcyBmcm9tICdmcy1wbHVzJ1xuaW1wb3J0IENoaWxkUHJvY2VzcyBmcm9tICdjaGlsZF9wcm9jZXNzJ1xuaW1wb3J0IHJlc29sdmVFbnYgZnJvbSAncmVzb2x2ZS1lbnYnXG5pbXBvcnQgeyBmaW5kQ2FjaGVkIH0gZnJvbSAnYXRvbS1saW50ZXInXG5pbXBvcnQgZ2V0UGF0aCBmcm9tICdjb25zaXN0ZW50LXBhdGgnXG5cbmNvbnN0IENhY2hlID0ge1xuICBFU0xJTlRfTE9DQUxfUEFUSDogUGF0aC5ub3JtYWxpemUoUGF0aC5qb2luKF9fZGlybmFtZSwgJy4uJywgJ25vZGVfbW9kdWxlcycsICdlc2xpbnQnKSksXG4gIE5PREVfUFJFRklYX1BBVEg6IG51bGwsXG4gIExBU1RfTU9EVUxFU19QQVRIOiBudWxsXG59XG5cbmNsYXNzIEluY29tcGF0aWJsZUVTTGludEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3Rvcih2ZXJzaW9uKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICBzdXBlcihgVGhlIHZlcnNpb24gb2YgRVNMaW50IHVzZWQgaW4gdGhpcyBwcm9qZWN0IGlzICR7dmVyc2lvbn0sIHdoaWNoIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoaXMgcGFja2FnZS4gVGhlIFxcYGxpbnRlci1lc2xpbnQtbm9kZVxcYCBBdG9tIHBhY2thZ2UgcHJvdmlkZXMgc3VwcG9ydCBmb3IgRVNMaW50IHZlcnNpb25zIDggYW5kIGhpZ2hlci5cXG5cXG5Zb3UgY2FuIGRpc2FibGUgdGhpcyBub3RpY2UgaW4gdGhlIGxpbnRlci1lc2xpbnQgcGFja2FnZSBzZXR0aW5ncyB1bmRlciAqKlVuY29tbW9uIOKGkiBOb3RpZnkgd2hlbiBpbmNvbXBhdGlibGUgRVNMaW50IGlzIGRldGVjdGVkKiouYClcbiAgICB0aGlzLm5hbWUgPSAnSW5jb21wYXRpYmxlRVNMaW50RXJyb3InXG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhIHBhdGggYW5kIHRyYW5zbGF0ZXMgYH5gIHRvIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnksIGFuZCByZXBsYWNlc1xuICogYWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyB3aXRoIHRoZWlyIHZhbHVlLlxuICogQHBhcmFtICB7c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIHJlbW92ZSBcInN0cmFuZ2VuZXNzXCIgZnJvbVxuICogQHJldHVybiB7c3RyaW5nfSAgICAgIFRoZSBjbGVhbmVkIHBhdGhcbiAqL1xuY29uc3QgY2xlYW5QYXRoID0gKHBhdGgpID0+IChwYXRoID8gcmVzb2x2ZUVudihmcy5ub3JtYWxpemUocGF0aCkpIDogJycpXG5cbi8qKlxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vZGVQcmVmaXhQYXRoKCkge1xuICBpZiAoQ2FjaGUuTk9ERV9QUkVGSVhfUEFUSCA9PT0gbnVsbCkge1xuICAgIGNvbnN0IG5wbUNvbW1hbmQgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ25wbS5jbWQnIDogJ25wbSdcbiAgICB0cnkge1xuICAgICAgQ2FjaGUuTk9ERV9QUkVGSVhfUEFUSCA9IENoaWxkUHJvY2Vzcy5zcGF3blN5bmMobnBtQ29tbWFuZCwgWydnZXQnLCAncHJlZml4J10sIHtcbiAgICAgICAgZW52OiB7IC4uLnByb2Nlc3MuZW52LCBQQVRIOiBnZXRQYXRoKCkgfVxuICAgICAgfSkub3V0cHV0WzFdLnRvU3RyaW5nKCkudHJpbSgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc3QgZXJyTXNnID0gJ1VuYWJsZSB0byBleGVjdXRlIGBucG0gZ2V0IHByZWZpeGAuIFBsZWFzZSBtYWtlIHN1cmUgJ1xuICAgICAgICArICdBdG9tIGlzIGdldHRpbmcgJFBBVEggY29ycmVjdGx5LidcbiAgICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpXG4gICAgfVxuICB9XG4gIHJldHVybiBDYWNoZS5OT0RFX1BSRUZJWF9QQVRIXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGRpclBhdGhcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0RpcmVjdG9yeShkaXJQYXRoKSB7XG4gIGxldCBpc0RpclxuICB0cnkge1xuICAgIGlzRGlyID0gZnMuc3RhdFN5bmMoZGlyUGF0aCkuaXNEaXJlY3RvcnkoKVxuICB9IGNhdGNoIChlKSB7XG4gICAgaXNEaXIgPSBmYWxzZVxuICB9XG4gIHJldHVybiBpc0RpclxufVxuXG5sZXQgZmFsbGJhY2tGb3JHbG9iYWxFcnJvclRocm93biA9IGZhbHNlXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZXNEaXJcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0UGF0aFxuICogQHBhcmFtIHtib29sZWFufSBmYWxsYmFja0Zvckdsb2JhbFxuICogQHJldHVybnMge3sgcGF0aDogc3RyaW5nLCB0eXBlOiAnbG9jYWwgcHJvamVjdCcgfCAnZ2xvYmFsJyB8ICdhZHZhbmNlZCBzcGVjaWZpZWQnIHwgJ2J1bmRsZWQgZmFsbGJhY2snIH19XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRVNMaW50RGlyZWN0b3J5KG1vZHVsZXNEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgsIGZhbGxiYWNrRm9yR2xvYmFsID0gZmFsc2UpIHtcbiAgbGV0IGVzbGludERpciA9IG51bGxcbiAgbGV0IGxvY2F0aW9uVHlwZSA9IG51bGxcbiAgaWYgKGNvbmZpZy5nbG9iYWwudXNlR2xvYmFsRXNsaW50ICYmICFmYWxsYmFja0Zvckdsb2JhbCkge1xuICAgIGxvY2F0aW9uVHlwZSA9ICdnbG9iYWwnXG4gICAgY29uc3QgY29uZmlnR2xvYmFsID0gY2xlYW5QYXRoKGNvbmZpZy5nbG9iYWwuZ2xvYmFsTm9kZVBhdGgpXG4gICAgY29uc3QgcHJlZml4UGF0aCA9IGNvbmZpZ0dsb2JhbCB8fCBnZXROb2RlUHJlZml4UGF0aCgpXG4gICAgLy8gTlBNIG9uIFdpbmRvd3MgYW5kIFlhcm4gb24gYWxsIHBsYXRmb3Jtc1xuICAgIGVzbGludERpciA9IFBhdGguam9pbihwcmVmaXhQYXRoLCAnbm9kZV9tb2R1bGVzJywgJ2VzbGludCcpXG4gICAgaWYgKCFpc0RpcmVjdG9yeShlc2xpbnREaXIpKSB7XG4gICAgICAvLyBOUE0gb24gcGxhdGZvcm1zIG90aGVyIHRoYW4gV2luZG93c1xuICAgICAgZXNsaW50RGlyID0gUGF0aC5qb2luKHByZWZpeFBhdGgsICdsaWInLCAnbm9kZV9tb2R1bGVzJywgJ2VzbGludCcpXG4gICAgfVxuICB9IGVsc2UgaWYgKCFjb25maWcuYWR2YW5jZWQubG9jYWxOb2RlTW9kdWxlcykge1xuICAgIGxvY2F0aW9uVHlwZSA9ICdsb2NhbCBwcm9qZWN0J1xuICAgIGVzbGludERpciA9IFBhdGguam9pbihtb2R1bGVzRGlyIHx8ICcnLCAnZXNsaW50JylcbiAgfSBlbHNlIGlmIChQYXRoLmlzQWJzb2x1dGUoY2xlYW5QYXRoKGNvbmZpZy5hZHZhbmNlZC5sb2NhbE5vZGVNb2R1bGVzKSkpIHtcbiAgICBsb2NhdGlvblR5cGUgPSAnYWR2YW5jZWQgc3BlY2lmaWVkJ1xuICAgIGVzbGludERpciA9IFBhdGguam9pbihjbGVhblBhdGgoY29uZmlnLmFkdmFuY2VkLmxvY2FsTm9kZU1vZHVsZXMpLCAnZXNsaW50JylcbiAgfSBlbHNlIHtcbiAgICBsb2NhdGlvblR5cGUgPSAnYWR2YW5jZWQgc3BlY2lmaWVkJ1xuICAgIGVzbGludERpciA9IFBhdGguam9pbihwcm9qZWN0UGF0aCB8fCAnJywgY2xlYW5QYXRoKGNvbmZpZy5hZHZhbmNlZC5sb2NhbE5vZGVNb2R1bGVzKSwgJ2VzbGludCcpXG4gIH1cblxuICBpZiAoaXNEaXJlY3RvcnkoZXNsaW50RGlyKSkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBlc2xpbnREaXIsXG4gICAgICB0eXBlOiBsb2NhdGlvblR5cGUsXG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbmZpZy5nbG9iYWwudXNlR2xvYmFsRXNsaW50ICYmICFmYWxsYmFja0Zvckdsb2JhbCkge1xuICAgIGlmICghZmFsbGJhY2tGb3JHbG9iYWxFcnJvclRocm93bikge1xuICAgICAgLy8gVGhyb3cgdGhlIGVycm9yIG9ubHkgb25jZSB0byBwcmV2ZW50IHBlcmZvcm1hbmNlIGlzc3Vlc1xuICAgICAgZmFsbGJhY2tGb3JHbG9iYWxFcnJvclRocm93biA9IHRydWVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEdsb2JhbCBFU0xpbnQgaXMgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gb3RoZXIgRXNsaW50IGluc3RhbGxhdGlvbnMuLi5cbiAgICAgICAgUGxlYXNlIGVuc3VyZSB0aGUgZ2xvYmFsIE5vZGUgcGF0aCBpcyBzZXQgY29ycmVjdGx5LlxuICAgICAgICBJZiB5b3Ugd2FudGVkIHRvIHVzZSBhIGxvY2FsIGluc3RhbGxhdGlvbiBvZiBFc2xpbnQsIGRpc2FibGUgR2xvYmFsIEVzbGludCBvcHRpb24gaW4gdGhlIGxpbnRlci1lc2xpbnQgY29uZmlnLmApXG4gICAgfVxuICAgIHJldHVybiBmaW5kRVNMaW50RGlyZWN0b3J5KG1vZHVsZXNEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgsIHRydWUpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHBhdGg6IENhY2hlLkVTTElOVF9MT0NBTF9QQVRILFxuICAgIHR5cGU6ICdidW5kbGVkIGZhbGxiYWNrJyxcbiAgfVxufVxuXG4vLyBHaXZlbiBhbiBFU0xpbnQgbW9kdWxlIHBhdGgsIGNoZWNrcyBpdHMgdmVyc2lvbiBhbmQgdGhyb3dzIGlmIHRoZSB2ZXJzaW9uIGlzXG4vLyB0b28gbmV3IGZvciB0aGlzIHBhY2thZ2UgdG8gc3VwcG9ydC5cbmZ1bmN0aW9uIGNoZWNrRm9ySW5jb21wYXRpYmxlRVNMaW50KGRpcmVjdG9yeSkge1xuICBsZXQgcGFja2FnZU1ldGFcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWR5bmFtaWMtcmVxdWlyZVxuICAgIHBhY2thZ2VNZXRhID0gcmVxdWlyZShQYXRoLmpvaW4oZGlyZWN0b3J5LCAncGFja2FnZS5qc29uJykpXG4gICAgaWYgKCFwYWNrYWdlTWV0YSB8fCAhcGFja2FnZU1ldGEudmVyc2lvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuXG4gIH1cbiAgLy8gV2UgZG9uJ3QgbmVlZCBzb3BoaXN0aWNhdGVkIHBhcnNpbmcgbG9naWMgaGVyZTsgd2UganVzdCBuZWVkIHRvIGxvb2sgYXRcbiAgLy8gdGhlIG1ham9yIHZlcnNpb24uXG4gIGNvbnN0IG0gPSBwYWNrYWdlTWV0YS52ZXJzaW9uLm1hdGNoKC9eKFtcXGRdKylcXC4vKVxuICBpZiAobSAmJiBOdW1iZXIobVsxXSkgPiA3KSB7XG4gICAgdGhyb3cgbmV3IEluY29tcGF0aWJsZUVTTGludEVycm9yKHBhY2thZ2VNZXRhLnZlcnNpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbW9kdWxlc0RpclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3RQYXRoXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiZXNsaW50XCIpfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RVNMaW50RnJvbURpcmVjdG9yeShtb2R1bGVzRGlyLCBjb25maWcsIHByb2plY3RQYXRoKSB7XG4gIGNvbnN0IHsgcGF0aDogRVNMaW50RGlyZWN0b3J5IH0gPSBmaW5kRVNMaW50RGlyZWN0b3J5KG1vZHVsZXNEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgpXG4gIGxldCBlc2xpbnRcbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWR5bmFtaWMtcmVxdWlyZVxuICAgIGVzbGludCA9IHJlcXVpcmUoRVNMaW50RGlyZWN0b3J5KVxuICAgIGlmICghKCdDTElFbmdpbmUnIGluIGVzbGludCkpIHtcbiAgICAgIGNoZWNrRm9ySW5jb21wYXRpYmxlRVNMaW50KEVTTGludERpcmVjdG9yeSlcbiAgICB9XG4gICAgcmV0dXJuIGVzbGludFxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gSWYgdGhpcyBpcyB0aGUgcmVzdWx0IG9mIGFuIGluY29tcGF0aWJsZSBFU0xpbnQsIGFuIGVycm9yIHdpbGwgYmVcbiAgICAvLyB0aHJvd247IG90aGVyd2lzZSB3ZSBzaG91bGQgcHJvY2VlZCB3aXRoIHRoZSBsb2NhbC1wYXRoIGZhbGxiYWNrLlxuICAgIGNoZWNrRm9ySW5jb21wYXRpYmxlRVNMaW50KEVTTGludERpcmVjdG9yeSlcblxuICAgIGlmIChjb25maWcuZ2xvYmFsLnVzZUdsb2JhbEVzbGludCAmJiBlLmNvZGUgPT09ICdNT0RVTEVfTk9UX0ZPVU5EJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFU0xpbnQgbm90IGZvdW5kLCB0cnkgcmVzdGFydGluZyBBdG9tIHRvIGNsZWFyIGNhY2hlcy4nKVxuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWR5bmFtaWMtcmVxdWlyZVxuICAgIHJldHVybiByZXF1aXJlKENhY2hlLkVTTElOVF9MT0NBTF9QQVRIKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1vZHVsZXNEaXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZnJlc2hNb2R1bGVzUGF0aChtb2R1bGVzRGlyKSB7XG4gIGlmIChDYWNoZS5MQVNUX01PRFVMRVNfUEFUSCAhPT0gbW9kdWxlc0Rpcikge1xuICAgIENhY2hlLkxBU1RfTU9EVUxFU19QQVRIID0gbW9kdWxlc0RpclxuICAgIHByb2Nlc3MuZW52Lk5PREVfUEFUSCA9IG1vZHVsZXNEaXIgfHwgJydcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGVcbiAgICByZXF1aXJlKCdtb2R1bGUnKS5Nb2R1bGUuX2luaXRQYXRocygpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZURpclxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmd9IHByb2plY3RQYXRoXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiZXNsaW50XCIpfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RVNMaW50SW5zdGFuY2UoZmlsZURpciwgY29uZmlnLCBwcm9qZWN0UGF0aCkge1xuICBjb25zdCBtb2R1bGVzRGlyID0gUGF0aC5kaXJuYW1lKGZpbmRDYWNoZWQoZmlsZURpciwgJ25vZGVfbW9kdWxlcy9lc2xpbnQnKSB8fCAnJylcbiAgcmVmcmVzaE1vZHVsZXNQYXRoKG1vZHVsZXNEaXIpXG4gIHJldHVybiBnZXRFU0xpbnRGcm9tRGlyZWN0b3J5KG1vZHVsZXNEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgpXG59XG5cbi8qKlxuICogY29uc29sZS5sb2dcbiAqIEBwYXJhbSAge2FueX0gYXJnc1xuICogQHJldHVybiB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG4gIGNvbnN0IG9iaiA9IGFyZ3MubGVuZ3RoID09PSAxID8gYXJnc1swXSA6IGFyZ3NcbiAgbGV0IHN0clxuICB0cnkge1xuICAgIHN0ciA9IEpTT04uc3RyaW5naWZ5KG9iailcbiAgfSBjYXRjaCAoZSkge1xuICAgIHN0ciA9IFV0aWwuaW5zcGVjdChvYmopXG4gIH1cblxuICBlbWl0KCdsb2cnLCBzdHIpXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoXCJlc2xpbnRcIil9IGVzbGludFxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdGb3JGaWxlKGVzbGludCwgZmlsZVBhdGgpIHtcbiAgY29uc3QgY2xpID0gbmV3IGVzbGludC5DTElFbmdpbmUoKVxuICB0cnkge1xuICAgIHJldHVybiBjbGkuZ2V0Q29uZmlnRm9yRmlsZShmaWxlUGF0aClcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIE5vIGNvbmZpZ3VyYXRpb24gd2FzIGZvdW5kXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlRGlyXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9qZWN0UGF0aFxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aXZlUGF0aChmaWxlRGlyLCBmaWxlUGF0aCwgY29uZmlnLCBwcm9qZWN0UGF0aCkge1xuICBjb25zdCBpZ25vcmVGaWxlID0gY29uZmlnLmFkdmFuY2VkLmRpc2FibGVFc2xpbnRJZ25vcmUgPyBudWxsIDogZmluZENhY2hlZChmaWxlRGlyLCAnLmVzbGludGlnbm9yZScpXG5cbiAgLy8gSWYgd2UgY2FuIGZpbmQgYW4gLmVzbGludGlnbm9yZSBmaWxlLCB3ZSBjYW4gc2V0IGN3ZCB0aGVyZVxuICAvLyAoYmVjYXVzZSB0aGV5IGFyZSBleHBlY3RlZCB0byBiZSBhdCB0aGUgcHJvamVjdCByb290KVxuICBpZiAoaWdub3JlRmlsZSkge1xuICAgIGNvbnN0IGlnbm9yZURpciA9IFBhdGguZGlybmFtZShpZ25vcmVGaWxlKVxuICAgIHByb2Nlc3MuY2hkaXIoaWdub3JlRGlyKVxuICAgIHJldHVybiBQYXRoLnJlbGF0aXZlKGlnbm9yZURpciwgZmlsZVBhdGgpXG4gIH1cbiAgLy8gT3RoZXJ3aXNlLCB3ZSdsbCBzZXQgdGhlIGN3ZCB0byB0aGUgYXRvbSBwcm9qZWN0IHJvb3QgYXMgbG9uZyBhcyB0aGF0IGV4aXN0c1xuICBpZiAocHJvamVjdFBhdGgpIHtcbiAgICBwcm9jZXNzLmNoZGlyKHByb2plY3RQYXRoKVxuICAgIHJldHVybiBQYXRoLnJlbGF0aXZlKHByb2plY3RQYXRoLCBmaWxlUGF0aClcbiAgfVxuICAvLyBJZiBhbGwgZWxzZSBmYWlscywgdXNlIHRoZSBmaWxlIGxvY2F0aW9uIGl0c2VsZlxuICBwcm9jZXNzLmNoZGlyKGZpbGVEaXIpXG4gIHJldHVybiBQYXRoLmJhc2VuYW1lKGZpbGVQYXRoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcGFyYW0ge29iamVjdH0gZmlsZUNvbmZpZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q0xJRW5naW5lT3B0aW9ucyh0eXBlLCBjb25maWcsIHJ1bGVzLCBmaWxlUGF0aCwgZmlsZUNvbmZpZykge1xuICBjb25zdCBjbGlFbmdpbmVDb25maWcgPSB7XG4gICAgcnVsZXMsXG4gICAgaWdub3JlOiAhY29uZmlnLmFkdmFuY2VkLmRpc2FibGVFc2xpbnRJZ25vcmUsXG4gICAgZml4OiB0eXBlID09PSAnZml4J1xuICB9XG5cbiAgY2xpRW5naW5lQ29uZmlnLnJ1bGVQYXRocyA9IGNvbmZpZy5hZHZhbmNlZC5lc2xpbnRSdWxlc0RpcnMubWFwKChwYXRoKSA9PiB7XG4gICAgY29uc3QgcnVsZXNEaXIgPSBjbGVhblBhdGgocGF0aClcbiAgICBpZiAoIVBhdGguaXNBYnNvbHV0ZShydWxlc0RpcikpIHtcbiAgICAgIHJldHVybiBmaW5kQ2FjaGVkKFBhdGguZGlybmFtZShmaWxlUGF0aCksIHJ1bGVzRGlyKVxuICAgIH1cbiAgICByZXR1cm4gcnVsZXNEaXJcbiAgfSkuZmlsdGVyKChwYXRoKSA9PiBwYXRoKVxuXG4gIGlmIChmaWxlQ29uZmlnID09PSBudWxsICYmIGNvbmZpZy5nbG9iYWwuZXNsaW50cmNQYXRoKSB7XG4gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYSBjb25maWd1cmF0aW9uIHVzZSB0aGUgZmFsbGJhY2sgZnJvbSB0aGUgc2V0dGluZ3NcbiAgICBjbGlFbmdpbmVDb25maWcuY29uZmlnRmlsZSA9IGNsZWFuUGF0aChjb25maWcuZ2xvYmFsLmVzbGludHJjUGF0aClcbiAgfVxuXG4gIHJldHVybiBjbGlFbmdpbmVDb25maWdcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBsaXN0IG9mIHJ1bGVzIHVzZWQgZm9yIGEgbGludCBqb2JcbiAqIEBwYXJhbSAge2ltcG9ydChcImVzbGludFwiKS5DTElFbmdpbmV9IGNsaUVuZ2luZSBUaGUgQ0xJRW5naW5lIGluc3RhbmNlIHVzZWQgZm9yIHRoZSBsaW50IGpvYlxuICogQHJldHVybiB7TWFwfSAgICAgICAgICAgICAgQSBNYXAgb2YgdGhlIHJ1bGVzIHVzZWQsIHJ1bGUgbmFtZXMgYXMga2V5cywgcnVsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcyBhcyB0aGUgY29udGVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSdWxlcyhjbGlFbmdpbmUpIHtcbiAgLy8gUHVsbCB0aGUgbGlzdCBvZiBydWxlcyB1c2VkIGRpcmVjdGx5IGZyb20gdGhlIENMSUVuZ2luZVxuICBpZiAodHlwZW9mIGNsaUVuZ2luZS5nZXRSdWxlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjbGlFbmdpbmUuZ2V0UnVsZXMoKVxuICB9XG5cbiAgLy8gQXR0ZW1wdCB0byB1c2UgdGhlIGludGVybmFsICh1bmRvY3VtZW50ZWQpIGBsaW50ZXJgIGluc3RhbmNlIGF0dGFjaGVkIHRvXG4gIC8vIHRoZSBDTElFbmdpbmUgdG8gZ2V0IHRoZSBsb2FkZWQgcnVsZXMgKGluY2x1ZGluZyBwbHVnaW4gcnVsZXMpLlxuICAvLyBBZGRlZCBpbiBFU0xpbnQgdjRcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjbGlFbmdpbmUsICdsaW50ZXInKSkge1xuICAgIHJldHVybiBjbGlFbmdpbmUubGludGVyLmdldFJ1bGVzKClcbiAgfVxuXG4gIC8vIE9sZGVyIHZlcnNpb25zIG9mIEVTTGludCBkb24ndCAoZWFzaWx5KSBzdXBwb3J0IGdldHRpbmcgYSBsaXN0IG9mIHJ1bGVzXG4gIHJldHVybiBuZXcgTWFwKClcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBleGl0aW5nIHJ1bGUgbGlzdCBhbmQgYSBuZXcgcnVsZSBsaXN0LCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlcmVcbiAqIGhhdmUgYmVlbiBjaGFuZ2VzLlxuICogTk9URTogVGhpcyBvbmx5IGFjY291bnRzIGZvciBwcmVzZW5jZSBvZiB0aGUgcnVsZXMsIGNoYW5nZXMgdG8gdGhlaXIgbWV0YWRhdGFcbiAqIGFyZSBub3QgdGFrZW4gaW50byBhY2NvdW50LlxuICogQHBhcmFtICB7TWFwfSBuZXdSdWxlcyAgICAgQSBNYXAgb2YgdGhlIG5ldyBydWxlc1xuICogQHBhcmFtICB7TWFwfSBjdXJyZW50UnVsZXMgQSBNYXAgb2YgdGhlIGN1cnJlbnQgcnVsZXNcbiAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgIFdoZXRoZXIgb3Igbm90IHRoZXJlIHdlcmUgY2hhbmdlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGlkUnVsZXNDaGFuZ2UoY3VycmVudFJ1bGVzLCBuZXdSdWxlcykge1xuICByZXR1cm4gIShjdXJyZW50UnVsZXMuc2l6ZSA9PT0gbmV3UnVsZXMuc2l6ZVxuICAgICYmIEFycmF5LmZyb20oY3VycmVudFJ1bGVzLmtleXMoKSkuZXZlcnkoKHJ1bGVJZCkgPT4gbmV3UnVsZXMuaGFzKHJ1bGVJZCkpKVxufVxuIl19 \ No newline at end of file diff --git a/dist/worker.js b/dist/worker.js index 9cad07de..33971edc 100644 --- a/dist/worker.js +++ b/dist/worker.js @@ -119,9 +119,10 @@ module.exports = async () => { } catch (workerErr) { emit(`workerError:${emitKey}`, { msg: workerErr.message, - stack: workerErr.stack + stack: workerErr.stack, + name: workerErr.name }); } }); }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZXIuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsInRpdGxlIiwicnVsZXNNZXRhZGF0YSIsIk1hcCIsInNob3VsZFNlbmRSdWxlcyIsImxpbnRKb2IiLCJjbGlFbmdpbmVPcHRpb25zIiwiY29udGVudHMiLCJlc2xpbnQiLCJmaWxlUGF0aCIsImNsaUVuZ2luZSIsIkNMSUVuZ2luZSIsInJlcG9ydCIsImV4ZWN1dGVPblRleHQiLCJydWxlcyIsIkhlbHBlcnMiLCJnZXRSdWxlcyIsImRpZFJ1bGVzQ2hhbmdlIiwiY2xlYXIiLCJmb3JFYWNoIiwicHJvcGVydGllcyIsInJ1bGUiLCJzZXQiLCJmaXhKb2IiLCJvdXRwdXRGaXhlcyIsInJlc3VsdHMiLCJsZW5ndGgiLCJtZXNzYWdlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJvbiIsImpvYkNvbmZpZyIsInR5cGUiLCJjb25maWciLCJwcm9qZWN0UGF0aCIsImVtaXRLZXkiLCJhZHZhbmNlZCIsImRpc2FibGVGU0NhY2hlIiwiRmluZENhY2hlIiwiZmlsZURpciIsIlBhdGgiLCJkaXJuYW1lIiwiZ2V0RVNMaW50SW5zdGFuY2UiLCJmaWxlQ29uZmlnIiwiZ2V0Q29uZmlnRm9yRmlsZSIsImRpc2FibGluZyIsImRpc2FibGVXaGVuTm9Fc2xpbnRDb25maWciLCJlbWl0IiwicmVsYXRpdmVGaWxlUGF0aCIsImdldFJlbGF0aXZlUGF0aCIsImdldENMSUVuZ2luZU9wdGlvbnMiLCJyZXNwb25zZSIsInVwZGF0ZWRSdWxlcyIsIkFycmF5IiwiZnJvbSIsIm1vZHVsZXNEaXIiLCJmaW5kRVNMaW50RGlyZWN0b3J5Iiwid29ya2VyRXJyIiwibXNnIiwibWVzc2FnZSIsInN0YWNrIl0sIm1hcHBpbmdzIjoiOztBQUVBOztBQUNBOztBQUNBOzs7Ozs7QUFKQTtBQU1BQSxPQUFPLENBQUNDLEtBQVIsR0FBZ0Isc0JBQWhCO0FBRUEsTUFBTUMsYUFBYSxHQUFHLElBQUlDLEdBQUosRUFBdEI7QUFDQSxJQUFJ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QUFBLElBQUksQ0FBQ1osT0FBRCxFQUFVZ0IsUUFBVixDQUFKO0FBQ0QsS0FwQ0QsQ0FvQ0UsT0FBT00sU0FBUCxFQUFrQjtBQUNsQlYsTUFBQUEsSUFBSSxDQUFFLGVBQWNaLE9BQVEsRUFBeEIsRUFBMkI7QUFBRXVCLFFBQUFBLEdBQUcsRUFBRUQsU0FBUyxDQUFDRSxPQUFqQjtBQUEwQkMsUUFBQUEsS0FBSyxFQUFFSCxTQUFTLENBQUNHO0FBQTNDLE9BQTNCLENBQUo7QUFDRDtBQUNGLEdBN0NEO0FBOENELENBL0NEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZ2xvYmFsIGVtaXQgKi9cblxuaW1wb3J0ICogYXMgUGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgRmluZENhY2hlLCBmaW5kQ2FjaGVkIH0gZnJvbSAnYXRvbS1saW50ZXInXG5pbXBvcnQgKiBhcyBIZWxwZXJzIGZyb20gJy4vd29ya2VyLWhlbHBlcnMnXG5cbnByb2Nlc3MudGl0bGUgPSAnbGludGVyLWVzbGludCBoZWxwZXInXG5cbmNvbnN0IHJ1bGVzTWV0YWRhdGEgPSBuZXcgTWFwKClcbmxldCBzaG91bGRTZW5kUnVsZXMgPSBmYWxzZVxuXG4vKipcbiAqIFRoZSByZXR1cm4gb2Yge2dldENMSUVuZ2luZU9wdGlvbnN9IGZ1bmN0aW9uXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBDbGlFbmdpbmVPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBydWxlc1xuICogQHByb3BlcnR5IHtib29sZWFufSBpZ25vcmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gZml4XG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBydWxlUGF0aHNcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBjb25maWdGaWxlXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0NsaUVuZ2luZU9wdGlvbnN9IGNsaUVuZ2luZU9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50c1xuICogQHBhcmFtIHtpbXBvcnQoXCJlc2xpbnRcIil9IGVzbGludFxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKi9cbmZ1bmN0aW9uIGxpbnRKb2IoY2xpRW5naW5lT3B0aW9ucywgY29udGVudHMsIGVzbGludCwgZmlsZVBhdGgpIHtcbiAgY29uc3QgY2xpRW5naW5lID0gbmV3IGVzbGludC5DTElFbmdpbmUoY2xpRW5naW5lT3B0aW9ucylcbiAgY29uc3QgcmVwb3J0ID0gY2xpRW5naW5lLmV4ZWN1dGVPblRleHQoY29udGVudHMsIGZpbGVQYXRoKVxuICBjb25zdCBydWxlcyA9IEhlbHBlcnMuZ2V0UnVsZXMoY2xpRW5naW5lKVxuICBzaG91bGRTZW5kUnVsZXMgPSBIZWxwZXJzLmRpZFJ1bGVzQ2hhbmdlKHJ1bGVzTWV0YWRhdGEsIHJ1bGVzKVxuICBpZiAoc2hvdWxkU2VuZFJ1bGVzKSB7XG4gICAgLy8gUmVidWlsZCBydWxlc01ldGFkYXRhXG4gICAgcnVsZXNNZXRhZGF0YS5jbGVhcigpXG4gICAgcnVsZXMuZm9yRWFjaCgocHJvcGVydGllcywgcnVsZSkgPT4gcnVsZXNNZXRhZGF0YS5zZXQocnVsZSwgcHJvcGVydGllcykpXG4gIH1cbiAgcmV0dXJuIHJlcG9ydFxufVxuXG4vKipcbiAqIEBwYXJhbSB7Q2xpRW5naW5lT3B0aW9uc30gY2xpRW5naW5lT3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnRzXG4gKiBAcGFyYW0ge3N0cmluZ30gZmlsZVBhdGhcbiAqIEBwYXJhbSB7aW1wb3J0KFwiZXNsaW50XCIpfSBlc2xpbnRcbiAqL1xuZnVuY3Rpb24gZml4Sm9iKGNsaUVuZ2luZU9wdGlvbnMsIGNvbnRlbnRzLCBlc2xpbnQsIGZpbGVQYXRoKSB7XG4gIGNvbnN0IHJlcG9ydCA9IGxpbnRKb2IoY2xpRW5naW5lT3B0aW9ucywgY29udGVudHMsIGVzbGludCwgZmlsZVBhdGgpXG5cbiAgZXNsaW50LkNMSUVuZ2luZS5vdXRwdXRGaXhlcyhyZXBvcnQpXG5cbiAgaWYgKCFyZXBvcnQucmVzdWx0cy5sZW5ndGggfHwgIXJlcG9ydC5yZXN1bHRzWzBdLm1lc3NhZ2VzLmxlbmd0aCkge1xuICAgIHJldHVybiAnTGludGVyLUVTTGludDogRml4IGNvbXBsZXRlLidcbiAgfVxuICByZXR1cm4gJ0xpbnRlci1FU0xpbnQ6IEZpeCBhdHRlbXB0IGNvbXBsZXRlLCBidXQgbGludGluZyBlcnJvcnMgcmVtYWluLidcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3luYyAoKSA9PiB7XG4gIHByb2Nlc3Mub24oJ21lc3NhZ2UnLCAoam9iQ29uZmlnKSA9PiB7XG4gICAgLy8gV2UgY2F0Y2ggYWxsIHdvcmtlciBlcnJvcnMgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIGEgc2VwYXJhdGUgZXJyb3IgZW1pdHRlclxuICAgIC8vIGZvciBlYWNoIGVtaXRLZXksIHJhdGhlciB0aGFuIGFkZGluZyBtdWx0aXBsZSBsaXN0ZW5lcnMgZm9yIGB0YXNrOmVycm9yYFxuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRlbnRzLCB0eXBlLCBjb25maWcsIGZpbGVQYXRoLCBwcm9qZWN0UGF0aCwgcnVsZXMsIGVtaXRLZXlcbiAgICB9ID0gam9iQ29uZmlnXG4gICAgdHJ5IHtcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWQuZGlzYWJsZUZTQ2FjaGUpIHtcbiAgICAgICAgRmluZENhY2hlLmNsZWFyKClcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZURpciA9IFBhdGguZGlybmFtZShmaWxlUGF0aClcbiAgICAgIGNvbnN0IGVzbGludCA9IEhlbHBlcnMuZ2V0RVNMaW50SW5zdGFuY2UoZmlsZURpciwgY29uZmlnLCBwcm9qZWN0UGF0aClcblxuICAgICAgY29uc3QgZmlsZUNvbmZpZyA9IEhlbHBlcnMuZ2V0Q29uZmlnRm9yRmlsZShlc2xpbnQsIGZpbGVQYXRoKVxuICAgICAgaWYgKGZpbGVDb25maWcgPT09IG51bGwgJiYgY29uZmlnLmRpc2FibGluZy5kaXNhYmxlV2hlbk5vRXNsaW50Q29uZmlnKSB7XG4gICAgICAgIGVtaXQoZW1pdEtleSwgeyBtZXNzYWdlczogW10gfSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0aXZlRmlsZVBhdGggPSBIZWxwZXJzLmdldFJlbGF0aXZlUGF0aChmaWxlRGlyLCBmaWxlUGF0aCwgY29uZmlnLCBwcm9qZWN0UGF0aClcblxuICAgICAgY29uc3QgY2xpRW5naW5lT3B0aW9ucyA9IEhlbHBlcnNcbiAgICAgICAgLmdldENMSUVuZ2luZU9wdGlvbnModHlwZSwgY29uZmlnLCBydWxlcywgcmVsYXRpdmVGaWxlUGF0aCwgZmlsZUNvbmZpZylcblxuICAgICAgbGV0IHJlc3BvbnNlXG4gICAgICBpZiAodHlwZSA9PT0gJ2xpbnQnKSB7XG4gICAgICAgIGNvbnN0IHJlcG9ydCA9IGxpbnRKb2IoY2xpRW5naW5lT3B0aW9ucywgY29udGVudHMsIGVzbGludCwgZmlsZVBhdGgpXG4gICAgICAgIHJlc3BvbnNlID0ge1xuICAgICAgICAgIG1lc3NhZ2VzOiByZXBvcnQucmVzdWx0cy5sZW5ndGggPyByZXBvcnQucmVzdWx0c1swXS5tZXNzYWdlcyA6IFtdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFNlbmRSdWxlcykge1xuICAgICAgICAgIC8vIFlvdSBjYW4ndCBlbWl0IE1hcHMsIGNvbnZlcnQgdG8gQXJyYXkgb2YgQXJyYXlzIHRvIHNlbmQgYmFjay5cbiAgICAgICAgICByZXNwb25zZS51cGRhdGVkUnVsZXMgPSBBcnJheS5mcm9tKHJ1bGVzTWV0YWRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2ZpeCcpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBmaXhKb2IoY2xpRW5naW5lT3B0aW9ucywgY29udGVudHMsIGVzbGludCwgZmlsZVBhdGgpXG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkZWJ1ZycpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlc0RpciA9IFBhdGguZGlybmFtZShmaW5kQ2FjaGVkKGZpbGVEaXIsICdub2RlX21vZHVsZXMvZXNsaW50JykgfHwgJycpXG4gICAgICAgIHJlc3BvbnNlID0gSGVscGVycy5maW5kRVNMaW50RGlyZWN0b3J5KG1vZHVsZXNEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgpXG4gICAgICB9XG4gICAgICBlbWl0KGVtaXRLZXksIHJlc3BvbnNlKVxuICAgIH0gY2F0Y2ggKHdvcmtlckVycikge1xuICAgICAgZW1pdChgd29ya2VyRXJyb3I6JHtlbWl0S2V5fWAsIHsgbXNnOiB3b3JrZXJFcnIubWVzc2FnZSwgc3RhY2s6IHdvcmtlckVyci5zdGFjayB9KVxuICAgIH1cbiAgfSlcbn1cbiJdfQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy93b3JrZXIuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsInRpdGxlIiwicnVsZXNNZXRhZGF0YSIsIk1hcCIsInNob3VsZFNlbmRSdWxlcyIsImxpbnRKb2IiLCJjbGlFbmdpbmVPcHRpb25zIiwiY29udGVudHMiLCJlc2xpbnQiLCJmaWxlUGF0aCIsImNsaUVuZ2luZSIsIkNMSUVuZ2luZSIsInJlcG9ydCIsImV4ZWN1dGVPblRleHQiLCJydWxlcyIsIkhlbHBlcnMiLCJnZXRSdWxlcyIsImRpZFJ1bGVzQ2hhbmdlIiwiY2xlYXIiLCJmb3JFYWNoIiwicHJvcGVydGllcyIsInJ1bGUiLCJzZXQiLCJmaXhKb2IiLCJvdXRwdXRGaXhlcyIsInJlc3VsdHMiLCJsZW5ndGgiLCJtZXNzYWdlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJvbiIsImpvYkNvbmZpZyIsInR5cGUiLCJjb25maWciLCJwcm9qZWN0UGF0aCIsImVtaXRLZXkiLCJhZHZhbmNlZCIsImRpc2FibGVGU0NhY2hlIiwiRmluZENhY2hlIiwiZmlsZURpciIsIlBhdGgiLCJkaXJuYW1lIiwiZ2V0RVNMaW50SW5zdGFuY2UiLCJmaWxlQ29uZmlnIiwiZ2V0Q29uZmlnRm9yRmlsZSIsImRpc2FibGluZyIsImRpc2FibGVXaGVuTm9Fc2xpbnRDb25maWciLCJlbWl0IiwicmVsYXRpdmVGaWxlUGF0aCIsImdldFJlbGF0aXZlUGF0aCIsImdldENMSUVuZ2luZU9wdGlvbnMiLCJyZXNwb25zZSIsInVwZGF0ZWRSdWxlcyIsIkFycmF5IiwiZnJvbSIsIm1vZHVsZXNEaXIiLCJmaW5kRVNMaW50RGlyZWN0b3J5Iiwid29ya2VyRXJyIiwibXNnIiwibWVzc2FnZSIsInN0YWNrIiwibmFtZSJdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7QUFDQTs7QUFDQTs7Ozs7O0FBSkE7QUFNQUEsT0FBTyxDQUFDQyxLQUFSLEdBQWdCLHNCQUFoQjtBQUVBLE1BQU1DLGFBQWEsR0FBRyxJQUFJQyxHQUFKLEVBQXRCO0FB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QUNEYSxNQUFBQSxJQUFJLENBQUNaLE9BQUQsRUFBVWdCLFFBQVYsQ0FBSjtBQUNELEtBcENELENBb0NFLE9BQU9NLFNBQVAsRUFBa0I7QUFDbEJWLE1BQUFBLElBQUksQ0FBRSxlQUFjWixPQUFRLEVBQXhCLEVBQTJCO0FBQzdCdUIsUUFBQUEsR0FBRyxFQUFFRCxTQUFTLENBQUNFLE9BRGM7QUFFN0JDLFFBQUFBLEtBQUssRUFBRUgsU0FBUyxDQUFDRyxLQUZZO0FBRzdCQyxRQUFBQSxJQUFJLEVBQUVKLFNBQVMsQ0FBQ0k7QUFIYSxPQUEzQixDQUFKO0FBS0Q7QUFDRixHQWpERDtBQWtERCxDQW5ERCIsInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBlbWl0ICovXG5cbmltcG9ydCAqIGFzIFBhdGggZnJvbSAncGF0aCdcbmltcG9ydCB7IEZpbmRDYWNoZSwgZmluZENhY2hlZCB9IGZyb20gJ2F0b20tbGludGVyJ1xuaW1wb3J0ICogYXMgSGVscGVycyBmcm9tICcuL3dvcmtlci1oZWxwZXJzJ1xuXG5wcm9jZXNzLnRpdGxlID0gJ2xpbnRlci1lc2xpbnQgaGVscGVyJ1xuXG5jb25zdCBydWxlc01ldGFkYXRhID0gbmV3IE1hcCgpXG5sZXQgc2hvdWxkU2VuZFJ1bGVzID0gZmFsc2VcblxuLyoqXG4gKiBUaGUgcmV0dXJuIG9mIHtnZXRDTElFbmdpbmVPcHRpb25zfSBmdW5jdGlvblxuICogQHR5cGVkZWYge29iamVjdH0gQ2xpRW5naW5lT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaWdub3JlXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGZpeFxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gcnVsZVBhdGhzXG4gKiBAcHJvcGVydHkge3N0cmluZyB8IHVuZGVmaW5lZH0gY29uZmlnRmlsZVxuICovXG5cbi8qKlxuICogQHBhcmFtIHtDbGlFbmdpbmVPcHRpb25zfSBjbGlFbmdpbmVPcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudHNcbiAqIEBwYXJhbSB7aW1wb3J0KFwiZXNsaW50XCIpfSBlc2xpbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlUGF0aFxuICovXG5mdW5jdGlvbiBsaW50Sm9iKGNsaUVuZ2luZU9wdGlvbnMsIGNvbnRlbnRzLCBlc2xpbnQsIGZpbGVQYXRoKSB7XG4gIGNvbnN0IGNsaUVuZ2luZSA9IG5ldyBlc2xpbnQuQ0xJRW5naW5lKGNsaUVuZ2luZU9wdGlvbnMpXG4gIGNvbnN0IHJlcG9ydCA9IGNsaUVuZ2luZS5leGVjdXRlT25UZXh0KGNvbnRlbnRzLCBmaWxlUGF0aClcbiAgY29uc3QgcnVsZXMgPSBIZWxwZXJzLmdldFJ1bGVzKGNsaUVuZ2luZSlcbiAgc2hvdWxkU2VuZFJ1bGVzID0gSGVscGVycy5kaWRSdWxlc0NoYW5nZShydWxlc01ldGFkYXRhLCBydWxlcylcbiAgaWYgKHNob3VsZFNlbmRSdWxlcykge1xuICAgIC8vIFJlYnVpbGQgcnVsZXNNZXRhZGF0YVxuICAgIHJ1bGVzTWV0YWRhdGEuY2xlYXIoKVxuICAgIHJ1bGVzLmZvckVhY2goKHByb3BlcnRpZXMsIHJ1bGUpID0+IHJ1bGVzTWV0YWRhdGEuc2V0KHJ1bGUsIHByb3BlcnRpZXMpKVxuICB9XG4gIHJldHVybiByZXBvcnRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NsaUVuZ2luZU9wdGlvbnN9IGNsaUVuZ2luZU9wdGlvbnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50c1xuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVQYXRoXG4gKiBAcGFyYW0ge2ltcG9ydChcImVzbGludFwiKX0gZXNsaW50XG4gKi9cbmZ1bmN0aW9uIGZpeEpvYihjbGlFbmdpbmVPcHRpb25zLCBjb250ZW50cywgZXNsaW50LCBmaWxlUGF0aCkge1xuICBjb25zdCByZXBvcnQgPSBsaW50Sm9iKGNsaUVuZ2luZU9wdGlvbnMsIGNvbnRlbnRzLCBlc2xpbnQsIGZpbGVQYXRoKVxuXG4gIGVzbGludC5DTElFbmdpbmUub3V0cHV0Rml4ZXMocmVwb3J0KVxuXG4gIGlmICghcmVwb3J0LnJlc3VsdHMubGVuZ3RoIHx8ICFyZXBvcnQucmVzdWx0c1swXS5tZXNzYWdlcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ0xpbnRlci1FU0xpbnQ6IEZpeCBjb21wbGV0ZS4nXG4gIH1cbiAgcmV0dXJuICdMaW50ZXItRVNMaW50OiBGaXggYXR0ZW1wdCBjb21wbGV0ZSwgYnV0IGxpbnRpbmcgZXJyb3JzIHJlbWFpbi4nXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXN5bmMgKCkgPT4ge1xuICBwcm9jZXNzLm9uKCdtZXNzYWdlJywgKGpvYkNvbmZpZykgPT4ge1xuICAgIC8vIFdlIGNhdGNoIGFsbCB3b3JrZXIgZXJyb3JzIHNvIHRoYXQgd2UgY2FuIGNyZWF0ZSBhIHNlcGFyYXRlIGVycm9yIGVtaXR0ZXJcbiAgICAvLyBmb3IgZWFjaCBlbWl0S2V5LCByYXRoZXIgdGhhbiBhZGRpbmcgbXVsdGlwbGUgbGlzdGVuZXJzIGZvciBgdGFzazplcnJvcmBcbiAgICBjb25zdCB7XG4gICAgICBjb250ZW50cywgdHlwZSwgY29uZmlnLCBmaWxlUGF0aCwgcHJvamVjdFBhdGgsIHJ1bGVzLCBlbWl0S2V5XG4gICAgfSA9IGpvYkNvbmZpZ1xuICAgIHRyeSB7XG4gICAgICBpZiAoY29uZmlnLmFkdmFuY2VkLmRpc2FibGVGU0NhY2hlKSB7XG4gICAgICAgIEZpbmRDYWNoZS5jbGVhcigpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVEaXIgPSBQYXRoLmRpcm5hbWUoZmlsZVBhdGgpXG4gICAgICBjb25zdCBlc2xpbnQgPSBIZWxwZXJzLmdldEVTTGludEluc3RhbmNlKGZpbGVEaXIsIGNvbmZpZywgcHJvamVjdFBhdGgpXG5cbiAgICAgIGNvbnN0IGZpbGVDb25maWcgPSBIZWxwZXJzLmdldENvbmZpZ0ZvckZpbGUoZXNsaW50LCBmaWxlUGF0aClcbiAgICAgIGlmIChmaWxlQ29uZmlnID09PSBudWxsICYmIGNvbmZpZy5kaXNhYmxpbmcuZGlzYWJsZVdoZW5Ob0VzbGludENvbmZpZykge1xuICAgICAgICBlbWl0KGVtaXRLZXksIHsgbWVzc2FnZXM6IFtdIH0pXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGl2ZUZpbGVQYXRoID0gSGVscGVycy5nZXRSZWxhdGl2ZVBhdGgoZmlsZURpciwgZmlsZVBhdGgsIGNvbmZpZywgcHJvamVjdFBhdGgpXG5cbiAgICAgIGNvbnN0IGNsaUVuZ2luZU9wdGlvbnMgPSBIZWxwZXJzXG4gICAgICAgIC5nZXRDTElFbmdpbmVPcHRpb25zKHR5cGUsIGNvbmZpZywgcnVsZXMsIHJlbGF0aXZlRmlsZVBhdGgsIGZpbGVDb25maWcpXG5cbiAgICAgIGxldCByZXNwb25zZVxuICAgICAgaWYgKHR5cGUgPT09ICdsaW50Jykge1xuICAgICAgICBjb25zdCByZXBvcnQgPSBsaW50Sm9iKGNsaUVuZ2luZU9wdGlvbnMsIGNvbnRlbnRzLCBlc2xpbnQsIGZpbGVQYXRoKVxuICAgICAgICByZXNwb25zZSA9IHtcbiAgICAgICAgICBtZXNzYWdlczogcmVwb3J0LnJlc3VsdHMubGVuZ3RoID8gcmVwb3J0LnJlc3VsdHNbMF0ubWVzc2FnZXMgOiBbXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRTZW5kUnVsZXMpIHtcbiAgICAgICAgICAvLyBZb3UgY2FuJ3QgZW1pdCBNYXBzLCBjb252ZXJ0IHRvIEFycmF5IG9mIEFycmF5cyB0byBzZW5kIGJhY2suXG4gICAgICAgICAgcmVzcG9uc2UudXBkYXRlZFJ1bGVzID0gQXJyYXkuZnJvbShydWxlc01ldGFkYXRhKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmaXgnKSB7XG4gICAgICAgIHJlc3BvbnNlID0gZml4Sm9iKGNsaUVuZ2luZU9wdGlvbnMsIGNvbnRlbnRzLCBlc2xpbnQsIGZpbGVQYXRoKVxuICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGVidWcnKSB7XG4gICAgICAgIGNvbnN0IG1vZHVsZXNEaXIgPSBQYXRoLmRpcm5hbWUoZmluZENhY2hlZChmaWxlRGlyLCAnbm9kZV9tb2R1bGVzL2VzbGludCcpIHx8ICcnKVxuICAgICAgICByZXNwb25zZSA9IEhlbHBlcnMuZmluZEVTTGludERpcmVjdG9yeShtb2R1bGVzRGlyLCBjb25maWcsIHByb2plY3RQYXRoKVxuICAgICAgfVxuICAgICAgZW1pdChlbWl0S2V5LCByZXNwb25zZSlcbiAgICB9IGNhdGNoICh3b3JrZXJFcnIpIHtcbiAgICAgIGVtaXQoYHdvcmtlckVycm9yOiR7ZW1pdEtleX1gLCB7XG4gICAgICAgIG1zZzogd29ya2VyRXJyLm1lc3NhZ2UsXG4gICAgICAgIHN0YWNrOiB3b3JrZXJFcnIuc3RhY2ssXG4gICAgICAgIG5hbWU6IHdvcmtlckVyci5uYW1lXG4gICAgICB9KVxuICAgIH1cbiAgfSlcbn1cbiJdfQ== \ No newline at end of file diff --git a/package.json b/package.json index 0c391f19..291b249c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "linter-eslint", "main": "./dist/main.js", - "version": "9.0.0", + "version": "9.0.1", "description": "Lint JavaScript on the fly, using ESLint (v7 or older)", "repository": "https://github.com/AtomLinter/linter-eslint.git", "license": "MIT",