Socket
Socket
Sign inDemoInstall

filestack-js

Package Overview
Dependencies
Maintainers
1
Versions
169
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

filestack-js - npm Package Compare versions

Comparing version 3.19.0 to 3.20.0

src/lib/request/.DS_Store

4

build/browser/manifest.json
{
"main.js": {
"src": "filestack.min.js",
"integrity": "sha256-1o1JI9Cu7dd8eAPKNmRcLFI34kWD93vHcYoY9MW+OGU= sha384-S1zn6gkOxtAaG/IYvJM4kFXEP5tPPTbWn+6+7tYMBwym+dQBkqbVu1zTXXVpdrV4 sha512-2Hn4YoAHlDYixqy7b8ZWNKZt3q5jPHEh0beManp1vhjSVL4gNZzQWoB9b7eyn9507+j8AZnopORb+FFUzKXOJA=="
"integrity": "sha256-OAe5hvOCsAFAIGzeheYY8yjZiA6Yegjzk41RZYJGTU8= sha384-+zvvSWeIiEyjBlqxxnoImyI8yU1UWnMKavnApmRfO5P8bHZRmSzQkcArPCnIXiFf sha512-+/BcnyKttZz6CJBzaXQxg6oP2fQ8SNWc1A0kgHi//FeUgY2KhN0tqUkArqj3QMeaq2I06NaDAmuo98vwHnxrqA=="
},
"main.js.map": {
"src": "filestack.min.js.map",
"integrity": "sha256-QjYEj7fCuYaWtL0ku4exPK6iWKcV8BWAmuVcjCR3iAM= sha384-Z0IcfD6U/Q4TNZpZ7baDvfgskxlBvedp5ar8PzsT9Bhf/ajyBQYwKNaQ/jIuk4Yx sha512-u1we4B7sFjsGRtGNy62J3zTMX7bHxFQRmLZXFwmmEOcCbDnAds6bUX/qIU2UXnrwLTb5y+J2REwajATIKAnRWA=="
"integrity": "sha256-j0qzlizRyp5og/g4bgVqt5+x1PoeOcdRYk240IUX3k0= sha384-gTMg7pzwxBmxXwSdk5NZWKS9FRBEkb2yXfJ+gFsFjJ8wcmPG18UsBzuwnrTx4RmV sha512-/1Cpjed7h8WsklRGXlz4+lUpGPsK/T+4EAJQvCqSzPNpKI9j9iN80Vn9TiijEcKjOs1KbPqS1YoELJtyYTbDEw=="
}
}

@@ -22,3 +22,3 @@ "use strict";

*/
var PICKER_VERSION = '1.19.0';
var PICKER_VERSION = '1.19.1';
exports.config = {

@@ -35,2 +35,2 @@ urls: {

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSDs7R0FFRztBQUNILElBQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQXNCbkIsUUFBQSxNQUFNLEdBQUc7SUFDcEIsSUFBSSxFQUFFO1FBQ0osVUFBVSxFQUFFLGtDQUFrQztRQUM5QyxVQUFVLEVBQUUsdUNBQXVDO1FBQ25ELFlBQVksRUFBRSxpQ0FBaUM7UUFDL0MsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxNQUFNLEVBQUUsa0NBQWtDO1FBQzFDLFNBQVMsRUFBRSw0Q0FBMEMsY0FBYyxlQUFZO0tBQ2hGO0NBQ0YsQ0FBQyIsImZpbGUiOiJjb25maWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFjay5cbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFBJQ0tFUl9WRVJTSU9OID0gJzEuMTkuMCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0cyB7XG4gIFt1cmw6IHN0cmluZ106IHN0cmluZztcbiAgZmlsZUFwaVVybDogc3RyaW5nO1xuICB1cGxvYWRBcGlVcmw6IHN0cmluZztcbiAgY2xvdWRBcGlVcmw6IHN0cmluZztcbiAgY2RuVXJsOiBzdHJpbmc7XG4gIHBpY2tlclVybDogc3RyaW5nO1xuICBwcm9jZXNzVXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICB1cmxzOiBIb3N0cztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IHtcbiAgdXJsczoge1xuICAgIHByb2Nlc3NVcmw6ICdodHRwczovL3Byb2Nlc3MuZmlsZXN0YWNrYXBpLmNvbScsXG4gICAgZmlsZUFwaVVybDogJ2h0dHBzOi8vd3d3LmZpbGVzdGFja2FwaS5jb20vYXBpL2ZpbGUnLFxuICAgIHVwbG9hZEFwaVVybDogJ2h0dHBzOi8vdXBsb2FkLmZpbGVzdGFja2FwaS5jb20nLFxuICAgIGNsb3VkQXBpVXJsOiAnaHR0cHM6Ly9jbG91ZC5maWxlc3RhY2thcGkuY29tJyxcbiAgICBjZG5Vcmw6ICdodHRwczovL2Nkbi5maWxlc3RhY2tjb250ZW50LmNvbScsXG4gICAgcGlja2VyVXJsOiBgaHR0cHM6Ly9zdGF0aWMuZmlsZXN0YWNrYXBpLmNvbS9waWNrZXIvJHtQSUNLRVJfVkVSU0lPTn0vcGlja2VyLmpzYCxcbiAgfSxcbn07XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSDs7R0FFRztBQUNILElBQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQztBQXNCbkIsUUFBQSxNQUFNLEdBQUc7SUFDcEIsSUFBSSxFQUFFO1FBQ0osVUFBVSxFQUFFLGtDQUFrQztRQUM5QyxVQUFVLEVBQUUsdUNBQXVDO1FBQ25ELFlBQVksRUFBRSxpQ0FBaUM7UUFDL0MsV0FBVyxFQUFFLGdDQUFnQztRQUM3QyxNQUFNLEVBQUUsa0NBQWtDO1FBQzFDLFNBQVMsRUFBRSw0Q0FBMEMsY0FBYyxlQUFZO0tBQ2hGO0NBQ0YsQ0FBQyIsImZpbGUiOiJjb25maWcuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFjay5cbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IFBJQ0tFUl9WRVJTSU9OID0gJzEuMTkuMSc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3N0cyB7XG4gIFt1cmw6IHN0cmluZ106IHN0cmluZztcbiAgZmlsZUFwaVVybDogc3RyaW5nO1xuICB1cGxvYWRBcGlVcmw6IHN0cmluZztcbiAgY2xvdWRBcGlVcmw6IHN0cmluZztcbiAgY2RuVXJsOiBzdHJpbmc7XG4gIHBpY2tlclVybDogc3RyaW5nO1xuICBwcm9jZXNzVXJsOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb25maWcge1xuICB1cmxzOiBIb3N0cztcbn1cblxuZXhwb3J0IGNvbnN0IGNvbmZpZyA9IHtcbiAgdXJsczoge1xuICAgIHByb2Nlc3NVcmw6ICdodHRwczovL3Byb2Nlc3MuZmlsZXN0YWNrYXBpLmNvbScsXG4gICAgZmlsZUFwaVVybDogJ2h0dHBzOi8vd3d3LmZpbGVzdGFja2FwaS5jb20vYXBpL2ZpbGUnLFxuICAgIHVwbG9hZEFwaVVybDogJ2h0dHBzOi8vdXBsb2FkLmZpbGVzdGFja2FwaS5jb20nLFxuICAgIGNsb3VkQXBpVXJsOiAnaHR0cHM6Ly9jbG91ZC5maWxlc3RhY2thcGkuY29tJyxcbiAgICBjZG5Vcmw6ICdodHRwczovL2Nkbi5maWxlc3RhY2tjb250ZW50LmNvbScsXG4gICAgcGlja2VyVXJsOiBgaHR0cHM6Ly9zdGF0aWMuZmlsZXN0YWNrYXBpLmNvbS9waWNrZXIvJHtQSUNLRVJfVkVSU0lPTn0vcGlja2VyLmpzYCxcbiAgfSxcbn07XG4iXX0=

@@ -26,3 +26,3 @@ import { SecurityOptions, getSecurity, validateWebhookSignature, WebhookValidatePayload } from './lib/api/security';

*/
export declare const version = "3.19.0";
export declare const version = "3.20.0";
export * from './lib/api/transform';

@@ -29,0 +29,0 @@ export * from './lib/filelink';

@@ -50,4 +50,4 @@ "use strict";

*/
exports.version = '3.19.0';
loader_1.registerModule(loader_1.FILESTACK_MODULES.FILESTACK_SDK, exports.Filestack, { version: '3.19.0' });
exports.version = '3.20.0';
loader_1.registerModule(loader_1.FILESTACK_MODULES.FILESTACK_SDK, exports.Filestack, { version: '3.20.0' });
tslib_1.__exportStar(require("./lib/api/transform"), exports);

@@ -54,0 +54,0 @@ tslib_1.__exportStar(require("./lib/filelink"), exports);

@@ -5,2 +5,3 @@ import { EventEmitter } from 'eventemitter3';

import { TransformOptions } from './api/transform';
import * as Utils from './utils';
import { InputFile, UploadOptions, StoreUploadOptions, UploadTags } from './api/upload';

@@ -71,2 +72,9 @@ import { PreviewOptions } from './api/preview';

private forwardErrors;
/**
* Returns filestack utils
*
* @readonly
* @memberof Client
*/
get utils(): typeof Utils;
constructor(apikey: string, options?: ClientOptions);

@@ -73,0 +81,0 @@ /**

@@ -27,3 +27,3 @@ "use strict";

var store_1 = require("./api/store");
var utils_1 = require("./utils");
var Utils = require("./utils");
var upload_1 = require("./api/upload");

@@ -64,3 +64,3 @@ var preview_1 = require("./api/preview");

scope.setTag('apikey', apikey);
scope.setTag('sdk-version', utils_1.getVersion());
scope.setTag('sdk-version', Utils.getVersion());
scope.setExtra('clientOptions', options);

@@ -82,2 +82,15 @@ });

}
Object.defineProperty(Client.prototype, "utils", {
/**
* Returns filestack utils
*
* @readonly
* @memberof Client
*/
get: function () {
return Utils;
},
enumerable: true,
configurable: true
});
/**

@@ -118,3 +131,3 @@ * Make basic prefetch request to check permissions

this.session.cname = cname;
this.session.urls = utils_1.resolveHost(this.session.urls, cname);
this.session.urls = Utils.resolveHost(this.session.urls, cname);
};

@@ -372,4 +385,4 @@ /**

Sentry.withScope(function (scope) {
scope.setExtras(e.details);
scope.setExtras({ uploadOptions: options, storeOptions: storeOptions });
scope.setExtras({ uploadOptions: options, storeOptions: storeOptions, details: e.details });
e.message = "FS-" + e.message;
Sentry.captureException(e);

@@ -439,2 +452,2 @@ });

//# sourceMappingURL=data:application/json;charset=utf8;base64,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RSxPQUF1QixFQUFFLFlBQWlDLEVBQUUsS0FBVyxFQUFFLFFBQW1CO1FBQTNILGlCQXlCQztRQXhCQyxJQUFJLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFL0MsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFaEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzlCO1FBRUQsMEJBQTBCO1FBQzFCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLFVBQUEsQ0FBQztZQUNsQixNQUFNLENBQUMsU0FBUyxDQUFDLFVBQUEsS0FBSztnQkFDcEIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzNCLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFlBQVksY0FBQSxFQUFFLENBQUMsQ0FBQztnQkFDMUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBRUgsS0FBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNILGFBQUM7QUFBRCxDQXRaQSxBQXNaQyxDQXRaMkIsNEJBQVksR0FzWnZDO0FBdFpZLHdCQUFNIiwiZmlsZSI6ImxpYi9jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvbWluaW1hbCc7XG5pbXBvcnQgeyBjb25maWcsIEhvc3RzIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IEZpbGVzdGFja0Vycm9yIH0gZnJvbSAnLi8uLi9maWxlc3RhY2tfZXJyb3InO1xuaW1wb3J0IHsgbWV0YWRhdGEsIE1ldGFkYXRhT3B0aW9ucywgcmVtb3ZlLCByZXRyaWV2ZSwgUmV0cmlldmVPcHRpb25zIH0gZnJvbSAnLi9hcGkvZmlsZSc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0sIFRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICcuL2FwaS90cmFuc2Zvcm0nO1xuaW1wb3J0IHsgc3RvcmVVUkwgfSBmcm9tICcuL2FwaS9zdG9yZSc7XG5pbXBvcnQgeyByZXNvbHZlSG9zdCwgZ2V0VmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVXBsb2FkLCBJbnB1dEZpbGUsIFVwbG9hZE9wdGlvbnMsIFN0b3JlVXBsb2FkT3B0aW9ucywgVXBsb2FkVGFncyB9IGZyb20gJy4vYXBpL3VwbG9hZCc7XG5pbXBvcnQgeyBwcmV2aWV3LCBQcmV2aWV3T3B0aW9ucyB9IGZyb20gJy4vYXBpL3ByZXZpZXcnO1xuaW1wb3J0IHsgQ2xvdWRDbGllbnQgfSBmcm9tICcuL2FwaS9jbG91ZCc7XG5pbXBvcnQgeyBQcmVmZXRjaCwgUHJlZmV0Y2hSZXNwb25zZSwgUHJlZmV0Y2hPcHRpb25zIH0gZnJvbSAnLi9hcGkvcHJlZmV0Y2gnO1xuaW1wb3J0IHsgU3RvcmVQYXJhbXMgfSBmcm9tICcuL2ZpbGVsaW5rJztcblxuaW1wb3J0IHsgcGlja2VyLCBQaWNrZXJJbnN0YW5jZSwgUGlja2VyT3B0aW9ucyB9IGZyb20gJy4vcGlja2VyJztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblNlbnRyeS5hZGRCcmVhZGNydW1iKHsgY2F0ZWdvcnk6ICdzZGsnLCBtZXNzYWdlOiAnZmlsZXN0YWNrLWpzLXNkayBzY29wZScgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbiB7XG4gIGFwaWtleTogc3RyaW5nO1xuICB1cmxzOiBIb3N0cztcbiAgY25hbWU/OiBzdHJpbmc7XG4gIHBvbGljeT86IHN0cmluZztcbiAgc2lnbmF0dXJlPzogc3RyaW5nO1xuICBwcmVmZXRjaD86IFByZWZldGNoUmVzcG9uc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHkge1xuICBwb2xpY3k6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50T3B0aW9ucyB7XG4gIFtvcHRpb246IHN0cmluZ106IGFueTtcbiAgLyoqXG4gICAqIFNlY3VyaXR5IG9iamVjdCB3aXRoIHBvbGljeSBhbmQgc2lnbmF0dXJlIGtleXMuXG4gICAqIENhbiBiZSB1c2VkIHRvIGxpbWl0IGNsaWVudCBjYXBhYmlsaXRpZXMgYW5kIHByb3RlY3QgcHVibGljIFVSTHMuXG4gICAqIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBzZXJ2ZXItc2lkZSBwb2xpY3kgYW5kIHNpZ25hdHVyZSBnZW5lcmF0aW9uLlxuICAgKiBSZWFkIGFib3V0IFtzZWN1cml0eSBwb2xpY2llc10oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2NvbmNlcHRzL3NlY3VyaXR5KS5cbiAgICovXG4gIHNlY3VyaXR5PzogU2VjdXJpdHk7XG4gIC8qKlxuICAgKiBEb21haW4gdG8gdXNlIGZvciBhbGwgVVJMcy4gX19SZXF1aXJlcyB0aGUgY3VzdG9tIENOQU1FIGFkZG9uX18uXG4gICAqIElmIHRoaXMgaXMgZW5hYmxlZCB0aGVuIHlvdSBtdXN0IGFsc28gc2V0IHVwIHlvdXIgb3duIE9BdXRoIGFwcGxpY2F0aW9uc1xuICAgKiBmb3IgZWFjaCBjbG91ZCBzb3VyY2UgeW91IHdpc2ggdG8gdXNlIGluIHRoZSBwaWNrZXIuXG4gICAqL1xuICBjbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIGNhY2hpbmcgb2YgdGhlIGNsb3VkIHNlc3Npb24gdG9rZW4uIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqIFRoaXMgZW5zdXJlcyB0aGF0IHVzZXJzIHdpbGwgYmUgcmVtZW1iZXJlZCBvbiB5b3VyIGRvbWFpbiB3aGVuIGNhbGxpbmcgdGhlIGNsb3VkIEFQSSBmcm9tIHRoZSBicm93c2VyLlxuICAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0b2tlbnMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZSBhcmUgYWNjZXNzaWJsZSBieSBvdGhlciBzY3JpcHRzIG9uIHRoZSBzYW1lIGRvbWFpbi5cbiAgICovXG4gIHNlc3Npb25DYWNoZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBmb3J3YXJkaW5nIGVycm9yIGxvZ3MgdG8gc2VudHJ5XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb3J3YXJkRXJyb3JzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgRmlsZXN0YWNrIGNsaWVudCwgdGhlIGVudHJ5IHBvaW50IGZvciBhbGwgcHVibGljIG1ldGhvZHMuIEVuY2Fwc3VsYXRlcyBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICpcbiAqICMjIyBFeGFtcGxlXG4gKiBgYGBqc1xuICogLy8gRVMgbW9kdWxlXG4gKiBpbXBvcnQgKiBhcyBmaWxlc3RhY2sgZnJvbSAnZmlsZXN0YWNrLWpzJztcbiAqIGNvbnN0IGNsaWVudCA9IGZpbGVzdGFjay5pbml0KCdhcGlrZXknKTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBVTUQgbW9kdWxlIGluIGJyb3dzZXJcbiAqIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9zdGF0aWMuZmlsZXN0YWNrYXBpLmNvbS9maWxlc3RhY2stanMvMy54LngvZmlsZXN0YWNrLm1pbi5qc1wiPjwvc2NyaXB0PlxuICogY29uc3QgY2xpZW50ID0gZmlsZXN0YWNrLmluaXQoJ2FwaWtleScpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBwdWJsaWMgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgcHJpdmF0ZSBjbG91ZDogQ2xvdWRDbGllbnQ7XG4gIHByaXZhdGUgcHJlZmV0Y2hJbnN0YW5jZTogUHJlZmV0Y2g7XG5cbiAgcHJpdmF0ZSBmb3J3YXJkRXJyb3JzOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihhcGlrZXk6IHN0cmluZywgb3B0aW9ucz86IENsaWVudE9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5mb3J3YXJkRXJyb3JzKSB7XG4gICAgICB0aGlzLmZvcndhcmRFcnJvcnMgPSBvcHRpb25zLmZvcndhcmRFcnJvcnM7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBTZW50cnkuY29uZmlndXJlU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgc2NvcGUuc2V0VGFnKCdhcGlrZXknLCBhcGlrZXkpO1xuICAgICAgc2NvcGUuc2V0VGFnKCdzZGstdmVyc2lvbicsIGdldFZlcnNpb24oKSk7XG4gICAgICBzY29wZS5zZXRFeHRyYSgnY2xpZW50T3B0aW9ucycsIG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFhcGlrZXkgfHwgdHlwZW9mIGFwaWtleSAhPT0gJ3N0cmluZycgfHwgYXBpa2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBhcGlrZXkgaXMgcmVxdWlyZWQgdG8gaW5pdGlhbGl6ZSB0aGUgRmlsZXN0YWNrIGNsaWVudCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHVybHMgfSA9IGNvbmZpZztcbiAgICB0aGlzLnNlc3Npb24gPSB7IGFwaWtleSwgdXJscyB9O1xuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgY25hbWUsIHNlY3VyaXR5IH0gPSBvcHRpb25zO1xuXG4gICAgICB0aGlzLnNldFNlY3VyaXR5KHNlY3VyaXR5KTtcbiAgICAgIHRoaXMuc2V0Q25hbWUoY25hbWUpO1xuICAgIH1cblxuICAgIHRoaXMucHJlZmV0Y2hJbnN0YW5jZSA9IG5ldyBQcmVmZXRjaCh0aGlzLnNlc3Npb24pO1xuICAgIHRoaXMuY2xvdWQgPSBuZXcgQ2xvdWRDbGllbnQodGhpcy5zZXNzaW9uLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGJhc2ljIHByZWZldGNoIHJlcXVlc3QgdG8gY2hlY2sgcGVybWlzc2lvbnNcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHJlZmV0Y2gocGFyYW1zOiBQcmVmZXRjaE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVmZXRjaEluc3RhbmNlLmdldENvbmZpZyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBzZWN1cml0eSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtTZWN1cml0eX0gc2VjdXJpdHlcbiAgICogQG1lbWJlcm9mIENsaWVudFxuICAgKi9cbiAgc2V0U2VjdXJpdHkoc2VjdXJpdHk6IFNlY3VyaXR5KSB7XG4gICAgaWYgKHNlY3VyaXR5ICYmICEoc2VjdXJpdHkucG9saWN5ICYmIHNlY3VyaXR5LnNpZ25hdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBGaWxlc3RhY2tFcnJvcignQm90aCBwb2xpY3kgYW5kIHNpZ25hdHVyZSBhcmUgcmVxdWlyZWQgZm9yIGNsaWVudCBzZWN1cml0eScpO1xuICAgIH1cblxuICAgIGlmIChzZWN1cml0eSAmJiBzZWN1cml0eS5wb2xpY3kgJiYgc2VjdXJpdHkuc2lnbmF0dXJlKSB7XG4gICAgICB0aGlzLnNlc3Npb24ucG9saWN5ID0gc2VjdXJpdHkucG9saWN5O1xuICAgICAgdGhpcy5zZXNzaW9uLnNpZ25hdHVyZSA9IHNlY3VyaXR5LnNpZ25hdHVyZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGN1c3RvbSBjbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY25hbWVcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIENsaWVudFxuICAgKi9cbiAgc2V0Q25hbWUoY25hbWU6IHN0cmluZykge1xuICAgIGlmICghY25hbWUgfHwgY25hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXNzaW9uLmNuYW1lID0gY25hbWU7XG4gICAgdGhpcy5zZXNzaW9uLnVybHMgPSByZXNvbHZlSG9zdCh0aGlzLnNlc3Npb24udXJscywgY25hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjdXJyZW50IGNsb3VkIHNlc3Npb25zIGluIHRoZSBwaWNrZXIuXG4gICAqIE9wdGlvbmFsbHkgcGFzcyBhIGNsb3VkIHNvdXJjZSBuYW1lIHRvIG9ubHkgbG9nIG91dCBvZiB0aGF0IGNsb3VkIHNvdXJjZS5cbiAgICogVGhpcyBlc3NlbnRpYWxseSBjbGVhcnMgdGhlIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZXMgZnJvbSB0aGUgRmlsZXN0YWNrIHNlc3Npb24uXG4gICAqIEBwYXJhbSBuYW1lIE9wdGlvbmFsIGNsb3VkIHNvdXJjZSBuYW1lLlxuICAgKi9cbiAgbG9nb3V0KG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jbG91ZC5sb2dvdXQobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRldGFpbGVkIGRhdGEgb2Ygc3RvcmVkIGZpbGVzLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGllbnRcbiAgICogICAubWV0YWRhdGEoJ0RDTDVLNDZGUzNPSXhiNWl1S2J5JylcbiAgICogICAudGhlbigocmVzKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgKiAgIH0pXG4gICAqICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAqICAgfSkpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBNZXRhZGF0YV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI21ldGFkYXRhKS5cbiAgICogQHBhcmFtIGhhbmRsZSBWYWxpZCBGaWxlc3RhY2sgaGFuZGxlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBNZXRhZGF0YSBmaWVsZHMgdG8gZW5hYmxlIG9uIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gc2VjdXJpdHkgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqL1xuICBtZXRhZGF0YShoYW5kbGU6IHN0cmluZywgb3B0aW9ucz86IE1ldGFkYXRhT3B0aW9ucywgc2VjdXJpdHk/OiBTZWN1cml0eSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIG1ldGFkYXRhKHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCBvcHRpb25zLCBzZWN1cml0eSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBwaWNrZXIgaW5zdGFuY2UuXG4gICAqL1xuICBwaWNrZXIob3B0aW9ucz86IFBpY2tlck9wdGlvbnMpOiBQaWNrZXJJbnN0YW5jZSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gcGlja2VyKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBVc2VkIGZvciB2aWV3aW5nIGZpbGVzIHZpYSBGaWxlc3RhY2sgaGFuZGxlcyBvciBzdG9yYWdlIGFsaWFzZXMsIF9fcmVxdWlyZXMgRG9jdW1lbnQgVmlld2VyIGFkZG9uIHRvIHlvdXIgRmlsZXN0YWNrIGFwcGxpY2F0aW9uX18uXG4gICAqIE9wZW5zIGRvY3VtZW50IHZpZXdlciBpbiBuZXcgd2luZG93IGlmIGlkIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIDxkaXYgaWQ9XCJwcmV2aWV3XCI+PC9kaXY+XG4gICAqXG4gICAqIGNsaWVudC5wcmV2aWV3KCdEQ0w1SzQ2RlMzT0l4YjVpdUtieScsIHsgaWQ6ICdwcmV2aWV3JyB9KTtcbiAgICogYGBgXG4gICAqIEBwYXJhbSBoYW5kbGUgVmFsaWQgRmlsZXN0YWNrIGhhbmRsZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgUHJldmlldyBvcHRpb25zXG4gICAqL1xuICBwcmV2aWV3KGhhbmRsZTogc3RyaW5nLCBvcHRpb25zPzogUHJldmlld09wdGlvbnMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBwcmV2aWV3KHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCBvcHRpb25zKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgZmlsZSBmcm9tIHN0b3JhZ2UgYW5kIHRoZSBGaWxlc3RhY2sgc3lzdGVtLlxuICAgKlxuICAgKiBfX1JlcXVpcmVzIGEgdmFsaWQgc2VjdXJpdHkgcG9saWN5IGFuZCBzaWduYXR1cmVfXy4gVGhlIHBvbGljeSBhbmQgc2lnbmF0dXJlIHdpbGwgYmUgcHVsbGVkIGZyb20gdGhlIGNsaWVudCBzZXNzaW9uLCBvciBpdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBzZWN1cml0eSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudFxuICAgKiAgIC5yZW1vdmUoJ0RDTDVLNDZGUzNPSXhiNWl1S2J5JylcbiAgICogICAudGhlbigocmVzKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgKiAgIH0pXG4gICAqICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAqICAgfSkpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBEZWxldGVdKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvZmlsZSNkZWxldGUpXG4gICAqIEBwYXJhbSBoYW5kbGUgVmFsaWQgRmlsZXN0YWNrIGhhbmRsZS5cbiAgICogQHBhcmFtIHNlY3VyaXR5IE9wdGlvbmFsIHNlY3VyaXR5IG92ZXJyaWRlLlxuICAgKi9cbiAgcmVtb3ZlKGhhbmRsZTogc3RyaW5nLCBzZWN1cml0eT86IFNlY3VyaXR5KTogUHJvbWlzZTxhbnk+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiByZW1vdmUodGhpcy5zZXNzaW9uLCBoYW5kbGUsIGZhbHNlLCBzZWN1cml0eSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGZpbGUgKipvbmx5KiogZnJvbSB0aGUgRmlsZXN0YWNrIHN5c3RlbS4gVGhlIGZpbGUgcmVtYWlucyBpbiBzdG9yYWdlLlxuICAgKlxuICAgKiBfX1JlcXVpcmVzIGEgdmFsaWQgc2VjdXJpdHkgcG9saWN5IGFuZCBzaWduYXR1cmVfXy4gVGhlIHBvbGljeSBhbmQgc2lnbmF0dXJlIHdpbGwgYmUgcHVsbGVkIGZyb20gdGhlIGNsaWVudCBzZXNzaW9uLCBvciBpdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBzZWN1cml0eSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudFxuICAgKiAgIC5yZW1vdmVNZXRhZGF0YSgnRENMNUs0NkZTM09JeGI1aXVLYnknKVxuICAgKiAgIC50aGVuKChyZXMpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAqICAgfSlcbiAgICogICAuY2F0Y2goKGVycikgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICogICB9KSk7XG4gICAqIGBgYFxuICAgKiBAc2VlIFtGaWxlIEFQSSAtIERlbGV0ZV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI2RlbGV0ZSlcbiAgICogQHBhcmFtIGhhbmRsZSBWYWxpZCBGaWxlc3RhY2sgaGFuZGxlLlxuICAgKiBAcGFyYW0gc2VjdXJpdHkgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqL1xuICByZW1vdmVNZXRhZGF0YShoYW5kbGU6IHN0cmluZywgc2VjdXJpdHk/OiBTZWN1cml0eSk6IFByb21pc2U8YW55PiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gcmVtb3ZlKHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCB0cnVlLCBzZWN1cml0eSk7XG4gIH1cbiAgLyoqXG4gICAqIFN0b3JlIGEgZmlsZSBmcm9tIGl0cyBVUkwuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudFxuICAgKiAgIC5zdG9yZVVSTCgnaHR0cHM6Ly9kMXd0cWFmZmFhajYzei5jbG91ZGZyb250Lm5ldC9pbWFnZXMvTllfMTk5X0Vfb2ZfSGFtbWVydG93bl8yMDE0LmpwZycpXG4gICAqICAgLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBTdG9yZV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI3N0b3JlKVxuICAgKiBAcGFyYW0gdXJsICAgICAgIFZhbGlkIFVSTCB0byBhIGZpbGUuXG4gICAqIEBwYXJhbSBvcHRpb25zICAgQ29uZmlndXJlIGZpbGUgc3RvcmFnZS5cbiAgICogQHBhcmFtIHRva2VuICAgICBPcHRpb25hbCBjb250cm9sIHRva2VuIHRvIGNhbGwgLmNhbmNlbCgpXG4gICAqIEBwYXJhbSBzZWN1cml0eSAgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSB1cGxvYWRUYWdzIE9wdGlvbmFsIHRhZ3MgdmlzaWJsZSBpbiB3ZWJob29rcy5cbiAgICogQHBhcmFtIGhlYWRlcnMgICAgT3B0aW9uYWwgaGVhZGVycyB0byBzZW5kXG4gICAqL1xuICBzdG9yZVVSTCh1cmw6IHN0cmluZywgc3RvcmVQYXJhbXM/OiBTdG9yZVBhcmFtcywgdG9rZW4/OiBhbnksIHNlY3VyaXR5PzogU2VjdXJpdHksIHVwbG9hZFRhZ3M/OiBVcGxvYWRUYWdzLCBoZWFkZXJzPzoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBQcm9taXNlPE9iamVjdD4ge1xuICAgIHJldHVybiBzdG9yZVVSTCh7XG4gICAgICBzZXNzaW9uOiB0aGlzLnNlc3Npb24sXG4gICAgICB1cmwsXG4gICAgICBzdG9yZVBhcmFtcyxcbiAgICAgIHRva2VuLFxuICAgICAgc2VjdXJpdHksXG4gICAgICB1cGxvYWRUYWdzLFxuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3MgZmlsZXMgdmlhIHRoZWlyIEZpbGVzdGFjayBoYW5kbGVzLlxuICAgKlxuICAgKiBJZiBoZWFkIG9wdGlvbiBpcyBwcm92aWRlZCAtIHJlcXVlc3QgaGVhZGVycyBhcmUgcmV0dXJuZWQgaW4gcHJvbWlzZVxuICAgKiBJZiBtZXRhZGF0YSBvcHRpb24gaXMgcHJvdmlkZWQgLSBtZXRhZGF0YSBvYmplY3QgaXMgcmV0dXJuZWQgaW4gcHJvbWlzZVxuICAgKiBPdGhlcndpc2UgZmlsZSBibG9iIGlzIHJldHVybmVkXG4gICAqIE1ldGFkYXRhIGFuZCBoZWFkIG9wdGlvbnMgY2Fubm90IGJlIG1peGVkXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudC5yZXRyaWV2ZSgnZmlsZUhhbmRsZScsIHtcbiAgICogIG1ldGFkYXRhOiB0cnVlLFxuICAgKiB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgKiAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgKiB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAqICBjb25zb2xlLmVycm9yKGVycik7XG4gICAqIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2VlIFtGaWxlIEFQSSAtIERvd25sb2FkXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL2ZpbGUjZG93bmxvYWQpXG4gICAqIEBwYXJhbSBoYW5kbGUgICAgVmFsaWQgZmlsZSBoYW5kbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgICBSZXRyaWV2ZU9wdGlvbnNcbiAgICogQHBhcmFtIHNlY3VyaXR5ICBPcHRpb25hbCBzZWN1cml0eSBvdmVycmlkZS5cbiAgICogQHRocm93cyAgICAgICAgICBFcnJvclxuICAgKi9cbiAgcmV0cmlldmUoaGFuZGxlOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXRyaWV2ZU9wdGlvbnMsIHNlY3VyaXR5PzogU2VjdXJpdHkpOiBQcm9taXNlPE9iamVjdCB8IEJsb2I+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiByZXRyaWV2ZSh0aGlzLnNlc3Npb24sIGhhbmRsZSwgb3B0aW9ucywgc2VjdXJpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVyZmFjZSB0byB0aGUgRmlsZXN0YWNrIFtQcm9jZXNzaW5nIEFQSV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9wcm9jZXNzaW5nKS5cbiAgICogQ29udmVydCBhIFVSTCwgaGFuZGxlLCBvciBzdG9yYWdlIGFsaWFzIHRvIGFub3RoZXIgVVJMIHdoaWNoIGxpbmtzIHRvIHRoZSB0cmFuc2Zvcm1lZCBmaWxlLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3RvcmUgdGhlIHJldHVybmVkIFVSTCB3aXRoIGNsaWVudC5zdG9yZVVSTC5cbiAgICpcbiAgICogVHJhbnNmb3JtIHBhcmFtcyBjYW4gYmUgcHJvdmlkZWQgaW4gY2FtZWxDYXNlIG9yIHNuYWtlQ2FzZSBzdHlsZSBpZTogcGFydGlhbF9waXhlbGF0ZSBvciBwYXJ0aWFsUGl4ZWxhdGVcbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgdHJhbnNmb3JtZWRVcmwgPSBjbGllbnQudHJhbnNmb3JtKHVybCwge1xuICAgKiAgIGNyb3A6IHtcbiAgICogICAgIGRpbTogW3gsIHksIHdpZHRoLCBoZWlnaHRdLFxuICAgKiAgIH0sXG4gICAqICAgdmlnbmV0dGU6IHtcbiAgICogICAgIGJsdXJtb2RlOiAnZ2F1c3NpYW4nLFxuICAgKiAgICAgYW1vdW50OiA1MCxcbiAgICogICB9LFxuICAgKiAgIGZsaXA6IHRydWUsXG4gICAqICAgcGFydGlhbF9waXhlbGF0ZToge1xuICAgKiAgICAgb2JqZWN0czogW1sxMCwgMjAsIDIwMCwgMjUwXSwgWzI3NSwgOTEsIDUwMCwgNTU3XV0sXG4gICAqICAgfSxcbiAgICogfTtcbiAgICpcbiAgICogLy8gb3B0aW9uYWxseSBzdG9yZSB0aGUgbmV3IFVSTFxuICAgKiBjbGllbnQuc3RvcmVVUkwodHJhbnNmb3JtZWRVcmwpLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZXN0YWNrIFByb2Nlc3NpbmcgQVBJXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL3Byb2Nlc3NpbmcpXG4gICAqIEBwYXJhbSB1cmwgICAgIFNpbmdsZSBvciBtdWx0aXBsZSB2YWxpZCBVUkxzIChodHRwKHMpOi8vKSwgZmlsZSBoYW5kbGVzLCBvciBzdG9yYWdlIGFsaWFzZXMgKHNyYzovLykgdG8gYW4gaW1hZ2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRyYW5zZm9ybWF0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHRoaXMgb2JqZWN0LlxuICAgKiBAcGFyYW0gYjY0ICAgICBVc2UgbmV3IG1vcmUgc2FmZSBmb3JtYXQgZm9yIGdlbmVyYXRpbmcgdHJhbnNmb3JtcyB1cmwgKGRlZmF1bHQ9ZmFsc2UpIE5vdGU6IElmIHRoZXJlIHdpbGwgYmUgYW55IGlzc3VlcyB3aXRoIHVybCBwbGVhc2UgdGVzdCBpdCB3aXRoIGVuYWJsZWQgYjY0IHN1cHBvcnRcbiAgICogQHJldHVybnMgICAgICAgQSBuZXcgVVJMIHRoYXQgcG9pbnRzIHRvIHRoZSB0cmFuc2Zvcm1lZCByZXNvdXJjZS5cbiAgICovXG4gIHRyYW5zZm9ybSh1cmw6IHN0cmluZyB8IHN0cmluZ1tdLCBvcHRpb25zOiBUcmFuc2Zvcm1PcHRpb25zLCBiNjQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRyYW5zZm9ybSh0aGlzLnNlc3Npb24sIHVybCwgb3B0aW9ucywgYjY0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSBtdWx0aS1wYXJ0IHVwbG9hZCBmbG93LiBVc2UgdGhpcyBmb3IgRmlsZXN0YWNrIENJTiBhbmQgRklJIHVwbG9hZHMuXG4gICAqXG4gICAqIEluIE5vZGUgcnVudGltZXMgdGhlIGZpbGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aC5cbiAgICogVXBsb2FkaW5nIGZyb20gYSBOb2RlIGJ1ZmZlciBpcyBub3QgeWV0IGltcGxlbWVudGVkLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCB0b2tlbiA9IHt9O1xuICAgKiBjb25zdCBvblJldHJ5ID0gKG9iaikgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKGBSZXRyeWluZyAke29iai5sb2NhdGlvbn0gZm9yICR7b2JqLmZpbGVuYW1lfS4gQXR0ZW1wdCAke29iai5hdHRlbXB0fSBvZiAxMC5gKTtcbiAgICogfTtcbiAgICpcbiAgICogY2xpZW50LnVwbG9hZChmaWxlLCB7IG9uUmV0cnkgfSwgeyBmaWxlbmFtZTogJ2Zvb2Jhci5qcGcnIH0sIHRva2VuKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICpcbiAgICogY2xpZW50LnVwbG9hZCh7ZmlsZSwgbmFtZX0sIHsgb25SZXRyeSB9LCB7IGZpbGVuYW1lOiAnZm9vYmFyLmpwZycgfSwgdG9rZW4pXG4gICAqICAgLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKlxuICAgKiB0b2tlbi5wYXVzZSgpOyAgLy8gUGF1c2UgZmxvd1xuICAgKiB0b2tlbi5yZXN1bWUoKTsgLy8gUmVzdW1lIGZsb3dcbiAgICogdG9rZW4uY2FuY2VsKCk7IC8vIENhbmNlbCBmbG93IChyZWplY3RzKVxuICAgKiBgYGBcbiAgICogQHBhcmFtIHtJbnB1dEZpbGV9ICAgIGZpbGUgICAgICAgICAgIE11c3QgYmUgYSB2YWxpZCBbRmlsZSB8IEJsb2IgfCBCdWZmZXIgfCBzdHJpbmddXG4gICAqIEBwYXJhbSB1cGxvYWRPcHRpb25zICBVcGxvYWRlciBvcHRpb25zLlxuICAgKiBAcGFyYW0gc3RvcmVPcHRpb25zICAgU3RvcmFnZSBvcHRpb25zLlxuICAgKiBAcGFyYW0gdG9rZW4gICAgICAgICAgQSBjb250cm9sIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FsbCBjYW5jZWwoKSwgcGF1c2UoKSwgYW5kIHJlc3VtZSgpLlxuICAgKiBAcGFyYW0gc2VjdXJpdHkgICAgICAgT3B0aW9uYWwgc2VjdXJpdHkgcG9saWN5IGFuZCBzaWduYXR1cmUgb3ZlcnJpZGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgdXBsb2FkKGZpbGU6IElucHV0RmlsZSwgb3B0aW9ucz86IFVwbG9hZE9wdGlvbnMsIHN0b3JlT3B0aW9ucz86IFN0b3JlVXBsb2FkT3B0aW9ucywgdG9rZW4/OiBhbnksIHNlY3VyaXR5PzogU2VjdXJpdHkpIHtcbiAgICBsZXQgdXBsb2FkID0gbmV3IFVwbG9hZChvcHRpb25zLCBzdG9yZU9wdGlvbnMpO1xuICAgIHVwbG9hZC5zZXRTZXNzaW9uKHRoaXMuc2Vzc2lvbik7XG5cbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIHVwbG9hZC5zZXRUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKHNlY3VyaXR5KSB7XG4gICAgICB1cGxvYWQuc2V0U2VjdXJpdHkoc2VjdXJpdHkpO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdXBsb2FkLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9yd2FyZEVycm9ycykge1xuICAgICAgICBTZW50cnkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgICBzY29wZS5zZXRFeHRyYXMoZS5kZXRhaWxzKTtcbiAgICAgICAgICBzY29wZS5zZXRFeHRyYXMoeyB1cGxvYWRPcHRpb25zOiBvcHRpb25zLCBzdG9yZU9wdGlvbnMgfSk7XG4gICAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVtaXQoJ3VwbG9hZC5lcnJvcicsIGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwbG9hZC51cGxvYWQoZmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgbXVsdGktcGFydCB1cGxvYWQgZmxvdy4gVXNlIHRoaXMgZm9yIEZpbGVzdGFjayBDSU4gYW5kIEZJSSB1cGxvYWRzLlxuICAgKlxuICAgKiBJbiBOb2RlIHJ1bnRpbWVzIHRoZSBmaWxlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlIHBhdGguXG4gICAqIFVwbG9hZGluZyBmcm9tIGEgTm9kZSBidWZmZXIgaXMgbm90IHlldCBpbXBsZW1lbnRlZC5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgdG9rZW4gPSB7fTtcbiAgICogY29uc3Qgb25SZXRyeSA9IChvYmopID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhgUmV0cnlpbmcgJHtvYmoubG9jYXRpb259IGZvciAke29iai5maWxlbmFtZX0uIEF0dGVtcHQgJHtvYmouYXR0ZW1wdH0gb2YgMTAuYCk7XG4gICAqIH07XG4gICAqXG4gICAqIGNsaWVudC5tdWx0aXVwbG9hZChbZmlsZV0sIHsgb25SZXRyeSB9LCB0b2tlbilcbiAgICogICAudGhlbihyZXMgPT4gY29uc29sZS5sb2cocmVzKSk7XG4gICAqXG4gICAqIGNsaWVudC5tdWx0aXVwbG9hZChbe2ZpbGUsIG5hbWV9XSwgeyBvblJldHJ5IH0sIHRva2VuKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICpcbiAgICogdG9rZW4ucGF1c2UoKTsgIC8vIFBhdXNlIGZsb3dcbiAgICogdG9rZW4ucmVzdW1lKCk7IC8vIFJlc3VtZSBmbG93XG4gICAqIHRva2VuLmNhbmNlbCgpOyAvLyBDYW5jZWwgZmxvdyAocmVqZWN0cylcbiAgICogYGBgXG4gICAqIEBwYXJhbSB7SW5wdXRGaWxlW119ICBmaWxlICAgICAgICAgICBNdXN0IGJlIGEgdmFsaWQgW0ZpbGUgfCBCbG9iIHwgQnVmZmVyIHwgc3RyaW5nIChiYXNlNjQpXVxuICAgKiBAcGFyYW0gdXBsb2FkT3B0aW9ucyAgVXBsb2FkIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBzdG9yZU9wdGlvbnMgICBTdG9yYWdlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB0b2tlbiAgICAgICAgICBBIGNvbnRyb2wgdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBjYWxsIGNhbmNlbCgpLCBwYXVzZSgpLCBhbmQgcmVzdW1lKCkuXG4gICAqIEBwYXJhbSBzZWN1cml0eSAgICAgICBPcHRpb25hbCBzZWN1cml0eSBwb2xpY3kgYW5kIHNpZ25hdHVyZSBvdmVycmlkZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBtdWx0aXVwbG9hZChmaWxlOiBJbnB1dEZpbGVbXSwgb3B0aW9ucz86IFVwbG9hZE9wdGlvbnMsIHN0b3JlT3B0aW9ucz86IFN0b3JlVXBsb2FkT3B0aW9ucywgdG9rZW4/OiBhbnksIHNlY3VyaXR5PzogU2VjdXJpdHkpIHtcbiAgICBsZXQgdXBsb2FkID0gbmV3IFVwbG9hZChvcHRpb25zLCBzdG9yZU9wdGlvbnMpO1xuXG4gICAgdXBsb2FkLnNldFNlc3Npb24odGhpcy5zZXNzaW9uKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgdXBsb2FkLnNldFRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoc2VjdXJpdHkpIHtcbiAgICAgIHVwbG9hZC5zZXRTZWN1cml0eShzZWN1cml0eSk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB1cGxvYWQub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICBTZW50cnkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgc2NvcGUuc2V0RXh0cmFzKGUuZGV0YWlscyk7XG4gICAgICAgIHNjb3BlLnNldEV4dHJhcyh7IHVwbG9hZE9wdGlvbnM6IG9wdGlvbnMsIHN0b3JlT3B0aW9ucyB9KTtcbiAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5lbWl0KCd1cGxvYWQuZXJyb3InLCBlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB1cGxvYWQubXVsdGl1cGxvYWQoZmlsZSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,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bGUiOiJsaWIvY2xpZW50LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdldmVudGVtaXR0ZXIzJztcbmltcG9ydCAqIGFzIFNlbnRyeSBmcm9tICdAc2VudHJ5L21pbmltYWwnO1xuaW1wb3J0IHsgY29uZmlnLCBIb3N0cyB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBGaWxlc3RhY2tFcnJvciB9IGZyb20gJy4vLi4vZmlsZXN0YWNrX2Vycm9yJztcbmltcG9ydCB7IG1ldGFkYXRhLCBNZXRhZGF0YU9wdGlvbnMsIHJlbW92ZSwgcmV0cmlldmUsIFJldHJpZXZlT3B0aW9ucyB9IGZyb20gJy4vYXBpL2ZpbGUnO1xuaW1wb3J0IHsgdHJhbnNmb3JtLCBUcmFuc2Zvcm1PcHRpb25zIH0gZnJvbSAnLi9hcGkvdHJhbnNmb3JtJztcbmltcG9ydCB7IHN0b3JlVVJMIH0gZnJvbSAnLi9hcGkvc3RvcmUnO1xuaW1wb3J0ICogYXMgVXRpbHMgZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBVcGxvYWQsIElucHV0RmlsZSwgVXBsb2FkT3B0aW9ucywgU3RvcmVVcGxvYWRPcHRpb25zLCBVcGxvYWRUYWdzIH0gZnJvbSAnLi9hcGkvdXBsb2FkJztcbmltcG9ydCB7IHByZXZpZXcsIFByZXZpZXdPcHRpb25zIH0gZnJvbSAnLi9hcGkvcHJldmlldyc7XG5pbXBvcnQgeyBDbG91ZENsaWVudCB9IGZyb20gJy4vYXBpL2Nsb3VkJztcbmltcG9ydCB7IFByZWZldGNoLCBQcmVmZXRjaFJlc3BvbnNlLCBQcmVmZXRjaE9wdGlvbnMgfSBmcm9tICcuL2FwaS9wcmVmZXRjaCc7XG5pbXBvcnQgeyBTdG9yZVBhcmFtcyB9IGZyb20gJy4vZmlsZWxpbmsnO1xuXG5pbXBvcnQgeyBwaWNrZXIsIFBpY2tlckluc3RhbmNlLCBQaWNrZXJPcHRpb25zIH0gZnJvbSAnLi9waWNrZXInO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuU2VudHJ5LmFkZEJyZWFkY3J1bWIoeyBjYXRlZ29yeTogJ3NkaycsIG1lc3NhZ2U6ICdmaWxlc3RhY2stanMtc2RrIHNjb3BlJyB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uIHtcbiAgYXBpa2V5OiBzdHJpbmc7XG4gIHVybHM6IEhvc3RzO1xuICBjbmFtZT86IHN0cmluZztcbiAgcG9saWN5Pzogc3RyaW5nO1xuICBzaWduYXR1cmU/OiBzdHJpbmc7XG4gIHByZWZldGNoPzogUHJlZmV0Y2hSZXNwb25zZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eSB7XG4gIHBvbGljeTogc3RyaW5nO1xuICBzaWduYXR1cmU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDbGllbnRPcHRpb25zIHtcbiAgW29wdGlvbjogc3RyaW5nXTogYW55O1xuICAvKipcbiAgICogU2VjdXJpdHkgb2JqZWN0IHdpdGggcG9saWN5IGFuZCBzaWduYXR1cmUga2V5cy5cbiAgICogQ2FuIGJlIHVzZWQgdG8gbGltaXQgY2xpZW50IGNhcGFiaWxpdGllcyBhbmQgcHJvdGVjdCBwdWJsaWMgVVJMcy5cbiAgICogSXQgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHNlcnZlci1zaWRlIHBvbGljeSBhbmQgc2lnbmF0dXJlIGdlbmVyYXRpb24uXG4gICAqIFJlYWQgYWJvdXQgW3NlY3VyaXR5IHBvbGljaWVzXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvY29uY2VwdHMvc2VjdXJpdHkpLlxuICAgKi9cbiAgc2VjdXJpdHk/OiBTZWN1cml0eTtcbiAgLyoqXG4gICAqIERvbWFpbiB0byB1c2UgZm9yIGFsbCBVUkxzLiBfX1JlcXVpcmVzIHRoZSBjdXN0b20gQ05BTUUgYWRkb25fXy5cbiAgICogSWYgdGhpcyBpcyBlbmFibGVkIHRoZW4geW91IG11c3QgYWxzbyBzZXQgdXAgeW91ciBvd24gT0F1dGggYXBwbGljYXRpb25zXG4gICAqIGZvciBlYWNoIGNsb3VkIHNvdXJjZSB5b3Ugd2lzaCB0byB1c2UgaW4gdGhlIHBpY2tlci5cbiAgICovXG4gIGNuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogRW5hYmxlL2Rpc2FibGUgY2FjaGluZyBvZiB0aGUgY2xvdWQgc2Vzc2lvbiB0b2tlbi4gRGVmYXVsdCBpcyBmYWxzZS5cbiAgICogVGhpcyBlbnN1cmVzIHRoYXQgdXNlcnMgd2lsbCBiZSByZW1lbWJlcmVkIG9uIHlvdXIgZG9tYWluIHdoZW4gY2FsbGluZyB0aGUgY2xvdWQgQVBJIGZyb20gdGhlIGJyb3dzZXIuXG4gICAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHRva2VucyBzdG9yZWQgaW4gbG9jYWxTdG9yYWdlIGFyZSBhY2Nlc3NpYmxlIGJ5IG90aGVyIHNjcmlwdHMgb24gdGhlIHNhbWUgZG9tYWluLlxuICAgKi9cbiAgc2Vzc2lvbkNhY2hlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIGZvcndhcmRpbmcgZXJyb3IgbG9ncyB0byBzZW50cnlcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZvcndhcmRFcnJvcnM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBGaWxlc3RhY2sgY2xpZW50LCB0aGUgZW50cnkgcG9pbnQgZm9yIGFsbCBwdWJsaWMgbWV0aG9kcy4gRW5jYXBzdWxhdGVzIHNlc3Npb24gaW5mb3JtYXRpb24uXG4gKlxuICogIyMjIEV4YW1wbGVcbiAqIGBgYGpzXG4gKiAvLyBFUyBtb2R1bGVcbiAqIGltcG9ydCAqIGFzIGZpbGVzdGFjayBmcm9tICdmaWxlc3RhY2stanMnO1xuICogY29uc3QgY2xpZW50ID0gZmlsZXN0YWNrLmluaXQoJ2FwaWtleScpO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIC8vIFVNRCBtb2R1bGUgaW4gYnJvd3NlclxuICogPHNjcmlwdCBzcmM9XCJodHRwczovL3N0YXRpYy5maWxlc3RhY2thcGkuY29tL2ZpbGVzdGFjay1qcy8zLngueC9maWxlc3RhY2subWluLmpzXCI+PC9zY3JpcHQ+XG4gKiBjb25zdCBjbGllbnQgPSBmaWxlc3RhY2suaW5pdCgnYXBpa2V5Jyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIENsaWVudCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIHB1YmxpYyBzZXNzaW9uOiBTZXNzaW9uO1xuICBwcml2YXRlIGNsb3VkOiBDbG91ZENsaWVudDtcbiAgcHJpdmF0ZSBwcmVmZXRjaEluc3RhbmNlOiBQcmVmZXRjaDtcblxuICBwcml2YXRlIGZvcndhcmRFcnJvcnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGZpbGVzdGFjayB1dGlsc1xuICAgKlxuICAgKiBAcmVhZG9ubHlcbiAgICogQG1lbWJlcm9mIENsaWVudFxuICAgKi9cbiAgZ2V0IHV0aWxzKCkge1xuICAgIHJldHVybiBVdGlscztcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGFwaWtleTogc3RyaW5nLCBvcHRpb25zPzogQ2xpZW50T3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZvcndhcmRFcnJvcnMpIHtcbiAgICAgIHRoaXMuZm9yd2FyZEVycm9ycyA9IG9wdGlvbnMuZm9yd2FyZEVycm9ycztcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIFNlbnRyeS5jb25maWd1cmVTY29wZShzY29wZSA9PiB7XG4gICAgICBzY29wZS5zZXRUYWcoJ2FwaWtleScsIGFwaWtleSk7XG4gICAgICBzY29wZS5zZXRUYWcoJ3Nkay12ZXJzaW9uJywgVXRpbHMuZ2V0VmVyc2lvbigpKTtcbiAgICAgIHNjb3BlLnNldEV4dHJhKCdjbGllbnRPcHRpb25zJywgb3B0aW9ucyk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWFwaWtleSB8fCB0eXBlb2YgYXBpa2V5ICE9PSAnc3RyaW5nJyB8fCBhcGlrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FuIGFwaWtleSBpcyByZXF1aXJlZCB0byBpbml0aWFsaXplIHRoZSBGaWxlc3RhY2sgY2xpZW50Jyk7XG4gICAgfVxuICAgIGNvbnN0IHsgdXJscyB9ID0gY29uZmlnO1xuICAgIHRoaXMuc2Vzc2lvbiA9IHsgYXBpa2V5LCB1cmxzIH07XG5cbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgY29uc3QgeyBjbmFtZSwgc2VjdXJpdHkgfSA9IG9wdGlvbnM7XG5cbiAgICAgIHRoaXMuc2V0U2VjdXJpdHkoc2VjdXJpdHkpO1xuICAgICAgdGhpcy5zZXRDbmFtZShjbmFtZSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmVmZXRjaEluc3RhbmNlID0gbmV3IFByZWZldGNoKHRoaXMuc2Vzc2lvbik7XG4gICAgdGhpcy5jbG91ZCA9IG5ldyBDbG91ZENsaWVudCh0aGlzLnNlc3Npb24sIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2UgYmFzaWMgcHJlZmV0Y2ggcmVxdWVzdCB0byBjaGVjayBwZXJtaXNzaW9uc1xuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zXG4gICAqL1xuICBwcmVmZXRjaChwYXJhbXM6IFByZWZldGNoT3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLnByZWZldGNoSW5zdGFuY2UuZ2V0Q29uZmlnKHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHNlY3VyaXR5IG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0ge1NlY3VyaXR5fSBzZWN1cml0eVxuICAgKiBAbWVtYmVyb2YgQ2xpZW50XG4gICAqL1xuICBzZXRTZWN1cml0eShzZWN1cml0eTogU2VjdXJpdHkpIHtcbiAgICBpZiAoc2VjdXJpdHkgJiYgIShzZWN1cml0eS5wb2xpY3kgJiYgc2VjdXJpdHkuc2lnbmF0dXJlKSkge1xuICAgICAgdGhyb3cgbmV3IEZpbGVzdGFja0Vycm9yKCdCb3RoIHBvbGljeSBhbmQgc2lnbmF0dXJlIGFyZSByZXF1aXJlZCBmb3IgY2xpZW50IHNlY3VyaXR5Jyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY3VyaXR5ICYmIHNlY3VyaXR5LnBvbGljeSAmJiBzZWN1cml0eS5zaWduYXR1cmUpIHtcbiAgICAgIHRoaXMuc2Vzc2lvbi5wb2xpY3kgPSBzZWN1cml0eS5wb2xpY3k7XG4gICAgICB0aGlzLnNlc3Npb24uc2lnbmF0dXJlID0gc2VjdXJpdHkuc2lnbmF0dXJlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgY3VzdG9tIGNuYW1lXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjbmFtZVxuICAgKiBAcmV0dXJuc1xuICAgKiBAbWVtYmVyb2YgQ2xpZW50XG4gICAqL1xuICBzZXRDbmFtZShjbmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFjbmFtZSB8fCBjbmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlc3Npb24uY25hbWUgPSBjbmFtZTtcbiAgICB0aGlzLnNlc3Npb24udXJscyA9IFV0aWxzLnJlc29sdmVIb3N0KHRoaXMuc2Vzc2lvbi51cmxzLCBjbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGN1cnJlbnQgY2xvdWQgc2Vzc2lvbnMgaW4gdGhlIHBpY2tlci5cbiAgICogT3B0aW9uYWxseSBwYXNzIGEgY2xvdWQgc291cmNlIG5hbWUgdG8gb25seSBsb2cgb3V0IG9mIHRoYXQgY2xvdWQgc291cmNlLlxuICAgKiBUaGlzIGVzc2VudGlhbGx5IGNsZWFycyB0aGUgT0F1dGggYXV0aG9yaXphdGlvbiBjb2RlcyBmcm9tIHRoZSBGaWxlc3RhY2sgc2Vzc2lvbi5cbiAgICogQHBhcmFtIG5hbWUgT3B0aW9uYWwgY2xvdWQgc291cmNlIG5hbWUuXG4gICAqL1xuICBsb2dvdXQobmFtZT86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNsb3VkLmxvZ291dChuYW1lKTtcbiAgfVxuICAvKipcbiAgICogUmV0cmlldmUgZGV0YWlsZWQgZGF0YSBvZiBzdG9yZWQgZmlsZXMuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudFxuICAgKiAgIC5tZXRhZGF0YSgnRENMNUs0NkZTM09JeGI1aXVLYnknKVxuICAgKiAgIC50aGVuKChyZXMpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAqICAgfSlcbiAgICogICAuY2F0Y2goKGVycikgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICogICB9KSk7XG4gICAqIGBgYFxuICAgKiBAc2VlIFtGaWxlIEFQSSAtIE1ldGFkYXRhXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL2ZpbGUjbWV0YWRhdGEpLlxuICAgKiBAcGFyYW0gaGFuZGxlIFZhbGlkIEZpbGVzdGFjayBoYW5kbGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIE1ldGFkYXRhIGZpZWxkcyB0byBlbmFibGUgb24gcmVzcG9uc2UuXG4gICAqIEBwYXJhbSBzZWN1cml0eSBPcHRpb25hbCBzZWN1cml0eSBvdmVycmlkZS5cbiAgICovXG4gIG1ldGFkYXRhKGhhbmRsZTogc3RyaW5nLCBvcHRpb25zPzogTWV0YWRhdGFPcHRpb25zLCBzZWN1cml0eT86IFNlY3VyaXR5KSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gbWV0YWRhdGEodGhpcy5zZXNzaW9uLCBoYW5kbGUsIG9wdGlvbnMsIHNlY3VyaXR5KTtcbiAgfVxuICAvKipcbiAgICogQ29uc3RydWN0IGEgbmV3IHBpY2tlciBpbnN0YW5jZS5cbiAgICovXG4gIHBpY2tlcihvcHRpb25zPzogUGlja2VyT3B0aW9ucyk6IFBpY2tlckluc3RhbmNlIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBwaWNrZXIodGhpcywgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIFVzZWQgZm9yIHZpZXdpbmcgZmlsZXMgdmlhIEZpbGVzdGFjayBoYW5kbGVzIG9yIHN0b3JhZ2UgYWxpYXNlcywgX19yZXF1aXJlcyBEb2N1bWVudCBWaWV3ZXIgYWRkb24gdG8geW91ciBGaWxlc3RhY2sgYXBwbGljYXRpb25fXy5cbiAgICogT3BlbnMgZG9jdW1lbnQgdmlld2VyIGluIG5ldyB3aW5kb3cgaWYgaWQgb3B0aW9uIGlzIG5vdCBwcm92aWRlZC5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gPGRpdiBpZD1cInByZXZpZXdcIj48L2Rpdj5cbiAgICpcbiAgICogY2xpZW50LnByZXZpZXcoJ0RDTDVLNDZGUzNPSXhiNWl1S2J5JywgeyBpZDogJ3ByZXZpZXcnIH0pO1xuICAgKiBgYGBcbiAgICogQHBhcmFtIGhhbmRsZSBWYWxpZCBGaWxlc3RhY2sgaGFuZGxlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBQcmV2aWV3IG9wdGlvbnNcbiAgICovXG4gIHByZXZpZXcoaGFuZGxlOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmV2aWV3T3B0aW9ucykge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHByZXZpZXcodGhpcy5zZXNzaW9uLCBoYW5kbGUsIG9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBmaWxlIGZyb20gc3RvcmFnZSBhbmQgdGhlIEZpbGVzdGFjayBzeXN0ZW0uXG4gICAqXG4gICAqIF9fUmVxdWlyZXMgYSB2YWxpZCBzZWN1cml0eSBwb2xpY3kgYW5kIHNpZ25hdHVyZV9fLiBUaGUgcG9saWN5IGFuZCBzaWduYXR1cmUgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgY2xpZW50IHNlc3Npb24sIG9yIGl0IGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIHNlY3VyaXR5IHBhcmFtZXRlci5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY2xpZW50XG4gICAqICAgLnJlbW92ZSgnRENMNUs0NkZTM09JeGI1aXVLYnknKVxuICAgKiAgIC50aGVuKChyZXMpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAqICAgfSlcbiAgICogICAuY2F0Y2goKGVycikgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICogICB9KSk7XG4gICAqIGBgYFxuICAgKiBAc2VlIFtGaWxlIEFQSSAtIERlbGV0ZV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI2RlbGV0ZSlcbiAgICogQHBhcmFtIGhhbmRsZSBWYWxpZCBGaWxlc3RhY2sgaGFuZGxlLlxuICAgKiBAcGFyYW0gc2VjdXJpdHkgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqL1xuICByZW1vdmUoaGFuZGxlOiBzdHJpbmcsIHNlY3VyaXR5PzogU2VjdXJpdHkpOiBQcm9taXNlPGFueT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHJlbW92ZSh0aGlzLnNlc3Npb24sIGhhbmRsZSwgZmFsc2UsIHNlY3VyaXR5KTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgZmlsZSAqKm9ubHkqKiBmcm9tIHRoZSBGaWxlc3RhY2sgc3lzdGVtLiBUaGUgZmlsZSByZW1haW5zIGluIHN0b3JhZ2UuXG4gICAqXG4gICAqIF9fUmVxdWlyZXMgYSB2YWxpZCBzZWN1cml0eSBwb2xpY3kgYW5kIHNpZ25hdHVyZV9fLiBUaGUgcG9saWN5IGFuZCBzaWduYXR1cmUgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgY2xpZW50IHNlc3Npb24sIG9yIGl0IGNhbiBiZSBvdmVycmlkZGVuIHdpdGggdGhlIHNlY3VyaXR5IHBhcmFtZXRlci5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY2xpZW50XG4gICAqICAgLnJlbW92ZU1ldGFkYXRhKCdEQ0w1SzQ2RlMzT0l4YjVpdUtieScpXG4gICAqICAgLnRoZW4oKHJlcykgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICogICB9KVxuICAgKiAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgKiAgIH0pKTtcbiAgICogYGBgXG4gICAqIEBzZWUgW0ZpbGUgQVBJIC0gRGVsZXRlXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL2ZpbGUjZGVsZXRlKVxuICAgKiBAcGFyYW0gaGFuZGxlIFZhbGlkIEZpbGVzdGFjayBoYW5kbGUuXG4gICAqIEBwYXJhbSBzZWN1cml0eSBPcHRpb25hbCBzZWN1cml0eSBvdmVycmlkZS5cbiAgICovXG4gIHJlbW92ZU1ldGFkYXRhKGhhbmRsZTogc3RyaW5nLCBzZWN1cml0eT86IFNlY3VyaXR5KTogUHJvbWlzZTxhbnk+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiByZW1vdmUodGhpcy5zZXNzaW9uLCBoYW5kbGUsIHRydWUsIHNlY3VyaXR5KTtcbiAgfVxuICAvKipcbiAgICogU3RvcmUgYSBmaWxlIGZyb20gaXRzIFVSTC5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY2xpZW50XG4gICAqICAgLnN0b3JlVVJMKCdodHRwczovL2Qxd3RxYWZmYWFqNjN6LmNsb3VkZnJvbnQubmV0L2ltYWdlcy9OWV8xOTlfRV9vZl9IYW1tZXJ0b3duXzIwMTQuanBnJylcbiAgICogICAudGhlbihyZXMgPT4gY29uc29sZS5sb2cocmVzKSk7XG4gICAqIGBgYFxuICAgKiBAc2VlIFtGaWxlIEFQSSAtIFN0b3JlXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL2ZpbGUjc3RvcmUpXG4gICAqIEBwYXJhbSB1cmwgICAgICAgVmFsaWQgVVJMIHRvIGEgZmlsZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgICBDb25maWd1cmUgZmlsZSBzdG9yYWdlLlxuICAgKiBAcGFyYW0gdG9rZW4gICAgIE9wdGlvbmFsIGNvbnRyb2wgdG9rZW4gdG8gY2FsbCAuY2FuY2VsKClcbiAgICogQHBhcmFtIHNlY3VyaXR5ICBPcHRpb25hbCBzZWN1cml0eSBvdmVycmlkZS5cbiAgICogQHBhcmFtIHVwbG9hZFRhZ3MgT3B0aW9uYWwgdGFncyB2aXNpYmxlIGluIHdlYmhvb2tzLlxuICAgKiBAcGFyYW0gaGVhZGVycyAgICBPcHRpb25hbCBoZWFkZXJzIHRvIHNlbmRcbiAgICovXG4gIHN0b3JlVVJMKHVybDogc3RyaW5nLCBzdG9yZVBhcmFtcz86IFN0b3JlUGFyYW1zLCB0b2tlbj86IGFueSwgc2VjdXJpdHk/OiBTZWN1cml0eSwgdXBsb2FkVGFncz86IFVwbG9hZFRhZ3MsIGhlYWRlcnM/OiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSk6IFByb21pc2U8T2JqZWN0PiB7XG4gICAgcmV0dXJuIHN0b3JlVVJMKHtcbiAgICAgIHNlc3Npb246IHRoaXMuc2Vzc2lvbixcbiAgICAgIHVybCxcbiAgICAgIHN0b3JlUGFyYW1zLFxuICAgICAgdG9rZW4sXG4gICAgICBzZWN1cml0eSxcbiAgICAgIHVwbG9hZFRhZ3MsXG4gICAgICBoZWFkZXJzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjY2VzcyBmaWxlcyB2aWEgdGhlaXIgRmlsZXN0YWNrIGhhbmRsZXMuXG4gICAqXG4gICAqIElmIGhlYWQgb3B0aW9uIGlzIHByb3ZpZGVkIC0gcmVxdWVzdCBoZWFkZXJzIGFyZSByZXR1cm5lZCBpbiBwcm9taXNlXG4gICAqIElmIG1ldGFkYXRhIG9wdGlvbiBpcyBwcm92aWRlZCAtIG1ldGFkYXRhIG9iamVjdCBpcyByZXR1cm5lZCBpbiBwcm9taXNlXG4gICAqIE90aGVyd2lzZSBmaWxlIGJsb2IgaXMgcmV0dXJuZWRcbiAgICogTWV0YWRhdGEgYW5kIGhlYWQgb3B0aW9ucyBjYW5ub3QgYmUgbWl4ZWRcbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY2xpZW50LnJldHJpZXZlKCdmaWxlSGFuZGxlJywge1xuICAgKiAgbWV0YWRhdGE6IHRydWUsXG4gICAqIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAqICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAqIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICogIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICogfSlcbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWUgW0ZpbGUgQVBJIC0gRG93bmxvYWRdKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvZmlsZSNkb3dubG9hZClcbiAgICogQHBhcmFtIGhhbmRsZSAgICBWYWxpZCBmaWxlIGhhbmRsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyAgIFJldHJpZXZlT3B0aW9uc1xuICAgKiBAcGFyYW0gc2VjdXJpdHkgIE9wdGlvbmFsIHNlY3VyaXR5IG92ZXJyaWRlLlxuICAgKiBAdGhyb3dzICAgICAgICAgIEVycm9yXG4gICAqL1xuICByZXRyaWV2ZShoYW5kbGU6IHN0cmluZywgb3B0aW9ucz86IFJldHJpZXZlT3B0aW9ucywgc2VjdXJpdHk/OiBTZWN1cml0eSk6IFByb21pc2U8T2JqZWN0IHwgQmxvYj4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHJldHJpZXZlKHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCBvcHRpb25zLCBzZWN1cml0eSk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJmYWNlIHRvIHRoZSBGaWxlc3RhY2sgW1Byb2Nlc3NpbmcgQVBJXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL3Byb2Nlc3NpbmcpLlxuICAgKiBDb252ZXJ0IGEgVVJMLCBoYW5kbGUsIG9yIHN0b3JhZ2UgYWxpYXMgdG8gYW5vdGhlciBVUkwgd2hpY2ggbGlua3MgdG8gdGhlIHRyYW5zZm9ybWVkIGZpbGUuXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzdG9yZSB0aGUgcmV0dXJuZWQgVVJMIHdpdGggY2xpZW50LnN0b3JlVVJMLlxuICAgKlxuICAgKiBUcmFuc2Zvcm0gcGFyYW1zIGNhbiBiZSBwcm92aWRlZCBpbiBjYW1lbENhc2Ugb3Igc25ha2VDYXNlIHN0eWxlIGllOiBwYXJ0aWFsX3BpeGVsYXRlIG9yIHBhcnRpYWxQaXhlbGF0ZVxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCB0cmFuc2Zvcm1lZFVybCA9IGNsaWVudC50cmFuc2Zvcm0odXJsLCB7XG4gICAqICAgY3JvcDoge1xuICAgKiAgICAgZGltOiBbeCwgeSwgd2lkdGgsIGhlaWdodF0sXG4gICAqICAgfSxcbiAgICogICB2aWduZXR0ZToge1xuICAgKiAgICAgYmx1cm1vZGU6ICdnYXVzc2lhbicsXG4gICAqICAgICBhbW91bnQ6IDUwLFxuICAgKiAgIH0sXG4gICAqICAgZmxpcDogdHJ1ZSxcbiAgICogICBwYXJ0aWFsX3BpeGVsYXRlOiB7XG4gICAqICAgICBvYmplY3RzOiBbWzEwLCAyMCwgMjAwLCAyNTBdLCBbMjc1LCA5MSwgNTAwLCA1NTddXSxcbiAgICogICB9LFxuICAgKiB9O1xuICAgKlxuICAgKiAvLyBvcHRpb25hbGx5IHN0b3JlIHRoZSBuZXcgVVJMXG4gICAqIGNsaWVudC5zdG9yZVVSTCh0cmFuc2Zvcm1lZFVybCkudGhlbihyZXMgPT4gY29uc29sZS5sb2cocmVzKSk7XG4gICAqIGBgYFxuICAgKiBAc2VlIFtGaWxlc3RhY2sgUHJvY2Vzc2luZyBBUEldKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvcHJvY2Vzc2luZylcbiAgICogQHBhcmFtIHVybCAgICAgU2luZ2xlIG9yIG11bHRpcGxlIHZhbGlkIFVSTHMgKGh0dHAocyk6Ly8pLCBmaWxlIGhhbmRsZXMsIG9yIHN0b3JhZ2UgYWxpYXNlcyAoc3JjOi8vKSB0byBhbiBpbWFnZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVHJhbnNmb3JtYXRpb25zIGFyZSBhcHBsaWVkIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgYnkgdGhpcyBvYmplY3QuXG4gICAqIEBwYXJhbSBiNjQgICAgIFVzZSBuZXcgbW9yZSBzYWZlIGZvcm1hdCBmb3IgZ2VuZXJhdGluZyB0cmFuc2Zvcm1zIHVybCAoZGVmYXVsdD1mYWxzZSkgTm90ZTogSWYgdGhlcmUgd2lsbCBiZSBhbnkgaXNzdWVzIHdpdGggdXJsIHBsZWFzZSB0ZXN0IGl0IHdpdGggZW5hYmxlZCBiNjQgc3VwcG9ydFxuICAgKiBAcmV0dXJucyAgICAgICBBIG5ldyBVUkwgdGhhdCBwb2ludHMgdG8gdGhlIHRyYW5zZm9ybWVkIHJlc291cmNlLlxuICAgKi9cbiAgdHJhbnNmb3JtKHVybDogc3RyaW5nIHwgc3RyaW5nW10sIG9wdGlvbnM6IFRyYW5zZm9ybU9wdGlvbnMsIGI2NDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gdHJhbnNmb3JtKHRoaXMuc2Vzc2lvbiwgdXJsLCBvcHRpb25zLCBiNjQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYXRlcyBhIG11bHRpLXBhcnQgdXBsb2FkIGZsb3cuIFVzZSB0aGlzIGZvciBGaWxlc3RhY2sgQ0lOIGFuZCBGSUkgdXBsb2Fkcy5cbiAgICpcbiAgICogSW4gTm9kZSBydW50aW1lcyB0aGUgZmlsZSBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZSBwYXRoLlxuICAgKiBVcGxvYWRpbmcgZnJvbSBhIE5vZGUgYnVmZmVyIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IHRva2VuID0ge307XG4gICAqIGNvbnN0IG9uUmV0cnkgPSAob2JqKSA9PiB7XG4gICAqICAgY29uc29sZS5sb2coYFJldHJ5aW5nICR7b2JqLmxvY2F0aW9ufSBmb3IgJHtvYmouZmlsZW5hbWV9LiBBdHRlbXB0ICR7b2JqLmF0dGVtcHR9IG9mIDEwLmApO1xuICAgKiB9O1xuICAgKlxuICAgKiBjbGllbnQudXBsb2FkKGZpbGUsIHsgb25SZXRyeSB9LCB7IGZpbGVuYW1lOiAnZm9vYmFyLmpwZycgfSwgdG9rZW4pXG4gICAqICAgLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKlxuICAgKiBjbGllbnQudXBsb2FkKHtmaWxlLCBuYW1lfSwgeyBvblJldHJ5IH0sIHsgZmlsZW5hbWU6ICdmb29iYXIuanBnJyB9LCB0b2tlbilcbiAgICogICAudGhlbihyZXMgPT4gY29uc29sZS5sb2cocmVzKSk7XG4gICAqXG4gICAqIHRva2VuLnBhdXNlKCk7ICAvLyBQYXVzZSBmbG93XG4gICAqIHRva2VuLnJlc3VtZSgpOyAvLyBSZXN1bWUgZmxvd1xuICAgKiB0b2tlbi5jYW5jZWwoKTsgLy8gQ2FuY2VsIGZsb3cgKHJlamVjdHMpXG4gICAqIGBgYFxuICAgKiBAcGFyYW0ge0lucHV0RmlsZX0gICAgZmlsZSAgICAgICAgICAgTXVzdCBiZSBhIHZhbGlkIFtGaWxlIHwgQmxvYiB8IEJ1ZmZlciB8IHN0cmluZ11cbiAgICogQHBhcmFtIHVwbG9hZE9wdGlvbnMgIFVwbG9hZGVyIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBzdG9yZU9wdGlvbnMgICBTdG9yYWdlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB0b2tlbiAgICAgICAgICBBIGNvbnRyb2wgdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBjYWxsIGNhbmNlbCgpLCBwYXVzZSgpLCBhbmQgcmVzdW1lKCkuXG4gICAqIEBwYXJhbSBzZWN1cml0eSAgICAgICBPcHRpb25hbCBzZWN1cml0eSBwb2xpY3kgYW5kIHNpZ25hdHVyZSBvdmVycmlkZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICB1cGxvYWQoZmlsZTogSW5wdXRGaWxlLCBvcHRpb25zPzogVXBsb2FkT3B0aW9ucywgc3RvcmVPcHRpb25zPzogU3RvcmVVcGxvYWRPcHRpb25zLCB0b2tlbj86IGFueSwgc2VjdXJpdHk/OiBTZWN1cml0eSkge1xuICAgIGxldCB1cGxvYWQgPSBuZXcgVXBsb2FkKG9wdGlvbnMsIHN0b3JlT3B0aW9ucyk7XG4gICAgdXBsb2FkLnNldFNlc3Npb24odGhpcy5zZXNzaW9uKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgdXBsb2FkLnNldFRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoc2VjdXJpdHkpIHtcbiAgICAgIHVwbG9hZC5zZXRTZWN1cml0eShzZWN1cml0eSk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB1cGxvYWQub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3J3YXJkRXJyb3JzKSB7XG4gICAgICAgIFNlbnRyeS53aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICAgIHNjb3BlLnNldEV4dHJhcyh7IHVwbG9hZE9wdGlvbnM6IG9wdGlvbnMsIHN0b3JlT3B0aW9ucywgZGV0YWlsczogZS5kZXRhaWxzIH0pO1xuICAgICAgICAgIGUubWVzc2FnZSA9IGBGUy0ke2UubWVzc2FnZX1gO1xuXG4gICAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVtaXQoJ3VwbG9hZC5lcnJvcicsIGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwbG9hZC51cGxvYWQoZmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgbXVsdGktcGFydCB1cGxvYWQgZmxvdy4gVXNlIHRoaXMgZm9yIEZpbGVzdGFjayBDSU4gYW5kIEZJSSB1cGxvYWRzLlxuICAgKlxuICAgKiBJbiBOb2RlIHJ1bnRpbWVzIHRoZSBmaWxlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlIHBhdGguXG4gICAqIFVwbG9hZGluZyBmcm9tIGEgTm9kZSBidWZmZXIgaXMgbm90IHlldCBpbXBsZW1lbnRlZC5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgdG9rZW4gPSB7fTtcbiAgICogY29uc3Qgb25SZXRyeSA9IChvYmopID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhgUmV0cnlpbmcgJHtvYmoubG9jYXRpb259IGZvciAke29iai5maWxlbmFtZX0uIEF0dGVtcHQgJHtvYmouYXR0ZW1wdH0gb2YgMTAuYCk7XG4gICAqIH07XG4gICAqXG4gICAqIGNsaWVudC5tdWx0aXVwbG9hZChbZmlsZV0sIHsgb25SZXRyeSB9LCB0b2tlbilcbiAgICogICAudGhlbihyZXMgPT4gY29uc29sZS5sb2cocmVzKSk7XG4gICAqXG4gICAqIGNsaWVudC5tdWx0aXVwbG9hZChbe2ZpbGUsIG5hbWV9XSwgeyBvblJldHJ5IH0sIHRva2VuKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICpcbiAgICogdG9rZW4ucGF1c2UoKTsgIC8vIFBhdXNlIGZsb3dcbiAgICogdG9rZW4ucmVzdW1lKCk7IC8vIFJlc3VtZSBmbG93XG4gICAqIHRva2VuLmNhbmNlbCgpOyAvLyBDYW5jZWwgZmxvdyAocmVqZWN0cylcbiAgICogYGBgXG4gICAqIEBwYXJhbSB7SW5wdXRGaWxlW119ICBmaWxlICAgICAgICAgICBNdXN0IGJlIGEgdmFsaWQgW0ZpbGUgfCBCbG9iIHwgQnVmZmVyIHwgc3RyaW5nIChiYXNlNjQpXVxuICAgKiBAcGFyYW0gdXBsb2FkT3B0aW9ucyAgVXBsb2FkIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBzdG9yZU9wdGlvbnMgICBTdG9yYWdlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB0b2tlbiAgICAgICAgICBBIGNvbnRyb2wgdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBjYWxsIGNhbmNlbCgpLCBwYXVzZSgpLCBhbmQgcmVzdW1lKCkuXG4gICAqIEBwYXJhbSBzZWN1cml0eSAgICAgICBPcHRpb25hbCBzZWN1cml0eSBwb2xpY3kgYW5kIHNpZ25hdHVyZSBvdmVycmlkZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBtdWx0aXVwbG9hZChmaWxlOiBJbnB1dEZpbGVbXSwgb3B0aW9ucz86IFVwbG9hZE9wdGlvbnMsIHN0b3JlT3B0aW9ucz86IFN0b3JlVXBsb2FkT3B0aW9ucywgdG9rZW4/OiBhbnksIHNlY3VyaXR5PzogU2VjdXJpdHkpIHtcbiAgICBsZXQgdXBsb2FkID0gbmV3IFVwbG9hZChvcHRpb25zLCBzdG9yZU9wdGlvbnMpO1xuXG4gICAgdXBsb2FkLnNldFNlc3Npb24odGhpcy5zZXNzaW9uKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgdXBsb2FkLnNldFRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoc2VjdXJpdHkpIHtcbiAgICAgIHVwbG9hZC5zZXRTZWN1cml0eShzZWN1cml0eSk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB1cGxvYWQub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICBTZW50cnkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgc2NvcGUuc2V0RXh0cmFzKGUuZGV0YWlscyk7XG4gICAgICAgIHNjb3BlLnNldEV4dHJhcyh7IHVwbG9hZE9wdGlvbnM6IG9wdGlvbnMsIHN0b3JlT3B0aW9ucyB9KTtcbiAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5lbWl0KCd1cGxvYWQuZXJyb3InLCBlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB1cGxvYWQubXVsdGl1cGxvYWQoZmlsZSk7XG4gIH1cbn1cbiJdfQ==

@@ -274,5 +274,3 @@ "use strict";

if (config.timeout) {
console.log(config.timeout);
req.setTimeout(config.timeout, function () {
console.log('socket timeouted===========');
req.abort();

@@ -329,2 +327,2 @@ if (cancelListener) {

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUVILHlCQUEyQjtBQUMzQiwyQkFBNkI7QUFDN0IsK0JBQTBCO0FBRzFCLHFDQUF5QztBQUN6QywrQkFBaUM7QUFFakMsZ0NBQWtDO0FBQ2xDLHdDQUEwRztBQUMxRyxrQ0FBOEQ7QUFDOUQsb0NBQTBDO0FBRTFDLElBQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUMvQixJQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLElBQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7QUFDckMsSUFBTSxLQUFLLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFdkM7Ozs7O0dBS0c7QUFDSDtJQUFpQyw4Q0FBZTtJQUc5Qyw0QkFBWSxHQUFHLEVBQUUsSUFBUztRQUFULHFCQUFBLEVBQUEsU0FBUztRQUExQixZQUNFLGtCQUFNLElBQUksQ0FBQyxTQUlaO1FBRkMsS0FBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBTSxPQUFBLEtBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQWxCLENBQWtCLENBQUMsQ0FBQzs7SUFDOUMsQ0FBQztJQUVELG1DQUFNLEdBQU4sVUFBTyxLQUFVLEVBQUUsUUFBaUIsRUFBRSxFQUE4QztRQUNsRixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxnQ0FBRyxHQUFILFVBQUksS0FBSztRQUNQLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FD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L3JlcXVlc3QvYWRhcHRlcnMvaHR0cC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgKiBhcyB6bGliIGZyb20gJ3psaWInO1xuaW1wb3J0IERlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgQWRhcHRlckludGVyZmFjZSB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldFZlcnNpb24gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgKiBhcyBTdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IEZzUmVxdWVzdE9wdGlvbnMsIEZzUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmVwYXJlRGF0YSwgcGFyc2VSZXNwb25zZSwgY29tYmluZVVSTCwgc2V0IGFzIHNldEhlYWRlciwgbm9ybWFsaXplSGVhZGVycyB9IGZyb20gJy4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBGc1JlcXVlc3RFcnJvckNvZGUsIEZzUmVxdWVzdEVycm9yIH0gZnJvbSAnLi4vZXJyb3InO1xuaW1wb3J0IHsgRnNIdHRwTWV0aG9kIH0gZnJvbSAnLi8uLi90eXBlcyc7XG5cbmNvbnN0IEhUVFBTX1JFR0VYUCA9IC9odHRwczo/LztcbmNvbnN0IEhUVFBfQ0hVTktfU0laRSA9IDE2ICogMTAyNDtcbmNvbnN0IE1BWF9SRURJUkVDVFMgPSAxMDtcbmNvbnN0IENBTkNFTF9DTEVBUiA9IGBGc0NsZWFuTWVtb3J5YDtcbmNvbnN0IGRlYnVnID0gRGVidWcoJ2ZzOnJlcXVlc3Q6aHR0cCcpO1xuXG4vKipcbiAqIFdyaXRhYmxlIHN0cmVhbSB0aGF0cyBvdmVyd3JhcCBodHRwIHJlcXVlc3QgZm9yIHByb2dyZXNzIGV2ZW50XG4gKlxuICogQGNsYXNzIEh0dHBXcml0YWJsZVN0cmVhbVxuICogQGV4dGVuZHMge1N0cmVhbS5Xcml0YWJsZX1cbiAqL1xuY2xhc3MgSHR0cFdyaXRhYmxlU3RyZWFtIGV4dGVuZHMgU3RyZWFtLldyaXRhYmxlIHtcbiAgcHJpdmF0ZSByZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcSwgb3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG5cbiAgICB0aGlzLnJlcXVlc3QgPSByZXE7XG4gICAgcmVxLm9uY2UoJ2RyYWluJywgKCkgPT4gdGhpcy5lbWl0KCdkcmFpbicpKTtcbiAgfVxuXG4gIF93cml0ZShjaHVuazogYW55LCBlbmNvZGluZz86IHN0cmluZywgY2I/OiAoZXJyb3I6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdC53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIGVuZChjaHVuaykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5yZXF1ZXN0LndyaXRlKGNodW5rKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QuZW5kKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb2RlIGh0dHAgcmVxdWVzdCBjbGFzc1xuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBIdHRwQWRhcHRlclxuICogQGltcGxlbWVudHMge0FkYXB0ZXJJbnRlcmZhY2V9XG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwQWRhcHRlciBpbXBsZW1lbnRzIEFkYXB0ZXJJbnRlcmZhY2Uge1xuICBwcml2YXRlIHJlZGlyZWN0SG9vcHMgPSAwO1xuICBwcml2YXRlIHJlZGlyZWN0UGF0aHMgPSBbXTtcblxuICAvKipcbiAgICogZG8gcmVxdWVzdCBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnNSZXF1ZXN0T3B0aW9uc30gY29uZmlnXG4gICAqIEByZXR1cm5zXG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcmVxdWVzdChjb25maWc6IEZzUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAvLyBpZiB0aGlzIG9wdGlvbiBpcyB1bnNwZWNpZmllZCBzZXQgaXQgYnkgZGVmYXVsdFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmZpbGVzdGFja0hlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWcuZmlsZXN0YWNrSGVhZGVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBub3JtYWxpemVIZWFkZXJzKGNvbmZpZy5oZWFkZXJzKTtcblxuICAgIGxldCB7IGRhdGEsIGhlYWRlcnMgfSA9IHByZXBhcmVEYXRhKGNvbmZpZyk7XG5cbiAgICBoZWFkZXJzID0gc2V0SGVhZGVyKGhlYWRlcnMsICd1c2VyLWFnZW50JywgYGZpbGVzdGFjay1yZXF1ZXN0LyR7Z2V0VmVyc2lvbigpfWApO1xuXG4gICAgLy8gZm9yIG5vdyB3ZSBhcmUgbm90IHVzaW5nIHN0cmVhbXNcbiAgICBpZiAoZGF0YSkge1xuICAgICAgZGVidWcoJ1JlcXVlc3QgZGF0YSAlTycsIGRhdGEpO1xuXG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignRGF0YSBtdXN0IGJlIGEgc3RyaW5nLCBKU09OIG9yIGEgQnVmZmVyJywgY29uZmlnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9XG5cbiAgICAgIGhlYWRlcnMgPSBzZXRIZWFkZXIoaGVhZGVycywgJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YS5sZW5ndGgsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBsZXQgYXV0aDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGlmICghY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgY29uZmlnLmF1dGgudXNlcm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYEJhc2ljIGF1dGg6IHVzZXJuYW1lIGlzIHJlcXVpcmVkICR7Y29uZmlnLmF1dGh9YCwgY29uZmlnKSk7XG4gICAgICB9XG5cbiAgICAgIGF1dGggPSBgJHtjb25maWcuYXV0aC51c2VybmFtZX06JHtjb25maWcuYXV0aC5wYXNzd29yZH1gO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVybFxuICAgIGxldCBwYXJzZWQgPSB1cmwucGFyc2UoY29uZmlnLnVybCk7XG5cbiAgICAvLyB0cnkgdG8gYWRkIGRlZmF1bHQgaHR0cHMgcHJvdG9jb2xcbiAgICBpZiAoIXBhcnNlZC5wcm90b2NvbCkge1xuICAgICAgcGFyc2VkID0gdXJsLnBhcnNlKGBodHRwczovLyR7Y29uZmlnLnVybH1gKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDoganVzdCBiZSBzdXJlIHRoYXQgdGhlIGhvc3QgaXMgcGFyc2VkIGNvcnJlY3RseSwgbm90IG5lZWRlZCB0byB0ZXN0ICovXG4gICAgaWYgKCFwYXJzZWQuaG9zdCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgQ2Fubm90IHBhcnNlIHByb3ZpZGVkIHVybCAke2NvbmZpZy51cmx9YCwgY29uZmlnKSk7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIGF1dGggaGVhZGVyXG4gICAgaWYgKGF1dGggJiYgaGVhZGVycy5BdXRob3JpemF0aW9uKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGlzSHR0cHNSZXF1ZXN0ID0gSFRUUFNfUkVHRVhQLnRlc3QocGFyc2VkLnByb3RvY29sKTtcbiAgICBjb25zdCBhZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gcmVxdWlyZSgnaHR0cHMnKSA6IHJlcXVpcmUoJ2h0dHAnKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBjb21iaW5lVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zKSxcbiAgICAgIGhvc3Q6IHBhcnNlZC5ob3N0LFxuICAgICAgcG9ydDogcGFyc2VkLnBvcnQsXG4gICAgICBwcm90b2NvbDogcGFyc2VkLnByb3RvY29sLFxuICAgICAgbWV0aG9kOiBjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYWdlbnQ6IG5ldyBhZ2VudC5BZ2VudCgpLFxuICAgICAgYXV0aDogYXV0aCxcbiAgICB9O1xuXG4gICAgZGVidWcoJ1N0YXJ0aW5nICVzIHJlcXVlc3Qgd2l0aCBvcHRpb25zICVPJywgaXNIdHRwc1JlcXVlc3QgPyAnaHR0cHMnIDogJ2h0dHAnLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGc1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KTogYW55ID0+IHtcbiAgICAgIGxldCByZXE7XG4gICAgICBsZXQgY2FuY2VsTGlzdGVuZXI7XG5cbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY2FuY2VsTGlzdGVuZXIgPSBjb25maWcuY2FuY2VsVG9rZW4ub24oJ2NhbmNlbCcsIChyZWFzb24pID0+IHtcbiAgICAgICAgICAvLyBjbGVhbnVwIGhhbmRsZXJcbiAgICAgICAgICBjYW5jZWxMaXN0ZW5lciA9IG51bGw7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHByb21pc2UgaXMgcmVzb2x2ZWQgYnkgc3lzdGVtXG4gICAgICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ubWVzc2FnZSA9PT0gQ0FOQ0VMX0NMRUFSKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGlmIHJlcXVlc3QgaXMgZG9uZSBjYW5jZWwgdG9rZW4gc2hvdWxkIG5vdCB0aHJvdyBhbnkgZXJyb3IgKi9cbiAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgICAgIHJlcSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgY2FuY2VsZWQgYnkgdXNlciAlcywgY29uZmlnOiAlTycsIHJlYXNvbiwgY29uZmlnKTtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVxdWVzdCBhYm9ydGVkLiBSZWFzb246ICR7cmVhc29ufWAsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLkFCT1JURUQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcSA9IGFnZW50LnJlcXVlc3Qob3B0aW9ucywgcmVzID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGp1c3QgYmUgc3VyZSB0aGF0IHJlc3BvbnNlIHdpbGwgbm90IGJlIGNhbGxlZCBhZnRlciByZXF1ZXN0IGlzIGFib3J0ZWQgKi9cbiAgICAgICAgaWYgKCFyZXEgfHwgcmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gcmVzO1xuICAgICAgICBkZWJ1ZygnUmVzcG9uc2Ugc3RhdHVzQ29kZTogJWQsIFJlc3BvbnNlIEhlYWRlcnM6ICVPJywgcmVzLnN0YXR1c0NvZGUsIHJlcy5oZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBjb21wcmVzc0hlYWRlcnMgPSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuXG4gICAgICAgIGlmIChjb21wcmVzc0hlYWRlcnMgJiYgY29tcHJlc3NIZWFkZXJzLmxlbmd0aCAmJiBbJ2d6aXAnLCAnY29tcHJlc3MnLCAnZGVmbGF0ZSddLnNvbWUoKHYpID0+IGNvbXByZXNzSGVhZGVycy5pbmRleE9mKHYpID4gLTEpKSB7XG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHJlcy5zdGF0dXNDb2RlID09PSAyMDQgPyBzdHJlYW0gOiBzdHJlYW0ucGlwZSh6bGliLmNyZWF0ZVVuemlwKCkpO1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29udGVudC1lbmNvZGluZyBpbiBvcmRlciB0byBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZTogRnNSZXNwb25zZSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGZvbGxvdyByZWRpcmVjdCBzbyBtYWtlIHNhbWUgcmVxdWVzdCB3aXRoIG5ldyBsb2NhdGlvblxuICAgICAgICBpZiAoWzMwMSwgMzAyXS5pbmRleE9mKHJlcy5zdGF0dXNDb2RlKSA+IC0xKSB7XG4gICAgICAgICAgZGVidWcoJ1JlZGlyZWN0IHJlY2VpdmVkICVzJywgcmVzLnN0YXR1c0NvZGUpO1xuXG4gICAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RIb29wcyA+PSBNQVhfUkVESVJFQ1RTKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgTWF4IHJlZGlyZWN0cyAoJHt0aGlzLnJlZGlyZWN0SG9vcHN9KSByZWFjaGVkLiBFeGl0aW5nYCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdXJsID0gcmVzLmhlYWRlcnNbJ2xvY2F0aW9uJ107XG5cbiAgICAgICAgICBpZiAoIXVybCB8fCB1cmwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVkaXJlY3QgaGVhZGVyIGxvY2F0aW9uIG5vdCBmb3VuZGAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnJlZGlyZWN0UGF0aHMuaW5kZXhPZih1cmwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZWRpcmVjdCBsb29wIGRldGVjdGVkIGF0IHVybCAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlZGlyZWN0UGF0aHMucHVzaCh1cmwpO1xuICAgICAgICAgIHRoaXMucmVkaXJlY3RIb29wcysrO1xuXG4gICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXNcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZGVidWcoJ1JlZGlyZWN0aW5nIHJlcXVlc3QgdG8gJXMgKGhvb3AtY291bnQ6ICVkKScsIHVybCwgdGhpcy5yZWRpcmVjdEhvb3BzKTtcblxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMucmVxdWVzdChPYmplY3QuYXNzaWduKHt9LCBjb25maWcsIHsgdXJsIH0pKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VCdWZmZXIgPSBbXTtcbiAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgY2h1bmsgPT4gcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuaykpO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBpdHMgaGFyZCB0byB0ZXN0IHNvY2tldCBldmVudHMgd2l0aCBqZXN0IGFuZCBub2NrIC0gdGVzdGVkIG1hbnVhbGx5ICovXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3I6IEFib3J0ZWQgJU8nLCBlcnIpO1xuXG4gICAgICAgICAgaWYgKHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2xlYXIgY2FuY2VsIHRva2VuIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGVyci5tZXNzYWdlLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5ORVRXT1JLKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIGNsZWFyIGNhbmNlbCB0b2tlbiB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVzcG9uc2UgZGF0YSBpbnNpZGVcbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwNCkge1xuICAgICAgICAgICAgLy8gcHJlcGFyZSByZXNwb25zZVxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXNcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoNTAwIDw9IHJlc3BvbnNlLnN0YXR1cyAmJiByZXNwb25zZS5zdGF0dXMgPD0gNTk5KSB7XG4gICAgICAgICAgICAvLyBzZXJ2ZXIgZXJyb3IgdGhyb3dcbiAgICAgICAgICAgIGRlYnVnKCdTZXJ2ZXIgZXJyb3IoNXh4KSAtICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFNlcnZlciBlcnJvciAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuU0VSVkVSKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICg0MDAgPD0gcmVzcG9uc2Uuc3RhdHVzICYmIHJlc3BvbnNlLnN0YXR1cyA8PSA0OTkpIHtcbiAgICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yKDR4eCkgLSAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGVycm9yICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRVFVRVNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZW5kczogJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgICAgY29uc29sZS5sb2coY29uZmlnLnRpbWVvdXQpO1xuICAgICAgICByZXEuc2V0VGltZW91dChjb25maWcudGltZW91dCwgKCkgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKCdzb2NrZXQgdGltZW91dGVkPT09PT09PT09PT0nKTtcbiAgICAgICAgICByZXEuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignUmVxdWVzdCB0aW1lb3V0JywgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuVElNRU9VVCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVxLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlcSB8fCByZXEuYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yOiAlcyAtICVPJywgZXJyLCBlcnIuY29kZSk7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGVycm9yOiAke2Vyci5jb2RlfWAsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLk5FVFdPUkspKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpICYmIFsnUE9TVCcsICdQVVQnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyVG9DaHVua3MoZGF0YSkucGlwZSh0aGlzLmdldFByb2dyZXNzTW9uaXRvcihjb25maWcsIGRhdGEubGVuZ3RoKSkucGlwZShuZXcgSHR0cFdyaXRhYmxlU3RyZWFtKHJlcSkpO1xuICAgICAgfVxuXG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vbml0b3IgYW5kIGVtaXQgcHJvZ3Jlc3MgZXZlbnQgaWYgbmVlZGVkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQcm9ncmVzc01vbml0b3IgPSAoY29uZmlnLCB0b3RhbCkgPT4ge1xuICAgIGxldCBsb2FkZWQgPSAwO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBuZXcgU3RyZWFtLlRyYW5zZm9ybSgpO1xuICAgIHByb2dyZXNzLl90cmFuc2Zvcm0gPSAoY2h1bmssIGVuY29kaW5nLCBjYikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcub25Qcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiBbRnNIdHRwTWV0aG9kLlBPU1QsIEZzSHR0cE1ldGhvZC5QVVRdLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgPiAtMSkge1xuICAgICAgICBsb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBjb25maWcub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgdG90YWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2IobnVsbCwgY2h1bmspO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBidWZmZXIgdG8gc3RyZWFtXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gYnVmZmVyXG4gICAqIEByZXR1cm5zIHtTdHJlYW0uUmVhZGFibGV9XG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcHJpdmF0ZSBidWZmZXJUb0NodW5rcyhidWZmZXIpOiBTdHJlYW0uUmVhZGFibGUge1xuICAgIGNvbnN0IGNodW5raW5nID0gbmV3IFN0cmVhbS5SZWFkYWJsZSgpO1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXIgPSB0b3RhbExlbmd0aCAlIEhUVFBfQ0hVTktfU0laRTtcbiAgICBjb25zdCBjdXRvZmYgPSB0b3RhbExlbmd0aCAtIHJlbWFpbmRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3V0b2ZmOyBpICs9IEhUVFBfQ0hVTktfU0laRSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBidWZmZXIuc2xpY2UoaSwgaSArIEhUVFBfQ0hVTktfU0laRSk7XG4gICAgICBjaHVua2luZy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluZGVyID4gMCkge1xuICAgICAgY29uc3QgcmVtYWluZGVyQnVmZmVyID0gYnVmZmVyLnNsaWNlKC1yZW1haW5kZXIpO1xuICAgICAgY2h1bmtpbmcucHVzaChyZW1haW5kZXJCdWZmZXIpO1xuICAgIH1cblxuICAgIGNodW5raW5nLnB1c2gobnVsbCk7XG5cbiAgICByZXR1cm4gY2h1bmtpbmc7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUVILHlCQUEyQjtBQUMzQiwyQkFBNkI7QUFDN0IsK0JBQTBCO0FBRzFCLHFDQUF5QztBQUN6QywrQkFBaUM7QUFFakMsZ0NBQWtDO0FBQ2xDLHdDQUEwRztBQUMxRyxrQ0FBOEQ7QUFDOUQsb0NBQTBDO0FBRTFDLElBQU0sWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUMvQixJQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2xDLElBQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztBQUN6QixJQUFNLFlBQVksR0FBRyxlQUFlLENBQUM7QUFDckMsSUFBTSxLQUFLLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFdkM7Ozs7O0dBS0c7QUFDSDtJQUFpQyw4Q0FBZTtJQUc5Qyw0QkFBWSxHQUFHLEVBQUUsSUFBUztRQUFULHFCQUFBLEVBQUEsU0FBUztRQUExQixZQUNFLGtCQUFNLElBQUksQ0FBQyxTQUlaO1FBRkMsS0FBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDbkIsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBTSxPQUFBLEtBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQWxCLENBQWtCLENBQUMsQ0FBQzs7SUFDOUMsQ0FBQztJQUVELG1DQUFNLEdBQU4sVUFBTyxLQUFVLEVBQUUsUUFBaUIsRUFBRSxFQUE4QztRQUNsRixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxnQ0FBRyxHQUFILFVBQUksS0FBSztRQUNQLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7U0FD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Q0FBQyxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDdkg7WUFFRCxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQTJCRDs7Ozs7OztPQU9HO0lBQ0ssb0NBQWMsR0FBdEIsVUFBdUIsTUFBTTtRQUMzQixJQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2QyxJQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ2xDLElBQU0sU0FBUyxHQUFHLFdBQVcsR0FBRyxlQUFlLENBQUM7UUFDaEQsSUFBTSxNQUFNLEdBQUcsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUV2QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxlQUFlLEVBQUU7WUFDaEQsSUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGVBQWUsQ0FBQyxDQUFDO1lBQ25ELFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDdEI7UUFFRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUU7WUFDakIsSUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELFFBQVEsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDaEM7UUFFRCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFDSCxrQkFBQztBQUFELENBbFRBLEFBa1RDLElBQUE7QUFsVFksa0NBQVciLCJmaWxlIjoibGliL3JlcXVlc3QvYWRhcHRlcnMvaHR0cC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5pbXBvcnQgKiBhcyB6bGliIGZyb20gJ3psaWInO1xuaW1wb3J0IERlYnVnIGZyb20gJ2RlYnVnJztcblxuaW1wb3J0IHsgQWRhcHRlckludGVyZmFjZSB9IGZyb20gJy4vaW50ZXJmYWNlJztcbmltcG9ydCB7IGdldFZlcnNpb24gfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgKiBhcyBTdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IEZzUmVxdWVzdE9wdGlvbnMsIEZzUmVzcG9uc2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBwcmVwYXJlRGF0YSwgcGFyc2VSZXNwb25zZSwgY29tYmluZVVSTCwgc2V0IGFzIHNldEhlYWRlciwgbm9ybWFsaXplSGVhZGVycyB9IGZyb20gJy4vLi4vaGVscGVycyc7XG5pbXBvcnQgeyBGc1JlcXVlc3RFcnJvckNvZGUsIEZzUmVxdWVzdEVycm9yIH0gZnJvbSAnLi4vZXJyb3InO1xuaW1wb3J0IHsgRnNIdHRwTWV0aG9kIH0gZnJvbSAnLi8uLi90eXBlcyc7XG5cbmNvbnN0IEhUVFBTX1JFR0VYUCA9IC9odHRwczo/LztcbmNvbnN0IEhUVFBfQ0hVTktfU0laRSA9IDE2ICogMTAyNDtcbmNvbnN0IE1BWF9SRURJUkVDVFMgPSAxMDtcbmNvbnN0IENBTkNFTF9DTEVBUiA9IGBGc0NsZWFuTWVtb3J5YDtcbmNvbnN0IGRlYnVnID0gRGVidWcoJ2ZzOnJlcXVlc3Q6aHR0cCcpO1xuXG4vKipcbiAqIFdyaXRhYmxlIHN0cmVhbSB0aGF0cyBvdmVyd3JhcCBodHRwIHJlcXVlc3QgZm9yIHByb2dyZXNzIGV2ZW50XG4gKlxuICogQGNsYXNzIEh0dHBXcml0YWJsZVN0cmVhbVxuICogQGV4dGVuZHMge1N0cmVhbS5Xcml0YWJsZX1cbiAqL1xuY2xhc3MgSHR0cFdyaXRhYmxlU3RyZWFtIGV4dGVuZHMgU3RyZWFtLldyaXRhYmxlIHtcbiAgcHJpdmF0ZSByZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKHJlcSwgb3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG5cbiAgICB0aGlzLnJlcXVlc3QgPSByZXE7XG4gICAgcmVxLm9uY2UoJ2RyYWluJywgKCkgPT4gdGhpcy5lbWl0KCdkcmFpbicpKTtcbiAgfVxuXG4gIF93cml0ZShjaHVuazogYW55LCBlbmNvZGluZz86IHN0cmluZywgY2I/OiAoZXJyb3I6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMucmVxdWVzdC53cml0ZShjaHVuaywgZW5jb2RpbmcsIGNiKTtcbiAgfVxuXG4gIGVuZChjaHVuaykge1xuICAgIGlmIChjaHVuaykge1xuICAgICAgdGhpcy5yZXF1ZXN0LndyaXRlKGNodW5rKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlcXVlc3QuZW5kKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBOb2RlIGh0dHAgcmVxdWVzdCBjbGFzc1xuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBIdHRwQWRhcHRlclxuICogQGltcGxlbWVudHMge0FkYXB0ZXJJbnRlcmZhY2V9XG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwQWRhcHRlciBpbXBsZW1lbnRzIEFkYXB0ZXJJbnRlcmZhY2Uge1xuICBwcml2YXRlIHJlZGlyZWN0SG9vcHMgPSAwO1xuICBwcml2YXRlIHJlZGlyZWN0UGF0aHMgPSBbXTtcblxuICAvKipcbiAgICogZG8gcmVxdWVzdCBiYXNlZCBvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7RnNSZXF1ZXN0T3B0aW9uc30gY29uZmlnXG4gICAqIEByZXR1cm5zXG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcmVxdWVzdChjb25maWc6IEZzUmVxdWVzdE9wdGlvbnMpIHtcbiAgICAvLyBpZiB0aGlzIG9wdGlvbiBpcyB1bnNwZWNpZmllZCBzZXQgaXQgYnkgZGVmYXVsdFxuICAgIGlmICh0eXBlb2YgY29uZmlnLmZpbGVzdGFja0hlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25maWcuZmlsZXN0YWNrSGVhZGVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uZmlnLmhlYWRlcnMgPSBub3JtYWxpemVIZWFkZXJzKGNvbmZpZy5oZWFkZXJzKTtcblxuICAgIGxldCB7IGRhdGEsIGhlYWRlcnMgfSA9IHByZXBhcmVEYXRhKGNvbmZpZyk7XG5cbiAgICBoZWFkZXJzID0gc2V0SGVhZGVyKGhlYWRlcnMsICd1c2VyLWFnZW50JywgYGZpbGVzdGFjay1yZXF1ZXN0LyR7Z2V0VmVyc2lvbigpfWApO1xuXG4gICAgLy8gZm9yIG5vdyB3ZSBhcmUgbm90IHVzaW5nIHN0cmVhbXNcbiAgICBpZiAoZGF0YSkge1xuICAgICAgZGVidWcoJ1JlcXVlc3QgZGF0YSAlTycsIGRhdGEpO1xuXG4gICAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgICAgICBpZiAoIXV0aWxzLmlzU3RyaW5nKGRhdGEpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignRGF0YSBtdXN0IGJlIGEgc3RyaW5nLCBKU09OIG9yIGEgQnVmZmVyJywgY29uZmlnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9XG5cbiAgICAgIGhlYWRlcnMgPSBzZXRIZWFkZXIoaGVhZGVycywgJ2NvbnRlbnQtbGVuZ3RoJywgZGF0YS5sZW5ndGgsIHRydWUpO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBsZXQgYXV0aDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGlmICghY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgY29uZmlnLmF1dGgudXNlcm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYEJhc2ljIGF1dGg6IHVzZXJuYW1lIGlzIHJlcXVpcmVkICR7Y29uZmlnLmF1dGh9YCwgY29uZmlnKSk7XG4gICAgICB9XG5cbiAgICAgIGF1dGggPSBgJHtjb25maWcuYXV0aC51c2VybmFtZX06JHtjb25maWcuYXV0aC5wYXNzd29yZH1gO1xuICAgIH1cblxuICAgIC8vIFBhcnNlIHVybFxuICAgIGxldCBwYXJzZWQgPSB1cmwucGFyc2UoY29uZmlnLnVybCk7XG5cbiAgICAvLyB0cnkgdG8gYWRkIGRlZmF1bHQgaHR0cHMgcHJvdG9jb2xcbiAgICBpZiAoIXBhcnNlZC5wcm90b2NvbCkge1xuICAgICAgcGFyc2VkID0gdXJsLnBhcnNlKGBodHRwczovLyR7Y29uZmlnLnVybH1gKTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDoganVzdCBiZSBzdXJlIHRoYXQgdGhlIGhvc3QgaXMgcGFyc2VkIGNvcnJlY3RseSwgbm90IG5lZWRlZCB0byB0ZXN0ICovXG4gICAgaWYgKCFwYXJzZWQuaG9zdCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgQ2Fubm90IHBhcnNlIHByb3ZpZGVkIHVybCAke2NvbmZpZy51cmx9YCwgY29uZmlnKSk7XG4gICAgfVxuXG4gICAgLy8gbm9ybWFsaXplIGF1dGggaGVhZGVyXG4gICAgaWYgKGF1dGggJiYgaGVhZGVycy5BdXRob3JpemF0aW9uKSB7XG4gICAgICBkZWxldGUgaGVhZGVycy5BdXRob3JpemF0aW9uO1xuICAgIH1cblxuICAgIGNvbnN0IGlzSHR0cHNSZXF1ZXN0ID0gSFRUUFNfUkVHRVhQLnRlc3QocGFyc2VkLnByb3RvY29sKTtcbiAgICBjb25zdCBhZ2VudCA9IGlzSHR0cHNSZXF1ZXN0ID8gcmVxdWlyZSgnaHR0cHMnKSA6IHJlcXVpcmUoJ2h0dHAnKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBwYXRoOiBjb21iaW5lVVJMKHBhcnNlZC5wYXRoLCBjb25maWcucGFyYW1zKSxcbiAgICAgIGhvc3Q6IHBhcnNlZC5ob3N0LFxuICAgICAgcG9ydDogcGFyc2VkLnBvcnQsXG4gICAgICBwcm90b2NvbDogcGFyc2VkLnByb3RvY29sLFxuICAgICAgbWV0aG9kOiBjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiBoZWFkZXJzLFxuICAgICAgYWdlbnQ6IG5ldyBhZ2VudC5BZ2VudCgpLFxuICAgICAgYXV0aDogYXV0aCxcbiAgICB9O1xuXG4gICAgZGVidWcoJ1N0YXJ0aW5nICVzIHJlcXVlc3Qgd2l0aCBvcHRpb25zICVPJywgaXNIdHRwc1JlcXVlc3QgPyAnaHR0cHMnIDogJ2h0dHAnLCBvcHRpb25zKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGc1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KTogYW55ID0+IHtcbiAgICAgIGxldCByZXE7XG4gICAgICBsZXQgY2FuY2VsTGlzdGVuZXI7XG5cbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY2FuY2VsTGlzdGVuZXIgPSBjb25maWcuY2FuY2VsVG9rZW4ub24oJ2NhbmNlbCcsIChyZWFzb24pID0+IHtcbiAgICAgICAgICAvLyBjbGVhbnVwIGhhbmRsZXJcbiAgICAgICAgICBjYW5jZWxMaXN0ZW5lciA9IG51bGw7XG5cbiAgICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHByb21pc2UgaXMgcmVzb2x2ZWQgYnkgc3lzdGVtXG4gICAgICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ubWVzc2FnZSA9PT0gQ0FOQ0VMX0NMRUFSKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGlmIHJlcXVlc3QgaXMgZG9uZSBjYW5jZWwgdG9rZW4gc2hvdWxkIG5vdCB0aHJvdyBhbnkgZXJyb3IgKi9cbiAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICByZXEuYWJvcnQoKTtcbiAgICAgICAgICAgIHJlcSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgY2FuY2VsZWQgYnkgdXNlciAlcywgY29uZmlnOiAlTycsIHJlYXNvbiwgY29uZmlnKTtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVxdWVzdCBhYm9ydGVkLiBSZWFzb246ICR7cmVhc29ufWAsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLkFCT1JURUQpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJlcSA9IGFnZW50LnJlcXVlc3Qob3B0aW9ucywgcmVzID0+IHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGp1c3QgYmUgc3VyZSB0aGF0IHJlc3BvbnNlIHdpbGwgbm90IGJlIGNhbGxlZCBhZnRlciByZXF1ZXN0IGlzIGFib3J0ZWQgKi9cbiAgICAgICAgaWYgKCFyZXEgfHwgcmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgY29uZmlnKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RyZWFtID0gcmVzO1xuICAgICAgICBkZWJ1ZygnUmVzcG9uc2Ugc3RhdHVzQ29kZTogJWQsIFJlc3BvbnNlIEhlYWRlcnM6ICVPJywgcmVzLnN0YXR1c0NvZGUsIHJlcy5oZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBjb21wcmVzc0hlYWRlcnMgPSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuXG4gICAgICAgIGlmIChjb21wcmVzc0hlYWRlcnMgJiYgY29tcHJlc3NIZWFkZXJzLmxlbmd0aCAmJiBbJ2d6aXAnLCAnY29tcHJlc3MnLCAnZGVmbGF0ZSddLnNvbWUoKHYpID0+IGNvbXByZXNzSGVhZGVycy5pbmRleE9mKHYpID4gLTEpKSB7XG4gICAgICAgICAgLy8gYWRkIHRoZSB1bnppcHBlciB0byB0aGUgYm9keSBzdHJlYW0gcHJvY2Vzc2luZyBwaXBlbGluZVxuICAgICAgICAgIHN0cmVhbSA9IHJlcy5zdGF0dXNDb2RlID09PSAyMDQgPyBzdHJlYW0gOiBzdHJlYW0ucGlwZSh6bGliLmNyZWF0ZVVuemlwKCkpO1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29udGVudC1lbmNvZGluZyBpbiBvcmRlciB0byBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZTogRnNSZXNwb25zZSA9IHtcbiAgICAgICAgICBzdGF0dXM6IHJlcy5zdGF0dXNDb2RlLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlcy5zdGF0dXNNZXNzYWdlLFxuICAgICAgICAgIGhlYWRlcnM6IHJlcy5oZWFkZXJzLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyB3ZSBuZWVkIHRvIGZvbGxvdyByZWRpcmVjdCBzbyBtYWtlIHNhbWUgcmVxdWVzdCB3aXRoIG5ldyBsb2NhdGlvblxuICAgICAgICBpZiAoWzMwMSwgMzAyXS5pbmRleE9mKHJlcy5zdGF0dXNDb2RlKSA+IC0xKSB7XG4gICAgICAgICAgZGVidWcoJ1JlZGlyZWN0IHJlY2VpdmVkICVzJywgcmVzLnN0YXR1c0NvZGUpO1xuXG4gICAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RIb29wcyA+PSBNQVhfUkVESVJFQ1RTKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgTWF4IHJlZGlyZWN0cyAoJHt0aGlzLnJlZGlyZWN0SG9vcHN9KSByZWFjaGVkLiBFeGl0aW5nYCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdXJsID0gcmVzLmhlYWRlcnNbJ2xvY2F0aW9uJ107XG5cbiAgICAgICAgICBpZiAoIXVybCB8fCB1cmwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgUmVkaXJlY3QgaGVhZGVyIGxvY2F0aW9uIG5vdCBmb3VuZGAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLnJlZGlyZWN0UGF0aHMuaW5kZXhPZih1cmwpID4gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZWRpcmVjdCBsb29wIGRldGVjdGVkIGF0IHVybCAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnJlZGlyZWN0UGF0aHMucHVzaCh1cmwpO1xuICAgICAgICAgIHRoaXMucmVkaXJlY3RIb29wcysrO1xuXG4gICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXNcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgZGVidWcoJ1JlZGlyZWN0aW5nIHJlcXVlc3QgdG8gJXMgKGhvb3AtY291bnQ6ICVkKScsIHVybCwgdGhpcy5yZWRpcmVjdEhvb3BzKTtcblxuICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMucmVxdWVzdChPYmplY3QuYXNzaWduKHt9LCBjb25maWcsIHsgdXJsIH0pKSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcmVzcG9uc2VCdWZmZXIgPSBbXTtcbiAgICAgICAgc3RyZWFtLm9uKCdkYXRhJywgY2h1bmsgPT4gcmVzcG9uc2VCdWZmZXIucHVzaChjaHVuaykpO1xuXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBpdHMgaGFyZCB0byB0ZXN0IHNvY2tldCBldmVudHMgd2l0aCBqZXN0IGFuZCBub2NrIC0gdGVzdGVkIG1hbnVhbGx5ICovXG4gICAgICAgIHN0cmVhbS5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3I6IEFib3J0ZWQgJU8nLCBlcnIpO1xuXG4gICAgICAgICAgaWYgKHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2xlYXIgY2FuY2VsIHRva2VuIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGVyci5tZXNzYWdlLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5ORVRXT1JLKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0cmVhbS5vbignZW5kJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIC8vIGNsZWFyIGNhbmNlbCB0b2tlbiB0byBhdm9pZCBtZW1vcnkgbGVha1xuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhbnkgcmVzcG9uc2UgZGF0YSBpbnNpZGVcbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwNCkge1xuICAgICAgICAgICAgLy8gcHJlcGFyZSByZXNwb25zZVxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpO1xuICAgICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YSA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gZnJlZSByZXNvdXJjZXNcbiAgICAgICAgICByZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVxID0gdW5kZWZpbmVkO1xuXG4gICAgICAgICAgcmVzcG9uc2VCdWZmZXIgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoNTAwIDw9IHJlc3BvbnNlLnN0YXR1cyAmJiByZXNwb25zZS5zdGF0dXMgPD0gNTk5KSB7XG4gICAgICAgICAgICAvLyBzZXJ2ZXIgZXJyb3IgdGhyb3dcbiAgICAgICAgICAgIGRlYnVnKCdTZXJ2ZXIgZXJyb3IoNXh4KSAtICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFNlcnZlciBlcnJvciAke3VybH1gLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuU0VSVkVSKSk7XG4gICAgICAgICAgfSBlbHNlIGlmICg0MDAgPD0gcmVzcG9uc2Uuc3RhdHVzICYmIHJlc3BvbnNlLnN0YXR1cyA8PSA0OTkpIHtcbiAgICAgICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yKDR4eCkgLSAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGVycm9yICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRVFVRVNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZW5kczogJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY29uZmlnLnRpbWVvdXQpIHtcbiAgICAgICAgcmVxLnNldFRpbWVvdXQoY29uZmlnLnRpbWVvdXQsICgpID0+IHtcbiAgICAgICAgICByZXEuYWJvcnQoKTtcblxuICAgICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcignUmVxdWVzdCB0aW1lb3V0JywgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuVElNRU9VVCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVxLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIGlmIChjYW5jZWxMaXN0ZW5lcikge1xuICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXJlcSB8fCByZXEuYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlYnVnKCdSZXF1ZXN0IGVycm9yOiAlcyAtICVPJywgZXJyLCBlcnIuY29kZSk7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGVycm9yOiAke2Vyci5jb2RlfWAsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLk5FVFdPUkspKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpICYmIFsnUE9TVCcsICdQVVQnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVmZmVyVG9DaHVua3MoZGF0YSkucGlwZSh0aGlzLmdldFByb2dyZXNzTW9uaXRvcihjb25maWcsIGRhdGEubGVuZ3RoKSkucGlwZShuZXcgSHR0cFdyaXRhYmxlU3RyZWFtKHJlcSkpO1xuICAgICAgfVxuXG4gICAgICByZXEuZW5kKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1vbml0b3IgYW5kIGVtaXQgcHJvZ3Jlc3MgZXZlbnQgaWYgbmVlZGVkXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQcm9ncmVzc01vbml0b3IgPSAoY29uZmlnLCB0b3RhbCkgPT4ge1xuICAgIGxldCBsb2FkZWQgPSAwO1xuXG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBuZXcgU3RyZWFtLlRyYW5zZm9ybSgpO1xuICAgIHByb2dyZXNzLl90cmFuc2Zvcm0gPSAoY2h1bmssIGVuY29kaW5nLCBjYikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcub25Qcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiBbRnNIdHRwTWV0aG9kLlBPU1QsIEZzSHR0cE1ldGhvZC5QVVRdLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgPiAtMSkge1xuICAgICAgICBsb2FkZWQgKz0gY2h1bmsubGVuZ3RoO1xuICAgICAgICBjb25maWcub25Qcm9ncmVzcyh7XG4gICAgICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogdHJ1ZSxcbiAgICAgICAgICBsb2FkZWQsXG4gICAgICAgICAgdG90YWwsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY2IobnVsbCwgY2h1bmspO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvZ3Jlc3M7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBidWZmZXIgdG8gc3RyZWFtXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSB7Kn0gYnVmZmVyXG4gICAqIEByZXR1cm5zIHtTdHJlYW0uUmVhZGFibGV9XG4gICAqIEBtZW1iZXJvZiBIdHRwQWRhcHRlclxuICAgKi9cbiAgcHJpdmF0ZSBidWZmZXJUb0NodW5rcyhidWZmZXIpOiBTdHJlYW0uUmVhZGFibGUge1xuICAgIGNvbnN0IGNodW5raW5nID0gbmV3IFN0cmVhbS5SZWFkYWJsZSgpO1xuICAgIGNvbnN0IHRvdGFsTGVuZ3RoID0gYnVmZmVyLmxlbmd0aDtcbiAgICBjb25zdCByZW1haW5kZXIgPSB0b3RhbExlbmd0aCAlIEhUVFBfQ0hVTktfU0laRTtcbiAgICBjb25zdCBjdXRvZmYgPSB0b3RhbExlbmd0aCAtIHJlbWFpbmRlcjtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3V0b2ZmOyBpICs9IEhUVFBfQ0hVTktfU0laRSkge1xuICAgICAgY29uc3QgY2h1bmsgPSBidWZmZXIuc2xpY2UoaSwgaSArIEhUVFBfQ0hVTktfU0laRSk7XG4gICAgICBjaHVua2luZy5wdXNoKGNodW5rKTtcbiAgICB9XG5cbiAgICBpZiAocmVtYWluZGVyID4gMCkge1xuICAgICAgY29uc3QgcmVtYWluZGVyQnVmZmVyID0gYnVmZmVyLnNsaWNlKC1yZW1haW5kZXIpO1xuICAgICAgY2h1bmtpbmcucHVzaChyZW1haW5kZXJCdWZmZXIpO1xuICAgIH1cblxuICAgIGNodW5raW5nLnB1c2gobnVsbCk7XG5cbiAgICByZXR1cm4gY2h1bmtpbmc7XG4gIH1cbn1cbiJdfQ==

@@ -1,2 +0,2 @@

export declare const Map: {
export declare const ExtensionsMap: {
'application/andrew-inset': string[];

@@ -3,0 +3,0 @@ 'application/applixware': string[];

@@ -48,3 +48,3 @@ "use strict";

exports.getVersion = function () {
return 'JS-3.19.0';
return 'JS-3.20.0';
};

@@ -51,0 +51,0 @@ /**

@@ -42,2 +42,9 @@ /// <reference types="node" />

/**
* Change extension to according mimetype using ext=>mimetype map
*
* @param ext - string
* @return string|boolean
*/
export declare const extensionToMime: (ext: string) => string;
/**
* Sanitizer Options

@@ -44,0 +51,0 @@ */

@@ -100,9 +100,5 @@ "use strict";

if (name && name.indexOf('.') > -1) {
var ext = name.split('.').pop();
var keys = Object.keys(extensions_1.Map);
var mapLen = keys.length;
for (var i = 0; i < mapLen; i++) {
if (extensions_1.Map[keys[i]].indexOf(ext) > -1) {
return keys[i];
}
var mime_1 = exports.extensionToMime(name);
if (mime_1) {
return mime_1;
}

@@ -128,2 +124,27 @@ }

/**
* Change extension to according mimetype using ext=>mimetype map
*
* @param ext - string
* @return string|boolean
*/
exports.extensionToMime = function (ext) {
if (!ext || ext.length === 0) {
return;
}
if (ext.split('/').length === 2) {
return ext;
}
if (ext.indexOf('.') > -1) {
ext = ext.split('.').pop();
}
var keys = Object.keys(extensions_1.ExtensionsMap);
var mapLen = keys.length;
for (var i = 0; i < mapLen; i++) {
if (extensions_1.ExtensionsMap[keys[i]].indexOf(ext) > -1) {
return keys[i];
}
}
return;
};
/**
* Sanitize file name

@@ -198,2 +219,2 @@ *

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7O0FBSUgsMkNBQW1DO0FBQ25DLHVDQUFpQztBQUNqQywrQkFBaUM7QUFFakM7Ozs7OztHQU1HO0FBQ1UsUUFBQSxhQUFhLEdBQUcsVUFBQyxPQUFnQixFQUFFLE1BQWM7SUFDNUQsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFFbkMsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUVELHdEQUF3RDtRQUN4RCxPQUFVLE1BQU0sU0FBSSxPQUFPLENBQUMsTUFBUSxDQUFDO0tBQ3RDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ1UsUUFBQSxXQUFXLEdBQUcsVUFBQyxJQUFXLEVBQUUsS0FBYTtJQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQU0sS0FBSyxHQUFHLHdDQUF3QyxDQUFDO0lBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztB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LFFBQUEsZ0JBQWdCLEdBQUcsVUFBQyxHQUFRO0lBQ3ZDLElBQUksQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pDLE9BQU8sR0FBRyxDQUFDO0tBQ1o7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLENBQUM7UUFDeEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEVBQUU7WUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUNwQjtRQUVELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsd0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsdURBQTZCIiwiZmlsZSI6ImxpYi91dGlscy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgSG9zdHMgfSBmcm9tICcuLy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBNYXAgfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuaW1wb3J0IGZpbGVUeXBlIGZyb20gJ2ZpbGUtdHlwZSc7XG5pbXBvcnQgKiBhcyBpc3V0ZjggZnJvbSAnaXN1dGY4JztcblxuLyoqXG4gKiBSZXNvbHZlIGNkbiB1cmwgYmFzZWQgb24gaGFuZGxlIHR5cGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNlc3Npb24gc2Vzc2lvbiBvYmplY3RcbiAqIEBwYXJhbSBoYW5kbGUgZmlsZSBoYW5kbGUgKGhhc2gsIHNyYzovL2FsaWFzLCB1cmwpXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQ2RuVXJsID0gKHNlc3Npb246IFNlc3Npb24sIGhhbmRsZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2RuVVJMID0gc2Vzc2lvbi51cmxzLmNkblVybDtcblxuICBpZiAoaGFuZGxlICYmIChoYW5kbGUuaW5kZXhPZignc3JjOicpID09PSAwIHx8IGhhbmRsZS5pbmRleE9mKCdodHRwJykgPT09IDApKSB7XG4gICAgaWYgKCFzZXNzaW9uLmFwaWtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcGkga2V5IGlzIHJlcXVpcmVkIHdoZW4gc3RvcmFnZSBhbGlhcyBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIGFwaWtleSBpcyByZXF1aXJlZCBmb3IgYWxpYXMgb3IgZXh0ZXJuYWwgc291cmNlcyBjYWxsXG4gICAgcmV0dXJuIGAke2NkblVSTH0vJHtzZXNzaW9uLmFwaWtleX1gO1xuICB9XG5cbiAgcmV0dXJuIGNkblVSTDtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBhbGwgdXJscyB3aXRoIHByb3ZpZGVkIGNuYW1lc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsc1xuICogQHBhcmFtIGNuYW1lXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlSG9zdCA9ICh1cmxzOiBIb3N0cywgY25hbWU6IHN0cmluZyk6IEhvc3RzID0+IHtcbiAgaWYgKCFjbmFtZSkge1xuICAgIHJldHVybiB1cmxzO1xuICB9XG5cbiAgY29uc3QgaG9zdHMgPSAvZmlsZXN0YWNrYXBpLmNvbXxmaWxlc3RhY2tjb250ZW50LmNvbS9pO1xuXG4gIE9iamVjdC5rZXlzKHVybHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICB1cmxzW2tleV0gPSB1cmxzW2tleV0ucmVwbGFjZShob3N0cywgY25hbWUpO1xuICB9KTtcblxuICByZXR1cm4gdXJscztcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBlbXB0eSBvcHRpb25zIGZyb20gb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYmpcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVtcHR5ID0gKG9iajogYW55KSA9PiB7XG4gIGNvbnN0IG5ld09iaiA9IHsgLi4ub2JqIH07XG4gIE9iamVjdC5rZXlzKG5ld09iaikuZm9yRWFjaChrID0+ICFuZXdPYmpba10gJiYgdHlwZW9mIG5ld09ialtrXSAhPT0gJ2Jvb2xlYW4nICYmIGRlbGV0ZSBuZXdPYmpba10pO1xuICByZXR1cm4gbmV3T2JqO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHVuaXF1ZSB0aW1lXG4gKi9cbmxldCBsYXN0O1xuZXhwb3J0IGNvbnN0IHVuaXF1ZVRpbWUgPSAoKSA9PiB7XG4gIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICBsYXN0ID0gdGltZSA9PT0gbGFzdCA/IHRpbWUgKyAxIDogdGltZTtcbiAgcmV0dXJuIGxhc3Q7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyByYW5kb20gc3RyaW5nIHdpdGggcHJvdmlkZWQgbGVuZ3RoXG4gKlxuICogQHBhcmFtIGxlblxuICovXG5leHBvcnQgY29uc3QgdW5pcXVlSWQgPSAobGVuOiBudW1iZXIgPSAxMCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBuZXcgQXJyYXkobGVuKS5qb2luKCkucmVwbGFjZSgvKC58JCkvZywgKCkgPT4gKChNYXRoLnJhbmRvbSgpICogMzYpIHwgMCkudG9TdHJpbmcoMzYpW01hdGgucmFuZG9tKCkgPCAwLjUgPyAndG9TdHJpbmcnIDogJ3RvVXBwZXJDYXNlJ10oKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGlucHV0IGlzIGEgc3ZnXG4gKlxuICogQHBhcmFtIHtVaW50OEFycmF5IHwgQnVmZmVyfSBmaWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIG1pbWV0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNaW1ldHlwZSA9IChmaWxlOiBVaW50OEFycmF5IHwgQnVmZmVyLCBuYW1lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IHR5cGUgPSBmaWxlVHlwZShmaWxlKTtcblxuICBjb25zdCBleGNsdWRlZE1pbWV0eXBlcyA9IFsndGV4dC9wbGFpbicsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCAnYXBwbGljYXRpb24veC1tcycsICdhcHBsaWNhdGlvbi94LW1zaScsICdhcHBsaWNhdGlvbi96aXAnXTtcblxuICBpZiAodHlwZSAmJiBleGNsdWRlZE1pbWV0eXBlcy5pbmRleE9mKHR5cGUubWltZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIHR5cGUubWltZTtcbiAgfVxuXG4gIGlmIChuYW1lICYmIG5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICBjb25zdCBleHQgPSBuYW1lLnNwbGl0KCcuJykucG9wKCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE1hcCk7XG4gICAgY29uc3QgbWFwTGVuID0ga2V5cy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcExlbjsgaSsrKSB7XG4gICAgICBpZiAoTWFwW2tleXNbaV1dLmluZGV4T2YoZXh0KSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBrZXlzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGlzdXRmOChmaWxlKSkge1xuICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGNvbnNvbGUud2FybignQWRkaXRpb25hbCBtaW1ldHlwZSBjaGVja3MgKHRleHQvcGxhaW4pIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgYnJvd3NlcnMnKTtcbiAgfVxuICAvLyB0aGlzIGlzIG9ubHkgZmFsbGJhY2ssIG9taXQgaXQgaW4gY292ZXJhZ2VcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAvLyBpZiB3ZSBjYW50IGZpbmQgdHlwZXMgYnkgZXh0ZW5zaW9ucyBhbmQgd2UgaGF2ZSBtYWdpYyBieXRlcyBmYWxsYmFjayB0byBpdFxuICBpZiAodHlwZSkge1xuICAgIHJldHVybiB0eXBlLm1pbWU7XG4gIH1cblxuICByZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG59O1xuXG4vKipcbiAqIFNhbml0aXplciBPcHRpb25zXG4gKi9cbmV4cG9ydCB0eXBlIFNhbml0aXplT3B0aW9ucyA9XG4gIHwgYm9vbGVhblxuICB8IHtcbiAgICBleGNsdWRlPzogc3RyaW5nW107XG4gICAgcmVwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIH07XG5cbi8qKlxuICogU2FuaXRpemUgZmlsZSBuYW1lXG4gKlxuICogQHBhcmFtIG5hbWVcbiAqIEBwYXJhbSB7Ym9vbH0gb3B0aW9ucyAgLSBlbmFibGUsZGlzYWJsZSBzYW5pdGl6ZXIsIGRlZmF1bHQgZW5hYmxlZFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMucmVwbGFjZW1lbnQgLSByZXBsYWNlbWVudCBmb3Igc2FuaXRpemVkIGNoYXJzIGRlZmF1bHRzIHRvIFwiLVwiXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBvcHRpb25zLmV4Y2x1ZGUgLSBhcnJheSB3aXRoIGV4Y2x1ZGVkIGNoYXJzIGRlZmF1bHQgLSBbJ1xcJywgJ3snLCAnfScsJ3wnLCAnJScsICdgJywgJ1wiJywgXCInXCIsICd+JywgJ1snLCAnXScsICcjJywgJ3wnLCAnXicsICc8JywgJz4nXVxuICovXG5leHBvcnQgY29uc3Qgc2FuaXRpemVOYW1lID0gKG5hbWU6IHN0cmluZywgb3B0aW9uczogU2FuaXRpemVPcHRpb25zID0gdHJ1ZSk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Jvb2xlYW4nICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBsZXQgZXh0O1xuXG4gIGNvbnN0IHJlcGxhY2VtZW50ID0gdHlwZW9mIG9wdGlvbnMgIT09ICdib29sZWFuJyAmJiBvcHRpb25zLnJlcGxhY2VtZW50ID8gb3B0aW9ucy5yZXBsYWNlbWVudCA6ICctJztcbiAgY29uc3QgZXhjbHVkZSA9IHR5cGVvZiBvcHRpb25zICE9PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5leGNsdWRlID8gb3B0aW9ucy5leGNsdWRlIDogWydcXFxcJywgJ3snLCAnfScsICd8JywgJyUnLCAnYCcsICdcIicsIFwiJ1wiLCAnficsICdbJywgJ10nLCAnIycsICd8JywgJ14nLCAnPCcsICc+J107XG5cbiAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgY29uc3QgZmlsZVBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuXG4gIGlmIChmaWxlUGFydHMubGVuZ3RoID4gMSkge1xuICAgIGV4dCA9IGZpbGVQYXJ0cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBgJHtmaWxlUGFydHNcbiAgICAuam9pbignLicpXG4gICAgLnNwbGl0KCcnKVxuICAgIC5tYXAoY2hhciA9PiAoZXhjbHVkZS5pbmRleE9mKGNoYXIpID4gLTEgPyByZXBsYWNlbWVudCA6IGNoYXIpKVxuICAgIC5qb2luKCcnKX0ke2V4dCA/ICcuJyArIGV4dCA6ICcnfWA7XG59O1xuXG4vKipcbiAqIEZpbHRlciBvYmplY3QgdG8gZ2l2ZW4gZmllbGRzXG4gKlxuICogQHBhcmFtIHRvRmlsdGVyXG4gKiBAcGFyYW0gcmVxdWlyZWRGaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGZpbHRlck9iamVjdCA9ICh0b0ZpbHRlciwgcmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdKSA9PiB7XG4gIGlmICghcmVxdWlyZWRGaWVsZHMgfHwgcmVxdWlyZWRGaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRvRmlsdGVyO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHRvRmlsdGVyKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdG9GaWx0ZXI7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmtleXModG9GaWx0ZXIpXG4gICAgLmZpbHRlcihmID0+IHJlcXVpcmVkRmllbGRzLmluZGV4T2YoZikgPiAtMSlcbiAgICAucmVkdWNlKChvYmosIGtleSkgPT4gKHsgLi4ub2JqLCBba2V5XTogdG9GaWx0ZXJba2V5XSB9KSwge30pO1xufTtcblxuLyoqXG4gKiBEZWVwIGNsZWFudXAgb2JqZWN0IGZyb20gZnVuY3Rpb25zXG4gKlxuICogQHBhcmFtIG9ialxuICovXG5leHBvcnQgY29uc3QgY2xlYW5VcENhbGxiYWNrcyA9IChvYmo6IGFueSkgPT4ge1xuICBpZiAoIW9iaiB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goayA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmpba10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9ialtrXSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAob2JqW2tdID09PSBPYmplY3Qob2JqW2tdKSkge1xuICAgICAgb2JqW2tdID0gY2xlYW5VcENhbGxiYWNrcyhvYmpba10pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgubm9kZSc7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7O0FBSUgsMkNBQTZDO0FBQzdDLHVDQUFpQztBQUNqQywrQkFBaUM7QUFFakM7Ozs7OztHQU1HO0FBQ1UsUUFBQSxhQUFhLEdBQUcsVUFBQyxPQUFnQixFQUFFLE1BQWM7SUFDNUQsSUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7SUFFbkMsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzVFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztTQUN2RTtRQUVELHdEQUF3RDtRQUN4RCxPQUFVLE1BQU0sU0FBSSxPQUFPLENBQUMsTUFBUSxDQUFDO0tBQ3RDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ1UsUUFBQSxXQUFXLEdBQUcsVUFBQyxJQUFXLEVBQUUsS0FBYTtJQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQU0sS0FBSyxHQUFHLHdDQUF3QyxDQUFDO0lBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztB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ZmlsZSI6ImxpYi91dGlscy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgSG9zdHMgfSBmcm9tICcuLy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zTWFwIH0gZnJvbSAnLi9leHRlbnNpb25zJztcbmltcG9ydCBmaWxlVHlwZSBmcm9tICdmaWxlLXR5cGUnO1xuaW1wb3J0ICogYXMgaXN1dGY4IGZyb20gJ2lzdXRmOCc7XG5cbi8qKlxuICogUmVzb2x2ZSBjZG4gdXJsIGJhc2VkIG9uIGhhbmRsZSB0eXBlXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzZXNzaW9uIHNlc3Npb24gb2JqZWN0XG4gKiBAcGFyYW0gaGFuZGxlIGZpbGUgaGFuZGxlIChoYXNoLCBzcmM6Ly9hbGlhcywgdXJsKVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNkblVybCA9IChzZXNzaW9uOiBTZXNzaW9uLCBoYW5kbGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNkblVSTCA9IHNlc3Npb24udXJscy5jZG5Vcmw7XG5cbiAgaWYgKGhhbmRsZSAmJiAoaGFuZGxlLmluZGV4T2YoJ3NyYzonKSA9PT0gMCB8fCBoYW5kbGUuaW5kZXhPZignaHR0cCcpID09PSAwKSkge1xuICAgIGlmICghc2Vzc2lvbi5hcGlrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXBpIGtleSBpcyByZXF1aXJlZCB3aGVuIHN0b3JhZ2UgYWxpYXMgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBhcGlrZXkgaXMgcmVxdWlyZWQgZm9yIGFsaWFzIG9yIGV4dGVybmFsIHNvdXJjZXMgY2FsbFxuICAgIHJldHVybiBgJHtjZG5VUkx9LyR7c2Vzc2lvbi5hcGlrZXl9YDtcbiAgfVxuXG4gIHJldHVybiBjZG5VUkw7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgYWxsIHVybHMgd2l0aCBwcm92aWRlZCBjbmFtZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybHNcbiAqIEBwYXJhbSBjbmFtZVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhvc3QgPSAodXJsczogSG9zdHMsIGNuYW1lOiBzdHJpbmcpOiBIb3N0cyA9PiB7XG4gIGlmICghY25hbWUpIHtcbiAgICByZXR1cm4gdXJscztcbiAgfVxuXG4gIGNvbnN0IGhvc3RzID0gL2ZpbGVzdGFja2FwaS5jb218ZmlsZXN0YWNrY29udGVudC5jb20vaTtcblxuICBPYmplY3Qua2V5cyh1cmxzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgdXJsc1trZXldID0gdXJsc1trZXldLnJlcGxhY2UoaG9zdHMsIGNuYW1lKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHVybHM7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgb3B0aW9ucyBmcm9tIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFbXB0eSA9IChvYmo6IGFueSkgPT4ge1xuICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goayA9PiAhbmV3T2JqW2tdICYmIHR5cGVvZiBuZXdPYmpba10gIT09ICdib29sZWFuJyAmJiBkZWxldGUgbmV3T2JqW2tdKTtcbiAgcmV0dXJuIG5ld09iajtcbn07XG5cbi8qKlxuICogUmV0dXJucyB1bmlxdWUgdGltZVxuICovXG5sZXQgbGFzdDtcbmV4cG9ydCBjb25zdCB1bmlxdWVUaW1lID0gKCkgPT4ge1xuICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgbGFzdCA9IHRpbWUgPT09IGxhc3QgPyB0aW1lICsgMSA6IHRpbWU7XG4gIHJldHVybiBsYXN0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgcmFuZG9tIHN0cmluZyB3aXRoIHByb3ZpZGVkIGxlbmd0aFxuICpcbiAqIEBwYXJhbSBsZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXF1ZUlkID0gKGxlbjogbnVtYmVyID0gMTApOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gbmV3IEFycmF5KGxlbikuam9pbigpLnJlcGxhY2UoLygufCQpL2csICgpID0+ICgoTWF0aC5yYW5kb20oKSAqIDM2KSB8IDApLnRvU3RyaW5nKDM2KVtNYXRoLnJhbmRvbSgpIDwgMC41ID8gJ3RvU3RyaW5nJyA6ICd0b1VwcGVyQ2FzZSddKCkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpbnB1dCBpcyBhIHN2Z1xuICpcbiAqIEBwYXJhbSB7VWludDhBcnJheSB8IEJ1ZmZlcn0gZmlsZVxuICogQHJldHVybnMge3N0cmluZ30gLSBtaW1ldHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0TWltZXR5cGUgPSAoZmlsZTogVWludDhBcnJheSB8IEJ1ZmZlciwgbmFtZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCB0eXBlID0gZmlsZVR5cGUoZmlsZSk7XG5cbiAgY29uc3QgZXhjbHVkZWRNaW1ldHlwZXMgPSBbJ3RleHQvcGxhaW4nLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgJ2FwcGxpY2F0aW9uL3gtbXMnLCAnYXBwbGljYXRpb24veC1tc2knLCAnYXBwbGljYXRpb24vemlwJ107XG5cbiAgaWYgKHR5cGUgJiYgZXhjbHVkZWRNaW1ldHlwZXMuaW5kZXhPZih0eXBlLm1pbWUpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlLm1pbWU7XG4gIH1cblxuICBpZiAobmFtZSAmJiBuYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgY29uc3QgbWltZSA9IGV4dGVuc2lvblRvTWltZShuYW1lKTtcblxuICAgIGlmIChtaW1lKSB7XG4gICAgICByZXR1cm4gbWltZTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChpc3V0ZjgoZmlsZSkpIHtcbiAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zb2xlLndhcm4oJ0FkZGl0aW9uYWwgbWltZXR5cGUgY2hlY2tzICh0ZXh0L3BsYWluKSBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGJyb3dzZXJzJyk7XG4gIH1cbiAgLy8gdGhpcyBpcyBvbmx5IGZhbGxiYWNrLCBvbWl0IGl0IGluIGNvdmVyYWdlXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgLy8gaWYgd2UgY2FudCBmaW5kIHR5cGVzIGJ5IGV4dGVuc2lvbnMgYW5kIHdlIGhhdmUgbWFnaWMgYnl0ZXMgZmFsbGJhY2sgdG8gaXRcbiAgaWYgKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZS5taW1lO1xuICB9XG5cbiAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgZXh0ZW5zaW9uIHRvIGFjY29yZGluZyBtaW1ldHlwZSB1c2luZyBleHQ9Pm1pbWV0eXBlIG1hcFxuICpcbiAqIEBwYXJhbSBleHQgLSBzdHJpbmdcbiAqIEByZXR1cm4gc3RyaW5nfGJvb2xlYW5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4dGVuc2lvblRvTWltZSA9IChleHQ6IHN0cmluZykgPT4ge1xuICBpZiAoIWV4dCB8fCBleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGV4dC5zcGxpdCgnLycpLmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiBleHQ7XG4gIH1cblxuICBpZiAoZXh0LmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgZXh0ID0gZXh0LnNwbGl0KCcuJykucG9wKCk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoRXh0ZW5zaW9uc01hcCk7XG4gIGNvbnN0IG1hcExlbiA9IGtleXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwTGVuOyBpKyspIHtcbiAgICBpZiAoRXh0ZW5zaW9uc01hcFtrZXlzW2ldXS5pbmRleE9mKGV4dCkgPiAtMSkge1xuICAgICAgcmV0dXJuIGtleXNbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuO1xufTtcblxuLyoqXG4gKiBTYW5pdGl6ZXIgT3B0aW9uc1xuICovXG5leHBvcnQgdHlwZSBTYW5pdGl6ZU9wdGlvbnMgPVxuICB8IGJvb2xlYW5cbiAgfCB7XG4gICAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICAgIHJlcGxhY2VtZW50Pzogc3RyaW5nO1xuICB9O1xuXG4vKipcbiAqIFNhbml0aXplIGZpbGUgbmFtZVxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0ge2Jvb2x9IG9wdGlvbnMgIC0gZW5hYmxlLGRpc2FibGUgc2FuaXRpemVyLCBkZWZhdWx0IGVuYWJsZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnJlcGxhY2VtZW50IC0gcmVwbGFjZW1lbnQgZm9yIHNhbml0aXplZCBjaGFycyBkZWZhdWx0cyB0byBcIi1cIlxuICogQHBhcmFtIHtzdHJpbmdbXX0gb3B0aW9ucy5leGNsdWRlIC0gYXJyYXkgd2l0aCBleGNsdWRlZCBjaGFycyBkZWZhdWx0IC0gWydcXCcsICd7JywgJ30nLCd8JywgJyUnLCAnYCcsICdcIicsIFwiJ1wiLCAnficsICdbJywgJ10nLCAnIycsICd8JywgJ14nLCAnPCcsICc+J11cbiAqL1xuZXhwb3J0IGNvbnN0IHNhbml0aXplTmFtZSA9IChuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFNhbml0aXplT3B0aW9ucyA9IHRydWUpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdib29sZWFuJyAmJiAhb3B0aW9ucykge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgbGV0IGV4dDtcblxuICBjb25zdCByZXBsYWNlbWVudCA9IHR5cGVvZiBvcHRpb25zICE9PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5yZXBsYWNlbWVudCA/IG9wdGlvbnMucmVwbGFjZW1lbnQgOiAnLSc7XG4gIGNvbnN0IGV4Y2x1ZGUgPSB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuZXhjbHVkZSA/IG9wdGlvbnMuZXhjbHVkZSA6IFsnXFxcXCcsICd7JywgJ30nLCAnfCcsICclJywgJ2AnLCAnXCInLCBcIidcIiwgJ34nLCAnWycsICddJywgJyMnLCAnfCcsICdeJywgJzwnLCAnPiddO1xuXG4gIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcblxuICBpZiAoZmlsZVBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBleHQgPSBmaWxlUGFydHMucG9wKCk7XG4gIH1cblxuICByZXR1cm4gYCR7ZmlsZVBhcnRzXG4gICAgLmpvaW4oJy4nKVxuICAgIC5zcGxpdCgnJylcbiAgICAubWFwKGNoYXIgPT4gKGV4Y2x1ZGUuaW5kZXhPZihjaGFyKSA+IC0xID8gcmVwbGFjZW1lbnQgOiBjaGFyKSlcbiAgICAuam9pbignJyl9JHtleHQgPyAnLicgKyBleHQgOiAnJ31gO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgb2JqZWN0IHRvIGdpdmVuIGZpZWxkc1xuICpcbiAqIEBwYXJhbSB0b0ZpbHRlclxuICogQHBhcmFtIHJlcXVpcmVkRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXJPYmplY3QgPSAodG9GaWx0ZXIsIHJlcXVpcmVkRmllbGRzOiBzdHJpbmdbXSkgPT4ge1xuICBpZiAoIXJlcXVpcmVkRmllbGRzIHx8IHJlcXVpcmVkRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0b0ZpbHRlcjtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh0b0ZpbHRlcikubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRvRmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRvRmlsdGVyKVxuICAgIC5maWx0ZXIoZiA9PiByZXF1aXJlZEZpZWxkcy5pbmRleE9mKGYpID4gLTEpXG4gICAgLnJlZHVjZSgob2JqLCBrZXkpID0+ICh7IC4uLm9iaiwgW2tleV06IHRvRmlsdGVyW2tleV0gfSksIHt9KTtcbn07XG5cbi8qKlxuICogRGVlcCBjbGVhbnVwIG9iamVjdCBmcm9tIGZ1bmN0aW9uc1xuICpcbiAqIEBwYXJhbSBvYmpcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFuVXBDYWxsYmFja3MgPSAob2JqOiBhbnkpID0+IHtcbiAgaWYgKCFvYmogfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqW2tdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvYmpba10gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKG9ialtrXSA9PT0gT2JqZWN0KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXSA9IGNsZWFuVXBDYWxsYmFja3Mob2JqW2tdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4Lm5vZGUnO1xuIl19

@@ -47,3 +47,3 @@ "use strict";

exports.getVersion = function () {
return 'JS-3.19.0';
return 'JS-3.20.0';
};

@@ -50,0 +50,0 @@ /**

@@ -23,3 +23,3 @@ "use strict";

it('should return version string to replace', function () {
expect(utils.getVersion()).toEqual("JS-3.19.0");
expect(utils.getVersion()).toEqual("JS-3.20.0");
});

@@ -26,0 +26,0 @@ });

@@ -158,2 +158,25 @@ "use strict";

});
describe('extensionToMime', function () {
it('should return mimetype if mime is passed', function () {
expect(index_1.extensionToMime('')).toEqual(undefined);
});
it('should return same mime is passed', function () {
expect(index_1.extensionToMime('image/png')).toEqual('image/png');
expect(index_1.extensionToMime('image/jpg')).toEqual('image/jpg');
expect(index_1.extensionToMime('application/pdf')).toEqual('application/pdf');
});
it('it should return correct mimes for ext', function () {
expect(index_1.extensionToMime('.png')).toEqual('image/png');
expect(index_1.extensionToMime('.jpg')).toEqual('image/jpeg');
expect(index_1.extensionToMime('.pdf')).toEqual('application/pdf');
expect(index_1.extensionToMime('.key')).toEqual('application/vnd.apple.keynote');
expect(index_1.extensionToMime('.zip')).toEqual('application/zip');
expect(index_1.extensionToMime('.numbers')).toEqual('application/vnd.apple.numbers');
});
it('it should extract extensions form filename or ext with dot', function () {
expect(index_1.extensionToMime('test.png')).toEqual('image/png');
expect(index_1.extensionToMime('test.jpg')).toEqual('image/jpeg');
expect(index_1.extensionToMime('test.pdf')).toEqual('application/pdf');
});
});
describe('CleanupCallbacks', function () {

@@ -184,2 +207,2 @@ it('should set callbacks as undefined and return untouched object', function () {

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXguc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILGlDQUE0SjtBQUM1Six1Q0FBc0M7QUFDdEMsSUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBRXRELFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLGVBQWUsRUFBRTtRQUV4QixJQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLElBQUksRUFBRSxlQUFNLENBQUMsSUFBSTtTQUNsQixDQUFDO1FBRUYsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1lBQ3ZELElBQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDO1lBQ3RDLElBQU0sTUFBTSxHQUFHLHFCQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxJQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQztZQUN4QyxJQUFNLE1BQU0sR0FBRyxxQkFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsSUFBTSxNQUFNLEdBQUcsdUhBQXVILENBQUM7WUFDdkksSUFBTSxNQUFNLEdBQUcscUJBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQywr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QUFJLEVBQUUsRUFBRTtnQkFDUixLQUFLLEVBQUUsR0FBRztnQkFDVixLQUFLLEVBQUUsUUFBUTtnQkFDZixPQUFPLEVBQUU7b0JBQ1AsR0FBRyxFQUFFLEdBQUc7aUJBQ1Q7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoibGliL3V0aWxzL2luZGV4LnNwZWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IGJ5IEZpbGVzdGFjay5cbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgcmVzb2x2ZUNkblVybCwgcmVzb2x2ZUhvc3QsIHJlbW92ZUVtcHR5LCB1bmlxdWVUaW1lLCB1bmlxdWVJZCwgbWQ1LCBzYW5pdGl6ZU5hbWUsIGZpbHRlck9iamVjdCwgYjY0LCBnZXRWZXJzaW9uLCBjbGVhblVwQ2FsbGJhY2tzIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuY29uc3QgdiA9IHJlcXVpcmUoJy4uLy4uLy4uLy4uL3BhY2thZ2UuanNvbicpLnZlcnNpb247XG5cbmRlc2NyaWJlKCd1dGlsczppbmRleCcsICgpID0+IHtcbiAgZGVzY3JpYmUoJ3Jlc29sdmVDZG5VcmwnLCAoKSA9PiB7XG5cbiAgICBjb25zdCBzZXNzaW9uID0ge1xuICAgICAgYXBpa2V5OiAnVEVTVF9BUElfS0VZJyxcbiAgICAgIGNuYW1lOiAnZXhhbXBsZS5jb20nLFxuICAgICAgdXJsczogY29uZmlnLnVybHMsXG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgcHJvcGVybHkgcmVzb2x2ZSBjZG4gdXJsIHdpdGggaGFzaGVkIGhhbmRsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9ICc1YVlrRVFKU1FDbVlTaHNvQ25aTic7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlQ2RuVXJsKHNlc3Npb24sIGhhbmRsZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKCdodHRwczovL2Nkbi5maWxlc3RhY2tjb250ZW50LmNvbScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9wZXJseSByZXNvbHZlIGNkbiB1cmwgd2l0aCBzcmMgaGFuZGxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlID0gJ3NyYzovL3Rlc3QxMjMvdGVzdC5qcGcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUNkblVybChzZXNzaW9uLCBoYW5kbGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnaHR0cHM6Ly9jZG4uZmlsZXN0YWNrY29udGVudC5jb20vVEVTVF9BUElfS0VZJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHJlc29sdmUgY2RuIHVybCB3aXRoIGhhc2hlZCBoYW5kbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSAnaHR0cHM6Ly9zdGF0aWMxLnNxdWFyZXNwYWNlLmNvbS9zdGF0aWMvNTQ0ZWIzY2NlNGIwZWYwOTE3NzM2MTFmL3QvNTliYTdjZTFiZDEwZjAwZGNkYzgwYTVmLzE1MDUzOTQwODczNjcvRFNDXzA1MjcuanBnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVDZG5Vcmwoc2Vzc2lvbiwgaGFuZGxlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ2h0dHBzOi8vY2RuLmZpbGVzdGFja2NvbnRlbnQuY29tL1RFU1RfQVBJX0tFWScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBhbiBlcnJvciB3aGVuIHVzaW5nIHNyYyBoYW5kbGUgb3IgdXJsIHdpdGhvdXQgYXBpa2V5JywgKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlID0gJ3NyYzovL3Rlc3QxMjMvdGVzdC5qcGcnO1xuICAgICAgc2Vzc2lvbi5hcGlrZXkgPSAnJztcbiAgICAgIGV4cGVjdCgoKSA9PiB7IHJlc29sdmVDZG5Vcmwoc2Vzc2lvbiwgaGFuZGxlKTsgfSkudG9UaHJvdygnQXBpIGtleSBpcyByZXF1aXJlZCB3aGVuIHN0b3JhZ2UgYWxpYXMgaXMgcHJvdmlkZWQnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Jlc29sdmVIb3N0JywgKCkgPT4ge1xuICAgIGNvbnN0IGhvc3RzID0gY29uZmlnLnVybHM7XG5cbiAgICBjb25zdCBjaGVja0hvc3RzID0gKGhvc3RzLCBleHBlY3RlZCkgPT4ge1xuICAgICAgT2JqZWN0LmtleXMoaG9zdHMpLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgZXhwZWN0KGhvc3RzW2tdLmluZGV4T2YoZXhwZWN0ZWQpID4gLTEpLnRvQmVUcnV0aHkoKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBwcm9wZXIgaG9zdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGNuYW1lID0gJ2V4YW1wbGUuY29tJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVIb3N0KGhvc3RzLCBjbmFtZSk7XG4gICAgICBjaGVja0hvc3RzKHJlc3VsdCwgY25hbWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gaG9zdHMgd2hlbiBjbmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjbmFtZSA9ICcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUhvc3QoaG9zdHMsIGNuYW1lKTtcbiAgICAgIGNoZWNrSG9zdHMocmVzdWx0LCBjbmFtZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZW1vdmVFbXB0eScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJlbW92ZSBlbXB0eSBvcHRpb25zIGZyb20gYW4gb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdE9iID0geyB0ZXN0MTogdHJ1ZSwgdGVzdDI6IHVuZGVmaW5lZCwgdGVzdDM6IGZhbHNlIH07XG4gICAgICBleHBlY3QocmVtb3ZlRW1wdHkodGVzdE9iKSkudG9FcXVhbCh7IHRlc3QxOiB0cnVlLCB0ZXN0MzogZmFsc2UgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1bmlxdWVUaW1lJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuaXF1ZSB0aW1lcycsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1bmlxdWVUaW1lKCkpLm5vdC50b0VxdWFsKHVuaXF1ZVRpbWUoKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCd1bmlxdWVJZCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGdldCBkaWZmZXJlbnQgaWRzIGVhY2ggdGltZScsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1bmlxdWVJZCgpKS5ub3QudG9FcXVhbCh1bmlxdWVJZCgpKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGlkIHdpdGggZ2l2ZW4gbGVuZ3RoJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVuaXF1ZUlkKDEyKS5sZW5ndGgpLnRvRXF1YWwoMTIpO1xuICAgICAgZXhwZWN0KHVuaXF1ZUlkKDQpLmxlbmd0aCkudG9FcXVhbCg0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ21kNScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IG1kNSB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChtZDUoQnVmZmVyLmZyb20oJ3Rlc3QnKSkpLnRvRXF1YWwoJ0NZOXJ6VVloMDNQSzNrNkRKaWUwOWc9PScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VmVyc2lvbicsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IHZlcnNpb24gZnJvbSBwYWNrYWdlIGpzb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0VmVyc2lvbigpKS50b0VxdWFsKGBKUy0ke3Z9YCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdiNjQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ycmVjdCBiNjUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoYjY0KCd0ZXN0dGV4dCcpKS50b0VxdWFsKCdkR1Z6ZEhSbGVIUT0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXNjYXBlIGNoYXJzIHRvIG1ha2UgYjY0IHVybCBzYWZlIHN0cmluZyAtIGNoYXIgXCIvXCInLCAoKSA9PiB7XG4gICAgICBleHBlY3QoYjY0KCcqMGVpakFUaCNcIkkkUFIpczx1VGF9e3Q+RVwiTEM6TCcsIHRydWUpKS50b0VxdWFsKCdLakJsYVdwQlZHZ2pJa2trVUZJcGN6eDFWR0Y5ZTNRLVJTSk1RenBNJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVzY2FwZSBjaGFycyB0byBtYWtlIGI2NCB1cmwgc2FmZSBzdHJpbmcgLSBjaGFyIFwiXCInLCAoKSA9PiB7XG4gICAgICBleHBlY3QoYjY0KCdXe3dwQkBja1lEME9AJj8hfHw5UFMpN14rRipIOE4nLCB0cnVlKSkudG9FcXVhbCgnVjN0M2NFSkFZMnRaUkRCUFFDWV9JWHg4T1ZCVEtUZGVLMFlxU0RoTycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc2FuaXRpemVOYW1lJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2FuaXRpemUgZmlsZSBuYW1lIHdpdGggZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnYVxcXFx7JWBcIn5bXSN8Xjw+MS5qcGcnKSkudG9FcXVhbCgnYS0tLS0tLS0tLS0tLS0xLmpwZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBzYW5pdGl6ZSBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCcxMjNxd2UnKSkudG9FcXVhbCgnMTIzcXdlJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgb24gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnJykpLnRvRXF1YWwoJ3VuZGVmaW5lZCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXNwZWN0IHNhbml0aXplIG9wdGlvbnMgYXMgYm9vbGVhbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJ1tdI3wuanBnJywgZmFsc2UpKS50b0VxdWFsKCdbXSN8LmpwZycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgY2hhbmdlIGRvdHMgaW4gZmlsZW5hbWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCdbXSNzb21lLnRhci5neicsIGZhbHNlKSkudG9FcXVhbCgnW10jc29tZS50YXIuZ3onKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzcGVjdCBzYW5pdGl6ZSBvcHRpb25zIHdpdGggcHJvdmlkZWQgb3B0aW9ucycsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJ1tdI3wuanBnJywge1xuICAgICAgICBleGNsdWRlOiBbJ1snLCAnXSddLFxuICAgICAgICByZXBsYWNlbWVudDogJ18nLFxuICAgICAgfSkpLnRvRXF1YWwoJ19fI3wuanBnJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdmaWx0ZXJPYmplY3QnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBmaWx0ZXIgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZpbHRlck9iamVjdCh7XG4gICAgICAgIHRlc3Q6IDEsXG4gICAgICAgIHRlc3QyOiAyLFxuICAgICAgICB0ZXN0MzogMyxcbiAgICAgIH0sIFsndGVzdCcsICd0ZXN0MiddKSkudG9FcXVhbCh7XG4gICAgICAgIHRlc3Q6IDEsXG4gICAgICAgIHRlc3QyOiAyLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlc3VsdCB0aGUgc2FtZSBvYmplY3Qgb24gZW1wdHkgcmVxdWlyZW1lbnRzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZpbHRlck9iamVjdCh7XG4gICAgICAgIHRlc3Q6IDEsXG4gICAgICAgIHRlc3QyOiAyLFxuICAgICAgICB0ZXN0MzogMyxcbiAgICAgIH0sIFtdKSkudG9FcXVhbCh7XG4gICAgICAgIHRlc3Q6IDEsXG4gICAgICAgIHRlc3QyOiAyLFxuICAgICAgICB0ZXN0MzogMyxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBub3QgdGhyb3cgb24gZW1wdHkgZmlsdGVyZWQgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGZpbHRlck9iamVjdCh7fSwgWyd0ZXN0J10pKS50b0VxdWFsKHt9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NsZWFudXBDYWxsYmFja3MnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgY2FsbGJhY2tzIGFzIHVuZGVmaW5lZCBhbmQgcmV0dXJuIHVudG91Y2hlZCBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0T2JqID0ge1xuICAgICAgICBmbjogKCkgPT4gMSxcbiAgICAgICAgdGVzdDoge1xuICAgICAgICAgIGZuMjogKCkgPT4gMixcbiAgICAgICAgfSxcbiAgICAgICAgdGVzdE46IDEyMyxcbiAgICAgICAgdGVzdHM6ICdzdHJpbmcnLFxuICAgICAgICB0ZXN0T2JqOiB7XG4gICAgICAgICAgdHN0OiAxMjMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBleHBlY3QoY2xlYW5VcENhbGxiYWNrcyh0ZXN0T2JqKSkudG9FcXVhbCh7XG4gICAgICAgIHRlc3Q6IHt9LFxuICAgICAgICB0ZXN0TjogMTIzLFxuICAgICAgICB0ZXN0czogJ3N0cmluZycsXG4gICAgICAgIHRlc3RPYmo6IHtcbiAgICAgICAgICB0c3Q6IDEyMyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXguc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILGlDQUE2SztBQUM3Syx1Q0FBc0M7QUFDdEMsSUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBRXRELFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLGVBQWUsRUFBRTtRQUV4QixJQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLElBQUksRUFBRSxlQUFNLENBQUMsSUFBSTtTQUNsQixDQUFDO1FBRUYsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1lBQ3ZELElBQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDO1lBQ3RDLElBQU0sTUFBTSxHQUFHLHFCQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxJQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQztZQUN4QyxJQUFNLE1BQU0sR0FBRyxxQkFBYSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLCtDQUErQyxDQUFDLENBQUM7UUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsSUFBTSxNQUFNLEdBQUcsdUhBQXVILENBQUM7WUFDdkksSUFBTSxNQUFNLEdBQUcscUJBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQywr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RUFBRTtZQUNsRSxJQUFNLE9BQU8sR0FBRztnQkFDZCxFQUFFLEVBQUUsY0FBTSxPQUFBLENBQUMsRUFBRCxDQUFDO2dCQUNYLElBQUksRUFBRTtvQkFDSixHQUFHLEVBQUUsY0FBTSxPQUFBLENBQUMsRUFBRCxDQUFDO2lCQUNiO2dCQUNELEtBQUssRUFBRSxHQUFHO2dCQUNWLEtBQUssRUFBRSxRQUFRO2dCQUNmLE9BQU8sRUFBRTtvQkFDUCxHQUFHLEVBQUUsR0FBRztpQkFDVDthQUNGLENBQUM7WUFFRixNQUFNLENBQUMsd0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7Z0JBQ3hDLElBQUksRUFBRSxFQUFFO2dCQUNSLEtBQUssRUFBRSxHQUFHO2dCQUNWLEtBQUssRUFBRSxRQUFRO2dCQUNmLE9BQU8sRUFBRTtvQkFDUCxHQUFHLEVBQUUsR0FBRztpQkFDVDthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJsaWIvdXRpbHMvaW5kZXguc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTkgYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyByZXNvbHZlQ2RuVXJsLCByZXNvbHZlSG9zdCwgcmVtb3ZlRW1wdHksIHVuaXF1ZVRpbWUsIHVuaXF1ZUlkLCBtZDUsIGV4dGVuc2lvblRvTWltZSwgc2FuaXRpemVOYW1lLCBmaWx0ZXJPYmplY3QsIGI2NCwgZ2V0VmVyc2lvbiwgY2xlYW5VcENhbGxiYWNrcyB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmNvbnN0IHYgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG5kZXNjcmliZSgndXRpbHM6aW5kZXgnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdyZXNvbHZlQ2RuVXJsJywgKCkgPT4ge1xuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGFwaWtleTogJ1RFU1RfQVBJX0tFWScsXG4gICAgICBjbmFtZTogJ2V4YW1wbGUuY29tJyxcbiAgICAgIHVybHM6IGNvbmZpZy51cmxzLFxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHJlc29sdmUgY2RuIHVybCB3aXRoIGhhc2hlZCBoYW5kbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSAnNWFZa0VRSlNRQ21ZU2hzb0NuWk4nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUNkblVybChzZXNzaW9uLCBoYW5kbGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnaHR0cHM6Ly9jZG4uZmlsZXN0YWNrY29udGVudC5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvcGVybHkgcmVzb2x2ZSBjZG4gdXJsIHdpdGggc3JjIGhhbmRsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9ICdzcmM6Ly90ZXN0MTIzL3Rlc3QuanBnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVDZG5Vcmwoc2Vzc2lvbiwgaGFuZGxlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ2h0dHBzOi8vY2RuLmZpbGVzdGFja2NvbnRlbnQuY29tL1RFU1RfQVBJX0tFWScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9wZXJseSByZXNvbHZlIGNkbiB1cmwgd2l0aCBoYXNoZWQgaGFuZGxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlID0gJ2h0dHBzOi8vc3RhdGljMS5zcXVhcmVzcGFjZS5jb20vc3RhdGljLzU0NGViM2NjZTRiMGVmMDkxNzczNjExZi90LzU5YmE3Y2UxYmQxMGYwMGRjZGM4MGE1Zi8xNTA1Mzk0MDg3MzY3L0RTQ18wNTI3LmpwZyc7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlQ2RuVXJsKHNlc3Npb24sIGhhbmRsZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKCdodHRwczovL2Nkbi5maWxlc3RhY2tjb250ZW50LmNvbS9URVNUX0FQSV9LRVknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB1c2luZyBzcmMgaGFuZGxlIG9yIHVybCB3aXRob3V0IGFwaWtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9ICdzcmM6Ly90ZXN0MTIzL3Rlc3QuanBnJztcbiAgICAgIHNlc3Npb24uYXBpa2V5ID0gJyc7XG4gICAgICBleHBlY3QoKCkgPT4geyByZXNvbHZlQ2RuVXJsKHNlc3Npb24sIGhhbmRsZSk7IH0pLnRvVGhyb3coJ0FwaSBrZXkgaXMgcmVxdWlyZWQgd2hlbiBzdG9yYWdlIGFsaWFzIGlzIHByb3ZpZGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZXNvbHZlSG9zdCcsICgpID0+IHtcbiAgICBjb25zdCBob3N0cyA9IGNvbmZpZy51cmxzO1xuXG4gICAgY29uc3QgY2hlY2tIb3N0cyA9IChob3N0cywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIE9iamVjdC5rZXlzKGhvc3RzKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGV4cGVjdChob3N0c1trXS5pbmRleE9mKGV4cGVjdGVkKSA+IC0xKS50b0JlVHJ1dGh5KCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvcGVyIGhvc3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjbmFtZSA9ICdleGFtcGxlLmNvbSc7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlSG9zdChob3N0cywgY25hbWUpO1xuICAgICAgY2hlY2tIb3N0cyhyZXN1bHQsIGNuYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGhvc3RzIHdoZW4gY25hbWUgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgY25hbWUgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVIb3N0KGhvc3RzLCBjbmFtZSk7XG4gICAgICBjaGVja0hvc3RzKHJlc3VsdCwgY25hbWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlRW1wdHknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgZW1wdHkgb3B0aW9ucyBmcm9tIGFuIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3RPYiA9IHsgdGVzdDE6IHRydWUsIHRlc3QyOiB1bmRlZmluZWQsIHRlc3QzOiBmYWxzZSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZUVtcHR5KHRlc3RPYikpLnRvRXF1YWwoeyB0ZXN0MTogdHJ1ZSwgdGVzdDM6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndW5pcXVlVGltZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmlxdWUgdGltZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodW5pcXVlVGltZSgpKS5ub3QudG9FcXVhbCh1bmlxdWVUaW1lKCkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndW5pcXVlSWQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgZGlmZmVyZW50IGlkcyBlYWNoIHRpbWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodW5pcXVlSWQoKSkubm90LnRvRXF1YWwodW5pcXVlSWQoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBpZCB3aXRoIGdpdmVuIGxlbmd0aCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1bmlxdWVJZCgxMikubGVuZ3RoKS50b0VxdWFsKDEyKTtcbiAgICAgIGV4cGVjdCh1bmlxdWVJZCg0KS5sZW5ndGgpLnRvRXF1YWwoNCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtZDUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ycmVjdCBtZDUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QobWQ1KEJ1ZmZlci5mcm9tKCd0ZXN0JykpKS50b0VxdWFsKCdDWTlyelVZaDAzUEszazZESmllMDlnPT0nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFZlcnNpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ycmVjdCB2ZXJzaW9uIGZyb20gcGFja2FnZSBqc29uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldFZlcnNpb24oKSkudG9FcXVhbChgSlMtJHt2fWApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYjY0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3QgYjY1IHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGI2NCgndGVzdHRleHQnKSkudG9FcXVhbCgnZEdWemRIUmxlSFE9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVzY2FwZSBjaGFycyB0byBtYWtlIGI2NCB1cmwgc2FmZSBzdHJpbmcgLSBjaGFyIFwiL1wiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGI2NCgnKjBlaWpBVGgjXCJJJFBSKXM8dVRhfXt0PkVcIkxDOkwnLCB0cnVlKSkudG9FcXVhbCgnS2pCbGFXcEJWR2dqSWtra1VGSXBjengxVkdGOWUzUS1SU0pNUXpwTScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlc2NhcGUgY2hhcnMgdG8gbWFrZSBiNjQgdXJsIHNhZmUgc3RyaW5nIC0gY2hhciBcIlwiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGI2NCgnV3t3cEJAY2tZRDBPQCY/IXx8OVBTKTdeK0YqSDhOJywgdHJ1ZSkpLnRvRXF1YWwoJ1YzdDNjRUpBWTJ0WlJEQlBRQ1lfSVh4OE9WQlRLVGRlSzBZcVNEaE8nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nhbml0aXplTmFtZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNhbml0aXplIGZpbGUgbmFtZSB3aXRoIGV4dGVuc2lvbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJ2FcXFxceyVgXCJ+W10jfF48PjEuanBnJykpLnRvRXF1YWwoJ2EtLS0tLS0tLS0tLS0tMS5qcGcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2FuaXRpemUgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnMTIzcXdlJykpLnRvRXF1YWwoJzEyM3F3ZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIG9uIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJycpKS50b0VxdWFsKCd1bmRlZmluZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzcGVjdCBzYW5pdGl6ZSBvcHRpb25zIGFzIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCdbXSN8LmpwZycsIGZhbHNlKSkudG9FcXVhbCgnW10jfC5qcGcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGNoYW5nZSBkb3RzIGluIGZpbGVuYW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnW10jc29tZS50YXIuZ3onLCBmYWxzZSkpLnRvRXF1YWwoJ1tdI3NvbWUudGFyLmd6Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlc3BlY3Qgc2FuaXRpemUgb3B0aW9ucyB3aXRoIHByb3ZpZGVkIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCdbXSN8LmpwZycsIHtcbiAgICAgICAgZXhjbHVkZTogWydbJywgJ10nXSxcbiAgICAgICAgcmVwbGFjZW1lbnQ6ICdfJyxcbiAgICAgIH0pKS50b0VxdWFsKCdfXyN8LmpwZycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmlsdGVyT2JqZWN0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZmlsdGVyIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWx0ZXJPYmplY3Qoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgICAgdGVzdDM6IDMsXG4gICAgICB9LCBbJ3Rlc3QnLCAndGVzdDInXSkpLnRvRXF1YWwoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXN1bHQgdGhlIHNhbWUgb2JqZWN0IG9uIGVtcHR5IHJlcXVpcmVtZW50cycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWx0ZXJPYmplY3Qoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgICAgdGVzdDM6IDMsXG4gICAgICB9LCBbXSkpLnRvRXF1YWwoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgICAgdGVzdDM6IDMsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHRocm93IG9uIGVtcHR5IGZpbHRlcmVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWx0ZXJPYmplY3Qoe30sIFsndGVzdCddKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHRlbnNpb25Ub01pbWUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gbWltZXR5cGUgaWYgbWltZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCcnKSkudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gc2FtZSBtaW1lIGlzIHBhc3NlZCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJ2ltYWdlL3BuZycpKS50b0VxdWFsKCdpbWFnZS9wbmcnKTtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJ2ltYWdlL2pwZycpKS50b0VxdWFsKCdpbWFnZS9qcGcnKTtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJ2FwcGxpY2F0aW9uL3BkZicpKS50b0VxdWFsKCdhcHBsaWNhdGlvbi9wZGYnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpdCBzaG91bGQgcmV0dXJuIGNvcnJlY3QgbWltZXMgZm9yIGV4dCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJy5wbmcnKSkudG9FcXVhbCgnaW1hZ2UvcG5nJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCcuanBnJykpLnRvRXF1YWwoJ2ltYWdlL2pwZWcnKTtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJy5wZGYnKSkudG9FcXVhbCgnYXBwbGljYXRpb24vcGRmJyk7XG5cbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJy5rZXknKSkudG9FcXVhbCgnYXBwbGljYXRpb24vdm5kLmFwcGxlLmtleW5vdGUnKTtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJy56aXAnKSkudG9FcXVhbCgnYXBwbGljYXRpb24vemlwJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCcubnVtYmVycycpKS50b0VxdWFsKCdhcHBsaWNhdGlvbi92bmQuYXBwbGUubnVtYmVycycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ2l0IHNob3VsZCBleHRyYWN0IGV4dGVuc2lvbnMgZm9ybSBmaWxlbmFtZSBvciBleHQgd2l0aCBkb3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCd0ZXN0LnBuZycpKS50b0VxdWFsKCdpbWFnZS9wbmcnKTtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJ3Rlc3QuanBnJykpLnRvRXF1YWwoJ2ltYWdlL2pwZWcnKTtcbiAgICAgIGV4cGVjdChleHRlbnNpb25Ub01pbWUoJ3Rlc3QucGRmJykpLnRvRXF1YWwoJ2FwcGxpY2F0aW9uL3BkZicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ2xlYW51cENhbGxiYWNrcycsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNldCBjYWxsYmFja3MgYXMgdW5kZWZpbmVkIGFuZCByZXR1cm4gdW50b3VjaGVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3RPYmogPSB7XG4gICAgICAgIGZuOiAoKSA9PiAxLFxuICAgICAgICB0ZXN0OiB7XG4gICAgICAgICAgZm4yOiAoKSA9PiAyLFxuICAgICAgICB9LFxuICAgICAgICB0ZXN0TjogMTIzLFxuICAgICAgICB0ZXN0czogJ3N0cmluZycsXG4gICAgICAgIHRlc3RPYmo6IHtcbiAgICAgICAgICB0c3Q6IDEyMyxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGV4cGVjdChjbGVhblVwQ2FsbGJhY2tzKHRlc3RPYmopKS50b0VxdWFsKHtcbiAgICAgICAgdGVzdDoge30sXG4gICAgICAgIHRlc3ROOiAxMjMsXG4gICAgICAgIHRlc3RzOiAnc3RyaW5nJyxcbiAgICAgICAgdGVzdE9iajoge1xuICAgICAgICAgIHRzdDogMTIzLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=

@@ -20,3 +20,3 @@ /*

*/
var PICKER_VERSION = '1.19.0';
var PICKER_VERSION = '1.19.1';
export var config = {

@@ -33,2 +33,2 @@ urls: {

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7O0dBRUc7QUFDSCxJQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFzQmhDLE1BQU0sQ0FBQyxJQUFNLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUU7UUFDSixVQUFVLEVBQUUsa0NBQWtDO1FBQzlDLFVBQVUsRUFBRSx1Q0FBdUM7UUFDbkQsWUFBWSxFQUFFLGlDQUFpQztRQUMvQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLE1BQU0sRUFBRSxrQ0FBa0M7UUFDMUMsU0FBUyxFQUFFLDRDQUEwQyxjQUFjLGVBQVk7S0FDaEY7Q0FDRixDQUFDIiwiZmlsZSI6ImNvbmZpZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgUElDS0VSX1ZFUlNJT04gPSAnMS4xOS4wJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RzIHtcbiAgW3VybDogc3RyaW5nXTogc3RyaW5nO1xuICBmaWxlQXBpVXJsOiBzdHJpbmc7XG4gIHVwbG9hZEFwaVVybDogc3RyaW5nO1xuICBjbG91ZEFwaVVybDogc3RyaW5nO1xuICBjZG5Vcmw6IHN0cmluZztcbiAgcGlja2VyVXJsOiBzdHJpbmc7XG4gIHByb2Nlc3NVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZyB7XG4gIHVybHM6IEhvc3RzO1xufVxuXG5leHBvcnQgY29uc3QgY29uZmlnID0ge1xuICB1cmxzOiB7XG4gICAgcHJvY2Vzc1VybDogJ2h0dHBzOi8vcHJvY2Vzcy5maWxlc3RhY2thcGkuY29tJyxcbiAgICBmaWxlQXBpVXJsOiAnaHR0cHM6Ly93d3cuZmlsZXN0YWNrYXBpLmNvbS9hcGkvZmlsZScsXG4gICAgdXBsb2FkQXBpVXJsOiAnaHR0cHM6Ly91cGxvYWQuZmlsZXN0YWNrYXBpLmNvbScsXG4gICAgY2xvdWRBcGlVcmw6ICdodHRwczovL2Nsb3VkLmZpbGVzdGFja2FwaS5jb20nLFxuICAgIGNkblVybDogJ2h0dHBzOi8vY2RuLmZpbGVzdGFja2NvbnRlbnQuY29tJyxcbiAgICBwaWNrZXJVcmw6IGBodHRwczovL3N0YXRpYy5maWxlc3RhY2thcGkuY29tL3BpY2tlci8ke1BJQ0tFUl9WRVJTSU9OfS9waWNrZXIuanNgLFxuICB9LFxufTtcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7O0dBRUc7QUFDSCxJQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFzQmhDLE1BQU0sQ0FBQyxJQUFNLE1BQU0sR0FBRztJQUNwQixJQUFJLEVBQUU7UUFDSixVQUFVLEVBQUUsa0NBQWtDO1FBQzlDLFVBQVUsRUFBRSx1Q0FBdUM7UUFDbkQsWUFBWSxFQUFFLGlDQUFpQztRQUMvQyxXQUFXLEVBQUUsZ0NBQWdDO1FBQzdDLE1BQU0sRUFBRSxrQ0FBa0M7UUFDMUMsU0FBUyxFQUFFLDRDQUEwQyxjQUFjLGVBQVk7S0FDaEY7Q0FDRixDQUFDIiwiZmlsZSI6ImNvbmZpZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgUElDS0VSX1ZFUlNJT04gPSAnMS4xOS4xJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhvc3RzIHtcbiAgW3VybDogc3RyaW5nXTogc3RyaW5nO1xuICBmaWxlQXBpVXJsOiBzdHJpbmc7XG4gIHVwbG9hZEFwaVVybDogc3RyaW5nO1xuICBjbG91ZEFwaVVybDogc3RyaW5nO1xuICBjZG5Vcmw6IHN0cmluZztcbiAgcGlja2VyVXJsOiBzdHJpbmc7XG4gIHByb2Nlc3NVcmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZyB7XG4gIHVybHM6IEhvc3RzO1xufVxuXG5leHBvcnQgY29uc3QgY29uZmlnID0ge1xuICB1cmxzOiB7XG4gICAgcHJvY2Vzc1VybDogJ2h0dHBzOi8vcHJvY2Vzcy5maWxlc3RhY2thcGkuY29tJyxcbiAgICBmaWxlQXBpVXJsOiAnaHR0cHM6Ly93d3cuZmlsZXN0YWNrYXBpLmNvbS9hcGkvZmlsZScsXG4gICAgdXBsb2FkQXBpVXJsOiAnaHR0cHM6Ly91cGxvYWQuZmlsZXN0YWNrYXBpLmNvbScsXG4gICAgY2xvdWRBcGlVcmw6ICdodHRwczovL2Nsb3VkLmZpbGVzdGFja2FwaS5jb20nLFxuICAgIGNkblVybDogJ2h0dHBzOi8vY2RuLmZpbGVzdGFja2NvbnRlbnQuY29tJyxcbiAgICBwaWNrZXJVcmw6IGBodHRwczovL3N0YXRpYy5maWxlc3RhY2thcGkuY29tL3BpY2tlci8ke1BJQ0tFUl9WRVJTSU9OfS9waWNrZXIuanNgLFxuICB9LFxufTtcbiJdfQ==

@@ -26,3 +26,3 @@ import { SecurityOptions, getSecurity, validateWebhookSignature, WebhookValidatePayload } from './lib/api/security';

*/
export declare const version = "3.19.0";
export declare const version = "3.20.0";
export * from './lib/api/transform';

@@ -29,0 +29,0 @@ export * from './lib/filelink';

@@ -39,4 +39,4 @@ /*

*/
export var version = '3.19.0';
registerModule(FILESTACK_MODULES.FILESTACK_SDK, Filestack, { version: '3.19.0' });
export var version = '3.20.0';
registerModule(FILESTACK_MODULES.FILESTACK_SDK, Filestack, { version: '3.20.0' });
export * from './lib/api/transform';

@@ -43,0 +43,0 @@ export * from './lib/filelink';

@@ -5,2 +5,3 @@ import { EventEmitter } from 'eventemitter3';

import { TransformOptions } from './api/transform';
import * as Utils from './utils';
import { InputFile, UploadOptions, StoreUploadOptions, UploadTags } from './api/upload';

@@ -71,2 +72,9 @@ import { PreviewOptions } from './api/preview';

private forwardErrors;
/**
* Returns filestack utils
*
* @readonly
* @memberof Client
*/
get utils(): typeof Utils;
constructor(apikey: string, options?: ClientOptions);

@@ -73,0 +81,0 @@ /**

@@ -25,3 +25,3 @@ /*

import { storeURL } from './api/store';
import { resolveHost, getVersion } from './utils';
import * as Utils from './utils';
import { Upload } from './api/upload';

@@ -62,3 +62,3 @@ import { preview } from './api/preview';

scope.setTag('apikey', apikey);
scope.setTag('sdk-version', getVersion());
scope.setTag('sdk-version', Utils.getVersion());
scope.setExtra('clientOptions', options);

@@ -80,2 +80,15 @@ });

}
Object.defineProperty(Client.prototype, "utils", {
/**
* Returns filestack utils
*
* @readonly
* @memberof Client
*/
get: function () {
return Utils;
},
enumerable: true,
configurable: true
});
/**

@@ -116,3 +129,3 @@ * Make basic prefetch request to check permissions

this.session.cname = cname;
this.session.urls = resolveHost(this.session.urls, cname);
this.session.urls = Utils.resolveHost(this.session.urls, cname);
};

@@ -370,4 +383,4 @@ /**

Sentry.withScope(function (scope) {
scope.setExtras(e.details);
scope.setExtras({ uploadOptions: options, storeOptions: storeOptions });
scope.setExtras({ uploadOptions: options, storeOptions: storeOptions, details: e.details });
e.message = "FS-" + e.message;
Sentry.captureException(e);

@@ -437,2 +450,2 @@ });

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSxFQUFFLFFBQVEsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDMUYsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQTRELE1BQU0sY0FBYyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBcUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3RSxPQUFPLEVBQUUsTUFBTSxFQUFpQyxNQUFNLFVBQVUsQ0FBQztBQUVqRSwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztBQTZDN0U7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0g7SUFBNEIsMEJBQVk7SUFPdEMsZ0JBQVksTUFBYyxFQUFFLE9BQXVCO1FBQW5ELFlBQ0UsaUJBQU8sU0E2QlI7UUFoQ08sbUJBQWEsR0FBWSxJQUFJLENBQUM7UUFLcEMsd0JBQXdC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RUFBRSxDQUFDLENBQUM7Z0JBQzFELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUVILEtBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDSCxhQUFDO0FBQUQsQ0F0WkEsQUFzWkMsQ0F0WjJCLFlBQVksR0FzWnZDIiwiZmlsZSI6ImxpYi9jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvbWluaW1hbCc7XG5pbXBvcnQgeyBjb25maWcsIEhvc3RzIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IEZpbGVzdGFja0Vycm9yIH0gZnJvbSAnLi8uLi9maWxlc3RhY2tfZXJyb3InO1xuaW1wb3J0IHsgbWV0YWRhdGEsIE1ldGFkYXRhT3B0aW9ucywgcmVtb3ZlLCByZXRyaWV2ZSwgUmV0cmlldmVPcHRpb25zIH0gZnJvbSAnLi9hcGkvZmlsZSc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0sIFRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICcuL2FwaS90cmFuc2Zvcm0nO1xuaW1wb3J0IHsgc3RvcmVVUkwgfSBmcm9tICcuL2FwaS9zdG9yZSc7XG5pbXBvcnQgeyByZXNvbHZlSG9zdCwgZ2V0VmVyc2lvbiB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgVXBsb2FkLCBJbnB1dEZpbGUsIFVwbG9hZE9wdGlvbnMsIFN0b3JlVXBsb2FkT3B0aW9ucywgVXBsb2FkVGFncyB9IGZyb20gJy4vYXBpL3VwbG9hZCc7XG5pbXBvcnQgeyBwcmV2aWV3LCBQcmV2aWV3T3B0aW9ucyB9IGZyb20gJy4vYXBpL3ByZXZpZXcnO1xuaW1wb3J0IHsgQ2xvdWRDbGllbnQgfSBmcm9tICcuL2FwaS9jbG91ZCc7XG5pbXBvcnQgeyBQcmVmZXRjaCwgUHJlZmV0Y2hSZXNwb25zZSwgUHJlZmV0Y2hPcHRpb25zIH0gZnJvbSAnLi9hcGkvcHJlZmV0Y2gnO1xuaW1wb3J0IHsgU3RvcmVQYXJhbXMgfSBmcm9tICcuL2ZpbGVsaW5rJztcblxuaW1wb3J0IHsgcGlja2VyLCBQaWNrZXJJbnN0YW5jZSwgUGlja2VyT3B0aW9ucyB9IGZyb20gJy4vcGlja2VyJztcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblNlbnRyeS5hZGRCcmVhZGNydW1iKHsgY2F0ZWdvcnk6ICdzZGsnLCBtZXNzYWdlOiAnZmlsZXN0YWNrLWpzLXNkayBzY29wZScgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvbiB7XG4gIGFwaWtleTogc3RyaW5nO1xuICB1cmxzOiBIb3N0cztcbiAgY25hbWU/OiBzdHJpbmc7XG4gIHBvbGljeT86IHN0cmluZztcbiAgc2lnbmF0dXJlPzogc3RyaW5nO1xuICBwcmVmZXRjaD86IFByZWZldGNoUmVzcG9uc2U7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJpdHkge1xuICBwb2xpY3k6IHN0cmluZztcbiAgc2lnbmF0dXJlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xpZW50T3B0aW9ucyB7XG4gIFtvcHRpb246IHN0cmluZ106IGFueTtcbiAgLyoqXG4gICAqIFNlY3VyaXR5IG9iamVjdCB3aXRoIHBvbGljeSBhbmQgc2lnbmF0dXJlIGtleXMuXG4gICAqIENhbiBiZSB1c2VkIHRvIGxpbWl0IGNsaWVudCBjYXBhYmlsaXRpZXMgYW5kIHByb3RlY3QgcHVibGljIFVSTHMuXG4gICAqIEl0IGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBzZXJ2ZXItc2lkZSBwb2xpY3kgYW5kIHNpZ25hdHVyZSBnZW5lcmF0aW9uLlxuICAgKiBSZWFkIGFib3V0IFtzZWN1cml0eSBwb2xpY2llc10oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2NvbmNlcHRzL3NlY3VyaXR5KS5cbiAgICovXG4gIHNlY3VyaXR5PzogU2VjdXJpdHk7XG4gIC8qKlxuICAgKiBEb21haW4gdG8gdXNlIGZvciBhbGwgVVJMcy4gX19SZXF1aXJlcyB0aGUgY3VzdG9tIENOQU1FIGFkZG9uX18uXG4gICAqIElmIHRoaXMgaXMgZW5hYmxlZCB0aGVuIHlvdSBtdXN0IGFsc28gc2V0IHVwIHlvdXIgb3duIE9BdXRoIGFwcGxpY2F0aW9uc1xuICAgKiBmb3IgZWFjaCBjbG91ZCBzb3VyY2UgeW91IHdpc2ggdG8gdXNlIGluIHRoZSBwaWNrZXIuXG4gICAqL1xuICBjbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEVuYWJsZS9kaXNhYmxlIGNhY2hpbmcgb2YgdGhlIGNsb3VkIHNlc3Npb24gdG9rZW4uIERlZmF1bHQgaXMgZmFsc2UuXG4gICAqIFRoaXMgZW5zdXJlcyB0aGF0IHVzZXJzIHdpbGwgYmUgcmVtZW1iZXJlZCBvbiB5b3VyIGRvbWFpbiB3aGVuIGNhbGxpbmcgdGhlIGNsb3VkIEFQSSBmcm9tIHRoZSBicm93c2VyLlxuICAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0b2tlbnMgc3RvcmVkIGluIGxvY2FsU3RvcmFnZSBhcmUgYWNjZXNzaWJsZSBieSBvdGhlciBzY3JpcHRzIG9uIHRoZSBzYW1lIGRvbWFpbi5cbiAgICovXG4gIHNlc3Npb25DYWNoZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBmb3J3YXJkaW5nIGVycm9yIGxvZ3MgdG8gc2VudHJ5XG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb3J3YXJkRXJyb3JzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgRmlsZXN0YWNrIGNsaWVudCwgdGhlIGVudHJ5IHBvaW50IGZvciBhbGwgcHVibGljIG1ldGhvZHMuIEVuY2Fwc3VsYXRlcyBzZXNzaW9uIGluZm9ybWF0aW9uLlxuICpcbiAqICMjIyBFeGFtcGxlXG4gKiBgYGBqc1xuICogLy8gRVMgbW9kdWxlXG4gKiBpbXBvcnQgKiBhcyBmaWxlc3RhY2sgZnJvbSAnZmlsZXN0YWNrLWpzJztcbiAqIGNvbnN0IGNsaWVudCA9IGZpbGVzdGFjay5pbml0KCdhcGlrZXknKTtcbiAqIGBgYFxuICpcbiAqIGBgYGpzXG4gKiAvLyBVTUQgbW9kdWxlIGluIGJyb3dzZXJcbiAqIDxzY3JpcHQgc3JjPVwiaHR0cHM6Ly9zdGF0aWMuZmlsZXN0YWNrYXBpLmNvbS9maWxlc3RhY2stanMvMy54LngvZmlsZXN0YWNrLm1pbi5qc1wiPjwvc2NyaXB0PlxuICogY29uc3QgY2xpZW50ID0gZmlsZXN0YWNrLmluaXQoJ2FwaWtleScpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDbGllbnQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBwdWJsaWMgc2Vzc2lvbjogU2Vzc2lvbjtcbiAgcHJpdmF0ZSBjbG91ZDogQ2xvdWRDbGllbnQ7XG4gIHByaXZhdGUgcHJlZmV0Y2hJbnN0YW5jZTogUHJlZmV0Y2g7XG5cbiAgcHJpdmF0ZSBmb3J3YXJkRXJyb3JzOiBib29sZWFuID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihhcGlrZXk6IHN0cmluZywgb3B0aW9ucz86IENsaWVudE9wdGlvbnMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5mb3J3YXJkRXJyb3JzKSB7XG4gICAgICB0aGlzLmZvcndhcmRFcnJvcnMgPSBvcHRpb25zLmZvcndhcmRFcnJvcnM7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBTZW50cnkuY29uZmlndXJlU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgc2NvcGUuc2V0VGFnKCdhcGlrZXknLCBhcGlrZXkpO1xuICAgICAgc2NvcGUuc2V0VGFnKCdzZGstdmVyc2lvbicsIGdldFZlcnNpb24oKSk7XG4gICAgICBzY29wZS5zZXRFeHRyYSgnY2xpZW50T3B0aW9ucycsIG9wdGlvbnMpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFhcGlrZXkgfHwgdHlwZW9mIGFwaWtleSAhPT0gJ3N0cmluZycgfHwgYXBpa2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBbiBhcGlrZXkgaXMgcmVxdWlyZWQgdG8gaW5pdGlhbGl6ZSB0aGUgRmlsZXN0YWNrIGNsaWVudCcpO1xuICAgIH1cbiAgICBjb25zdCB7IHVybHMgfSA9IGNvbmZpZztcbiAgICB0aGlzLnNlc3Npb24gPSB7IGFwaWtleSwgdXJscyB9O1xuXG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHsgY25hbWUsIHNlY3VyaXR5IH0gPSBvcHRpb25zO1xuXG4gICAgICB0aGlzLnNldFNlY3VyaXR5KHNlY3VyaXR5KTtcbiAgICAgIHRoaXMuc2V0Q25hbWUoY25hbWUpO1xuICAgIH1cblxuICAgIHRoaXMucHJlZmV0Y2hJbnN0YW5jZSA9IG5ldyBQcmVmZXRjaCh0aGlzLnNlc3Npb24pO1xuICAgIHRoaXMuY2xvdWQgPSBuZXcgQ2xvdWRDbGllbnQodGhpcy5zZXNzaW9uLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGJhc2ljIHByZWZldGNoIHJlcXVlc3QgdG8gY2hlY2sgcGVybWlzc2lvbnNcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtc1xuICAgKi9cbiAgcHJlZmV0Y2gocGFyYW1zOiBQcmVmZXRjaE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVmZXRjaEluc3RhbmNlLmdldENvbmZpZyhwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBzZWN1cml0eSBvYmplY3RcbiAgICpcbiAgICogQHBhcmFtIHtTZWN1cml0eX0gc2VjdXJpdHlcbiAgICogQG1lbWJlcm9mIENsaWVudFxuICAgKi9cbiAgc2V0U2VjdXJpdHkoc2VjdXJpdHk6IFNlY3VyaXR5KSB7XG4gICAgaWYgKHNlY3VyaXR5ICYmICEoc2VjdXJpdHkucG9saWN5ICYmIHNlY3VyaXR5LnNpZ25hdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBGaWxlc3RhY2tFcnJvcignQm90aCBwb2xpY3kgYW5kIHNpZ25hdHVyZSBhcmUgcmVxdWlyZWQgZm9yIGNsaWVudCBzZWN1cml0eScpO1xuICAgIH1cblxuICAgIGlmIChzZWN1cml0eSAmJiBzZWN1cml0eS5wb2xpY3kgJiYgc2VjdXJpdHkuc2lnbmF0dXJlKSB7XG4gICAgICB0aGlzLnNlc3Npb24ucG9saWN5ID0gc2VjdXJpdHkucG9saWN5O1xuICAgICAgdGhpcy5zZXNzaW9uLnNpZ25hdHVyZSA9IHNlY3VyaXR5LnNpZ25hdHVyZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0IGN1c3RvbSBjbmFtZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gY25hbWVcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIENsaWVudFxuICAgKi9cbiAgc2V0Q25hbWUoY25hbWU6IHN0cmluZykge1xuICAgIGlmICghY25hbWUgfHwgY25hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXNzaW9uLmNuYW1lID0gY25hbWU7XG4gICAgdGhpcy5zZXNzaW9uLnVybHMgPSByZXNvbHZlSG9zdCh0aGlzLnNlc3Npb24udXJscywgY25hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBjdXJyZW50IGNsb3VkIHNlc3Npb25zIGluIHRoZSBwaWNrZXIuXG4gICAqIE9wdGlvbmFsbHkgcGFzcyBhIGNsb3VkIHNvdXJjZSBuYW1lIHRvIG9ubHkgbG9nIG91dCBvZiB0aGF0IGNsb3VkIHNvdXJjZS5cbiAgICogVGhpcyBlc3NlbnRpYWxseSBjbGVhcnMgdGhlIE9BdXRoIGF1dGhvcml6YXRpb24gY29kZXMgZnJvbSB0aGUgRmlsZXN0YWNrIHNlc3Npb24uXG4gICAqIEBwYXJhbSBuYW1lIE9wdGlvbmFsIGNsb3VkIHNvdXJjZSBuYW1lLlxuICAgKi9cbiAgbG9nb3V0KG5hbWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5jbG91ZC5sb2dvdXQobmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHJpZXZlIGRldGFpbGVkIGRhdGEgb2Ygc3RvcmVkIGZpbGVzLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGllbnRcbiAgICogICAubWV0YWRhdGEoJ0RDTDVLNDZGUzNPSXhiNWl1S2J5JylcbiAgICogICAudGhlbigocmVzKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgKiAgIH0pXG4gICAqICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAqICAgfSkpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBNZXRhZGF0YV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI21ldGFkYXRhKS5cbiAgICogQHBhcmFtIGhhbmRsZSBWYWxpZCBGaWxlc3RhY2sgaGFuZGxlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBNZXRhZGF0YSBmaWVsZHMgdG8gZW5hYmxlIG9uIHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gc2VjdXJpdHkgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqL1xuICBtZXRhZGF0YShoYW5kbGU6IHN0cmluZywgb3B0aW9ucz86IE1ldGFkYXRhT3B0aW9ucywgc2VjdXJpdHk/OiBTZWN1cml0eSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIG1ldGFkYXRhKHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCBvcHRpb25zLCBzZWN1cml0eSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnN0cnVjdCBhIG5ldyBwaWNrZXIgaW5zdGFuY2UuXG4gICAqL1xuICBwaWNrZXIob3B0aW9ucz86IFBpY2tlck9wdGlvbnMpOiBQaWNrZXJJbnN0YW5jZSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gcGlja2VyKHRoaXMsIG9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBVc2VkIGZvciB2aWV3aW5nIGZpbGVzIHZpYSBGaWxlc3RhY2sgaGFuZGxlcyBvciBzdG9yYWdlIGFsaWFzZXMsIF9fcmVxdWlyZXMgRG9jdW1lbnQgVmlld2VyIGFkZG9uIHRvIHlvdXIgRmlsZXN0YWNrIGFwcGxpY2F0aW9uX18uXG4gICAqIE9wZW5zIGRvY3VtZW50IHZpZXdlciBpbiBuZXcgd2luZG93IGlmIGlkIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIDxkaXYgaWQ9XCJwcmV2aWV3XCI+PC9kaXY+XG4gICAqXG4gICAqIGNsaWVudC5wcmV2aWV3KCdEQ0w1SzQ2RlMzT0l4YjVpdUtieScsIHsgaWQ6ICdwcmV2aWV3JyB9KTtcbiAgICogYGBgXG4gICAqIEBwYXJhbSBoYW5kbGUgVmFsaWQgRmlsZXN0YWNrIGhhbmRsZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgUHJldmlldyBvcHRpb25zXG4gICAqL1xuICBwcmV2aWV3KGhhbmRsZTogc3RyaW5nLCBvcHRpb25zPzogUHJldmlld09wdGlvbnMpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBwcmV2aWV3KHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCBvcHRpb25zKTtcbiAgfVxuICAvKipcbiAgICogUmVtb3ZlIGEgZmlsZSBmcm9tIHN0b3JhZ2UgYW5kIHRoZSBGaWxlc3RhY2sgc3lzdGVtLlxuICAgKlxuICAgKiBfX1JlcXVpcmVzIGEgdmFsaWQgc2VjdXJpdHkgcG9saWN5IGFuZCBzaWduYXR1cmVfXy4gVGhlIHBvbGljeSBhbmQgc2lnbmF0dXJlIHdpbGwgYmUgcHVsbGVkIGZyb20gdGhlIGNsaWVudCBzZXNzaW9uLCBvciBpdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBzZWN1cml0eSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudFxuICAgKiAgIC5yZW1vdmUoJ0RDTDVLNDZGUzNPSXhiNWl1S2J5JylcbiAgICogICAudGhlbigocmVzKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgKiAgIH0pXG4gICAqICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAqICAgfSkpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBEZWxldGVdKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvZmlsZSNkZWxldGUpXG4gICAqIEBwYXJhbSBoYW5kbGUgVmFsaWQgRmlsZXN0YWNrIGhhbmRsZS5cbiAgICogQHBhcmFtIHNlY3VyaXR5IE9wdGlvbmFsIHNlY3VyaXR5IG92ZXJyaWRlLlxuICAgKi9cbiAgcmVtb3ZlKGhhbmRsZTogc3RyaW5nLCBzZWN1cml0eT86IFNlY3VyaXR5KTogUHJvbWlzZTxhbnk+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiByZW1vdmUodGhpcy5zZXNzaW9uLCBoYW5kbGUsIGZhbHNlLCBzZWN1cml0eSk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGZpbGUgKipvbmx5KiogZnJvbSB0aGUgRmlsZXN0YWNrIHN5c3RlbS4gVGhlIGZpbGUgcmVtYWlucyBpbiBzdG9yYWdlLlxuICAgKlxuICAgKiBfX1JlcXVpcmVzIGEgdmFsaWQgc2VjdXJpdHkgcG9saWN5IGFuZCBzaWduYXR1cmVfXy4gVGhlIHBvbGljeSBhbmQgc2lnbmF0dXJlIHdpbGwgYmUgcHVsbGVkIGZyb20gdGhlIGNsaWVudCBzZXNzaW9uLCBvciBpdCBjYW4gYmUgb3ZlcnJpZGRlbiB3aXRoIHRoZSBzZWN1cml0eSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudFxuICAgKiAgIC5yZW1vdmVNZXRhZGF0YSgnRENMNUs0NkZTM09JeGI1aXVLYnknKVxuICAgKiAgIC50aGVuKChyZXMpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKHJlcyk7XG4gICAqICAgfSlcbiAgICogICAuY2F0Y2goKGVycikgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICogICB9KSk7XG4gICAqIGBgYFxuICAgKiBAc2VlIFtGaWxlIEFQSSAtIERlbGV0ZV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI2RlbGV0ZSlcbiAgICogQHBhcmFtIGhhbmRsZSBWYWxpZCBGaWxlc3RhY2sgaGFuZGxlLlxuICAgKiBAcGFyYW0gc2VjdXJpdHkgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqL1xuICByZW1vdmVNZXRhZGF0YShoYW5kbGU6IHN0cmluZywgc2VjdXJpdHk/OiBTZWN1cml0eSk6IFByb21pc2U8YW55PiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gcmVtb3ZlKHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCB0cnVlLCBzZWN1cml0eSk7XG4gIH1cbiAgLyoqXG4gICAqIFN0b3JlIGEgZmlsZSBmcm9tIGl0cyBVUkwuXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudFxuICAgKiAgIC5zdG9yZVVSTCgnaHR0cHM6Ly9kMXd0cWFmZmFhajYzei5jbG91ZGZyb250Lm5ldC9pbWFnZXMvTllfMTk5X0Vfb2ZfSGFtbWVydG93bl8yMDE0LmpwZycpXG4gICAqICAgLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBTdG9yZV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI3N0b3JlKVxuICAgKiBAcGFyYW0gdXJsICAgICAgIFZhbGlkIFVSTCB0byBhIGZpbGUuXG4gICAqIEBwYXJhbSBvcHRpb25zICAgQ29uZmlndXJlIGZpbGUgc3RvcmFnZS5cbiAgICogQHBhcmFtIHRva2VuICAgICBPcHRpb25hbCBjb250cm9sIHRva2VuIHRvIGNhbGwgLmNhbmNlbCgpXG4gICAqIEBwYXJhbSBzZWN1cml0eSAgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqIEBwYXJhbSB1cGxvYWRUYWdzIE9wdGlvbmFsIHRhZ3MgdmlzaWJsZSBpbiB3ZWJob29rcy5cbiAgICogQHBhcmFtIGhlYWRlcnMgICAgT3B0aW9uYWwgaGVhZGVycyB0byBzZW5kXG4gICAqL1xuICBzdG9yZVVSTCh1cmw6IHN0cmluZywgc3RvcmVQYXJhbXM/OiBTdG9yZVBhcmFtcywgdG9rZW4/OiBhbnksIHNlY3VyaXR5PzogU2VjdXJpdHksIHVwbG9hZFRhZ3M/OiBVcGxvYWRUYWdzLCBoZWFkZXJzPzoge1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBQcm9taXNlPE9iamVjdD4ge1xuICAgIHJldHVybiBzdG9yZVVSTCh7XG4gICAgICBzZXNzaW9uOiB0aGlzLnNlc3Npb24sXG4gICAgICB1cmwsXG4gICAgICBzdG9yZVBhcmFtcyxcbiAgICAgIHRva2VuLFxuICAgICAgc2VjdXJpdHksXG4gICAgICB1cGxvYWRUYWdzLFxuICAgICAgaGVhZGVycyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBY2Nlc3MgZmlsZXMgdmlhIHRoZWlyIEZpbGVzdGFjayBoYW5kbGVzLlxuICAgKlxuICAgKiBJZiBoZWFkIG9wdGlvbiBpcyBwcm92aWRlZCAtIHJlcXVlc3QgaGVhZGVycyBhcmUgcmV0dXJuZWQgaW4gcHJvbWlzZVxuICAgKiBJZiBtZXRhZGF0YSBvcHRpb24gaXMgcHJvdmlkZWQgLSBtZXRhZGF0YSBvYmplY3QgaXMgcmV0dXJuZWQgaW4gcHJvbWlzZVxuICAgKiBPdGhlcndpc2UgZmlsZSBibG9iIGlzIHJldHVybmVkXG4gICAqIE1ldGFkYXRhIGFuZCBoZWFkIG9wdGlvbnMgY2Fubm90IGJlIG1peGVkXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsaWVudC5yZXRyaWV2ZSgnZmlsZUhhbmRsZScsIHtcbiAgICogIG1ldGFkYXRhOiB0cnVlLFxuICAgKiB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgKiAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgKiB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAqICBjb25zb2xlLmVycm9yKGVycik7XG4gICAqIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2VlIFtGaWxlIEFQSSAtIERvd25sb2FkXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL2ZpbGUjZG93bmxvYWQpXG4gICAqIEBwYXJhbSBoYW5kbGUgICAgVmFsaWQgZmlsZSBoYW5kbGVcbiAgICogQHBhcmFtIG9wdGlvbnMgICBSZXRyaWV2ZU9wdGlvbnNcbiAgICogQHBhcmFtIHNlY3VyaXR5ICBPcHRpb25hbCBzZWN1cml0eSBvdmVycmlkZS5cbiAgICogQHRocm93cyAgICAgICAgICBFcnJvclxuICAgKi9cbiAgcmV0cmlldmUoaGFuZGxlOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXRyaWV2ZU9wdGlvbnMsIHNlY3VyaXR5PzogU2VjdXJpdHkpOiBQcm9taXNlPE9iamVjdCB8IEJsb2I+IHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiByZXRyaWV2ZSh0aGlzLnNlc3Npb24sIGhhbmRsZSwgb3B0aW9ucywgc2VjdXJpdHkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEludGVyZmFjZSB0byB0aGUgRmlsZXN0YWNrIFtQcm9jZXNzaW5nIEFQSV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9wcm9jZXNzaW5nKS5cbiAgICogQ29udmVydCBhIFVSTCwgaGFuZGxlLCBvciBzdG9yYWdlIGFsaWFzIHRvIGFub3RoZXIgVVJMIHdoaWNoIGxpbmtzIHRvIHRoZSB0cmFuc2Zvcm1lZCBmaWxlLlxuICAgKiBZb3UgY2FuIG9wdGlvbmFsbHkgc3RvcmUgdGhlIHJldHVybmVkIFVSTCB3aXRoIGNsaWVudC5zdG9yZVVSTC5cbiAgICpcbiAgICogVHJhbnNmb3JtIHBhcmFtcyBjYW4gYmUgcHJvdmlkZWQgaW4gY2FtZWxDYXNlIG9yIHNuYWtlQ2FzZSBzdHlsZSBpZTogcGFydGlhbF9waXhlbGF0ZSBvciBwYXJ0aWFsUGl4ZWxhdGVcbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgdHJhbnNmb3JtZWRVcmwgPSBjbGllbnQudHJhbnNmb3JtKHVybCwge1xuICAgKiAgIGNyb3A6IHtcbiAgICogICAgIGRpbTogW3gsIHksIHdpZHRoLCBoZWlnaHRdLFxuICAgKiAgIH0sXG4gICAqICAgdmlnbmV0dGU6IHtcbiAgICogICAgIGJsdXJtb2RlOiAnZ2F1c3NpYW4nLFxuICAgKiAgICAgYW1vdW50OiA1MCxcbiAgICogICB9LFxuICAgKiAgIGZsaXA6IHRydWUsXG4gICAqICAgcGFydGlhbF9waXhlbGF0ZToge1xuICAgKiAgICAgb2JqZWN0czogW1sxMCwgMjAsIDIwMCwgMjUwXSwgWzI3NSwgOTEsIDUwMCwgNTU3XV0sXG4gICAqICAgfSxcbiAgICogfTtcbiAgICpcbiAgICogLy8gb3B0aW9uYWxseSBzdG9yZSB0aGUgbmV3IFVSTFxuICAgKiBjbGllbnQuc3RvcmVVUkwodHJhbnNmb3JtZWRVcmwpLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZXN0YWNrIFByb2Nlc3NpbmcgQVBJXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL3Byb2Nlc3NpbmcpXG4gICAqIEBwYXJhbSB1cmwgICAgIFNpbmdsZSBvciBtdWx0aXBsZSB2YWxpZCBVUkxzIChodHRwKHMpOi8vKSwgZmlsZSBoYW5kbGVzLCBvciBzdG9yYWdlIGFsaWFzZXMgKHNyYzovLykgdG8gYW4gaW1hZ2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRyYW5zZm9ybWF0aW9ucyBhcmUgYXBwbGllZCBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHRoaXMgb2JqZWN0LlxuICAgKiBAcGFyYW0gYjY0ICAgICBVc2UgbmV3IG1vcmUgc2FmZSBmb3JtYXQgZm9yIGdlbmVyYXRpbmcgdHJhbnNmb3JtcyB1cmwgKGRlZmF1bHQ9ZmFsc2UpIE5vdGU6IElmIHRoZXJlIHdpbGwgYmUgYW55IGlzc3VlcyB3aXRoIHVybCBwbGVhc2UgdGVzdCBpdCB3aXRoIGVuYWJsZWQgYjY0IHN1cHBvcnRcbiAgICogQHJldHVybnMgICAgICAgQSBuZXcgVVJMIHRoYXQgcG9pbnRzIHRvIHRoZSB0cmFuc2Zvcm1lZCByZXNvdXJjZS5cbiAgICovXG4gIHRyYW5zZm9ybSh1cmw6IHN0cmluZyB8IHN0cmluZ1tdLCBvcHRpb25zOiBUcmFuc2Zvcm1PcHRpb25zLCBiNjQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHRyYW5zZm9ybSh0aGlzLnNlc3Npb24sIHVybCwgb3B0aW9ucywgYjY0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSBtdWx0aS1wYXJ0IHVwbG9hZCBmbG93LiBVc2UgdGhpcyBmb3IgRmlsZXN0YWNrIENJTiBhbmQgRklJIHVwbG9hZHMuXG4gICAqXG4gICAqIEluIE5vZGUgcnVudGltZXMgdGhlIGZpbGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aC5cbiAgICogVXBsb2FkaW5nIGZyb20gYSBOb2RlIGJ1ZmZlciBpcyBub3QgeWV0IGltcGxlbWVudGVkLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCB0b2tlbiA9IHt9O1xuICAgKiBjb25zdCBvblJldHJ5ID0gKG9iaikgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKGBSZXRyeWluZyAke29iai5sb2NhdGlvbn0gZm9yICR7b2JqLmZpbGVuYW1lfS4gQXR0ZW1wdCAke29iai5hdHRlbXB0fSBvZiAxMC5gKTtcbiAgICogfTtcbiAgICpcbiAgICogY2xpZW50LnVwbG9hZChmaWxlLCB7IG9uUmV0cnkgfSwgeyBmaWxlbmFtZTogJ2Zvb2Jhci5qcGcnIH0sIHRva2VuKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICpcbiAgICogY2xpZW50LnVwbG9hZCh7ZmlsZSwgbmFtZX0sIHsgb25SZXRyeSB9LCB7IGZpbGVuYW1lOiAnZm9vYmFyLmpwZycgfSwgdG9rZW4pXG4gICAqICAgLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKlxuICAgKiB0b2tlbi5wYXVzZSgpOyAgLy8gUGF1c2UgZmxvd1xuICAgKiB0b2tlbi5yZXN1bWUoKTsgLy8gUmVzdW1lIGZsb3dcbiAgICogdG9rZW4uY2FuY2VsKCk7IC8vIENhbmNlbCBmbG93IChyZWplY3RzKVxuICAgKiBgYGBcbiAgICogQHBhcmFtIHtJbnB1dEZpbGV9ICAgIGZpbGUgICAgICAgICAgIE11c3QgYmUgYSB2YWxpZCBbRmlsZSB8IEJsb2IgfCBCdWZmZXIgfCBzdHJpbmddXG4gICAqIEBwYXJhbSB1cGxvYWRPcHRpb25zICBVcGxvYWRlciBvcHRpb25zLlxuICAgKiBAcGFyYW0gc3RvcmVPcHRpb25zICAgU3RvcmFnZSBvcHRpb25zLlxuICAgKiBAcGFyYW0gdG9rZW4gICAgICAgICAgQSBjb250cm9sIHRva2VuIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FsbCBjYW5jZWwoKSwgcGF1c2UoKSwgYW5kIHJlc3VtZSgpLlxuICAgKiBAcGFyYW0gc2VjdXJpdHkgICAgICAgT3B0aW9uYWwgc2VjdXJpdHkgcG9saWN5IGFuZCBzaWduYXR1cmUgb3ZlcnJpZGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcm9taXNlfVxuICAgKi9cbiAgdXBsb2FkKGZpbGU6IElucHV0RmlsZSwgb3B0aW9ucz86IFVwbG9hZE9wdGlvbnMsIHN0b3JlT3B0aW9ucz86IFN0b3JlVXBsb2FkT3B0aW9ucywgdG9rZW4/OiBhbnksIHNlY3VyaXR5PzogU2VjdXJpdHkpIHtcbiAgICBsZXQgdXBsb2FkID0gbmV3IFVwbG9hZChvcHRpb25zLCBzdG9yZU9wdGlvbnMpO1xuICAgIHVwbG9hZC5zZXRTZXNzaW9uKHRoaXMuc2Vzc2lvbik7XG5cbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIHVwbG9hZC5zZXRUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgaWYgKHNlY3VyaXR5KSB7XG4gICAgICB1cGxvYWQuc2V0U2VjdXJpdHkoc2VjdXJpdHkpO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgdXBsb2FkLm9uKCdlcnJvcicsIGUgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9yd2FyZEVycm9ycykge1xuICAgICAgICBTZW50cnkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgICBzY29wZS5zZXRFeHRyYXMoZS5kZXRhaWxzKTtcbiAgICAgICAgICBzY29wZS5zZXRFeHRyYXMoeyB1cGxvYWRPcHRpb25zOiBvcHRpb25zLCBzdG9yZU9wdGlvbnMgfSk7XG4gICAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmVtaXQoJ3VwbG9hZC5lcnJvcicsIGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwbG9hZC51cGxvYWQoZmlsZSk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgbXVsdGktcGFydCB1cGxvYWQgZmxvdy4gVXNlIHRoaXMgZm9yIEZpbGVzdGFjayBDSU4gYW5kIEZJSSB1cGxvYWRzLlxuICAgKlxuICAgKiBJbiBOb2RlIHJ1bnRpbWVzIHRoZSBmaWxlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlIHBhdGguXG4gICAqIFVwbG9hZGluZyBmcm9tIGEgTm9kZSBidWZmZXIgaXMgbm90IHlldCBpbXBsZW1lbnRlZC5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgdG9rZW4gPSB7fTtcbiAgICogY29uc3Qgb25SZXRyeSA9IChvYmopID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhgUmV0cnlpbmcgJHtvYmoubG9jYXRpb259IGZvciAke29iai5maWxlbmFtZX0uIEF0dGVtcHQgJHtvYmouYXR0ZW1wdH0gb2YgMTAuYCk7XG4gICAqIH07XG4gICAqXG4gICAqIGNsaWVudC5tdWx0aXVwbG9hZChbZmlsZV0sIHsgb25SZXRyeSB9LCB0b2tlbilcbiAgICogICAudGhlbihyZXMgPT4gY29uc29sZS5sb2cocmVzKSk7XG4gICAqXG4gICAqIGNsaWVudC5tdWx0aXVwbG9hZChbe2ZpbGUsIG5hbWV9XSwgeyBvblJldHJ5IH0sIHRva2VuKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICpcbiAgICogdG9rZW4ucGF1c2UoKTsgIC8vIFBhdXNlIGZsb3dcbiAgICogdG9rZW4ucmVzdW1lKCk7IC8vIFJlc3VtZSBmbG93XG4gICAqIHRva2VuLmNhbmNlbCgpOyAvLyBDYW5jZWwgZmxvdyAocmVqZWN0cylcbiAgICogYGBgXG4gICAqIEBwYXJhbSB7SW5wdXRGaWxlW119ICBmaWxlICAgICAgICAgICBNdXN0IGJlIGEgdmFsaWQgW0ZpbGUgfCBCbG9iIHwgQnVmZmVyIHwgc3RyaW5nIChiYXNlNjQpXVxuICAgKiBAcGFyYW0gdXBsb2FkT3B0aW9ucyAgVXBsb2FkIG9wdGlvbnMuXG4gICAqIEBwYXJhbSBzdG9yZU9wdGlvbnMgICBTdG9yYWdlIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB0b2tlbiAgICAgICAgICBBIGNvbnRyb2wgdG9rZW4gdGhhdCBjYW4gYmUgdXNlZCB0byBjYWxsIGNhbmNlbCgpLCBwYXVzZSgpLCBhbmQgcmVzdW1lKCkuXG4gICAqIEBwYXJhbSBzZWN1cml0eSAgICAgICBPcHRpb25hbCBzZWN1cml0eSBwb2xpY3kgYW5kIHNpZ25hdHVyZSBvdmVycmlkZS5cbiAgICpcbiAgICogQHJldHVybnMge1Byb21pc2V9XG4gICAqL1xuICBtdWx0aXVwbG9hZChmaWxlOiBJbnB1dEZpbGVbXSwgb3B0aW9ucz86IFVwbG9hZE9wdGlvbnMsIHN0b3JlT3B0aW9ucz86IFN0b3JlVXBsb2FkT3B0aW9ucywgdG9rZW4/OiBhbnksIHNlY3VyaXR5PzogU2VjdXJpdHkpIHtcbiAgICBsZXQgdXBsb2FkID0gbmV3IFVwbG9hZChvcHRpb25zLCBzdG9yZU9wdGlvbnMpO1xuXG4gICAgdXBsb2FkLnNldFNlc3Npb24odGhpcy5zZXNzaW9uKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgdXBsb2FkLnNldFRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoc2VjdXJpdHkpIHtcbiAgICAgIHVwbG9hZC5zZXRTZWN1cml0eShzZWN1cml0eSk7XG4gICAgfVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICB1cGxvYWQub24oJ2Vycm9yJywgZSA9PiB7XG4gICAgICBTZW50cnkud2l0aFNjb3BlKHNjb3BlID0+IHtcbiAgICAgICAgc2NvcGUuc2V0RXh0cmFzKGUuZGV0YWlscyk7XG4gICAgICAgIHNjb3BlLnNldEV4dHJhcyh7IHVwbG9hZE9wdGlvbnM6IG9wdGlvbnMsIHN0b3JlT3B0aW9ucyB9KTtcbiAgICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5lbWl0KCd1cGxvYWQuZXJyb3InLCBlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiB1cGxvYWQubXVsdGl1cGxvYWQoZmlsZSk7XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBUyxNQUFNLFdBQVcsQ0FBQztBQUMxQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFFBQVEsRUFBbUIsTUFBTSxFQUFFLFFBQVEsRUFBbUIsTUFBTSxZQUFZLENBQUM7QUFDMUYsT0FBTyxFQUFFLFNBQVMsRUFBb0IsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sS0FBSyxLQUFLLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQTRELE1BQU0sY0FBYyxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxPQUFPLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDMUMsT0FBTyxFQUFFLFFBQVEsRUFBcUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUc3RSxPQUFPLEVBQUUsTUFBTSxFQUFpQyxNQUFNLFVBQVUsQ0FBQztBQUVqRSwwQkFBMEI7QUFDMUIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLENBQUMsQ0FBQztBQTZDN0U7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0g7SUFBNEIsMEJBQVk7SUFpQnRDLGdCQUFZLE1BQWMsRUFBRSxPQUF1QjtRQUFuRCxZQUNFLGlCQUFPLFNBNkJSO1FBMUNPLG1CQUFhLEdBQVksSUFBSSxDQUFDO1FBZXBDLHdCQUF3QjtRQUN4QixJQUFJLE9B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Q3BCLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQixLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxZQUFZLGNBQUEsRUFBRSxDQUFDLENBQUM7Z0JBQzFELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDLENBQUMsQ0FBQztZQUVILEtBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFDSCxhQUFDO0FBQUQsQ0FqYUEsQUFpYUMsQ0FqYTJCLFlBQVksR0FpYXZDIiwiZmlsZSI6ImxpYi9jbGllbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50ZW1pdHRlcjMnO1xuaW1wb3J0ICogYXMgU2VudHJ5IGZyb20gJ0BzZW50cnkvbWluaW1hbCc7XG5pbXBvcnQgeyBjb25maWcsIEhvc3RzIH0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IEZpbGVzdGFja0Vycm9yIH0gZnJvbSAnLi8uLi9maWxlc3RhY2tfZXJyb3InO1xuaW1wb3J0IHsgbWV0YWRhdGEsIE1ldGFkYXRhT3B0aW9ucywgcmVtb3ZlLCByZXRyaWV2ZSwgUmV0cmlldmVPcHRpb25zIH0gZnJvbSAnLi9hcGkvZmlsZSc7XG5pbXBvcnQgeyB0cmFuc2Zvcm0sIFRyYW5zZm9ybU9wdGlvbnMgfSBmcm9tICcuL2FwaS90cmFuc2Zvcm0nO1xuaW1wb3J0IHsgc3RvcmVVUkwgfSBmcm9tICcuL2FwaS9zdG9yZSc7XG5pbXBvcnQgKiBhcyBVdGlscyBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IFVwbG9hZCwgSW5wdXRGaWxlLCBVcGxvYWRPcHRpb25zLCBTdG9yZVVwbG9hZE9wdGlvbnMsIFVwbG9hZFRhZ3MgfSBmcm9tICcuL2FwaS91cGxvYWQnO1xuaW1wb3J0IHsgcHJldmlldywgUHJldmlld09wdGlvbnMgfSBmcm9tICcuL2FwaS9wcmV2aWV3JztcbmltcG9ydCB7IENsb3VkQ2xpZW50IH0gZnJvbSAnLi9hcGkvY2xvdWQnO1xuaW1wb3J0IHsgUHJlZmV0Y2gsIFByZWZldGNoUmVzcG9uc2UsIFByZWZldGNoT3B0aW9ucyB9IGZyb20gJy4vYXBpL3ByZWZldGNoJztcbmltcG9ydCB7IFN0b3JlUGFyYW1zIH0gZnJvbSAnLi9maWxlbGluayc7XG5cbmltcG9ydCB7IHBpY2tlciwgUGlja2VySW5zdGFuY2UsIFBpY2tlck9wdGlvbnMgfSBmcm9tICcuL3BpY2tlcic7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5TZW50cnkuYWRkQnJlYWRjcnVtYih7IGNhdGVnb3J5OiAnc2RrJywgbWVzc2FnZTogJ2ZpbGVzdGFjay1qcy1zZGsgc2NvcGUnIH0pO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb24ge1xuICBhcGlrZXk6IHN0cmluZztcbiAgdXJsczogSG9zdHM7XG4gIGNuYW1lPzogc3RyaW5nO1xuICBwb2xpY3k/OiBzdHJpbmc7XG4gIHNpZ25hdHVyZT86IHN0cmluZztcbiAgcHJlZmV0Y2g/OiBQcmVmZXRjaFJlc3BvbnNlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5IHtcbiAgcG9saWN5OiBzdHJpbmc7XG4gIHNpZ25hdHVyZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudE9wdGlvbnMge1xuICBbb3B0aW9uOiBzdHJpbmddOiBhbnk7XG4gIC8qKlxuICAgKiBTZWN1cml0eSBvYmplY3Qgd2l0aCBwb2xpY3kgYW5kIHNpZ25hdHVyZSBrZXlzLlxuICAgKiBDYW4gYmUgdXNlZCB0byBsaW1pdCBjbGllbnQgY2FwYWJpbGl0aWVzIGFuZCBwcm90ZWN0IHB1YmxpYyBVUkxzLlxuICAgKiBJdCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIHdpdGggc2VydmVyLXNpZGUgcG9saWN5IGFuZCBzaWduYXR1cmUgZ2VuZXJhdGlvbi5cbiAgICogUmVhZCBhYm91dCBbc2VjdXJpdHkgcG9saWNpZXNdKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9jb25jZXB0cy9zZWN1cml0eSkuXG4gICAqL1xuICBzZWN1cml0eT86IFNlY3VyaXR5O1xuICAvKipcbiAgICogRG9tYWluIHRvIHVzZSBmb3IgYWxsIFVSTHMuIF9fUmVxdWlyZXMgdGhlIGN1c3RvbSBDTkFNRSBhZGRvbl9fLlxuICAgKiBJZiB0aGlzIGlzIGVuYWJsZWQgdGhlbiB5b3UgbXVzdCBhbHNvIHNldCB1cCB5b3VyIG93biBPQXV0aCBhcHBsaWNhdGlvbnNcbiAgICogZm9yIGVhY2ggY2xvdWQgc291cmNlIHlvdSB3aXNoIHRvIHVzZSBpbiB0aGUgcGlja2VyLlxuICAgKi9cbiAgY25hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFbmFibGUvZGlzYWJsZSBjYWNoaW5nIG9mIHRoZSBjbG91ZCBzZXNzaW9uIHRva2VuLiBEZWZhdWx0IGlzIGZhbHNlLlxuICAgKiBUaGlzIGVuc3VyZXMgdGhhdCB1c2VycyB3aWxsIGJlIHJlbWVtYmVyZWQgb24geW91ciBkb21haW4gd2hlbiBjYWxsaW5nIHRoZSBjbG91ZCBBUEkgZnJvbSB0aGUgYnJvd3Nlci5cbiAgICogUGxlYXNlIGJlIGF3YXJlIHRoYXQgdG9rZW5zIHN0b3JlZCBpbiBsb2NhbFN0b3JhZ2UgYXJlIGFjY2Vzc2libGUgYnkgb3RoZXIgc2NyaXB0cyBvbiB0aGUgc2FtZSBkb21haW4uXG4gICAqL1xuICBzZXNzaW9uQ2FjaGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgZm9yd2FyZGluZyBlcnJvciBsb2dzIHRvIHNlbnRyeVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZm9yd2FyZEVycm9ycz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIEZpbGVzdGFjayBjbGllbnQsIHRoZSBlbnRyeSBwb2ludCBmb3IgYWxsIHB1YmxpYyBtZXRob2RzLiBFbmNhcHN1bGF0ZXMgc2Vzc2lvbiBpbmZvcm1hdGlvbi5cbiAqXG4gKiAjIyMgRXhhbXBsZVxuICogYGBganNcbiAqIC8vIEVTIG1vZHVsZVxuICogaW1wb3J0ICogYXMgZmlsZXN0YWNrIGZyb20gJ2ZpbGVzdGFjay1qcyc7XG4gKiBjb25zdCBjbGllbnQgPSBmaWxlc3RhY2suaW5pdCgnYXBpa2V5Jyk7XG4gKiBgYGBcbiAqXG4gKiBgYGBqc1xuICogLy8gVU1EIG1vZHVsZSBpbiBicm93c2VyXG4gKiA8c2NyaXB0IHNyYz1cImh0dHBzOi8vc3RhdGljLmZpbGVzdGFja2FwaS5jb20vZmlsZXN0YWNrLWpzLzMueC54L2ZpbGVzdGFjay5taW4uanNcIj48L3NjcmlwdD5cbiAqIGNvbnN0IGNsaWVudCA9IGZpbGVzdGFjay5pbml0KCdhcGlrZXknKTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQ2xpZW50IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgcHVibGljIHNlc3Npb246IFNlc3Npb247XG4gIHByaXZhdGUgY2xvdWQ6IENsb3VkQ2xpZW50O1xuICBwcml2YXRlIHByZWZldGNoSW5zdGFuY2U6IFByZWZldGNoO1xuXG4gIHByaXZhdGUgZm9yd2FyZEVycm9yczogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZmlsZXN0YWNrIHV0aWxzXG4gICAqXG4gICAqIEByZWFkb25seVxuICAgKiBAbWVtYmVyb2YgQ2xpZW50XG4gICAqL1xuICBnZXQgdXRpbHMoKSB7XG4gICAgcmV0dXJuIFV0aWxzO1xuICB9XG5cbiAgY29uc3RydWN0b3IoYXBpa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBDbGllbnRPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZm9yd2FyZEVycm9ycykge1xuICAgICAgdGhpcy5mb3J3YXJkRXJyb3JzID0gb3B0aW9ucy5mb3J3YXJkRXJyb3JzO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgU2VudHJ5LmNvbmZpZ3VyZVNjb3BlKHNjb3BlID0+IHtcbiAgICAgIHNjb3BlLnNldFRhZygnYXBpa2V5JywgYXBpa2V5KTtcbiAgICAgIHNjb3BlLnNldFRhZygnc2RrLXZlcnNpb24nLCBVdGlscy5nZXRWZXJzaW9uKCkpO1xuICAgICAgc2NvcGUuc2V0RXh0cmEoJ2NsaWVudE9wdGlvbnMnLCBvcHRpb25zKTtcbiAgICB9KTtcblxuICAgIGlmICghYXBpa2V5IHx8IHR5cGVvZiBhcGlrZXkgIT09ICdzdHJpbmcnIHx8IGFwaWtleS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQW4gYXBpa2V5IGlzIHJlcXVpcmVkIHRvIGluaXRpYWxpemUgdGhlIEZpbGVzdGFjayBjbGllbnQnKTtcbiAgICB9XG4gICAgY29uc3QgeyB1cmxzIH0gPSBjb25maWc7XG4gICAgdGhpcy5zZXNzaW9uID0geyBhcGlrZXksIHVybHMgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBjb25zdCB7IGNuYW1lLCBzZWN1cml0eSB9ID0gb3B0aW9ucztcblxuICAgICAgdGhpcy5zZXRTZWN1cml0eShzZWN1cml0eSk7XG4gICAgICB0aGlzLnNldENuYW1lKGNuYW1lKTtcbiAgICB9XG5cbiAgICB0aGlzLnByZWZldGNoSW5zdGFuY2UgPSBuZXcgUHJlZmV0Y2godGhpcy5zZXNzaW9uKTtcbiAgICB0aGlzLmNsb3VkID0gbmV3IENsb3VkQ2xpZW50KHRoaXMuc2Vzc2lvbiwgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBiYXNpYyBwcmVmZXRjaCByZXF1ZXN0IHRvIGNoZWNrIHBlcm1pc3Npb25zXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXNcbiAgICovXG4gIHByZWZldGNoKHBhcmFtczogUHJlZmV0Y2hPcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMucHJlZmV0Y2hJbnN0YW5jZS5nZXRDb25maWcocGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgc2VjdXJpdHkgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSB7U2VjdXJpdHl9IHNlY3VyaXR5XG4gICAqIEBtZW1iZXJvZiBDbGllbnRcbiAgICovXG4gIHNldFNlY3VyaXR5KHNlY3VyaXR5OiBTZWN1cml0eSkge1xuICAgIGlmIChzZWN1cml0eSAmJiAhKHNlY3VyaXR5LnBvbGljeSAmJiBzZWN1cml0eS5zaWduYXR1cmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRmlsZXN0YWNrRXJyb3IoJ0JvdGggcG9saWN5IGFuZCBzaWduYXR1cmUgYXJlIHJlcXVpcmVkIGZvciBjbGllbnQgc2VjdXJpdHknKTtcbiAgICB9XG5cbiAgICBpZiAoc2VjdXJpdHkgJiYgc2VjdXJpdHkucG9saWN5ICYmIHNlY3VyaXR5LnNpZ25hdHVyZSkge1xuICAgICAgdGhpcy5zZXNzaW9uLnBvbGljeSA9IHNlY3VyaXR5LnBvbGljeTtcbiAgICAgIHRoaXMuc2Vzc2lvbi5zaWduYXR1cmUgPSBzZWN1cml0eS5zaWduYXR1cmU7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBjdXN0b20gY25hbWVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNuYW1lXG4gICAqIEByZXR1cm5zXG4gICAqIEBtZW1iZXJvZiBDbGllbnRcbiAgICovXG4gIHNldENuYW1lKGNuYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIWNuYW1lIHx8IGNuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2Vzc2lvbi5jbmFtZSA9IGNuYW1lO1xuICAgIHRoaXMuc2Vzc2lvbi51cmxzID0gVXRpbHMucmVzb2x2ZUhvc3QodGhpcy5zZXNzaW9uLnVybHMsIGNuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgY3VycmVudCBjbG91ZCBzZXNzaW9ucyBpbiB0aGUgcGlja2VyLlxuICAgKiBPcHRpb25hbGx5IHBhc3MgYSBjbG91ZCBzb3VyY2UgbmFtZSB0byBvbmx5IGxvZyBvdXQgb2YgdGhhdCBjbG91ZCBzb3VyY2UuXG4gICAqIFRoaXMgZXNzZW50aWFsbHkgY2xlYXJzIHRoZSBPQXV0aCBhdXRob3JpemF0aW9uIGNvZGVzIGZyb20gdGhlIEZpbGVzdGFjayBzZXNzaW9uLlxuICAgKiBAcGFyYW0gbmFtZSBPcHRpb25hbCBjbG91ZCBzb3VyY2UgbmFtZS5cbiAgICovXG4gIGxvZ291dChuYW1lPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvdWQubG9nb3V0KG5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBkZXRhaWxlZCBkYXRhIG9mIHN0b3JlZCBmaWxlcy5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY2xpZW50XG4gICAqICAgLm1ldGFkYXRhKCdEQ0w1SzQ2RlMzT0l4YjVpdUtieScpXG4gICAqICAgLnRoZW4oKHJlcykgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICogICB9KVxuICAgKiAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgKiAgIH0pKTtcbiAgICogYGBgXG4gICAqIEBzZWUgW0ZpbGUgQVBJIC0gTWV0YWRhdGFdKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvZmlsZSNtZXRhZGF0YSkuXG4gICAqIEBwYXJhbSBoYW5kbGUgVmFsaWQgRmlsZXN0YWNrIGhhbmRsZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgTWV0YWRhdGEgZmllbGRzIHRvIGVuYWJsZSBvbiByZXNwb25zZS5cbiAgICogQHBhcmFtIHNlY3VyaXR5IE9wdGlvbmFsIHNlY3VyaXR5IG92ZXJyaWRlLlxuICAgKi9cbiAgbWV0YWRhdGEoaGFuZGxlOiBzdHJpbmcsIG9wdGlvbnM/OiBNZXRhZGF0YU9wdGlvbnMsIHNlY3VyaXR5PzogU2VjdXJpdHkpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiBtZXRhZGF0YSh0aGlzLnNlc3Npb24sIGhhbmRsZSwgb3B0aW9ucywgc2VjdXJpdHkpO1xuICB9XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3QgYSBuZXcgcGlja2VyIGluc3RhbmNlLlxuICAgKi9cbiAgcGlja2VyKG9wdGlvbnM/OiBQaWNrZXJPcHRpb25zKTogUGlja2VySW5zdGFuY2Uge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHBpY2tlcih0aGlzLCBvcHRpb25zKTtcbiAgfVxuICAvKipcbiAgICogVXNlZCBmb3Igdmlld2luZyBmaWxlcyB2aWEgRmlsZXN0YWNrIGhhbmRsZXMgb3Igc3RvcmFnZSBhbGlhc2VzLCBfX3JlcXVpcmVzIERvY3VtZW50IFZpZXdlciBhZGRvbiB0byB5b3VyIEZpbGVzdGFjayBhcHBsaWNhdGlvbl9fLlxuICAgKiBPcGVucyBkb2N1bWVudCB2aWV3ZXIgaW4gbmV3IHdpbmRvdyBpZiBpZCBvcHRpb24gaXMgbm90IHByb3ZpZGVkLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAvLyA8ZGl2IGlkPVwicHJldmlld1wiPjwvZGl2PlxuICAgKlxuICAgKiBjbGllbnQucHJldmlldygnRENMNUs0NkZTM09JeGI1aXVLYnknLCB7IGlkOiAncHJldmlldycgfSk7XG4gICAqIGBgYFxuICAgKiBAcGFyYW0gaGFuZGxlIFZhbGlkIEZpbGVzdGFjayBoYW5kbGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIFByZXZpZXcgb3B0aW9uc1xuICAgKi9cbiAgcHJldmlldyhoYW5kbGU6IHN0cmluZywgb3B0aW9ucz86IFByZXZpZXdPcHRpb25zKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gcHJldmlldyh0aGlzLnNlc3Npb24sIGhhbmRsZSwgb3B0aW9ucyk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZSBhIGZpbGUgZnJvbSBzdG9yYWdlIGFuZCB0aGUgRmlsZXN0YWNrIHN5c3RlbS5cbiAgICpcbiAgICogX19SZXF1aXJlcyBhIHZhbGlkIHNlY3VyaXR5IHBvbGljeSBhbmQgc2lnbmF0dXJlX18uIFRoZSBwb2xpY3kgYW5kIHNpZ25hdHVyZSB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBjbGllbnQgc2Vzc2lvbiwgb3IgaXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgc2VjdXJpdHkgcGFyYW1ldGVyLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGllbnRcbiAgICogICAucmVtb3ZlKCdEQ0w1SzQ2RlMzT0l4YjVpdUtieScpXG4gICAqICAgLnRoZW4oKHJlcykgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICogICB9KVxuICAgKiAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgKiAgIH0pKTtcbiAgICogYGBgXG4gICAqIEBzZWUgW0ZpbGUgQVBJIC0gRGVsZXRlXShodHRwczovL3d3dy5maWxlc3RhY2suY29tL2RvY3MvYXBpL2ZpbGUjZGVsZXRlKVxuICAgKiBAcGFyYW0gaGFuZGxlIFZhbGlkIEZpbGVzdGFjayBoYW5kbGUuXG4gICAqIEBwYXJhbSBzZWN1cml0eSBPcHRpb25hbCBzZWN1cml0eSBvdmVycmlkZS5cbiAgICovXG4gIHJlbW92ZShoYW5kbGU6IHN0cmluZywgc2VjdXJpdHk/OiBTZWN1cml0eSk6IFByb21pc2U8YW55PiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gcmVtb3ZlKHRoaXMuc2Vzc2lvbiwgaGFuZGxlLCBmYWxzZSwgc2VjdXJpdHkpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmUgYSBmaWxlICoqb25seSoqIGZyb20gdGhlIEZpbGVzdGFjayBzeXN0ZW0uIFRoZSBmaWxlIHJlbWFpbnMgaW4gc3RvcmFnZS5cbiAgICpcbiAgICogX19SZXF1aXJlcyBhIHZhbGlkIHNlY3VyaXR5IHBvbGljeSBhbmQgc2lnbmF0dXJlX18uIFRoZSBwb2xpY3kgYW5kIHNpZ25hdHVyZSB3aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBjbGllbnQgc2Vzc2lvbiwgb3IgaXQgY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCB0aGUgc2VjdXJpdHkgcGFyYW1ldGVyLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGllbnRcbiAgICogICAucmVtb3ZlTWV0YWRhdGEoJ0RDTDVLNDZGUzNPSXhiNWl1S2J5JylcbiAgICogICAudGhlbigocmVzKSA9PiB7XG4gICAqICAgICBjb25zb2xlLmxvZyhyZXMpO1xuICAgKiAgIH0pXG4gICAqICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAqICAgfSkpO1xuICAgKiBgYGBcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBEZWxldGVdKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvZmlsZSNkZWxldGUpXG4gICAqIEBwYXJhbSBoYW5kbGUgVmFsaWQgRmlsZXN0YWNrIGhhbmRsZS5cbiAgICogQHBhcmFtIHNlY3VyaXR5IE9wdGlvbmFsIHNlY3VyaXR5IG92ZXJyaWRlLlxuICAgKi9cbiAgcmVtb3ZlTWV0YWRhdGEoaGFuZGxlOiBzdHJpbmcsIHNlY3VyaXR5PzogU2VjdXJpdHkpOiBQcm9taXNlPGFueT4ge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgcmV0dXJuIHJlbW92ZSh0aGlzLnNlc3Npb24sIGhhbmRsZSwgdHJ1ZSwgc2VjdXJpdHkpO1xuICB9XG4gIC8qKlxuICAgKiBTdG9yZSBhIGZpbGUgZnJvbSBpdHMgVVJMLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGllbnRcbiAgICogICAuc3RvcmVVUkwoJ2h0dHBzOi8vZDF3dHFhZmZhYWo2M3ouY2xvdWRmcm9udC5uZXQvaW1hZ2VzL05ZXzE5OV9FX29mX0hhbW1lcnRvd25fMjAxNC5qcGcnKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICogYGBgXG4gICAqIEBzZWUgW0ZpbGUgQVBJIC0gU3RvcmVdKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvZmlsZSNzdG9yZSlcbiAgICogQHBhcmFtIHVybCAgICAgICBWYWxpZCBVUkwgdG8gYSBmaWxlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAgIENvbmZpZ3VyZSBmaWxlIHN0b3JhZ2UuXG4gICAqIEBwYXJhbSB0b2tlbiAgICAgT3B0aW9uYWwgY29udHJvbCB0b2tlbiB0byBjYWxsIC5jYW5jZWwoKVxuICAgKiBAcGFyYW0gc2VjdXJpdHkgIE9wdGlvbmFsIHNlY3VyaXR5IG92ZXJyaWRlLlxuICAgKiBAcGFyYW0gdXBsb2FkVGFncyBPcHRpb25hbCB0YWdzIHZpc2libGUgaW4gd2ViaG9va3MuXG4gICAqIEBwYXJhbSBoZWFkZXJzICAgIE9wdGlvbmFsIGhlYWRlcnMgdG8gc2VuZFxuICAgKi9cbiAgc3RvcmVVUkwodXJsOiBzdHJpbmcsIHN0b3JlUGFyYW1zPzogU3RvcmVQYXJhbXMsIHRva2VuPzogYW55LCBzZWN1cml0eT86IFNlY3VyaXR5LCB1cGxvYWRUYWdzPzogVXBsb2FkVGFncywgaGVhZGVycz86IHtba2V5OiBzdHJpbmddOiBzdHJpbmd9KTogUHJvbWlzZTxPYmplY3Q+IHtcbiAgICByZXR1cm4gc3RvcmVVUkwoe1xuICAgICAgc2Vzc2lvbjogdGhpcy5zZXNzaW9uLFxuICAgICAgdXJsLFxuICAgICAgc3RvcmVQYXJhbXMsXG4gICAgICB0b2tlbixcbiAgICAgIHNlY3VyaXR5LFxuICAgICAgdXBsb2FkVGFncyxcbiAgICAgIGhlYWRlcnMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWNjZXNzIGZpbGVzIHZpYSB0aGVpciBGaWxlc3RhY2sgaGFuZGxlcy5cbiAgICpcbiAgICogSWYgaGVhZCBvcHRpb24gaXMgcHJvdmlkZWQgLSByZXF1ZXN0IGhlYWRlcnMgYXJlIHJldHVybmVkIGluIHByb21pc2VcbiAgICogSWYgbWV0YWRhdGEgb3B0aW9uIGlzIHByb3ZpZGVkIC0gbWV0YWRhdGEgb2JqZWN0IGlzIHJldHVybmVkIGluIHByb21pc2VcbiAgICogT3RoZXJ3aXNlIGZpbGUgYmxvYiBpcyByZXR1cm5lZFxuICAgKiBNZXRhZGF0YSBhbmQgaGVhZCBvcHRpb25zIGNhbm5vdCBiZSBtaXhlZFxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGllbnQucmV0cmlldmUoJ2ZpbGVIYW5kbGUnLCB7XG4gICAqICBtZXRhZGF0YTogdHJ1ZSxcbiAgICogfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICogIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICogfSkuY2F0Y2goKGVycikgPT4ge1xuICAgKiAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgKiB9KVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBbRmlsZSBBUEkgLSBEb3dubG9hZF0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9maWxlI2Rvd25sb2FkKVxuICAgKiBAcGFyYW0gaGFuZGxlICAgIFZhbGlkIGZpbGUgaGFuZGxlXG4gICAqIEBwYXJhbSBvcHRpb25zICAgUmV0cmlldmVPcHRpb25zXG4gICAqIEBwYXJhbSBzZWN1cml0eSAgT3B0aW9uYWwgc2VjdXJpdHkgb3ZlcnJpZGUuXG4gICAqIEB0aHJvd3MgICAgICAgICAgRXJyb3JcbiAgICovXG4gIHJldHJpZXZlKGhhbmRsZTogc3RyaW5nLCBvcHRpb25zPzogUmV0cmlldmVPcHRpb25zLCBzZWN1cml0eT86IFNlY3VyaXR5KTogUHJvbWlzZTxPYmplY3QgfCBCbG9iPiB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gcmV0cmlldmUodGhpcy5zZXNzaW9uLCBoYW5kbGUsIG9wdGlvbnMsIHNlY3VyaXR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcmZhY2UgdG8gdGhlIEZpbGVzdGFjayBbUHJvY2Vzc2luZyBBUEldKGh0dHBzOi8vd3d3LmZpbGVzdGFjay5jb20vZG9jcy9hcGkvcHJvY2Vzc2luZykuXG4gICAqIENvbnZlcnQgYSBVUkwsIGhhbmRsZSwgb3Igc3RvcmFnZSBhbGlhcyB0byBhbm90aGVyIFVSTCB3aGljaCBsaW5rcyB0byB0aGUgdHJhbnNmb3JtZWQgZmlsZS5cbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHN0b3JlIHRoZSByZXR1cm5lZCBVUkwgd2l0aCBjbGllbnQuc3RvcmVVUkwuXG4gICAqXG4gICAqIFRyYW5zZm9ybSBwYXJhbXMgY2FuIGJlIHByb3ZpZGVkIGluIGNhbWVsQ2FzZSBvciBzbmFrZUNhc2Ugc3R5bGUgaWU6IHBhcnRpYWxfcGl4ZWxhdGUgb3IgcGFydGlhbFBpeGVsYXRlXG4gICAqXG4gICAqICMjIyBFeGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0IHRyYW5zZm9ybWVkVXJsID0gY2xpZW50LnRyYW5zZm9ybSh1cmwsIHtcbiAgICogICBjcm9wOiB7XG4gICAqICAgICBkaW06IFt4LCB5LCB3aWR0aCwgaGVpZ2h0XSxcbiAgICogICB9LFxuICAgKiAgIHZpZ25ldHRlOiB7XG4gICAqICAgICBibHVybW9kZTogJ2dhdXNzaWFuJyxcbiAgICogICAgIGFtb3VudDogNTAsXG4gICAqICAgfSxcbiAgICogICBmbGlwOiB0cnVlLFxuICAgKiAgIHBhcnRpYWxfcGl4ZWxhdGU6IHtcbiAgICogICAgIG9iamVjdHM6IFtbMTAsIDIwLCAyMDAsIDI1MF0sIFsyNzUsIDkxLCA1MDAsIDU1N11dLFxuICAgKiAgIH0sXG4gICAqIH07XG4gICAqXG4gICAqIC8vIG9wdGlvbmFsbHkgc3RvcmUgdGhlIG5ldyBVUkxcbiAgICogY2xpZW50LnN0b3JlVVJMKHRyYW5zZm9ybWVkVXJsKS50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICogYGBgXG4gICAqIEBzZWUgW0ZpbGVzdGFjayBQcm9jZXNzaW5nIEFQSV0oaHR0cHM6Ly93d3cuZmlsZXN0YWNrLmNvbS9kb2NzL2FwaS9wcm9jZXNzaW5nKVxuICAgKiBAcGFyYW0gdXJsICAgICBTaW5nbGUgb3IgbXVsdGlwbGUgdmFsaWQgVVJMcyAoaHR0cChzKTovLyksIGZpbGUgaGFuZGxlcywgb3Igc3RvcmFnZSBhbGlhc2VzIChzcmM6Ly8pIHRvIGFuIGltYWdlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBUcmFuc2Zvcm1hdGlvbnMgYXJlIGFwcGxpZWQgaW4gdGhlIG9yZGVyIHNwZWNpZmllZCBieSB0aGlzIG9iamVjdC5cbiAgICogQHBhcmFtIGI2NCAgICAgVXNlIG5ldyBtb3JlIHNhZmUgZm9ybWF0IGZvciBnZW5lcmF0aW5nIHRyYW5zZm9ybXMgdXJsIChkZWZhdWx0PWZhbHNlKSBOb3RlOiBJZiB0aGVyZSB3aWxsIGJlIGFueSBpc3N1ZXMgd2l0aCB1cmwgcGxlYXNlIHRlc3QgaXQgd2l0aCBlbmFibGVkIGI2NCBzdXBwb3J0XG4gICAqIEByZXR1cm5zICAgICAgIEEgbmV3IFVSTCB0aGF0IHBvaW50cyB0byB0aGUgdHJhbnNmb3JtZWQgcmVzb3VyY2UuXG4gICAqL1xuICB0cmFuc2Zvcm0odXJsOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3B0aW9uczogVHJhbnNmb3JtT3B0aW9ucywgYjY0OiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHJldHVybiB0cmFuc2Zvcm0odGhpcy5zZXNzaW9uLCB1cmwsIG9wdGlvbnMsIGI2NCk7XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgbXVsdGktcGFydCB1cGxvYWQgZmxvdy4gVXNlIHRoaXMgZm9yIEZpbGVzdGFjayBDSU4gYW5kIEZJSSB1cGxvYWRzLlxuICAgKlxuICAgKiBJbiBOb2RlIHJ1bnRpbWVzIHRoZSBmaWxlIGFyZ3VtZW50IGlzIHRyZWF0ZWQgYXMgYSBmaWxlIHBhdGguXG4gICAqIFVwbG9hZGluZyBmcm9tIGEgTm9kZSBidWZmZXIgaXMgbm90IHlldCBpbXBsZW1lbnRlZC5cbiAgICpcbiAgICogIyMjIEV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogY29uc3QgdG9rZW4gPSB7fTtcbiAgICogY29uc3Qgb25SZXRyeSA9IChvYmopID0+IHtcbiAgICogICBjb25zb2xlLmxvZyhgUmV0cnlpbmcgJHtvYmoubG9jYXRpb259IGZvciAke29iai5maWxlbmFtZX0uIEF0dGVtcHQgJHtvYmouYXR0ZW1wdH0gb2YgMTAuYCk7XG4gICAqIH07XG4gICAqXG4gICAqIGNsaWVudC51cGxvYWQoZmlsZSwgeyBvblJldHJ5IH0sIHsgZmlsZW5hbWU6ICdmb29iYXIuanBnJyB9LCB0b2tlbilcbiAgICogICAudGhlbihyZXMgPT4gY29uc29sZS5sb2cocmVzKSk7XG4gICAqXG4gICAqIGNsaWVudC51cGxvYWQoe2ZpbGUsIG5hbWV9LCB7IG9uUmV0cnkgfSwgeyBmaWxlbmFtZTogJ2Zvb2Jhci5qcGcnIH0sIHRva2VuKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICpcbiAgICogdG9rZW4ucGF1c2UoKTsgIC8vIFBhdXNlIGZsb3dcbiAgICogdG9rZW4ucmVzdW1lKCk7IC8vIFJlc3VtZSBmbG93XG4gICAqIHRva2VuLmNhbmNlbCgpOyAvLyBDYW5jZWwgZmxvdyAocmVqZWN0cylcbiAgICogYGBgXG4gICAqIEBwYXJhbSB7SW5wdXRGaWxlfSAgICBmaWxlICAgICAgICAgICBNdXN0IGJlIGEgdmFsaWQgW0ZpbGUgfCBCbG9iIHwgQnVmZmVyIHwgc3RyaW5nXVxuICAgKiBAcGFyYW0gdXBsb2FkT3B0aW9ucyAgVXBsb2FkZXIgb3B0aW9ucy5cbiAgICogQHBhcmFtIHN0b3JlT3B0aW9ucyAgIFN0b3JhZ2Ugb3B0aW9ucy5cbiAgICogQHBhcmFtIHRva2VuICAgICAgICAgIEEgY29udHJvbCB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbGwgY2FuY2VsKCksIHBhdXNlKCksIGFuZCByZXN1bWUoKS5cbiAgICogQHBhcmFtIHNlY3VyaXR5ICAgICAgIE9wdGlvbmFsIHNlY3VyaXR5IHBvbGljeSBhbmQgc2lnbmF0dXJlIG92ZXJyaWRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIHVwbG9hZChmaWxlOiBJbnB1dEZpbGUsIG9wdGlvbnM/OiBVcGxvYWRPcHRpb25zLCBzdG9yZU9wdGlvbnM/OiBTdG9yZVVwbG9hZE9wdGlvbnMsIHRva2VuPzogYW55LCBzZWN1cml0eT86IFNlY3VyaXR5KSB7XG4gICAgbGV0IHVwbG9hZCA9IG5ldyBVcGxvYWQob3B0aW9ucywgc3RvcmVPcHRpb25zKTtcbiAgICB1cGxvYWQuc2V0U2Vzc2lvbih0aGlzLnNlc3Npb24pO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB1cGxvYWQuc2V0VG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChzZWN1cml0eSkge1xuICAgICAgdXBsb2FkLnNldFNlY3VyaXR5KHNlY3VyaXR5KTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHVwbG9hZC5vbignZXJyb3InLCBlID0+IHtcbiAgICAgIGlmICh0aGlzLmZvcndhcmRFcnJvcnMpIHtcbiAgICAgICAgU2VudHJ5LndpdGhTY29wZShzY29wZSA9PiB7XG4gICAgICAgICAgc2NvcGUuc2V0RXh0cmFzKHsgdXBsb2FkT3B0aW9uczogb3B0aW9ucywgc3RvcmVPcHRpb25zLCBkZXRhaWxzOiBlLmRldGFpbHMgfSk7XG4gICAgICAgICAgZS5tZXNzYWdlID0gYEZTLSR7ZS5tZXNzYWdlfWA7XG5cbiAgICAgICAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZW1pdCgndXBsb2FkLmVycm9yJywgZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdXBsb2FkLnVwbG9hZChmaWxlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSBtdWx0aS1wYXJ0IHVwbG9hZCBmbG93LiBVc2UgdGhpcyBmb3IgRmlsZXN0YWNrIENJTiBhbmQgRklJIHVwbG9hZHMuXG4gICAqXG4gICAqIEluIE5vZGUgcnVudGltZXMgdGhlIGZpbGUgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGUgcGF0aC5cbiAgICogVXBsb2FkaW5nIGZyb20gYSBOb2RlIGJ1ZmZlciBpcyBub3QgeWV0IGltcGxlbWVudGVkLlxuICAgKlxuICAgKiAjIyMgRXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCB0b2tlbiA9IHt9O1xuICAgKiBjb25zdCBvblJldHJ5ID0gKG9iaikgPT4ge1xuICAgKiAgIGNvbnNvbGUubG9nKGBSZXRyeWluZyAke29iai5sb2NhdGlvbn0gZm9yICR7b2JqLmZpbGVuYW1lfS4gQXR0ZW1wdCAke29iai5hdHRlbXB0fSBvZiAxMC5gKTtcbiAgICogfTtcbiAgICpcbiAgICogY2xpZW50Lm11bHRpdXBsb2FkKFtmaWxlXSwgeyBvblJldHJ5IH0sIHRva2VuKVxuICAgKiAgIC50aGVuKHJlcyA9PiBjb25zb2xlLmxvZyhyZXMpKTtcbiAgICpcbiAgICogY2xpZW50Lm11bHRpdXBsb2FkKFt7ZmlsZSwgbmFtZX1dLCB7IG9uUmV0cnkgfSwgdG9rZW4pXG4gICAqICAgLnRoZW4ocmVzID0+IGNvbnNvbGUubG9nKHJlcykpO1xuICAgKlxuICAgKiB0b2tlbi5wYXVzZSgpOyAgLy8gUGF1c2UgZmxvd1xuICAgKiB0b2tlbi5yZXN1bWUoKTsgLy8gUmVzdW1lIGZsb3dcbiAgICogdG9rZW4uY2FuY2VsKCk7IC8vIENhbmNlbCBmbG93IChyZWplY3RzKVxuICAgKiBgYGBcbiAgICogQHBhcmFtIHtJbnB1dEZpbGVbXX0gIGZpbGUgICAgICAgICAgIE11c3QgYmUgYSB2YWxpZCBbRmlsZSB8IEJsb2IgfCBCdWZmZXIgfCBzdHJpbmcgKGJhc2U2NCldXG4gICAqIEBwYXJhbSB1cGxvYWRPcHRpb25zICBVcGxvYWQgb3B0aW9ucy5cbiAgICogQHBhcmFtIHN0b3JlT3B0aW9ucyAgIFN0b3JhZ2Ugb3B0aW9ucy5cbiAgICogQHBhcmFtIHRva2VuICAgICAgICAgIEEgY29udHJvbCB0b2tlbiB0aGF0IGNhbiBiZSB1c2VkIHRvIGNhbGwgY2FuY2VsKCksIHBhdXNlKCksIGFuZCByZXN1bWUoKS5cbiAgICogQHBhcmFtIHNlY3VyaXR5ICAgICAgIE9wdGlvbmFsIHNlY3VyaXR5IHBvbGljeSBhbmQgc2lnbmF0dXJlIG92ZXJyaWRlLlxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX1cbiAgICovXG4gIG11bHRpdXBsb2FkKGZpbGU6IElucHV0RmlsZVtdLCBvcHRpb25zPzogVXBsb2FkT3B0aW9ucywgc3RvcmVPcHRpb25zPzogU3RvcmVVcGxvYWRPcHRpb25zLCB0b2tlbj86IGFueSwgc2VjdXJpdHk/OiBTZWN1cml0eSkge1xuICAgIGxldCB1cGxvYWQgPSBuZXcgVXBsb2FkKG9wdGlvbnMsIHN0b3JlT3B0aW9ucyk7XG5cbiAgICB1cGxvYWQuc2V0U2Vzc2lvbih0aGlzLnNlc3Npb24pO1xuXG4gICAgaWYgKHRva2VuKSB7XG4gICAgICB1cGxvYWQuc2V0VG9rZW4odG9rZW4pO1xuICAgIH1cblxuICAgIGlmIChzZWN1cml0eSkge1xuICAgICAgdXBsb2FkLnNldFNlY3VyaXR5KHNlY3VyaXR5KTtcbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIHVwbG9hZC5vbignZXJyb3InLCBlID0+IHtcbiAgICAgIFNlbnRyeS53aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICBzY29wZS5zZXRFeHRyYXMoZS5kZXRhaWxzKTtcbiAgICAgICAgc2NvcGUuc2V0RXh0cmFzKHsgdXBsb2FkT3B0aW9uczogb3B0aW9ucywgc3RvcmVPcHRpb25zIH0pO1xuICAgICAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmVtaXQoJ3VwbG9hZC5lcnJvcicsIGUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVwbG9hZC5tdWx0aXVwbG9hZChmaWxlKTtcbiAgfVxufVxuIl19

@@ -272,5 +272,3 @@ /*

if (config.timeout) {
console.log(config.timeout);
req.setTimeout(config.timeout, function () {
console.log('socket timeouted===========');
req.abort();

@@ -327,2 +325,2 @@ if (cancelListener) {

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUMzQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEtBQUssS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUMsSUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQy9CLElBQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztBQUNyQyxJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUV2Qzs7Ozs7R0FLRztBQUNIO0lBQWlDLHNDQUFlO0lBRzlDLDRCQUFZLEdBQUcsRUFBRSxJQUFTO1FBQVQscUJBQUEsRUFBQSxTQUFTO1FBQTFCLFlBQ0Usa0JBQU0sSUFBSSxDQUFDLFNBSVo7UUFGQyxLQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFD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QUVELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtZQUNqQixJQUFNLGVBQWUsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakQsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNoQztRQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FwVEEsQUFvVEMsSUFBQSIsImZpbGUiOiJsaWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCAqIGFzIHpsaWIgZnJvbSAnemxpYic7XG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCAqIGFzIFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgRnNSZXF1ZXN0T3B0aW9ucywgRnNSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHByZXBhcmVEYXRhLCBwYXJzZVJlc3BvbnNlLCBjb21iaW5lVVJMLCBzZXQgYXMgc2V0SGVhZGVyLCBub3JtYWxpemVIZWFkZXJzIH0gZnJvbSAnLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IEZzUmVxdWVzdEVycm9yQ29kZSwgRnNSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQgeyBGc0h0dHBNZXRob2QgfSBmcm9tICcuLy4uL3R5cGVzJztcblxuY29uc3QgSFRUUFNfUkVHRVhQID0gL2h0dHBzOj8vO1xuY29uc3QgSFRUUF9DSFVOS19TSVpFID0gMTYgKiAxMDI0O1xuY29uc3QgTUFYX1JFRElSRUNUUyA9IDEwO1xuY29uc3QgQ0FOQ0VMX0NMRUFSID0gYEZzQ2xlYW5NZW1vcnlgO1xuY29uc3QgZGVidWcgPSBEZWJ1ZygnZnM6cmVxdWVzdDpodHRwJyk7XG5cbi8qKlxuICogV3JpdGFibGUgc3RyZWFtIHRoYXRzIG92ZXJ3cmFwIGh0dHAgcmVxdWVzdCBmb3IgcHJvZ3Jlc3MgZXZlbnRcbiAqXG4gKiBAY2xhc3MgSHR0cFdyaXRhYmxlU3RyZWFtXG4gKiBAZXh0ZW5kcyB7U3RyZWFtLldyaXRhYmxlfVxuICovXG5jbGFzcyBIdHRwV3JpdGFibGVTdHJlYW0gZXh0ZW5kcyBTdHJlYW0uV3JpdGFibGUge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxLCBvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcTtcbiAgICByZXEub25jZSgnZHJhaW4nLCAoKSA9PiB0aGlzLmVtaXQoJ2RyYWluJykpO1xuICB9XG5cbiAgX3dyaXRlKGNodW5rOiBhbnksIGVuY29kaW5nPzogc3RyaW5nLCBjYj86IChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0LndyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgZW5kKGNodW5rKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLnJlcXVlc3Qud3JpdGUoY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdC5lbmQoKTtcbiAgfVxufVxuXG4vKipcbiAqIE5vZGUgaHR0cCByZXF1ZXN0IGNsYXNzXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEh0dHBBZGFwdGVyXG4gKiBAaW1wbGVtZW50cyB7QWRhcHRlckludGVyZmFjZX1cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBBZGFwdGVyIGltcGxlbWVudHMgQWRhcHRlckludGVyZmFjZSB7XG4gIHByaXZhdGUgcmVkaXJlY3RIb29wcyA9IDA7XG4gIHByaXZhdGUgcmVkaXJlY3RQYXRocyA9IFtdO1xuXG4gIC8qKlxuICAgKiBkbyByZXF1ZXN0IGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGc1JlcXVlc3RPcHRpb25zfSBjb25maWdcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICByZXF1ZXN0KGNvbmZpZzogRnNSZXF1ZXN0T3B0aW9ucykge1xuICAgIC8vIGlmIHRoaXMgb3B0aW9uIGlzIHVuc3BlY2lmaWVkIHNldCBpdCBieSBkZWZhdWx0XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmlsZXN0YWNrSGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZy5maWxlc3RhY2tIZWFkZXJzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25maWcuaGVhZGVycyA9IG5vcm1hbGl6ZUhlYWRlcnMoY29uZmlnLmhlYWRlcnMpO1xuXG4gICAgbGV0IHsgZGF0YSwgaGVhZGVycyB9ID0gcHJlcGFyZURhdGEoY29uZmlnKTtcblxuICAgIGhlYWRlcnMgPSBzZXRIZWFkZXIoaGVhZGVycywgJ3VzZXItYWdlbnQnLCBgZmlsZXN0YWNrLXJlcXVlc3QvJHtnZXRWZXJzaW9uKCl9YCk7XG5cbiAgICAvLyBmb3Igbm93IHdlIGFyZSBub3QgdXNpbmcgc3RyZWFtc1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBkZWJ1ZygnUmVxdWVzdCBkYXRhICVPJywgZGF0YSk7XG5cbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGlmICghdXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcsIEpTT04gb3IgYSBCdWZmZXInLCBjb25maWcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH1cblxuICAgICAgaGVhZGVycyA9IHNldEhlYWRlcihoZWFkZXJzLCAnY29udGVudC1sZW5ndGgnLCBkYXRhLmxlbmd0aCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGxldCBhdXRoO1xuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgaWYgKCFjb25maWcuYXV0aC51c2VybmFtZSB8fCBjb25maWcuYXV0aC51c2VybmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgQmFzaWMgYXV0aDogdXNlcm5hbWUgaXMgcmVxdWlyZWQgJHtjb25maWcuYXV0aH1gLCBjb25maWcpKTtcbiAgICAgIH1cblxuICAgICAgYXV0aCA9IGAke2NvbmZpZy5hdXRoLnVzZXJuYW1lfToke2NvbmZpZy5hdXRoLnBhc3N3b3JkfWA7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgbGV0IHBhcnNlZCA9IHVybC5wYXJzZShjb25maWcudXJsKTtcblxuICAgIC8vIHRyeSB0byBhZGQgZGVmYXVsdCBodHRwcyBwcm90b2NvbFxuICAgIGlmICghcGFyc2VkLnByb3RvY29sKSB7XG4gICAgICBwYXJzZWQgPSB1cmwucGFyc2UoYGh0dHBzOi8vJHtjb25maWcudXJsfWApO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBqdXN0IGJlIHN1cmUgdGhhdCB0aGUgaG9zdCBpcyBwYXJzZWQgY29ycmVjdGx5LCBub3QgbmVlZGVkIHRvIHRlc3QgKi9cbiAgICBpZiAoIXBhcnNlZC5ob3N0KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBDYW5ub3QgcGFyc2UgcHJvdmlkZWQgdXJsICR7Y29uZmlnLnVybH1gLCBjb25maWcpKTtcbiAgICB9XG5cbiAgICAvLyBub3JtYWxpemUgYXV0aCBoZWFkZXJcbiAgICBpZiAoYXV0aCAmJiBoZWFkZXJzLkF1dGhvcml6YXRpb24pIHtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzLkF1dGhvcml6YXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgaXNIdHRwc1JlcXVlc3QgPSBIVFRQU19SRUdFWFAudGVzdChwYXJzZWQucHJvdG9jb2wpO1xuICAgIGNvbnN0IGFnZW50ID0gaXNIdHRwc1JlcXVlc3QgPyByZXF1aXJlKCdodHRwcycpIDogcmVxdWlyZSgnaHR0cCcpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGNvbWJpbmVVUkwocGFyc2VkLnBhdGgsIGNvbmZpZy5wYXJhbXMpLFxuICAgICAgaG9zdDogcGFyc2VkLmhvc3QsXG4gICAgICBwb3J0OiBwYXJzZWQucG9ydCxcbiAgICAgIHByb3RvY29sOiBwYXJzZWQucHJvdG9jb2wsXG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogbmV3IGFnZW50LkFnZW50KCksXG4gICAgICBhdXRoOiBhdXRoLFxuICAgIH07XG5cbiAgICBkZWJ1ZygnU3RhcnRpbmcgJXMgcmVxdWVzdCB3aXRoIG9wdGlvbnMgJU8nLCBpc0h0dHBzUmVxdWVzdCA/ICdodHRwcycgOiAnaHR0cCcsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZzUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpOiBhbnkgPT4ge1xuICAgICAgbGV0IHJlcTtcbiAgICAgIGxldCBjYW5jZWxMaXN0ZW5lcjtcblxuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjYW5jZWxMaXN0ZW5lciA9IGNvbmZpZy5jYW5jZWxUb2tlbi5vbignY2FuY2VsJywgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIC8vIGNsZWFudXAgaGFuZGxlclxuICAgICAgICAgIGNhbmNlbExpc3RlbmVyID0gbnVsbDtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgcHJvbWlzZSBpcyByZXNvbHZlZCBieSBzeXN0ZW1cbiAgICAgICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlID09PSBDQU5DRUxfQ0xFQVIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogaWYgcmVxdWVzdCBpcyBkb25lIGNhbmNlbCB0b2tlbiBzaG91bGQgbm90IHRocm93IGFueSBlcnJvciAqL1xuICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICAgICAgcmVxID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBjYW5jZWxlZCBieSB1c2VyICVzLCBjb25maWc6ICVPJywgcmVhc29uLCBjb25maWcpO1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGFib3J0ZWQuIFJlYXNvbjogJHtyZWFzb259YCwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuQUJPUlRFRCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVxID0gYWdlbnQucmVxdWVzdChvcHRpb25zLCByZXMgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDoganVzdCBiZSBzdXJlIHRoYXQgcmVzcG9uc2Ugd2lsbCBub3QgYmUgY2FsbGVkIGFmdGVyIHJlcXVlc3QgaXMgYWJvcnRlZCAqL1xuICAgICAgICBpZiAoIXJlcSB8fCByZXEuYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHJlYW0gPSByZXM7XG4gICAgICAgIGRlYnVnKCdSZXNwb25zZSBzdGF0dXNDb2RlOiAlZCwgUmVzcG9uc2UgSGVhZGVyczogJU8nLCByZXMuc3RhdHVzQ29kZSwgcmVzLmhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGNvbXByZXNzSGVhZGVycyA9IHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG5cbiAgICAgICAgaWYgKGNvbXByZXNzSGVhZGVycyAmJiBjb21wcmVzc0hlYWRlcnMubGVuZ3RoICYmIFsnZ3ppcCcsICdjb21wcmVzcycsICdkZWZsYXRlJ10uc29tZSgodikgPT4gY29tcHJlc3NIZWFkZXJzLmluZGV4T2YodikgPiAtMSkpIHtcbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtID0gcmVzLnN0YXR1c0NvZGUgPT09IDIwNCA/IHN0cmVhbSA6IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlOiBGc1Jlc3BvbnNlID0ge1xuICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzLnN0YXR1c01lc3NhZ2UsXG4gICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gZm9sbG93IHJlZGlyZWN0IHNvIG1ha2Ugc2FtZSByZXF1ZXN0IHdpdGggbmV3IGxvY2F0aW9uXG4gICAgICAgIGlmIChbMzAxLCAzMDJdLmluZGV4T2YocmVzLnN0YXR1c0NvZGUpID4gLTEpIHtcbiAgICAgICAgICBkZWJ1ZygnUmVkaXJlY3QgcmVjZWl2ZWQgJXMnLCByZXMuc3RhdHVzQ29kZSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5yZWRpcmVjdEhvb3BzID49IE1BWF9SRURJUkVDVFMpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBNYXggcmVkaXJlY3RzICgke3RoaXMucmVkaXJlY3RIb29wc30pIHJlYWNoZWQuIEV4aXRpbmdgLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1cmwgPSByZXMuaGVhZGVyc1snbG9jYXRpb24nXTtcblxuICAgICAgICAgIGlmICghdXJsIHx8IHVybC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZWRpcmVjdCBoZWFkZXIgbG9jYXRpb24gbm90IGZvdW5kYCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RQYXRocy5pbmRleE9mKHVybCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlZGlyZWN0IGxvb3AgZGV0ZWN0ZWQgYXQgdXJsICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMucmVkaXJlY3RQYXRocy5wdXNoKHVybCk7XG4gICAgICAgICAgdGhpcy5yZWRpcmVjdEhvb3BzKys7XG5cbiAgICAgICAgICAvLyBmcmVlIHJlc291cmNlc1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBkZWJ1ZygnUmVkaXJlY3RpbmcgcmVxdWVzdCB0byAlcyAoaG9vcC1jb3VudDogJWQpJywgdXJsLCB0aGlzLnJlZGlyZWN0SG9vcHMpO1xuXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5yZXF1ZXN0KE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZywgeyB1cmwgfSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKSk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGl0cyBoYXJkIHRvIHRlc3Qgc29ja2V0IGV2ZW50cyB3aXRoIGplc3QgYW5kIG5vY2sgLSB0ZXN0ZWQgbWFudWFsbHkgKi9cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlcSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvcjogQWJvcnRlZCAlTycsIGVycik7XG5cbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjbGVhciBjYW5jZWwgdG9rZW4gdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoZXJyLm1lc3NhZ2UsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLk5FVFdPUkspKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlbmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gY2xlYXIgY2FuY2VsIHRva2VuIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSByZXNwb25zZSBkYXRhIGluc2lkZVxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0KSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHJlc3BvbnNlXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHBhcnNlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBmcmVlIHJlc291cmNlc1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICByZXNwb25zZUJ1ZmZlciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmICg1MDAgPD0gcmVzcG9uc2Uuc3RhdHVzICYmIHJlc3BvbnNlLnN0YXR1cyA8PSA1OTkpIHtcbiAgICAgICAgICAgIC8vIHNlcnZlciBlcnJvciB0aHJvd1xuICAgICAgICAgICAgZGVidWcoJ1NlcnZlciBlcnJvcig1eHgpIC0gJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgU2VydmVyIGVycm9yICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5TRVJWRVIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKDQwMCA8PSByZXNwb25zZS5zdGF0dXMgJiYgcmVzcG9uc2Uuc3RhdHVzIDw9IDQ5OSkge1xuICAgICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3IoNHh4KSAtICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgZXJyb3IgJHt1cmx9YCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFUVVFU1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlbmRzOiAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgICBjb25zb2xlLmxvZyhjb25maWcudGltZW91dCk7XG4gICAgICAgIHJlcS5zZXRUaW1lb3V0KGNvbmZpZy50aW1lb3V0LCAoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coJ3NvY2tldCB0aW1lb3V0ZWQ9PT09PT09PT09PScpO1xuICAgICAgICAgIHJlcS5hYm9ydCgpO1xuXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdSZXF1ZXN0IHRpbWVvdXQnLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5USU1FT1VUKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXEub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVxIHx8IHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3I6ICVzIC0gJU8nLCBlcnIsIGVyci5jb2RlKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgZXJyb3I6ICR7ZXJyLmNvZGV9YCwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuTkVUV09SSykpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgWydQT1NUJywgJ1BVVCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgPiAtMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJUb0NodW5rcyhkYXRhKS5waXBlKHRoaXMuZ2V0UHJvZ3Jlc3NNb25pdG9yKGNvbmZpZywgZGF0YS5sZW5ndGgpKS5waXBlKG5ldyBIdHRwV3JpdGFibGVTdHJlYW0ocmVxKSk7XG4gICAgICB9XG5cbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW9uaXRvciBhbmQgZW1pdCBwcm9ncmVzcyBldmVudCBpZiBuZWVkZWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICBwcml2YXRlIGdldFByb2dyZXNzTW9uaXRvciA9IChjb25maWcsIHRvdGFsKSA9PiB7XG4gICAgbGV0IGxvYWRlZCA9IDA7XG5cbiAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBTdHJlYW0uVHJhbnNmb3JtKCk7XG4gICAgcHJvZ3Jlc3MuX3RyYW5zZm9ybSA9IChjaHVuaywgZW5jb2RpbmcsIGNiKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5vblByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIFtGc0h0dHBNZXRob2QuUE9TVCwgRnNIdHRwTWV0aG9kLlBVVF0uaW5kZXhPZihjb25maWcubWV0aG9kKSA+IC0xKSB7XG4gICAgICAgIGxvYWRlZCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIGNvbmZpZy5vblByb2dyZXNzKHtcbiAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICB0b3RhbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjYihudWxsLCBjaHVuayk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9ncmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGJ1ZmZlciB0byBzdHJlYW1cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSBidWZmZXJcbiAgICogQHJldHVybnMge1N0cmVhbS5SZWFkYWJsZX1cbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1ZmZlclRvQ2h1bmtzKGJ1ZmZlcik6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgY29uc3QgY2h1bmtpbmcgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IHRvdGFsTGVuZ3RoICUgSFRUUF9DSFVOS19TSVpFO1xuICAgIGNvbnN0IGN1dG9mZiA9IHRvdGFsTGVuZ3RoIC0gcmVtYWluZGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXRvZmY7IGkgKz0gSFRUUF9DSFVOS19TSVpFKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGJ1ZmZlci5zbGljZShpLCBpICsgSFRUUF9DSFVOS19TSVpFKTtcbiAgICAgIGNodW5raW5nLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIGlmIChyZW1haW5kZXIgPiAwKSB7XG4gICAgICBjb25zdCByZW1haW5kZXJCdWZmZXIgPSBidWZmZXIuc2xpY2UoLXJlbWFpbmRlcik7XG4gICAgICBjaHVua2luZy5wdXNoKHJlbWFpbmRlckJ1ZmZlcik7XG4gICAgfVxuXG4gICAgY2h1bmtpbmcucHVzaChudWxsKTtcblxuICAgIHJldHVybiBjaHVua2luZztcbiAgfVxufVxuIl19
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7QUFFSCxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUMzQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFHMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6QyxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUVqQyxPQUFPLEtBQUssS0FBSyxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsR0FBRyxJQUFJLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFMUMsSUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQy9CLElBQU0sZUFBZSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLElBQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQztBQUNyQyxJQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUV2Qzs7Ozs7R0FLRztBQUNIO0lBQWlDLHNDQUFlO0lBRzlDLDRCQUFZLEdBQUcsRUFBRSxJQUFTO1FBQVQscUJBQUEsRUFBQSxTQUFTO1FBQTFCLFlBQ0Usa0JBQU0sSUFBSSxDQUFDLFNBSVo7UUFGQyxLQUFJLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUNuQixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFNLE9BQUEsS0FBSSxDQUFD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UUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNoQztRQUVELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFcEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FsVEEsQUFrVEMsSUFBQSIsImZpbGUiOiJsaWIvcmVxdWVzdC9hZGFwdGVycy9odHRwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2tcbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyB1cmwgZnJvbSAndXJsJztcbmltcG9ydCAqIGFzIHpsaWIgZnJvbSAnemxpYic7XG5pbXBvcnQgRGVidWcgZnJvbSAnZGVidWcnO1xuXG5pbXBvcnQgeyBBZGFwdGVySW50ZXJmYWNlIH0gZnJvbSAnLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2V0VmVyc2lvbiB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCAqIGFzIFN0cmVhbSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHsgRnNSZXF1ZXN0T3B0aW9ucywgRnNSZXNwb25zZSB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCAqIGFzIHV0aWxzIGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHByZXBhcmVEYXRhLCBwYXJzZVJlc3BvbnNlLCBjb21iaW5lVVJMLCBzZXQgYXMgc2V0SGVhZGVyLCBub3JtYWxpemVIZWFkZXJzIH0gZnJvbSAnLi8uLi9oZWxwZXJzJztcbmltcG9ydCB7IEZzUmVxdWVzdEVycm9yQ29kZSwgRnNSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcic7XG5pbXBvcnQgeyBGc0h0dHBNZXRob2QgfSBmcm9tICcuLy4uL3R5cGVzJztcblxuY29uc3QgSFRUUFNfUkVHRVhQID0gL2h0dHBzOj8vO1xuY29uc3QgSFRUUF9DSFVOS19TSVpFID0gMTYgKiAxMDI0O1xuY29uc3QgTUFYX1JFRElSRUNUUyA9IDEwO1xuY29uc3QgQ0FOQ0VMX0NMRUFSID0gYEZzQ2xlYW5NZW1vcnlgO1xuY29uc3QgZGVidWcgPSBEZWJ1ZygnZnM6cmVxdWVzdDpodHRwJyk7XG5cbi8qKlxuICogV3JpdGFibGUgc3RyZWFtIHRoYXRzIG92ZXJ3cmFwIGh0dHAgcmVxdWVzdCBmb3IgcHJvZ3Jlc3MgZXZlbnRcbiAqXG4gKiBAY2xhc3MgSHR0cFdyaXRhYmxlU3RyZWFtXG4gKiBAZXh0ZW5kcyB7U3RyZWFtLldyaXRhYmxlfVxuICovXG5jbGFzcyBIdHRwV3JpdGFibGVTdHJlYW0gZXh0ZW5kcyBTdHJlYW0uV3JpdGFibGUge1xuICBwcml2YXRlIHJlcXVlc3Q7XG5cbiAgY29uc3RydWN0b3IocmVxLCBvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcblxuICAgIHRoaXMucmVxdWVzdCA9IHJlcTtcbiAgICByZXEub25jZSgnZHJhaW4nLCAoKSA9PiB0aGlzLmVtaXQoJ2RyYWluJykpO1xuICB9XG5cbiAgX3dyaXRlKGNodW5rOiBhbnksIGVuY29kaW5nPzogc3RyaW5nLCBjYj86IChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5yZXF1ZXN0LndyaXRlKGNodW5rLCBlbmNvZGluZywgY2IpO1xuICB9XG5cbiAgZW5kKGNodW5rKSB7XG4gICAgaWYgKGNodW5rKSB7XG4gICAgICB0aGlzLnJlcXVlc3Qud3JpdGUoY2h1bmspO1xuICAgIH1cblxuICAgIHRoaXMucmVxdWVzdC5lbmQoKTtcbiAgfVxufVxuXG4vKipcbiAqIE5vZGUgaHR0cCByZXF1ZXN0IGNsYXNzXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIEh0dHBBZGFwdGVyXG4gKiBAaW1wbGVtZW50cyB7QWRhcHRlckludGVyZmFjZX1cbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBBZGFwdGVyIGltcGxlbWVudHMgQWRhcHRlckludGVyZmFjZSB7XG4gIHByaXZhdGUgcmVkaXJlY3RIb29wcyA9IDA7XG4gIHByaXZhdGUgcmVkaXJlY3RQYXRocyA9IFtdO1xuXG4gIC8qKlxuICAgKiBkbyByZXF1ZXN0IGJhc2VkIG9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtGc1JlcXVlc3RPcHRpb25zfSBjb25maWdcbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICByZXF1ZXN0KGNvbmZpZzogRnNSZXF1ZXN0T3B0aW9ucykge1xuICAgIC8vIGlmIHRoaXMgb3B0aW9uIGlzIHVuc3BlY2lmaWVkIHNldCBpdCBieSBkZWZhdWx0XG4gICAgaWYgKHR5cGVvZiBjb25maWcuZmlsZXN0YWNrSGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbmZpZy5maWxlc3RhY2tIZWFkZXJzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25maWcuaGVhZGVycyA9IG5vcm1hbGl6ZUhlYWRlcnMoY29uZmlnLmhlYWRlcnMpO1xuXG4gICAgbGV0IHsgZGF0YSwgaGVhZGVycyB9ID0gcHJlcGFyZURhdGEoY29uZmlnKTtcblxuICAgIGhlYWRlcnMgPSBzZXRIZWFkZXIoaGVhZGVycywgJ3VzZXItYWdlbnQnLCBgZmlsZXN0YWNrLXJlcXVlc3QvJHtnZXRWZXJzaW9uKCl9YCk7XG5cbiAgICAvLyBmb3Igbm93IHdlIGFyZSBub3QgdXNpbmcgc3RyZWFtc1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBkZWJ1ZygnUmVxdWVzdCBkYXRhICVPJywgZGF0YSk7XG5cbiAgICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIGlmICghdXRpbHMuaXNTdHJpbmcoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdEYXRhIG11c3QgYmUgYSBzdHJpbmcsIEpTT04gb3IgYSBCdWZmZXInLCBjb25maWcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCAndXRmLTgnKTtcbiAgICAgIH1cblxuICAgICAgaGVhZGVycyA9IHNldEhlYWRlcihoZWFkZXJzLCAnY29udGVudC1sZW5ndGgnLCBkYXRhLmxlbmd0aCwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGxldCBhdXRoO1xuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgaWYgKCFjb25maWcuYXV0aC51c2VybmFtZSB8fCBjb25maWcuYXV0aC51c2VybmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgQmFzaWMgYXV0aDogdXNlcm5hbWUgaXMgcmVxdWlyZWQgJHtjb25maWcuYXV0aH1gLCBjb25maWcpKTtcbiAgICAgIH1cblxuICAgICAgYXV0aCA9IGAke2NvbmZpZy5hdXRoLnVzZXJuYW1lfToke2NvbmZpZy5hdXRoLnBhc3N3b3JkfWA7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgdXJsXG4gICAgbGV0IHBhcnNlZCA9IHVybC5wYXJzZShjb25maWcudXJsKTtcblxuICAgIC8vIHRyeSB0byBhZGQgZGVmYXVsdCBodHRwcyBwcm90b2NvbFxuICAgIGlmICghcGFyc2VkLnByb3RvY29sKSB7XG4gICAgICBwYXJzZWQgPSB1cmwucGFyc2UoYGh0dHBzOi8vJHtjb25maWcudXJsfWApO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBqdXN0IGJlIHN1cmUgdGhhdCB0aGUgaG9zdCBpcyBwYXJzZWQgY29ycmVjdGx5LCBub3QgbmVlZGVkIHRvIHRlc3QgKi9cbiAgICBpZiAoIXBhcnNlZC5ob3N0KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBDYW5ub3QgcGFyc2UgcHJvdmlkZWQgdXJsICR7Y29uZmlnLnVybH1gLCBjb25maWcpKTtcbiAgICB9XG5cbiAgICAvLyBub3JtYWxpemUgYXV0aCBoZWFkZXJcbiAgICBpZiAoYXV0aCAmJiBoZWFkZXJzLkF1dGhvcml6YXRpb24pIHtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzLkF1dGhvcml6YXRpb247XG4gICAgfVxuXG4gICAgY29uc3QgaXNIdHRwc1JlcXVlc3QgPSBIVFRQU19SRUdFWFAudGVzdChwYXJzZWQucHJvdG9jb2wpO1xuICAgIGNvbnN0IGFnZW50ID0gaXNIdHRwc1JlcXVlc3QgPyByZXF1aXJlKCdodHRwcycpIDogcmVxdWlyZSgnaHR0cCcpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHBhdGg6IGNvbWJpbmVVUkwocGFyc2VkLnBhdGgsIGNvbmZpZy5wYXJhbXMpLFxuICAgICAgaG9zdDogcGFyc2VkLmhvc3QsXG4gICAgICBwb3J0OiBwYXJzZWQucG9ydCxcbiAgICAgIHByb3RvY29sOiBwYXJzZWQucHJvdG9jb2wsXG4gICAgICBtZXRob2Q6IGNvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXG4gICAgICBhZ2VudDogbmV3IGFnZW50LkFnZW50KCksXG4gICAgICBhdXRoOiBhdXRoLFxuICAgIH07XG5cbiAgICBkZWJ1ZygnU3RhcnRpbmcgJXMgcmVxdWVzdCB3aXRoIG9wdGlvbnMgJU8nLCBpc0h0dHBzUmVxdWVzdCA/ICdodHRwcycgOiAnaHR0cCcsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZzUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpOiBhbnkgPT4ge1xuICAgICAgbGV0IHJlcTtcbiAgICAgIGxldCBjYW5jZWxMaXN0ZW5lcjtcblxuICAgICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgICAgICBjYW5jZWxMaXN0ZW5lciA9IGNvbmZpZy5jYW5jZWxUb2tlbi5vbignY2FuY2VsJywgKHJlYXNvbikgPT4ge1xuICAgICAgICAgIC8vIGNsZWFudXAgaGFuZGxlclxuICAgICAgICAgIGNhbmNlbExpc3RlbmVyID0gbnVsbDtcblxuICAgICAgICAgIC8vIGRvIG5vdGhpbmcgaWYgcHJvbWlzZSBpcyByZXNvbHZlZCBieSBzeXN0ZW1cbiAgICAgICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5tZXNzYWdlID09PSBDQU5DRUxfQ0xFQVIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogaWYgcmVxdWVzdCBpcyBkb25lIGNhbmNlbCB0b2tlbiBzaG91bGQgbm90IHRocm93IGFueSBlcnJvciAqL1xuICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgIHJlcS5hYm9ydCgpO1xuICAgICAgICAgICAgcmVxID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBjYW5jZWxlZCBieSB1c2VyICVzLCBjb25maWc6ICVPJywgcmVhc29uLCBjb25maWcpO1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZXF1ZXN0IGFib3J0ZWQuIFJlYXNvbjogJHtyZWFzb259YCwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuQUJPUlRFRCkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmVxID0gYWdlbnQucmVxdWVzdChvcHRpb25zLCByZXMgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDoganVzdCBiZSBzdXJlIHRoYXQgcmVzcG9uc2Ugd2lsbCBub3QgYmUgY2FsbGVkIGFmdGVyIHJlcXVlc3QgaXMgYWJvcnRlZCAqL1xuICAgICAgICBpZiAoIXJlcSB8fCByZXEuYWJvcnRlZCkge1xuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBjb25maWcpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdHJlYW0gPSByZXM7XG4gICAgICAgIGRlYnVnKCdSZXNwb25zZSBzdGF0dXNDb2RlOiAlZCwgUmVzcG9uc2UgSGVhZGVyczogJU8nLCByZXMuc3RhdHVzQ29kZSwgcmVzLmhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGNvbXByZXNzSGVhZGVycyA9IHJlcy5oZWFkZXJzWydjb250ZW50LWVuY29kaW5nJ107XG5cbiAgICAgICAgaWYgKGNvbXByZXNzSGVhZGVycyAmJiBjb21wcmVzc0hlYWRlcnMubGVuZ3RoICYmIFsnZ3ppcCcsICdjb21wcmVzcycsICdkZWZsYXRlJ10uc29tZSgodikgPT4gY29tcHJlc3NIZWFkZXJzLmluZGV4T2YodikgPiAtMSkpIHtcbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtID0gcmVzLnN0YXR1c0NvZGUgPT09IDIwNCA/IHN0cmVhbSA6IHN0cmVhbS5waXBlKHpsaWIuY3JlYXRlVW56aXAoKSk7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlc3BvbnNlOiBGc1Jlc3BvbnNlID0ge1xuICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgICAgc3RhdHVzVGV4dDogcmVzLnN0YXR1c01lc3NhZ2UsXG4gICAgICAgICAgaGVhZGVyczogcmVzLmhlYWRlcnMsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGRhdGE6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIHdlIG5lZWQgdG8gZm9sbG93IHJlZGlyZWN0IHNvIG1ha2Ugc2FtZSByZXF1ZXN0IHdpdGggbmV3IGxvY2F0aW9uXG4gICAgICAgIGlmIChbMzAxLCAzMDJdLmluZGV4T2YocmVzLnN0YXR1c0NvZGUpID4gLTEpIHtcbiAgICAgICAgICBkZWJ1ZygnUmVkaXJlY3QgcmVjZWl2ZWQgJXMnLCByZXMuc3RhdHVzQ29kZSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5yZWRpcmVjdEhvb3BzID49IE1BWF9SRURJUkVDVFMpIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBNYXggcmVkaXJlY3RzICgke3RoaXMucmVkaXJlY3RIb29wc30pIHJlYWNoZWQuIEV4aXRpbmdgLCBjb25maWcsIHJlc3BvbnNlLCBGc1JlcXVlc3RFcnJvckNvZGUuUkVESVJFQ1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB1cmwgPSByZXMuaGVhZGVyc1snbG9jYXRpb24nXTtcblxuICAgICAgICAgIGlmICghdXJsIHx8IHVybC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKGBSZWRpcmVjdCBoZWFkZXIgbG9jYXRpb24gbm90IGZvdW5kYCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFRElSRUNUKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMucmVkaXJlY3RQYXRocy5pbmRleE9mKHVybCkgPiAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlZGlyZWN0IGxvb3AgZGV0ZWN0ZWQgYXQgdXJsICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5SRURJUkVDVCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMucmVkaXJlY3RQYXRocy5wdXNoKHVybCk7XG4gICAgICAgICAgdGhpcy5yZWRpcmVjdEhvb3BzKys7XG5cbiAgICAgICAgICAvLyBmcmVlIHJlc291cmNlc1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBkZWJ1ZygnUmVkaXJlY3RpbmcgcmVxdWVzdCB0byAlcyAoaG9vcC1jb3VudDogJWQpJywgdXJsLCB0aGlzLnJlZGlyZWN0SG9vcHMpO1xuXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5yZXF1ZXN0KE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZywgeyB1cmwgfSkpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZXNwb25zZUJ1ZmZlciA9IFtdO1xuICAgICAgICBzdHJlYW0ub24oJ2RhdGEnLCBjaHVuayA9PiByZXNwb25zZUJ1ZmZlci5wdXNoKGNodW5rKSk7XG5cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGl0cyBoYXJkIHRvIHRlc3Qgc29ja2V0IGV2ZW50cyB3aXRoIGplc3QgYW5kIG5vY2sgLSB0ZXN0ZWQgbWFudWFsbHkgKi9cbiAgICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgICAgcmVzID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlcSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNwb25zZUJ1ZmZlciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlcnJvcjogQWJvcnRlZCAlTycsIGVycik7XG5cbiAgICAgICAgICBpZiAocmVxLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjbGVhciBjYW5jZWwgdG9rZW4gdG8gYXZvaWQgbWVtb3J5IGxlYWtcbiAgICAgICAgICBpZiAoY2FuY2VsTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi5yZW1vdmVMaXN0ZW5lcihjYW5jZWxMaXN0ZW5lcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoZXJyLm1lc3NhZ2UsIGNvbmZpZywgbnVsbCwgRnNSZXF1ZXN0RXJyb3JDb2RlLk5FVFdPUkspKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgc3RyZWFtLm9uKCdlbmQnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgLy8gY2xlYXIgY2FuY2VsIHRva2VuIHRvIGF2b2lkIG1lbW9yeSBsZWFrXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGFueSByZXNwb25zZSBkYXRhIGluc2lkZVxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjA0KSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHJlc3BvbnNlXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gQnVmZmVyLmNvbmNhdChyZXNwb25zZUJ1ZmZlcik7XG4gICAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHBhcnNlUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBmcmVlIHJlc291cmNlc1xuICAgICAgICAgIHJlcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXEgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICByZXNwb25zZUJ1ZmZlciA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmICg1MDAgPD0gcmVzcG9uc2Uuc3RhdHVzICYmIHJlc3BvbnNlLnN0YXR1cyA8PSA1OTkpIHtcbiAgICAgICAgICAgIC8vIHNlcnZlciBlcnJvciB0aHJvd1xuICAgICAgICAgICAgZGVidWcoJ1NlcnZlciBlcnJvcig1eHgpIC0gJU8nLCByZXNwb25zZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBGc1JlcXVlc3RFcnJvcihgU2VydmVyIGVycm9yICR7dXJsfWAsIGNvbmZpZywgcmVzcG9uc2UsIEZzUmVxdWVzdEVycm9yQ29kZS5TRVJWRVIpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKDQwMCA8PSByZXNwb25zZS5zdGF0dXMgJiYgcmVzcG9uc2Uuc3RhdHVzIDw9IDQ5OSkge1xuICAgICAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3IoNHh4KSAtICVPJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgZXJyb3IgJHt1cmx9YCwgY29uZmlnLCByZXNwb25zZSwgRnNSZXF1ZXN0RXJyb3JDb2RlLlJFUVVFU1QpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWJ1ZygnUmVxdWVzdCBlbmRzOiAlTycsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgICByZXEuc2V0VGltZW91dChjb25maWcudGltZW91dCwgKCkgPT4ge1xuICAgICAgICAgIHJlcS5hYm9ydCgpO1xuXG4gICAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgICBjb25maWcuY2FuY2VsVG9rZW4ucmVtb3ZlTGlzdGVuZXIoY2FuY2VsTGlzdGVuZXIpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEZzUmVxdWVzdEVycm9yKCdSZXF1ZXN0IHRpbWVvdXQnLCBjb25maWcsIG51bGwsIEZzUmVxdWVzdEVycm9yQ29kZS5USU1FT1VUKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXEub24oJ2Vycm9yJywgZXJyID0+IHtcbiAgICAgICAgaWYgKGNhbmNlbExpc3RlbmVyKSB7XG4gICAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnJlbW92ZUxpc3RlbmVyKGNhbmNlbExpc3RlbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVxIHx8IHJlcS5hYm9ydGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVidWcoJ1JlcXVlc3QgZXJyb3I6ICVzIC0gJU8nLCBlcnIsIGVyci5jb2RlKTtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRnNSZXF1ZXN0RXJyb3IoYFJlcXVlc3QgZXJyb3I6ICR7ZXJyLmNvZGV9YCwgY29uZmlnLCBudWxsLCBGc1JlcXVlc3RFcnJvckNvZGUuTkVUV09SSykpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkgJiYgWydQT1NUJywgJ1BVVCddLmluZGV4T2YoY29uZmlnLm1ldGhvZCkgPiAtMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXJUb0NodW5rcyhkYXRhKS5waXBlKHRoaXMuZ2V0UHJvZ3Jlc3NNb25pdG9yKGNvbmZpZywgZGF0YS5sZW5ndGgpKS5waXBlKG5ldyBIdHRwV3JpdGFibGVTdHJlYW0ocmVxKSk7XG4gICAgICB9XG5cbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW9uaXRvciBhbmQgZW1pdCBwcm9ncmVzcyBldmVudCBpZiBuZWVkZWRcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICBwcml2YXRlIGdldFByb2dyZXNzTW9uaXRvciA9IChjb25maWcsIHRvdGFsKSA9PiB7XG4gICAgbGV0IGxvYWRlZCA9IDA7XG5cbiAgICBjb25zdCBwcm9ncmVzcyA9IG5ldyBTdHJlYW0uVHJhbnNmb3JtKCk7XG4gICAgcHJvZ3Jlc3MuX3RyYW5zZm9ybSA9IChjaHVuaywgZW5jb2RpbmcsIGNiKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZy5vblByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIFtGc0h0dHBNZXRob2QuUE9TVCwgRnNIdHRwTWV0aG9kLlBVVF0uaW5kZXhPZihjb25maWcubWV0aG9kKSA+IC0xKSB7XG4gICAgICAgIGxvYWRlZCArPSBjaHVuay5sZW5ndGg7XG4gICAgICAgIGNvbmZpZy5vblByb2dyZXNzKHtcbiAgICAgICAgICBsZW5ndGhDb21wdXRhYmxlOiB0cnVlLFxuICAgICAgICAgIGxvYWRlZCxcbiAgICAgICAgICB0b3RhbCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjYihudWxsLCBjaHVuayk7XG4gICAgfTtcblxuICAgIHJldHVybiBwcm9ncmVzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGJ1ZmZlciB0byBzdHJlYW1cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHsqfSBidWZmZXJcbiAgICogQHJldHVybnMge1N0cmVhbS5SZWFkYWJsZX1cbiAgICogQG1lbWJlcm9mIEh0dHBBZGFwdGVyXG4gICAqL1xuICBwcml2YXRlIGJ1ZmZlclRvQ2h1bmtzKGJ1ZmZlcik6IFN0cmVhbS5SZWFkYWJsZSB7XG4gICAgY29uc3QgY2h1bmtpbmcgPSBuZXcgU3RyZWFtLlJlYWRhYmxlKCk7XG4gICAgY29uc3QgdG90YWxMZW5ndGggPSBidWZmZXIubGVuZ3RoO1xuICAgIGNvbnN0IHJlbWFpbmRlciA9IHRvdGFsTGVuZ3RoICUgSFRUUF9DSFVOS19TSVpFO1xuICAgIGNvbnN0IGN1dG9mZiA9IHRvdGFsTGVuZ3RoIC0gcmVtYWluZGVyO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXRvZmY7IGkgKz0gSFRUUF9DSFVOS19TSVpFKSB7XG4gICAgICBjb25zdCBjaHVuayA9IGJ1ZmZlci5zbGljZShpLCBpICsgSFRUUF9DSFVOS19TSVpFKTtcbiAgICAgIGNodW5raW5nLnB1c2goY2h1bmspO1xuICAgIH1cblxuICAgIGlmIChyZW1haW5kZXIgPiAwKSB7XG4gICAgICBjb25zdCByZW1haW5kZXJCdWZmZXIgPSBidWZmZXIuc2xpY2UoLXJlbWFpbmRlcik7XG4gICAgICBjaHVua2luZy5wdXNoKHJlbWFpbmRlckJ1ZmZlcik7XG4gICAgfVxuXG4gICAgY2h1bmtpbmcucHVzaChudWxsKTtcblxuICAgIHJldHVybiBjaHVua2luZztcbiAgfVxufVxuIl19

@@ -1,2 +0,2 @@

export declare const Map: {
export declare const ExtensionsMap: {
'application/andrew-inset': string[];

@@ -3,0 +3,0 @@ 'application/applixware': string[];

@@ -46,3 +46,3 @@ /*

export var getVersion = function () {
return 'JS-3.19.0';
return 'JS-3.20.0';
};

@@ -49,0 +49,0 @@ /**

@@ -42,2 +42,9 @@ /// <reference types="node" />

/**
* Change extension to according mimetype using ext=>mimetype map
*
* @param ext - string
* @return string|boolean
*/
export declare const extensionToMime: (ext: string) => string;
/**
* Sanitizer Options

@@ -44,0 +51,0 @@ */

@@ -18,3 +18,3 @@ /*

import { __assign } from "tslib";
import { Map } from './extensions';
import { ExtensionsMap } from './extensions';
import fileType from 'file-type';

@@ -99,9 +99,5 @@ import * as isutf8 from 'isutf8';

if (name && name.indexOf('.') > -1) {
var ext = name.split('.').pop();
var keys = Object.keys(Map);
var mapLen = keys.length;
for (var i = 0; i < mapLen; i++) {
if (Map[keys[i]].indexOf(ext) > -1) {
return keys[i];
}
var mime_1 = extensionToMime(name);
if (mime_1) {
return mime_1;
}

@@ -127,2 +123,27 @@ }

/**
* Change extension to according mimetype using ext=>mimetype map
*
* @param ext - string
* @return string|boolean
*/
export var extensionToMime = function (ext) {
if (!ext || ext.length === 0) {
return;
}
if (ext.split('/').length === 2) {
return ext;
}
if (ext.indexOf('.') > -1) {
ext = ext.split('.').pop();
}
var keys = Object.keys(ExtensionsMap);
var mapLen = keys.length;
for (var i = 0; i < mapLen; i++) {
if (ExtensionsMap[keys[i]].indexOf(ext) > -1) {
return keys[i];
}
}
return;
};
/**
* Sanitize file name

@@ -197,2 +218,2 @@ *

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOztBQUlILE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkMsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxJQUFNLGFBQWEsR0FBRyxVQUFDLE9BQWdCLEVBQUUsTUFBYztJQUM1RCxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUVuQyxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsd0RBQXdEO1FBQ3hELE9BQVUsTUFBTSxTQUFJLE9BQU8sQ0FBQyxNQUFRLENBQUM7S0FDdEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsSUFBTSxXQUFXLEdBQUcsVUFBQyxJQUFXLEVBQUUsS0FBYTtJQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQU0sS0FBSyxHQUFHLHdDQUF3QyxDQUFDO0lBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8s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LEdBQUcsRUFBRSxHQUFHOztRQUFLLE9BQUEsdUJBQU0sR0FBRyxnQkFBRyxHQUFHLElBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFHO0lBQWxDLENBQWtDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxJQUFNLGdCQUFnQixHQUFHLFVBQUMsR0FBUTtJQUN2QyxJQUFJLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUN6QyxPQUFPLEdBQUcsQ0FBQztLQUNaO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBQSxDQUFDO1FBQ3hCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssVUFBVSxFQUFFO1lBQ2hDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7U0FDcEI7UUFFRCxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLGNBQWMsY0FBYyxDQUFDIiwiZmlsZSI6ImxpYi91dGlscy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgSG9zdHMgfSBmcm9tICcuLy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBNYXAgfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuaW1wb3J0IGZpbGVUeXBlIGZyb20gJ2ZpbGUtdHlwZSc7XG5pbXBvcnQgKiBhcyBpc3V0ZjggZnJvbSAnaXN1dGY4JztcblxuLyoqXG4gKiBSZXNvbHZlIGNkbiB1cmwgYmFzZWQgb24gaGFuZGxlIHR5cGVcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHNlc3Npb24gc2Vzc2lvbiBvYmplY3RcbiAqIEBwYXJhbSBoYW5kbGUgZmlsZSBoYW5kbGUgKGhhc2gsIHNyYzovL2FsaWFzLCB1cmwpXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlQ2RuVXJsID0gKHNlc3Npb246IFNlc3Npb24sIGhhbmRsZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgY2RuVVJMID0gc2Vzc2lvbi51cmxzLmNkblVybDtcblxuICBpZiAoaGFuZGxlICYmIChoYW5kbGUuaW5kZXhPZignc3JjOicpID09PSAwIHx8IGhhbmRsZS5pbmRleE9mKCdodHRwJykgPT09IDApKSB7XG4gICAgaWYgKCFzZXNzaW9uLmFwaWtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcGkga2V5IGlzIHJlcXVpcmVkIHdoZW4gc3RvcmFnZSBhbGlhcyBpcyBwcm92aWRlZCcpO1xuICAgIH1cblxuICAgIC8vIGFwaWtleSBpcyByZXF1aXJlZCBmb3IgYWxpYXMgb3IgZXh0ZXJuYWwgc291cmNlcyBjYWxsXG4gICAgcmV0dXJuIGAke2NkblVSTH0vJHtzZXNzaW9uLmFwaWtleX1gO1xuICB9XG5cbiAgcmV0dXJuIGNkblVSTDtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBhbGwgdXJscyB3aXRoIHByb3ZpZGVkIGNuYW1lc1xuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gdXJsc1xuICogQHBhcmFtIGNuYW1lXG4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlSG9zdCA9ICh1cmxzOiBIb3N0cywgY25hbWU6IHN0cmluZyk6IEhvc3RzID0+IHtcbiAgaWYgKCFjbmFtZSkge1xuICAgIHJldHVybiB1cmxzO1xuICB9XG5cbiAgY29uc3QgaG9zdHMgPSAvZmlsZXN0YWNrYXBpLmNvbXxmaWxlc3RhY2tjb250ZW50LmNvbS9pO1xuXG4gIE9iamVjdC5rZXlzKHVybHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICB1cmxzW2tleV0gPSB1cmxzW2tleV0ucmVwbGFjZShob3N0cywgY25hbWUpO1xuICB9KTtcblxuICByZXR1cm4gdXJscztcbn07XG5cbi8qKlxuICogUmVtb3ZlcyBlbXB0eSBvcHRpb25zIGZyb20gb2JqZWN0XG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBvYmpcbiAqL1xuZXhwb3J0IGNvbnN0IHJlbW92ZUVtcHR5ID0gKG9iajogYW55KSA9PiB7XG4gIGNvbnN0IG5ld09iaiA9IHsgLi4ub2JqIH07XG4gIE9iamVjdC5rZXlzKG5ld09iaikuZm9yRWFjaChrID0+ICFuZXdPYmpba10gJiYgdHlwZW9mIG5ld09ialtrXSAhPT0gJ2Jvb2xlYW4nICYmIGRlbGV0ZSBuZXdPYmpba10pO1xuICByZXR1cm4gbmV3T2JqO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIHVuaXF1ZSB0aW1lXG4gKi9cbmxldCBsYXN0O1xuZXhwb3J0IGNvbnN0IHVuaXF1ZVRpbWUgPSAoKSA9PiB7XG4gIGNvbnN0IHRpbWUgPSBEYXRlLm5vdygpO1xuICBsYXN0ID0gdGltZSA9PT0gbGFzdCA/IHRpbWUgKyAxIDogdGltZTtcbiAgcmV0dXJuIGxhc3Q7XG59O1xuXG4vKipcbiAqIEdlbmVyYXRlcyByYW5kb20gc3RyaW5nIHdpdGggcHJvdmlkZWQgbGVuZ3RoXG4gKlxuICogQHBhcmFtIGxlblxuICovXG5leHBvcnQgY29uc3QgdW5pcXVlSWQgPSAobGVuOiBudW1iZXIgPSAxMCk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBuZXcgQXJyYXkobGVuKS5qb2luKCkucmVwbGFjZSgvKC58JCkvZywgKCkgPT4gKChNYXRoLnJhbmRvbSgpICogMzYpIHwgMCkudG9TdHJpbmcoMzYpW01hdGgucmFuZG9tKCkgPCAwLjUgPyAndG9TdHJpbmcnIDogJ3RvVXBwZXJDYXNlJ10oKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGlucHV0IGlzIGEgc3ZnXG4gKlxuICogQHBhcmFtIHtVaW50OEFycmF5IHwgQnVmZmVyfSBmaWxlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIG1pbWV0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRNaW1ldHlwZSA9IChmaWxlOiBVaW50OEFycmF5IHwgQnVmZmVyLCBuYW1lPzogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgbGV0IHR5cGUgPSBmaWxlVHlwZShmaWxlKTtcblxuICBjb25zdCBleGNsdWRlZE1pbWV0eXBlcyA9IFsndGV4dC9wbGFpbicsICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCAnYXBwbGljYXRpb24veC1tcycsICdhcHBsaWNhdGlvbi94LW1zaScsICdhcHBsaWNhdGlvbi96aXAnXTtcblxuICBpZiAodHlwZSAmJiBleGNsdWRlZE1pbWV0eXBlcy5pbmRleE9mKHR5cGUubWltZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIHR5cGUubWltZTtcbiAgfVxuXG4gIGlmIChuYW1lICYmIG5hbWUuaW5kZXhPZignLicpID4gLTEpIHtcbiAgICBjb25zdCBleHQgPSBuYW1lLnNwbGl0KCcuJykucG9wKCk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE1hcCk7XG4gICAgY29uc3QgbWFwTGVuID0ga2V5cy5sZW5ndGg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcExlbjsgaSsrKSB7XG4gICAgICBpZiAoTWFwW2tleXNbaV1dLmluZGV4T2YoZXh0KSA+IC0xKSB7XG4gICAgICAgIHJldHVybiBrZXlzW2ldO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGlzdXRmOChmaWxlKSkge1xuICAgICAgcmV0dXJuICd0ZXh0L3BsYWluJztcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGNvbnNvbGUud2FybignQWRkaXRpb25hbCBtaW1ldHlwZSBjaGVja3MgKHRleHQvcGxhaW4pIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBmb3IgYnJvd3NlcnMnKTtcbiAgfVxuICAvLyB0aGlzIGlzIG9ubHkgZmFsbGJhY2ssIG9taXQgaXQgaW4gY292ZXJhZ2VcbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAvLyBpZiB3ZSBjYW50IGZpbmQgdHlwZXMgYnkgZXh0ZW5zaW9ucyBhbmQgd2UgaGF2ZSBtYWdpYyBieXRlcyBmYWxsYmFjayB0byBpdFxuICBpZiAodHlwZSkge1xuICAgIHJldHVybiB0eXBlLm1pbWU7XG4gIH1cblxuICByZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG59O1xuXG4vKipcbiAqIFNhbml0aXplciBPcHRpb25zXG4gKi9cbmV4cG9ydCB0eXBlIFNhbml0aXplT3B0aW9ucyA9XG4gIHwgYm9vbGVhblxuICB8IHtcbiAgICBleGNsdWRlPzogc3RyaW5nW107XG4gICAgcmVwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gIH07XG5cbi8qKlxuICogU2FuaXRpemUgZmlsZSBuYW1lXG4gKlxuICogQHBhcmFtIG5hbWVcbiAqIEBwYXJhbSB7Ym9vbH0gb3B0aW9ucyAgLSBlbmFibGUsZGlzYWJsZSBzYW5pdGl6ZXIsIGRlZmF1bHQgZW5hYmxlZFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMucmVwbGFjZW1lbnQgLSByZXBsYWNlbWVudCBmb3Igc2FuaXRpemVkIGNoYXJzIGRlZmF1bHRzIHRvIFwiLVwiXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBvcHRpb25zLmV4Y2x1ZGUgLSBhcnJheSB3aXRoIGV4Y2x1ZGVkIGNoYXJzIGRlZmF1bHQgLSBbJ1xcJywgJ3snLCAnfScsJ3wnLCAnJScsICdgJywgJ1wiJywgXCInXCIsICd+JywgJ1snLCAnXScsICcjJywgJ3wnLCAnXicsICc8JywgJz4nXVxuICovXG5leHBvcnQgY29uc3Qgc2FuaXRpemVOYW1lID0gKG5hbWU6IHN0cmluZywgb3B0aW9uczogU2FuaXRpemVPcHRpb25zID0gdHJ1ZSk6IHN0cmluZyA9PiB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Jvb2xlYW4nICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuICBsZXQgZXh0O1xuXG4gIGNvbnN0IHJlcGxhY2VtZW50ID0gdHlwZW9mIG9wdGlvbnMgIT09ICdib29sZWFuJyAmJiBvcHRpb25zLnJlcGxhY2VtZW50ID8gb3B0aW9ucy5yZXBsYWNlbWVudCA6ICctJztcbiAgY29uc3QgZXhjbHVkZSA9IHR5cGVvZiBvcHRpb25zICE9PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5leGNsdWRlID8gb3B0aW9ucy5leGNsdWRlIDogWydcXFxcJywgJ3snLCAnfScsICd8JywgJyUnLCAnYCcsICdcIicsIFwiJ1wiLCAnficsICdbJywgJ10nLCAnIycsICd8JywgJ14nLCAnPCcsICc+J107XG5cbiAgaWYgKCFuYW1lIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgY29uc3QgZmlsZVBhcnRzID0gbmFtZS5zcGxpdCgnLicpO1xuXG4gIGlmIChmaWxlUGFydHMubGVuZ3RoID4gMSkge1xuICAgIGV4dCA9IGZpbGVQYXJ0cy5wb3AoKTtcbiAgfVxuXG4gIHJldHVybiBgJHtmaWxlUGFydHNcbiAgICAuam9pbignLicpXG4gICAgLnNwbGl0KCcnKVxuICAgIC5tYXAoY2hhciA9PiAoZXhjbHVkZS5pbmRleE9mKGNoYXIpID4gLTEgPyByZXBsYWNlbWVudCA6IGNoYXIpKVxuICAgIC5qb2luKCcnKX0ke2V4dCA/ICcuJyArIGV4dCA6ICcnfWA7XG59O1xuXG4vKipcbiAqIEZpbHRlciBvYmplY3QgdG8gZ2l2ZW4gZmllbGRzXG4gKlxuICogQHBhcmFtIHRvRmlsdGVyXG4gKiBAcGFyYW0gcmVxdWlyZWRGaWVsZHNcbiAqL1xuZXhwb3J0IGNvbnN0IGZpbHRlck9iamVjdCA9ICh0b0ZpbHRlciwgcmVxdWlyZWRGaWVsZHM6IHN0cmluZ1tdKSA9PiB7XG4gIGlmICghcmVxdWlyZWRGaWVsZHMgfHwgcmVxdWlyZWRGaWVsZHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRvRmlsdGVyO1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHRvRmlsdGVyKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdG9GaWx0ZXI7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmtleXModG9GaWx0ZXIpXG4gICAgLmZpbHRlcihmID0+IHJlcXVpcmVkRmllbGRzLmluZGV4T2YoZikgPiAtMSlcbiAgICAucmVkdWNlKChvYmosIGtleSkgPT4gKHsgLi4ub2JqLCBba2V5XTogdG9GaWx0ZXJba2V5XSB9KSwge30pO1xufTtcblxuLyoqXG4gKiBEZWVwIGNsZWFudXAgb2JqZWN0IGZyb20gZnVuY3Rpb25zXG4gKlxuICogQHBhcmFtIG9ialxuICovXG5leHBvcnQgY29uc3QgY2xlYW5VcENhbGxiYWNrcyA9IChvYmo6IGFueSkgPT4ge1xuICBpZiAoIW9iaiB8fCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goayA9PiB7XG4gICAgaWYgKHR5cGVvZiBvYmpba10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG9ialtrXSA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAob2JqW2tdID09PSBPYmplY3Qob2JqW2tdKSkge1xuICAgICAgb2JqW2tdID0gY2xlYW5VcENhbGxiYWNrcyhvYmpba10pO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgubm9kZSc7XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOztBQUlILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxJQUFNLGFBQWEsR0FBRyxVQUFDLE9BQWdCLEVBQUUsTUFBYztJQUM1RCxJQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUVuQyxJQUFJLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDNUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsd0RBQXdEO1FBQ3hELE9BQVUsTUFBTSxTQUFJLE9BQU8sQ0FBQyxNQUFRLENBQUM7S0FDdEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsSUFBTSxXQUFXLEdBQUcsVUFBQyxJQUFXLEVBQUUsS0FBYTtJQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQU0sS0FBSyxHQUFHLHdDQUF3QyxDQUFDO0lBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8s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Q0FBQyxDQUFDLEVBQUU7WUFDN0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGLGNBQWMsY0FBYyxDQUFDIiwiZmlsZSI6ImxpYi91dGlscy9pbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTggYnkgRmlsZXN0YWNrLlxuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IFNlc3Npb24gfSBmcm9tICcuLi9jbGllbnQnO1xuaW1wb3J0IHsgSG9zdHMgfSBmcm9tICcuLy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBFeHRlbnNpb25zTWFwIH0gZnJvbSAnLi9leHRlbnNpb25zJztcbmltcG9ydCBmaWxlVHlwZSBmcm9tICdmaWxlLXR5cGUnO1xuaW1wb3J0ICogYXMgaXN1dGY4IGZyb20gJ2lzdXRmOCc7XG5cbi8qKlxuICogUmVzb2x2ZSBjZG4gdXJsIGJhc2VkIG9uIGhhbmRsZSB0eXBlXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzZXNzaW9uIHNlc3Npb24gb2JqZWN0XG4gKiBAcGFyYW0gaGFuZGxlIGZpbGUgaGFuZGxlIChoYXNoLCBzcmM6Ly9hbGlhcywgdXJsKVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNkblVybCA9IChzZXNzaW9uOiBTZXNzaW9uLCBoYW5kbGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNkblVSTCA9IHNlc3Npb24udXJscy5jZG5Vcmw7XG5cbiAgaWYgKGhhbmRsZSAmJiAoaGFuZGxlLmluZGV4T2YoJ3NyYzonKSA9PT0gMCB8fCBoYW5kbGUuaW5kZXhPZignaHR0cCcpID09PSAwKSkge1xuICAgIGlmICghc2Vzc2lvbi5hcGlrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXBpIGtleSBpcyByZXF1aXJlZCB3aGVuIHN0b3JhZ2UgYWxpYXMgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBhcGlrZXkgaXMgcmVxdWlyZWQgZm9yIGFsaWFzIG9yIGV4dGVybmFsIHNvdXJjZXMgY2FsbFxuICAgIHJldHVybiBgJHtjZG5VUkx9LyR7c2Vzc2lvbi5hcGlrZXl9YDtcbiAgfVxuXG4gIHJldHVybiBjZG5VUkw7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgYWxsIHVybHMgd2l0aCBwcm92aWRlZCBjbmFtZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybHNcbiAqIEBwYXJhbSBjbmFtZVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhvc3QgPSAodXJsczogSG9zdHMsIGNuYW1lOiBzdHJpbmcpOiBIb3N0cyA9PiB7XG4gIGlmICghY25hbWUpIHtcbiAgICByZXR1cm4gdXJscztcbiAgfVxuXG4gIGNvbnN0IGhvc3RzID0gL2ZpbGVzdGFja2FwaS5jb218ZmlsZXN0YWNrY29udGVudC5jb20vaTtcblxuICBPYmplY3Qua2V5cyh1cmxzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgdXJsc1trZXldID0gdXJsc1trZXldLnJlcGxhY2UoaG9zdHMsIGNuYW1lKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHVybHM7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgb3B0aW9ucyBmcm9tIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFbXB0eSA9IChvYmo6IGFueSkgPT4ge1xuICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goayA9PiAhbmV3T2JqW2tdICYmIHR5cGVvZiBuZXdPYmpba10gIT09ICdib29sZWFuJyAmJiBkZWxldGUgbmV3T2JqW2tdKTtcbiAgcmV0dXJuIG5ld09iajtcbn07XG5cbi8qKlxuICogUmV0dXJucyB1bmlxdWUgdGltZVxuICovXG5sZXQgbGFzdDtcbmV4cG9ydCBjb25zdCB1bmlxdWVUaW1lID0gKCkgPT4ge1xuICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgbGFzdCA9IHRpbWUgPT09IGxhc3QgPyB0aW1lICsgMSA6IHRpbWU7XG4gIHJldHVybiBsYXN0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgcmFuZG9tIHN0cmluZyB3aXRoIHByb3ZpZGVkIGxlbmd0aFxuICpcbiAqIEBwYXJhbSBsZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXF1ZUlkID0gKGxlbjogbnVtYmVyID0gMTApOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gbmV3IEFycmF5KGxlbikuam9pbigpLnJlcGxhY2UoLygufCQpL2csICgpID0+ICgoTWF0aC5yYW5kb20oKSAqIDM2KSB8IDApLnRvU3RyaW5nKDM2KVtNYXRoLnJhbmRvbSgpIDwgMC41ID8gJ3RvU3RyaW5nJyA6ICd0b1VwcGVyQ2FzZSddKCkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpbnB1dCBpcyBhIHN2Z1xuICpcbiAqIEBwYXJhbSB7VWludDhBcnJheSB8IEJ1ZmZlcn0gZmlsZVxuICogQHJldHVybnMge3N0cmluZ30gLSBtaW1ldHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0TWltZXR5cGUgPSAoZmlsZTogVWludDhBcnJheSB8IEJ1ZmZlciwgbmFtZT86IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGxldCB0eXBlID0gZmlsZVR5cGUoZmlsZSk7XG5cbiAgY29uc3QgZXhjbHVkZWRNaW1ldHlwZXMgPSBbJ3RleHQvcGxhaW4nLCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgJ2FwcGxpY2F0aW9uL3gtbXMnLCAnYXBwbGljYXRpb24veC1tc2knLCAnYXBwbGljYXRpb24vemlwJ107XG5cbiAgaWYgKHR5cGUgJiYgZXhjbHVkZWRNaW1ldHlwZXMuaW5kZXhPZih0eXBlLm1pbWUpID09PSAtMSkge1xuICAgIHJldHVybiB0eXBlLm1pbWU7XG4gIH1cblxuICBpZiAobmFtZSAmJiBuYW1lLmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgY29uc3QgbWltZSA9IGV4dGVuc2lvblRvTWltZShuYW1lKTtcblxuICAgIGlmIChtaW1lKSB7XG4gICAgICByZXR1cm4gbWltZTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChpc3V0ZjgoZmlsZSkpIHtcbiAgICAgIHJldHVybiAndGV4dC9wbGFpbic7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBjb25zb2xlLndhcm4oJ0FkZGl0aW9uYWwgbWltZXR5cGUgY2hlY2tzICh0ZXh0L3BsYWluKSBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgZm9yIGJyb3dzZXJzJyk7XG4gIH1cbiAgLy8gdGhpcyBpcyBvbmx5IGZhbGxiYWNrLCBvbWl0IGl0IGluIGNvdmVyYWdlXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgLy8gaWYgd2UgY2FudCBmaW5kIHR5cGVzIGJ5IGV4dGVuc2lvbnMgYW5kIHdlIGhhdmUgbWFnaWMgYnl0ZXMgZmFsbGJhY2sgdG8gaXRcbiAgaWYgKHR5cGUpIHtcbiAgICByZXR1cm4gdHlwZS5taW1lO1xuICB9XG5cbiAgcmV0dXJuICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xufTtcblxuLyoqXG4gKiBDaGFuZ2UgZXh0ZW5zaW9uIHRvIGFjY29yZGluZyBtaW1ldHlwZSB1c2luZyBleHQ9Pm1pbWV0eXBlIG1hcFxuICpcbiAqIEBwYXJhbSBleHQgLSBzdHJpbmdcbiAqIEByZXR1cm4gc3RyaW5nfGJvb2xlYW5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4dGVuc2lvblRvTWltZSA9IChleHQ6IHN0cmluZykgPT4ge1xuICBpZiAoIWV4dCB8fCBleHQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGV4dC5zcGxpdCgnLycpLmxlbmd0aCA9PT0gMikge1xuICAgIHJldHVybiBleHQ7XG4gIH1cblxuICBpZiAoZXh0LmluZGV4T2YoJy4nKSA+IC0xKSB7XG4gICAgZXh0ID0gZXh0LnNwbGl0KCcuJykucG9wKCk7XG4gIH1cblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoRXh0ZW5zaW9uc01hcCk7XG4gIGNvbnN0IG1hcExlbiA9IGtleXMubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwTGVuOyBpKyspIHtcbiAgICBpZiAoRXh0ZW5zaW9uc01hcFtrZXlzW2ldXS5pbmRleE9mKGV4dCkgPiAtMSkge1xuICAgICAgcmV0dXJuIGtleXNbaV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuO1xufTtcblxuLyoqXG4gKiBTYW5pdGl6ZXIgT3B0aW9uc1xuICovXG5leHBvcnQgdHlwZSBTYW5pdGl6ZU9wdGlvbnMgPVxuICB8IGJvb2xlYW5cbiAgfCB7XG4gICAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICAgIHJlcGxhY2VtZW50Pzogc3RyaW5nO1xuICB9O1xuXG4vKipcbiAqIFNhbml0aXplIGZpbGUgbmFtZVxuICpcbiAqIEBwYXJhbSBuYW1lXG4gKiBAcGFyYW0ge2Jvb2x9IG9wdGlvbnMgIC0gZW5hYmxlLGRpc2FibGUgc2FuaXRpemVyLCBkZWZhdWx0IGVuYWJsZWRcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLnJlcGxhY2VtZW50IC0gcmVwbGFjZW1lbnQgZm9yIHNhbml0aXplZCBjaGFycyBkZWZhdWx0cyB0byBcIi1cIlxuICogQHBhcmFtIHtzdHJpbmdbXX0gb3B0aW9ucy5leGNsdWRlIC0gYXJyYXkgd2l0aCBleGNsdWRlZCBjaGFycyBkZWZhdWx0IC0gWydcXCcsICd7JywgJ30nLCd8JywgJyUnLCAnYCcsICdcIicsIFwiJ1wiLCAnficsICdbJywgJ10nLCAnIycsICd8JywgJ14nLCAnPCcsICc+J11cbiAqL1xuZXhwb3J0IGNvbnN0IHNhbml0aXplTmFtZSA9IChuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFNhbml0aXplT3B0aW9ucyA9IHRydWUpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdib29sZWFuJyAmJiAhb3B0aW9ucykge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgbGV0IGV4dDtcblxuICBjb25zdCByZXBsYWNlbWVudCA9IHR5cGVvZiBvcHRpb25zICE9PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5yZXBsYWNlbWVudCA/IG9wdGlvbnMucmVwbGFjZW1lbnQgOiAnLSc7XG4gIGNvbnN0IGV4Y2x1ZGUgPSB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuZXhjbHVkZSA/IG9wdGlvbnMuZXhjbHVkZSA6IFsnXFxcXCcsICd7JywgJ30nLCAnfCcsICclJywgJ2AnLCAnXCInLCBcIidcIiwgJ34nLCAnWycsICddJywgJyMnLCAnfCcsICdeJywgJzwnLCAnPiddO1xuXG4gIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcblxuICBpZiAoZmlsZVBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBleHQgPSBmaWxlUGFydHMucG9wKCk7XG4gIH1cblxuICByZXR1cm4gYCR7ZmlsZVBhcnRzXG4gICAgLmpvaW4oJy4nKVxuICAgIC5zcGxpdCgnJylcbiAgICAubWFwKGNoYXIgPT4gKGV4Y2x1ZGUuaW5kZXhPZihjaGFyKSA+IC0xID8gcmVwbGFjZW1lbnQgOiBjaGFyKSlcbiAgICAuam9pbignJyl9JHtleHQgPyAnLicgKyBleHQgOiAnJ31gO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgb2JqZWN0IHRvIGdpdmVuIGZpZWxkc1xuICpcbiAqIEBwYXJhbSB0b0ZpbHRlclxuICogQHBhcmFtIHJlcXVpcmVkRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXJPYmplY3QgPSAodG9GaWx0ZXIsIHJlcXVpcmVkRmllbGRzOiBzdHJpbmdbXSkgPT4ge1xuICBpZiAoIXJlcXVpcmVkRmllbGRzIHx8IHJlcXVpcmVkRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0b0ZpbHRlcjtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh0b0ZpbHRlcikubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRvRmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRvRmlsdGVyKVxuICAgIC5maWx0ZXIoZiA9PiByZXF1aXJlZEZpZWxkcy5pbmRleE9mKGYpID4gLTEpXG4gICAgLnJlZHVjZSgob2JqLCBrZXkpID0+ICh7IC4uLm9iaiwgW2tleV06IHRvRmlsdGVyW2tleV0gfSksIHt9KTtcbn07XG5cbi8qKlxuICogRGVlcCBjbGVhbnVwIG9iamVjdCBmcm9tIGZ1bmN0aW9uc1xuICpcbiAqIEBwYXJhbSBvYmpcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFuVXBDYWxsYmFja3MgPSAob2JqOiBhbnkpID0+IHtcbiAgaWYgKCFvYmogfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqW2tdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvYmpba10gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKG9ialtrXSA9PT0gT2JqZWN0KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXSA9IGNsZWFuVXBDYWxsYmFja3Mob2JqW2tdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4Lm5vZGUnO1xuIl19

@@ -45,3 +45,3 @@ /*

export var getVersion = function () {
return 'JS-3.19.0';
return 'JS-3.20.0';
};

@@ -48,0 +48,0 @@ /**

@@ -21,3 +21,3 @@ /*

it('should return version string to replace', function () {
expect(utils.getVersion()).toEqual("JS-3.19.0");
expect(utils.getVersion()).toEqual("JS-3.20.0");
});

@@ -24,0 +24,0 @@ });

@@ -17,3 +17,3 @@ /*

*/
import { resolveCdnUrl, resolveHost, removeEmpty, uniqueTime, uniqueId, md5, sanitizeName, filterObject, b64, getVersion, cleanUpCallbacks } from './index';
import { resolveCdnUrl, resolveHost, removeEmpty, uniqueTime, uniqueId, md5, extensionToMime, sanitizeName, filterObject, b64, getVersion, cleanUpCallbacks } from './index';
import { config } from '../../config';

@@ -157,2 +157,25 @@ var v = require('../../../../package.json').version;

});
describe('extensionToMime', function () {
it('should return mimetype if mime is passed', function () {
expect(extensionToMime('')).toEqual(undefined);
});
it('should return same mime is passed', function () {
expect(extensionToMime('image/png')).toEqual('image/png');
expect(extensionToMime('image/jpg')).toEqual('image/jpg');
expect(extensionToMime('application/pdf')).toEqual('application/pdf');
});
it('it should return correct mimes for ext', function () {
expect(extensionToMime('.png')).toEqual('image/png');
expect(extensionToMime('.jpg')).toEqual('image/jpeg');
expect(extensionToMime('.pdf')).toEqual('application/pdf');
expect(extensionToMime('.key')).toEqual('application/vnd.apple.keynote');
expect(extensionToMime('.zip')).toEqual('application/zip');
expect(extensionToMime('.numbers')).toEqual('application/vnd.apple.numbers');
});
it('it should extract extensions form filename or ext with dot', function () {
expect(extensionToMime('test.png')).toEqual('image/png');
expect(extensionToMime('test.jpg')).toEqual('image/jpeg');
expect(extensionToMime('test.pdf')).toEqual('application/pdf');
});
});
describe('CleanupCallbacks', function () {

@@ -183,2 +206,2 @@ it('should set callbacks as undefined and return untouched object', function () {

//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXguc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVKLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsSUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDLDBCQUEwQixDQUFDLENBQUMsT0FBTyxDQUFDO0FBRXRELFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLGVBQWUsRUFBRTtRQUV4QixJQUFNLE9BQU8sR0FBRztZQUNkLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtTQUNsQixDQUFDO1FBRUYsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1lBQ3ZELElBQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDO1lBQ3RDLElBQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1lBQ3BELElBQU0sTUFBTSxHQUFHLHdCQUF3QixDQUFDO1lBQ3hDLElBQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBRUgs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S0FBSyxFQUFFLFFBQVE7Z0JBQ2YsT0FBTyxFQUFFO29CQUNQLEdBQUcsRUFBRSxHQUFHO2lCQUNUO2FBQ0YsQ0FBQztZQUVGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztnQkFDeEMsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsS0FBSyxFQUFFLFFBQVE7Z0JBQ2YsT0FBTyxFQUFFO29CQUNQLEdBQUcsRUFBRSxHQUFHO2lCQUNUO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwiZmlsZSI6ImxpYi91dGlscy9pbmRleC5zcGVjLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbmltcG9ydCB7IHJlc29sdmVDZG5VcmwsIHJlc29sdmVIb3N0LCByZW1vdmVFbXB0eSwgdW5pcXVlVGltZSwgdW5pcXVlSWQsIG1kNSwgc2FuaXRpemVOYW1lLCBmaWx0ZXJPYmplY3QsIGI2NCwgZ2V0VmVyc2lvbiwgY2xlYW5VcENhbGxiYWNrcyB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vLi4vY29uZmlnJztcbmNvbnN0IHYgPSByZXF1aXJlKCcuLi8uLi8uLi8uLi9wYWNrYWdlLmpzb24nKS52ZXJzaW9uO1xuXG5kZXNjcmliZSgndXRpbHM6aW5kZXgnLCAoKSA9PiB7XG4gIGRlc2NyaWJlKCdyZXNvbHZlQ2RuVXJsJywgKCkgPT4ge1xuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHtcbiAgICAgIGFwaWtleTogJ1RFU1RfQVBJX0tFWScsXG4gICAgICBjbmFtZTogJ2V4YW1wbGUuY29tJyxcbiAgICAgIHVybHM6IGNvbmZpZy51cmxzLFxuICAgIH07XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHJlc29sdmUgY2RuIHVybCB3aXRoIGhhc2hlZCBoYW5kbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSAnNWFZa0VRSlNRQ21ZU2hzb0NuWk4nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUNkblVybChzZXNzaW9uLCBoYW5kbGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnaHR0cHM6Ly9jZG4uZmlsZXN0YWNrY29udGVudC5jb20nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvcGVybHkgcmVzb2x2ZSBjZG4gdXJsIHdpdGggc3JjIGhhbmRsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9ICdzcmM6Ly90ZXN0MTIzL3Rlc3QuanBnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVDZG5Vcmwoc2Vzc2lvbiwgaGFuZGxlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ2h0dHBzOi8vY2RuLmZpbGVzdGFja2NvbnRlbnQuY29tL1RFU1RfQVBJX0tFWScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9wZXJseSByZXNvbHZlIGNkbiB1cmwgd2l0aCBoYXNoZWQgaGFuZGxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlID0gJ2h0dHBzOi8vc3RhdGljMS5zcXVhcmVzcGFjZS5jb20vc3RhdGljLzU0NGViM2NjZTRiMGVmMDkxNzczNjExZi90LzU5YmE3Y2UxYmQxMGYwMGRjZGM4MGE1Zi8xNTA1Mzk0MDg3MzY3L0RTQ18wNTI3LmpwZyc7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlQ2RuVXJsKHNlc3Npb24sIGhhbmRsZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKCdodHRwczovL2Nkbi5maWxlc3RhY2tjb250ZW50LmNvbS9URVNUX0FQSV9LRVknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgYW4gZXJyb3Igd2hlbiB1c2luZyBzcmMgaGFuZGxlIG9yIHVybCB3aXRob3V0IGFwaWtleScsICgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9ICdzcmM6Ly90ZXN0MTIzL3Rlc3QuanBnJztcbiAgICAgIHNlc3Npb24uYXBpa2V5ID0gJyc7XG4gICAgICBleHBlY3QoKCkgPT4geyByZXNvbHZlQ2RuVXJsKHNlc3Npb24sIGhhbmRsZSk7IH0pLnRvVGhyb3coJ0FwaSBrZXkgaXMgcmVxdWlyZWQgd2hlbiBzdG9yYWdlIGFsaWFzIGlzIHByb3ZpZGVkJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdyZXNvbHZlSG9zdCcsICgpID0+IHtcbiAgICBjb25zdCBob3N0cyA9IGNvbmZpZy51cmxzO1xuXG4gICAgY29uc3QgY2hlY2tIb3N0cyA9IChob3N0cywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIE9iamVjdC5rZXlzKGhvc3RzKS5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgIGV4cGVjdChob3N0c1trXS5pbmRleE9mKGV4cGVjdGVkKSA+IC0xKS50b0JlVHJ1dGh5KCk7XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcHJvcGVyIGhvc3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCBjbmFtZSA9ICdleGFtcGxlLmNvbSc7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlSG9zdChob3N0cywgY25hbWUpO1xuICAgICAgY2hlY2tIb3N0cyhyZXN1bHQsIGNuYW1lKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGhvc3RzIHdoZW4gY25hbWUgaXMgYW4gZW1wdHkgc3RyaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgY25hbWUgPSAnJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVIb3N0KGhvc3RzLCBjbmFtZSk7XG4gICAgICBjaGVja0hvc3RzKHJlc3VsdCwgY25hbWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVtb3ZlRW1wdHknLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZW1vdmUgZW1wdHkgb3B0aW9ucyBmcm9tIGFuIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHRlc3RPYiA9IHsgdGVzdDE6IHRydWUsIHRlc3QyOiB1bmRlZmluZWQsIHRlc3QzOiBmYWxzZSB9O1xuICAgICAgZXhwZWN0KHJlbW92ZUVtcHR5KHRlc3RPYikpLnRvRXF1YWwoeyB0ZXN0MTogdHJ1ZSwgdGVzdDM6IGZhbHNlIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndW5pcXVlVGltZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmlxdWUgdGltZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodW5pcXVlVGltZSgpKS5ub3QudG9FcXVhbCh1bmlxdWVUaW1lKCkpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgndW5pcXVlSWQnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBnZXQgZGlmZmVyZW50IGlkcyBlYWNoIHRpbWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodW5pcXVlSWQoKSkubm90LnRvRXF1YWwodW5pcXVlSWQoKSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBpZCB3aXRoIGdpdmVuIGxlbmd0aCcsICgpID0+IHtcbiAgICAgIGV4cGVjdCh1bmlxdWVJZCgxMikubGVuZ3RoKS50b0VxdWFsKDEyKTtcbiAgICAgIGV4cGVjdCh1bmlxdWVJZCg0KS5sZW5ndGgpLnRvRXF1YWwoNCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdtZDUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ycmVjdCBtZDUgdmFsdWUnLCAoKSA9PiB7XG4gICAgICBleHBlY3QobWQ1KEJ1ZmZlci5mcm9tKCd0ZXN0JykpKS50b0VxdWFsKCdDWTlyelVZaDAzUEszazZESmllMDlnPT0nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFZlcnNpb24nLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ycmVjdCB2ZXJzaW9uIGZyb20gcGFja2FnZSBqc29uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldFZlcnNpb24oKSkudG9FcXVhbChgSlMtJHt2fWApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnYjY0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3QgYjY1IHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGI2NCgndGVzdHRleHQnKSkudG9FcXVhbCgnZEdWemRIUmxlSFE9Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGVzY2FwZSBjaGFycyB0byBtYWtlIGI2NCB1cmwgc2FmZSBzdHJpbmcgLSBjaGFyIFwiL1wiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGI2NCgnKjBlaWpBVGgjXCJJJFBSKXM8dVRhfXt0PkVcIkxDOkwnLCB0cnVlKSkudG9FcXVhbCgnS2pCbGFXcEJWR2dqSWtra1VGSXBjengxVkdGOWUzUS1SU0pNUXpwTScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlc2NhcGUgY2hhcnMgdG8gbWFrZSBiNjQgdXJsIHNhZmUgc3RyaW5nIC0gY2hhciBcIlwiJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGI2NCgnV3t3cEJAY2tZRDBPQCY/IXx8OVBTKTdeK0YqSDhOJywgdHJ1ZSkpLnRvRXF1YWwoJ1YzdDNjRUpBWTJ0WlJEQlBRQ1lfSVh4OE9WQlRLVGRlSzBZcVNEaE8nKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3Nhbml0aXplTmFtZScsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHNhbml0aXplIGZpbGUgbmFtZSB3aXRoIGV4dGVuc2lvbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJ2FcXFxceyVgXCJ+W10jfF48PjEuanBnJykpLnRvRXF1YWwoJ2EtLS0tLS0tLS0tLS0tMS5qcGcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2FuaXRpemUgZmlsZSBuYW1lIHdpdGhvdXQgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnMTIzcXdlJykpLnRvRXF1YWwoJzEyM3F3ZScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIG9uIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJycpKS50b0VxdWFsKCd1bmRlZmluZWQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzcGVjdCBzYW5pdGl6ZSBvcHRpb25zIGFzIGJvb2xlYW4nLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCdbXSN8LmpwZycsIGZhbHNlKSkudG9FcXVhbCgnW10jfC5qcGcnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IGNoYW5nZSBkb3RzIGluIGZpbGVuYW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnW10jc29tZS50YXIuZ3onLCBmYWxzZSkpLnRvRXF1YWwoJ1tdI3NvbWUudGFyLmd6Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlc3BlY3Qgc2FuaXRpemUgb3B0aW9ucyB3aXRoIHByb3ZpZGVkIG9wdGlvbnMnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCdbXSN8LmpwZycsIHtcbiAgICAgICAgZXhjbHVkZTogWydbJywgJ10nXSxcbiAgICAgICAgcmVwbGFjZW1lbnQ6ICdfJyxcbiAgICAgIH0pKS50b0VxdWFsKCdfXyN8LmpwZycpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZmlsdGVyT2JqZWN0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZmlsdGVyIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWx0ZXJPYmplY3Qoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgICAgdGVzdDM6IDMsXG4gICAgICB9LCBbJ3Rlc3QnLCAndGVzdDInXSkpLnRvRXF1YWwoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXN1bHQgdGhlIHNhbWUgb2JqZWN0IG9uIGVtcHR5IHJlcXVpcmVtZW50cycsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWx0ZXJPYmplY3Qoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgICAgdGVzdDM6IDMsXG4gICAgICB9LCBbXSkpLnRvRXF1YWwoe1xuICAgICAgICB0ZXN0OiAxLFxuICAgICAgICB0ZXN0MjogMixcbiAgICAgICAgdGVzdDM6IDMsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbm90IHRocm93IG9uIGVtcHR5IGZpbHRlcmVkIG9iamVjdCcsICgpID0+IHtcbiAgICAgIGV4cGVjdChmaWx0ZXJPYmplY3Qoe30sIFsndGVzdCddKSkudG9FcXVhbCh7fSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDbGVhbnVwQ2FsbGJhY2tzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc2V0IGNhbGxiYWNrcyBhcyB1bmRlZmluZWQgYW5kIHJldHVybiB1bnRvdWNoZWQgb2JqZWN0JywgKCkgPT4ge1xuICAgICAgY29uc3QgdGVzdE9iaiA9IHtcbiAgICAgICAgZm46ICgpID0+IDEsXG4gICAgICAgIHRlc3Q6IHtcbiAgICAgICAgICBmbjI6ICgpID0+IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHRlc3ROOiAxMjMsXG4gICAgICAgIHRlc3RzOiAnc3RyaW5nJyxcbiAgICAgICAgdGVzdE9iajoge1xuICAgICAgICAgIHRzdDogMTIzLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgZXhwZWN0KGNsZWFuVXBDYWxsYmFja3ModGVzdE9iaikpLnRvRXF1YWwoe1xuICAgICAgICB0ZXN0OiB7fSxcbiAgICAgICAgdGVzdE46IDEyMyxcbiAgICAgICAgdGVzdHM6ICdzdHJpbmcnLFxuICAgICAgICB0ZXN0T2JqOiB7XG4gICAgICAgICAgdHN0OiAxMjMsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXguc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxPQUFPLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3SyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLElBQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUV0RCxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3RCLFFBQVEsQ0FBQyxlQUFlLEVBQUU7UUFFeEIsSUFBTSxPQUFPLEdBQUc7WUFDZCxNQUFNLEVBQUUsY0FBYztZQUN0QixLQUFLLEVBQUUsYUFBYTtZQUNwQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDbEIsQ0FBQztRQUVGLEVBQUUsQ0FBQyxvREFBb0QsRUFBRTtZQUN2RCxJQUFNLE1BQU0sR0FBRyxzQkFBc0IsQ0FBQztZQUN0QyxJQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxJQUFNLE1BQU0sR0FBRyx3QkFBd0IsQ0FBQztZQUN4QyxJQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsK0NBQStDLENBQUMsQ0FBQztRQUMxRSxDQUFDLENBQUMs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QyxDQUFDLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTtRQUMzQixFQUFFLENBQUMsK0RBQStELEVBQUU7WUFDbEUsSUFBTSxPQUFPLEdBQUc7Z0JBQ2QsRUFBRSxFQUFFLGNBQU0sT0FBQSxDQUFDLEVBQUQsQ0FBQztnQkFDWCxJQUFJLEVBQUU7b0JBQ0osR0FBRyxFQUFFLGNBQU0sT0FBQSxDQUFDLEVBQUQsQ0FBQztpQkFDYjtnQkFDRCxLQUFLLEVBQUUsR0FBRztnQkFDVixLQUFLLEVBQUUsUUFBUTtnQkFDZixPQUFPLEVBQUU7b0JBQ1AsR0FBRyxFQUFFLEdBQUc7aUJBQ1Q7YUFDRixDQUFDO1lBRUYsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUN4QyxJQUFJLEVBQUUsRUFBRTtnQkFDUixLQUFLLEVBQUUsR0FBRztnQkFDVixLQUFLLEVBQUUsUUFBUTtnQkFDZixPQUFPLEVBQUU7b0JBQ1AsR0FBRyxFQUFFLEdBQUc7aUJBQ1Q7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoibGliL3V0aWxzL2luZGV4LnNwZWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE5IGJ5IEZpbGVzdGFjay5cbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgcmVzb2x2ZUNkblVybCwgcmVzb2x2ZUhvc3QsIHJlbW92ZUVtcHR5LCB1bmlxdWVUaW1lLCB1bmlxdWVJZCwgbWQ1LCBleHRlbnNpb25Ub01pbWUsIHNhbml0aXplTmFtZSwgZmlsdGVyT2JqZWN0LCBiNjQsIGdldFZlcnNpb24sIGNsZWFuVXBDYWxsYmFja3MgfSBmcm9tICcuL2luZGV4JztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5jb25zdCB2ID0gcmVxdWlyZSgnLi4vLi4vLi4vLi4vcGFja2FnZS5qc29uJykudmVyc2lvbjtcblxuZGVzY3JpYmUoJ3V0aWxzOmluZGV4JywgKCkgPT4ge1xuICBkZXNjcmliZSgncmVzb2x2ZUNkblVybCcsICgpID0+IHtcblxuICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICBhcGlrZXk6ICdURVNUX0FQSV9LRVknLFxuICAgICAgY25hbWU6ICdleGFtcGxlLmNvbScsXG4gICAgICB1cmxzOiBjb25maWcudXJscyxcbiAgICB9O1xuXG4gICAgaXQoJ3Nob3VsZCBwcm9wZXJseSByZXNvbHZlIGNkbiB1cmwgd2l0aCBoYXNoZWQgaGFuZGxlJywgKCkgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlID0gJzVhWWtFUUpTUUNtWVNoc29DblpOJztcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHJlc29sdmVDZG5Vcmwoc2Vzc2lvbiwgaGFuZGxlKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoJ2h0dHBzOi8vY2RuLmZpbGVzdGFja2NvbnRlbnQuY29tJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByb3Blcmx5IHJlc29sdmUgY2RuIHVybCB3aXRoIHNyYyBoYW5kbGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSAnc3JjOi8vdGVzdDEyMy90ZXN0LmpwZyc7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlQ2RuVXJsKHNlc3Npb24sIGhhbmRsZSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKCdodHRwczovL2Nkbi5maWxlc3RhY2tjb250ZW50LmNvbS9URVNUX0FQSV9LRVknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcHJvcGVybHkgcmVzb2x2ZSBjZG4gdXJsIHdpdGggaGFzaGVkIGhhbmRsZScsICgpID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZSA9ICdodHRwczovL3N0YXRpYzEuc3F1YXJlc3BhY2UuY29tL3N0YXRpYy81NDRlYjNjY2U0YjBlZjA5MTc3MzYxMWYvdC81OWJhN2NlMWJkMTBmMDBkY2RjODBhNWYvMTUwNTM5NDA4NzM2Ny9EU0NfMDUyNy5qcGcnO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUNkblVybChzZXNzaW9uLCBoYW5kbGUpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCgnaHR0cHM6Ly9jZG4uZmlsZXN0YWNrY29udGVudC5jb20vVEVTVF9BUElfS0VZJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IGFuIGVycm9yIHdoZW4gdXNpbmcgc3JjIGhhbmRsZSBvciB1cmwgd2l0aG91dCBhcGlrZXknLCAoKSA9PiB7XG4gICAgICBjb25zdCBoYW5kbGUgPSAnc3JjOi8vdGVzdDEyMy90ZXN0LmpwZyc7XG4gICAgICBzZXNzaW9uLmFwaWtleSA9ICcnO1xuICAgICAgZXhwZWN0KCgpID0+IHsgcmVzb2x2ZUNkblVybChzZXNzaW9uLCBoYW5kbGUpOyB9KS50b1Rocm93KCdBcGkga2V5IGlzIHJlcXVpcmVkIHdoZW4gc3RvcmFnZSBhbGlhcyBpcyBwcm92aWRlZCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgncmVzb2x2ZUhvc3QnLCAoKSA9PiB7XG4gICAgY29uc3QgaG9zdHMgPSBjb25maWcudXJscztcblxuICAgIGNvbnN0IGNoZWNrSG9zdHMgPSAoaG9zdHMsIGV4cGVjdGVkKSA9PiB7XG4gICAgICBPYmplY3Qua2V5cyhob3N0cykuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICBleHBlY3QoaG9zdHNba10uaW5kZXhPZihleHBlY3RlZCkgPiAtMSkudG9CZVRydXRoeSgpO1xuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHByb3BlciBob3N0JywgKCkgPT4ge1xuICAgICAgY29uc3QgY25hbWUgPSAnZXhhbXBsZS5jb20nO1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVzb2x2ZUhvc3QoaG9zdHMsIGNuYW1lKTtcbiAgICAgIGNoZWNrSG9zdHMocmVzdWx0LCBjbmFtZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBob3N0cyB3aGVuIGNuYW1lIGlzIGFuIGVtcHR5IHN0cmluZycsICgpID0+IHtcbiAgICAgIGNvbnN0IGNuYW1lID0gJyc7XG4gICAgICBjb25zdCByZXN1bHQgPSByZXNvbHZlSG9zdChob3N0cywgY25hbWUpO1xuICAgICAgY2hlY2tIb3N0cyhyZXN1bHQsIGNuYW1lKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3JlbW92ZUVtcHR5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVtb3ZlIGVtcHR5IG9wdGlvbnMgZnJvbSBhbiBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0T2IgPSB7IHRlc3QxOiB0cnVlLCB0ZXN0MjogdW5kZWZpbmVkLCB0ZXN0MzogZmFsc2UgfTtcbiAgICAgIGV4cGVjdChyZW1vdmVFbXB0eSh0ZXN0T2IpKS50b0VxdWFsKHsgdGVzdDE6IHRydWUsIHRlc3QzOiBmYWxzZSB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VuaXF1ZVRpbWUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5pcXVlIHRpbWVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVuaXF1ZVRpbWUoKSkubm90LnRvRXF1YWwodW5pcXVlVGltZSgpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3VuaXF1ZUlkJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgZ2V0IGRpZmZlcmVudCBpZHMgZWFjaCB0aW1lJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHVuaXF1ZUlkKCkpLm5vdC50b0VxdWFsKHVuaXF1ZUlkKCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gaWQgd2l0aCBnaXZlbiBsZW5ndGgnLCAoKSA9PiB7XG4gICAgICBleHBlY3QodW5pcXVlSWQoMTIpLmxlbmd0aCkudG9FcXVhbCgxMik7XG4gICAgICBleHBlY3QodW5pcXVlSWQoNCkubGVuZ3RoKS50b0VxdWFsKDQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnbWQ1JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3QgbWQ1IHZhbHVlJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KG1kNShCdWZmZXIuZnJvbSgndGVzdCcpKSkudG9FcXVhbCgnQ1k5cnpVWWgwM1BLM2s2REppZTA5Zz09Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdnZXRWZXJzaW9uJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIGNvcnJlY3QgdmVyc2lvbiBmcm9tIHBhY2thZ2UganNvbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRWZXJzaW9uKCkpLnRvRXF1YWwoYEpTLSR7dn1gKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2I2NCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiBjb3JyZWN0IGI2NSB2YWx1ZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChiNjQoJ3Rlc3R0ZXh0JykpLnRvRXF1YWwoJ2RHVnpkSFJsZUhRPScpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBlc2NhcGUgY2hhcnMgdG8gbWFrZSBiNjQgdXJsIHNhZmUgc3RyaW5nIC0gY2hhciBcIi9cIicsICgpID0+IHtcbiAgICAgIGV4cGVjdChiNjQoJyowZWlqQVRoI1wiSSRQUilzPHVUYX17dD5FXCJMQzpMJywgdHJ1ZSkpLnRvRXF1YWwoJ0tqQmxhV3BCVkdnaklra2tVRklwY3p4MVZHRjllM1EtUlNKTVF6cE0nKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgZXNjYXBlIGNoYXJzIHRvIG1ha2UgYjY0IHVybCBzYWZlIHN0cmluZyAtIGNoYXIgXCJcIicsICgpID0+IHtcbiAgICAgIGV4cGVjdChiNjQoJ1d7d3BCQGNrWUQwT0AmPyF8fDlQUyk3XitGKkg4TicsIHRydWUpKS50b0VxdWFsKCdWM3QzY0VKQVkydFpSREJQUUNZX0lYeDhPVkJUS1RkZUswWXFTRGhPJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdzYW5pdGl6ZU5hbWUnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzYW5pdGl6ZSBmaWxlIG5hbWUgd2l0aCBleHRlbnNpb24nLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCdhXFxcXHslYFwifltdI3xePD4xLmpwZycpKS50b0VxdWFsKCdhLS0tLS0tLS0tLS0tLTEuanBnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNhbml0aXplIGZpbGUgbmFtZSB3aXRob3V0IGV4dGVuc2lvbicsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJzEyM3F3ZScpKS50b0VxdWFsKCcxMjNxd2UnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBvbiBlbXB0eSBzdHJpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qoc2FuaXRpemVOYW1lKCcnKSkudG9FcXVhbCgndW5kZWZpbmVkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlc3BlY3Qgc2FuaXRpemUgb3B0aW9ucyBhcyBib29sZWFuJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnW10jfC5qcGcnLCBmYWxzZSkpLnRvRXF1YWwoJ1tdI3wuanBnJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCBjaGFuZ2UgZG90cyBpbiBmaWxlbmFtZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChzYW5pdGl6ZU5hbWUoJ1tdI3NvbWUudGFyLmd6JywgZmFsc2UpKS50b0VxdWFsKCdbXSNzb21lLnRhci5neicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXNwZWN0IHNhbml0aXplIG9wdGlvbnMgd2l0aCBwcm92aWRlZCBvcHRpb25zJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHNhbml0aXplTmFtZSgnW10jfC5qcGcnLCB7XG4gICAgICAgIGV4Y2x1ZGU6IFsnWycsICddJ10sXG4gICAgICAgIHJlcGxhY2VtZW50OiAnXycsXG4gICAgICB9KSkudG9FcXVhbCgnX18jfC5qcGcnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2ZpbHRlck9iamVjdCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIGZpbHRlciBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZmlsdGVyT2JqZWN0KHtcbiAgICAgICAgdGVzdDogMSxcbiAgICAgICAgdGVzdDI6IDIsXG4gICAgICAgIHRlc3QzOiAzLFxuICAgICAgfSwgWyd0ZXN0JywgJ3Rlc3QyJ10pKS50b0VxdWFsKHtcbiAgICAgICAgdGVzdDogMSxcbiAgICAgICAgdGVzdDI6IDIsXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVzdWx0IHRoZSBzYW1lIG9iamVjdCBvbiBlbXB0eSByZXF1aXJlbWVudHMnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZmlsdGVyT2JqZWN0KHtcbiAgICAgICAgdGVzdDogMSxcbiAgICAgICAgdGVzdDI6IDIsXG4gICAgICAgIHRlc3QzOiAzLFxuICAgICAgfSwgW10pKS50b0VxdWFsKHtcbiAgICAgICAgdGVzdDogMSxcbiAgICAgICAgdGVzdDI6IDIsXG4gICAgICAgIHRlc3QzOiAzLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIG5vdCB0aHJvdyBvbiBlbXB0eSBmaWx0ZXJlZCBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZmlsdGVyT2JqZWN0KHt9LCBbJ3Rlc3QnXSkpLnRvRXF1YWwoe30pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXh0ZW5zaW9uVG9NaW1lJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIG1pbWV0eXBlIGlmIG1pbWUgaXMgcGFzc2VkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGV4dGVuc2lvblRvTWltZSgnJykpLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHNhbWUgbWltZSBpcyBwYXNzZWQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCdpbWFnZS9wbmcnKSkudG9FcXVhbCgnaW1hZ2UvcG5nJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCdpbWFnZS9qcGcnKSkudG9FcXVhbCgnaW1hZ2UvanBnJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCdhcHBsaWNhdGlvbi9wZGYnKSkudG9FcXVhbCgnYXBwbGljYXRpb24vcGRmJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnaXQgc2hvdWxkIHJldHVybiBjb3JyZWN0IG1pbWVzIGZvciBleHQnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCcucG5nJykpLnRvRXF1YWwoJ2ltYWdlL3BuZycpO1xuICAgICAgZXhwZWN0KGV4dGVuc2lvblRvTWltZSgnLmpwZycpKS50b0VxdWFsKCdpbWFnZS9qcGVnJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCcucGRmJykpLnRvRXF1YWwoJ2FwcGxpY2F0aW9uL3BkZicpO1xuXG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCcua2V5JykpLnRvRXF1YWwoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5rZXlub3RlJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCcuemlwJykpLnRvRXF1YWwoJ2FwcGxpY2F0aW9uL3ppcCcpO1xuICAgICAgZXhwZWN0KGV4dGVuc2lvblRvTWltZSgnLm51bWJlcnMnKSkudG9FcXVhbCgnYXBwbGljYXRpb24vdm5kLmFwcGxlLm51bWJlcnMnKTtcbiAgICB9KTtcblxuICAgIGl0KCdpdCBzaG91bGQgZXh0cmFjdCBleHRlbnNpb25zIGZvcm0gZmlsZW5hbWUgb3IgZXh0IHdpdGggZG90JywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGV4dGVuc2lvblRvTWltZSgndGVzdC5wbmcnKSkudG9FcXVhbCgnaW1hZ2UvcG5nJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCd0ZXN0LmpwZycpKS50b0VxdWFsKCdpbWFnZS9qcGVnJyk7XG4gICAgICBleHBlY3QoZXh0ZW5zaW9uVG9NaW1lKCd0ZXN0LnBkZicpKS50b0VxdWFsKCdhcHBsaWNhdGlvbi9wZGYnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NsZWFudXBDYWxsYmFja3MnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgY2FsbGJhY2tzIGFzIHVuZGVmaW5lZCBhbmQgcmV0dXJuIHVudG91Y2hlZCBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCB0ZXN0T2JqID0ge1xuICAgICAgICBmbjogKCkgPT4gMSxcbiAgICAgICAgdGVzdDoge1xuICAgICAgICAgIGZuMjogKCkgPT4gMixcbiAgICAgICAgfSxcbiAgICAgICAgdGVzdE46IDEyMyxcbiAgICAgICAgdGVzdHM6ICdzdHJpbmcnLFxuICAgICAgICB0ZXN0T2JqOiB7XG4gICAgICAgICAgdHN0OiAxMjMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICBleHBlY3QoY2xlYW5VcENhbGxiYWNrcyh0ZXN0T2JqKSkudG9FcXVhbCh7XG4gICAgICAgIHRlc3Q6IHt9LFxuICAgICAgICB0ZXN0TjogMTIzLFxuICAgICAgICB0ZXN0czogJ3N0cmluZycsXG4gICAgICAgIHRlc3RPYmo6IHtcbiAgICAgICAgICB0c3Q6IDEyMyxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19

@@ -5,2 +5,15 @@ # Changelog

## [3.20.0](https://github.com/filestack/filestack-js/compare/v3.19.0...v3.20.0) (2020-11-18)
### Features
* **picker:** bump picker version ([4b155b3](https://github.com/filestack/filestack-js/commit/4b155b359b1b939ec80ad224703e194effc4a791))
* **utils:** add converting extension to mimetype ([#400](https://github.com/filestack/filestack-js/issues/400)) ([669e178](https://github.com/filestack/filestack-js/commit/669e178ef9d6cbd4d2303cec0f8cbbbf208b50fd))
### Bug Fixes
* **sentry:** update sentry errors ([5a53ddd](https://github.com/filestack/filestack-js/commit/5a53ddd75db9c41396b1c2d9c23dab5784ca2419))
## [3.19.0](https://github.com/filestack/filestack-js/compare/v3.18.0...v3.19.0) (2020-11-03)

@@ -7,0 +20,0 @@

{
"name": "filestack-js",
"version": "3.19.0",
"version": "3.20.0",
"description": "Official JavaScript library for Filestack",

@@ -5,0 +5,0 @@ "main": "build/main/index.js",

@@ -21,3 +21,3 @@ /*

*/
const PICKER_VERSION = '1.19.0';
const PICKER_VERSION = '1.19.1';

@@ -24,0 +24,0 @@ /**

@@ -25,3 +25,3 @@ /*

import { storeURL } from './api/store';
import { resolveHost, getVersion } from './utils';
import * as Utils from './utils';
import { Upload, InputFile, UploadOptions, StoreUploadOptions, UploadTags } from './api/upload';

@@ -104,2 +104,12 @@ import { preview, PreviewOptions } from './api/preview';

/**
* Returns filestack utils
*
* @readonly
* @memberof Client
*/
get utils() {
return Utils;
}
constructor(apikey: string, options?: ClientOptions) {

@@ -116,3 +126,3 @@ super();

scope.setTag('apikey', apikey);
scope.setTag('sdk-version', getVersion());
scope.setTag('sdk-version', Utils.getVersion());
scope.setExtra('clientOptions', options);

@@ -177,3 +187,3 @@ });

this.session.cname = cname;
this.session.urls = resolveHost(this.session.urls, cname);
this.session.urls = Utils.resolveHost(this.session.urls, cname);
}

@@ -436,4 +446,5 @@

Sentry.withScope(scope => {
scope.setExtras(e.details);
scope.setExtras({ uploadOptions: options, storeOptions });
scope.setExtras({ uploadOptions: options, storeOptions, details: e.details });
e.message = `FS-${e.message}`;
Sentry.captureException(e);

@@ -440,0 +451,0 @@ });

@@ -294,5 +294,3 @@ /*

if (config.timeout) {
console.log(config.timeout);
req.setTimeout(config.timeout, () => {
console.log('socket timeouted===========');
req.abort();

@@ -299,0 +297,0 @@

@@ -18,3 +18,3 @@ /*

export const Map = {
export const ExtensionsMap = {
'application/andrew-inset': ['ez'],

@@ -21,0 +21,0 @@ 'application/applixware': ['aw'],

@@ -17,3 +17,3 @@ /*

*/
import { resolveCdnUrl, resolveHost, removeEmpty, uniqueTime, uniqueId, md5, sanitizeName, filterObject, b64, getVersion, cleanUpCallbacks } from './index';
import { resolveCdnUrl, resolveHost, removeEmpty, uniqueTime, uniqueId, md5, extensionToMime, sanitizeName, filterObject, b64, getVersion, cleanUpCallbacks } from './index';
import { config } from '../../config';

@@ -186,2 +186,30 @@ const v = require('../../../../package.json').version;

describe('extensionToMime', () => {
it('should return mimetype if mime is passed', () => {
expect(extensionToMime('')).toEqual(undefined);
});
it('should return same mime is passed', () => {
expect(extensionToMime('image/png')).toEqual('image/png');
expect(extensionToMime('image/jpg')).toEqual('image/jpg');
expect(extensionToMime('application/pdf')).toEqual('application/pdf');
});
it('it should return correct mimes for ext', () => {
expect(extensionToMime('.png')).toEqual('image/png');
expect(extensionToMime('.jpg')).toEqual('image/jpeg');
expect(extensionToMime('.pdf')).toEqual('application/pdf');
expect(extensionToMime('.key')).toEqual('application/vnd.apple.keynote');
expect(extensionToMime('.zip')).toEqual('application/zip');
expect(extensionToMime('.numbers')).toEqual('application/vnd.apple.numbers');
});
it('it should extract extensions form filename or ext with dot', () => {
expect(extensionToMime('test.png')).toEqual('image/png');
expect(extensionToMime('test.jpg')).toEqual('image/jpeg');
expect(extensionToMime('test.pdf')).toEqual('application/pdf');
});
});
describe('CleanupCallbacks', () => {

@@ -188,0 +216,0 @@ it('should set callbacks as undefined and return untouched object', () => {

@@ -20,3 +20,3 @@ /*

import { Hosts } from './../../config';
import { Map } from './extensions';
import { ExtensionsMap } from './extensions';
import fileType from 'file-type';

@@ -115,10 +115,6 @@ import * as isutf8 from 'isutf8';

if (name && name.indexOf('.') > -1) {
const ext = name.split('.').pop();
const keys = Object.keys(Map);
const mapLen = keys.length;
const mime = extensionToMime(name);
for (let i = 0; i < mapLen; i++) {
if (Map[keys[i]].indexOf(ext) > -1) {
return keys[i];
}
if (mime) {
return mime;
}

@@ -147,2 +143,33 @@ }

/**
* Change extension to according mimetype using ext=>mimetype map
*
* @param ext - string
* @return string|boolean
*/
export const extensionToMime = (ext: string) => {
if (!ext || ext.length === 0) {
return;
}
if (ext.split('/').length === 2) {
return ext;
}
if (ext.indexOf('.') > -1) {
ext = ext.split('.').pop();
}
const keys = Object.keys(ExtensionsMap);
const mapLen = keys.length;
for (let i = 0; i < mapLen; i++) {
if (ExtensionsMap[keys[i]].indexOf(ext) > -1) {
return keys[i];
}
}
return;
};
/**
* Sanitizer Options

@@ -149,0 +176,0 @@ */

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc