Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

tsickle

Package Overview
Dependencies
Maintainers
4
Versions
65
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tsickle - npm Package Compare versions

Comparing version 0.38.1 to 0.39.0

8

package.json
{
"name": "tsickle",
"version": "0.38.1",
"version": "0.39.0",
"description": "Transpile TypeScript code to JavaScript with Closure annotations.",

@@ -24,3 +24,2 @@ "main": "src/tsickle.js",

"@types/node": "^10.5.6",
"clang-format": "^1.2.4",
"diff-match-patch": "^1.0.1",

@@ -30,3 +29,2 @@ "glob": "7.1.2",

"jasmine": "3.1.0",
"prettier": "1.14.0",
"source-map": "^0.7.3",

@@ -36,7 +34,7 @@ "source-map-support": "^0.5.6",

"tslint": "5.11.0",
"typescript": "3.8.2"
"typescript": "3.9"
},
"scripts": {
"build": "bazel build //:npm_package",
"lint": "node check_format.js && tslint -c tslint.json -p tsconfig.json",
"lint": "tslint -c tslint.json -p tsconfig.json",
"test": "yarn lint && bazel test ..."

@@ -43,0 +41,0 @@ },

@@ -143,5 +143,3 @@ # Tsickle - TypeScript to Closure Translator [![Build Status](https://circleci.com/gh/angular/tsickle.svg?style=svg)](https://circleci.com/gh/angular/tsickle) [![Windows build](https://ci.appveyor.com/api/projects/status/puxdblmlqbofqqt1/branch/master?svg=true)](https://ci.appveyor.com/project/alexeagle/tsickle/branch/master)

- `bazel test test:golden_test` executes the golden tests,
- `node check_format.js` checks the source code formatting using
`clang-format`,
- `yarn test` runs unit tests, e2e tests and checks the source code formatting.
- `yarn test` runs unit tests and e2e tests.

@@ -148,0 +146,0 @@ ### Debugging

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.moduleNameAsIdentifier = void 0;
/**

@@ -31,2 +32,2 @@ * Returns a mangled version of the module name (resolved file name) for source file.

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdG9yX2hvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYW5ub3RhdG9yX2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFnREg7Ozs7O09BS0c7SUFDSCxTQUFnQixzQkFBc0IsQ0FBQyxJQUFtQixFQUFFLFFBQWdCO1FBQzFFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFGRCx3REFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKlxuICogQW5ub3RhdG9ySG9zdCBjb250YWlucyBob3N0IHByb3BlcnRpZXMgZm9yIHRoZSBKU0RvYy1hbm5vdGF0aW9uIHByb2Nlc3MuXG4gKiBJdCdzIHVzZWQgYnkgYSBidW5jaCBvZiBkaWZmZXJlbnQgdHNpY2tsZSBtb2R1bGVzLCBpbmNsdWRpbmcgdGhlIHR5cGVcbiAqIHRyYW5zbGF0b3JzLCB0aGUgZXh0ZXJucyBnZW5lcmF0b3IsIGFuZCB0aGUgbWFpbiBKU0RvYyB0cmFuc2Zvcm1lci5cbiAqXG4gKiBDb250cmFzdCB0aGlzIHdpdGggdGhlIEdvb2dNb2R1bGVQcm9jZXNzb3JIb3N0LCB0aGUgc2VwYXJhdGUgaG9zdCB1c2VkIGZvclxuICogdGhlIGdvb2cubW9kdWxlKCkgdHJhbnNsYXRpb24gcHJvY2Vzcy5cbiAqXG4gKiBUT0RPKGV2bWFyKTogY29uc2lkZXIgYnJlYWtpbmcgdGhpcyBpbnRvIG1vcmUgc2NvcGVkIGhvc3RzIGZvciB0aGUgZGlmZmVyZW50XG4gKiBtb2R1bGVzLCByYXRoZXIgdGhhbiBvbmUgbWFzc2l2ZSBsaXN0IG9mIGFsbCBwb3NzaWJsZSBuZWVkZWQgZnVuY3Rpb25hbGl0eS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbm5vdGF0b3JIb3N0IHtcbiAgLyoqXG4gICAqIElmIHByb3ZpZGVkIGEgZnVuY3Rpb24gdGhhdCBsb2dzIGFuIGludGVybmFsIHdhcm5pbmcuXG4gICAqIFRoZXNlIHdhcm5pbmdzIGFyZSBub3QgYWN0aW9uYWJsZSBieSBhbiBlbmQgdXNlciBhbmQgc2hvdWxkIGJlIGhpZGRlblxuICAgKiBieSBkZWZhdWx0LlxuICAgKi9cbiAgbG9nV2FybmluZz86ICh3YXJuaW5nOiB0cy5EaWFnbm9zdGljKSA9PiB2b2lkO1xuICBwYXRoVG9Nb2R1bGVOYW1lOiAoY29udGV4dDogc3RyaW5nLCBpbXBvcnRQYXRoOiBzdHJpbmcpID0+IHN0cmluZztcbiAgLyoqXG4gICAqIElmIHRydWUsIGNvbnZlcnQgZXZlcnkgdHlwZSB0byB0aGUgQ2xvc3VyZSB7P30gdHlwZSwgd2hpY2ggbWVhbnNcbiAgICogXCJkb24ndCBjaGVjayB0eXBlc1wiLlxuICAgKi9cbiAgdW50eXBlZD86IGJvb2xlYW47XG4gIC8qKiBJZiBwcm92aWRlZCwgYSBzZXQgb2YgcGF0aHMgd2hvc2UgdHlwZXMgc2hvdWxkIGFsd2F5cyBnZW5lcmF0ZSBhcyB7P30uICovXG4gIHR5cGVCbGFja0xpc3RQYXRocz86IFNldDxzdHJpbmc+O1xuICAvKipcbiAgICogQ29udmVydCBzaG9ydGhhbmQgXCIvaW5kZXhcIiBpbXBvcnRzIHRvIGZ1bGwgcGF0aCAoaW5jbHVkZSB0aGUgXCIvaW5kZXhcIikuXG4gICAqIEFubm90YXRpb24gd2lsbCBiZSBzbG93ZXIgYmVjYXVzZSBldmVyeSBpbXBvcnQgbXVzdCBiZSByZXNvbHZlZC5cbiAgICovXG4gIGNvbnZlcnRJbmRleEltcG9ydFNob3J0aGFuZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRzaWNrbGUgc2hvdWxkIGluc2VydCBnb29nLnByb3ZpZGUoKSBjYWxscyBpbnRvIHRoZSBleHRlcm5zIGdlbmVyYXRlZCBmb3IgYC5kLnRzYCBmaWxlc1xuICAgKiB0aGF0IGFyZSBleHRlcm5hbCBtb2R1bGVzLlxuICAgKi9cbiAgcHJvdmlkZUV4dGVybmFsTW9kdWxlRHRzTmFtZXNwYWNlPzogYm9vbGVhbjtcblxuICAvKiogVXNlZCByZXNvbHZpbmcgZmlsZSBuYW1lcyB0byBtb2R1bGVzLiAqL1xuICBtb2R1bGVSZXNvbHV0aW9uSG9zdDogdHMuTW9kdWxlUmVzb2x1dGlvbkhvc3Q7XG5cbiAgLyoqIFVzZWQgdG9nZXRoZXIgd2l0aCB0aGUgaG9zdCBmb3IgZmlsZSBuYW1lIC0+IG1vZHVsZSBuYW1lIHJlc29sdXRpb24uICovXG4gIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucztcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgbWFuZ2xlZCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgbmFtZSAocmVzb2x2ZWQgZmlsZSBuYW1lKSBmb3Igc291cmNlIGZpbGUuXG4gKlxuICogVGhlIG1hbmdsZWQgbmFtZSBpcyBzYWZlIHRvIHVzZSBhcyBhIEphdmFTY3JpcHQgaWRlbnRpZmllci4gSXQgaXMgdXNlZCBhcyBhIGdsb2JhbGx5IHVuaXF1ZVxuICogcHJlZml4IHRvIHNjb3BlIHN5bWJvbHMgaW4gZXh0ZXJucyBmaWxlIChzZWUgZXh0ZXJucy50cykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtb2R1bGVOYW1lQXNJZGVudGlmaWVyKGhvc3Q6IEFubm90YXRvckhvc3QsIGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaG9zdC5wYXRoVG9Nb2R1bGVOYW1lKCcnLCBmaWxlTmFtZSkucmVwbGFjZSgvXFwuL2csICckJyk7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdG9yX2hvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYW5ub3RhdG9yX2hvc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBZ0RIOzs7OztPQUtHO0lBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsSUFBbUIsRUFBRSxRQUFnQjtRQUMxRSxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRkQsd0RBRUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIEFubm90YXRvckhvc3QgY29udGFpbnMgaG9zdCBwcm9wZXJ0aWVzIGZvciB0aGUgSlNEb2MtYW5ub3RhdGlvbiBwcm9jZXNzLlxuICogSXQncyB1c2VkIGJ5IGEgYnVuY2ggb2YgZGlmZmVyZW50IHRzaWNrbGUgbW9kdWxlcywgaW5jbHVkaW5nIHRoZSB0eXBlXG4gKiB0cmFuc2xhdG9ycywgdGhlIGV4dGVybnMgZ2VuZXJhdG9yLCBhbmQgdGhlIG1haW4gSlNEb2MgdHJhbnNmb3JtZXIuXG4gKlxuICogQ29udHJhc3QgdGhpcyB3aXRoIHRoZSBHb29nTW9kdWxlUHJvY2Vzc29ySG9zdCwgdGhlIHNlcGFyYXRlIGhvc3QgdXNlZCBmb3JcbiAqIHRoZSBnb29nLm1vZHVsZSgpIHRyYW5zbGF0aW9uIHByb2Nlc3MuXG4gKlxuICogVE9ETyhldm1hcik6IGNvbnNpZGVyIGJyZWFraW5nIHRoaXMgaW50byBtb3JlIHNjb3BlZCBob3N0cyBmb3IgdGhlIGRpZmZlcmVudFxuICogbW9kdWxlcywgcmF0aGVyIHRoYW4gb25lIG1hc3NpdmUgbGlzdCBvZiBhbGwgcG9zc2libGUgbmVlZGVkIGZ1bmN0aW9uYWxpdHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW5ub3RhdG9ySG9zdCB7XG4gIC8qKlxuICAgKiBJZiBwcm92aWRlZCBhIGZ1bmN0aW9uIHRoYXQgbG9ncyBhbiBpbnRlcm5hbCB3YXJuaW5nLlxuICAgKiBUaGVzZSB3YXJuaW5ncyBhcmUgbm90IGFjdGlvbmFibGUgYnkgYW4gZW5kIHVzZXIgYW5kIHNob3VsZCBiZSBoaWRkZW5cbiAgICogYnkgZGVmYXVsdC5cbiAgICovXG4gIGxvZ1dhcm5pbmc/OiAod2FybmluZzogdHMuRGlhZ25vc3RpYykgPT4gdm9pZDtcbiAgcGF0aFRvTW9kdWxlTmFtZTogKGNvbnRleHQ6IHN0cmluZywgaW1wb3J0UGF0aDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBjb252ZXJ0IGV2ZXJ5IHR5cGUgdG8gdGhlIENsb3N1cmUgez99IHR5cGUsIHdoaWNoIG1lYW5zXG4gICAqIFwiZG9uJ3QgY2hlY2sgdHlwZXNcIi5cbiAgICovXG4gIHVudHlwZWQ/OiBib29sZWFuO1xuICAvKiogSWYgcHJvdmlkZWQsIGEgc2V0IG9mIHBhdGhzIHdob3NlIHR5cGVzIHNob3VsZCBhbHdheXMgZ2VuZXJhdGUgYXMgez99LiAqL1xuICB0eXBlQmxhY2tMaXN0UGF0aHM/OiBTZXQ8c3RyaW5nPjtcbiAgLyoqXG4gICAqIENvbnZlcnQgc2hvcnRoYW5kIFwiL2luZGV4XCIgaW1wb3J0cyB0byBmdWxsIHBhdGggKGluY2x1ZGUgdGhlIFwiL2luZGV4XCIpLlxuICAgKiBBbm5vdGF0aW9uIHdpbGwgYmUgc2xvd2VyIGJlY2F1c2UgZXZlcnkgaW1wb3J0IG11c3QgYmUgcmVzb2x2ZWQuXG4gICAqL1xuICBjb252ZXJ0SW5kZXhJbXBvcnRTaG9ydGhhbmQ/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hldGhlciB0c2lja2xlIHNob3VsZCBpbnNlcnQgZ29vZy5wcm92aWRlKCkgY2FsbHMgaW50byB0aGUgZXh0ZXJucyBnZW5lcmF0ZWQgZm9yIGAuZC50c2AgZmlsZXNcbiAgICogdGhhdCBhcmUgZXh0ZXJuYWwgbW9kdWxlcy5cbiAgICovXG4gIHByb3ZpZGVFeHRlcm5hbE1vZHVsZUR0c05hbWVzcGFjZT86IGJvb2xlYW47XG5cbiAgLyoqIFVzZWQgcmVzb2x2aW5nIGZpbGUgbmFtZXMgdG8gbW9kdWxlcy4gKi9cbiAgbW9kdWxlUmVzb2x1dGlvbkhvc3Q6IHRzLk1vZHVsZVJlc29sdXRpb25Ib3N0O1xuXG4gIC8qKiBVc2VkIHRvZ2V0aGVyIHdpdGggdGhlIGhvc3QgZm9yIGZpbGUgbmFtZSAtPiBtb2R1bGUgbmFtZSByZXNvbHV0aW9uLiAqL1xuICBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnM7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIG1hbmdsZWQgdmVyc2lvbiBvZiB0aGUgbW9kdWxlIG5hbWUgKHJlc29sdmVkIGZpbGUgbmFtZSkgZm9yIHNvdXJjZSBmaWxlLlxuICpcbiAqIFRoZSBtYW5nbGVkIG5hbWUgaXMgc2FmZSB0byB1c2UgYXMgYSBKYXZhU2NyaXB0IGlkZW50aWZpZXIuIEl0IGlzIHVzZWQgYXMgYSBnbG9iYWxseSB1bmlxdWVcbiAqIHByZWZpeCB0byBzY29wZSBzeW1ib2xzIGluIGV4dGVybnMgZmlsZSAoc2VlIGV4dGVybnMudHMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbW9kdWxlTmFtZUFzSWRlbnRpZmllcihob3N0OiBBbm5vdGF0b3JIb3N0LCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGhvc3QucGF0aFRvTW9kdWxlTmFtZSgnJywgZmlsZU5hbWUpLnJlcGxhY2UoL1xcLi9nLCAnJCcpO1xufVxuIl19

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.pathToModuleName = exports.assertAbsolute = void 0;
const path = require("tsickle/src/path");

@@ -62,2 +63,2 @@ /**

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpX3N1cHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpX3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCx5Q0FBK0I7SUFFL0I7Ozs7O09BS0c7SUFDSCxTQUFnQixjQUFjLENBQUMsUUFBZ0I7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDeEU7SUFDSCxDQUFDO0lBSkQsd0NBSUM7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixnQkFBZ0IsQ0FDNUIsY0FBc0IsRUFBRSxPQUFlLEVBQUUsUUFBZ0I7UUFDM0QsUUFBUSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbEQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFO1lBQ3ZCLHVCQUF1QjtZQUN2Qiw4REFBOEQ7WUFDOUQsUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN2RDtRQUVELHdFQUF3RTtRQUN4RSw0RUFBNEU7UUFDNUUsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUFFLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUUvRSx1RUFBdUU7UUFDdkUsaUVBQWlFO1FBRWpFLGtFQUFrRTtRQUNsRSw0QkFBNEI7UUFFNUIsSUFBSSxjQUFjLEVBQUU7WUFDbEIsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BEO1FBRUQsbURBQW1EO1FBQ25ELE1BQU0sVUFBVSxHQUNaLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRWxHLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUE5QkQsNENBOEJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJy4vcGF0aCc7XG5cbi8qKlxuICogYXNzZXJ0cyB0aGF0IHRoZSBnaXZlbiBmaWxlTmFtZSBpcyBhbiBhYnNvbHV0ZSBwYXRoLlxuICpcbiAqIFRoZSBUeXBlU2NyaXB0IEFQSSB3b3JrcyBpbiBhYnNvbHV0ZSBwYXRocywgc28gd2UgbXVzdCBiZSBjYXJlZnVsIHRvIHJlc29sdmVcbiAqIHBhdGhzIGJlZm9yZSBoYW5kaW5nIHRoZW0gb3ZlciB0byBUeXBlU2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0QWJzb2x1dGUoZmlsZU5hbWU6IHN0cmluZykge1xuICBpZiAoIXBhdGguaXNBYnNvbHV0ZShmaWxlTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoZmlsZU5hbWUpfSB0byBiZSBhYnNvbHV0ZWApO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYSBjb250ZXh0ICh0cy5Tb3VyY2VGaWxlLmZpbGVOYW1lIG9mIHRoZSBjdXJyZW50IGZpbGUpIGFuZCB0aGUgaW1wb3J0IFVSTCBvZiBhbiBFUzZcbiAqIGltcG9ydCBhbmQgZ2VuZXJhdGVzIGEgZ29vZ21vZHVsZSBtb2R1bGUgbmFtZSBmb3IgdGhlIGltcG9ydGVkIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGhUb01vZHVsZU5hbWUoXG4gICAgcm9vdE1vZHVsZVBhdGg6IHN0cmluZywgY29udGV4dDogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgZmlsZU5hbWUgPSBmaWxlTmFtZS5yZXBsYWNlKC8oXFwuZCk/XFwuW3RqXXMkLywgJycpO1xuXG4gIGlmIChmaWxlTmFtZVswXSA9PT0gJy4nKSB7XG4gICAgLy8gJy4vZm9vJyBvciAnLi4vZm9vJy5cbiAgICAvLyBSZXNvbHZlIHRoZSBwYXRoIGFnYWluc3QgdGhlIGRpcm5hbWUgb2YgdGhlIGN1cnJlbnQgbW9kdWxlLlxuICAgIGZpbGVOYW1lID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShjb250ZXh0KSwgZmlsZU5hbWUpO1xuICB9XG5cbiAgLy8gVE9ETyhldmFubSk6IHZhcmlvdXMgdGVzdHMgYXNzdW1lIHRoZXkgY2FuIGltcG9ydCByZWxhdGl2ZSBwYXRocyBsaWtlXG4gIC8vICdmb28vYmFyJyBhbmQgaGF2ZSB0aGVtIGludGVycHJldGVkIGFzIHJvb3QtcmVsYXRpdmU7IHByZXNlcnZlIHRoYXQgaGVyZS5cbiAgLy8gRml4IHRoaXMgYnkgcmVtb3ZpbmcgdGhlIG5leHQgbGluZS5cbiAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoZmlsZU5hbWUpKSBmaWxlTmFtZSA9IHBhdGguam9pbihyb290TW9kdWxlUGF0aCwgZmlsZU5hbWUpO1xuXG4gIC8vIFRPRE8oZXZhbm0pOiB2YXJpb3VzIHRlc3RzIGFzc3VtZSB0aGV5IGNhbiBwYXNzIGluIGEgJ2ZpbGVOYW1lJyBsaWtlXG4gIC8vICdnb29nOmZvby5iYXInIGFuZCBoYXZlIHRoaXMgZnVuY3Rpb24gZG8gc29tZXRoaW5nIHJlYXNvbmFibGUuXG5cbiAgLy8gRm9yIGNvcnJlY3RuZXNzLCB0aGUgYWJvdmUgbXVzdCBoYXZlIHByb2R1Y2VkIGFuIGFic29sdXRlIHBhdGguXG4gIC8vIGFzc2VydEFic29sdXRlKGZpbGVOYW1lKTtcblxuICBpZiAocm9vdE1vZHVsZVBhdGgpIHtcbiAgICBmaWxlTmFtZSA9IHBhdGgucmVsYXRpdmUocm9vdE1vZHVsZVBhdGgsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8vIFJlcGxhY2UgY2hhcmFjdGVycyBub3Qgc3VwcG9ydGVkIGJ5IGdvb2cubW9kdWxlLlxuICBjb25zdCBtb2R1bGVOYW1lID1cbiAgICAgIGZpbGVOYW1lLnJlcGxhY2UoL1xcL3xcXFxcL2csICcuJykucmVwbGFjZSgvXlteYS16QS1aXyRdLywgJ18nKS5yZXBsYWNlKC9bXmEtekEtWjAtOS5fJF0vZywgJ18nKTtcblxuICByZXR1cm4gbW9kdWxlTmFtZTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpX3N1cHBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY2xpX3N1cHBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgseUNBQStCO0lBRS9COzs7OztPQUtHO0lBQ0gsU0FBZ0IsY0FBYyxDQUFDLFFBQWdCO1FBQzdDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1NBQ3hFO0lBQ0gsQ0FBQztJQUpELHdDQUlDO0lBRUQ7OztPQUdHO0lBQ0gsU0FBZ0IsZ0JBQWdCLENBQzVCLGNBQXNCLEVBQUUsT0FBZSxFQUFFLFFBQWdCO1FBQzNELFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWxELElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtZQUN2Qix1QkFBdUI7WUFDdkIsOERBQThEO1lBQzlELFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDdkQ7UUFFRCx3RUFBd0U7UUFDeEUsNEVBQTRFO1FBQzVFLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFBRSxRQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFL0UsdUVBQXVFO1FBQ3ZFLGlFQUFpRTtRQUVqRSxrRUFBa0U7UUFDbEUsNEJBQTRCO1FBRTVCLElBQUksY0FBYyxFQUFFO1lBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNwRDtRQUVELG1EQUFtRDtRQUNuRCxNQUFNLFVBQVUsR0FDWixRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsRyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBOUJELDRDQThCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgcGF0aCBmcm9tICcuL3BhdGgnO1xuXG4vKipcbiAqIGFzc2VydHMgdGhhdCB0aGUgZ2l2ZW4gZmlsZU5hbWUgaXMgYW4gYWJzb2x1dGUgcGF0aC5cbiAqXG4gKiBUaGUgVHlwZVNjcmlwdCBBUEkgd29ya3MgaW4gYWJzb2x1dGUgcGF0aHMsIHNvIHdlIG11c3QgYmUgY2FyZWZ1bCB0byByZXNvbHZlXG4gKiBwYXRocyBiZWZvcmUgaGFuZGluZyB0aGVtIG92ZXIgdG8gVHlwZVNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydEFic29sdXRlKGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgaWYgKCFwYXRoLmlzQWJzb2x1dGUoZmlsZU5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KGZpbGVOYW1lKX0gdG8gYmUgYWJzb2x1dGVgKTtcbiAgfVxufVxuXG4vKipcbiAqIFRha2VzIGEgY29udGV4dCAodHMuU291cmNlRmlsZS5maWxlTmFtZSBvZiB0aGUgY3VycmVudCBmaWxlKSBhbmQgdGhlIGltcG9ydCBVUkwgb2YgYW4gRVM2XG4gKiBpbXBvcnQgYW5kIGdlbmVyYXRlcyBhIGdvb2dtb2R1bGUgbW9kdWxlIG5hbWUgZm9yIHRoZSBpbXBvcnRlZCBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRoVG9Nb2R1bGVOYW1lKFxuICAgIHJvb3RNb2R1bGVQYXRoOiBzdHJpbmcsIGNvbnRleHQ6IHN0cmluZywgZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGZpbGVOYW1lID0gZmlsZU5hbWUucmVwbGFjZSgvKFxcLmQpP1xcLlt0al1zJC8sICcnKTtcblxuICBpZiAoZmlsZU5hbWVbMF0gPT09ICcuJykge1xuICAgIC8vICcuL2Zvbycgb3IgJy4uL2ZvbycuXG4gICAgLy8gUmVzb2x2ZSB0aGUgcGF0aCBhZ2FpbnN0IHRoZSBkaXJuYW1lIG9mIHRoZSBjdXJyZW50IG1vZHVsZS5cbiAgICBmaWxlTmFtZSA9IHBhdGguam9pbihwYXRoLmRpcm5hbWUoY29udGV4dCksIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8vIFRPRE8oZXZhbm0pOiB2YXJpb3VzIHRlc3RzIGFzc3VtZSB0aGV5IGNhbiBpbXBvcnQgcmVsYXRpdmUgcGF0aHMgbGlrZVxuICAvLyAnZm9vL2JhcicgYW5kIGhhdmUgdGhlbSBpbnRlcnByZXRlZCBhcyByb290LXJlbGF0aXZlOyBwcmVzZXJ2ZSB0aGF0IGhlcmUuXG4gIC8vIEZpeCB0aGlzIGJ5IHJlbW92aW5nIHRoZSBuZXh0IGxpbmUuXG4gIGlmICghcGF0aC5pc0Fic29sdXRlKGZpbGVOYW1lKSkgZmlsZU5hbWUgPSBwYXRoLmpvaW4ocm9vdE1vZHVsZVBhdGgsIGZpbGVOYW1lKTtcblxuICAvLyBUT0RPKGV2YW5tKTogdmFyaW91cyB0ZXN0cyBhc3N1bWUgdGhleSBjYW4gcGFzcyBpbiBhICdmaWxlTmFtZScgbGlrZVxuICAvLyAnZ29vZzpmb28uYmFyJyBhbmQgaGF2ZSB0aGlzIGZ1bmN0aW9uIGRvIHNvbWV0aGluZyByZWFzb25hYmxlLlxuXG4gIC8vIEZvciBjb3JyZWN0bmVzcywgdGhlIGFib3ZlIG11c3QgaGF2ZSBwcm9kdWNlZCBhbiBhYnNvbHV0ZSBwYXRoLlxuICAvLyBhc3NlcnRBYnNvbHV0ZShmaWxlTmFtZSk7XG5cbiAgaWYgKHJvb3RNb2R1bGVQYXRoKSB7XG4gICAgZmlsZU5hbWUgPSBwYXRoLnJlbGF0aXZlKHJvb3RNb2R1bGVQYXRoLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvLyBSZXBsYWNlIGNoYXJhY3RlcnMgbm90IHN1cHBvcnRlZCBieSBnb29nLm1vZHVsZS5cbiAgY29uc3QgbW9kdWxlTmFtZSA9XG4gICAgICBmaWxlTmFtZS5yZXBsYWNlKC9cXC98XFxcXC9nLCAnLicpLnJlcGxhY2UoL15bXmEtekEtWl8kXS8sICdfJykucmVwbGFjZSgvW15hLXpBLVowLTkuXyRdL2csICdfJyk7XG5cbiAgcmV0dXJuIG1vZHVsZU5hbWU7XG59XG4iXX0=

@@ -115,1 +115,4 @@ /**

function CryptoKeyPair() {};
/** @typedef {!{handleEvent: function(Event):void}} */
var EventListenerObject;

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.transformDecoratorsOutputForClosurePropertyRenaming = exports.hasExportingDecorator = exports.getDecoratorDeclarations = void 0;
const ts = require("typescript");

@@ -191,2 +192,2 @@ const transformer_util_1 = require("tsickle/src/transformer_util");

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBRWpDLG1FQUEyRTtJQUUzRTs7T0FFRztJQUNILFNBQWdCLHdCQUF3QixDQUNwQyxTQUF1QixFQUFFLFdBQTJCO1FBQ3RELDZFQUE2RTtRQUM3RSxJQUFJLElBQUksR0FBWSxTQUFTLENBQUM7UUFDOUIsT0FBTyxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFO1lBQzdDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFO2dCQUN2RixJQUFJLEdBQUksSUFBeUMsQ0FBQyxVQUFVLENBQUM7YUFDOUQ7aUJBQU07Z0JBQ0wsdURBQXVEO2dCQUN2RCxPQUFPLEVBQUUsQ0FBQzthQUNYO1NBQ0Y7UUFFRCxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN2QixJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDdkMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMvQztRQUNELE9BQU8sTUFBTSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUN4QyxDQUFDO0lBbkJELDREQW1CQztJQUVEOzs7T0FHRztJQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQWEsRUFBRSxXQUEyQjtRQUM5RSxPQUFPLElBQUksQ0FBQyxVQUFVO1lB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bGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7Z2V0QWxsTGVhZGluZ0NvbW1lbnRzLCByZXBvcnREaWFnbm9zdGljfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGdpdmVuIGRlY29yYXRvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERlY29yYXRvckRlY2xhcmF0aW9ucyhcbiAgICBkZWNvcmF0b3I6IHRzLkRlY29yYXRvciwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyKTogdHMuRGVjbGFyYXRpb25bXSB7XG4gIC8vIFdhbGsgZG93biB0aGUgZXhwcmVzc2lvbiB0byBmaW5kIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBkZWNvcmF0b3IgZnVuY3Rpb24uXG4gIGxldCBub2RlOiB0cy5Ob2RlID0gZGVjb3JhdG9yO1xuICB3aGlsZSAobm9kZS5raW5kICE9PSB0cy5TeW50YXhLaW5kLklkZW50aWZpZXIpIHtcbiAgICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkRlY29yYXRvciB8fCBub2RlLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuQ2FsbEV4cHJlc3Npb24pIHtcbiAgICAgIG5vZGUgPSAobm9kZSBhcyB0cy5EZWNvcmF0b3IgfCB0cy5DYWxsRXhwcmVzc2lvbikuZXhwcmVzc2lvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gV2UgZG8gbm90IGtub3cgaG93IHRvIGhhbmRsZSB0aGlzIHR5cGUgb2YgZGVjb3JhdG9yLlxuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIGxldCBkZWNTeW0gPSB0eXBlQ2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5vZGUpO1xuICBpZiAoIWRlY1N5bSkgcmV0dXJuIFtdO1xuICBpZiAoZGVjU3ltLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuQWxpYXMpIHtcbiAgICBkZWNTeW0gPSB0eXBlQ2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKGRlY1N5bSk7XG4gIH1cbiAgcmV0dXJuIGRlY1N5bS5nZXREZWNsYXJhdGlvbnMoKSB8fCBbXTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgbm9kZSBoYXMgYW4gZXhwb3J0aW5nIGRlY29yYXRvciAgKGkuZS4sIGEgZGVjb3JhdG9yIHdpdGggQEV4cG9ydERlY29yYXRlZEl0ZW1zXG4gKiBpbiBpdHMgSlNEb2MpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzRXhwb3J0aW5nRGVjb3JhdG9yKG5vZGU6IHRzLk5vZGUsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICByZXR1cm4gbm9kZS5kZWNvcmF0b3JzICYmXG4gICAgICBub2RlLmRlY29yYXRvcnMuc29tZShkZWNvcmF0b3IgPT4gaXNFeHBvcnRpbmdEZWNvcmF0b3IoZGVjb3JhdG9yLCB0eXBlQ2hlY2tlcikpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gZGVjb3JhdG9yIGhhcyBhbiBARXhwb3J0RGVjb3JhdGVkSXRlbXMgZGlyZWN0aXZlIGluIGl0cyBKU0RvYy5cbiAqL1xuZnVuY3Rpb24gaXNFeHBvcnRpbmdEZWNvcmF0b3IoZGVjb3JhdG9yOiB0cy5EZWNvcmF0b3IsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcikge1xuICByZXR1cm4gZ2V0RGVjb3JhdG9yRGVjbGFyYXRpb25zKGRlY29yYXRvciwgdHlwZUNoZWNrZXIpLnNvbWUoZGVjbGFyYXRpb24gPT4ge1xuICAgIGNvbnN0IHJhbmdlID0gZ2V0QWxsTGVhZGluZ0NvbW1lbnRzKGRlY2xhcmF0aW9uKTtcbiAgICBpZiAoIXJhbmdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAoY29uc3Qge3RleHR9IG9mIHJhbmdlKSB7XG4gICAgICBpZiAoL0BFeHBvcnREZWNvcmF0ZWRJdGVtc1xcYi8udGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBIHRyYW5zZm9ybSBwYXNzIHRoYXQgYWRkcyBnb29nLnJlZmxlY3Qub2JqZWN0UHJvcGVydHkgY2FsbHMgdG8gdGhlIHByb3BlcnR5XG4gKiBuYW1lIHN0cmluZyBsaXRlcmFscyB0aGF0IGFyZSBlbWl0dGVkIGFzIHBhcnQgb2YgVHlwZVNjcmlwdCdzIGRlZmF1bHRcbiAqIGRlY29yYXRvciBvdXRwdXQuXG4gKlxuICogZ29vZy5yZWZsZWN0Lm9iamVjdFByb3BlcnR5IGlzIGEgc3BlY2lhbCBmdW5jdGlvbiB0aGF0IGlzIHJlY29nbml6ZWQgYnlcbiAqIENsb3N1cmUgQ29tcGlsZXIuIEl0IGlzIGNhbGxlZCBsaWtlIGdvb2cucmVmbGVjdC5vYmplY3RQcm9wZXJ0eSgncHJvcCcsIG9iailcbiAqIGFuZCBpdCBpcyBjb21waWxlZCB0byBhIHN0cmluZyBsaXRlcmFsIHRoYXQncyB0aGUgcHJvcGVydHkgbmFtZWQgJ3Byb3AnIG9uXG4gKiB0aGUgb2JqIHZhbHVlLlxuICpcbiAqIFRoaXMgd2F5LCBydW50aW1lIGRlY29yYXRvcnMgY2FuIHVzZSB0aGUgcHJvcGVydHkgbmFtZXMgKGUuZy4gdG8gcmVnaXN0ZXJcbiAqIHRoZSBwcm9wZXJ0eSBhcyBhIGdldHRlci9zZXR0ZXIgcGFpcikgd2hpbGUgc3RpbGwgYmVpbmcgY29tcGF0aWJsZSB3aXRoXG4gKiBDbG9zdXJlIENvbXBpbGVyJ3MgcHJvcGVydHkgcmVuYW1pbmcuXG4gKlxuICogVHJhbnNmb3JtczpcbiAqXG4gKiAgICAgdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAqICAgICAgIGRlY29yYXRvcixcbiAqICAgICAgIHRzbGliXzEuX19tZXRhZGF0YShcImRlc2lnbjp0eXBlXCIsIE9iamVjdClcbiAqICAgICBdLCBGb28ucHJvdG90eXBlLCBcInByb3BcIiwgdm9pZCAwKTtcbiAqXG4gKiBJbnRvOlxuICpcbiAqICAgICB0c2xpYl8xLl9fZGVjb3JhdGUoW1xuICogICAgICAgICAgIGRlY29yYXRvcixcbiAqICAgICAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gKiAgICAgICAgIF0sIEZvby5wcm90b3R5cGUsXG4gKiAgICAgICAgIF9fZ29vZ1JlZmxlY3Qub2JqZWN0UHJvcGVydHkoXCJwcm9wXCIsIEZvby5wcm90b3R5cGUpLCB2b2lkIDApO1xuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRGVjb3JhdG9yc091dHB1dEZvckNsb3N1cmVQcm9wZXJ0eVJlbmFtaW5nKGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10pIHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICBjb25zdCByZXN1bHQ6IHRzLlRyYW5zZm9ybWVyPHRzLlNvdXJjZUZpbGU+ID0gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGxldCBub2RlTmVlZGluZ0dvb2dSZWZsZWN0OiB1bmRlZmluZWR8dHMuTm9kZSA9IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHZpc2l0b3I6IHRzLlZpc2l0b3IgPSAobm9kZSkgPT4ge1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudE5vZGUgPSByZXdyaXRlRGVjb3JhdG9yKG5vZGUsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVwbGFjZW1lbnROb2RlKSB7XG4gICAgICAgICAgbm9kZU5lZWRpbmdHb29nUmVmbGVjdCA9IG5vZGU7XG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50Tm9kZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgdXBkYXRlZFNvdXJjZUZpbGUgPSB0cy52aXNpdE5vZGUoc291cmNlRmlsZSwgdmlzaXRvcik7XG4gICAgICBpZiAobm9kZU5lZWRpbmdHb29nUmVmbGVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbLi4udXBkYXRlZFNvdXJjZUZpbGUuc3RhdGVtZW50c107XG4gICAgICAgIGNvbnN0IGdvb2dNb2R1bGVJbmRleCA9IHN0YXRlbWVudHMuZmluZEluZGV4KGlzR29vZ01vZHVsZVN0YXRlbWVudCk7XG4gICAgICAgIGlmIChnb29nTW9kdWxlSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhcbiAgICAgICAgICAgICAgZGlhZ25vc3RpY3MsIG5vZGVOZWVkaW5nR29vZ1JlZmxlY3QsXG4gICAgICAgICAgICAgICdJbnRlcm5hbCB0c2lja2xlIGVycm9yOiBjb3VsZCBub3QgZmluZCBnb29nLm1vZHVsZSBzdGF0ZW1lbnQgdG8gaW1wb3J0IF9fdHNpY2tsZV9nb29nUmVmbGVjdCBmb3IgZGVjb3JhdG9yIGNvbXBpbGF0aW9uLicpO1xuICAgICAgICAgIHJldHVybiBzb3VyY2VGaWxlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdvb2dSZXF1aXJlUmVmbGVjdE9iamVjdFByb3BlcnR5ID0gdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChcbiAgICAgICAgICAgICAgICBbdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgICAgICAgJ19fdHNpY2tsZV9nb29nUmVmbGVjdCcsIHVuZGVmaW5lZCxcblxuICAgICAgICAgICAgICAgICAgICB0cy5jcmVhdGVDYWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3ModHMuY3JlYXRlSWRlbnRpZmllcignZ29vZycpLCAncmVxdWlyZScpLCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBbdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbCgnZ29vZy5yZWZsZWN0JyldKSldLFxuICAgICAgICAgICAgICAgIHRzLk5vZGVGbGFncy5Db25zdCkpO1xuICAgICAgICAvLyBUaGUgYm9pbGVycGxhdGUgd2UgcHJvZHVjZSBoYXMgYSBnb29nLm1vZHVsZSBsaW5lLCB0aGVuIHR3byByZWxhdGVkXG4gICAgICAgIC8vIGxpbmVzIGRlYWxpbmcgd2l0aCB0aGUgYG1vZHVsZWAgdmFyaWFibGUuIEluc2VydCBvdXIgZ29vZy5yZXF1aXJlXG4gICAgICAgIC8vIGFmdGVyIHRoYXQgdG8gYXZvaWQgdmlzdWFsbHkgYnJlYWtpbmcgdXAgdGhlIG1vZHVsZSBpbmZvLCBhbmQgdG8gYmVcbiAgICAgICAgLy8gd2l0aCB0aGUgcmVzdCBvZiB0aGUgZ29vZy5yZXF1aXJlIHN0YXRlbWVudHMuXG4gICAgICAgIHN0YXRlbWVudHMuc3BsaWNlKGdvb2dNb2R1bGVJbmRleCArIDMsIDAsIGdvb2dSZXF1aXJlUmVmbGVjdE9iamVjdFByb3BlcnR5KTtcbiAgICAgICAgdXBkYXRlZFNvdXJjZUZpbGUuc3RhdGVtZW50cyA9XG4gICAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UodHMuY3JlYXRlTm9kZUFycmF5KHN0YXRlbWVudHMpLCB1cGRhdGVkU291cmNlRmlsZS5zdGF0ZW1lbnRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1cGRhdGVkU291cmNlRmlsZTtcbiAgICB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbi8qKlxuICogSWYgYG5vZGVgIGlzIGEgY2FsbCB0byB0aGUgdHNsaWIgX19kZWNvcmF0ZSBmdW5jdGlvbiwgdGhpcyByZXR1cm5zIGEgbW9kaWZpZWRcbiAqIGNhbGwgd2l0aCB0aGUgc3RyaW5nIGFyZ3VtZW50IHJlcGxhY2VkIHdpdGhcbiAqIGBfX3RzaWNrbGVfZ29vZ1JlZmxlY3Qub2JqZWN0UHJvcGVydHkoJ3Byb3AnLCBUaGVDbGFzcy5wcm90b3R5cGUpYC5cbiAqXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBubyBtb2RpZmljYXRpb24gaXMgbmVjZXNzYXJ5LlxuICovXG5mdW5jdGlvbiByZXdyaXRlRGVjb3JhdG9yKG5vZGU6IHRzLk5vZGUsIGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCk6IHRzLk5vZGV8dW5kZWZpbmVkIHtcbiAgaWYgKCF0cy5pc0NhbGxFeHByZXNzaW9uKG5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGlkZW50aWZpZXIgPSBub2RlLmV4cHJlc3Npb247XG4gIGlmICghdHMuaXNJZGVudGlmaWVyKGlkZW50aWZpZXIpIHx8IGlkZW50aWZpZXIudGV4dCAhPT0gJ19fZGVjb3JhdGUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGFyZ3MgPSBbLi4ubm9kZS5hcmd1bWVudHNdO1xuICBpZiAoYXJncy5sZW5ndGggIT09IDQpIHtcbiAgICAvLyBTb21lIGRlY29yYXRvcnMsIGxpa2UgY2xhc3MgZGVjb3JhdG9ycywgaGF2ZSBmZXdlciBhcmd1bWVudHMsIGFuZCBkb24ndFxuICAgIC8vIG5lZWQgaGVscCB0byBiZSByZW5hbWluZy1zYWZlLlxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB1bnR5cGVkRmllbGROYW1lTGl0ZXJhbCA9IGFyZ3NbMl07XG4gIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKHVudHlwZWRGaWVsZE5hbWVMaXRlcmFsKSkge1xuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCwgZm9yIGV4YW1wbGU6XG4gICAgLy9cbiAgICAvLyAgICAgY29uc3QgcHJvcCA9IFN5bWJvbCgpO1xuICAgIC8vICAgICBjbGFzcyBGb28ge1xuICAgIC8vICAgICAgIEBkZWNvcmF0ZSBbcHJvcF0gPSAndmFsJztcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gTm90aGluZyBmb3IgdXMgdG8gZG8gaW4gdGhhdCBjYXNlLlxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmaWVsZE5hbWVMaXRlcmFsID0gdW50eXBlZEZpZWxkTmFtZUxpdGVyYWw7XG4gIGFyZ3NbMl0gPSB0cy5jcmVhdGVDYWxsKFxuICAgICAgdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3ModHMuY3JlYXRlSWRlbnRpZmllcignX190c2lja2xlX2dvb2dSZWZsZWN0JyksICdvYmplY3RQcm9wZXJ0eScpLFxuICAgICAgdW5kZWZpbmVkLCBbdHMuY3JlYXRlU3RyaW5nTGl0ZXJhbChmaWVsZE5hbWVMaXRlcmFsLnRleHQpLCB0cy5nZXRNdXRhYmxlQ2xvbmUoYXJnc1sxXSldKTtcbiAgcmV0dXJuIHRzLnVwZGF0ZUNhbGwobm9kZSwgbm9kZS5leHByZXNzaW9uLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3MpO1xufVxuXG5mdW5jdGlvbiBpc0dvb2dNb2R1bGVTdGF0ZW1lbnQoc3RhdGVtZW50OiB0cy5Ob2RlKSB7XG4gIGlmICghdHMuaXNFeHByZXNzaW9uU3RhdGVtZW50KHN0YXRlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZXhwciA9IHN0YXRlbWVudC5leHByZXNzaW9uO1xuICBpZiAoIXRzLmlzQ2FsbEV4cHJlc3Npb24oZXhwcikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCF0cy5pc1Byb3BlcnR5QWNjZXNzRXhwcmVzc2lvbihleHByLmV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGdvb2cgPSBleHByLmV4cHJlc3Npb24uZXhwcmVzc2lvbjtcbiAgaWYgKCF0cy5pc0lkZW50aWZpZXIoZ29vZykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGdvb2cudGV4dCA9PT0gJ2dvb2cnICYmIGV4cHIuZXhwcmVzc2lvbi5uYW1lLnRleHQgPT09ICdtb2R1bGUnO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjb3JhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kZWNvcmF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILGlDQUFpQztJQUVqQyxtRUFBMkU7SUFFM0U7O09BRUc7SUFDSCxTQUFnQix3QkFBd0IsQ0FDcEMsU0FBdUIsRUFBRSxXQUEyQjtRQUN0RCw2RUFBNkU7UUFDN0UsSUFBSSxJQUFJLEdBQVksU0FBUyxDQUFDO1FBQzlCLE9BQU8sSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRTtZQUM3QyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsVUFBVSxDQUFDLGNBQWMsRUFBRTtnQkFDdkYsSUFBSSxHQUFJLElBQXlDLENBQUMsVUFBVSxDQUFDO2FBQzlEO2lCQUFNO2dCQUNMLHVEQUF1RDtnQkFDdkQsT0FBTyxFQUFFLENBQUM7YUFDWDtTQUNGO1FBRUQsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxFQUFFLENBQUM7UUFDdkIsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO1lBQ3ZDLE1BQU0sR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFDRCxPQUFPLE1BQU0sQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQW5CRCw0REFtQkM7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxJQUFhLEVBQUUsV0FBMkI7UUFDOUUsT0FBTyxJQUFJLENBQUMsVUFBVTtZ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QWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2dldEFsbExlYWRpbmdDb21tZW50cywgcmVwb3J0RGlhZ25vc3RpY30gZnJvbSAnLi90cmFuc2Zvcm1lcl91dGlsJztcblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBnaXZlbiBkZWNvcmF0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWNvcmF0b3JEZWNsYXJhdGlvbnMoXG4gICAgZGVjb3JhdG9yOiB0cy5EZWNvcmF0b3IsIHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlcik6IHRzLkRlY2xhcmF0aW9uW10ge1xuICAvLyBXYWxrIGRvd24gdGhlIGV4cHJlc3Npb24gdG8gZmluZCB0aGUgaWRlbnRpZmllciBvZiB0aGUgZGVjb3JhdG9yIGZ1bmN0aW9uLlxuICBsZXQgbm9kZTogdHMuTm9kZSA9IGRlY29yYXRvcjtcbiAgd2hpbGUgKG5vZGUua2luZCAhPT0gdHMuU3ludGF4S2luZC5JZGVudGlmaWVyKSB7XG4gICAgaWYgKG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5EZWNvcmF0b3IgfHwgbm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLkNhbGxFeHByZXNzaW9uKSB7XG4gICAgICBub2RlID0gKG5vZGUgYXMgdHMuRGVjb3JhdG9yIHwgdHMuQ2FsbEV4cHJlc3Npb24pLmV4cHJlc3Npb247XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIGRvIG5vdCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyB0eXBlIG9mIGRlY29yYXRvci5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBsZXQgZGVjU3ltID0gdHlwZUNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcbiAgaWYgKCFkZWNTeW0pIHJldHVybiBbXTtcbiAgaWYgKGRlY1N5bS5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLkFsaWFzKSB7XG4gICAgZGVjU3ltID0gdHlwZUNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbChkZWNTeW0pO1xuICB9XG4gIHJldHVybiBkZWNTeW0uZ2V0RGVjbGFyYXRpb25zKCkgfHwgW107XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIG5vZGUgaGFzIGFuIGV4cG9ydGluZyBkZWNvcmF0b3IgIChpLmUuLCBhIGRlY29yYXRvciB3aXRoIEBFeHBvcnREZWNvcmF0ZWRJdGVtc1xuICogaW4gaXRzIEpTRG9jKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0V4cG9ydGluZ0RlY29yYXRvcihub2RlOiB0cy5Ob2RlLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHtcbiAgcmV0dXJuIG5vZGUuZGVjb3JhdG9ycyAmJlxuICAgICAgbm9kZS5kZWNvcmF0b3JzLnNvbWUoZGVjb3JhdG9yID0+IGlzRXhwb3J0aW5nRGVjb3JhdG9yKGRlY29yYXRvciwgdHlwZUNoZWNrZXIpKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIGRlY29yYXRvciBoYXMgYW4gQEV4cG9ydERlY29yYXRlZEl0ZW1zIGRpcmVjdGl2ZSBpbiBpdHMgSlNEb2MuXG4gKi9cbmZ1bmN0aW9uIGlzRXhwb3J0aW5nRGVjb3JhdG9yKGRlY29yYXRvcjogdHMuRGVjb3JhdG9yLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIpIHtcbiAgcmV0dXJuIGdldERlY29yYXRvckRlY2xhcmF0aW9ucyhkZWNvcmF0b3IsIHR5cGVDaGVja2VyKS5zb21lKGRlY2xhcmF0aW9uID0+IHtcbiAgICBjb25zdCByYW5nZSA9IGdldEFsbExlYWRpbmdDb21tZW50cyhkZWNsYXJhdGlvbik7XG4gICAgaWYgKCFyYW5nZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHt0ZXh0fSBvZiByYW5nZSkge1xuICAgICAgaWYgKC9ARXhwb3J0RGVjb3JhdGVkSXRlbXNcXGIvLnRlc3QodGV4dCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfSk7XG59XG5cbi8qKlxuICogQSB0cmFuc2Zvcm0gcGFzcyB0aGF0IGFkZHMgZ29vZy5yZWZsZWN0Lm9iamVjdFByb3BlcnR5IGNhbGxzIHRvIHRoZSBwcm9wZXJ0eVxuICogbmFtZSBzdHJpbmcgbGl0ZXJhbHMgdGhhdCBhcmUgZW1pdHRlZCBhcyBwYXJ0IG9mIFR5cGVTY3JpcHQncyBkZWZhdWx0XG4gKiBkZWNvcmF0b3Igb3V0cHV0LlxuICpcbiAqIGdvb2cucmVmbGVjdC5vYmplY3RQcm9wZXJ0eSBpcyBhIHNwZWNpYWwgZnVuY3Rpb24gdGhhdCBpcyByZWNvZ25pemVkIGJ5XG4gKiBDbG9zdXJlIENvbXBpbGVyLiBJdCBpcyBjYWxsZWQgbGlrZSBnb29nLnJlZmxlY3Qub2JqZWN0UHJvcGVydHkoJ3Byb3AnLCBvYmopXG4gKiBhbmQgaXQgaXMgY29tcGlsZWQgdG8gYSBzdHJpbmcgbGl0ZXJhbCB0aGF0J3MgdGhlIHByb3BlcnR5IG5hbWVkICdwcm9wJyBvblxuICogdGhlIG9iaiB2YWx1ZS5cbiAqXG4gKiBUaGlzIHdheSwgcnVudGltZSBkZWNvcmF0b3JzIGNhbiB1c2UgdGhlIHByb3BlcnR5IG5hbWVzIChlLmcuIHRvIHJlZ2lzdGVyXG4gKiB0aGUgcHJvcGVydHkgYXMgYSBnZXR0ZXIvc2V0dGVyIHBhaXIpIHdoaWxlIHN0aWxsIGJlaW5nIGNvbXBhdGlibGUgd2l0aFxuICogQ2xvc3VyZSBDb21waWxlcidzIHByb3BlcnR5IHJlbmFtaW5nLlxuICpcbiAqIFRyYW5zZm9ybXM6XG4gKlxuICogICAgIHRzbGliXzEuX19kZWNvcmF0ZShbXG4gKiAgICAgICBkZWNvcmF0b3IsXG4gKiAgICAgICB0c2xpYl8xLl9fbWV0YWRhdGEoXCJkZXNpZ246dHlwZVwiLCBPYmplY3QpXG4gKiAgICAgXSwgRm9vLnByb3RvdHlwZSwgXCJwcm9wXCIsIHZvaWQgMCk7XG4gKlxuICogSW50bzpcbiAqXG4gKiAgICAgdHNsaWJfMS5fX2RlY29yYXRlKFtcbiAqICAgICAgICAgICBkZWNvcmF0b3IsXG4gKiAgICAgICAgICAgdHNsaWJfMS5fX21ldGFkYXRhKFwiZGVzaWduOnR5cGVcIiwgT2JqZWN0KVxuICogICAgICAgICBdLCBGb28ucHJvdG90eXBlLFxuICogICAgICAgICBfX2dvb2dSZWZsZWN0Lm9iamVjdFByb3BlcnR5KFwicHJvcFwiLCBGb28ucHJvdG90eXBlKSwgdm9pZCAwKTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybURlY29yYXRvcnNPdXRwdXRGb3JDbG9zdXJlUHJvcGVydHlSZW5hbWluZyhkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdKSB7XG4gIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiB7XG4gICAgY29uc3QgcmVzdWx0OiB0cy5UcmFuc2Zvcm1lcjx0cy5Tb3VyY2VGaWxlPiA9IChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB7XG4gICAgICBsZXQgbm9kZU5lZWRpbmdHb29nUmVmbGVjdDogdW5kZWZpbmVkfHRzLk5vZGUgPSB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB2aXNpdG9yOiB0cy5WaXNpdG9yID0gKG5vZGUpID0+IHtcbiAgICAgICAgY29uc3QgcmVwbGFjZW1lbnROb2RlID0gcmV3cml0ZURlY29yYXRvcihub2RlLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlcGxhY2VtZW50Tm9kZSkge1xuICAgICAgICAgIG5vZGVOZWVkaW5nR29vZ1JlZmxlY3QgPSBub2RlO1xuICAgICAgICAgIHJldHVybiByZXBsYWNlbWVudE5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIHZpc2l0b3IsIGNvbnRleHQpO1xuICAgICAgfTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRTb3VyY2VGaWxlID0gdHMudmlzaXROb2RlKHNvdXJjZUZpbGUsIHZpc2l0b3IpO1xuICAgICAgaWYgKG5vZGVOZWVkaW5nR29vZ1JlZmxlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnRzID0gWy4uLnVwZGF0ZWRTb3VyY2VGaWxlLnN0YXRlbWVudHNdO1xuICAgICAgICBjb25zdCBnb29nTW9kdWxlSW5kZXggPSBzdGF0ZW1lbnRzLmZpbmRJbmRleChpc0dvb2dNb2R1bGVTdGF0ZW1lbnQpO1xuICAgICAgICBpZiAoZ29vZ01vZHVsZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgIHJlcG9ydERpYWdub3N0aWMoXG4gICAgICAgICAgICAgIGRpYWdub3N0aWNzLCBub2RlTmVlZGluZ0dvb2dSZWZsZWN0LFxuICAgICAgICAgICAgICAnSW50ZXJuYWwgdHNpY2tsZSBlcnJvcjogY291bGQgbm90IGZpbmQgZ29vZy5tb2R1bGUgc3RhdGVtZW50IHRvIGltcG9ydCBfX3RzaWNrbGVfZ29vZ1JlZmxlY3QgZm9yIGRlY29yYXRvciBjb21waWxhdGlvbi4nKTtcbiAgICAgICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBnb29nUmVxdWlyZVJlZmxlY3RPYmplY3RQcm9wZXJ0eSA9IHRzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICAgICAgICAgICAgW3RzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgICAgICAgICdfX3RzaWNrbGVfZ29vZ1JlZmxlY3QnLCB1bmRlZmluZWQsXG5cbiAgICAgICAgICAgICAgICAgICAgdHMuY3JlYXRlQ2FsbChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIoJ2dvb2cnKSwgJ3JlcXVpcmUnKSwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgW3RzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoJ2dvb2cucmVmbGVjdCcpXSkpXSxcbiAgICAgICAgICAgICAgICB0cy5Ob2RlRmxhZ3MuQ29uc3QpKTtcbiAgICAgICAgLy8gVGhlIGJvaWxlcnBsYXRlIHdlIHByb2R1Y2UgaGFzIGEgZ29vZy5tb2R1bGUgbGluZSwgdGhlbiB0d28gcmVsYXRlZFxuICAgICAgICAvLyBsaW5lcyBkZWFsaW5nIHdpdGggdGhlIGBtb2R1bGVgIHZhcmlhYmxlLiBJbnNlcnQgb3VyIGdvb2cucmVxdWlyZVxuICAgICAgICAvLyBhZnRlciB0aGF0IHRvIGF2b2lkIHZpc3VhbGx5IGJyZWFraW5nIHVwIHRoZSBtb2R1bGUgaW5mbywgYW5kIHRvIGJlXG4gICAgICAgIC8vIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGdvb2cucmVxdWlyZSBzdGF0ZW1lbnRzLlxuICAgICAgICBzdGF0ZW1lbnRzLnNwbGljZShnb29nTW9kdWxlSW5kZXggKyAzLCAwLCBnb29nUmVxdWlyZVJlZmxlY3RPYmplY3RQcm9wZXJ0eSk7XG4gICAgICAgIHVwZGF0ZWRTb3VyY2VGaWxlLnN0YXRlbWVudHMgPVxuICAgICAgICAgICAgdHMuc2V0VGV4dFJhbmdlKHRzLmNyZWF0ZU5vZGVBcnJheShzdGF0ZW1lbnRzKSwgdXBkYXRlZFNvdXJjZUZpbGUuc3RhdGVtZW50cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdXBkYXRlZFNvdXJjZUZpbGU7XG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIElmIGBub2RlYCBpcyBhIGNhbGwgdG8gdGhlIHRzbGliIF9fZGVjb3JhdGUgZnVuY3Rpb24sIHRoaXMgcmV0dXJucyBhIG1vZGlmaWVkXG4gKiBjYWxsIHdpdGggdGhlIHN0cmluZyBhcmd1bWVudCByZXBsYWNlZCB3aXRoXG4gKiBgX190c2lja2xlX2dvb2dSZWZsZWN0Lm9iamVjdFByb3BlcnR5KCdwcm9wJywgVGhlQ2xhc3MucHJvdG90eXBlKWAuXG4gKlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm8gbW9kaWZpY2F0aW9uIGlzIG5lY2Vzc2FyeS5cbiAqL1xuZnVuY3Rpb24gcmV3cml0ZURlY29yYXRvcihub2RlOiB0cy5Ob2RlLCBjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpOiB0cy5Ob2RlfHVuZGVmaW5lZCB7XG4gIGlmICghdHMuaXNDYWxsRXhwcmVzc2lvbihub2RlKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBpZGVudGlmaWVyID0gbm9kZS5leHByZXNzaW9uO1xuICBpZiAoIXRzLmlzSWRlbnRpZmllcihpZGVudGlmaWVyKSB8fCBpZGVudGlmaWVyLnRleHQgIT09ICdfX2RlY29yYXRlJykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBhcmdzID0gWy4uLm5vZGUuYXJndW1lbnRzXTtcbiAgaWYgKGFyZ3MubGVuZ3RoICE9PSA0KSB7XG4gICAgLy8gU29tZSBkZWNvcmF0b3JzLCBsaWtlIGNsYXNzIGRlY29yYXRvcnMsIGhhdmUgZmV3ZXIgYXJndW1lbnRzLCBhbmQgZG9uJ3RcbiAgICAvLyBuZWVkIGhlbHAgdG8gYmUgcmVuYW1pbmctc2FmZS5cbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgdW50eXBlZEZpZWxkTmFtZUxpdGVyYWwgPSBhcmdzWzJdO1xuICBpZiAoIXRzLmlzU3RyaW5nTGl0ZXJhbCh1bnR5cGVkRmllbGROYW1lTGl0ZXJhbCkpIHtcbiAgICAvLyBUaGlzIGlzIGFsbG93ZWQsIGZvciBleGFtcGxlOlxuICAgIC8vXG4gICAgLy8gICAgIGNvbnN0IHByb3AgPSBTeW1ib2woKTtcbiAgICAvLyAgICAgY2xhc3MgRm9vIHtcbiAgICAvLyAgICAgICBAZGVjb3JhdGUgW3Byb3BdID0gJ3ZhbCc7XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vIE5vdGhpbmcgZm9yIHVzIHRvIGRvIGluIHRoYXQgY2FzZS5cbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgZmllbGROYW1lTGl0ZXJhbCA9IHVudHlwZWRGaWVsZE5hbWVMaXRlcmFsO1xuICBhcmdzWzJdID0gdHMuY3JlYXRlQ2FsbChcbiAgICAgIHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIoJ19fdHNpY2tsZV9nb29nUmVmbGVjdCcpLCAnb2JqZWN0UHJvcGVydHknKSxcbiAgICAgIHVuZGVmaW5lZCwgW3RzLmNyZWF0ZVN0cmluZ0xpdGVyYWwoZmllbGROYW1lTGl0ZXJhbC50ZXh0KSwgdHMuZ2V0TXV0YWJsZUNsb25lKGFyZ3NbMV0pXSk7XG4gIHJldHVybiB0cy51cGRhdGVDYWxsKG5vZGUsIG5vZGUuZXhwcmVzc2lvbiwgbm9kZS50eXBlQXJndW1lbnRzLCBhcmdzKTtcbn1cblxuZnVuY3Rpb24gaXNHb29nTW9kdWxlU3RhdGVtZW50KHN0YXRlbWVudDogdHMuTm9kZSkge1xuICBpZiAoIXRzLmlzRXhwcmVzc2lvblN0YXRlbWVudChzdGF0ZW1lbnQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGV4cHIgPSBzdGF0ZW1lbnQuZXhwcmVzc2lvbjtcbiAgaWYgKCF0cy5pc0NhbGxFeHByZXNzaW9uKGV4cHIpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghdHMuaXNQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24oZXhwci5leHByZXNzaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBnb29nID0gZXhwci5leHByZXNzaW9uLmV4cHJlc3Npb247XG4gIGlmICghdHMuaXNJZGVudGlmaWVyKGdvb2cpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBnb29nLnRleHQgPT09ICdnb29nJyAmJiBleHByLmV4cHJlc3Npb24ubmFtZS50ZXh0ID09PSAnbW9kdWxlJztcbn1cbiJdfQ==

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.enumTransformer = exports.getEnumType = void 0;
/**

@@ -223,2 +224,2 @@ * @fileoverview Transforms TypeScript enum declarations to Closure enum declarations, which

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bV90cmFuc2Zvcm1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbnVtX3RyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUg7Ozs7Ozs7Ozs7O09BV0c7SUFFSCxpQ0FBaUM7SUFFakMsbUVBQWlIO0lBRWpILGdHQUFnRztJQUNoRyxTQUFTLGFBQWEsQ0FBQyxJQUFhO1FBQ2xDLGdHQUFnRztRQUNoRyx1QkFBdUI7UUFDdkIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDN0MsT0FBTyxNQUFNLEVBQUU7WUFDYixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsRUFBRTtnQkFDbkQsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1NBQ3hCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxTQUFTLGlCQUFpQixDQUFDLFdBQTJCLEVBQUUsTUFBcUI7UUFDM0UseURBQXlEO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFO1lBQ3ZCLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO1FBQ0QsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvRCwrRUFBK0U7UUFDL0UsZUFBZTtRQUNmLDRDQUE0QztRQUM1QyxNQUFNO1FBQ04sa0RBQWtEO1FBQ2xELElBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRTtZQUN4QyxPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELHFEQUFxRDtRQUNyRCxpRUFBaUU7UUFDakUsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQWdCLFdBQVcsQ0FBQyxXQUEyQixFQUFFLFFBQTRCO1FBRW5GLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwRCxJQUFJLElBQUksS0FBSyxRQUFRLEVBQUU7Z0JBQ3JCLFNBQVMsR0FBRyxJQUFJLENBQUM7YUFDbEI7aUJBQU0sSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUM1QixTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ2xCO1NBQ0Y7UUFDRCxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7WUFDMUIsT0FBTyxHQUFHLENBQUMsQ0FBRSxnRUFBZ0U7U0FDOUU7YUFBTSxJQUFJLFNBQVMsRUFBRTtZQUNwQixPQUFPLFFBQVEsQ0FBQztTQUNqQjthQUFNLElBQUksU0FBUyxFQUFFO1lBQ3BCLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO2FBQU07WUFDTCx5QkFBeUI7WUFDekIsT0FBTyxHQUFHLENBQUM7U0FDWjtJQUNILENBQUM7SUF0QkQsa0NBc0JDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixlQUFlLENBQUMsV0FBMkIsRUFBRSxXQUE0QjtRQUV2RixPQUFPLENBQUMsT0FBaUMsRUFBRSxFQUFFO1lBQzNDLFNBQVMsT0FBTyxDQUFvQixJQUFPO2dCQUN6QyxJQUFJLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztvQkFBRSxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFbEYsMkZBQTJGO2dCQUMzRixvRkFBb0Y7Z0JBQ3BGLDBGQUEwRjtnQkFDMUYsdUNBQXVDO2dCQUN2QyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUM7b0JBQUUsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBRTFFLDhGQUE4RjtnQkFDOUYsZ0VBQWdFO2dCQUNoRSxJQUFJLDRCQUFTLENBQUMsSUFBSSxDQUFDO29CQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUV0RSxNQUFNLFVBQVUsR0FBRyxrQ0FBZSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNsRSxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUVoRCxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLFNBQVMsR0FBRyxDQUFDLENBQUM7Z0JBQ2xCLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDakMsSUFBSSxTQUF3QixDQUFDO29CQUM3QixJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7d0JBQ3RCLE1BQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUQsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUU7NEJBQ3RDLFNBQVMsR0FBRyxjQUFjLEdBQUcsQ0FBQyxDQUFDOzRCQUMvQixTQUFTLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQzt5QkFDOUM7NkJBQU0sSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUU7NEJBQzdDLHFGQUFxRjs0QkFDckYsb0ZBQW9GOzRCQUNwRixvRkFBb0Y7NEJBQ3BGLHFGQUFxRjs0QkFDckYsNENBQTRDOzRCQUM1QyxTQUFTLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQzt5QkFDOUM7NkJBQU07NEJBQ0wsb0RBQW9EOzRCQUNwRCwwQ0FBMEM7NEJBQzFDLGlFQUFpRTs0QkFDakUsNkNBQTZDOzRCQUM3QyxlQUFlOzRCQUNmLGNBQWM7NEJBQ2QscUNBQXFDOzRCQUNyQyxNQUFNOzRCQUNOLG9FQUFvRTs0QkFDcEUsb0VBQW9FOzRCQUNwRSwyQ0FBMkM7NEJBQzNDLGtFQUFrRTs0QkFDbEUsaUJBQWlCOzRCQUNqQiwyQkFBMkI7NEJBQzNCLG1FQUFtRTs0QkFDbkUsb0RBQW9EOzRCQUNwRCxTQUFTLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQWtCLENBQUM7eUJBQzFEO3FCQUNGO3lCQUFNO3dCQUNMLFNBQVMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO3dCQUN4QyxTQUFTLEVBQUUsQ0FBQztxQkFDYjtvQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQzFCLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDNUY7Z0JBRUQsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLHlCQUF5QixDQUN4QyxJQUFJLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQy9CLEVBQUUsQ0FBQyxtQkFBbUIsQ0FDbEIsRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDaEYsTUFBTSxXQUFXLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FDbEMsRUFBRSxDQUFDLFlBQVksQ0FDWCxFQUFFLENBQUMsdUJBQXVCO2dCQUN0QixlQUFlLENBQUMsU0FBUyxFQUN6QixFQUFFLENBQUMsNkJBQTZCLENBQzVCLENBQUMsT0FBTyxDQUFDO2dCQUNULHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDckQsSUFBSSxDQUFDLEVBQ1QsSUFBSSxDQUFDLENBQUM7Z0JBQ1YsTUFBTSxPQUFPLEdBQTBCO29CQUNyQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0I7b0JBQzFDLElBQUksRUFBRSxZQUFZLFFBQVEsSUFBSTtvQkFDOUIsa0JBQWtCLEVBQUUsSUFBSTtvQkFDeEIsR0FBRyxFQUFFLENBQUMsQ0FBQztvQkFDUCxHQUFHLEVBQUUsQ0FBQyxDQUFDO2lCQUNSLENBQUM7Z0JBQ0YsRUFBRSxDQUFDLDJCQUEyQixDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBRXZELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLE1BQU0sV0FBVyxHQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQzdDLElBQUksVUFBVSxFQUFFO29CQUNkLHVGQUF1RjtvQkFDdkYsb0NBQW9DO29CQUNwQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FDdkMsU0FBUyxFQUFFLFNBQVMsRUFDcEIsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxDQUFDLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMxRTtnQkFFRCxJQUFJLGtDQUFlLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEVBQUU7b0JBQ2pELHVFQUF1RTtvQkFDdkUsMkZBQTJGO29CQUMzRix5RkFBeUY7b0JBQ3pGLGtCQUFrQjtvQkFDbEIsT0FBTyxXQUFXLENBQUM7aUJBQ3BCO2dCQUVELGtGQUFrRjtnQkFDbEYsS0FBSyxNQUFNLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNqQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO29CQUMvQixNQUFNLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBQzFELHNFQUFzRTtvQkFDdEUsbUNBQW1DO29CQUNuQyxJQUFJLFVBQVUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUNqRSxTQUFTO3FCQUNWO29CQUVELHFFQUFxRTtvQkFDckUseUVBQXlFO29CQUN6RSxJQUFJLFFBQXVCLENBQUM7b0JBQzVCLElBQUksWUFBMkIsQ0FBQztvQkFDaEMsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUMvQix3QkFBd0I7d0JBQ3hCLFFBQVEsR0FBRyxpREFBOEIsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzNELHFGQUFxRjt3QkFDckYsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUFDLG9DQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7d0JBQ2pFLFlBQVksR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO3FCQUMxRTt5QkFBTTt3QkFDTCxxRUFBcUU7d0JBQ3JFLFFBQVEsR0FBRyxFQUFFLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQzt3QkFDdEYsWUFBWSxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7cUJBQzVFO29CQUNELFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQ25ELEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNsRjtnQkFDRCxPQUFPLFdBQVcsQ0FBQztZQUNyQixDQUFDO1lBRUQsT0FBTyxDQUFDLEVBQWlCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQWtCLENBQUM7UUFDN0QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQXZJRCwwQ0F1SUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogQGZpbGVvdmVydmlldyBUcmFuc2Zvcm1zIFR5cGVTY3JpcHQgZW51bSBkZWNsYXJhdGlvbnMgdG8gQ2xvc3VyZSBlbnVtIGRlY2xhcmF0aW9ucywgd2hpY2hcbiAqIGxvb2sgbGlrZTpcbiAqXG4gKiAgICAgLy4uIEBlbnVtIHtudW1iZXJ9IC4vXG4gKiAgICAgY29uc3QgRm9vID0ge0JBUjogMCwgQkFaOiAxLCAuLi59O1xuICogICAgIGV4cG9ydCB7Rm9vfTsgIC8vIGV2ZW4gaWYgb3JpZ2luYWxseSBleHBvcnRlZCBvbiBvbmUgbGluZS5cbiAqXG4gKiBUaGlzIGRlY2xhcmVzIGFuIGVudW0gdHlwZSBmb3IgQ2xvc3VyZSBDb21waWxlciAoYW5kIENsb3N1cmUgSlMgdXNlcnMgb2YgdGhpcyBUUyBjb2RlKS5cbiAqIFNwbGl0dGluZyB0aGUgZW51bSBpbnRvIGRlY2xhcmF0aW9uIGFuZCBleHBvcnQgaXMgcmVxdWlyZWQgc28gdGhhdCBsb2NhbCByZWZlcmVuY2VzIHRvIHRoZVxuICogdHlwZSByZXNvbHZlIChcIkB0eXBlIHtGb299XCIpLlxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge2NyZWF0ZVNpbmdsZVF1b3RlU3RyaW5nTGl0ZXJhbCwgZ2V0SWRlbnRpZmllclRleHQsIGhhc01vZGlmaWVyRmxhZywgaXNBbWJpZW50fSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuXG4vKiogaXNJbk5hbWVzcGFjZSByZXR1cm5zIHRydWUgaWYgYW55IG9mIG5vZGUncyBhbmNlc3RvcnMgaXMgYSBuYW1lc3BhY2UgKE1vZHVsZURlY2xhcmF0aW9uKS4gKi9cbmZ1bmN0aW9uIGlzSW5OYW1lc3BhY2Uobm9kZTogdHMuTm9kZSkge1xuICAvLyBNdXN0IHVzZSB0aGUgb3JpZ2luYWwgbm9kZSBiZWNhdXNlIG5vZGUgbWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gdHJhbnNmb3JtZWQsIHdpdGggbm9kZS5wYXJlbnRcbiAgLy8gbm8gbG9uZ2VyIGJlaW5nIHNldC5cbiAgbGV0IHBhcmVudCA9IHRzLmdldE9yaWdpbmFsTm9kZShub2RlKS5wYXJlbnQ7XG4gIHdoaWxlIChwYXJlbnQpIHtcbiAgICBpZiAocGFyZW50LmtpbmQgPT09IHRzLlN5bnRheEtpbmQuTW9kdWxlRGVjbGFyYXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBnZXRFbnVtTWVtYmVyVHlwZSBjb21wdXRlcyB0aGUgdHlwZSBvZiBhbiBlbnVtIG1lbWJlciBieSBpbnNwZWN0aW5nIGl0cyBpbml0aWFsaXplciBleHByZXNzaW9uLlxuICovXG5mdW5jdGlvbiBnZXRFbnVtTWVtYmVyVHlwZSh0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIG1lbWJlcjogdHMuRW51bU1lbWJlcik6ICdudW1iZXInfCdzdHJpbmcnIHtcbiAgLy8gRW51bSBtZW1iZXJzIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24gaGF2ZSB0eXBlICdudW1iZXInXG4gIGlmICghbWVtYmVyLmluaXRpYWxpemVyKSB7XG4gICAgcmV0dXJuICdudW1iZXInO1xuICB9XG4gIGNvbnN0IHR5cGUgPSB0eXBlQ2hlY2tlci5nZXRUeXBlQXRMb2NhdGlvbihtZW1iZXIuaW5pdGlhbGl6ZXIpO1xuICAvLyBOb3RlOiBjaGVja2luZyBhZ2FpbnN0ICdOdW1iZXJMaWtlJyBpbnN0ZWFkIG9mIGp1c3QgJ051bWJlcicgbWVhbnMgdGhpcyBjb2RlXG4gIC8vIGhhbmRsZXMgYm90aFxuICAvLyAgIE1FTUJFUiA9IDMsICAvLyBUeXBlRmxhZ3MuTnVtYmVyTGl0ZXJhbFxuICAvLyBhbmRcbiAgLy8gICBNRU1CRVIgPSBzb21lRnVuY3Rpb24oKSwgIC8vIFR5cGVGbGFncy5OdW1iZXJcbiAgaWYgKHR5cGUuZmxhZ3MgJiB0cy5UeXBlRmxhZ3MuTnVtYmVyTGlrZSkge1xuICAgIHJldHVybiAnbnVtYmVyJztcbiAgfVxuICAvLyBJZiB0aGUgdmFsdWUgaXMgbm90IGEgbnVtYmVyLCBpdCBtdXN0IGJlIGEgc3RyaW5nLlxuICAvLyBUeXBlU2NyaXB0IGRvZXMgbm90IGFsbG93IGVudW0gbWVtYmVycyB0byBoYXZlIGFueSBvdGhlciB0eXBlLlxuICByZXR1cm4gJ3N0cmluZyc7XG59XG5cbi8qKlxuICogZ2V0RW51bVR5cGUgY29tcHV0ZXMgdGhlIENsb3N1cmUgdHlwZSBvZiBhbiBlbnVtLCBieSBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgbWVtYmVycyBhbmQgZ2F0aGVyaW5nXG4gKiB0aGVpciB0eXBlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1UeXBlKHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgZW51bURlY2w6IHRzLkVudW1EZWNsYXJhdGlvbik6ICdudW1iZXInfFxuICAgICdzdHJpbmcnfCc/JyB7XG4gIGxldCBoYXNOdW1iZXIgPSBmYWxzZTtcbiAgbGV0IGhhc1N0cmluZyA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IG1lbWJlciBvZiBlbnVtRGVjbC5tZW1iZXJzKSB7XG4gICAgY29uc3QgdHlwZSA9IGdldEVudW1NZW1iZXJUeXBlKHR5cGVDaGVja2VyLCBtZW1iZXIpO1xuICAgIGlmICh0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgaGFzU3RyaW5nID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBoYXNOdW1iZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBpZiAoaGFzTnVtYmVyICYmIGhhc1N0cmluZykge1xuICAgIHJldHVybiAnPyc7ICAvLyBDbG9zdXJlJ3MgbmV3IHR5cGUgaW5mZXJlbmNlIGRvZXNuJ3Qgc3VwcG9ydCBlbnVtcyBvZiB1bmlvbnMuXG4gIH0gZWxzZSBpZiAoaGFzTnVtYmVyKSB7XG4gICAgcmV0dXJuICdudW1iZXInO1xuICB9IGVsc2UgaWYgKGhhc1N0cmluZykge1xuICAgIHJldHVybiAnc3RyaW5nJztcbiAgfSBlbHNlIHtcbiAgICAvLyBQZXJoYXBzIGFuIGVtcHR5IGVudW0/XG4gICAgcmV0dXJuICc/JztcbiAgfVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybWVyIGZhY3RvcnkgZm9yIHRoZSBlbnVtIHRyYW5zZm9ybWVyLiBTZWUgZmlsZW92ZXJ2aWV3IGZvciBkZXRhaWxzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW51bVRyYW5zZm9ybWVyKHR5cGVDaGVja2VyOiB0cy5UeXBlQ2hlY2tlciwgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSk6XG4gICAgKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4gdHMuVHJhbnNmb3JtZXI8dHMuU291cmNlRmlsZT4ge1xuICByZXR1cm4gKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIGZ1bmN0aW9uIHZpc2l0b3I8VCBleHRlbmRzIHRzLk5vZGU+KG5vZGU6IFQpOiBUfHRzLk5vZGVbXSB7XG4gICAgICBpZiAoIXRzLmlzRW51bURlY2xhcmF0aW9uKG5vZGUpKSByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG5cbiAgICAgIC8vIFRPRE8obWFydGlucHJvYnN0KTogVGhlIGVudW0gdHJhbnNmb3JtZXIgZG9lcyBub3Qgd29yayBmb3IgZW51bXMgZW1iZWRkZWQgaW4gbmFtZXNwYWNlcyxcbiAgICAgIC8vIGJlY2F1c2UgVFMgZG9lcyBub3Qgc3VwcG9ydCBzcGxpdHRpbmcgZXhwb3J0IGFuZCBkZWNsYXJhdGlvbiAoXCJleHBvcnQge0Zvb307XCIpIGluXG4gICAgICAvLyBuYW1lc3BhY2VzLiB0c2lja2xlJ3MgZW1pdCBmb3IgbmFtZXNwYWNlcyBpcyB1bmludGVsbGlnaWJsZSBmb3IgQ2xvc3VyZSBpbiBhbnkgY2FzZSwgc29cbiAgICAgIC8vIHRoaXMgaXMgbGVmdCB0byBmaXggZm9yIGFub3RoZXIgZGF5LlxuICAgICAgaWYgKGlzSW5OYW1lc3BhY2Uobm9kZSkpIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdG9yLCBjb250ZXh0KTtcblxuICAgICAgLy8gVHlwZVNjcmlwdCBkb2VzIG5vdCBlbWl0IGFueSBjb2RlIGZvciBhbWJpZW50IGVudW1zLCBzbyBlYXJseSBleGl0IGhlcmUgdG8gcHJldmVudCB0aGUgY29kZVxuICAgICAgLy8gYmVsb3cgZnJvbSBwcm9kdWNpbmcgcnVudGltZSB2YWx1ZXMgZm9yIGFuIGFtYmllbnQgc3RydWN0dXJlLlxuICAgICAgaWYgKGlzQW1iaWVudChub2RlKSkgcmV0dXJuIHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIHZpc2l0b3IsIGNvbnRleHQpO1xuXG4gICAgICBjb25zdCBpc0V4cG9ydGVkID0gaGFzTW9kaWZpZXJGbGFnKG5vZGUsIHRzLk1vZGlmaWVyRmxhZ3MuRXhwb3J0KTtcbiAgICAgIGNvbnN0IGVudW1UeXBlID0gZ2V0RW51bVR5cGUodHlwZUNoZWNrZXIsIG5vZGUpO1xuXG4gICAgICBjb25zdCB2YWx1ZXM6IHRzLlByb3BlcnR5QXNzaWdubWVudFtdID0gW107XG4gICAgICBsZXQgZW51bUluZGV4ID0gMDtcbiAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIG5vZGUubWVtYmVycykge1xuICAgICAgICBsZXQgZW51bVZhbHVlOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBpZiAobWVtYmVyLmluaXRpYWxpemVyKSB7XG4gICAgICAgICAgY29uc3QgZW51bUNvbnN0VmFsdWUgPSB0eXBlQ2hlY2tlci5nZXRDb25zdGFudFZhbHVlKG1lbWJlcik7XG4gICAgICAgICAgaWYgKHR5cGVvZiBlbnVtQ29uc3RWYWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGVudW1JbmRleCA9IGVudW1Db25zdFZhbHVlICsgMTtcbiAgICAgICAgICAgIGVudW1WYWx1ZSA9IHRzLmNyZWF0ZUxpdGVyYWwoZW51bUNvbnN0VmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVudW1Db25zdFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgLy8gdHNpY2tsZSBkb2VzIG5vdCBjYXJlIGFib3V0IHN0cmluZyBlbnVtIHZhbHVlcy4gSG93ZXZlciBUeXBlU2NyaXB0IGV4cGVjdHMgY29tcGlsZVxuICAgICAgICAgICAgLy8gdGltZSBjb25zdGFudCBlbnVtIHZhbHVlcyB0byBiZSByZXBsYWNlZCB3aXRoIHRoZWlyIGNvbnN0YW50IGV4cHJlc3Npb24sIGFuZCBlLmcuXG4gICAgICAgICAgICAvLyBkb2Vzbid0IGVtaXQgaW1wb3J0cyBmb3IgbW9kdWxlcyByZWZlcmVuY2VkIGluIHRoZW0uIEJlY2F1c2UgdHNpY2tsZSByZXBsYWNlcyB0aGVcbiAgICAgICAgICAgIC8vIGVudW0gd2l0aCBhbiBvYmplY3QgbGl0ZXJhbCwgaS5lLiBoYW5kbGVzIHRoZSBlbnVtIHRyYW5zZm9ybSwgaXQgbXVzdCB0aHVzIGFsc28gZG9cbiAgICAgICAgICAgIC8vIHRoZSBjb25zdCB2YWx1ZSBzdWJzdGl0dXRpb24gZm9yIHN0cmluZ3MuXG4gICAgICAgICAgICBlbnVtVmFsdWUgPSB0cy5jcmVhdGVMaXRlcmFsKGVudW1Db25zdFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gTm9uLW51bWVyaWMgZW51bSB2YWx1ZSAoc3RyaW5nIG9yIGFuIGV4cHJlc3Npb24pLlxuICAgICAgICAgICAgLy8gRW1pdCB0aGlzIGluaXRpYWxpemVyIGV4cHJlc3Npb24gYXMtaXMuXG4gICAgICAgICAgICAvLyBOb3RlOiBpZiB0aGUgbWVtYmVyJ3MgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiByZWZlcnMgdG8gYW5vdGhlclxuICAgICAgICAgICAgLy8gdmFsdWUgd2l0aGluIHRoZSBlbnVtIChlLmcuIHNvbWV0aGluZyBsaWtlXG4gICAgICAgICAgICAvLyAgIGVudW0gRm9vIHtcbiAgICAgICAgICAgIC8vICAgICBGaWVsZDEsXG4gICAgICAgICAgICAvLyAgICAgRmllbGQyID0gRmllbGQxICsgc29tZXRoaW5nKCksXG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIFRoZW4gd2hlbiB3ZSBlbWl0IHRoZSBpbml0aWFsaXplciB3ZSBwcm9kdWNlIGludmFsaWQgY29kZSBiZWNhdXNlXG4gICAgICAgICAgICAvLyBvbiB0aGUgQ2xvc3VyZSBzaWRlIHRoZSByZWZlcmVuY2UgdG8gRmllbGQxIGhhcyB0byBiZSBuYW1lc3BhY2VkLFxuICAgICAgICAgICAgLy8gZS5nLiB3cml0dGVuIFwiRm9vLkZpZWxkMSArIHNvbWV0aGluZygpXCIuXG4gICAgICAgICAgICAvLyBIb3BlZnVsbHkgdGhpcyBkb2Vzbid0IGNvbWUgdXAgb2Z0ZW4gLS0gaWYgdGhlIGVudW0gaW5zdGVhZCBoYXNcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBsaWtlXG4gICAgICAgICAgICAvLyAgICAgRmllbGQyID0gRmllbGQxICsgMyxcbiAgICAgICAgICAgIC8vIHRoZW4gaXQncyBzdGlsbCBhIGNvbnN0YW50IGV4cHJlc3Npb24gYW5kIHdlIGlubGluZSB0aGUgY29uc3RhbnRcbiAgICAgICAgICAgIC8vIHZhbHVlIGluIHRoZSBhYm92ZSBicmFuY2ggb2YgdGhpcyBcImlmXCIgc3RhdGVtZW50LlxuICAgICAgICAgICAgZW51bVZhbHVlID0gdmlzaXRvcihtZW1iZXIuaW5pdGlhbGl6ZXIpIGFzIHRzLkV4cHJlc3Npb247XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudW1WYWx1ZSA9IHRzLmNyZWF0ZUxpdGVyYWwoZW51bUluZGV4KTtcbiAgICAgICAgICBlbnVtSW5kZXgrKztcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZXMucHVzaCh0cy5zZXRPcmlnaW5hbE5vZGUoXG4gICAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UodHMuY3JlYXRlUHJvcGVydHlBc3NpZ25tZW50KG1lbWJlci5uYW1lLCBlbnVtVmFsdWUpLCBtZW1iZXIpLCBtZW1iZXIpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFyRGVjbCA9IHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb24oXG4gICAgICAgICAgbm9kZS5uYW1lLCAvKiB0eXBlICovIHVuZGVmaW5lZCxcbiAgICAgICAgICB0cy5jcmVhdGVPYmplY3RMaXRlcmFsKFxuICAgICAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UodHMuY3JlYXRlTm9kZUFycmF5KHZhbHVlcywgdHJ1ZSksIG5vZGUubWVtYmVycyksIHRydWUpKTtcbiAgICAgIGNvbnN0IHZhckRlY2xTdG10ID0gdHMuc2V0T3JpZ2luYWxOb2RlKFxuICAgICAgICAgIHRzLnNldFRleHRSYW5nZShcbiAgICAgICAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVTdGF0ZW1lbnQoXG4gICAgICAgICAgICAgICAgICAvKiBtb2RpZmllcnMgKi8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgdHMuY3JlYXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhckRlY2xdLFxuICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBhIGNvbnN0IHZhciAqLyB0cy5Ob2RlRmxhZ3MuQ29uc3QpKSxcbiAgICAgICAgICAgICAgbm9kZSksXG4gICAgICAgICAgbm9kZSk7XG4gICAgICBjb25zdCBjb21tZW50OiB0cy5TeW50aGVzaXplZENvbW1lbnQgPSB7XG4gICAgICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICAgICAgdGV4dDogYCogQGVudW0geyR7ZW51bVR5cGV9fSBgLFxuICAgICAgICBoYXNUcmFpbGluZ05ld0xpbmU6IHRydWUsXG4gICAgICAgIHBvczogLTEsXG4gICAgICAgIGVuZDogLTFcbiAgICAgIH07XG4gICAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHModmFyRGVjbFN0bXQsIFtjb21tZW50XSk7XG5cbiAgICAgIGNvbnN0IG5hbWUgPSBub2RlLm5hbWUuZ2V0VGV4dCgpO1xuICAgICAgY29uc3QgcmVzdWx0Tm9kZXM6IHRzLk5vZGVbXSA9IFt2YXJEZWNsU3RtdF07XG4gICAgICBpZiAoaXNFeHBvcnRlZCkge1xuICAgICAgICAvLyBDcmVhdGUgYSBzZXBhcmF0ZSBleHBvcnQgey4uLn0gc3RhdGVtZW50LCBzbyB0aGF0IHRoZSBlbnVtIG5hbWUgY2FuIGJlIHVzZWQgaW4gbG9jYWxcbiAgICAgICAgLy8gdHlwZSBhbm5vdGF0aW9ucyB3aXRoaW4gdGhlIGZpbGUuXG4gICAgICAgIHJlc3VsdE5vZGVzLnB1c2godHMuY3JlYXRlRXhwb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICB1bmRlZmluZWQsIHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRzLmNyZWF0ZU5hbWVkRXhwb3J0cyhbdHMuY3JlYXRlRXhwb3J0U3BlY2lmaWVyKHVuZGVmaW5lZCwgbmFtZSldKSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzTW9kaWZpZXJGbGFnKG5vZGUsIHRzLk1vZGlmaWVyRmxhZ3MuQ29uc3QpKSB7XG4gICAgICAgIC8vIEJ5IFR5cGVTY3JpcHQgc2VtYW50aWNzLCBjb25zdCBlbnVtcyBkaXNhcHBlYXIgYWZ0ZXIgVFMgY29tcGlsYXRpb24uXG4gICAgICAgIC8vIFdlIHN0aWxsIG5lZWQgdG8gZ2VuZXJhdGUgdGhlIHJ1bnRpbWUgdmFsdWUgYWJvdmUgdG8gbWFrZSBDbG9zdXJlIENvbXBpbGVyJ3MgdHlwZSBzeXN0ZW1cbiAgICAgICAgLy8gaGFwcHkgYW5kIGFsbG93IHJlZmVyaW5nIHRvIGVudW1zIGZyb20gSlMgY29kZSwgYnV0IHdlIHNob3VsZCBhdCBsZWFzdCBub3QgZW1pdCBzdHJpbmdcbiAgICAgICAgLy8gdmFsdWUgbWFwcGluZ3MuXG4gICAgICAgIHJldHVybiByZXN1bHROb2RlcztcbiAgICAgIH1cblxuICAgICAgLy8gRW1pdCB0aGUgcmV2ZXJzZSBtYXBwaW5nIG9mIGZvb1tmb28uQkFSXSA9ICdCQVInOyBsaW5lcyBmb3IgbnVtYmVyIGVudW0gbWVtYmVyc1xuICAgICAgZm9yIChjb25zdCBtZW1iZXIgb2Ygbm9kZS5tZW1iZXJzKSB7XG4gICAgICAgIGNvbnN0IG1lbWJlck5hbWUgPSBtZW1iZXIubmFtZTtcbiAgICAgICAgY29uc3QgbWVtYmVyVHlwZSA9IGdldEVudW1NZW1iZXJUeXBlKHR5cGVDaGVja2VyLCBtZW1iZXIpO1xuICAgICAgICAvLyBFbnVtIG1lbWJlcnMgY2Fubm90IGJlIG5hbWVkIHdpdGggYSBwcml2YXRlIGlkZW50aWZpZXIsIGFsdGhvdWdoIGl0XG4gICAgICAgIC8vIGlzIHRlY2huaWNhbGx5IHZhbGlkIGluIHRoZSBBU1QuXG4gICAgICAgIGlmIChtZW1iZXJUeXBlICE9PSAnbnVtYmVyJyB8fCB0cy5pc1ByaXZhdGVJZGVudGlmaWVyKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUeXBlU2NyaXB0IGVudW0gbWVtYmVycyBjYW4gaGF2ZSBJZGVudGlmaWVyIG5hbWVzIG9yIFN0cmluZyBuYW1lcy5cbiAgICAgICAgLy8gV2UgbmVlZCB0byBlbWl0IHNsaWdodGx5IGRpZmZlcmVudCBjb2RlIHRvIHN1cHBvcnQgdGhlc2UgdHdvIHN5bnRheGVzOlxuICAgICAgICBsZXQgbmFtZUV4cHI6IHRzLkV4cHJlc3Npb247XG4gICAgICAgIGxldCBtZW1iZXJBY2Nlc3M6IHRzLkV4cHJlc3Npb247XG4gICAgICAgIGlmICh0cy5pc0lkZW50aWZpZXIobWVtYmVyTmFtZSkpIHtcbiAgICAgICAgICAvLyBGb29bRm9vLkFCQ10gPSBcIkFCQ1wiO1xuICAgICAgICAgIG5hbWVFeHByID0gY3JlYXRlU2luZ2xlUXVvdGVTdHJpbmdMaXRlcmFsKG1lbWJlck5hbWUudGV4dCk7XG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIGNyZWF0ZSBhIGNsZWFuLCBuZXcgaWRlbnRpZmllciwgc28gY29tbWVudHMgZG8gbm90IGdldCBlbWl0dGVkIHR3aWNlLlxuICAgICAgICAgIGNvbnN0IGlkZW50ID0gdHMuY3JlYXRlSWRlbnRpZmllcihnZXRJZGVudGlmaWVyVGV4dChtZW1iZXJOYW1lKSk7XG4gICAgICAgICAgbWVtYmVyQWNjZXNzID0gdHMuY3JlYXRlUHJvcGVydHlBY2Nlc3ModHMuY3JlYXRlSWRlbnRpZmllcihuYW1lKSwgaWRlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZvb1tGb29bXCJBIEIgQ1wiXV0gPSBcIkEgQiBDXCI7IG9yIEZvb1tGb29bZXhwcmVzc2lvbl1dID0gZXhwcmVzc2lvbjtcbiAgICAgICAgICBuYW1lRXhwciA9IHRzLmlzQ29tcHV0ZWRQcm9wZXJ0eU5hbWUobWVtYmVyTmFtZSkgPyBtZW1iZXJOYW1lLmV4cHJlc3Npb24gOiBtZW1iZXJOYW1lO1xuICAgICAgICAgIG1lbWJlckFjY2VzcyA9IHRzLmNyZWF0ZUVsZW1lbnRBY2Nlc3ModHMuY3JlYXRlSWRlbnRpZmllcihuYW1lKSwgbmFtZUV4cHIpO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdE5vZGVzLnB1c2godHMuY3JlYXRlU3RhdGVtZW50KHRzLmNyZWF0ZUFzc2lnbm1lbnQoXG4gICAgICAgICAgICB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIobmFtZSksIG1lbWJlckFjY2VzcyksIG5hbWVFeHByKSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdE5vZGVzO1xuICAgIH1cblxuICAgIHJldHVybiAoc2Y6IHRzLlNvdXJjZUZpbGUpID0+IHZpc2l0b3Ioc2YpIGFzIHRzLlNvdXJjZUZpbGU7XG4gIH07XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bV90cmFuc2Zvcm1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9lbnVtX3RyYW5zZm9ybWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7Ozs7OztPQVdHO0lBRUgsaUNBQWlDO0lBRWpDLG1FQUFpSDtJQUVqSCxnR0FBZ0c7SUFDaEcsU0FBUyxhQUFhLENBQUMsSUFBYTtRQUNsQyxnR0FBZ0c7UUFDaEcsdUJBQXVCO1FBQ3ZCLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdDLE9BQU8sTUFBTSxFQUFFO1lBQ2IsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ25ELE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztTQUN4QjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxXQUEyQixFQUFFLE1BQXFCO1FBQzNFLHlEQUF5RDtRQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRTtZQUN2QixPQUFPLFFBQVEsQ0FBQztTQUNqQjtRQUNELE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0QsK0VBQStFO1FBQy9FLGVBQWU7UUFDZiw0Q0FBNEM7UUFDNUMsTUFBTTtRQUNOLGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDeEMsT0FBTyxRQUFRLENBQUM7U0FDakI7UUFDRCxxREFBcUQ7UUFDckQsaUVBQWlFO1FBQ2pFLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixXQUFXLENBQUMsV0FBMkIsRUFBRSxRQUE0QjtRQUVuRixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDcEQsSUFBSSxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUNyQixTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ2xCO2lCQUFNLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDNUIsU0FBUyxHQUFHLElBQUksQ0FBQzthQUNsQjtTQUNGO1FBQ0QsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxDQUFDLENBQUUsZ0VBQWdFO1NBQzlFO2FBQU0sSUFBSSxTQUFTLEVBQUU7WUFDcEIsT0FBTyxRQUFRLENBQUM7U0FDakI7YUFBTSxJQUFJLFNBQVMsRUFBRTtZQUNwQixPQUFPLFFBQVEsQ0FBQztTQUNqQjthQUFNO1lBQ0wseUJBQXlCO1lBQ3pCLE9BQU8sR0FBRyxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBdEJELGtDQXNCQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsZUFBZSxDQUFDLFdBQTJCLEVBQUUsV0FBNEI7UUFFdkYsT0FBTyxDQUFDLE9BQWlDLEVBQUUsRUFBRTtZQUMzQyxTQUFTLE9BQU8sQ0FBb0IsSUFBTztnQkFDekMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7b0JBQUUsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBRWxGLDJGQUEyRjtnQkFDM0Ysb0ZBQW9GO2dCQUNwRiwwRkFBMEY7Z0JBQzFGLHVDQUF1QztnQkFDdkMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDO29CQUFFLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUUxRSw4RkFBOEY7Z0JBQzlGLGdFQUFnRTtnQkFDaEUsSUFBSSw0QkFBUyxDQUFDLElBQUksQ0FBQztvQkFBRSxPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFFdEUsTUFBTSxVQUFVLEdBQUcsa0NBQWUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFFaEQsTUFBTSxNQUFNLEdBQTRCLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO2dCQUNsQixLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2pDLElBQUksU0FBd0IsQ0FBQztvQkFDN0IsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFO3dCQUN0QixNQUFNLGNBQWMsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzVELElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFOzRCQUN0QyxTQUFTLEdBQUcsY0FBYyxHQUFHLENBQUMsQ0FBQzs0QkFDL0IsU0FBUyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7eUJBQzlDOzZCQUFNLElBQUksT0FBTyxjQUFjLEtBQUssUUFBUSxFQUFFOzRCQUM3QyxxRkFBcUY7NEJBQ3JGLG9GQUFvRjs0QkFDcEYsb0ZBQW9GOzRCQUNwRixxRkFBcUY7NEJBQ3JGLDRDQUE0Qzs0QkFDNUMsU0FBUyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7eUJBQzlDOzZCQUFNOzRCQUNMLG9EQUFvRDs0QkFDcEQsMENBQTBDOzRCQUMxQyxpRUFBaUU7NEJBQ2pFLDZDQUE2Qzs0QkFDN0MsZUFBZTs0QkFDZixjQUFjOzRCQUNkLHFDQUFxQzs0QkFDckMsTUFBTTs0QkFDTixvRUFBb0U7NEJBQ3BFLG9FQUFvRTs0QkFDcEUsMkNBQTJDOzRCQUMzQyxrRUFBa0U7NEJBQ2xFLGlCQUFpQjs0QkFDakIsMkJBQTJCOzRCQUMzQixtRUFBbUU7NEJBQ25FLG9EQUFvRDs0QkFDcEQsU0FBUyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFrQixDQUFDO3lCQUMxRDtxQkFDRjt5QkFBTTt3QkFDTCxTQUFTLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQzt3QkFDeEMsU0FBUyxFQUFFLENBQUM7cUJBQ2I7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUMxQixFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7aUJBQzVGO2dCQUVELE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsQ0FDeEMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsU0FBUyxFQUMvQixFQUFFLENBQUMsbUJBQW1CLENBQ2xCLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ2hGLE1BQU0sV0FBVyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQ2xDLEVBQUUsQ0FBQyxZQUFZLENBQ1gsRUFBRSxDQUFDLHVCQUF1QjtnQkFDdEIsZUFBZSxDQUFDLFNBQVMsRUFDekIsRUFBRSxDQUFDLDZCQUE2QixDQUM1QixDQUFDLE9BQU8sQ0FBQztnQkFDVCx3QkFBd0IsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3JELElBQUksQ0FBQyxFQUNULElBQUksQ0FBQyxDQUFDO2dCQUNWLE1BQU0sT0FBTyxHQUEwQjtvQkFDckMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCO29CQUMxQyxJQUFJLEVBQUUsWUFBWSxRQUFRLElBQUk7b0JBQzlCLGtCQUFrQixFQUFFLElBQUk7b0JBQ3hCLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ1AsR0FBRyxFQUFFLENBQUMsQ0FBQztpQkFDUixDQUFDO2dCQUNGLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUV2RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxNQUFNLFdBQVcsR0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUM3QyxJQUFJLFVBQVUsRUFBRTtvQkFDZCx1RkFBdUY7b0JBQ3ZGLG9DQUFvQztvQkFDcEMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENBQ3ZDLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDMUU7Z0JBRUQsSUFBSSxrQ0FBZSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNqRCx1RUFBdUU7b0JBQ3ZFLDJGQUEyRjtvQkFDM0YseUZBQXlGO29CQUN6RixrQkFBa0I7b0JBQ2xCLE9BQU8sV0FBVyxDQUFDO2lCQUNwQjtnQkFFRCxrRkFBa0Y7Z0JBQ2xGLEtBQUssTUFBTSxNQUFNLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtvQkFDakMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQztvQkFDL0IsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDO29CQUMxRCxzRUFBc0U7b0JBQ3RFLG1DQUFtQztvQkFDbkMsSUFBSSxVQUFVLEtBQUssUUFBUSxJQUFJLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsRUFBRTt3QkFDakUsU0FBUztxQkFDVjtvQkFFRCxxRUFBcUU7b0JBQ3JFLHlFQUF5RTtvQkFDekUsSUFBSSxRQUF1QixDQUFDO29CQUM1QixJQUFJLFlBQTJCLENBQUM7b0JBQ2hDLElBQUksRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRTt3QkFDL0Isd0JBQXdCO3dCQUN4QixRQUFRLEdBQUcsaURBQThCLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUMzRCxxRkFBcUY7d0JBQ3JGLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxvQ0FBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUNqRSxZQUFZLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztxQkFDMUU7eUJBQU07d0JBQ0wscUVBQXFFO3dCQUNyRSxRQUFRLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7d0JBQ3RGLFlBQVksR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO3FCQUM1RTtvQkFDRCxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUNuRCxFQUFFLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDbEY7Z0JBQ0QsT0FBTyxXQUFXLENBQUM7WUFDckIsQ0FBQztZQUVELE9BQU8sQ0FBQyxFQUFpQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFrQixDQUFDO1FBQzdELENBQUMsQ0FBQztJQUNKLENBQUM7SUF2SUQsMENBdUlDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgVHJhbnNmb3JtcyBUeXBlU2NyaXB0IGVudW0gZGVjbGFyYXRpb25zIHRvIENsb3N1cmUgZW51bSBkZWNsYXJhdGlvbnMsIHdoaWNoXG4gKiBsb29rIGxpa2U6XG4gKlxuICogICAgIC8uLiBAZW51bSB7bnVtYmVyfSAuL1xuICogICAgIGNvbnN0IEZvbyA9IHtCQVI6IDAsIEJBWjogMSwgLi4ufTtcbiAqICAgICBleHBvcnQge0Zvb307ICAvLyBldmVuIGlmIG9yaWdpbmFsbHkgZXhwb3J0ZWQgb24gb25lIGxpbmUuXG4gKlxuICogVGhpcyBkZWNsYXJlcyBhbiBlbnVtIHR5cGUgZm9yIENsb3N1cmUgQ29tcGlsZXIgKGFuZCBDbG9zdXJlIEpTIHVzZXJzIG9mIHRoaXMgVFMgY29kZSkuXG4gKiBTcGxpdHRpbmcgdGhlIGVudW0gaW50byBkZWNsYXJhdGlvbiBhbmQgZXhwb3J0IGlzIHJlcXVpcmVkIHNvIHRoYXQgbG9jYWwgcmVmZXJlbmNlcyB0byB0aGVcbiAqIHR5cGUgcmVzb2x2ZSAoXCJAdHlwZSB7Rm9vfVwiKS5cbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtjcmVhdGVTaW5nbGVRdW90ZVN0cmluZ0xpdGVyYWwsIGdldElkZW50aWZpZXJUZXh0LCBoYXNNb2RpZmllckZsYWcsIGlzQW1iaWVudH0gZnJvbSAnLi90cmFuc2Zvcm1lcl91dGlsJztcblxuLyoqIGlzSW5OYW1lc3BhY2UgcmV0dXJucyB0cnVlIGlmIGFueSBvZiBub2RlJ3MgYW5jZXN0b3JzIGlzIGEgbmFtZXNwYWNlIChNb2R1bGVEZWNsYXJhdGlvbikuICovXG5mdW5jdGlvbiBpc0luTmFtZXNwYWNlKG5vZGU6IHRzLk5vZGUpIHtcbiAgLy8gTXVzdCB1c2UgdGhlIG9yaWdpbmFsIG5vZGUgYmVjYXVzZSBub2RlIG1pZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkLCB3aXRoIG5vZGUucGFyZW50XG4gIC8vIG5vIGxvbmdlciBiZWluZyBzZXQuXG4gIGxldCBwYXJlbnQgPSB0cy5nZXRPcmlnaW5hbE5vZGUobm9kZSkucGFyZW50O1xuICB3aGlsZSAocGFyZW50KSB7XG4gICAgaWYgKHBhcmVudC5raW5kID09PSB0cy5TeW50YXhLaW5kLk1vZHVsZURlY2xhcmF0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogZ2V0RW51bU1lbWJlclR5cGUgY29tcHV0ZXMgdGhlIHR5cGUgb2YgYW4gZW51bSBtZW1iZXIgYnkgaW5zcGVjdGluZyBpdHMgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RW51bU1lbWJlclR5cGUodHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLCBtZW1iZXI6IHRzLkVudW1NZW1iZXIpOiAnbnVtYmVyJ3wnc3RyaW5nJyB7XG4gIC8vIEVudW0gbWVtYmVycyB3aXRob3V0IGluaXRpYWxpemF0aW9uIGhhdmUgdHlwZSAnbnVtYmVyJ1xuICBpZiAoIW1lbWJlci5pbml0aWFsaXplcikge1xuICAgIHJldHVybiAnbnVtYmVyJztcbiAgfVxuICBjb25zdCB0eXBlID0gdHlwZUNoZWNrZXIuZ2V0VHlwZUF0TG9jYXRpb24obWVtYmVyLmluaXRpYWxpemVyKTtcbiAgLy8gTm90ZTogY2hlY2tpbmcgYWdhaW5zdCAnTnVtYmVyTGlrZScgaW5zdGVhZCBvZiBqdXN0ICdOdW1iZXInIG1lYW5zIHRoaXMgY29kZVxuICAvLyBoYW5kbGVzIGJvdGhcbiAgLy8gICBNRU1CRVIgPSAzLCAgLy8gVHlwZUZsYWdzLk51bWJlckxpdGVyYWxcbiAgLy8gYW5kXG4gIC8vICAgTUVNQkVSID0gc29tZUZ1bmN0aW9uKCksICAvLyBUeXBlRmxhZ3MuTnVtYmVyXG4gIGlmICh0eXBlLmZsYWdzICYgdHMuVHlwZUZsYWdzLk51bWJlckxpa2UpIHtcbiAgICByZXR1cm4gJ251bWJlcic7XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIG5vdCBhIG51bWJlciwgaXQgbXVzdCBiZSBhIHN0cmluZy5cbiAgLy8gVHlwZVNjcmlwdCBkb2VzIG5vdCBhbGxvdyBlbnVtIG1lbWJlcnMgdG8gaGF2ZSBhbnkgb3RoZXIgdHlwZS5cbiAgcmV0dXJuICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIGdldEVudW1UeXBlIGNvbXB1dGVzIHRoZSBDbG9zdXJlIHR5cGUgb2YgYW4gZW51bSwgYnkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIG1lbWJlcnMgYW5kIGdhdGhlcmluZ1xuICogdGhlaXIgdHlwZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnVtVHlwZSh0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIGVudW1EZWNsOiB0cy5FbnVtRGVjbGFyYXRpb24pOiAnbnVtYmVyJ3xcbiAgICAnc3RyaW5nJ3wnPycge1xuICBsZXQgaGFzTnVtYmVyID0gZmFsc2U7XG4gIGxldCBoYXNTdHJpbmcgPSBmYWxzZTtcbiAgZm9yIChjb25zdCBtZW1iZXIgb2YgZW51bURlY2wubWVtYmVycykge1xuICAgIGNvbnN0IHR5cGUgPSBnZXRFbnVtTWVtYmVyVHlwZSh0eXBlQ2hlY2tlciwgbWVtYmVyKTtcbiAgICBpZiAodHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhhc1N0cmluZyA9IHRydWU7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgaGFzTnVtYmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKGhhc051bWJlciAmJiBoYXNTdHJpbmcpIHtcbiAgICByZXR1cm4gJz8nOyAgLy8gQ2xvc3VyZSdzIG5ldyB0eXBlIGluZmVyZW5jZSBkb2Vzbid0IHN1cHBvcnQgZW51bXMgb2YgdW5pb25zLlxuICB9IGVsc2UgaWYgKGhhc051bWJlcikge1xuICAgIHJldHVybiAnbnVtYmVyJztcbiAgfSBlbHNlIGlmIChoYXNTdHJpbmcpIHtcbiAgICByZXR1cm4gJ3N0cmluZyc7XG4gIH0gZWxzZSB7XG4gICAgLy8gUGVyaGFwcyBhbiBlbXB0eSBlbnVtP1xuICAgIHJldHVybiAnPyc7XG4gIH1cbn1cblxuLyoqXG4gKiBUcmFuc2Zvcm1lciBmYWN0b3J5IGZvciB0aGUgZW51bSB0cmFuc2Zvcm1lci4gU2VlIGZpbGVvdmVydmlldyBmb3IgZGV0YWlscy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVudW1UcmFuc2Zvcm1lcih0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsIGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10pOlxuICAgIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHRzLlRyYW5zZm9ybWVyPHRzLlNvdXJjZUZpbGU+IHtcbiAgcmV0dXJuIChjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICBmdW5jdGlvbiB2aXNpdG9yPFQgZXh0ZW5kcyB0cy5Ob2RlPihub2RlOiBUKTogVHx0cy5Ob2RlW10ge1xuICAgICAgaWYgKCF0cy5pc0VudW1EZWNsYXJhdGlvbihub2RlKSkgcmV0dXJuIHRzLnZpc2l0RWFjaENoaWxkKG5vZGUsIHZpc2l0b3IsIGNvbnRleHQpO1xuXG4gICAgICAvLyBUT0RPKG1hcnRpbnByb2JzdCk6IFRoZSBlbnVtIHRyYW5zZm9ybWVyIGRvZXMgbm90IHdvcmsgZm9yIGVudW1zIGVtYmVkZGVkIGluIG5hbWVzcGFjZXMsXG4gICAgICAvLyBiZWNhdXNlIFRTIGRvZXMgbm90IHN1cHBvcnQgc3BsaXR0aW5nIGV4cG9ydCBhbmQgZGVjbGFyYXRpb24gKFwiZXhwb3J0IHtGb299O1wiKSBpblxuICAgICAgLy8gbmFtZXNwYWNlcy4gdHNpY2tsZSdzIGVtaXQgZm9yIG5hbWVzcGFjZXMgaXMgdW5pbnRlbGxpZ2libGUgZm9yIENsb3N1cmUgaW4gYW55IGNhc2UsIHNvXG4gICAgICAvLyB0aGlzIGlzIGxlZnQgdG8gZml4IGZvciBhbm90aGVyIGRheS5cbiAgICAgIGlmIChpc0luTmFtZXNwYWNlKG5vZGUpKSByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG5cbiAgICAgIC8vIFR5cGVTY3JpcHQgZG9lcyBub3QgZW1pdCBhbnkgY29kZSBmb3IgYW1iaWVudCBlbnVtcywgc28gZWFybHkgZXhpdCBoZXJlIHRvIHByZXZlbnQgdGhlIGNvZGVcbiAgICAgIC8vIGJlbG93IGZyb20gcHJvZHVjaW5nIHJ1bnRpbWUgdmFsdWVzIGZvciBhbiBhbWJpZW50IHN0cnVjdHVyZS5cbiAgICAgIGlmIChpc0FtYmllbnQobm9kZSkpIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdG9yLCBjb250ZXh0KTtcblxuICAgICAgY29uc3QgaXNFeHBvcnRlZCA9IGhhc01vZGlmaWVyRmxhZyhub2RlLCB0cy5Nb2RpZmllckZsYWdzLkV4cG9ydCk7XG4gICAgICBjb25zdCBlbnVtVHlwZSA9IGdldEVudW1UeXBlKHR5cGVDaGVja2VyLCBub2RlKTtcblxuICAgICAgY29uc3QgdmFsdWVzOiB0cy5Qcm9wZXJ0eUFzc2lnbm1lbnRbXSA9IFtdO1xuICAgICAgbGV0IGVudW1JbmRleCA9IDA7XG4gICAgICBmb3IgKGNvbnN0IG1lbWJlciBvZiBub2RlLm1lbWJlcnMpIHtcbiAgICAgICAgbGV0IGVudW1WYWx1ZTogdHMuRXhwcmVzc2lvbjtcbiAgICAgICAgaWYgKG1lbWJlci5pbml0aWFsaXplcikge1xuICAgICAgICAgIGNvbnN0IGVudW1Db25zdFZhbHVlID0gdHlwZUNoZWNrZXIuZ2V0Q29uc3RhbnRWYWx1ZShtZW1iZXIpO1xuICAgICAgICAgIGlmICh0eXBlb2YgZW51bUNvbnN0VmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBlbnVtSW5kZXggPSBlbnVtQ29uc3RWYWx1ZSArIDE7XG4gICAgICAgICAgICBlbnVtVmFsdWUgPSB0cy5jcmVhdGVMaXRlcmFsKGVudW1Db25zdFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbnVtQ29uc3RWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIC8vIHRzaWNrbGUgZG9lcyBub3QgY2FyZSBhYm91dCBzdHJpbmcgZW51bSB2YWx1ZXMuIEhvd2V2ZXIgVHlwZVNjcmlwdCBleHBlY3RzIGNvbXBpbGVcbiAgICAgICAgICAgIC8vIHRpbWUgY29uc3RhbnQgZW51bSB2YWx1ZXMgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGVpciBjb25zdGFudCBleHByZXNzaW9uLCBhbmQgZS5nLlxuICAgICAgICAgICAgLy8gZG9lc24ndCBlbWl0IGltcG9ydHMgZm9yIG1vZHVsZXMgcmVmZXJlbmNlZCBpbiB0aGVtLiBCZWNhdXNlIHRzaWNrbGUgcmVwbGFjZXMgdGhlXG4gICAgICAgICAgICAvLyBlbnVtIHdpdGggYW4gb2JqZWN0IGxpdGVyYWwsIGkuZS4gaGFuZGxlcyB0aGUgZW51bSB0cmFuc2Zvcm0sIGl0IG11c3QgdGh1cyBhbHNvIGRvXG4gICAgICAgICAgICAvLyB0aGUgY29uc3QgdmFsdWUgc3Vic3RpdHV0aW9uIGZvciBzdHJpbmdzLlxuICAgICAgICAgICAgZW51bVZhbHVlID0gdHMuY3JlYXRlTGl0ZXJhbChlbnVtQ29uc3RWYWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vbi1udW1lcmljIGVudW0gdmFsdWUgKHN0cmluZyBvciBhbiBleHByZXNzaW9uKS5cbiAgICAgICAgICAgIC8vIEVtaXQgdGhpcyBpbml0aWFsaXplciBleHByZXNzaW9uIGFzLWlzLlxuICAgICAgICAgICAgLy8gTm90ZTogaWYgdGhlIG1lbWJlcidzIGluaXRpYWxpemVyIGV4cHJlc3Npb24gcmVmZXJzIHRvIGFub3RoZXJcbiAgICAgICAgICAgIC8vIHZhbHVlIHdpdGhpbiB0aGUgZW51bSAoZS5nLiBzb21ldGhpbmcgbGlrZVxuICAgICAgICAgICAgLy8gICBlbnVtIEZvbyB7XG4gICAgICAgICAgICAvLyAgICAgRmllbGQxLFxuICAgICAgICAgICAgLy8gICAgIEZpZWxkMiA9IEZpZWxkMSArIHNvbWV0aGluZygpLFxuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyBUaGVuIHdoZW4gd2UgZW1pdCB0aGUgaW5pdGlhbGl6ZXIgd2UgcHJvZHVjZSBpbnZhbGlkIGNvZGUgYmVjYXVzZVxuICAgICAgICAgICAgLy8gb24gdGhlIENsb3N1cmUgc2lkZSB0aGUgcmVmZXJlbmNlIHRvIEZpZWxkMSBoYXMgdG8gYmUgbmFtZXNwYWNlZCxcbiAgICAgICAgICAgIC8vIGUuZy4gd3JpdHRlbiBcIkZvby5GaWVsZDEgKyBzb21ldGhpbmcoKVwiLlxuICAgICAgICAgICAgLy8gSG9wZWZ1bGx5IHRoaXMgZG9lc24ndCBjb21lIHVwIG9mdGVuIC0tIGlmIHRoZSBlbnVtIGluc3RlYWQgaGFzXG4gICAgICAgICAgICAvLyBzb21ldGhpbmcgbGlrZVxuICAgICAgICAgICAgLy8gICAgIEZpZWxkMiA9IEZpZWxkMSArIDMsXG4gICAgICAgICAgICAvLyB0aGVuIGl0J3Mgc3RpbGwgYSBjb25zdGFudCBleHByZXNzaW9uIGFuZCB3ZSBpbmxpbmUgdGhlIGNvbnN0YW50XG4gICAgICAgICAgICAvLyB2YWx1ZSBpbiB0aGUgYWJvdmUgYnJhbmNoIG9mIHRoaXMgXCJpZlwiIHN0YXRlbWVudC5cbiAgICAgICAgICAgIGVudW1WYWx1ZSA9IHZpc2l0b3IobWVtYmVyLmluaXRpYWxpemVyKSBhcyB0cy5FeHByZXNzaW9uO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlbnVtVmFsdWUgPSB0cy5jcmVhdGVMaXRlcmFsKGVudW1JbmRleCk7XG4gICAgICAgICAgZW51bUluZGV4Kys7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2godHMuc2V0T3JpZ2luYWxOb2RlKFxuICAgICAgICAgICAgdHMuc2V0VGV4dFJhbmdlKHRzLmNyZWF0ZVByb3BlcnR5QXNzaWdubWVudChtZW1iZXIubmFtZSwgZW51bVZhbHVlKSwgbWVtYmVyKSwgbWVtYmVyKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhckRlY2wgPSB0cy5jcmVhdGVWYXJpYWJsZURlY2xhcmF0aW9uKFxuICAgICAgICAgIG5vZGUubmFtZSwgLyogdHlwZSAqLyB1bmRlZmluZWQsXG4gICAgICAgICAgdHMuY3JlYXRlT2JqZWN0TGl0ZXJhbChcbiAgICAgICAgICAgICAgdHMuc2V0VGV4dFJhbmdlKHRzLmNyZWF0ZU5vZGVBcnJheSh2YWx1ZXMsIHRydWUpLCBub2RlLm1lbWJlcnMpLCB0cnVlKSk7XG4gICAgICBjb25zdCB2YXJEZWNsU3RtdCA9IHRzLnNldE9yaWdpbmFsTm9kZShcbiAgICAgICAgICB0cy5zZXRUZXh0UmFuZ2UoXG4gICAgICAgICAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlU3RhdGVtZW50KFxuICAgICAgICAgICAgICAgICAgLyogbW9kaWZpZXJzICovIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRzLmNyZWF0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFxuICAgICAgICAgICAgICAgICAgICAgIFt2YXJEZWNsXSxcbiAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgYSBjb25zdCB2YXIgKi8gdHMuTm9kZUZsYWdzLkNvbnN0KSksXG4gICAgICAgICAgICAgIG5vZGUpLFxuICAgICAgICAgIG5vZGUpO1xuICAgICAgY29uc3QgY29tbWVudDogdHMuU3ludGhlc2l6ZWRDb21tZW50ID0ge1xuICAgICAgICBraW5kOiB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsXG4gICAgICAgIHRleHQ6IGAqIEBlbnVtIHske2VudW1UeXBlfX0gYCxcbiAgICAgICAgaGFzVHJhaWxpbmdOZXdMaW5lOiB0cnVlLFxuICAgICAgICBwb3M6IC0xLFxuICAgICAgICBlbmQ6IC0xXG4gICAgICB9O1xuICAgICAgdHMuc2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKHZhckRlY2xTdG10LCBbY29tbWVudF0pO1xuXG4gICAgICBjb25zdCBuYW1lID0gbm9kZS5uYW1lLmdldFRleHQoKTtcbiAgICAgIGNvbnN0IHJlc3VsdE5vZGVzOiB0cy5Ob2RlW10gPSBbdmFyRGVjbFN0bXRdO1xuICAgICAgaWYgKGlzRXhwb3J0ZWQpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgc2VwYXJhdGUgZXhwb3J0IHsuLi59IHN0YXRlbWVudCwgc28gdGhhdCB0aGUgZW51bSBuYW1lIGNhbiBiZSB1c2VkIGluIGxvY2FsXG4gICAgICAgIC8vIHR5cGUgYW5ub3RhdGlvbnMgd2l0aGluIHRoZSBmaWxlLlxuICAgICAgICByZXN1bHROb2Rlcy5wdXNoKHRzLmNyZWF0ZUV4cG9ydERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgdW5kZWZpbmVkLCB1bmRlZmluZWQsXG4gICAgICAgICAgICB0cy5jcmVhdGVOYW1lZEV4cG9ydHMoW3RzLmNyZWF0ZUV4cG9ydFNwZWNpZmllcih1bmRlZmluZWQsIG5hbWUpXSkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc01vZGlmaWVyRmxhZyhub2RlLCB0cy5Nb2RpZmllckZsYWdzLkNvbnN0KSkge1xuICAgICAgICAvLyBCeSBUeXBlU2NyaXB0IHNlbWFudGljcywgY29uc3QgZW51bXMgZGlzYXBwZWFyIGFmdGVyIFRTIGNvbXBpbGF0aW9uLlxuICAgICAgICAvLyBXZSBzdGlsbCBuZWVkIHRvIGdlbmVyYXRlIHRoZSBydW50aW1lIHZhbHVlIGFib3ZlIHRvIG1ha2UgQ2xvc3VyZSBDb21waWxlcidzIHR5cGUgc3lzdGVtXG4gICAgICAgIC8vIGhhcHB5IGFuZCBhbGxvdyByZWZlcmluZyB0byBlbnVtcyBmcm9tIEpTIGNvZGUsIGJ1dCB3ZSBzaG91bGQgYXQgbGVhc3Qgbm90IGVtaXQgc3RyaW5nXG4gICAgICAgIC8vIHZhbHVlIG1hcHBpbmdzLlxuICAgICAgICByZXR1cm4gcmVzdWx0Tm9kZXM7XG4gICAgICB9XG5cbiAgICAgIC8vIEVtaXQgdGhlIHJldmVyc2UgbWFwcGluZyBvZiBmb29bZm9vLkJBUl0gPSAnQkFSJzsgbGluZXMgZm9yIG51bWJlciBlbnVtIG1lbWJlcnNcbiAgICAgIGZvciAoY29uc3QgbWVtYmVyIG9mIG5vZGUubWVtYmVycykge1xuICAgICAgICBjb25zdCBtZW1iZXJOYW1lID0gbWVtYmVyLm5hbWU7XG4gICAgICAgIGNvbnN0IG1lbWJlclR5cGUgPSBnZXRFbnVtTWVtYmVyVHlwZSh0eXBlQ2hlY2tlciwgbWVtYmVyKTtcbiAgICAgICAgLy8gRW51bSBtZW1iZXJzIGNhbm5vdCBiZSBuYW1lZCB3aXRoIGEgcHJpdmF0ZSBpZGVudGlmaWVyLCBhbHRob3VnaCBpdFxuICAgICAgICAvLyBpcyB0ZWNobmljYWxseSB2YWxpZCBpbiB0aGUgQVNULlxuICAgICAgICBpZiAobWVtYmVyVHlwZSAhPT0gJ251bWJlcicgfHwgdHMuaXNQcml2YXRlSWRlbnRpZmllcihtZW1iZXJOYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVHlwZVNjcmlwdCBlbnVtIG1lbWJlcnMgY2FuIGhhdmUgSWRlbnRpZmllciBuYW1lcyBvciBTdHJpbmcgbmFtZXMuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZW1pdCBzbGlnaHRseSBkaWZmZXJlbnQgY29kZSB0byBzdXBwb3J0IHRoZXNlIHR3byBzeW50YXhlczpcbiAgICAgICAgbGV0IG5hbWVFeHByOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBsZXQgbWVtYmVyQWNjZXNzOiB0cy5FeHByZXNzaW9uO1xuICAgICAgICBpZiAodHMuaXNJZGVudGlmaWVyKG1lbWJlck5hbWUpKSB7XG4gICAgICAgICAgLy8gRm9vW0Zvby5BQkNdID0gXCJBQkNcIjtcbiAgICAgICAgICBuYW1lRXhwciA9IGNyZWF0ZVNpbmdsZVF1b3RlU3RyaW5nTGl0ZXJhbChtZW1iZXJOYW1lLnRleHQpO1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBjcmVhdGUgYSBjbGVhbiwgbmV3IGlkZW50aWZpZXIsIHNvIGNvbW1lbnRzIGRvIG5vdCBnZXQgZW1pdHRlZCB0d2ljZS5cbiAgICAgICAgICBjb25zdCBpZGVudCA9IHRzLmNyZWF0ZUlkZW50aWZpZXIoZ2V0SWRlbnRpZmllclRleHQobWVtYmVyTmFtZSkpO1xuICAgICAgICAgIG1lbWJlckFjY2VzcyA9IHRzLmNyZWF0ZVByb3BlcnR5QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIobmFtZSksIGlkZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBGb29bRm9vW1wiQSBCIENcIl1dID0gXCJBIEIgQ1wiOyBvciBGb29bRm9vW2V4cHJlc3Npb25dXSA9IGV4cHJlc3Npb247XG4gICAgICAgICAgbmFtZUV4cHIgPSB0cy5pc0NvbXB1dGVkUHJvcGVydHlOYW1lKG1lbWJlck5hbWUpID8gbWVtYmVyTmFtZS5leHByZXNzaW9uIDogbWVtYmVyTmFtZTtcbiAgICAgICAgICBtZW1iZXJBY2Nlc3MgPSB0cy5jcmVhdGVFbGVtZW50QWNjZXNzKHRzLmNyZWF0ZUlkZW50aWZpZXIobmFtZSksIG5hbWVFeHByKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHROb2Rlcy5wdXNoKHRzLmNyZWF0ZVN0YXRlbWVudCh0cy5jcmVhdGVBc3NpZ25tZW50KFxuICAgICAgICAgICAgdHMuY3JlYXRlRWxlbWVudEFjY2Vzcyh0cy5jcmVhdGVJZGVudGlmaWVyKG5hbWUpLCBtZW1iZXJBY2Nlc3MpLCBuYW1lRXhwcikpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHROb2RlcztcbiAgICB9XG5cbiAgICByZXR1cm4gKHNmOiB0cy5Tb3VyY2VGaWxlKSA9PiB2aXNpdG9yKHNmKSBhcyB0cy5Tb3VyY2VGaWxlO1xuICB9O1xufVxuIl19

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.transformFileoverviewCommentFactory = void 0;
const ts = require("typescript");

@@ -71,17 +72,22 @@ const jsdoc = require("tsickle/src/jsdoc");

// Ensure our suppressions are included in the @suppress tag:
// 1) Suppress checkTypes. We believe the code has already been type-checked by TypeScript,
// and we cannot model all the TypeScript type decisions in Closure syntax.
// * Suppress checkTypes. We believe the code has already been type-checked
// by TypeScript, and we cannot model all the TypeScript type decisions in
// Closure syntax.
suppressions.add('checkTypes');
// 2) Suppress extraRequire. We remove extra requires at the TypeScript level, so any require
// that gets to the JS level is a load-bearing require.
// * Suppress extraRequire. We remove extra requires at the TypeScript level,
// so any require that gets to the JS level is a load-bearing require.
suppressions.add('extraRequire');
// 3) Suppress uselessCode. We emit an "if (false)" around type declarations,
// * Types references are propagated between files even when they are not
// directly imported. While these are violations of the "missing require"
// rules they are believed to be safe.
suppressions.add('missingRequire');
// * Suppress uselessCode. We emit an "if (false)" around type declarations,
// which is flagged as unused code unless we suppress it.
suppressions.add('uselessCode');
// 4) Suppress some checks for user errors that TS already checks.
// * Suppress some checks for user errors that TS already checks.
suppressions.add('missingReturn');
suppressions.add('unusedPrivateMembers');
// 5) Suppress checking for @override, because TS doesn't model it.
// * Suppress checking for @override, because TS doesn't model it.
suppressions.add('missingOverride');
// 6) Suppress constantProperty checking, which errors when a namespace is
// * Suppress constantProperty checking, which errors when a namespace is
// reopened. Namespace reopening happens when one writes namespace foo {}

@@ -189,2 +195,2 @@ // or namespace foo.* {} more than once.

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCxpQ0FBaUM7SUFFakMsMkNBQWlDO0lBQ2pDLHlDQUErQjtJQUMvQixtRUFBOEg7SUFFOUg7OztPQUdHO0lBQ0gsTUFBTSw0QkFBNEIsR0FDOUIsSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQztJQUUzRTs7Ozs7O09BTUc7SUFDSCxTQUFTLDJCQUEyQixDQUNoQyxPQUEyQixFQUFFLE1BQXFCLEVBQUUsSUFBaUI7UUFDdkUsd0NBQXdDO1FBQ3hDLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsWUFBWSxHQUFHLEVBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUMsQ0FBQztZQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFO1lBQzNCLHdFQUF3RTtZQUN4RSxrQkFBa0I7WUFDbEIsWUFBWSxDQUFDLElBQUksSUFBSSxxQkFBcUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1NBQzdGO1FBRUQsa0NBQWtDO1FBQ2xDLDBGQUEwRjtRQUMxRixr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Q0osQ0FBQztJQXJHRCxrRkFxR0M7SUFFRCxTQUFTLHlCQUF5QixDQUFDLEVBQWlCLEVBQUUsV0FBbUI7UUFDdkUsSUFBSSx1QkFBdUIsR0FBRyw0Q0FBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RCx1QkFBdUIsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQ3BELHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sdUNBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCAqIGFzIGpzZG9jIGZyb20gJy4vanNkb2MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICcuL3BhdGgnO1xuaW1wb3J0IHtjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50LCByZXBvcnREaWFnbm9zdGljLCBzeW50aGVzaXplQ29tbWVudFJhbmdlcywgdXBkYXRlU291cmNlRmlsZU5vZGV9IGZyb20gJy4vdHJhbnNmb3JtZXJfdXRpbCc7XG5cbi8qKlxuICogQSBzZXQgb2YgSlNEb2MgdGFncyB0aGF0IG1hcmsgYSBjb21tZW50IGFzIGEgZmlsZW92ZXJ2aWV3IGNvbW1lbnQuIFRoZXNlIGFyZSByZWNvZ25pemVkIGJ5IG90aGVyXG4gKiBwaWVjZXMgb2YgaW5mcmFzdHJ1Y3R1cmUgKENsb3N1cmUgQ29tcGlsZXIsIG1vZHVsZSBzeXN0ZW0sIC4uLikuXG4gKi9cbmNvbnN0IEZJTEVPVkVSVklFV19DT01NRU5UX01BUktFUlM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPVxuICAgIG5ldyBTZXQoWydmaWxlb3ZlcnZpZXcnLCAnZXh0ZXJucycsICdtb2ROYW1lJywgJ21vZHMnLCAncGludG9tb2R1bGUnXSk7XG5cbi8qKlxuICogR2l2ZW4gYSBwYXJzZWQgXFxAZmlsZW92ZXJ2aWV3IGNvbW1lbnQsIGVuc3VyZXMgaXQgaGFzIGFsbCB0aGUgYXR0cmlidXRlcyB3ZSBuZWVkLlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIG1vZGlmeSBhbiBleGlzdGluZyBjb21tZW50IG9yIHRvIG1ha2UgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgT3JpZ2luYWwgVFMgc291cmNlIGZpbGUuIEl0cyBwYXRoIGlzIGFkZGVkIGluIFxcQGZpbGVvdmVydmlldy5cbiAqIEBwYXJhbSB0YWdzIENvbW1lbnQgYXMgcGFyc2VkIGxpc3Qgb2YgdGFnczsgbW9kaWZpZWQgaW4tcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGF1Z21lbnRGaWxlb3ZlcnZpZXdDb21tZW50cyhcbiAgICBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMsIHNvdXJjZTogdHMuU291cmNlRmlsZSwgdGFnczoganNkb2MuVGFnW10pIHtcbiAgLy8gRW5zdXJlIHdlIHN0YXJ0IHdpdGggYSBAZmlsZW92ZXJ2aWV3LlxuICBsZXQgZmlsZU92ZXJ2aWV3ID0gdGFncy5maW5kKHQgPT4gdC50YWdOYW1lID09PSAnZmlsZW92ZXJ2aWV3Jyk7XG4gIGlmICghZmlsZU92ZXJ2aWV3KSB7XG4gICAgZmlsZU92ZXJ2aWV3ID0ge3RhZ05hbWU6ICdmaWxlb3ZlcnZpZXcnLCB0ZXh0OiAnYWRkZWQgYnkgdHNpY2tsZSd9O1xuICAgIHRhZ3Muc3BsaWNlKDAsIDAsIGZpbGVPdmVydmlldyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMucm9vdERpciAhPSBudWxsKSB7XG4gICAgLy8gVGhpcyBjb21tZW50IGlzIHJlYWQgYnkgb3RoZXIgdG9vbHMgc28gaXQncyBpbXBvcnRhbnQgdGhhdCBpdHMgZm9ybWF0XG4gICAgLy8gZG9lc24ndCBjaGFuZ2UuXG4gICAgZmlsZU92ZXJ2aWV3LnRleHQgKz0gYFxcbkdlbmVyYXRlZCBmcm9tOiAke3BhdGgucmVsYXRpdmUob3B0aW9ucy5yb290RGlyLCBzb3VyY2UuZmlsZU5hbWUpfWA7XG4gIH1cblxuICAvLyBGaW5kIG9yIGNyZWF0ZSBhIEBzdXBwcmVzcyB0YWcuXG4gIC8vIENsb3N1cmUgY29tcGlsZXIgYmFyZnMgaWYgdGhlcmUncyBhIGR1cGxpY2F0ZWQgQHN1cHByZXNzIHRhZyBpbiBhIGZpbGUsIHNvIHRoZSB0YWcgbXVzdFxuICAvLyBvbmx5IGFwcGVhciBvbmNlIGFuZCBiZSBtZXJnZWQuXG4gIGxldCBzdXBwcmVzc1RhZyA9IHRhZ3MuZmluZCh0ID0+IHQudGFnTmFtZSA9PT0gJ3N1cHByZXNzJyk7XG4gIGxldCBzdXBwcmVzc2lvbnM6IFNldDxzdHJpbmc+O1xuICBpZiAoc3VwcHJlc3NUYWcpIHtcbiAgICBzdXBwcmVzc2lvbnMgPSBuZXcgU2V0KChzdXBwcmVzc1RhZy50eXBlIHx8ICcnKS5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKSk7XG4gIH0gZWxzZSB7XG4gICAgc3VwcHJlc3NUYWcgPSB7dGFnTmFtZTogJ3N1cHByZXNzJywgdGV4dDogJ2NoZWNrZWQgYnkgdHNjJ307XG4gICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBAbGljZW5zZSB0YWcgYmVjYXVzZSBhbGwgdGV4dCBmb2xsb3dpbmcgdGhpcyB0YWcgaXNcbiAgICAvLyB0cmVhdGVkIGJ5IHRoZSBjb21waWxlciBhcyBwYXJ0IG9mIHRoZSBsaWNlbnNlLCBzbyB3ZSBuZWVkIHRvIHBsYWNlIHRoZVxuICAgIC8vIG5ldyBAc3VwcHJlc3MgdGFnIGJlZm9yZSBAbGljZW5zZS5cbiAgICBjb25zdCBsaWNlbnNlVGFnSW5kZXggPSB0YWdzLmZpbmRJbmRleCh0ID0+IHQudGFnTmFtZSA9PT0gJ2xpY2Vuc2UnKTtcbiAgICBpZiAobGljZW5zZVRhZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGFncy5zcGxpY2UobGljZW5zZVRhZ0luZGV4LCAwLCBzdXBwcmVzc1RhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ3MucHVzaChzdXBwcmVzc1RhZyk7XG4gICAgfVxuICAgIHN1cHByZXNzaW9ucyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSBvdXIgc3VwcHJlc3Npb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgQHN1cHByZXNzIHRhZzpcbiAgLy8gMSkgU3VwcHJlc3MgY2hlY2tUeXBlcy4gIFdlIGJlbGlldmUgdGhlIGNvZGUgaGFzIGFscmVhZHkgYmVlbiB0eXBlLWNoZWNrZWQgYnkgVHlwZVNjcmlwdCxcbiAgLy8gYW5kIHdlIGNhbm5vdCBtb2RlbCBhbGwgdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWNpc2lvbnMgaW4gQ2xvc3VyZSBzeW50YXguXG4gIHN1cHByZXNzaW9ucy5hZGQoJ2NoZWNrVHlwZXMnKTtcbiAgLy8gMikgU3VwcHJlc3MgZXh0cmFSZXF1aXJlLiAgV2UgcmVtb3ZlIGV4dHJhIHJlcXVpcmVzIGF0IHRoZSBUeXBlU2NyaXB0IGxldmVsLCBzbyBhbnkgcmVxdWlyZVxuICAvLyB0aGF0IGdldHMgdG8gdGhlIEpTIGxldmVsIGlzIGEgbG9hZC1iZWFyaW5nIHJlcXVpcmUuXG4gIHN1cHByZXNzaW9ucy5hZGQoJ2V4dHJhUmVxdWlyZScpO1xuICAvLyAzKSBTdXBwcmVzcyB1c2VsZXNzQ29kZS4gIFdlIGVtaXQgYW4gXCJpZiAoZmFsc2UpXCIgYXJvdW5kIHR5cGUgZGVjbGFyYXRpb25zLFxuICAvLyB3aGljaCBpcyBmbGFnZ2VkIGFzIHVudXNlZCBjb2RlIHVubGVzcyB3ZSBzdXBwcmVzcyBpdC5cbiAgc3VwcHJlc3Npb25zLmFkZCgndXNlbGVzc0NvZGUnKTtcbiAgLy8gNCkgU3VwcHJlc3Mgc29tZSBjaGVja3MgZm9yIHVzZXIgZXJyb3JzIHRoYXQgVFMgYWxyZWFkeSBjaGVja3MuXG4gIHN1cHByZXNzaW9ucy5hZGQoJ21pc3NpbmdSZXR1cm4nKTtcbiAgc3VwcHJlc3Npb25zLmFkZCgndW51c2VkUHJpdmF0ZU1lbWJlcnMnKTtcbiAgLy8gNSkgU3VwcHJlc3MgY2hlY2tpbmcgZm9yIEBvdmVycmlkZSwgYmVjYXVzZSBUUyBkb2Vzbid0IG1vZGVsIGl0LlxuICBzdXBwcmVzc2lvbnMuYWRkKCdtaXNzaW5nT3ZlcnJpZGUnKTtcbiAgLy8gNikgU3VwcHJlc3MgY29uc3RhbnRQcm9wZXJ0eSBjaGVja2luZywgd2hpY2ggZXJyb3JzIHdoZW4gYSBuYW1lc3BhY2UgaXNcbiAgLy8gcmVvcGVuZWQuIE5hbWVzcGFjZSByZW9wZW5pbmcgaGFwcGVucyB3aGVuIG9uZSB3cml0ZXMgbmFtZXNwYWNlIGZvbyB7fVxuICAvLyBvciBuYW1lc3BhY2UgZm9vLioge30gbW9yZSB0aGFuIG9uY2UuXG4gIHN1cHByZXNzaW9ucy5hZGQoJ2NvbnN0YW50UHJvcGVydHknKTtcbiAgc3VwcHJlc3NUYWcudHlwZSA9IEFycmF5LmZyb20oc3VwcHJlc3Npb25zLnZhbHVlcygpKS5zb3J0KCkuam9pbignLCcpO1xuXG4gIHJldHVybiB0YWdzO1xufVxuXG4vKipcbiAqIEEgdHJhbnNmb3JtZXIgdGhhdCBlbnN1cmVzIHRoZSBlbWl0dGVkIEpTIGZpbGUgaGFzIGFuIFxcQGZpbGVvdmVydmlldyBjb21tZW50IHRoYXQgY29udGFpbnMgYW5cbiAqIFxcQHN1cHByZXNzIHtjaGVja1R5cGVzfSBhbm5vdGF0aW9uIGJ5IGVpdGhlciBhZGRpbmcgb3IgdXBkYXRpbmcgYW4gZXhpc3RpbmcgY29tbWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUZpbGVvdmVydmlld0NvbW1lbnRGYWN0b3J5KFxuICAgIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucywgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSkge1xuICByZXR1cm4gKCk6IChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB0cy5Tb3VyY2VGaWxlID0+IHtcbiAgICBmdW5jdGlvbiBjaGVja05vRmlsZW92ZXJ2aWV3Q29tbWVudHMoXG4gICAgICAgIGNvbnRleHQ6IHRzLk5vZGUsIGNvbW1lbnRzOiBqc2RvYy5TeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWxbXSwgbWVzc2FnZTogc3RyaW5nKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbW1lbnQgb2YgY29tbWVudHMpIHtcbiAgICAgICAgY29uc3QgcGFyc2UgPSBqc2RvYy5wYXJzZShjb21tZW50KTtcbiAgICAgICAgaWYgKHBhcnNlICE9PSBudWxsICYmIHBhcnNlLnRhZ3Muc29tZSh0ID0+IEZJTEVPVkVSVklFV19DT01NRU5UX01BUktFUlMuaGFzKHQudGFnTmFtZSkpKSB7XG4gICAgICAgICAgLy8gUmVwb3J0IGEgd2FybmluZzsgdGhpcyBzaG91bGQgbm90IGJyZWFrIGNvbXBpbGF0aW9uIGluIHRoaXJkIHBhcnR5IGNvZGUuXG4gICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhcbiAgICAgICAgICAgICAgZGlhZ25vc3RpY3MsIGNvbnRleHQsIG1lc3NhZ2UsIGNvbW1lbnQub3JpZ2luYWxSYW5nZSwgdHMuRGlhZ25vc3RpY0NhdGVnb3J5Lldhcm5pbmcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gc291cmNlRmlsZS5nZXRGdWxsVGV4dCgpO1xuXG4gICAgICBsZXQgZmlsZUNvbW1lbnRzOiB0cy5TeW50aGVzaXplZENvbW1lbnRbXSA9IFtdO1xuICAgICAgY29uc3QgZmlyc3RTdGF0ZW1lbnQgPSBzb3VyY2VGaWxlLnN0YXRlbWVudHMubGVuZ3RoICYmIHNvdXJjZUZpbGUuc3RhdGVtZW50c1swXSB8fCBudWxsO1xuXG4gICAgICBjb25zdCBvcmlnaW5hbENvbW1lbnRzID0gdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXModGV4dCwgMCkgfHwgW107XG4gICAgICBpZiAoIWZpcnN0U3RhdGVtZW50KSB7XG4gICAgICAgIC8vIEluIGFuIGVtcHR5IHNvdXJjZSBmaWxlLCBhbGwgY29tbWVudHMgYXJlIGZpbGUtbGV2ZWwgY29tbWVudHMuXG4gICAgICAgIGZpbGVDb21tZW50cyA9IHN5bnRoZXNpemVDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUsIG9yaWdpbmFsQ29tbWVudHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgbGFzdCBjb21tZW50IHNwbGl0IGZyb20gdGhlIGZpbGUgd2l0aCBhIFxcblxcbi4gQWxsIGNvbW1lbnRzIGJlZm9yZSB0aGF0IGFyZVxuICAgICAgICAvLyBjb25zaWRlcmVkIGZpbGVvdmVydmlldyBjb21tZW50cywgYWxsIGNvbW1lbnRzIGFmdGVyIHRoYXQgYmVsb25nIHRvIHRoZSBuZXh0XG4gICAgICAgIC8vIHN0YXRlbWVudChzKS4gSWYgbm9uZSBmb3VuZCwgY29tbWVudHMgcmVtYWlucyBlbXB0eSwgYW5kIHRoZSBjb2RlIGJlbG93IHdpbGwgaW5zZXJ0IGEgbmV3XG4gICAgICAgIC8vIGZpbGVvdmVydmlldyBjb21tZW50LlxuICAgICAgICBmb3IgKGxldCBpID0gb3JpZ2luYWxDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIGNvbnN0IGVuZCA9IG9yaWdpbmFsQ29tbWVudHNbaV0uZW5kO1xuICAgICAgICAgIGlmICghdGV4dC5zdWJzdHJpbmcoZW5kKS5zdGFydHNXaXRoKCdcXG5cXG4nKSAmJlxuICAgICAgICAgICAgICAhdGV4dC5zdWJzdHJpbmcoZW5kKS5zdGFydHNXaXRoKCdcXHJcXG5cXHJcXG4nKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFRoaXMgY29tbWVudCBpcyBzZXBhcmF0ZWQgZnJvbSB0aGUgc291cmNlIGZpbGUgd2l0aCBhIGRvdWJsZSBicmVhaywgbWFya2luZyBpdCAoYW5kIGFueVxuICAgICAgICAgIC8vIHByZWNlZGluZyBjb21tZW50cykgYXMgYSBmaWxlLWxldmVsIGNvbW1lbnQuIFNwbGl0IHRoZW0gb2ZmIGFuZCBhdHRhY2ggdGhlbSBvbnRvIGFcbiAgICAgICAgICAvLyBOb3RFbWl0dGVkU3RhdGVtZW50LCBzbyB0aGF0IHRoZXkgZG8gbm90IGdldCBsb3N0IGxhdGVyIG9uLlxuICAgICAgICAgIGNvbnN0IHN5bnRoZXNpemVkQ29tbWVudHMgPSBqc2RvYy5zeW50aGVzaXplTGVhZGluZ0NvbW1lbnRzKGZpcnN0U3RhdGVtZW50KTtcbiAgICAgICAgICBjb25zdCBub3RFbWl0dGVkID0gdHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChzb3VyY2VGaWxlKTtcbiAgICAgICAgICAvLyBNb2RpZnkgdGhlIGNvbW1lbnRzIG9uIHRoZSBmaXJzdFN0YXRlbWVudCBpbiBwbGFjZSBieSByZW1vdmluZyB0aGUgZmlsZS1sZXZlbCBjb21tZW50cy5cbiAgICAgICAgICBmaWxlQ29tbWVudHMgPSBzeW50aGVzaXplZENvbW1lbnRzLnNwbGljZSgwLCBpICsgMSk7XG4gICAgICAgICAgLy8gTW92ZSB0aGUgZmlsZUNvbW1lbnRzIG9udG8gbm90RW1pdHRlZC5cbiAgICAgICAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMobm90RW1pdHRlZCwgZmlsZUNvbW1lbnRzKTtcbiAgICAgICAgICBzb3VyY2VGaWxlID0gdXBkYXRlU291cmNlRmlsZU5vZGUoXG4gICAgICAgICAgICAgIHNvdXJjZUZpbGUsXG4gICAgICAgICAgICAgIHRzLmNyZWF0ZU5vZGVBcnJheShbbm90RW1pdHRlZCwgZmlyc3RTdGF0ZW1lbnQsIC4uLnNvdXJjZUZpbGUuc3RhdGVtZW50cy5zbGljZSgxKV0pKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG5cbiAgICAgICAgLy8gTm93IHdhbGsgZXZlcnkgdG9wIGxldmVsIHN0YXRlbWVudCBhbmQgZXNjYXBlL2Ryb3AgYW55IEBmaWxlb3ZlcnZpZXcgY29tbWVudHMgZm91bmQuXG4gICAgICAgIC8vIENsb3N1cmUgaWdub3JlcyBhbGwgQGZpbGVvdmVydmlldyBjb21tZW50cyBidXQgdGhlIGxhc3QsIHNvIHRzaWNrbGUgbXVzdCBtYWtlIHN1cmUgbm90IHRvXG4gICAgICAgIC8vIGVtaXQgZHVwbGljYXRlZCBvbmVzLlxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZUZpbGUuc3RhdGVtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IHN0bXQgPSBzb3VyY2VGaWxlLnN0YXRlbWVudHNbaV07XG4gICAgICAgICAgLy8gQWNjZXB0IHRoZSBOb3RFbWl0dGVkU3RhdGVtZW50IGluc2VydGVkIGFib3ZlLlxuICAgICAgICAgIGlmIChpID09PSAwICYmIHN0bXQua2luZCA9PT0gdHMuU3ludGF4S2luZC5Ob3RFbWl0dGVkU3RhdGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgICBjb25zdCBjb21tZW50cyA9IGpzZG9jLnN5bnRoZXNpemVMZWFkaW5nQ29tbWVudHMoc3RtdCk7XG4gICAgICAgICAgY2hlY2tOb0ZpbGVvdmVydmlld0NvbW1lbnRzKFxuICAgICAgICAgICAgICBzdG10LCBjb21tZW50cyxcbiAgICAgICAgICAgICAgYGZpbGUgY29tbWVudHMgbXVzdCBiZSBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLCBgICtcbiAgICAgICAgICAgICAgICAgIGBzZXBhcmF0ZWQgZnJvbSB0aGUgZmlsZSBib2R5IGJ5IGFuIGVtcHR5IGxpbmUuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2xvc3VyZSBDb21waWxlciBjb25zaWRlcnMgdGhlICpsYXN0KiBjb21tZW50IHdpdGggQGZpbGVvdmVydmlldyAob3IgI2V4dGVybnMgb3JcbiAgICAgIC8vIEBub2NvbXBpbGUpIHRoYXQgaGFzIG5vdCBiZWVuIGF0dGFjaGVkIHRvIHNvbWUgb3RoZXIgdHJlZSBub2RlIHRvIGJlIHRoZSBmaWxlIG92ZXJ2aWV3XG4gICAgICAvLyBjb21tZW50LCBhbmQgb25seSBhcHBsaWVzIEBzdXBwcmVzcyB0YWdzIGZyb20gaXQuIEdvb2dsZS1pbnRlcm5hbCB0b29saW5nIGNvbnNpZGVycyAqYW55KlxuICAgICAgLy8gY29tbWVudCBtZW50aW9uaW5nIEBmaWxlb3ZlcnZpZXcuXG4gICAgICBsZXQgZmlsZW92ZXJ2aWV3SWR4ID0gLTE7XG4gICAgICBsZXQgdGFnczoganNkb2MuVGFnW10gPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSBmaWxlQ29tbWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcGFyc2UgPSBqc2RvYy5wYXJzZUNvbnRlbnRzKGZpbGVDb21tZW50c1tpXS50ZXh0KTtcbiAgICAgICAgaWYgKHBhcnNlICE9PSBudWxsICYmIHBhcnNlLnRhZ3Muc29tZSh0ID0+IEZJTEVPVkVSVklFV19DT01NRU5UX01BUktFUlMuaGFzKHQudGFnTmFtZSkpKSB7XG4gICAgICAgICAgZmlsZW92ZXJ2aWV3SWR4ID0gaTtcbiAgICAgICAgICB0YWdzID0gcGFyc2UudGFncztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlsZW92ZXJ2aWV3SWR4ICE9PSAtMSkge1xuICAgICAgICBjaGVja05vRmlsZW92ZXJ2aWV3Q29tbWVudHMoXG4gICAgICAgICAgICBmaXJzdFN0YXRlbWVudCB8fCBzb3VyY2VGaWxlLCBmaWxlQ29tbWVudHMuc2xpY2UoMCwgZmlsZW92ZXJ2aWV3SWR4KSxcbiAgICAgICAgICAgIGBkdXBsaWNhdGUgZmlsZSBsZXZlbCBjb21tZW50YCk7XG4gICAgICB9XG5cbiAgICAgIGF1Z21lbnRGaWxlb3ZlcnZpZXdDb21tZW50cyhvcHRpb25zLCBzb3VyY2VGaWxlLCB0YWdzKTtcbiAgICAgIGNvbnN0IGNvbW1lbnRUZXh0ID0ganNkb2MudG9TdHJpbmdXaXRob3V0U3RhcnRFbmQodGFncyk7XG5cbiAgICAgIGlmIChmaWxlb3ZlcnZpZXdJZHggPCAwKSB7XG4gICAgICAgIC8vIE5vIGV4aXN0aW5nIGNvbW1lbnQgdG8gbWVyZ2Ugd2l0aCwganVzdCBlbWl0IGEgbmV3IG9uZS5cbiAgICAgICAgcmV0dXJuIGFkZE5ld0ZpbGVvdmVydmlld0NvbW1lbnQoc291cmNlRmlsZSwgY29tbWVudFRleHQpO1xuICAgICAgfVxuXG4gICAgICBmaWxlQ29tbWVudHNbZmlsZW92ZXJ2aWV3SWR4XS50ZXh0ID0gY29tbWVudFRleHQ7XG4gICAgICAvLyBzZiBkb2VzIG5vdCBuZWVkIHRvIGJlIHVwZGF0ZWQsIHN5bnRoZXNpemVkIGNvbW1lbnRzIGFyZSBtdXRhYmxlLlxuICAgICAgcmV0dXJuIHNvdXJjZUZpbGU7XG4gICAgfTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYWRkTmV3RmlsZW92ZXJ2aWV3Q29tbWVudChzZjogdHMuU291cmNlRmlsZSwgY29tbWVudFRleHQ6IHN0cmluZyk6IHRzLlNvdXJjZUZpbGUge1xuICBsZXQgc3ludGhldGljRmlyc3RTdGF0ZW1lbnQgPSBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KHNmKTtcbiAgc3ludGhldGljRmlyc3RTdGF0ZW1lbnQgPSB0cy5hZGRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnQoXG4gICAgICBzeW50aGV0aWNGaXJzdFN0YXRlbWVudCwgdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLCBjb21tZW50VGV4dCwgdHJ1ZSk7XG4gIHJldHVybiB1cGRhdGVTb3VyY2VGaWxlTm9kZShzZiwgdHMuY3JlYXRlTm9kZUFycmF5KFtzeW50aGV0aWNGaXJzdFN0YXRlbWVudCwgLi4uc2Yuc3RhdGVtZW50c10pKTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBRWpDLDJDQUFpQztJQUNqQyx5Q0FBK0I7SUFDL0IsbUVBQThIO0lBRTlIOzs7T0FHRztJQUNILE1BQU0sNEJBQTRCLEdBQzlCLElBQUksR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFFM0U7Ozs7OztPQU1HO0lBQ0gsU0FBUywyQkFBMkIsQ0FDaEMsT0FBMkIsRUFBRSxNQUFxQixFQUFFLElBQWlCO1FBQ3ZFLHdDQUF3QztRQUN4QyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxjQUFjLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2pCLFlBQVksR0FBRyxFQUFDLE9BQU8sRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTtZQUMzQix3RUFBd0U7WUFDeEUsa0JBQWtCO1lBQ2xCLFlBQVksQ0FBQyxJQUFJLElBQUkscUJBQXFCLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztTQUM3RjtRQUVELGtDQUFrQztRQUNsQywwRkFBMEY7UUFDMUYs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QyxDQUFDLElBQUksR0FBRyxXQUFXLENBQUM7Z0JBQ2pELG9FQUFvRTtnQkFDcEUsT0FBTyxVQUFVLENBQUM7WUFDcEIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQXJHRCxrRkFxR0M7SUFFRCxTQUFTLHlCQUF5QixDQUFDLEVBQWlCLEVBQUUsV0FBbUI7UUFDdkUsSUFBSSx1QkFBdUIsR0FBRyw0Q0FBeUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RCx1QkFBdUIsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQ3BELHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RGLE9BQU8sdUNBQW9CLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQyx1QkFBdUIsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCAqIGFzIGpzZG9jIGZyb20gJy4vanNkb2MnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICcuL3BhdGgnO1xuaW1wb3J0IHtjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50LCByZXBvcnREaWFnbm9zdGljLCBzeW50aGVzaXplQ29tbWVudFJhbmdlcywgdXBkYXRlU291cmNlRmlsZU5vZGV9IGZyb20gJy4vdHJhbnNmb3JtZXJfdXRpbCc7XG5cbi8qKlxuICogQSBzZXQgb2YgSlNEb2MgdGFncyB0aGF0IG1hcmsgYSBjb21tZW50IGFzIGEgZmlsZW92ZXJ2aWV3IGNvbW1lbnQuIFRoZXNlIGFyZSByZWNvZ25pemVkIGJ5IG90aGVyXG4gKiBwaWVjZXMgb2YgaW5mcmFzdHJ1Y3R1cmUgKENsb3N1cmUgQ29tcGlsZXIsIG1vZHVsZSBzeXN0ZW0sIC4uLikuXG4gKi9cbmNvbnN0IEZJTEVPVkVSVklFV19DT01NRU5UX01BUktFUlM6IFJlYWRvbmx5U2V0PHN0cmluZz4gPVxuICAgIG5ldyBTZXQoWydmaWxlb3ZlcnZpZXcnLCAnZXh0ZXJucycsICdtb2ROYW1lJywgJ21vZHMnLCAncGludG9tb2R1bGUnXSk7XG5cbi8qKlxuICogR2l2ZW4gYSBwYXJzZWQgXFxAZmlsZW92ZXJ2aWV3IGNvbW1lbnQsIGVuc3VyZXMgaXQgaGFzIGFsbCB0aGUgYXR0cmlidXRlcyB3ZSBuZWVkLlxuICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHRvIG1vZGlmeSBhbiBleGlzdGluZyBjb21tZW50IG9yIHRvIG1ha2UgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSBzb3VyY2UgT3JpZ2luYWwgVFMgc291cmNlIGZpbGUuIEl0cyBwYXRoIGlzIGFkZGVkIGluIFxcQGZpbGVvdmVydmlldy5cbiAqIEBwYXJhbSB0YWdzIENvbW1lbnQgYXMgcGFyc2VkIGxpc3Qgb2YgdGFnczsgbW9kaWZpZWQgaW4tcGxhY2UuXG4gKi9cbmZ1bmN0aW9uIGF1Z21lbnRGaWxlb3ZlcnZpZXdDb21tZW50cyhcbiAgICBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMsIHNvdXJjZTogdHMuU291cmNlRmlsZSwgdGFnczoganNkb2MuVGFnW10pIHtcbiAgLy8gRW5zdXJlIHdlIHN0YXJ0IHdpdGggYSBAZmlsZW92ZXJ2aWV3LlxuICBsZXQgZmlsZU92ZXJ2aWV3ID0gdGFncy5maW5kKHQgPT4gdC50YWdOYW1lID09PSAnZmlsZW92ZXJ2aWV3Jyk7XG4gIGlmICghZmlsZU92ZXJ2aWV3KSB7XG4gICAgZmlsZU92ZXJ2aWV3ID0ge3RhZ05hbWU6ICdmaWxlb3ZlcnZpZXcnLCB0ZXh0OiAnYWRkZWQgYnkgdHNpY2tsZSd9O1xuICAgIHRhZ3Muc3BsaWNlKDAsIDAsIGZpbGVPdmVydmlldyk7XG4gIH1cbiAgaWYgKG9wdGlvbnMucm9vdERpciAhPSBudWxsKSB7XG4gICAgLy8gVGhpcyBjb21tZW50IGlzIHJlYWQgYnkgb3RoZXIgdG9vbHMgc28gaXQncyBpbXBvcnRhbnQgdGhhdCBpdHMgZm9ybWF0XG4gICAgLy8gZG9lc24ndCBjaGFuZ2UuXG4gICAgZmlsZU92ZXJ2aWV3LnRleHQgKz0gYFxcbkdlbmVyYXRlZCBmcm9tOiAke3BhdGgucmVsYXRpdmUob3B0aW9ucy5yb290RGlyLCBzb3VyY2UuZmlsZU5hbWUpfWA7XG4gIH1cblxuICAvLyBGaW5kIG9yIGNyZWF0ZSBhIEBzdXBwcmVzcyB0YWcuXG4gIC8vIENsb3N1cmUgY29tcGlsZXIgYmFyZnMgaWYgdGhlcmUncyBhIGR1cGxpY2F0ZWQgQHN1cHByZXNzIHRhZyBpbiBhIGZpbGUsIHNvIHRoZSB0YWcgbXVzdFxuICAvLyBvbmx5IGFwcGVhciBvbmNlIGFuZCBiZSBtZXJnZWQuXG4gIGxldCBzdXBwcmVzc1RhZyA9IHRhZ3MuZmluZCh0ID0+IHQudGFnTmFtZSA9PT0gJ3N1cHByZXNzJyk7XG4gIGxldCBzdXBwcmVzc2lvbnM6IFNldDxzdHJpbmc+O1xuICBpZiAoc3VwcHJlc3NUYWcpIHtcbiAgICBzdXBwcmVzc2lvbnMgPSBuZXcgU2V0KChzdXBwcmVzc1RhZy50eXBlIHx8ICcnKS5zcGxpdCgnLCcpLm1hcChzID0+IHMudHJpbSgpKSk7XG4gIH0gZWxzZSB7XG4gICAgc3VwcHJlc3NUYWcgPSB7dGFnTmFtZTogJ3N1cHByZXNzJywgdGV4dDogJ2NoZWNrZWQgYnkgdHNjJ307XG4gICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBAbGljZW5zZSB0YWcgYmVjYXVzZSBhbGwgdGV4dCBmb2xsb3dpbmcgdGhpcyB0YWcgaXNcbiAgICAvLyB0cmVhdGVkIGJ5IHRoZSBjb21waWxlciBhcyBwYXJ0IG9mIHRoZSBsaWNlbnNlLCBzbyB3ZSBuZWVkIHRvIHBsYWNlIHRoZVxuICAgIC8vIG5ldyBAc3VwcHJlc3MgdGFnIGJlZm9yZSBAbGljZW5zZS5cbiAgICBjb25zdCBsaWNlbnNlVGFnSW5kZXggPSB0YWdzLmZpbmRJbmRleCh0ID0+IHQudGFnTmFtZSA9PT0gJ2xpY2Vuc2UnKTtcbiAgICBpZiAobGljZW5zZVRhZ0luZGV4ICE9PSAtMSkge1xuICAgICAgdGFncy5zcGxpY2UobGljZW5zZVRhZ0luZGV4LCAwLCBzdXBwcmVzc1RhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZ3MucHVzaChzdXBwcmVzc1RhZyk7XG4gICAgfVxuICAgIHN1cHByZXNzaW9ucyA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIC8vIEVuc3VyZSBvdXIgc3VwcHJlc3Npb25zIGFyZSBpbmNsdWRlZCBpbiB0aGUgQHN1cHByZXNzIHRhZzpcbiAgLy8gKiBTdXBwcmVzcyBjaGVja1R5cGVzLiAgV2UgYmVsaWV2ZSB0aGUgY29kZSBoYXMgYWxyZWFkeSBiZWVuIHR5cGUtY2hlY2tlZFxuICAvLyBieSBUeXBlU2NyaXB0LCBhbmQgd2UgY2Fubm90IG1vZGVsIGFsbCB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlY2lzaW9ucyBpblxuICAvLyBDbG9zdXJlIHN5bnRheC5cbiAgc3VwcHJlc3Npb25zLmFkZCgnY2hlY2tUeXBlcycpO1xuICAvLyAqIFN1cHByZXNzIGV4dHJhUmVxdWlyZS4gIFdlIHJlbW92ZSBleHRyYSByZXF1aXJlcyBhdCB0aGUgVHlwZVNjcmlwdCBsZXZlbCxcbiAgLy8gc28gYW55IHJlcXVpcmUgdGhhdCBnZXRzIHRvIHRoZSBKUyBsZXZlbCBpcyBhIGxvYWQtYmVhcmluZyByZXF1aXJlLlxuICBzdXBwcmVzc2lvbnMuYWRkKCdleHRyYVJlcXVpcmUnKTtcbiAgLy8gKiBUeXBlcyByZWZlcmVuY2VzIGFyZSBwcm9wYWdhdGVkIGJldHdlZW4gZmlsZXMgZXZlbiB3aGVuIHRoZXkgYXJlIG5vdFxuICAvLyBkaXJlY3RseSBpbXBvcnRlZC4gV2hpbGUgdGhlc2UgYXJlIHZpb2xhdGlvbnMgb2YgdGhlIFwibWlzc2luZyByZXF1aXJlXCJcbiAgLy8gcnVsZXMgdGhleSBhcmUgYmVsaWV2ZWQgdG8gYmUgc2FmZS5cbiAgc3VwcHJlc3Npb25zLmFkZCgnbWlzc2luZ1JlcXVpcmUnKTtcbiAgLy8gKiBTdXBwcmVzcyB1c2VsZXNzQ29kZS4gIFdlIGVtaXQgYW4gXCJpZiAoZmFsc2UpXCIgYXJvdW5kIHR5cGUgZGVjbGFyYXRpb25zLFxuICAvLyB3aGljaCBpcyBmbGFnZ2VkIGFzIHVudXNlZCBjb2RlIHVubGVzcyB3ZSBzdXBwcmVzcyBpdC5cbiAgc3VwcHJlc3Npb25zLmFkZCgndXNlbGVzc0NvZGUnKTtcbiAgLy8gKiBTdXBwcmVzcyBzb21lIGNoZWNrcyBmb3IgdXNlciBlcnJvcnMgdGhhdCBUUyBhbHJlYWR5IGNoZWNrcy5cbiAgc3VwcHJlc3Npb25zLmFkZCgnbWlzc2luZ1JldHVybicpO1xuICBzdXBwcmVzc2lvbnMuYWRkKCd1bnVzZWRQcml2YXRlTWVtYmVycycpO1xuICAvLyAqIFN1cHByZXNzIGNoZWNraW5nIGZvciBAb3ZlcnJpZGUsIGJlY2F1c2UgVFMgZG9lc24ndCBtb2RlbCBpdC5cbiAgc3VwcHJlc3Npb25zLmFkZCgnbWlzc2luZ092ZXJyaWRlJyk7XG4gIC8vICogU3VwcHJlc3MgY29uc3RhbnRQcm9wZXJ0eSBjaGVja2luZywgd2hpY2ggZXJyb3JzIHdoZW4gYSBuYW1lc3BhY2UgaXNcbiAgLy8gcmVvcGVuZWQuIE5hbWVzcGFjZSByZW9wZW5pbmcgaGFwcGVucyB3aGVuIG9uZSB3cml0ZXMgbmFtZXNwYWNlIGZvbyB7fVxuICAvLyBvciBuYW1lc3BhY2UgZm9vLioge30gbW9yZSB0aGFuIG9uY2UuXG4gIHN1cHByZXNzaW9ucy5hZGQoJ2NvbnN0YW50UHJvcGVydHknKTtcblxuICBzdXBwcmVzc1RhZy50eXBlID0gQXJyYXkuZnJvbShzdXBwcmVzc2lvbnMudmFsdWVzKCkpLnNvcnQoKS5qb2luKCcsJyk7XG5cbiAgcmV0dXJuIHRhZ3M7XG59XG5cbi8qKlxuICogQSB0cmFuc2Zvcm1lciB0aGF0IGVuc3VyZXMgdGhlIGVtaXR0ZWQgSlMgZmlsZSBoYXMgYW4gXFxAZmlsZW92ZXJ2aWV3IGNvbW1lbnQgdGhhdCBjb250YWlucyBhblxuICogXFxAc3VwcHJlc3Mge2NoZWNrVHlwZXN9IGFubm90YXRpb24gYnkgZWl0aGVyIGFkZGluZyBvciB1cGRhdGluZyBhbiBleGlzdGluZyBjb21tZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtRmlsZW92ZXJ2aWV3Q29tbWVudEZhY3RvcnkoXG4gICAgb3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zLCBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdKSB7XG4gIHJldHVybiAoKTogKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHRzLlNvdXJjZUZpbGUgPT4ge1xuICAgIGZ1bmN0aW9uIGNoZWNrTm9GaWxlb3ZlcnZpZXdDb21tZW50cyhcbiAgICAgICAgY29udGV4dDogdHMuTm9kZSwgY29tbWVudHM6IGpzZG9jLlN5bnRoZXNpemVkQ29tbWVudFdpdGhPcmlnaW5hbFtdLCBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBjb21tZW50cykge1xuICAgICAgICBjb25zdCBwYXJzZSA9IGpzZG9jLnBhcnNlKGNvbW1lbnQpO1xuICAgICAgICBpZiAocGFyc2UgIT09IG51bGwgJiYgcGFyc2UudGFncy5zb21lKHQgPT4gRklMRU9WRVJWSUVXX0NPTU1FTlRfTUFSS0VSUy5oYXModC50YWdOYW1lKSkpIHtcbiAgICAgICAgICAvLyBSZXBvcnQgYSB3YXJuaW5nOyB0aGlzIHNob3VsZCBub3QgYnJlYWsgY29tcGlsYXRpb24gaW4gdGhpcmQgcGFydHkgY29kZS5cbiAgICAgICAgICByZXBvcnREaWFnbm9zdGljKFxuICAgICAgICAgICAgICBkaWFnbm9zdGljcywgY29udGV4dCwgbWVzc2FnZSwgY29tbWVudC5vcmlnaW5hbFJhbmdlLCB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuV2FybmluZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBzb3VyY2VGaWxlLmdldEZ1bGxUZXh0KCk7XG5cbiAgICAgIGxldCBmaWxlQ29tbWVudHM6IHRzLlN5bnRoZXNpemVkQ29tbWVudFtdID0gW107XG4gICAgICBjb25zdCBmaXJzdFN0YXRlbWVudCA9IHNvdXJjZUZpbGUuc3RhdGVtZW50cy5sZW5ndGggJiYgc291cmNlRmlsZS5zdGF0ZW1lbnRzWzBdIHx8IG51bGw7XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQ29tbWVudHMgPSB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyh0ZXh0LCAwKSB8fCBbXTtcbiAgICAgIGlmICghZmlyc3RTdGF0ZW1lbnQpIHtcbiAgICAgICAgLy8gSW4gYW4gZW1wdHkgc291cmNlIGZpbGUsIGFsbCBjb21tZW50cyBhcmUgZmlsZS1sZXZlbCBjb21tZW50cy5cbiAgICAgICAgZmlsZUNvbW1lbnRzID0gc3ludGhlc2l6ZUNvbW1lbnRSYW5nZXMoc291cmNlRmlsZSwgb3JpZ2luYWxDb21tZW50cyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBsYXN0IGNvbW1lbnQgc3BsaXQgZnJvbSB0aGUgZmlsZSB3aXRoIGEgXFxuXFxuLiBBbGwgY29tbWVudHMgYmVmb3JlIHRoYXQgYXJlXG4gICAgICAgIC8vIGNvbnNpZGVyZWQgZmlsZW92ZXJ2aWV3IGNvbW1lbnRzLCBhbGwgY29tbWVudHMgYWZ0ZXIgdGhhdCBiZWxvbmcgdG8gdGhlIG5leHRcbiAgICAgICAgLy8gc3RhdGVtZW50KHMpLiBJZiBub25lIGZvdW5kLCBjb21tZW50cyByZW1haW5zIGVtcHR5LCBhbmQgdGhlIGNvZGUgYmVsb3cgd2lsbCBpbnNlcnQgYSBuZXdcbiAgICAgICAgLy8gZmlsZW92ZXJ2aWV3IGNvbW1lbnQuXG4gICAgICAgIGZvciAobGV0IGkgPSBvcmlnaW5hbENvbW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgY29uc3QgZW5kID0gb3JpZ2luYWxDb21tZW50c1tpXS5lbmQ7XG4gICAgICAgICAgaWYgKCF0ZXh0LnN1YnN0cmluZyhlbmQpLnN0YXJ0c1dpdGgoJ1xcblxcbicpICYmXG4gICAgICAgICAgICAgICF0ZXh0LnN1YnN0cmluZyhlbmQpLnN0YXJ0c1dpdGgoJ1xcclxcblxcclxcbicpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVGhpcyBjb21tZW50IGlzIHNlcGFyYXRlZCBmcm9tIHRoZSBzb3VyY2UgZmlsZSB3aXRoIGEgZG91YmxlIGJyZWFrLCBtYXJraW5nIGl0IChhbmQgYW55XG4gICAgICAgICAgLy8gcHJlY2VkaW5nIGNvbW1lbnRzKSBhcyBhIGZpbGUtbGV2ZWwgY29tbWVudC4gU3BsaXQgdGhlbSBvZmYgYW5kIGF0dGFjaCB0aGVtIG9udG8gYVxuICAgICAgICAgIC8vIE5vdEVtaXR0ZWRTdGF0ZW1lbnQsIHNvIHRoYXQgdGhleSBkbyBub3QgZ2V0IGxvc3QgbGF0ZXIgb24uXG4gICAgICAgICAgY29uc3Qgc3ludGhlc2l6ZWRDb21tZW50cyA9IGpzZG9jLnN5bnRoZXNpemVMZWFkaW5nQ29tbWVudHMoZmlyc3RTdGF0ZW1lbnQpO1xuICAgICAgICAgIGNvbnN0IG5vdEVtaXR0ZWQgPSB0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KHNvdXJjZUZpbGUpO1xuICAgICAgICAgIC8vIE1vZGlmeSB0aGUgY29tbWVudHMgb24gdGhlIGZpcnN0U3RhdGVtZW50IGluIHBsYWNlIGJ5IHJlbW92aW5nIHRoZSBmaWxlLWxldmVsIGNvbW1lbnRzLlxuICAgICAgICAgIGZpbGVDb21tZW50cyA9IHN5bnRoZXNpemVkQ29tbWVudHMuc3BsaWNlKDAsIGkgKyAxKTtcbiAgICAgICAgICAvLyBNb3ZlIHRoZSBmaWxlQ29tbWVudHMgb250byBub3RFbWl0dGVkLlxuICAgICAgICAgIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhub3RFbWl0dGVkLCBmaWxlQ29tbWVudHMpO1xuICAgICAgICAgIHNvdXJjZUZpbGUgPSB1cGRhdGVTb3VyY2VGaWxlTm9kZShcbiAgICAgICAgICAgICAgc291cmNlRmlsZSxcbiAgICAgICAgICAgICAgdHMuY3JlYXRlTm9kZUFycmF5KFtub3RFbWl0dGVkLCBmaXJzdFN0YXRlbWVudCwgLi4uc291cmNlRmlsZS5zdGF0ZW1lbnRzLnNsaWNlKDEpXSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cblxuICAgICAgICAvLyBOb3cgd2FsayBldmVyeSB0b3AgbGV2ZWwgc3RhdGVtZW50IGFuZCBlc2NhcGUvZHJvcCBhbnkgQGZpbGVvdmVydmlldyBjb21tZW50cyBmb3VuZC5cbiAgICAgICAgLy8gQ2xvc3VyZSBpZ25vcmVzIGFsbCBAZmlsZW92ZXJ2aWV3IGNvbW1lbnRzIGJ1dCB0aGUgbGFzdCwgc28gdHNpY2tsZSBtdXN0IG1ha2Ugc3VyZSBub3QgdG9cbiAgICAgICAgLy8gZW1pdCBkdXBsaWNhdGVkIG9uZXMuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc291cmNlRmlsZS5zdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qgc3RtdCA9IHNvdXJjZUZpbGUuc3RhdGVtZW50c1tpXTtcbiAgICAgICAgICAvLyBBY2NlcHQgdGhlIE5vdEVtaXR0ZWRTdGF0ZW1lbnQgaW5zZXJ0ZWQgYWJvdmUuXG4gICAgICAgICAgaWYgKGkgPT09IDAgJiYgc3RtdC5raW5kID09PSB0cy5TeW50YXhLaW5kLk5vdEVtaXR0ZWRTdGF0ZW1lbnQpIGNvbnRpbnVlO1xuICAgICAgICAgIGNvbnN0IGNvbW1lbnRzID0ganNkb2Muc3ludGhlc2l6ZUxlYWRpbmdDb21tZW50cyhzdG10KTtcbiAgICAgICAgICBjaGVja05vRmlsZW92ZXJ2aWV3Q29tbWVudHMoXG4gICAgICAgICAgICAgIHN0bXQsIGNvbW1lbnRzLFxuICAgICAgICAgICAgICBgZmlsZSBjb21tZW50cyBtdXN0IGJlIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUsIGAgK1xuICAgICAgICAgICAgICAgICAgYHNlcGFyYXRlZCBmcm9tIHRoZSBmaWxlIGJvZHkgYnkgYW4gZW1wdHkgbGluZS5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbG9zdXJlIENvbXBpbGVyIGNvbnNpZGVycyB0aGUgKmxhc3QqIGNvbW1lbnQgd2l0aCBAZmlsZW92ZXJ2aWV3IChvciAjZXh0ZXJucyBvclxuICAgICAgLy8gQG5vY29tcGlsZSkgdGhhdCBoYXMgbm90IGJlZW4gYXR0YWNoZWQgdG8gc29tZSBvdGhlciB0cmVlIG5vZGUgdG8gYmUgdGhlIGZpbGUgb3ZlcnZpZXdcbiAgICAgIC8vIGNvbW1lbnQsIGFuZCBvbmx5IGFwcGxpZXMgQHN1cHByZXNzIHRhZ3MgZnJvbSBpdC4gR29vZ2xlLWludGVybmFsIHRvb2xpbmcgY29uc2lkZXJzICphbnkqXG4gICAgICAvLyBjb21tZW50IG1lbnRpb25pbmcgQGZpbGVvdmVydmlldy5cbiAgICAgIGxldCBmaWxlb3ZlcnZpZXdJZHggPSAtMTtcbiAgICAgIGxldCB0YWdzOiBqc2RvYy5UYWdbXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IGZpbGVDb21tZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwYXJzZSA9IGpzZG9jLnBhcnNlQ29udGVudHMoZmlsZUNvbW1lbnRzW2ldLnRleHQpO1xuICAgICAgICBpZiAocGFyc2UgIT09IG51bGwgJiYgcGFyc2UudGFncy5zb21lKHQgPT4gRklMRU9WRVJWSUVXX0NPTU1FTlRfTUFSS0VSUy5oYXModC50YWdOYW1lKSkpIHtcbiAgICAgICAgICBmaWxlb3ZlcnZpZXdJZHggPSBpO1xuICAgICAgICAgIHRhZ3MgPSBwYXJzZS50YWdzO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaWxlb3ZlcnZpZXdJZHggIT09IC0xKSB7XG4gICAgICAgIGNoZWNrTm9GaWxlb3ZlcnZpZXdDb21tZW50cyhcbiAgICAgICAgICAgIGZpcnN0U3RhdGVtZW50IHx8IHNvdXJjZUZpbGUsIGZpbGVDb21tZW50cy5zbGljZSgwLCBmaWxlb3ZlcnZpZXdJZHgpLFxuICAgICAgICAgICAgYGR1cGxpY2F0ZSBmaWxlIGxldmVsIGNvbW1lbnRgKTtcbiAgICAgIH1cblxuICAgICAgYXVnbWVudEZpbGVvdmVydmlld0NvbW1lbnRzKG9wdGlvbnMsIHNvdXJjZUZpbGUsIHRhZ3MpO1xuICAgICAgY29uc3QgY29tbWVudFRleHQgPSBqc2RvYy50b1N0cmluZ1dpdGhvdXRTdGFydEVuZCh0YWdzKTtcblxuICAgICAgaWYgKGZpbGVvdmVydmlld0lkeCA8IDApIHtcbiAgICAgICAgLy8gTm8gZXhpc3RpbmcgY29tbWVudCB0byBtZXJnZSB3aXRoLCBqdXN0IGVtaXQgYSBuZXcgb25lLlxuICAgICAgICByZXR1cm4gYWRkTmV3RmlsZW92ZXJ2aWV3Q29tbWVudChzb3VyY2VGaWxlLCBjb21tZW50VGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGZpbGVDb21tZW50c1tmaWxlb3ZlcnZpZXdJZHhdLnRleHQgPSBjb21tZW50VGV4dDtcbiAgICAgIC8vIHNmIGRvZXMgbm90IG5lZWQgdG8gYmUgdXBkYXRlZCwgc3ludGhlc2l6ZWQgY29tbWVudHMgYXJlIG11dGFibGUuXG4gICAgICByZXR1cm4gc291cmNlRmlsZTtcbiAgICB9O1xuICB9O1xufVxuXG5mdW5jdGlvbiBhZGROZXdGaWxlb3ZlcnZpZXdDb21tZW50KHNmOiB0cy5Tb3VyY2VGaWxlLCBjb21tZW50VGV4dDogc3RyaW5nKTogdHMuU291cmNlRmlsZSB7XG4gIGxldCBzeW50aGV0aWNGaXJzdFN0YXRlbWVudCA9IGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQoc2YpO1xuICBzeW50aGV0aWNGaXJzdFN0YXRlbWVudCA9IHRzLmFkZFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudChcbiAgICAgIHN5bnRoZXRpY0ZpcnN0U3RhdGVtZW50LCB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsIGNvbW1lbnRUZXh0LCB0cnVlKTtcbiAgcmV0dXJuIHVwZGF0ZVNvdXJjZUZpbGVOb2RlKHNmLCB0cy5jcmVhdGVOb2RlQXJyYXkoW3N5bnRoZXRpY0ZpcnN0U3RhdGVtZW50LCAuLi5zZi5zdGF0ZW1lbnRzXSkpO1xufVxuIl19

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.merge = exports.toString = exports.toStringWithoutStartEnd = exports.toSynthesizedComment = exports.suppressLeadingCommentsRecursively = exports.getLeadingCommentRangesSynthesized = exports.synthesizeLeadingComments = exports.TAGS_CONFLICTING_WITH_TYPE = exports.parseContents = exports.normalizeLineEndings = exports.parse = void 0;
const ts = require("typescript");

@@ -120,4 +121,4 @@ /**

'augments', 'class', 'constructs', 'constructor', 'enum', 'extends', 'field',
'function', 'implements', 'interface', 'lends', 'namespace', 'private', 'public',
'record', 'static', 'template', 'this', 'type', 'typedef',
'function', 'implements', 'interface', 'lends', 'namespace', 'private', 'protected',
'public', 'record', 'static', 'template', 'this', 'type', 'typedef',
]);

@@ -458,2 +459,2 @@ /**

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvanNkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7SUFFSCxpQ0FBaUM7SUFzQ2pDOzs7Ozs7Ozs7Ozs7T0FZRztJQUNILE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxHQUFHLENBQUM7UUFDMUMsVUFBVTtRQUNWLFVBQVU7UUFDVixRQUFRO1FBQ1IsT0FBTztRQUNQLFVBQVU7UUFDVixhQUFhO1FBQ2IsV0FBVztRQUNYLFFBQVE7UUFDUixZQUFZO1FBQ1osTUFBTTtRQUNOLE1BQU07UUFDTixVQUFVO1FBQ1YsU0FBUztRQUNULGFBQWE7UUFDYixNQUFNO1FBQ04sUUFBUTtRQUNSLFFBQVE7UUFDUixTQUFTO1FBQ1QsU0FBUztRQUNULGNBQWM7UUFDZCxPQUFPO1FBQ1AsZUFBZTtRQUNmLG1CQUFtQjtRQUNuQixRQUFRO1FBQ1IsSUFBSTtRQUNKLGFBQWE7UUFDYixRQUFRO1FBQ1IsWUFBWTtRQUNaLGNBQWM7UUFDZCxZQUFZO1FBQ1osV0FBVztRQUNYLGNBQWM7UUFDZCxjQUFjO1FBQ2QsZUFBZTtRQUNmLHNCQUFzQjtRQUN0QixPQUFPO1FBQ1AsU0FBUztRQUNULE1BQU07UUFDTixTQUFTO1FBQ1QsVUFBVTtRQUNWLFNBQVM7UUFDVCxNQUFNO1FBQ04sVUFBVTtRQUNWLFNBQVM7UUFDVCxZQUFZO1FBQ1osV0FBVztRQUNYLGVBQWU7UUFDZixVQUFVO1FBQ1YsT0FBTztRQUNQLFNBQVM7UUFDVCxPQUFPO1FBQ1AsYUFBYTtRQUNiLFNBQVM7UUFDVCxpQkFBaUI7UUFDakIsVUFBVTtRQUNWLGFBQWE7UUFDYixTQUFTO1FBQ1QsV0FBVztRQUNYLFFBQVE7UUFDUixRQUFRO1FBQ1IsWUFBWTtRQUNaLFVBQVU7UUFDVixRQUFRO1FBQ1IsU0FBUztRQUNULEtBQUs7UUFDTCxRQUFRO1FBQ1IsVUFBVTtRQUNWLFVBQVU7UUFD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QUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN0RSwyRkFBMkY7UUFDM0YsTUFBTSxhQUFhLEdBQUcsT0FBTyxLQUFLLFVBQVUsQ0FBQztRQUM3QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDOUYsTUFBTSxHQUFHLEdBQVEsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUN0RCx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLElBQUksU0FBUyxFQUFFO1lBQ2IsR0FBRyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7U0FDdEI7YUFBTSxJQUFJLFFBQVEsRUFBRTtZQUNuQixHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUNyQjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQXBDRCxzQkFvQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG4vKipcbiAqIFR5cGVTY3JpcHQgaGFzIGFuIEFQSSBmb3IgSlNEb2MgYWxyZWFkeSwgYnV0IGl0J3Mgbm90IGV4cG9zZWQuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzczOTNcbiAqIEZvciBub3cgd2UgY3JlYXRlIHR5cGVzIHRoYXQgYXJlIHNpbWlsYXIgdG8gdGhlaXJzIHNvIHRoYXQgbWlncmF0aW5nXG4gKiB0byB0aGVpciBBUEkgd2lsbCBiZSBlYXNpZXIuICBTZWUgZS5nLiB0cy5KU0RvY1RhZyBhbmQgdHMuSlNEb2NDb21tZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRhZyB7XG4gIC8qKlxuICAgKiB0YWdOYW1lIGlzIGUuZy4gXCJwYXJhbVwiIGluIGFuIEBwYXJhbSBkZWNsYXJhdGlvbi4gIEl0IGlzIHRoZSBlbXB0eSBzdHJpbmdcbiAgICogZm9yIHRoZSBwbGFpbiB0ZXh0IGRvY3VtZW50YXRpb24gdGhhdCBvY2N1cnMgYmVmb3JlIGFueSBAZm9vIGxpbmVzLlxuICAgKi9cbiAgdGFnTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogcGFyYW1ldGVyTmFtZSBpcyB0aGUgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlciwgZS5nLiBcImZvb1wiXG4gICAqIGluIGBcXEBwYXJhbSBmb28gVGhlIGZvbyBwYXJhbWBcbiAgICovXG4gIHBhcmFtZXRlck5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBhIEpTRG9jIFxcQHBhcmFtLCBcXEB0eXBlIGV0YyB0YWcsIHJlbmRlcmVkIGluIGN1cmx5IGJyYWNlcy5cbiAgICogQ2FuIGFsc28gaG9sZCB0aGUgdHlwZSBvZiBhbiBcXEBzdXBwcmVzcy5cbiAgICovXG4gIHR5cGU/OiBzdHJpbmc7XG4gIC8qKiBvcHRpb25hbCBpcyB0cnVlIGZvciBvcHRpb25hbCBmdW5jdGlvbiBwYXJhbWV0ZXJzLiAqL1xuICBvcHRpb25hbD86IGJvb2xlYW47XG4gIC8qKiByZXN0UGFyYW0gaXMgdHJ1ZSBmb3IgXCIuLi54OiBmb29bXVwiIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICovXG4gIHJlc3RQYXJhbT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBkZXN0cnVjdHVyaW5nIGlzIHRydWUgZm9yIGRlc3RydWN0dXJpbmcgYmluZCBwYXJhbWV0ZXJzLCB3aGljaCByZXF1aXJlXG4gICAqIG5vbi1udWxsIGFyZ3VtZW50cyBvbiB0aGUgQ2xvc3VyZSBzaWRlLiAgQ2FuIGxpa2VseSByZW1vdmUgdGhpc1xuICAgKiBvbmNlIFR5cGVTY3JpcHQgbnVsbGFibGUgdHlwZXMgYXJlIGF2YWlsYWJsZS5cbiAgICovXG4gIGRlc3RydWN0dXJpbmc/OiBib29sZWFuO1xuICAvKiogQW55IHJlbWFpbmluZyB0ZXh0IG9uIHRoZSB0YWcsIGUuZy4gdGhlIGRlc2NyaXB0aW9uLiAqL1xuICB0ZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBhbGwgSlNEb2MgdGFncyBhbGxvd2VkIGJ5IHRoZSBDbG9zdXJlIGNvbXBpbGVyLlxuICogQWxsIHRhZ3Mgb3RoZXIgdGhhbiB0aGVzZSBhcmUgZXNjYXBlZCBiZWZvcmUgZW1pdHRpbmcuXG4gKlxuICogTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2UgdGFncyBhcmUgYWxzbyByZWplY3RlZCBieSB0c2lja2xlIHdoZW4gc2VlbiBpblxuICogdGhlIHVzZXItcHJvdmlkZWQgc291cmNlLCBidXQgYWxzbyB0aGF0IHRzaWNrbGUgaXRzZWxmIG1heSBnZW5lcmF0ZSBzb21lIG9mIHRoZXNlLlxuICogVGhpcyB3aGl0ZWxpc3QgaXMganVzdCB1c2VkIGZvciBjb250cm9sbGluZyB0aGUgb3V0cHV0LlxuICpcbiAqIFRoZSBwdWJsaWMgQ2xvc3VyZSBkb2NzIGRvbid0IGxpc3QgYWxsIHRoZSB0YWdzIGl0IGFsbG93czsgdGhpcyBsaXN0IGNvbWVzXG4gKiBmcm9tIHRoZSBjb21waWxlciBzb3VyY2UgaXRzZWxmLlxuICogaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2Jsb2IvbWFzdGVyL3NyYy9jb20vZ29vZ2xlL2phdmFzY3JpcHQvanNjb21wL3BhcnNpbmcvQW5ub3RhdGlvbi5qYXZhXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvYmxvYi9tYXN0ZXIvc3JjL2NvbS9nb29nbGUvamF2YXNjcmlwdC9qc2NvbXAvcGFyc2luZy9QYXJzZXJDb25maWcucHJvcGVydGllc1xuICovXG5jb25zdCBKU0RPQ19UQUdTX09VVFBVVF9XSElURUxJU1QgPSBuZXcgU2V0KFtcbiAgJ2Fic3RyYWN0JyxcbiAgJ2FyZ3VtZW50JyxcbiAgJ2F1dGhvcicsXG4gICdjb25zdCcsXG4gICdjb25zdGFudCcsXG4gICdjb25zdHJ1Y3RvcicsXG4gICdjb3B5cmlnaHQnLFxuICAnZGVmaW5lJyxcbiAgJ2RlcHJlY2F0ZWQnLFxuICAnZGVzYycsXG4gICdkaWN0JyxcbiAgJ2Rpc3Bvc2VzJyxcbiAgJ2VuaGFuY2UnLFxuICAnZW5oYW5jZWFibGUnLFxuICAnZW51bScsXG4gICdleHBvcnQnLFxuICAnZXhwb3NlJyxcbiAgJ2V4dGVuZHMnLFxuICAnZXh0ZXJucycsXG4gICdmaWxlb3ZlcnZpZXcnLFxuICAnZmluYWwnLFxuICAnaGFzc295ZGVsY2FsbCcsXG4gICdoYXNzb3lkZWx0ZW1wbGF0ZScsXG4gICdoaWRkZW4nLFxuICAnaWQnLFxuICAnaWRHZW5lcmF0b3InLFxuICAnaWdub3JlJyxcbiAgJ2ltcGxlbWVudHMnLFxuICAnaW1wbGljaXRDYXN0JyxcbiAgJ2luaGVyaXREb2MnLFxuICAnaW50ZXJmYWNlJyxcbiAgJ2phZ2dlckluamVjdCcsXG4gICdqYWdnZXJNb2R1bGUnLFxuICAnamFnZ2VyUHJvdmlkZScsXG4gICdqYWdnZXJQcm92aWRlUHJvbWlzZScsXG4gICdsZW5kcycsXG4gICdsaWNlbnNlJyxcbiAgJ2xpbmsnLFxuICAnbWVhbmluZycsXG4gICdtb2RpZmllcycsXG4gICdtb2ROYW1lJyxcbiAgJ21vZHMnLFxuICAnbmdJbmplY3QnLFxuICAnbm9hbGlhcycsXG4gICdub2NvbGxhcHNlJyxcbiAgJ25vY29tcGlsZScsXG4gICdub3NpZGVlZmZlY3RzJyxcbiAgJ292ZXJyaWRlJyxcbiAgJ293bmVyJyxcbiAgJ3BhY2thZ2UnLFxuICAncGFyYW0nLFxuICAncGludG9tb2R1bGUnLFxuICAncG9seW1lcicsXG4gICdwb2x5bWVyQmVoYXZpb3InLFxuICAncHJlc2VydmUnLFxuICAncHJlc2VydmVUcnknLFxuICAncHJpdmF0ZScsXG4gICdwcm90ZWN0ZWQnLFxuICAncHVibGljJyxcbiAgJ3JlY29yZCcsXG4gICdyZXF1aXJlY3NzJyxcbiAgJ3JlcXVpcmVzJyxcbiAgJ3JldHVybicsXG4gICdyZXR1cm5zJyxcbiAgJ3NlZScsXG4gICdzdHJ1Y3QnLFxuICAnc3VwcHJlc3MnLFxuICAndGVtcGxhdGUnLFxuICAndGhpcycsXG4gICd0aHJvd3MnLFxuICAndHlwZScsXG4gICd0eXBlZGVmJyxcbiAgJ3VucmVzdHJpY3RlZCcsXG4gICd2ZXJzaW9uJyxcbiAgJ3dpemFjdGlvbicsXG4gICd3aXptb2R1bGUnLFxuXSk7XG5cbi8qKlxuICogQSBsaXN0IG9mIEpTRG9jIEB0YWdzIHRoYXQgYXJlIG5ldmVyIGFsbG93ZWQgaW4gVHlwZVNjcmlwdCBzb3VyY2UuIFRoZXNlIGFyZSBDbG9zdXJlIHRhZ3MgdGhhdFxuICogY2FuIGJlIGV4cHJlc3NlZCBpbiB0aGUgVHlwZVNjcmlwdCBzdXJmYWNlIHN5bnRheC4gQXMgdHNpY2tsZSdzIGVtaXQgd2lsbCBtYW5nbGUgdHlwZSBuYW1lcyxcbiAqIHRoZXNlIHdpbGwgY2F1c2UgQ2xvc3VyZSBDb21waWxlciBpc3N1ZXMgYW5kIHNob3VsZCBub3QgYmUgdXNlZC5cbiAqIE5vdGU6ICd0ZW1wbGF0ZScgaXMgc3BlY2lhbC1jYXNlZCBiZWxvdzsgc2VlIHdoZXJlIHRoaXMgc2V0IGlzIHF1ZXJpZWQuXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfSU5QVVRfQkxBQ0tMSVNUID0gbmV3IFNldChbXG4gICdhdWdtZW50cycsICdjbGFzcycsICAgICAgJ2NvbnN0cnVjdHMnLCAnY29uc3RydWN0b3InLCAnZW51bScsICAgICAgJ2V4dGVuZHMnLCAnZmllbGQnLFxuICAnZnVuY3Rpb24nLCAnaW1wbGVtZW50cycsICdpbnRlcmZhY2UnLCAgJ2xlbmRzJywgICAgICAgJ25hbWVzcGFjZScsICdwcml2YXRlJywgJ3B1YmxpYycsXG4gICdyZWNvcmQnLCAgICdzdGF0aWMnLCAgICAgJ3RlbXBsYXRlJywgICAndGhpcycsICAgICAgICAndHlwZScsICAgICAgJ3R5cGVkZWYnLFxuXSk7XG5cbi8qKlxuICogSlNEb2MgXFxAdGFncyB0aGF0IG1pZ2h0IGluY2x1ZGUgYSB7dHlwZX0gYWZ0ZXIgdGhlbS4gU3BlY2lmeWluZyBhIHR5cGUgaXMgZm9yYmlkZGVuLCBzaW5jZSBpdFxuICogd291bGQgY29sbGlkZSB3aXRoIFR5cGVTY3JpcHQncyB0eXBlIGluZm9ybWF0aW9uLiBJZiBhIHR5cGUgKmlzKiBnaXZlbiwgdGhlIGVudGlyZSB0YWcgd2lsbCBiZVxuICogaWdub3JlZC5cbiAqL1xuY29uc3QgSlNET0NfVEFHU19XSVRIX1RZUEVTID0gbmV3IFNldChbXG4gICdjb25zdCcsXG4gICdkZWZpbmUnLFxuICAnZXhwb3J0JyxcbiAgJ3BhcmFtJyxcbiAgJ3JldHVybicsXG5dKTtcblxuLyoqXG4gKiBSZXN1bHQgb2YgcGFyc2luZyBhIEpTRG9jIGNvbW1lbnQuIFN1Y2ggY29tbWVudHMgZXNzZW50aWFsbHkgYXJlIGJ1aWx0IG9mIGEgbGlzdCBvZiB0YWdzLlxuICogSW4gYWRkaXRpb24gdG8gdGhlIHRhZ3MsIHRoaXMgbWlnaHQgYWxzbyBjb250YWluIHdhcm5pbmdzIHRvIGluZGljYXRlIG5vbi1mYXRhbCBwcm9ibGVtc1xuICogd2hpbGUgZmluZGluZyB0aGUgdGFncy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZWRKU0RvY0NvbW1lbnQge1xuICB0YWdzOiBUYWdbXTtcbiAgd2FybmluZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBwYXJzZSBwYXJzZXMgSlNEb2Mgb3V0IG9mIGEgY29tbWVudCBzdHJpbmcuXG4gKiBSZXR1cm5zIG51bGwgaWYgY29tbWVudCBpcyBub3QgSlNEb2MuXG4gKi9cbi8vIFRPRE8obWFydGlucHJvYnN0KTogcmVwcmVzZW50aW5nIEpTRG9jIGFzIGEgbGlzdCBvZiB0YWdzIGlzIHRvbyBzaW1wbGlzdGljLiBXZSBuZWVkIGZ1bmN0aW9uYWxpdHlcbi8vIHN1Y2ggYXMgbWVyZ2luZyAoYmVsb3cpLCBkZS1kdXBsaWNhdGluZyBjZXJ0YWluIHRhZ3MgKEBkZXByZWNhdGVkKSwgYW5kIHNwZWNpYWwgdHJlYXRtZW50IGZvclxuLy8gb3RoZXJzIChlLmcuIEBzdXBwcmVzcykuIFdlIHNob3VsZCBpbnRyb2R1Y2UgYSBwcm9wZXIgbW9kZWwgY2xhc3Mgd2l0aCBhIG1vcmUgc3VpdGFibGUgZGF0YVxuLy8gc3RydWN1cmUgKGUuZy4gYSBNYXA8VGFnTmFtZSwgVmFsdWVzW10+KS5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShjb21tZW50OiB0cy5TeW50aGVzaXplZENvbW1lbnQpOiBQYXJzZWRKU0RvY0NvbW1lbnR8bnVsbCB7XG4gIC8vIFRPRE8oZXZhbm0pOiB0aGlzIGlzIGEgcGlsZSBvZiBoYWNreSByZWdleGVzIGZvciBub3csIGJlY2F1c2Ugd2VcbiAgLy8gd291bGQgcmF0aGVyIHVzZSB0aGUgYmV0dGVyIFR5cGVTY3JpcHQgaW1wbGVtZW50YXRpb24gb2YgSlNEb2NcbiAgLy8gcGFyc2luZy4gIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvNzM5M1xuICBpZiAoY29tbWVudC5raW5kICE9PSB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEpIHJldHVybiBudWxsO1xuICAvLyBjb21tZW50LnRleHQgZG9lcyBub3QgaW5jbHVkZSAvKiBhbmQgKi8sIHNvIG11c3Qgc3RhcnQgd2l0aCAnKicgZm9yIEpTRG9jLlxuICBpZiAoY29tbWVudC50ZXh0WzBdICE9PSAnKicpIHJldHVybiBudWxsO1xuICBjb25zdCB0ZXh0ID0gY29tbWVudC50ZXh0LnN1YnN0cmluZygxKS50cmltKCk7XG4gIHJldHVybiBwYXJzZUNvbnRlbnRzKHRleHQpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGlucHV0IHN0cmluZyB3aXRoIGxpbmUgZW5kaW5ncyBub3JtYWxpemVkIHRvICdcXG4nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplTGluZUVuZGluZ3MoaW5wdXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpO1xufVxuXG4vKipcbiAqIHBhcnNlQ29udGVudHMgcGFyc2VzIEpTRG9jIG91dCBvZiBhIGNvbW1lbnQgdGV4dC5cbiAqIFJldHVybnMgbnVsbCBpZiBjb21tZW50IGlzIG5vdCBKU0RvYy5cbiAqXG4gKiBAcGFyYW0gY29tbWVudFRleHQgYSBjb21tZW50J3MgdGV4dCBjb250ZW50LCBpLmUuIHRoZSBjb21tZW50IHcvbyAvKiBhbmQgKiAvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VDb250ZW50cyhjb21tZW50VGV4dDogc3RyaW5nKTogUGFyc2VkSlNEb2NDb21tZW50fG51bGwge1xuICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBwcm9wZXIgbGluZSBlbmRpbmdzIGJlZm9yZSBwYXJzaW5nIG9uIFdpbmRvd3MuXG4gIGNvbW1lbnRUZXh0ID0gbm9ybWFsaXplTGluZUVuZGluZ3MoY29tbWVudFRleHQpO1xuICAvLyBTdHJpcCBhbGwgdGhlIFwiICogXCIgYml0cyBmcm9tIHRoZSBmcm9udCBvZiBlYWNoIGxpbmUuXG4gIGNvbW1lbnRUZXh0ID0gY29tbWVudFRleHQucmVwbGFjZSgvXlxccypcXCo/ID8vZ20sICcnKTtcbiAgY29uc3QgbGluZXMgPSBjb21tZW50VGV4dC5zcGxpdCgnXFxuJyk7XG4gIGNvbnN0IHRhZ3M6IFRhZ1tdID0gW107XG4gIGNvbnN0IHdhcm5pbmdzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICBsZXQgbWF0Y2ggPSBsaW5lLm1hdGNoKC9eXFxzKkAoXFxTKykgKiguKikvKTtcbiAgICBpZiAobWF0Y2gpIHtcbiAgICAgIGxldCBbXywgdGFnTmFtZSwgdGV4dF0gPSBtYXRjaDtcbiAgICAgIGlmICh0YWdOYW1lID09PSAncmV0dXJucycpIHtcbiAgICAgICAgLy8gQSBzeW5vbnltIGZvciAncmV0dXJuJy5cbiAgICAgICAgdGFnTmFtZSA9ICdyZXR1cm4nO1xuICAgICAgfVxuICAgICAgbGV0IHR5cGU6IHN0cmluZ3x1bmRlZmluZWQ7XG4gICAgICBpZiAoSlNET0NfVEFHU19JTlBVVF9CTEFDS0xJU1QuaGFzKHRhZ05hbWUpKSB7XG4gICAgICAgIGlmICh0YWdOYW1lICE9PSAndGVtcGxhdGUnKSB7XG4gICAgICAgICAgLy8gVGVsbCB0aGUgdXNlciB0byBub3Qgd3JpdGUgYmxhY2tsaXN0ZWQgdGFncywgYmVjYXVzZSB0aGVyZSBpcyBUU1xuICAgICAgICAgIC8vIHN5bnRheCBhdmFpbGFibGUgZm9yIHRoZW0uXG4gICAgICAgICAgd2FybmluZ3MucHVzaChgQCR7dGFnTmFtZX0gYW5ub3RhdGlvbnMgYXJlIHJlZHVuZGFudCB3aXRoIFR5cGVTY3JpcHQgZXF1aXZhbGVudHNgKTtcbiAgICAgICAgICBjb250aW51ZTsgIC8vIERyb3AgdGhlIHRhZyBzbyBDbG9zdXJlIHdvbid0IHByb2Nlc3MgaXQuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQnV0IEB0ZW1wbGF0ZSBpbiBwYXJ0aWN1bGFyIGlzIHNwZWNpYWw6IGl0J3Mgb2sgZm9yIHRoZSB1c2VyIHRvXG4gICAgICAgICAgLy8gd3JpdGUgaXQgZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMsIGJ1dCB3ZSBkb24ndCB3YW50IHRoZVxuICAgICAgICAgIC8vIHVzZXItd3JpdHRlbiBvbmUgbWFraW5nIGl0IGludG8gdGhlIG91dHB1dCBiZWNhdXNlIENsb3N1cmUgaW50ZXJwcmV0c1xuICAgICAgICAgIC8vIGl0IGFzIHdlbGwuXG4gICAgICAgICAgLy8gRHJvcCBpdCB3aXRob3V0IGFueSB3YXJuaW5nLiAgKFdlIGFsc28gZG9uJ3QgZW5zdXJlIGl0cyBjb3JyZWN0bmVzcy4pXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoSlNET0NfVEFHU19XSVRIX1RZUEVTLmhhcyh0YWdOYW1lKSkge1xuICAgICAgICBpZiAodGV4dFswXSA9PT0gJ3snKSB7XG4gICAgICAgICAgd2FybmluZ3MucHVzaChcbiAgICAgICAgICAgICAgYHRoZSB0eXBlIGFubm90YXRpb24gb24gQCR7dGFnTmFtZX0gaXMgcmVkdW5kYW50IHdpdGggaXRzIFR5cGVTY3JpcHQgdHlwZSwgYCArXG4gICAgICAgICAgICAgIGByZW1vdmUgdGhlIHsuLi59IHBhcnRgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWdOYW1lID09PSAnc3VwcHJlc3MnKSB7XG4gICAgICAgIGNvbnN0IHR5cGVNYXRjaCA9IHRleHQubWF0Y2goL15cXHsoLiopXFx9KC4qKSQvKTtcbiAgICAgICAgaWYgKHR5cGVNYXRjaCkge1xuICAgICAgICAgIFssIHR5cGUsIHRleHRdID0gdHlwZU1hdGNoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYG1hbGZvcm1lZCBAJHt0YWdOYW1lfSB0YWc6IFwiJHt0ZXh0fVwiYCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gJ2RpY3QnKSB7XG4gICAgICAgIHdhcm5pbmdzLnB1c2goJ3VzZSBpbmRleCBzaWduYXR1cmVzIChgW2s6IHN0cmluZ106IHR5cGVgKSBpbnN0ZWFkIG9mIEBkaWN0Jyk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBHcmFiIHRoZSBwYXJhbWV0ZXIgbmFtZSBmcm9tIEBwYXJhbSB0YWdzLlxuICAgICAgbGV0IHBhcmFtZXRlck5hbWU6IHN0cmluZ3x1bmRlZmluZWQ7XG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ3BhcmFtJykge1xuICAgICAgICBtYXRjaCA9IHRleHQubWF0Y2goL14oXFxTKykgPyguKikvKTtcbiAgICAgICAgaWYgKG1hdGNoKSBbXywgcGFyYW1ldGVyTmFtZSwgdGV4dF0gPSBtYXRjaDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFnOiBUYWcgPSB7dGFnTmFtZX07XG4gICAgICBpZiAocGFyYW1ldGVyTmFtZSkgdGFnLnBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lO1xuICAgICAgaWYgKHRleHQpIHRhZy50ZXh0ID0gdGV4dDtcbiAgICAgIGlmICh0eXBlKSB0YWcudHlwZSA9IHR5cGU7XG4gICAgICB0YWdzLnB1c2godGFnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGV4dCB3aXRob3V0IGEgcHJlY2VkaW5nIEB0YWcgb24gaXQgaXMgZWl0aGVyIHRoZSBwbGFpbiB0ZXh0XG4gICAgICAvLyBkb2N1bWVudGF0aW9uIG9yIGEgY29udGludWF0aW9uIG9mIGEgcHJldmlvdXMgdGFnLlxuICAgICAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRhZ3MucHVzaCh7dGFnTmFtZTogJycsIHRleHQ6IGxpbmV9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0YWdzW3RhZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGxhc3RUYWcudGV4dCA9IChsYXN0VGFnLnRleHQgfHwgJycpICsgJ1xcbicgKyBsaW5lO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAod2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB7dGFncywgd2FybmluZ3N9O1xuICB9XG4gIHJldHVybiB7dGFnc307XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyBhIFRhZyBpbnRvIGEgc3RyaW5nIHVzYWJsZSBpbiBhIGNvbW1lbnQuXG4gKiBSZXR1cm5zIGEgc3RyaW5nIGxpa2UgXCIgQGZvbyB7YmFyfSBiYXpcIiAobm90ZSB0aGUgd2hpdGVzcGFjZSkuXG4gKi9cbmZ1bmN0aW9uIHRhZ1RvU3RyaW5nKHRhZzogVGFnLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIGxldCBvdXQgPSAnJztcbiAgaWYgKHRhZy50YWdOYW1lKSB7XG4gICAgaWYgKCFKU0RPQ19UQUdTX09VVFBVVF9XSElURUxJU1QuaGFzKHRhZy50YWdOYW1lKSB8fCBlc2NhcGVFeHRyYVRhZ3MuaGFzKHRhZy50YWdOYW1lKSkge1xuICAgICAgLy8gRXNjYXBlIHRhZ3Mgd2UgZG9uJ3QgdW5kZXJzdGFuZC4gIFRoaXMgaXMgYSBzdWJ0bGVcbiAgICAgIC8vIGNvbXByb21pc2UgYmV0d2VlbiBtdWx0aXBsZSBpc3N1ZXMuXG4gICAgICAvLyAxKSBJZiB3ZSBwYXNzIHRocm91Z2ggdGhlc2Ugbm9uLUNsb3N1cmUgdGFncywgdGhlIHVzZXIgd2lsbFxuICAgICAgLy8gICAgZ2V0IGEgd2FybmluZyBmcm9tIENsb3N1cmUsIGFuZCB0aGUgcG9pbnQgb2YgdHNpY2tsZSBpc1xuICAgICAgLy8gICAgdG8gaW5zdWxhdGUgdGhlIHVzZXIgZnJvbSBDbG9zdXJlLlxuICAgICAgLy8gMikgVGhlIG91dHB1dCBvZiB0c2lja2xlIGlzIGZvciBDbG9zdXJlIGJ1dCBhbHNvIG1heSBiZSByZWFkXG4gICAgICAvLyAgICBieSBodW1hbnMsIGZvciBleGFtcGxlIG5vbi1UeXBlU2NyaXB0IHVzZXJzIG9mIEFuZ3VsYXIuXG4gICAgICAvLyAzKSBGaW5hbGx5LCB3ZSBkb24ndCB3YW50IHRvIHdhcm4gYmVjYXVzZSB1c2VycyBzaG91bGQgYmVcbiAgICAgIC8vICAgIGZyZWUgdG8gYWRkIHdoaWNoZXZlciBKU0RvYyB0aGV5IGZlZWwgbGlrZS4gIElmIHRoZSB1c2VyXG4gICAgICAvLyAgICB3YW50cyBoZWxwIGVuc3VyaW5nIHRoZXkgZGlkbid0IHR5cG8gYSB0YWcsIHRoYXQgaXMgdGhlXG4gICAgICAvLyAgICByZXNwb25zaWJpbGl0eSBvZiBhIGxpbnRlci5cbiAgICAgIG91dCArPSBgIFxcXFxAJHt0YWcudGFnTmFtZX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gYCBAJHt0YWcudGFnTmFtZX1gO1xuICAgIH1cbiAgfVxuICBpZiAodGFnLnR5cGUpIHtcbiAgICBvdXQgKz0gJyB7JztcbiAgICBpZiAodGFnLnJlc3RQYXJhbSkge1xuICAgICAgb3V0ICs9ICcuLi4nO1xuICAgIH1cbiAgICBvdXQgKz0gdGFnLnR5cGU7XG4gICAgaWYgKHRhZy5vcHRpb25hbCkge1xuICAgICAgb3V0ICs9ICc9JztcbiAgICB9XG4gICAgb3V0ICs9ICd9JztcbiAgfVxuICBpZiAodGFnLnBhcmFtZXRlck5hbWUpIHtcbiAgICBvdXQgKz0gJyAnICsgdGFnLnBhcmFtZXRlck5hbWU7XG4gIH1cbiAgaWYgKHRhZy50ZXh0KSB7XG4gICAgb3V0ICs9ICcgJyArIHRhZy50ZXh0LnJlcGxhY2UoL0AvZywgJ1xcXFxAJyk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIFRhZ3MgdGhhdCBtdXN0IG9ubHkgb2NjdXIgb25jZXMgaW4gYSBjb21tZW50IChmaWx0ZXJlZCBiZWxvdykuICovXG5jb25zdCBTSU5HTEVUT05fVEFHUyA9IG5ldyBTZXQoWydkZXByZWNhdGVkJ10pO1xuXG4vKiogVGFncyB0aGF0IGNvbmZsaWN0IHdpdGggXFxAdHlwZSBpbiBDbG9zdXJlIENvbXBpbGVyIChlLmcuIFxcQHBhcmFtKS4gKi9cbmV4cG9ydCBjb25zdCBUQUdTX0NPTkZMSUNUSU5HX1dJVEhfVFlQRSA9IG5ldyBTZXQoWydwYXJhbScsICdyZXR1cm4nXSk7XG5cbi8qKlxuICogQSBzeW50aGVzaXplZCBjb21tZW50IHRoYXQgKHBvc3NpYmx5KSBpbmNsdWRlcyB0aGUgb3JpZ2luYWwgY29tbWVudCByYW5nZSBpdCB3YXMgY3JlYXRlZCBmcm9tLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bnRoZXNpemVkQ29tbWVudFdpdGhPcmlnaW5hbCBleHRlbmRzIHRzLlN5bnRoZXNpemVkQ29tbWVudCB7XG4gIC8qKlxuICAgKiBUaGUgb3JpZ2luYWwgdGV4dCByYW5nZSBvZiB0aGUgY29tbWVudCAocmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBmaWxlJ3MgZnVsbCB0ZXh0KS5cbiAgICovXG4gIG9yaWdpbmFsUmFuZ2U/OiB0cy5UZXh0UmFuZ2U7XG59XG5cbi8qKlxuICogc3ludGhlc2l6ZUxlYWRpbmdDb21tZW50cyBwYXJzZXMgdGhlIGxlYWRpbmcgY29tbWVudHMgb2Ygbm9kZSwgY29udmVydHMgdGhlbVxuICogdG8gc3ludGhldGljIGNvbW1lbnRzLCBhbmQgbWFrZXMgc3VyZSB0aGUgb3JpZ2luYWwgdGV4dCBjb21tZW50cyBkbyBub3QgZ2V0XG4gKiBlbWl0dGVkIGJ5IFR5cGVTY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW50aGVzaXplTGVhZGluZ0NvbW1lbnRzKG5vZGU6IHRzLk5vZGUpOiBTeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWxbXSB7XG4gIGNvbnN0IGV4aXN0aW5nID0gdHMuZ2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKG5vZGUpO1xuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZztcbiAgY29uc3QgdGV4dCA9IG5vZGUuZ2V0RnVsbFRleHQoKTtcbiAgY29uc3Qgc3ludGhDb21tZW50cyA9IGdldExlYWRpbmdDb21tZW50UmFuZ2VzU3ludGhlc2l6ZWQodGV4dCwgbm9kZS5nZXRGdWxsU3RhcnQoKSk7XG4gIGlmIChzeW50aENvbW1lbnRzLmxlbmd0aCkge1xuICAgIHRzLnNldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhub2RlLCBzeW50aENvbW1lbnRzKTtcbiAgICBzdXBwcmVzc0xlYWRpbmdDb21tZW50c1JlY3Vyc2l2ZWx5KG5vZGUpO1xuICB9XG4gIHJldHVybiBzeW50aENvbW1lbnRzO1xufVxuXG4vKipcbiAqIHBhcnNlTGVhZGluZ0NvbW1lbnRSYW5nZXNTeW50aGVzaXplZCBwYXJzZXMgdGhlIGxlYWRpbmcgY29tbWVudCByYW5nZXMgb3V0IG9mIHRoZSBnaXZlbiB0ZXh0IGFuZFxuICogY29udmVydHMgdGhlbSB0byBTeW50aGVzaXplZENvbW1lbnRzLlxuICogQHBhcmFtIG9mZnNldCB0aGUgb2Zmc2V0IG9mIHRleHQgaW4gdGhlIHNvdXJjZSBmaWxlLCBlLmcuIG5vZGUuZ2V0RnVsbFN0YXJ0KCkuXG4gKi9cbi8vIFZpc2libGVGb3JUZXN0aW5nXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXNTeW50aGVzaXplZChcbiAgICB0ZXh0OiBzdHJpbmcsIG9mZnNldCA9IDApOiBTeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWxbXSB7XG4gIGNvbnN0IGNvbW1lbnRzID0gdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXModGV4dCwgMCkgfHwgW107XG4gIHJldHVybiBjb21tZW50cy5tYXAoKGNyKTogU3ludGhlc2l6ZWRDb21tZW50V2l0aE9yaWdpbmFsID0+IHtcbiAgICAvLyBDb25mdXNpbmdseSwgQ29tbWVudFJhbmdlIGluIFR5cGVTY3JpcHQgaW5jbHVkZXMgc3RhcnQgYW5kIGVuZCBtYXJrZXJzLCBidXRcbiAgICAvLyBTeW50aGVzaXplZENvbW1lbnRzIGRvIG5vdC5cbiAgICBjb25zdCBjb21tZW50VGV4dCA9IGNyLmtpbmQgPT09IHRzLlN5bnRheEtpbmQuU2luZ2xlTGluZUNvbW1lbnRUcml2aWEgP1xuICAgICAgICB0ZXh0LnN1YnN0cmluZyhjci5wb3MgKyAyLCBjci5lbmQpIDpcbiAgICAgICAgdGV4dC5zdWJzdHJpbmcoY3IucG9zICsgMiwgY3IuZW5kIC0gMik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNyLFxuICAgICAgdGV4dDogY29tbWVudFRleHQsXG4gICAgICBwb3M6IC0xLFxuICAgICAgZW5kOiAtMSxcbiAgICAgIG9yaWdpbmFsUmFuZ2U6IHtwb3M6IGNyLnBvcyArIG9mZnNldCwgZW5kOiBjci5lbmQgKyBvZmZzZXR9XG4gICAgfTtcbiAgfSk7XG59XG5cbi8qKlxuICogc3VwcHJlc3NDb21tZW50c1JlY3Vyc2l2ZWx5IHByZXZlbnRzIGVtaXQgb2YgbGVhZGluZyBjb21tZW50cyBvbiBub2RlLCBhbmQgYW55IHJlY3Vyc2l2ZSBub2Rlc1xuICogdW5kZXJuZWF0aCBpdCB0aGF0IHN0YXJ0IGF0IHRoZSBzYW1lIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHByZXNzTGVhZGluZ0NvbW1lbnRzUmVjdXJzaXZlbHkobm9kZTogdHMuTm9kZSkge1xuICAvLyBUeXBlU2NyaXB0IGVtaXRzIGxlYWRpbmcgY29tbWVudHMgb24gYSBub2RlLCB1bmxlc3M6XG4gIC8vIC0gdGhlIGNvbW1lbnQgd2FzIGVtaXR0ZWQgYnkgdGhlIHBhcmVudCBub2RlXG4gIC8vIC0gdGhlIG5vZGUgaGFzIHRoZSBOb0xlYWRpbmdDb21tZW50cyBlbWl0IGZsYWcuXG4gIC8vIEhvd2V2ZXIsIHRyYW5zZm9ybWF0aW9uIHN0ZXBzIHNvbWV0aW1lcyBjb3B5IG5vZGVzIHdpdGhvdXQga2VlcGluZyB0aGVpciBlbWl0IGZsYWdzLCBzbyBqdXN0XG4gIC8vIHNldHRpbmcgTm9MZWFkaW5nQ29tbWVudHMgcmVjdXJzaXZlbHkgaXMgbm90IGVub3VnaCwgd2UgbXVzdCBhbHNvIHNldCB0aGUgdGV4dCByYW5nZSB0byBhdm9pZFxuICAvLyB0aGUgY29waWVkIG5vZGUgdG8gaGF2ZSBjb21tZW50cyBlbWl0dGVkLlxuICBjb25zdCBvcmlnaW5hbFN0YXJ0ID0gbm9kZS5nZXRGdWxsU3RhcnQoKTtcbiAgY29uc3QgYWN0dWFsU3RhcnQgPSBub2RlLmdldFN0YXJ0KCk7XG4gIGZ1bmN0aW9uIHN1cHByZXNzQ29tbWVudHNJbnRlcm5hbChub2RlOiB0cy5Ob2RlKTogYm9vbGVhbiB7XG4gICAgdHMuc2V0RW1pdEZsYWdzKG5vZGUsIHRzLkVtaXRGbGFncy5Ob0xlYWRpbmdDb21tZW50cyk7XG4gICAgcmV0dXJuICEhdHMuZm9yRWFjaENoaWxkKG5vZGUsIChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkLnBvcyAhPT0gb3JpZ2luYWxTdGFydCkgcmV0dXJuIHRydWU7XG4gICAgICByZXR1cm4gc3VwcHJlc3NDb21tZW50c0ludGVybmFsKGNoaWxkKTtcbiAgICB9KTtcbiAgfVxuICBzdXBwcmVzc0NvbW1lbnRzSW50ZXJuYWwobm9kZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b1N5bnRoZXNpemVkQ29tbWVudChcbiAgICB0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzPzogU2V0PHN0cmluZz4pOiB0cy5TeW50aGVzaXplZENvbW1lbnQge1xuICByZXR1cm4ge1xuICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICB0ZXh0OiB0b1N0cmluZ1dpdGhvdXRTdGFydEVuZCh0YWdzLCBlc2NhcGVFeHRyYVRhZ3MpLFxuICAgIHBvczogLTEsXG4gICAgZW5kOiAtMSxcbiAgICBoYXNUcmFpbGluZ05ld0xpbmU6IHRydWUsXG4gIH07XG59XG5cbi8qKiBTZXJpYWxpemVzIGEgQ29tbWVudCBvdXQgdG8gYSBzdHJpbmcsIGJ1dCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzdGFydCBhbmQgZW5kIGNvbW1lbnQgdG9rZW5zLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nV2l0aG91dFN0YXJ0RW5kKHRhZ3M6IFRhZ1tdLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIHJldHVybiBzZXJpYWxpemUodGFncywgZmFsc2UsIGVzY2FwZUV4dHJhVGFncyk7XG59XG5cbi8qKiBTZXJpYWxpemVzIGEgQ29tbWVudCBvdXQgdG8gYSBzdHJpbmcgdXNhYmxlIGluIHNvdXJjZSBjb2RlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHRhZ3M6IFRhZ1tdLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIHJldHVybiBzZXJpYWxpemUodGFncywgdHJ1ZSwgZXNjYXBlRXh0cmFUYWdzKTtcbn1cblxuZnVuY3Rpb24gc2VyaWFsaXplKFxuICAgIHRhZ3M6IFRhZ1tdLCBpbmNsdWRlU3RhcnRFbmQ6IGJvb2xlYW4sIGVzY2FwZUV4dHJhVGFncyA9IG5ldyBTZXQ8c3RyaW5nPigpKTogc3RyaW5nIHtcbiAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIGlmICh0YWdzLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IHRhZyA9IHRhZ3NbMF07XG4gICAgaWYgKCh0YWcudGFnTmFtZSA9PT0gJ3R5cGUnIHx8IHRhZy50YWdOYW1lID09PSAndHlwZWRlZicgfHwgdGFnLnRhZ05hbWUgPT09ICdub2NvbGxhcHNlJykgJiZcbiAgICAgICAgKCF0YWcudGV4dCB8fCAhdGFnLnRleHQubWF0Y2goJ1xcbicpKSkge1xuICAgICAgLy8gU3BlY2lhbC1jYXNlIG9uZS1saW5lciBcInR5cGVcIiBhbmQgXCJub2NvbGxhcHNlXCIgdGFncyB0byBmaXQgb24gb25lIGxpbmUsIGUuZy5cbiAgICAgIC8vICAgLyoqIEB0eXBlIHtmb299ICovXG4gICAgICBjb25zdCB0ZXh0ID0gdGFnVG9TdHJpbmcodGFnLCBlc2NhcGVFeHRyYVRhZ3MpO1xuICAgICAgcmV0dXJuIGluY2x1ZGVTdGFydEVuZCA/IGAvKioke3RleHR9ICovYCA6IGAqJHt0ZXh0fSBgO1xuICAgIH1cbiAgICAvLyBPdGhlcndpc2UsIGZhbGwgdGhyb3VnaCB0byB0aGUgbXVsdGktbGluZSBvdXRwdXQuXG4gIH1cblxuICBsZXQgb3V0ID0gaW5jbHVkZVN0YXJ0RW5kID8gJy8qKlxcbicgOiAnKlxcbic7XG4gIGNvbnN0IGVtaXR0ZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgIGlmIChlbWl0dGVkLmhhcyh0YWcudGFnTmFtZSkgJiYgU0lOR0xFVE9OX1RBR1MuaGFzKHRhZy50YWdOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGVtaXR0ZWQuYWRkKHRhZy50YWdOYW1lKTtcbiAgICBvdXQgKz0gJyAqJztcbiAgICAvLyBJZiB0aGUgdGFnVG9TdHJpbmcgaXMgbXVsdGktbGluZSwgaW5zZXJ0IFwiICogXCIgcHJlZml4ZXMgb24gc3Vic2VxdWVudCBsaW5lcy5cbiAgICBvdXQgKz0gdGFnVG9TdHJpbmcodGFnLCBlc2NhcGVFeHRyYVRhZ3MpLnNwbGl0KCdcXG4nKS5qb2luKCdcXG4gKiAnKTtcbiAgICBvdXQgKz0gJ1xcbic7XG4gIH1cbiAgb3V0ICs9IGluY2x1ZGVTdGFydEVuZCA/ICcgKi9cXG4nIDogJyAnO1xuICByZXR1cm4gb3V0O1xufVxuXG4vKiogTWVyZ2VzIG11bHRpcGxlIHRhZ3MgKG9mIHRoZSBzYW1lIHRhZ05hbWUgdHlwZSkgaW50byBhIHNpbmdsZSB1bmlmaWVkIHRhZy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSh0YWdzOiBUYWdbXSk6IFRhZyB7XG4gIGNvbnN0IHRhZ05hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHBhcmFtZXRlck5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGNvbnN0IHRleHRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIC8vIElmIGFueSBvZiB0aGUgdGFncyBhcmUgb3B0aW9uYWwvcmVzdCwgdGhlbiB0aGUgbWVyZ2VkIG91dHB1dCBpcyBvcHRpb25hbC9yZXN0LlxuICBsZXQgb3B0aW9uYWwgPSBmYWxzZTtcbiAgbGV0IHJlc3RQYXJhbSA9IGZhbHNlO1xuICBmb3IgKGNvbnN0IHRhZyBvZiB0YWdzKSB7XG4gICAgdGFnTmFtZXMuYWRkKHRhZy50YWdOYW1lKTtcbiAgICBpZiAodGFnLnBhcmFtZXRlck5hbWUgIT09IHVuZGVmaW5lZCkgcGFyYW1ldGVyTmFtZXMuYWRkKHRhZy5wYXJhbWV0ZXJOYW1lKTtcbiAgICBpZiAodGFnLnR5cGUgIT09IHVuZGVmaW5lZCkgdHlwZXMuYWRkKHRhZy50eXBlKTtcbiAgICBpZiAodGFnLnRleHQgIT09IHVuZGVmaW5lZCkgdGV4dHMuYWRkKHRhZy50ZXh0KTtcbiAgICBpZiAodGFnLm9wdGlvbmFsKSBvcHRpb25hbCA9IHRydWU7XG4gICAgaWYgKHRhZy5yZXN0UGFyYW0pIHJlc3RQYXJhbSA9IHRydWU7XG4gIH1cblxuICBpZiAodGFnTmFtZXMuc2l6ZSAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IG1lcmdlIGRpZmZlcmluZyB0YWdzOiAke0pTT04uc3RyaW5naWZ5KHRhZ3MpfWApO1xuICB9XG4gIGNvbnN0IHRhZ05hbWUgPSB0YWdOYW1lcy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gIGNvbnN0IHBhcmFtZXRlck5hbWUgPVxuICAgICAgcGFyYW1ldGVyTmFtZXMuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHBhcmFtZXRlck5hbWVzKS5qb2luKCdfb3JfJykgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHR5cGUgPSB0eXBlcy5zaXplID4gMCA/IEFycmF5LmZyb20odHlwZXMpLmpvaW4oJ3wnKSA6IHVuZGVmaW5lZDtcbiAgLy8gQHRlbXBsYXRlIHVzZXMgdGV4dCAobm90IHR5cGUhKSB0byBkZWNsYXJlIGl0cyB0eXBlIHBhcmFtZXRlcnMsIHdpdGggJywnLXNlcGFyYXRlZCB0ZXh0LlxuICBjb25zdCBpc1RlbXBsYXRlVGFnID0gdGFnTmFtZSA9PT0gJ3RlbXBsYXRlJztcbiAgY29uc3QgdGV4dCA9IHRleHRzLnNpemUgPiAwID8gQXJyYXkuZnJvbSh0ZXh0cykuam9pbihpc1RlbXBsYXRlVGFnID8gJywnIDogJyAvICcpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0YWc6IFRhZyA9IHt0YWdOYW1lLCBwYXJhbWV0ZXJOYW1lLCB0eXBlLCB0ZXh0fTtcbiAgLy8gTm90ZTogYSBwYXJhbSBjYW4gZWl0aGVyIGJlIG9wdGlvbmFsIG9yIGEgcmVzdCBwYXJhbTsgaWYgd2UgbWVyZ2VkIGFuXG4gIC8vIG9wdGlvbmFsIGFuZCByZXN0IHBhcmFtIHRvZ2V0aGVyLCBwcmVmZXIgbWFya2luZyBpdCBhcyBhIHJlc3QgcGFyYW0uXG4gIGlmIChyZXN0UGFyYW0pIHtcbiAgICB0YWcucmVzdFBhcmFtID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChvcHRpb25hbCkge1xuICAgIHRhZy5vcHRpb25hbCA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIHRhZztcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNkb2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvanNkb2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HOzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBc0NqQzs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCxNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDO1FBQzFDLFVBQVU7UUFDVixVQUFVO1FBQ1YsUUFBUTtRQUNSLE9BQU87UUFDUCxVQUFVO1FBQ1YsYUFBYTtRQUNiLFdBQVc7UUFDWCxRQUFRO1FBQ1IsWUFBWTtRQUNaLE1BQU07UUFDTixNQUFNO1FBQ04sVUFBVTtRQUNWLFNBQVM7UUFDVCxhQUFhO1FBQ2IsTUFBTTtRQUNOLFFBQVE7UUFDUixRQUFRO1FBQ1IsU0FBUztRQUNULFNBQVM7UUFDVCxjQUFjO1FBQ2QsT0FBTztRQUNQLGVBQWU7UUFDZixtQkFBbUI7UUFDbkIsUUFBUTtRQUNSLElBQUk7UUFDSixhQUFhO1FBQ2IsUUFBUTtRQUNSLFlBQVk7UUFDWixjQUFjO1FBQ2QsWUFBWTtRQUNaLFdBQVc7UUFDWCxjQUFjO1FBQ2QsY0FBYztRQUNkLGVBQWU7UUFDZixzQkFBc0I7UUFDdEIsT0FBTztRQUNQLFNBQVM7UUFDVCxNQUFNO1FBQ04sU0FBUztRQUNULFVBQVU7UUFDVixTQUFTO1FBQ1QsTUFBTTtRQUNOLFVBQVU7UUFDVixTQUFTO1FBQ1QsWUFBWTtRQUNaLFdBQVc7UUFDWCxlQUFlO1FBQ2YsVUFBVTtRQUNWLE9BQU87UUFDUCxTQUFTO1FBQ1QsT0FBTztRQUNQLGFBQWE7UUFDYixTQUFTO1FBQ1QsaUJBQWlCO1FBQ2pCLFVBQVU7UUFDVixhQUFhO1FBQ2IsU0FBUztRQUNULFdBQVc7UUFDWCxRQUFRO1FBQ1IsUUFBUTtRQUNSLFlBQVk7UUFDWixVQUFVO1FBQ1YsUUFBUTtRQUNSLFNBQVM7UUFDVCxLQUFLO1FBQ0wsUUFBUTtRQUNSLFVBQVU7UUFDVixVQUFVO1FB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QUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3RFLDJGQUEyRjtRQUMzRixNQUFNLGFBQWEsR0FBRyxPQUFPLEtBQUssVUFBVSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUM5RixNQUFNLEdBQUcsR0FBUSxFQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDO1FBQ3RELHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUsSUFBSSxTQUFTLEVBQUU7WUFDYixHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN0QjthQUFNLElBQUksUUFBUSxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQ3JCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBcENELHNCQW9DQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKlxuICogVHlwZVNjcmlwdCBoYXMgYW4gQVBJIGZvciBKU0RvYyBhbHJlYWR5LCBidXQgaXQncyBub3QgZXhwb3NlZC5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvNzM5M1xuICogRm9yIG5vdyB3ZSBjcmVhdGUgdHlwZXMgdGhhdCBhcmUgc2ltaWxhciB0byB0aGVpcnMgc28gdGhhdCBtaWdyYXRpbmdcbiAqIHRvIHRoZWlyIEFQSSB3aWxsIGJlIGVhc2llci4gIFNlZSBlLmcuIHRzLkpTRG9jVGFnIGFuZCB0cy5KU0RvY0NvbW1lbnQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnIHtcbiAgLyoqXG4gICAqIHRhZ05hbWUgaXMgZS5nLiBcInBhcmFtXCIgaW4gYW4gQHBhcmFtIGRlY2xhcmF0aW9uLiAgSXQgaXMgdGhlIGVtcHR5IHN0cmluZ1xuICAgKiBmb3IgdGhlIHBsYWluIHRleHQgZG9jdW1lbnRhdGlvbiB0aGF0IG9jY3VycyBiZWZvcmUgYW55IEBmb28gbGluZXMuXG4gICAqL1xuICB0YWdOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBwYXJhbWV0ZXJOYW1lIGlzIHRoZSB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gcGFyYW1ldGVyLCBlLmcuIFwiZm9vXCJcbiAgICogaW4gYFxcQHBhcmFtIGZvbyBUaGUgZm9vIHBhcmFtYFxuICAgKi9cbiAgcGFyYW1ldGVyTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGEgSlNEb2MgXFxAcGFyYW0sIFxcQHR5cGUgZXRjIHRhZywgcmVuZGVyZWQgaW4gY3VybHkgYnJhY2VzLlxuICAgKiBDYW4gYWxzbyBob2xkIHRoZSB0eXBlIG9mIGFuIFxcQHN1cHByZXNzLlxuICAgKi9cbiAgdHlwZT86IHN0cmluZztcbiAgLyoqIG9wdGlvbmFsIGlzIHRydWUgZm9yIG9wdGlvbmFsIGZ1bmN0aW9uIHBhcmFtZXRlcnMuICovXG4gIG9wdGlvbmFsPzogYm9vbGVhbjtcbiAgLyoqIHJlc3RQYXJhbSBpcyB0cnVlIGZvciBcIi4uLng6IGZvb1tdXCIgZnVuY3Rpb24gcGFyYW1ldGVycy4gKi9cbiAgcmVzdFBhcmFtPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIGRlc3RydWN0dXJpbmcgaXMgdHJ1ZSBmb3IgZGVzdHJ1Y3R1cmluZyBiaW5kIHBhcmFtZXRlcnMsIHdoaWNoIHJlcXVpcmVcbiAgICogbm9uLW51bGwgYXJndW1lbnRzIG9uIHRoZSBDbG9zdXJlIHNpZGUuICBDYW4gbGlrZWx5IHJlbW92ZSB0aGlzXG4gICAqIG9uY2UgVHlwZVNjcmlwdCBudWxsYWJsZSB0eXBlcyBhcmUgYXZhaWxhYmxlLlxuICAgKi9cbiAgZGVzdHJ1Y3R1cmluZz86IGJvb2xlYW47XG4gIC8qKiBBbnkgcmVtYWluaW5nIHRleHQgb24gdGhlIHRhZywgZS5nLiB0aGUgZGVzY3JpcHRpb24uICovXG4gIHRleHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBsaXN0IG9mIGFsbCBKU0RvYyB0YWdzIGFsbG93ZWQgYnkgdGhlIENsb3N1cmUgY29tcGlsZXIuXG4gKiBBbGwgdGFncyBvdGhlciB0aGFuIHRoZXNlIGFyZSBlc2NhcGVkIGJlZm9yZSBlbWl0dGluZy5cbiAqXG4gKiBOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSB0YWdzIGFyZSBhbHNvIHJlamVjdGVkIGJ5IHRzaWNrbGUgd2hlbiBzZWVuIGluXG4gKiB0aGUgdXNlci1wcm92aWRlZCBzb3VyY2UsIGJ1dCBhbHNvIHRoYXQgdHNpY2tsZSBpdHNlbGYgbWF5IGdlbmVyYXRlIHNvbWUgb2YgdGhlc2UuXG4gKiBUaGlzIHdoaXRlbGlzdCBpcyBqdXN0IHVzZWQgZm9yIGNvbnRyb2xsaW5nIHRoZSBvdXRwdXQuXG4gKlxuICogVGhlIHB1YmxpYyBDbG9zdXJlIGRvY3MgZG9uJ3QgbGlzdCBhbGwgdGhlIHRhZ3MgaXQgYWxsb3dzOyB0aGlzIGxpc3QgY29tZXNcbiAqIGZyb20gdGhlIGNvbXBpbGVyIHNvdXJjZSBpdHNlbGYuXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZ29vZ2xlL2Nsb3N1cmUtY29tcGlsZXIvYmxvYi9tYXN0ZXIvc3JjL2NvbS9nb29nbGUvamF2YXNjcmlwdC9qc2NvbXAvcGFyc2luZy9Bbm5vdGF0aW9uLmphdmFcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9nb29nbGUvY2xvc3VyZS1jb21waWxlci9ibG9iL21hc3Rlci9zcmMvY29tL2dvb2dsZS9qYXZhc2NyaXB0L2pzY29tcC9wYXJzaW5nL1BhcnNlckNvbmZpZy5wcm9wZXJ0aWVzXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfT1VUUFVUX1dISVRFTElTVCA9IG5ldyBTZXQoW1xuICAnYWJzdHJhY3QnLFxuICAnYXJndW1lbnQnLFxuICAnYXV0aG9yJyxcbiAgJ2NvbnN0JyxcbiAgJ2NvbnN0YW50JyxcbiAgJ2NvbnN0cnVjdG9yJyxcbiAgJ2NvcHlyaWdodCcsXG4gICdkZWZpbmUnLFxuICAnZGVwcmVjYXRlZCcsXG4gICdkZXNjJyxcbiAgJ2RpY3QnLFxuICAnZGlzcG9zZXMnLFxuICAnZW5oYW5jZScsXG4gICdlbmhhbmNlYWJsZScsXG4gICdlbnVtJyxcbiAgJ2V4cG9ydCcsXG4gICdleHBvc2UnLFxuICAnZXh0ZW5kcycsXG4gICdleHRlcm5zJyxcbiAgJ2ZpbGVvdmVydmlldycsXG4gICdmaW5hbCcsXG4gICdoYXNzb3lkZWxjYWxsJyxcbiAgJ2hhc3NveWRlbHRlbXBsYXRlJyxcbiAgJ2hpZGRlbicsXG4gICdpZCcsXG4gICdpZEdlbmVyYXRvcicsXG4gICdpZ25vcmUnLFxuICAnaW1wbGVtZW50cycsXG4gICdpbXBsaWNpdENhc3QnLFxuICAnaW5oZXJpdERvYycsXG4gICdpbnRlcmZhY2UnLFxuICAnamFnZ2VySW5qZWN0JyxcbiAgJ2phZ2dlck1vZHVsZScsXG4gICdqYWdnZXJQcm92aWRlJyxcbiAgJ2phZ2dlclByb3ZpZGVQcm9taXNlJyxcbiAgJ2xlbmRzJyxcbiAgJ2xpY2Vuc2UnLFxuICAnbGluaycsXG4gICdtZWFuaW5nJyxcbiAgJ21vZGlmaWVzJyxcbiAgJ21vZE5hbWUnLFxuICAnbW9kcycsXG4gICduZ0luamVjdCcsXG4gICdub2FsaWFzJyxcbiAgJ25vY29sbGFwc2UnLFxuICAnbm9jb21waWxlJyxcbiAgJ25vc2lkZWVmZmVjdHMnLFxuICAnb3ZlcnJpZGUnLFxuICAnb3duZXInLFxuICAncGFja2FnZScsXG4gICdwYXJhbScsXG4gICdwaW50b21vZHVsZScsXG4gICdwb2x5bWVyJyxcbiAgJ3BvbHltZXJCZWhhdmlvcicsXG4gICdwcmVzZXJ2ZScsXG4gICdwcmVzZXJ2ZVRyeScsXG4gICdwcml2YXRlJyxcbiAgJ3Byb3RlY3RlZCcsXG4gICdwdWJsaWMnLFxuICAncmVjb3JkJyxcbiAgJ3JlcXVpcmVjc3MnLFxuICAncmVxdWlyZXMnLFxuICAncmV0dXJuJyxcbiAgJ3JldHVybnMnLFxuICAnc2VlJyxcbiAgJ3N0cnVjdCcsXG4gICdzdXBwcmVzcycsXG4gICd0ZW1wbGF0ZScsXG4gICd0aGlzJyxcbiAgJ3Rocm93cycsXG4gICd0eXBlJyxcbiAgJ3R5cGVkZWYnLFxuICAndW5yZXN0cmljdGVkJyxcbiAgJ3ZlcnNpb24nLFxuICAnd2l6YWN0aW9uJyxcbiAgJ3dpem1vZHVsZScsXG5dKTtcblxuLyoqXG4gKiBBIGxpc3Qgb2YgSlNEb2MgQHRhZ3MgdGhhdCBhcmUgbmV2ZXIgYWxsb3dlZCBpbiBUeXBlU2NyaXB0IHNvdXJjZS4gVGhlc2UgYXJlIENsb3N1cmUgdGFncyB0aGF0XG4gKiBjYW4gYmUgZXhwcmVzc2VkIGluIHRoZSBUeXBlU2NyaXB0IHN1cmZhY2Ugc3ludGF4LiBBcyB0c2lja2xlJ3MgZW1pdCB3aWxsIG1hbmdsZSB0eXBlIG5hbWVzLFxuICogdGhlc2Ugd2lsbCBjYXVzZSBDbG9zdXJlIENvbXBpbGVyIGlzc3VlcyBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkLlxuICogTm90ZTogJ3RlbXBsYXRlJyBpcyBzcGVjaWFsLWNhc2VkIGJlbG93OyBzZWUgd2hlcmUgdGhpcyBzZXQgaXMgcXVlcmllZC5cbiAqL1xuY29uc3QgSlNET0NfVEFHU19JTlBVVF9CTEFDS0xJU1QgPSBuZXcgU2V0KFtcbiAgJ2F1Z21lbnRzJywgJ2NsYXNzJywgICAgICAnY29uc3RydWN0cycsICdjb25zdHJ1Y3RvcicsICdlbnVtJywgICAgICAnZXh0ZW5kcycsICdmaWVsZCcsXG4gICdmdW5jdGlvbicsICdpbXBsZW1lbnRzJywgJ2ludGVyZmFjZScsICAnbGVuZHMnLCAgICAgICAnbmFtZXNwYWNlJywgJ3ByaXZhdGUnLCAncHJvdGVjdGVkJyxcbiAgJ3B1YmxpYycsICAgJ3JlY29yZCcsICAgICAnc3RhdGljJywgICAgICd0ZW1wbGF0ZScsICAgICd0aGlzJywgICAgICAndHlwZScsICAgICd0eXBlZGVmJyxcbl0pO1xuXG4vKipcbiAqIEpTRG9jIFxcQHRhZ3MgdGhhdCBtaWdodCBpbmNsdWRlIGEge3R5cGV9IGFmdGVyIHRoZW0uIFNwZWNpZnlpbmcgYSB0eXBlIGlzIGZvcmJpZGRlbiwgc2luY2UgaXRcbiAqIHdvdWxkIGNvbGxpZGUgd2l0aCBUeXBlU2NyaXB0J3MgdHlwZSBpbmZvcm1hdGlvbi4gSWYgYSB0eXBlICppcyogZ2l2ZW4sIHRoZSBlbnRpcmUgdGFnIHdpbGwgYmVcbiAqIGlnbm9yZWQuXG4gKi9cbmNvbnN0IEpTRE9DX1RBR1NfV0lUSF9UWVBFUyA9IG5ldyBTZXQoW1xuICAnY29uc3QnLFxuICAnZGVmaW5lJyxcbiAgJ2V4cG9ydCcsXG4gICdwYXJhbScsXG4gICdyZXR1cm4nLFxuXSk7XG5cbi8qKlxuICogUmVzdWx0IG9mIHBhcnNpbmcgYSBKU0RvYyBjb21tZW50LiBTdWNoIGNvbW1lbnRzIGVzc2VudGlhbGx5IGFyZSBidWlsdCBvZiBhIGxpc3Qgb2YgdGFncy5cbiAqIEluIGFkZGl0aW9uIHRvIHRoZSB0YWdzLCB0aGlzIG1pZ2h0IGFsc28gY29udGFpbiB3YXJuaW5ncyB0byBpbmRpY2F0ZSBub24tZmF0YWwgcHJvYmxlbXNcbiAqIHdoaWxlIGZpbmRpbmcgdGhlIHRhZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyc2VkSlNEb2NDb21tZW50IHtcbiAgdGFnczogVGFnW107XG4gIHdhcm5pbmdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogcGFyc2UgcGFyc2VzIEpTRG9jIG91dCBvZiBhIGNvbW1lbnQgc3RyaW5nLlxuICogUmV0dXJucyBudWxsIGlmIGNvbW1lbnQgaXMgbm90IEpTRG9jLlxuICovXG4vLyBUT0RPKG1hcnRpbnByb2JzdCk6IHJlcHJlc2VudGluZyBKU0RvYyBhcyBhIGxpc3Qgb2YgdGFncyBpcyB0b28gc2ltcGxpc3RpYy4gV2UgbmVlZCBmdW5jdGlvbmFsaXR5XG4vLyBzdWNoIGFzIG1lcmdpbmcgKGJlbG93KSwgZGUtZHVwbGljYXRpbmcgY2VydGFpbiB0YWdzIChAZGVwcmVjYXRlZCksIGFuZCBzcGVjaWFsIHRyZWF0bWVudCBmb3Jcbi8vIG90aGVycyAoZS5nLiBAc3VwcHJlc3MpLiBXZSBzaG91bGQgaW50cm9kdWNlIGEgcHJvcGVyIG1vZGVsIGNsYXNzIHdpdGggYSBtb3JlIHN1aXRhYmxlIGRhdGFcbi8vIHN0cnVjdXJlIChlLmcuIGEgTWFwPFRhZ05hbWUsIFZhbHVlc1tdPikuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoY29tbWVudDogdHMuU3ludGhlc2l6ZWRDb21tZW50KTogUGFyc2VkSlNEb2NDb21tZW50fG51bGwge1xuICAvLyBUT0RPKGV2YW5tKTogdGhpcyBpcyBhIHBpbGUgb2YgaGFja3kgcmVnZXhlcyBmb3Igbm93LCBiZWNhdXNlIHdlXG4gIC8vIHdvdWxkIHJhdGhlciB1c2UgdGhlIGJldHRlciBUeXBlU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIEpTRG9jXG4gIC8vIHBhcnNpbmcuICBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzczOTNcbiAgaWYgKGNvbW1lbnQua2luZCAhPT0gdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhKSByZXR1cm4gbnVsbDtcbiAgLy8gY29tbWVudC50ZXh0IGRvZXMgbm90IGluY2x1ZGUgLyogYW5kICovLCBzbyBtdXN0IHN0YXJ0IHdpdGggJyonIGZvciBKU0RvYy5cbiAgaWYgKGNvbW1lbnQudGV4dFswXSAhPT0gJyonKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgdGV4dCA9IGNvbW1lbnQudGV4dC5zdWJzdHJpbmcoMSkudHJpbSgpO1xuICByZXR1cm4gcGFyc2VDb250ZW50cyh0ZXh0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbnB1dCBzdHJpbmcgd2l0aCBsaW5lIGVuZGluZ3Mgbm9ybWFsaXplZCB0byAnXFxuJy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUxpbmVFbmRpbmdzKGlucHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKTtcbn1cblxuLyoqXG4gKiBwYXJzZUNvbnRlbnRzIHBhcnNlcyBKU0RvYyBvdXQgb2YgYSBjb21tZW50IHRleHQuXG4gKiBSZXR1cm5zIG51bGwgaWYgY29tbWVudCBpcyBub3QgSlNEb2MuXG4gKlxuICogQHBhcmFtIGNvbW1lbnRUZXh0IGEgY29tbWVudCdzIHRleHQgY29udGVudCwgaS5lLiB0aGUgY29tbWVudCB3L28gLyogYW5kICogLy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29udGVudHMoY29tbWVudFRleHQ6IHN0cmluZyk6IFBhcnNlZEpTRG9jQ29tbWVudHxudWxsIHtcbiAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgcHJvcGVyIGxpbmUgZW5kaW5ncyBiZWZvcmUgcGFyc2luZyBvbiBXaW5kb3dzLlxuICBjb21tZW50VGV4dCA9IG5vcm1hbGl6ZUxpbmVFbmRpbmdzKGNvbW1lbnRUZXh0KTtcbiAgLy8gU3RyaXAgYWxsIHRoZSBcIiAqIFwiIGJpdHMgZnJvbSB0aGUgZnJvbnQgb2YgZWFjaCBsaW5lLlxuICBjb21tZW50VGV4dCA9IGNvbW1lbnRUZXh0LnJlcGxhY2UoL15cXHMqXFwqPyA/L2dtLCAnJyk7XG4gIGNvbnN0IGxpbmVzID0gY29tbWVudFRleHQuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWdzOiBUYWdbXSA9IFtdO1xuICBjb25zdCB3YXJuaW5nczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgbGV0IG1hdGNoID0gbGluZS5tYXRjaCgvXlxccypAKFxcUyspICooLiopLyk7XG4gICAgaWYgKG1hdGNoKSB7XG4gICAgICBsZXQgW18sIHRhZ05hbWUsIHRleHRdID0gbWF0Y2g7XG4gICAgICBpZiAodGFnTmFtZSA9PT0gJ3JldHVybnMnKSB7XG4gICAgICAgIC8vIEEgc3lub255bSBmb3IgJ3JldHVybicuXG4gICAgICAgIHRhZ05hbWUgPSAncmV0dXJuJztcbiAgICAgIH1cbiAgICAgIGxldCB0eXBlOiBzdHJpbmd8dW5kZWZpbmVkO1xuICAgICAgaWYgKEpTRE9DX1RBR1NfSU5QVVRfQkxBQ0tMSVNULmhhcyh0YWdOYW1lKSkge1xuICAgICAgICBpZiAodGFnTmFtZSAhPT0gJ3RlbXBsYXRlJykge1xuICAgICAgICAgIC8vIFRlbGwgdGhlIHVzZXIgdG8gbm90IHdyaXRlIGJsYWNrbGlzdGVkIHRhZ3MsIGJlY2F1c2UgdGhlcmUgaXMgVFNcbiAgICAgICAgICAvLyBzeW50YXggYXZhaWxhYmxlIGZvciB0aGVtLlxuICAgICAgICAgIHdhcm5pbmdzLnB1c2goYEAke3RhZ05hbWV9IGFubm90YXRpb25zIGFyZSByZWR1bmRhbnQgd2l0aCBUeXBlU2NyaXB0IGVxdWl2YWxlbnRzYCk7XG4gICAgICAgICAgY29udGludWU7ICAvLyBEcm9wIHRoZSB0YWcgc28gQ2xvc3VyZSB3b24ndCBwcm9jZXNzIGl0LlxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEJ1dCBAdGVtcGxhdGUgaW4gcGFydGljdWxhciBpcyBzcGVjaWFsOiBpdCdzIG9rIGZvciB0aGUgdXNlciB0b1xuICAgICAgICAgIC8vIHdyaXRlIGl0IGZvciBkb2N1bWVudGF0aW9uIHB1cnBvc2VzLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGVcbiAgICAgICAgICAvLyB1c2VyLXdyaXR0ZW4gb25lIG1ha2luZyBpdCBpbnRvIHRoZSBvdXRwdXQgYmVjYXVzZSBDbG9zdXJlIGludGVycHJldHNcbiAgICAgICAgICAvLyBpdCBhcyB3ZWxsLlxuICAgICAgICAgIC8vIERyb3AgaXQgd2l0aG91dCBhbnkgd2FybmluZy4gIChXZSBhbHNvIGRvbid0IGVuc3VyZSBpdHMgY29ycmVjdG5lc3MuKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKEpTRE9DX1RBR1NfV0lUSF9UWVBFUy5oYXModGFnTmFtZSkpIHtcbiAgICAgICAgaWYgKHRleHRbMF0gPT09ICd7Jykge1xuICAgICAgICAgIHdhcm5pbmdzLnB1c2goXG4gICAgICAgICAgICAgIGB0aGUgdHlwZSBhbm5vdGF0aW9uIG9uIEAke3RhZ05hbWV9IGlzIHJlZHVuZGFudCB3aXRoIGl0cyBUeXBlU2NyaXB0IHR5cGUsIGAgK1xuICAgICAgICAgICAgICBgcmVtb3ZlIHRoZSB7Li4ufSBwYXJ0YCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodGFnTmFtZSA9PT0gJ3N1cHByZXNzJykge1xuICAgICAgICBjb25zdCB0eXBlTWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eXFx7KC4qKVxcfSguKikkLyk7XG4gICAgICAgIGlmICh0eXBlTWF0Y2gpIHtcbiAgICAgICAgICBbLCB0eXBlLCB0ZXh0XSA9IHR5cGVNYXRjaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3YXJuaW5ncy5wdXNoKGBtYWxmb3JtZWQgQCR7dGFnTmFtZX0gdGFnOiBcIiR7dGV4dH1cImApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZ05hbWUgPT09ICdkaWN0Jykge1xuICAgICAgICB3YXJuaW5ncy5wdXNoKCd1c2UgaW5kZXggc2lnbmF0dXJlcyAoYFtrOiBzdHJpbmddOiB0eXBlYCkgaW5zdGVhZCBvZiBAZGljdCcpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gR3JhYiB0aGUgcGFyYW1ldGVyIG5hbWUgZnJvbSBAcGFyYW0gdGFncy5cbiAgICAgIGxldCBwYXJhbWV0ZXJOYW1lOiBzdHJpbmd8dW5kZWZpbmVkO1xuICAgICAgaWYgKHRhZ05hbWUgPT09ICdwYXJhbScpIHtcbiAgICAgICAgbWF0Y2ggPSB0ZXh0Lm1hdGNoKC9eKFxcUyspID8oLiopLyk7XG4gICAgICAgIGlmIChtYXRjaCkgW18sIHBhcmFtZXRlck5hbWUsIHRleHRdID0gbWF0Y2g7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhZzogVGFnID0ge3RhZ05hbWV9O1xuICAgICAgaWYgKHBhcmFtZXRlck5hbWUpIHRhZy5wYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZTtcbiAgICAgIGlmICh0ZXh0KSB0YWcudGV4dCA9IHRleHQ7XG4gICAgICBpZiAodHlwZSkgdGFnLnR5cGUgPSB0eXBlO1xuICAgICAgdGFncy5wdXNoKHRhZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRleHQgd2l0aG91dCBhIHByZWNlZGluZyBAdGFnIG9uIGl0IGlzIGVpdGhlciB0aGUgcGxhaW4gdGV4dFxuICAgICAgLy8gZG9jdW1lbnRhdGlvbiBvciBhIGNvbnRpbnVhdGlvbiBvZiBhIHByZXZpb3VzIHRhZy5cbiAgICAgIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0YWdzLnB1c2goe3RhZ05hbWU6ICcnLCB0ZXh0OiBsaW5lfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXN0VGFnID0gdGFnc1t0YWdzLmxlbmd0aCAtIDFdO1xuICAgICAgICBsYXN0VGFnLnRleHQgPSAobGFzdFRhZy50ZXh0IHx8ICcnKSArICdcXG4nICsgbGluZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4ge3RhZ3MsIHdhcm5pbmdzfTtcbiAgfVxuICByZXR1cm4ge3RhZ3N9O1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgYSBUYWcgaW50byBhIHN0cmluZyB1c2FibGUgaW4gYSBjb21tZW50LlxuICogUmV0dXJucyBhIHN0cmluZyBsaWtlIFwiIEBmb28ge2Jhcn0gYmF6XCIgKG5vdGUgdGhlIHdoaXRlc3BhY2UpLlxuICovXG5mdW5jdGlvbiB0YWdUb1N0cmluZyh0YWc6IFRhZywgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICBsZXQgb3V0ID0gJyc7XG4gIGlmICh0YWcudGFnTmFtZSkge1xuICAgIGlmICghSlNET0NfVEFHU19PVVRQVVRfV0hJVEVMSVNULmhhcyh0YWcudGFnTmFtZSkgfHwgZXNjYXBlRXh0cmFUYWdzLmhhcyh0YWcudGFnTmFtZSkpIHtcbiAgICAgIC8vIEVzY2FwZSB0YWdzIHdlIGRvbid0IHVuZGVyc3RhbmQuICBUaGlzIGlzIGEgc3VidGxlXG4gICAgICAvLyBjb21wcm9taXNlIGJldHdlZW4gbXVsdGlwbGUgaXNzdWVzLlxuICAgICAgLy8gMSkgSWYgd2UgcGFzcyB0aHJvdWdoIHRoZXNlIG5vbi1DbG9zdXJlIHRhZ3MsIHRoZSB1c2VyIHdpbGxcbiAgICAgIC8vICAgIGdldCBhIHdhcm5pbmcgZnJvbSBDbG9zdXJlLCBhbmQgdGhlIHBvaW50IG9mIHRzaWNrbGUgaXNcbiAgICAgIC8vICAgIHRvIGluc3VsYXRlIHRoZSB1c2VyIGZyb20gQ2xvc3VyZS5cbiAgICAgIC8vIDIpIFRoZSBvdXRwdXQgb2YgdHNpY2tsZSBpcyBmb3IgQ2xvc3VyZSBidXQgYWxzbyBtYXkgYmUgcmVhZFxuICAgICAgLy8gICAgYnkgaHVtYW5zLCBmb3IgZXhhbXBsZSBub24tVHlwZVNjcmlwdCB1c2VycyBvZiBBbmd1bGFyLlxuICAgICAgLy8gMykgRmluYWxseSwgd2UgZG9uJ3Qgd2FudCB0byB3YXJuIGJlY2F1c2UgdXNlcnMgc2hvdWxkIGJlXG4gICAgICAvLyAgICBmcmVlIHRvIGFkZCB3aGljaGV2ZXIgSlNEb2MgdGhleSBmZWVsIGxpa2UuICBJZiB0aGUgdXNlclxuICAgICAgLy8gICAgd2FudHMgaGVscCBlbnN1cmluZyB0aGV5IGRpZG4ndCB0eXBvIGEgdGFnLCB0aGF0IGlzIHRoZVxuICAgICAgLy8gICAgcmVzcG9uc2liaWxpdHkgb2YgYSBsaW50ZXIuXG4gICAgICBvdXQgKz0gYCBcXFxcQCR7dGFnLnRhZ05hbWV9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9IGAgQCR7dGFnLnRhZ05hbWV9YDtcbiAgICB9XG4gIH1cbiAgaWYgKHRhZy50eXBlKSB7XG4gICAgb3V0ICs9ICcgeyc7XG4gICAgaWYgKHRhZy5yZXN0UGFyYW0pIHtcbiAgICAgIG91dCArPSAnLi4uJztcbiAgICB9XG4gICAgb3V0ICs9IHRhZy50eXBlO1xuICAgIGlmICh0YWcub3B0aW9uYWwpIHtcbiAgICAgIG91dCArPSAnPSc7XG4gICAgfVxuICAgIG91dCArPSAnfSc7XG4gIH1cbiAgaWYgKHRhZy5wYXJhbWV0ZXJOYW1lKSB7XG4gICAgb3V0ICs9ICcgJyArIHRhZy5wYXJhbWV0ZXJOYW1lO1xuICB9XG4gIGlmICh0YWcudGV4dCkge1xuICAgIG91dCArPSAnICcgKyB0YWcudGV4dC5yZXBsYWNlKC9AL2csICdcXFxcQCcpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbi8qKiBUYWdzIHRoYXQgbXVzdCBvbmx5IG9jY3VyIG9uY2VzIGluIGEgY29tbWVudCAoZmlsdGVyZWQgYmVsb3cpLiAqL1xuY29uc3QgU0lOR0xFVE9OX1RBR1MgPSBuZXcgU2V0KFsnZGVwcmVjYXRlZCddKTtcblxuLyoqIFRhZ3MgdGhhdCBjb25mbGljdCB3aXRoIFxcQHR5cGUgaW4gQ2xvc3VyZSBDb21waWxlciAoZS5nLiBcXEBwYXJhbSkuICovXG5leHBvcnQgY29uc3QgVEFHU19DT05GTElDVElOR19XSVRIX1RZUEUgPSBuZXcgU2V0KFsncGFyYW0nLCAncmV0dXJuJ10pO1xuXG4vKipcbiAqIEEgc3ludGhlc2l6ZWQgY29tbWVudCB0aGF0IChwb3NzaWJseSkgaW5jbHVkZXMgdGhlIG9yaWdpbmFsIGNvbW1lbnQgcmFuZ2UgaXQgd2FzIGNyZWF0ZWQgZnJvbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW50aGVzaXplZENvbW1lbnRXaXRoT3JpZ2luYWwgZXh0ZW5kcyB0cy5TeW50aGVzaXplZENvbW1lbnQge1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIHRleHQgcmFuZ2Ugb2YgdGhlIGNvbW1lbnQgKHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZmlsZSdzIGZ1bGwgdGV4dCkuXG4gICAqL1xuICBvcmlnaW5hbFJhbmdlPzogdHMuVGV4dFJhbmdlO1xufVxuXG4vKipcbiAqIHN5bnRoZXNpemVMZWFkaW5nQ29tbWVudHMgcGFyc2VzIHRoZSBsZWFkaW5nIGNvbW1lbnRzIG9mIG5vZGUsIGNvbnZlcnRzIHRoZW1cbiAqIHRvIHN5bnRoZXRpYyBjb21tZW50cywgYW5kIG1ha2VzIHN1cmUgdGhlIG9yaWdpbmFsIHRleHQgY29tbWVudHMgZG8gbm90IGdldFxuICogZW1pdHRlZCBieSBUeXBlU2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ludGhlc2l6ZUxlYWRpbmdDb21tZW50cyhub2RlOiB0cy5Ob2RlKTogU3ludGhlc2l6ZWRDb21tZW50V2l0aE9yaWdpbmFsW10ge1xuICBjb25zdCBleGlzdGluZyA9IHRzLmdldFN5bnRoZXRpY0xlYWRpbmdDb21tZW50cyhub2RlKTtcbiAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7XG4gIGNvbnN0IHRleHQgPSBub2RlLmdldEZ1bGxUZXh0KCk7XG4gIGNvbnN0IHN5bnRoQ29tbWVudHMgPSBnZXRMZWFkaW5nQ29tbWVudFJhbmdlc1N5bnRoZXNpemVkKHRleHQsIG5vZGUuZ2V0RnVsbFN0YXJ0KCkpO1xuICBpZiAoc3ludGhDb21tZW50cy5sZW5ndGgpIHtcbiAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMobm9kZSwgc3ludGhDb21tZW50cyk7XG4gICAgc3VwcHJlc3NMZWFkaW5nQ29tbWVudHNSZWN1cnNpdmVseShub2RlKTtcbiAgfVxuICByZXR1cm4gc3ludGhDb21tZW50cztcbn1cblxuLyoqXG4gKiBwYXJzZUxlYWRpbmdDb21tZW50UmFuZ2VzU3ludGhlc2l6ZWQgcGFyc2VzIHRoZSBsZWFkaW5nIGNvbW1lbnQgcmFuZ2VzIG91dCBvZiB0aGUgZ2l2ZW4gdGV4dCBhbmRcbiAqIGNvbnZlcnRzIHRoZW0gdG8gU3ludGhlc2l6ZWRDb21tZW50cy5cbiAqIEBwYXJhbSBvZmZzZXQgdGhlIG9mZnNldCBvZiB0ZXh0IGluIHRoZSBzb3VyY2UgZmlsZSwgZS5nLiBub2RlLmdldEZ1bGxTdGFydCgpLlxuICovXG4vLyBWaXNpYmxlRm9yVGVzdGluZ1xuZXhwb3J0IGZ1bmN0aW9uIGdldExlYWRpbmdDb21tZW50UmFuZ2VzU3ludGhlc2l6ZWQoXG4gICAgdGV4dDogc3RyaW5nLCBvZmZzZXQgPSAwKTogU3ludGhlc2l6ZWRDb21tZW50V2l0aE9yaWdpbmFsW10ge1xuICBjb25zdCBjb21tZW50cyA9IHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKHRleHQsIDApIHx8IFtdO1xuICByZXR1cm4gY29tbWVudHMubWFwKChjcik6IFN5bnRoZXNpemVkQ29tbWVudFdpdGhPcmlnaW5hbCA9PiB7XG4gICAgLy8gQ29uZnVzaW5nbHksIENvbW1lbnRSYW5nZSBpbiBUeXBlU2NyaXB0IGluY2x1ZGVzIHN0YXJ0IGFuZCBlbmQgbWFya2VycywgYnV0XG4gICAgLy8gU3ludGhlc2l6ZWRDb21tZW50cyBkbyBub3QuXG4gICAgY29uc3QgY29tbWVudFRleHQgPSBjci5raW5kID09PSB0cy5TeW50YXhLaW5kLlNpbmdsZUxpbmVDb21tZW50VHJpdmlhID9cbiAgICAgICAgdGV4dC5zdWJzdHJpbmcoY3IucG9zICsgMiwgY3IuZW5kKSA6XG4gICAgICAgIHRleHQuc3Vic3RyaW5nKGNyLnBvcyArIDIsIGNyLmVuZCAtIDIpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jcixcbiAgICAgIHRleHQ6IGNvbW1lbnRUZXh0LFxuICAgICAgcG9zOiAtMSxcbiAgICAgIGVuZDogLTEsXG4gICAgICBvcmlnaW5hbFJhbmdlOiB7cG9zOiBjci5wb3MgKyBvZmZzZXQsIGVuZDogY3IuZW5kICsgb2Zmc2V0fVxuICAgIH07XG4gIH0pO1xufVxuXG4vKipcbiAqIHN1cHByZXNzQ29tbWVudHNSZWN1cnNpdmVseSBwcmV2ZW50cyBlbWl0IG9mIGxlYWRpbmcgY29tbWVudHMgb24gbm9kZSwgYW5kIGFueSByZWN1cnNpdmUgbm9kZXNcbiAqIHVuZGVybmVhdGggaXQgdGhhdCBzdGFydCBhdCB0aGUgc2FtZSBvZmZzZXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwcmVzc0xlYWRpbmdDb21tZW50c1JlY3Vyc2l2ZWx5KG5vZGU6IHRzLk5vZGUpIHtcbiAgLy8gVHlwZVNjcmlwdCBlbWl0cyBsZWFkaW5nIGNvbW1lbnRzIG9uIGEgbm9kZSwgdW5sZXNzOlxuICAvLyAtIHRoZSBjb21tZW50IHdhcyBlbWl0dGVkIGJ5IHRoZSBwYXJlbnQgbm9kZVxuICAvLyAtIHRoZSBub2RlIGhhcyB0aGUgTm9MZWFkaW5nQ29tbWVudHMgZW1pdCBmbGFnLlxuICAvLyBIb3dldmVyLCB0cmFuc2Zvcm1hdGlvbiBzdGVwcyBzb21ldGltZXMgY29weSBub2RlcyB3aXRob3V0IGtlZXBpbmcgdGhlaXIgZW1pdCBmbGFncywgc28ganVzdFxuICAvLyBzZXR0aW5nIE5vTGVhZGluZ0NvbW1lbnRzIHJlY3Vyc2l2ZWx5IGlzIG5vdCBlbm91Z2gsIHdlIG11c3QgYWxzbyBzZXQgdGhlIHRleHQgcmFuZ2UgdG8gYXZvaWRcbiAgLy8gdGhlIGNvcGllZCBub2RlIHRvIGhhdmUgY29tbWVudHMgZW1pdHRlZC5cbiAgY29uc3Qgb3JpZ2luYWxTdGFydCA9IG5vZGUuZ2V0RnVsbFN0YXJ0KCk7XG4gIGNvbnN0IGFjdHVhbFN0YXJ0ID0gbm9kZS5nZXRTdGFydCgpO1xuICBmdW5jdGlvbiBzdXBwcmVzc0NvbW1lbnRzSW50ZXJuYWwobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICAgIHRzLnNldEVtaXRGbGFncyhub2RlLCB0cy5FbWl0RmxhZ3MuTm9MZWFkaW5nQ29tbWVudHMpO1xuICAgIHJldHVybiAhIXRzLmZvckVhY2hDaGlsZChub2RlLCAoY2hpbGQpID0+IHtcbiAgICAgIGlmIChjaGlsZC5wb3MgIT09IG9yaWdpbmFsU3RhcnQpIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHN1cHByZXNzQ29tbWVudHNJbnRlcm5hbChjaGlsZCk7XG4gICAgfSk7XG4gIH1cbiAgc3VwcHJlc3NDb21tZW50c0ludGVybmFsKG5vZGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TeW50aGVzaXplZENvbW1lbnQoXG4gICAgdGFnczogVGFnW10sIGVzY2FwZUV4dHJhVGFncz86IFNldDxzdHJpbmc+KTogdHMuU3ludGhlc2l6ZWRDb21tZW50IHtcbiAgcmV0dXJuIHtcbiAgICBraW5kOiB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEsXG4gICAgdGV4dDogdG9TdHJpbmdXaXRob3V0U3RhcnRFbmQodGFncywgZXNjYXBlRXh0cmFUYWdzKSxcbiAgICBwb3M6IC0xLFxuICAgIGVuZDogLTEsXG4gICAgaGFzVHJhaWxpbmdOZXdMaW5lOiB0cnVlLFxuICB9O1xufVxuXG4vKiogU2VyaWFsaXplcyBhIENvbW1lbnQgb3V0IHRvIGEgc3RyaW5nLCBidXQgZG9lcyBub3QgaW5jbHVkZSB0aGUgc3RhcnQgYW5kIGVuZCBjb21tZW50IHRva2Vucy4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZ1dpdGhvdXRTdGFydEVuZCh0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICByZXR1cm4gc2VyaWFsaXplKHRhZ3MsIGZhbHNlLCBlc2NhcGVFeHRyYVRhZ3MpO1xufVxuXG4vKiogU2VyaWFsaXplcyBhIENvbW1lbnQgb3V0IHRvIGEgc3RyaW5nIHVzYWJsZSBpbiBzb3VyY2UgY29kZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh0YWdzOiBUYWdbXSwgZXNjYXBlRXh0cmFUYWdzID0gbmV3IFNldDxzdHJpbmc+KCkpOiBzdHJpbmcge1xuICByZXR1cm4gc2VyaWFsaXplKHRhZ3MsIHRydWUsIGVzY2FwZUV4dHJhVGFncyk7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZShcbiAgICB0YWdzOiBUYWdbXSwgaW5jbHVkZVN0YXJ0RW5kOiBib29sZWFuLCBlc2NhcGVFeHRyYVRhZ3MgPSBuZXcgU2V0PHN0cmluZz4oKSk6IHN0cmluZyB7XG4gIGlmICh0YWdzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICBpZiAodGFncy5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCB0YWcgPSB0YWdzWzBdO1xuICAgIGlmICgodGFnLnRhZ05hbWUgPT09ICd0eXBlJyB8fCB0YWcudGFnTmFtZSA9PT0gJ3R5cGVkZWYnIHx8IHRhZy50YWdOYW1lID09PSAnbm9jb2xsYXBzZScpICYmXG4gICAgICAgICghdGFnLnRleHQgfHwgIXRhZy50ZXh0Lm1hdGNoKCdcXG4nKSkpIHtcbiAgICAgIC8vIFNwZWNpYWwtY2FzZSBvbmUtbGluZXIgXCJ0eXBlXCIgYW5kIFwibm9jb2xsYXBzZVwiIHRhZ3MgdG8gZml0IG9uIG9uZSBsaW5lLCBlLmcuXG4gICAgICAvLyAgIC8qKiBAdHlwZSB7Zm9vfSAqL1xuICAgICAgY29uc3QgdGV4dCA9IHRhZ1RvU3RyaW5nKHRhZywgZXNjYXBlRXh0cmFUYWdzKTtcbiAgICAgIHJldHVybiBpbmNsdWRlU3RhcnRFbmQgPyBgLyoqJHt0ZXh0fSAqL2AgOiBgKiR7dGV4dH0gYDtcbiAgICB9XG4gICAgLy8gT3RoZXJ3aXNlLCBmYWxsIHRocm91Z2ggdG8gdGhlIG11bHRpLWxpbmUgb3V0cHV0LlxuICB9XG5cbiAgbGV0IG91dCA9IGluY2x1ZGVTdGFydEVuZCA/ICcvKipcXG4nIDogJypcXG4nO1xuICBjb25zdCBlbWl0dGVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGZvciAoY29uc3QgdGFnIG9mIHRhZ3MpIHtcbiAgICBpZiAoZW1pdHRlZC5oYXModGFnLnRhZ05hbWUpICYmIFNJTkdMRVRPTl9UQUdTLmhhcyh0YWcudGFnTmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBlbWl0dGVkLmFkZCh0YWcudGFnTmFtZSk7XG4gICAgb3V0ICs9ICcgKic7XG4gICAgLy8gSWYgdGhlIHRhZ1RvU3RyaW5nIGlzIG11bHRpLWxpbmUsIGluc2VydCBcIiAqIFwiIHByZWZpeGVzIG9uIHN1YnNlcXVlbnQgbGluZXMuXG4gICAgb3V0ICs9IHRhZ1RvU3RyaW5nKHRhZywgZXNjYXBlRXh0cmFUYWdzKS5zcGxpdCgnXFxuJykuam9pbignXFxuICogJyk7XG4gICAgb3V0ICs9ICdcXG4nO1xuICB9XG4gIG91dCArPSBpbmNsdWRlU3RhcnRFbmQgPyAnICovXFxuJyA6ICcgJztcbiAgcmV0dXJuIG91dDtcbn1cblxuLyoqIE1lcmdlcyBtdWx0aXBsZSB0YWdzIChvZiB0aGUgc2FtZSB0YWdOYW1lIHR5cGUpIGludG8gYSBzaW5nbGUgdW5pZmllZCB0YWcuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UodGFnczogVGFnW10pOiBUYWcge1xuICBjb25zdCB0YWdOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBwYXJhbWV0ZXJOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0eXBlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCB0ZXh0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAvLyBJZiBhbnkgb2YgdGhlIHRhZ3MgYXJlIG9wdGlvbmFsL3Jlc3QsIHRoZW4gdGhlIG1lcmdlZCBvdXRwdXQgaXMgb3B0aW9uYWwvcmVzdC5cbiAgbGV0IG9wdGlvbmFsID0gZmFsc2U7XG4gIGxldCByZXN0UGFyYW0gPSBmYWxzZTtcbiAgZm9yIChjb25zdCB0YWcgb2YgdGFncykge1xuICAgIHRhZ05hbWVzLmFkZCh0YWcudGFnTmFtZSk7XG4gICAgaWYgKHRhZy5wYXJhbWV0ZXJOYW1lICE9PSB1bmRlZmluZWQpIHBhcmFtZXRlck5hbWVzLmFkZCh0YWcucGFyYW1ldGVyTmFtZSk7XG4gICAgaWYgKHRhZy50eXBlICE9PSB1bmRlZmluZWQpIHR5cGVzLmFkZCh0YWcudHlwZSk7XG4gICAgaWYgKHRhZy50ZXh0ICE9PSB1bmRlZmluZWQpIHRleHRzLmFkZCh0YWcudGV4dCk7XG4gICAgaWYgKHRhZy5vcHRpb25hbCkgb3B0aW9uYWwgPSB0cnVlO1xuICAgIGlmICh0YWcucmVzdFBhcmFtKSByZXN0UGFyYW0gPSB0cnVlO1xuICB9XG5cbiAgaWYgKHRhZ05hbWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbm5vdCBtZXJnZSBkaWZmZXJpbmcgdGFnczogJHtKU09OLnN0cmluZ2lmeSh0YWdzKX1gKTtcbiAgfVxuICBjb25zdCB0YWdOYW1lID0gdGFnTmFtZXMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICBjb25zdCBwYXJhbWV0ZXJOYW1lID1cbiAgICAgIHBhcmFtZXRlck5hbWVzLnNpemUgPiAwID8gQXJyYXkuZnJvbShwYXJhbWV0ZXJOYW1lcykuam9pbignX29yXycpIDogdW5kZWZpbmVkO1xuICBjb25zdCB0eXBlID0gdHlwZXMuc2l6ZSA+IDAgPyBBcnJheS5mcm9tKHR5cGVzKS5qb2luKCd8JykgOiB1bmRlZmluZWQ7XG4gIC8vIEB0ZW1wbGF0ZSB1c2VzIHRleHQgKG5vdCB0eXBlISkgdG8gZGVjbGFyZSBpdHMgdHlwZSBwYXJhbWV0ZXJzLCB3aXRoICcsJy1zZXBhcmF0ZWQgdGV4dC5cbiAgY29uc3QgaXNUZW1wbGF0ZVRhZyA9IHRhZ05hbWUgPT09ICd0ZW1wbGF0ZSc7XG4gIGNvbnN0IHRleHQgPSB0ZXh0cy5zaXplID4gMCA/IEFycmF5LmZyb20odGV4dHMpLmpvaW4oaXNUZW1wbGF0ZVRhZyA/ICcsJyA6ICcgLyAnKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgdGFnOiBUYWcgPSB7dGFnTmFtZSwgcGFyYW1ldGVyTmFtZSwgdHlwZSwgdGV4dH07XG4gIC8vIE5vdGU6IGEgcGFyYW0gY2FuIGVpdGhlciBiZSBvcHRpb25hbCBvciBhIHJlc3QgcGFyYW07IGlmIHdlIG1lcmdlZCBhblxuICAvLyBvcHRpb25hbCBhbmQgcmVzdCBwYXJhbSB0b2dldGhlciwgcHJlZmVyIG1hcmtpbmcgaXQgYXMgYSByZXN0IHBhcmFtLlxuICBpZiAocmVzdFBhcmFtKSB7XG4gICAgdGFnLnJlc3RQYXJhbSA9IHRydWU7XG4gIH0gZWxzZSBpZiAob3B0aW9uYWwpIHtcbiAgICB0YWcub3B0aW9uYWwgPSB0cnVlO1xuICB9XG4gIHJldHVybiB0YWc7XG59XG4iXX0=

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.ModulesManifest = void 0;
/** A class that maintains the module dependency graph of output JS files. */

@@ -54,2 +55,2 @@ class ModulesManifest {

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlc19tYW5pZmVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzX21hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBTUgsNkVBQTZFO0lBQzdFLE1BQWEsZUFBZTtRQUE1QjtZQUNFLGlEQUFpRDtZQUN6QyxxQkFBZ0IsR0FBb0IsRUFBRSxDQUFDO1lBQy9DLHFFQUFxRTtZQUM3RCxzQkFBaUIsR0FBc0IsRUFBRSxDQUFDO1FBK0JwRCxDQUFDO1FBN0JDLFdBQVcsQ0FBQyxLQUFzQjtZQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBRUQsU0FBUyxDQUFDLFFBQWdCLEVBQUUsTUFBYztZQUN4QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUVELG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsY0FBc0I7WUFDMUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBRUQsSUFBSSxPQUFPO1lBQ1QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVDLENBQUM7UUFFRCxxQkFBcUIsQ0FBQyxNQUFjO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLFNBQVM7WUFDWCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUVELG9CQUFvQixDQUFDLFFBQWdCO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFDLENBQUM7S0FDRjtJQW5DRCwwQ0FtQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZU1hcDxUPiB7XG4gIFtmaWxlTmFtZTogc3RyaW5nXTogVDtcbn1cblxuLyoqIEEgY2xhc3MgdGhhdCBtYWludGFpbnMgdGhlIG1vZHVsZSBkZXBlbmRlbmN5IGdyYXBoIG9mIG91dHB1dCBKUyBmaWxlcy4gKi9cbmV4cG9ydCBjbGFzcyBNb2R1bGVzTWFuaWZlc3Qge1xuICAvKiogTWFwIG9mIGdvb2dtb2R1bGUgbW9kdWxlIG5hbWUgdG8gZmlsZSBuYW1lICovXG4gIHByaXZhdGUgbW9kdWxlVG9GaWxlTmFtZTogRmlsZU1hcDxzdHJpbmc+ID0ge307XG4gIC8qKiBNYXAgb2YgZmlsZSBuYW1lIHRvIGFycmF5cyBvZiBpbXBvcnRlZCBnb29nbW9kdWxlIG1vZHVsZSBuYW1lcyAqL1xuICBwcml2YXRlIHJlZmVyZW5jZWRNb2R1bGVzOiBGaWxlTWFwPHN0cmluZ1tdPiA9IHt9O1xuXG4gIGFkZE1hbmlmZXN0KG90aGVyOiBNb2R1bGVzTWFuaWZlc3QpIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMubW9kdWxlVG9GaWxlTmFtZSwgb3RoZXIubW9kdWxlVG9GaWxlTmFtZSk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLnJlZmVyZW5jZWRNb2R1bGVzLCBvdGhlci5yZWZlcmVuY2VkTW9kdWxlcyk7XG4gIH1cblxuICBhZGRNb2R1bGUoZmlsZU5hbWU6IHN0cmluZywgbW9kdWxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm1vZHVsZVRvRmlsZU5hbWVbbW9kdWxlXSA9IGZpbGVOYW1lO1xuICAgIHRoaXMucmVmZXJlbmNlZE1vZHVsZXNbZmlsZU5hbWVdID0gW107XG4gIH1cblxuICBhZGRSZWZlcmVuY2VkTW9kdWxlKGZpbGVOYW1lOiBzdHJpbmcsIHJlc29sdmVkTW9kdWxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlZmVyZW5jZWRNb2R1bGVzW2ZpbGVOYW1lXS5wdXNoKHJlc29sdmVkTW9kdWxlKTtcbiAgfVxuXG4gIGdldCBtb2R1bGVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5tb2R1bGVUb0ZpbGVOYW1lKTtcbiAgfVxuXG4gIGdldEZpbGVOYW1lRnJvbU1vZHVsZShtb2R1bGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMubW9kdWxlVG9GaWxlTmFtZVttb2R1bGVdO1xuICB9XG5cbiAgZ2V0IGZpbGVOYW1lcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucmVmZXJlbmNlZE1vZHVsZXMpO1xuICB9XG5cbiAgZ2V0UmVmZXJlbmNlZE1vZHVsZXMoZmlsZU5hbWU6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VkTW9kdWxlc1tmaWxlTmFtZV07XG4gIH1cbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxlc19tYW5pZmVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzX21hbmlmZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQU1ILDZFQUE2RTtJQUM3RSxNQUFhLGVBQWU7UUFBNUI7WUFDRSxpREFBaUQ7WUFDekMscUJBQWdCLEdBQW9CLEVBQUUsQ0FBQztZQUMvQyxxRUFBcUU7WUFDN0Qsc0JBQWlCLEdBQXNCLEVBQUUsQ0FBQztRQStCcEQsQ0FBQztRQTdCQyxXQUFXLENBQUMsS0FBc0I7WUFDaEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDakUsQ0FBQztRQUVELFNBQVMsQ0FBQyxRQUFnQixFQUFFLE1BQWM7WUFDeEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFFRCxtQkFBbUIsQ0FBQyxRQUFnQixFQUFFLGNBQXNCO1lBQzFELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELElBQUksT0FBTztZQUNULE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1QyxDQUFDO1FBRUQscUJBQXFCLENBQUMsTUFBYztZQUNsQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDO1FBRUQsSUFBSSxTQUFTO1lBQ1gsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFFRCxvQkFBb0IsQ0FBQyxRQUFnQjtZQUNuQyxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxDQUFDO0tBQ0Y7SUFuQ0QsMENBbUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVNYXA8VD4ge1xuICBbZmlsZU5hbWU6IHN0cmluZ106IFQ7XG59XG5cbi8qKiBBIGNsYXNzIHRoYXQgbWFpbnRhaW5zIHRoZSBtb2R1bGUgZGVwZW5kZW5jeSBncmFwaCBvZiBvdXRwdXQgSlMgZmlsZXMuICovXG5leHBvcnQgY2xhc3MgTW9kdWxlc01hbmlmZXN0IHtcbiAgLyoqIE1hcCBvZiBnb29nbW9kdWxlIG1vZHVsZSBuYW1lIHRvIGZpbGUgbmFtZSAqL1xuICBwcml2YXRlIG1vZHVsZVRvRmlsZU5hbWU6IEZpbGVNYXA8c3RyaW5nPiA9IHt9O1xuICAvKiogTWFwIG9mIGZpbGUgbmFtZSB0byBhcnJheXMgb2YgaW1wb3J0ZWQgZ29vZ21vZHVsZSBtb2R1bGUgbmFtZXMgKi9cbiAgcHJpdmF0ZSByZWZlcmVuY2VkTW9kdWxlczogRmlsZU1hcDxzdHJpbmdbXT4gPSB7fTtcblxuICBhZGRNYW5pZmVzdChvdGhlcjogTW9kdWxlc01hbmlmZXN0KSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLm1vZHVsZVRvRmlsZU5hbWUsIG90aGVyLm1vZHVsZVRvRmlsZU5hbWUpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5yZWZlcmVuY2VkTW9kdWxlcywgb3RoZXIucmVmZXJlbmNlZE1vZHVsZXMpO1xuICB9XG5cbiAgYWRkTW9kdWxlKGZpbGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tb2R1bGVUb0ZpbGVOYW1lW21vZHVsZV0gPSBmaWxlTmFtZTtcbiAgICB0aGlzLnJlZmVyZW5jZWRNb2R1bGVzW2ZpbGVOYW1lXSA9IFtdO1xuICB9XG5cbiAgYWRkUmVmZXJlbmNlZE1vZHVsZShmaWxlTmFtZTogc3RyaW5nLCByZXNvbHZlZE1vZHVsZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5yZWZlcmVuY2VkTW9kdWxlc1tmaWxlTmFtZV0ucHVzaChyZXNvbHZlZE1vZHVsZSk7XG4gIH1cblxuICBnZXQgbW9kdWxlcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMubW9kdWxlVG9GaWxlTmFtZSk7XG4gIH1cblxuICBnZXRGaWxlTmFtZUZyb21Nb2R1bGUobW9kdWxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm1vZHVsZVRvRmlsZU5hbWVbbW9kdWxlXTtcbiAgfVxuXG4gIGdldCBmaWxlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnJlZmVyZW5jZWRNb2R1bGVzKTtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZWRNb2R1bGVzKGZpbGVOYW1lOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMucmVmZXJlbmNlZE1vZHVsZXNbZmlsZU5hbWVdO1xuICB9XG59XG4iXX0=

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.normalize = exports.relative = exports.dirname = exports.join = exports.isAbsolute = void 0;
/**

@@ -51,2 +52,2 @@ * @fileoverview Path manipulation functions.

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUg7Ozs7Ozs7O09BUUc7SUFFSCxpQ0FBaUM7SUFZakMsU0FBZ0IsVUFBVSxDQUFDLElBQVk7UUFDckMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUZELGdDQUVDO0lBRUQsU0FBZ0IsSUFBSSxDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ3pDLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUZELG9CQUVDO0lBRUQsU0FBZ0IsT0FBTyxDQUFDLElBQVk7UUFDbEMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUZELDBCQUVDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLElBQVksRUFBRSxHQUFXO1FBQ2hELE9BQU8sRUFBRSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRkQsNEJBRUM7SUFFRCxTQUFnQixTQUFTLENBQUMsSUFBWTtRQUNwQyxPQUFPLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUZELDhCQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgUGF0aCBtYW5pcHVsYXRpb24gZnVuY3Rpb25zLlxuICogVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgZXhwb3NlZCBieSBub2RlanMgaW4gdGhlICdwYXRoJyBtb2R1bGUuXG4gKlxuICogQnV0IHdlIGFjdHVhbGx5IHVzZSB0aGUgVHlwZVNjcmlwdCBwYXRoLW1hbmlwdWxhdGlvbiBsb2dpYyBiZWNhdXNlOlxuICogMSkgd2Ugd2FudCB0aGUgZXhhY3Qgc2FtZSBiZWhhdmlvcnMgYXMgVFM7XG4gKiAyKSB3ZSBkb24ndCBkZXBlbmQgb24gbm9kZSdzICdwYXRoJyBtb2R1bGUgd2hlbiBydW5uaW5nIHVuZGVyIGEgYnJvd3NlclxuICogU28gd2UgcG9rZSBpbnRvIHRoZWlyIHByaXZhdGUgQVBJIGZvciB0aGVzZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuZGVjbGFyZSBtb2R1bGUgJ3R5cGVzY3JpcHQnIHtcbiAgZnVuY3Rpb24gaXNSb290ZWREaXNrUGF0aChwYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuICBmdW5jdGlvbiBjb21iaW5lUGF0aHMoLi4ucGF0aHM6IHN0cmluZ1tdKTogc3RyaW5nO1xuICBmdW5jdGlvbiBnZXREaXJlY3RvcnlQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZztcbiAgZnVuY3Rpb24gY29udmVydFRvUmVsYXRpdmVQYXRoKFxuICAgICAgYWJzb2x1dGVPclJlbGF0aXZlUGF0aDogc3RyaW5nLCBiYXNlUGF0aDogc3RyaW5nLFxuICAgICAgZ2V0Q2Fub25pY2FsRmlsZU5hbWU6IChwYXRoOiBzdHJpbmcpID0+IHN0cmluZyk6IHN0cmluZztcbiAgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aDogc3RyaW5nLCAuLi5wYXRoczogQXJyYXk8c3RyaW5nfHVuZGVmaW5lZD4pOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fic29sdXRlKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHMuaXNSb290ZWREaXNrUGF0aChwYXRoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGpvaW4ocDE6IHN0cmluZywgcDI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0cy5jb21iaW5lUGF0aHMocDEsIHAyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLmdldERpcmVjdG9yeVBhdGgocGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWxhdGl2ZShiYXNlOiBzdHJpbmcsIHJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLmNvbnZlcnRUb1JlbGF0aXZlUGF0aChyZWwsIGJhc2UsIHAgPT4gcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRzLnJlc29sdmVQYXRoKHBhdGgpO1xufVxuIl19
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9wYXRoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVIOzs7Ozs7OztPQVFHO0lBRUgsaUNBQWlDO0lBWWpDLFNBQWdCLFVBQVUsQ0FBQyxJQUFZO1FBQ3JDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFGRCxnQ0FFQztJQUVELFNBQWdCLElBQUksQ0FBQyxFQUFVLEVBQUUsRUFBVTtRQUN6QyxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFGRCxvQkFFQztJQUVELFNBQWdCLE9BQU8sQ0FBQyxJQUFZO1FBQ2xDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFGRCwwQkFFQztJQUVELFNBQWdCLFFBQVEsQ0FBQyxJQUFZLEVBQUUsR0FBVztRQUNoRCxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUZELDRCQUVDO0lBRUQsU0FBZ0IsU0FBUyxDQUFDLElBQVk7UUFDcEMsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFGRCw4QkFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBAZmlsZW92ZXJ2aWV3IFBhdGggbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucy5cbiAqIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIGV4cG9zZWQgYnkgbm9kZWpzIGluIHRoZSAncGF0aCcgbW9kdWxlLlxuICpcbiAqIEJ1dCB3ZSBhY3R1YWxseSB1c2UgdGhlIFR5cGVTY3JpcHQgcGF0aC1tYW5pcHVsYXRpb24gbG9naWMgYmVjYXVzZTpcbiAqIDEpIHdlIHdhbnQgdGhlIGV4YWN0IHNhbWUgYmVoYXZpb3JzIGFzIFRTO1xuICogMikgd2UgZG9uJ3QgZGVwZW5kIG9uIG5vZGUncyAncGF0aCcgbW9kdWxlIHdoZW4gcnVubmluZyB1bmRlciBhIGJyb3dzZXJcbiAqIFNvIHdlIHBva2UgaW50byB0aGVpciBwcml2YXRlIEFQSSBmb3IgdGhlc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbmRlY2xhcmUgbW9kdWxlICd0eXBlc2NyaXB0JyB7XG4gIGZ1bmN0aW9uIGlzUm9vdGVkRGlza1BhdGgocGF0aDogc3RyaW5nKTogYm9vbGVhbjtcbiAgZnVuY3Rpb24gY29tYmluZVBhdGhzKC4uLnBhdGhzOiBzdHJpbmdbXSk6IHN0cmluZztcbiAgZnVuY3Rpb24gZ2V0RGlyZWN0b3J5UGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmc7XG4gIGZ1bmN0aW9uIGNvbnZlcnRUb1JlbGF0aXZlUGF0aChcbiAgICAgIGFic29sdXRlT3JSZWxhdGl2ZVBhdGg6IHN0cmluZywgYmFzZVBhdGg6IHN0cmluZyxcbiAgICAgIGdldENhbm9uaWNhbEZpbGVOYW1lOiAocGF0aDogc3RyaW5nKSA9PiBzdHJpbmcpOiBzdHJpbmc7XG4gIGZ1bmN0aW9uIHJlc29sdmVQYXRoKHBhdGg6IHN0cmluZywgLi4ucGF0aHM6IEFycmF5PHN0cmluZ3x1bmRlZmluZWQ+KTogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHRzLmlzUm9vdGVkRGlza1BhdGgocGF0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBqb2luKHAxOiBzdHJpbmcsIHAyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdHMuY29tYmluZVBhdGhzKHAxLCBwMik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJuYW1lKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0cy5nZXREaXJlY3RvcnlQYXRoKHBhdGgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoYmFzZTogc3RyaW5nLCByZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0cy5jb252ZXJ0VG9SZWxhdGl2ZVBhdGgocmVsLCBiYXNlLCBwID0+IHApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0cy5yZXNvbHZlUGF0aChwYXRoKTtcbn1cbiJdfQ==

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.getAllLeadingComments = exports.reportDiagnostic = exports.reportDebugWarning = exports.createMultiLineComment = exports.createSingleLineComment = exports.createSingleQuoteStringLiteral = exports.isTypeNodeKind = exports.updateSourceFileNode = exports.visitEachChild = exports.createNotEmittedStatement = exports.synthesizeCommentRanges = exports.createNotEmittedStatementWithComments = exports.unescapeName = exports.getEntityNameText = exports.symbolIsValue = exports.getIdentifierText = exports.isDtsFileName = exports.isAmbient = exports.hasModifierFlag = void 0;
const ts = require("typescript");

@@ -285,2 +286,2 @@ /** @return true if node has the specified modifier flag set. */

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBRWpDLGdFQUFnRTtJQUNoRSxTQUFnQixlQUFlLENBQUMsV0FBMkIsRUFBRSxJQUFzQjtRQUNqRixPQUFPLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRkQsMENBRUM7SUFFRCxnRUFBZ0U7SUFDaEUsU0FBZ0IsU0FBUyxDQUFDLElBQWE7UUFDckMsSUFBSSxPQUFPLEdBQXNCLElBQUksQ0FBQztRQUN0QyxPQUFPLE9BQU8sRUFBRTtZQUNkLElBQUksZUFBZSxDQUFDLE9BQXlCLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDeEUsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBVEQsOEJBU0M7SUFFRCxnREFBZ0Q7SUFDaEQsU0FBZ0IsYUFBYSxDQUFDLFFBQWdCO1FBQzVDLE9BQU8sUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRkQsc0NBRUM7SUFFRCxzREFBc0Q7SUFDdEQsU0FBZ0IsaUJBQWlCLENBQUMsVUFBeUI7UUFDekQsK0ZBQStGO1FBQy9GLG9GQUFvRjtRQUNwRixPQUFPLFlBQVksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUpELDhDQUlDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsU0FBZ0IsYUFBYSxDQUFDLEVBQWtCLEVBQUUsR0FBYztRQUM5RCxJQUFJLEdBQUcs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U0FDOUI7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDMUIsS0FBSztZQUNMLE1BQU07WUFDTixXQUFXO1lBQ1gsUUFBUTtZQUNSLElBQUksRUFBRSxDQUFDO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsU0FBZ0IscUJBQXFCLENBQUMsSUFBYTtRQUVqRCxNQUFNLFNBQVMsR0FBb0QsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25ELElBQUksRUFBRTtZQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsaUNBQUssQ0FBQyxLQUFFLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLFNBQVM7WUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUM7UUFDNUMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQVRELHNEQVNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuLyoqIEByZXR1cm4gdHJ1ZSBpZiBub2RlIGhhcyB0aGUgc3BlY2lmaWVkIG1vZGlmaWVyIGZsYWcgc2V0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc01vZGlmaWVyRmxhZyhkZWNsYXJhdGlvbjogdHMuRGVjbGFyYXRpb24sIGZsYWc6IHRzLk1vZGlmaWVyRmxhZ3MpOiBib29sZWFuIHtcbiAgcmV0dXJuICh0cy5nZXRDb21iaW5lZE1vZGlmaWVyRmxhZ3MoZGVjbGFyYXRpb24pICYgZmxhZykgIT09IDA7XG59XG5cbi8qKiBAcmV0dXJuIHRydWUgaWYgbm9kZSBoYXMgdGhlIHNwZWNpZmllZCBtb2RpZmllciBmbGFnIHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FtYmllbnQobm9kZTogdHMuTm9kZSk6IGJvb2xlYW4ge1xuICBsZXQgY3VycmVudDogdHMuTm9kZXx1bmRlZmluZWQgPSBub2RlO1xuICB3aGlsZSAoY3VycmVudCkge1xuICAgIGlmIChoYXNNb2RpZmllckZsYWcoY3VycmVudCBhcyB0cy5EZWNsYXJhdGlvbiwgdHMuTW9kaWZpZXJGbGFncy5BbWJpZW50KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKiBSZXR1cm5zIHRydWUgaWYgZmlsZU5hbWUgaXMgYSAuZC50cyBmaWxlLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRHRzRmlsZU5hbWUoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZmlsZU5hbWUuZW5kc1dpdGgoJy5kLnRzJyk7XG59XG5cbi8qKiBSZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMgb2YgYSB0cy5JZGVudGlmaWVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldElkZW50aWZpZXJUZXh0KGlkZW50aWZpZXI6IHRzLklkZW50aWZpZXIpOiBzdHJpbmcge1xuICAvLyBOT1RFOiAnZXNjYXBlZFRleHQnIG9uIGFuIElkZW50aWZpZXIgbWF5IGJlIGVzY2FwZWQgaWYgaXQgc3RhcnRzIHdpdGggJ19fJy4gVGhlIGFsdGVybmF0aXZlLFxuICAvLyBnZXRUZXh0KCksIGNhbm5vdCBiZSB1c2VkIG9uIHN5bnRoZXNpemVkIG5vZGVzLCBzbyB1bmVzY2FwZSB0aGUgaWRlbnRpZmllciBiZWxvdy5cbiAgcmV0dXJuIHVuZXNjYXBlTmFtZShpZGVudGlmaWVyLmVzY2FwZWRUZXh0KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHN5bWJvbCByZWZlcnMgdG8gYSB2YWx1ZSAoYXMgZGlzdGluY3QgZnJvbSBhIHR5cGUpLlxuICpcbiAqIEV4cGFuZHMgYWxpYXNlcywgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB0aGUgY2FzZSB3aGVyZVxuICogICBpbXBvcnQgKiBhcyB4IGZyb20gJ3NvbWUtbW9kdWxlJztcbiAqIGFuZCB4IGlzIG5vdyBhIHZhbHVlICh0aGUgbW9kdWxlIG9iamVjdCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW1ib2xJc1ZhbHVlKHRjOiB0cy5UeXBlQ2hlY2tlciwgc3ltOiB0cy5TeW1ib2wpOiBib29sZWFuIHtcbiAgaWYgKHN5bS5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLkFsaWFzKSBzeW0gPSB0Yy5nZXRBbGlhc2VkU3ltYm9sKHN5bSk7XG4gIHJldHVybiAoc3ltLmZsYWdzICYgdHMuU3ltYm9sRmxhZ3MuVmFsdWUpICE9PSAwO1xufVxuXG4vKiogUmV0dXJucyBhIGRvdC1qb2luZWQgcXVhbGlmaWVkIG5hbWUgKGZvby5iYXIuQmF6KS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRpdHlOYW1lVGV4dChuYW1lOiB0cy5FbnRpdHlOYW1lKTogc3RyaW5nIHtcbiAgaWYgKHRzLmlzSWRlbnRpZmllcihuYW1lKSkge1xuICAgIHJldHVybiBnZXRJZGVudGlmaWVyVGV4dChuYW1lKTtcbiAgfVxuICByZXR1cm4gZ2V0RW50aXR5TmFtZVRleHQobmFtZS5sZWZ0KSArICcuJyArIGdldElkZW50aWZpZXJUZXh0KG5hbWUucmlnaHQpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIGVzY2FwZWQgVHlwZVNjcmlwdCBuYW1lIGludG8gdGhlIG9yaWdpbmFsIHNvdXJjZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGVOYW1lKG5hbWU6IHRzLl9fU3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gU2VlIHRoZSBwcml2YXRlIGZ1bmN0aW9uIHVuZXNjYXBlSWRlbnRpZmllciBpbiBUeXBlU2NyaXB0J3MgdXRpbGl0aWVzLnRzLlxuICBjb25zdCBzdHIgPSBuYW1lIGFzIHN0cmluZztcbiAgaWYgKHN0ci5zdGFydHNXaXRoKCdfX18nKSkgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMSk7XG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogdHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudCB3aWxsIGNyZWF0ZSBhIG5vZGUsIGJ1dCB0aGUgY29tbWVudHMgY292ZXJlZCBieSBpdHMgdGV4dCByYW5nZSBhcmVcbiAqIG5ldmVyIGVtaXR0ZWRtIGV4Y2VwdCBmb3IgdmVyeSBzcGVjaWZpYyBzcGVjaWFsIGNhc2VzICgvLy8gY29tbWVudHMpLlxuICpcbiAqIGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnRXaXRoQ29tbWVudHMgY3JlYXRlcyBhIG5vdCBlbWl0dGVkIHN0YXRlbWVudCBhbmQgYWRkcyBjb21tZW50IHJhbmdlc1xuICogZnJvbSB0aGUgb3JpZ2luYWwgc3RhdGVtZW50IGFzIHN5bnRoZXRpYyBjb21tZW50cyB0byBpdCwgc28gdGhhdCB0aGV5IGdldCByZXRhaW5lZCBpbiB0aGUgb3V0cHV0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudFdpdGhDb21tZW50cyhcbiAgICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCBvcmlnaW5hbDogdHMuTm9kZSk6IHRzLlN0YXRlbWVudCB7XG4gIGxldCByZXBsYWNlbWVudCA9IHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQob3JpZ2luYWwpO1xuICAvLyBOQjogc3ludGhldGljIG5vZGVzIGNhbiBoYXZlIHBvcy9lbmQgPT0gLTEuIFRoaXMgaXMgaGFuZGxlZCBieSB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbi5cbiAgY29uc3QgbGVhZGluZyA9IHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUudGV4dCwgb3JpZ2luYWwucG9zKSB8fCBbXTtcbiAgY29uc3QgdHJhaWxpbmcgPSB0cy5nZXRUcmFpbGluZ0NvbW1lbnRSYW5nZXMoc291cmNlRmlsZS50ZXh0LCBvcmlnaW5hbC5lbmQpIHx8IFtdO1xuICByZXBsYWNlbWVudCA9XG4gICAgICB0cy5zZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMocmVwbGFjZW1lbnQsIHN5bnRoZXNpemVDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUsIGxlYWRpbmcpKTtcbiAgcmVwbGFjZW1lbnQgPVxuICAgICAgdHMuc2V0U3ludGhldGljVHJhaWxpbmdDb21tZW50cyhyZXBsYWNlbWVudCwgc3ludGhlc2l6ZUNvbW1lbnRSYW5nZXMoc291cmNlRmlsZSwgdHJhaWxpbmcpKTtcbiAgcmV0dXJuIHJlcGxhY2VtZW50O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGB0cy5Db21tZW50UmFuZ2VgcyBpbnRvIGB0cy5TeW50aGVzaXplZENvbW1lbnRgcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN5bnRoZXNpemVDb21tZW50UmFuZ2VzKFxuICAgIHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUsIHBhcnNlZENvbW1lbnRzOiB0cy5Db21tZW50UmFuZ2VbXSk6IHRzLlN5bnRoZXNpemVkQ29tbWVudFtdIHtcbiAgY29uc3Qgc3ludGhlc2l6ZWRDb21tZW50czogdHMuU3ludGhlc2l6ZWRDb21tZW50W10gPSBbXTtcbiAgcGFyc2VkQ29tbWVudHMuZm9yRWFjaCgoe2tpbmQsIHBvcywgZW5kLCBoYXNUcmFpbGluZ05ld0xpbmV9LCBjb21tZW50SWR4KSA9PiB7XG4gICAgbGV0IGNvbW1lbnRUZXh0ID0gc291cmNlRmlsZS50ZXh0LnN1YnN0cmluZyhwb3MsIGVuZCkudHJpbSgpO1xuICAgIGlmIChraW5kID09PSB0cy5TeW50YXhLaW5kLk11bHRpTGluZUNvbW1lbnRUcml2aWEpIHtcbiAgICAgIGNvbW1lbnRUZXh0ID0gY29tbWVudFRleHQucmVwbGFjZSgvKF5cXC9cXCopfChcXCpcXC8kKS9nLCAnJyk7XG4gICAgfSBlbHNlIGlmIChraW5kID09PSB0cy5TeW50YXhLaW5kLlNpbmdsZUxpbmVDb21tZW50VHJpdmlhKSB7XG4gICAgICBpZiAoY29tbWVudFRleHQuc3RhcnRzV2l0aCgnLy8vJykpIHtcbiAgICAgICAgLy8gdHJpcGxlLXNsYXNoIGNvbW1lbnRzIGFyZSB0eXBlc2NyaXB0IHNwZWNpZmljLCBpZ25vcmUgdGhlbSBpbiB0aGUgb3V0cHV0LlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb21tZW50VGV4dCA9IGNvbW1lbnRUZXh0LnJlcGxhY2UoLyheXFwvXFwvKS9nLCAnJyk7XG4gICAgfVxuICAgIHN5bnRoZXNpemVkQ29tbWVudHMucHVzaCh7a2luZCwgdGV4dDogY29tbWVudFRleHQsIGhhc1RyYWlsaW5nTmV3TGluZSwgcG9zOiAtMSwgZW5kOiAtMX0pO1xuICB9KTtcbiAgcmV0dXJuIHN5bnRoZXNpemVkQ29tbWVudHM7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5vbiBlbWl0dGVkIHN0YXRlbWVudCB0aGF0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIHN5bnRoZXNpemVkIGNvbW1lbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKTogdHMuTm90RW1pdHRlZFN0YXRlbWVudCB7XG4gIGNvbnN0IHN0bXQgPSB0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KHNvdXJjZUZpbGUpO1xuICB0cy5zZXRPcmlnaW5hbE5vZGUoc3RtdCwgdW5kZWZpbmVkKTtcbiAgdHMuc2V0VGV4dFJhbmdlKHN0bXQsIHtwb3M6IDAsIGVuZDogMH0pO1xuICB0cy5zZXRFbWl0RmxhZ3Moc3RtdCwgdHMuRW1pdEZsYWdzLkN1c3RvbVByb2xvZ3VlKTtcbiAgcmV0dXJuIHN0bXQ7XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHZlcnNpb24gb2YgYHRzLnZpc2l0RWFjaENoaWxkYCB0aGF0IHdvcmtzIHRoYXQgY2FsbHMgb3VyIHZlcnNpb25cbiAqIG9mIGB1cGRhdGVTb3VyY2VGaWxlTm9kZWAsIHNvIHRoYXQgdHlwZXNjcmlwdCBkb2Vzbid0IGxvc2UgdHlwZSBpbmZvcm1hdGlvblxuICogZm9yIHByb3BlcnR5IGRlY29yYXRvcnMuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8xNzM4NFxuICpcbiAqIEBwYXJhbSBzZlxuICogQHBhcmFtIHN0YXRlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpc2l0RWFjaENoaWxkKFxuICAgIG5vZGU6IHRzLk5vZGUsIHZpc2l0b3I6IHRzLlZpc2l0b3IsIGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCk6IHRzLk5vZGUge1xuICBpZiAobm9kZS5raW5kID09PSB0cy5TeW50YXhLaW5kLlNvdXJjZUZpbGUpIHtcbiAgICBjb25zdCBzZiA9IG5vZGUgYXMgdHMuU291cmNlRmlsZTtcbiAgICByZXR1cm4gdXBkYXRlU291cmNlRmlsZU5vZGUoc2YsIHRzLnZpc2l0TGV4aWNhbEVudmlyb25tZW50KHNmLnN0YXRlbWVudHMsIHZpc2l0b3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdG9yLCBjb250ZXh0KTtcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGEgdmVyc2lvbiBvZiBgdHMudXBkYXRlU291cmNlRmlsZU5vZGVgIHRoYXQgd29ya3NcbiAqIHdlbGwgd2l0aCBwcm9wZXJ0eSBkZWNvcmF0b3JzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTczODRcbiAqIFRPRE8oIzYzNCk6IFRoaXMgaGFzIGJlZW4gZml4ZWQgaW4gVFMgMi41LiBJbnZlc3RpZ2F0ZSByZW1vdmFsLlxuICpcbiAqIEBwYXJhbSBzZlxuICogQHBhcmFtIHN0YXRlbWVudHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVNvdXJjZUZpbGVOb2RlKFxuICAgIHNmOiB0cy5Tb3VyY2VGaWxlLCBzdGF0ZW1lbnRzOiB0cy5Ob2RlQXJyYXk8dHMuU3RhdGVtZW50Pik6IHRzLlNvdXJjZUZpbGUge1xuICBpZiAoc3RhdGVtZW50cyA9PT0gc2Yuc3RhdGVtZW50cykge1xuICAgIHJldHVybiBzZjtcbiAgfVxuICAvLyBOb3RlOiBOZWVkIHRvIGNsb25lIHRoZSBvcmlnaW5hbCBmaWxlIChhbmQgbm90IHVzZSBgdHMudXBkYXRlU291cmNlRmlsZU5vZGVgKVxuICAvLyBhcyBvdGhlcndpc2UgVFMgZmFpbHMgd2hlbiByZXNvbHZpbmcgdHlwZXMgZm9yIGRlY29yYXRvcnMuXG4gIHNmID0gdHMuZ2V0TXV0YWJsZUNsb25lKHNmKTtcbiAgc2Yuc3RhdGVtZW50cyA9IHN0YXRlbWVudHM7XG4gIHJldHVybiBzZjtcbn1cblxuLy8gQ29waWVkIGZyb20gVHlwZVNjcmlwdFxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZU5vZGVLaW5kKGtpbmQ6IHRzLlN5bnRheEtpbmQpIHtcbiAgcmV0dXJuIChraW5kID49IHRzLlN5bnRheEtpbmQuRmlyc3RUeXBlTm9kZSAmJiBraW5kIDw9IHRzLlN5bnRheEtpbmQuTGFzdFR5cGVOb2RlKSB8fFxuICAgICAga2luZCA9PT0gdHMuU3ludGF4S2luZC5BbnlLZXl3b3JkIHx8IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVtYmVyS2V5d29yZCB8fFxuICAgICAga2luZCA9PT0gdHMuU3ludGF4S2luZC5PYmplY3RLZXl3b3JkIHx8IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuQm9vbGVhbktleXdvcmQgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuU3RyaW5nS2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLlN5bWJvbEtleXdvcmQgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuVGhpc0tleXdvcmQgfHwga2luZCA9PT0gdHMuU3ludGF4S2luZC5Wb2lkS2V5d29yZCB8fFxuICAgICAga2luZCA9PT0gdHMuU3ludGF4S2luZC5VbmRlZmluZWRLZXl3b3JkIHx8IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuTnVsbEtleXdvcmQgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuTmV2ZXJLZXl3b3JkIHx8IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuRXhwcmVzc2lvbldpdGhUeXBlQXJndW1lbnRzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJpbmcgbGl0ZXJhbCB0aGF0IHVzZXMgc2luZ2xlIHF1b3Rlcy4gUHVyZWx5IGNvc21ldGljLCBidXQgaW5jcmVhc2VzIGZpZGVsaXR5IHRvIHRoZVxuICogZXhpc3RpbmcgdGVzdCBzdWl0ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNpbmdsZVF1b3RlU3RyaW5nTGl0ZXJhbCh0ZXh0OiBzdHJpbmcpOiB0cy5TdHJpbmdMaXRlcmFsIHtcbiAgY29uc3Qgc3RyaW5nTGl0ZXJhbCA9IHRzLmNyZWF0ZUxpdGVyYWwodGV4dCk7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1hbnkgYWNjZXNzaW5nIFRTIGludGVybmFsIEFQSS5cbiAgKHN0cmluZ0xpdGVyYWwgYXMgYW55KVsnc2luZ2xlUXVvdGUnXSA9IHRydWU7XG4gIHJldHVybiBzdHJpbmdMaXRlcmFsO1xufVxuXG4vKiogQ3JlYXRlcyBhIG5vdCBlbWl0dGVkIHN0YXRlbWVudCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFzIGEgc2luZ2xlIGxpbmUgY29tbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVMaW5lQ29tbWVudChvcmlnaW5hbDogdHMuTm9kZSwgdGV4dDogc3RyaW5nKSB7XG4gIGNvbnN0IGNvbW1lbnQ6IHRzLlN5bnRoZXNpemVkQ29tbWVudCA9IHtcbiAgICBraW5kOiB0cy5TeW50YXhLaW5kLlNpbmdsZUxpbmVDb21tZW50VHJpdmlhLFxuICAgIHRleHQ6ICcgJyArIHRleHQsXG4gICAgaGFzVHJhaWxpbmdOZXdMaW5lOiB0cnVlLFxuICAgIHBvczogLTEsXG4gICAgZW5kOiAtMSxcbiAgfTtcbiAgcmV0dXJuIHRzLnNldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHModHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChvcmlnaW5hbCksIFtjb21tZW50XSk7XG59XG5cbi8qKiBDcmVhdGVzIGEgbm90IGVtaXR0ZWQgc3RhdGVtZW50IHdpdGggdGhlIGdpdmVuIHRleHQgYXMgYSBzaW5nbGUgbGluZSBjb21tZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU11bHRpTGluZUNvbW1lbnQob3JpZ2luYWw6IHRzLk5vZGUsIHRleHQ6IHN0cmluZykge1xuICBjb25zdCBjb21tZW50OiB0cy5TeW50aGVzaXplZENvbW1lbnQgPSB7XG4gICAga2luZDogdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhLFxuICAgIHRleHQ6ICcgJyArIHRleHQsXG4gICAgaGFzVHJhaWxpbmdOZXdMaW5lOiB0cnVlLFxuICAgIHBvczogLTEsXG4gICAgZW5kOiAtMSxcbiAgfTtcbiAgcmV0dXJuIHRzLnNldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHModHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChvcmlnaW5hbCksIFtjb21tZW50XSk7XG59XG5cbi8qKlxuICogZGVidWdXYXJuIGxvZ3MgYSBkZWJ1ZyB3YXJuaW5nLlxuICpcbiAqIFRoZXNlIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNhc2VzIHdoZXJlIHRzaWNrbGUgaXMgbWFraW5nIGEgcXVlc3Rpb25hYmxlIGp1ZGdlbWVudCBhYm91dCB3aGF0XG4gKiB0byBkby4gQnkgZGVmYXVsdCwgdHNpY2tsZSBkb2VzIG5vdCByZXBvcnQgYW55IHdhcm5pbmdzIHRvIHRoZSBjYWxsZXIsIGFuZCB3YXJuaW5ncyBhcmUgaGlkZGVuXG4gKiBiZWhpbmQgYSBkZWJ1ZyBmbGFnLCBhcyB3YXJuaW5ncyBhcmUgb25seSBmb3IgdHNpY2tsZSB0byBkZWJ1ZyBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBvcnREZWJ1Z1dhcm5pbmcoXG4gICAgaG9zdDoge2xvZ1dhcm5pbmcgPyAoZDogdHMuRGlhZ25vc3RpYykgOiB2b2lkfSwgbm9kZTogdHMuTm9kZSwgbWVzc2FnZVRleHQ6IHN0cmluZykge1xuICBpZiAoIWhvc3QubG9nV2FybmluZykgcmV0dXJuO1xuICBob3N0LmxvZ1dhcm5pbmcoY3JlYXRlRGlhZ25vc3RpYyhcbiAgICAgIG5vZGUsIG1lc3NhZ2VUZXh0LCAvKiB0ZXh0UmFuZ2UgKi8gdW5kZWZpbmVkLCB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuV2FybmluZykpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHJlcG9ydHMgYSBkaWFnbm9zdGljIGJ5IGFkZGluZyBpdCB0byB0aGUgZ2l2ZW4gYXJyYXkuXG4gKlxuICogVGhpcyBpcyB1c2VkIGZvciBlcnJvcnMgYW5kIHdhcm5pbmdzIGluIHRzaWNrbGUncyBpbnB1dC4gRW1pdCBlcnJvcnMgKHRoZSBkZWZhdWx0KSBpZiB0c2lja2xlXG4gKiBjYW5ub3QgZW1pdCBhIGNvcnJlY3QgcmVzdWx0IGdpdmVuIHRoZSBpbnB1dC4gRW1pdCB3YXJuaW5ncyBmb3IgcXVlc3Rpb25hYmxlIGlucHV0IGlmIHRoZXJlJ3MgYVxuICogZ29vZCBjaGFuY2UgdGhhdCB0aGUgb3V0cHV0IHdpbGwgd29yay5cbiAqXG4gKiBGb3IgdHlwaWNhbCB0c2lja2xlIHVzZXJzLCBlcnJvcnMgYXJlIGFsd2F5cyByZXBvcnRlZCBhbmQgYnJlYWsgdGhlIGNvbXBpbGF0aW9uIG9wZXJhdGlvbixcbiAqIHdhcm5pbmdzIHdpbGwgb25seSBiZSBlbWl0dGVkIGZvciBmaXJzdCBwYXJ0eSBjb2RlIChhbmQgYnJlYWsgdGhlIGNvbXBpbGF0aW9uIHRoZXJlKSwgYnV0IHdpbCBiZVxuICogaWdub3JlZCBmb3IgdGhpcmQgcGFydHkgY29kZS5cbiAqXG4gKiBAcGFyYW0gdGV4dFJhbmdlIHBhc3MgdG8gb3ZlcnJyaWRlIHRoZSB0ZXh0IHJhbmdlIGZyb20gdGhlIG5vZGUgd2l0aCBhIG1vcmUgc3BlY2lmaWMgcmFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBvcnREaWFnbm9zdGljKFxuICAgIGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10sIG5vZGU6IHRzLk5vZGUsIG1lc3NhZ2VUZXh0OiBzdHJpbmcsIHRleHRSYW5nZT86IHRzLlRleHRSYW5nZSxcbiAgICBjYXRlZ29yeSA9IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvcikge1xuICBkaWFnbm9zdGljcy5wdXNoKGNyZWF0ZURpYWdub3N0aWMobm9kZSwgbWVzc2FnZVRleHQsIHRleHRSYW5nZSwgY2F0ZWdvcnkpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGlhZ25vc3RpYyhcbiAgICBub2RlOiB0cy5Ob2RlLCBtZXNzYWdlVGV4dDogc3RyaW5nLCB0ZXh0UmFuZ2U6IHRzLlRleHRSYW5nZXx1bmRlZmluZWQsXG4gICAgY2F0ZWdvcnk6IHRzLkRpYWdub3N0aWNDYXRlZ29yeSk6IHRzLkRpYWdub3N0aWMge1xuICBsZXQgc3RhcnQsIGxlbmd0aDogbnVtYmVyO1xuICBpZiAodGV4dFJhbmdlKSB7XG4gICAgc3RhcnQgPSB0ZXh0UmFuZ2UucG9zO1xuICAgIGxlbmd0aCA9IHRleHRSYW5nZS5lbmQgLSB0ZXh0UmFuZ2UucG9zO1xuICB9IGVsc2Uge1xuICAgIC8vIE9ubHkgdXNlIGdldFN0YXJ0IGlmIG5vZGUgaGFzIGEgdmFsaWQgcG9zLCBhcyBpdCBtaWdodCBiZSBzeW50aGVzaXplZC5cbiAgICBzdGFydCA9IG5vZGUucG9zID49IDAgPyBub2RlLmdldFN0YXJ0KCkgOiAwO1xuICAgIGxlbmd0aCA9IG5vZGUuZW5kIC0gbm9kZS5wb3M7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBmaWxlOiBub2RlLmdldFNvdXJjZUZpbGUoKSxcbiAgICBzdGFydCxcbiAgICBsZW5ndGgsXG4gICAgbWVzc2FnZVRleHQsXG4gICAgY2F0ZWdvcnksXG4gICAgY29kZTogMCxcbiAgfTtcbn1cblxuLyoqXG4gKiBBIHJlcGxhY2VtZW50IGZvciB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyB0aGF0IHJldHVybnMgdGhlIHVuaW9uIG9mIHN5bnRoZXRpYyBhbmRcbiAqIG5vbi1zeW50aGV0aWMgY29tbWVudHMgb24gdGhlIGdpdmVuIG5vZGUsIHdpdGggdGhlaXIgdGV4dCBpbmNsdWRlZC4gVGhlIHJldHVybmVkIGNvbW1lbnRzIG11c3RcbiAqIG5vdCBiZSBtdXRhdGVkLCBhcyB0aGVpciBjb250ZW50IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSByZWZsZWN0ZWQgYmFjayBpbnRvIHRoZSBBU1QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxMZWFkaW5nQ29tbWVudHMobm9kZTogdHMuTm9kZSk6XG4gICAgUmVhZG9ubHlBcnJheTxSZWFkb25seTx0cy5Db21tZW50UmFuZ2Ume3RleHQ6IHN0cmluZ30+PiB7XG4gIGNvbnN0IGFsbFJhbmdlczogQXJyYXk8UmVhZG9ubHk8dHMuQ29tbWVudFJhbmdlJnt0ZXh0OiBzdHJpbmd9Pj4gPSBbXTtcbiAgY29uc3Qgbm9kZVRleHQgPSBub2RlLmdldEZ1bGxUZXh0KCk7XG4gIGNvbnN0IGNyID0gdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMobm9kZVRleHQsIDApO1xuICBpZiAoY3IpIGFsbFJhbmdlcy5wdXNoKC4uLmNyLm1hcChjID0+ICh7Li4uYywgdGV4dDogbm9kZVRleHQuc3Vic3RyaW5nKGMucG9zLCBjLmVuZCl9KSkpO1xuICBjb25zdCBzeW50aGV0aWMgPSB0cy5nZXRTeW50aGV0aWNMZWFkaW5nQ29tbWVudHMobm9kZSk7XG4gIGlmIChzeW50aGV0aWMpIGFsbFJhbmdlcy5wdXNoKC4uLnN5bnRoZXRpYyk7XG4gIHJldHVybiBhbGxSYW5nZXM7XG59XG4iXX0=
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtZXJfdXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90cmFuc2Zvcm1lcl91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILGlDQUFpQztJQUVqQyxnRUFBZ0U7SUFDaEUsU0FBZ0IsZUFBZSxDQUFDLFdBQTJCLEVBQUUsSUFBc0I7UUFDakYsT0FBTyxDQUFDLEVBQUUsQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUZELDBDQUVDO0lBRUQsZ0VBQWdFO0lBQ2hFLFNBQWdCLFNBQVMsQ0FBQyxJQUFhO1FBQ3JDLElBQUksT0FBTyxHQUFzQixJQUFJLENBQUM7UUFDdEMsT0FBTyxPQUFPLEVBQUU7WUFDZCxJQUFJLGVBQWUsQ0FBQyxPQUF5QixFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQVRELDhCQVNDO0lBRUQsZ0RBQWdEO0lBQ2hELFNBQWdCLGFBQWEsQ0FBQyxRQUFnQjtRQUM1QyxPQUFPLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUZELHNDQUVDO0lBRUQsc0RBQXNEO0lBQ3RELFNBQWdCLGlCQUFpQixDQUFDLFVBQXlCO1FBQ3pELCtGQUErRjtRQUMvRixvRkFBb0Y7UUFDcEYsT0FBTyxZQUFZLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFKRCw4Q0FJQztJQUVEOzs7Ozs7T0FNRztJQUNILFNBQWdCLGFBQWEsQ0FBQyxFQUFrQixFQUFFLEdBQWM7UUFDOUQsSUFBSSxHQUFH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O1NBQzlCO1FBQ0QsT0FBTztZQUNMLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzFCLEtBQUs7WUFDTCxNQUFNO1lBQ04sV0FBVztZQUNYLFFBQVE7WUFDUixJQUFJLEVBQUUsQ0FBQztTQUNSLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFNBQWdCLHFCQUFxQixDQUFDLElBQWE7UUFFakQsTUFBTSxTQUFTLEdBQW9ELEVBQUUsQ0FBQztRQUN0RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFJLEVBQUU7WUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGlDQUFLLENBQUMsS0FBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkQsSUFBSSxTQUFTO1lBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFURCxzREFTQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0ICogYXMgdHMgZnJvbSAndHlwZXNjcmlwdCc7XG5cbi8qKiBAcmV0dXJuIHRydWUgaWYgbm9kZSBoYXMgdGhlIHNwZWNpZmllZCBtb2RpZmllciBmbGFnIHNldC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNNb2RpZmllckZsYWcoZGVjbGFyYXRpb246IHRzLkRlY2xhcmF0aW9uLCBmbGFnOiB0cy5Nb2RpZmllckZsYWdzKTogYm9vbGVhbiB7XG4gIHJldHVybiAodHMuZ2V0Q29tYmluZWRNb2RpZmllckZsYWdzKGRlY2xhcmF0aW9uKSAmIGZsYWcpICE9PSAwO1xufVxuXG4vKiogQHJldHVybiB0cnVlIGlmIG5vZGUgaGFzIHRoZSBzcGVjaWZpZWQgbW9kaWZpZXIgZmxhZyBzZXQuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBbWJpZW50KG5vZGU6IHRzLk5vZGUpOiBib29sZWFuIHtcbiAgbGV0IGN1cnJlbnQ6IHRzLk5vZGV8dW5kZWZpbmVkID0gbm9kZTtcbiAgd2hpbGUgKGN1cnJlbnQpIHtcbiAgICBpZiAoaGFzTW9kaWZpZXJGbGFnKGN1cnJlbnQgYXMgdHMuRGVjbGFyYXRpb24sIHRzLk1vZGlmaWVyRmxhZ3MuQW1iaWVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIGZpbGVOYW1lIGlzIGEgLmQudHMgZmlsZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0R0c0ZpbGVOYW1lKGZpbGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIGZpbGVOYW1lLmVuZHNXaXRoKCcuZC50cycpO1xufVxuXG4vKiogUmV0dXJucyB0aGUgc3RyaW5nIGNvbnRlbnRzIG9mIGEgdHMuSWRlbnRpZmllci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJZGVudGlmaWVyVGV4dChpZGVudGlmaWVyOiB0cy5JZGVudGlmaWVyKTogc3RyaW5nIHtcbiAgLy8gTk9URTogJ2VzY2FwZWRUZXh0JyBvbiBhbiBJZGVudGlmaWVyIG1heSBiZSBlc2NhcGVkIGlmIGl0IHN0YXJ0cyB3aXRoICdfXycuIFRoZSBhbHRlcm5hdGl2ZSxcbiAgLy8gZ2V0VGV4dCgpLCBjYW5ub3QgYmUgdXNlZCBvbiBzeW50aGVzaXplZCBub2Rlcywgc28gdW5lc2NhcGUgdGhlIGlkZW50aWZpZXIgYmVsb3cuXG4gIHJldHVybiB1bmVzY2FwZU5hbWUoaWRlbnRpZmllci5lc2NhcGVkVGV4dCk7XG59XG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBzeW1ib2wgcmVmZXJzIHRvIGEgdmFsdWUgKGFzIGRpc3RpbmN0IGZyb20gYSB0eXBlKS5cbiAqXG4gKiBFeHBhbmRzIGFsaWFzZXMsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdGhlIGNhc2Ugd2hlcmVcbiAqICAgaW1wb3J0ICogYXMgeCBmcm9tICdzb21lLW1vZHVsZSc7XG4gKiBhbmQgeCBpcyBub3cgYSB2YWx1ZSAodGhlIG1vZHVsZSBvYmplY3QpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ltYm9sSXNWYWx1ZSh0YzogdHMuVHlwZUNoZWNrZXIsIHN5bTogdHMuU3ltYm9sKTogYm9vbGVhbiB7XG4gIGlmIChzeW0uZmxhZ3MgJiB0cy5TeW1ib2xGbGFncy5BbGlhcykgc3ltID0gdGMuZ2V0QWxpYXNlZFN5bWJvbChzeW0pO1xuICByZXR1cm4gKHN5bS5mbGFncyAmIHRzLlN5bWJvbEZsYWdzLlZhbHVlKSAhPT0gMDtcbn1cblxuLyoqIFJldHVybnMgYSBkb3Qtam9pbmVkIHF1YWxpZmllZCBuYW1lIChmb28uYmFyLkJheikuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50aXR5TmFtZVRleHQobmFtZTogdHMuRW50aXR5TmFtZSk6IHN0cmluZyB7XG4gIGlmICh0cy5pc0lkZW50aWZpZXIobmFtZSkpIHtcbiAgICByZXR1cm4gZ2V0SWRlbnRpZmllclRleHQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGdldEVudGl0eU5hbWVUZXh0KG5hbWUubGVmdCkgKyAnLicgKyBnZXRJZGVudGlmaWVyVGV4dChuYW1lLnJpZ2h0KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlc2NhcGVkIFR5cGVTY3JpcHQgbmFtZSBpbnRvIHRoZSBvcmlnaW5hbCBzb3VyY2UgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuZXNjYXBlTmFtZShuYW1lOiB0cy5fX1N0cmluZyk6IHN0cmluZyB7XG4gIC8vIFNlZSB0aGUgcHJpdmF0ZSBmdW5jdGlvbiB1bmVzY2FwZUlkZW50aWZpZXIgaW4gVHlwZVNjcmlwdCdzIHV0aWxpdGllcy50cy5cbiAgY29uc3Qgc3RyID0gbmFtZSBhcyBzdHJpbmc7XG4gIGlmIChzdHIuc3RhcnRzV2l0aCgnX19fJykpIHJldHVybiBzdHIuc3Vic3RyaW5nKDEpO1xuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQgd2lsbCBjcmVhdGUgYSBub2RlLCBidXQgdGhlIGNvbW1lbnRzIGNvdmVyZWQgYnkgaXRzIHRleHQgcmFuZ2UgYXJlXG4gKiBuZXZlciBlbWl0dGVkbSBleGNlcHQgZm9yIHZlcnkgc3BlY2lmaWMgc3BlY2lhbCBjYXNlcyAoLy8vIGNvbW1lbnRzKS5cbiAqXG4gKiBjcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50V2l0aENvbW1lbnRzIGNyZWF0ZXMgYSBub3QgZW1pdHRlZCBzdGF0ZW1lbnQgYW5kIGFkZHMgY29tbWVudCByYW5nZXNcbiAqIGZyb20gdGhlIG9yaWdpbmFsIHN0YXRlbWVudCBhcyBzeW50aGV0aWMgY29tbWVudHMgdG8gaXQsIHNvIHRoYXQgdGhleSBnZXQgcmV0YWluZWQgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnRXaXRoQ29tbWVudHMoXG4gICAgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgb3JpZ2luYWw6IHRzLk5vZGUpOiB0cy5TdGF0ZW1lbnQge1xuICBsZXQgcmVwbGFjZW1lbnQgPSB0cy5jcmVhdGVOb3RFbWl0dGVkU3RhdGVtZW50KG9yaWdpbmFsKTtcbiAgLy8gTkI6IHN5bnRoZXRpYyBub2RlcyBjYW4gaGF2ZSBwb3MvZW5kID09IC0xLiBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24uXG4gIGNvbnN0IGxlYWRpbmcgPSB0cy5nZXRMZWFkaW5nQ29tbWVudFJhbmdlcyhzb3VyY2VGaWxlLnRleHQsIG9yaWdpbmFsLnBvcykgfHwgW107XG4gIGNvbnN0IHRyYWlsaW5nID0gdHMuZ2V0VHJhaWxpbmdDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUudGV4dCwgb3JpZ2luYWwuZW5kKSB8fCBbXTtcbiAgcmVwbGFjZW1lbnQgPVxuICAgICAgdHMuc2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKHJlcGxhY2VtZW50LCBzeW50aGVzaXplQ29tbWVudFJhbmdlcyhzb3VyY2VGaWxlLCBsZWFkaW5nKSk7XG4gIHJlcGxhY2VtZW50ID1cbiAgICAgIHRzLnNldFN5bnRoZXRpY1RyYWlsaW5nQ29tbWVudHMocmVwbGFjZW1lbnQsIHN5bnRoZXNpemVDb21tZW50UmFuZ2VzKHNvdXJjZUZpbGUsIHRyYWlsaW5nKSk7XG4gIHJldHVybiByZXBsYWNlbWVudDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBgdHMuQ29tbWVudFJhbmdlYHMgaW50byBgdHMuU3ludGhlc2l6ZWRDb21tZW50YHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzeW50aGVzaXplQ29tbWVudFJhbmdlcyhcbiAgICBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCBwYXJzZWRDb21tZW50czogdHMuQ29tbWVudFJhbmdlW10pOiB0cy5TeW50aGVzaXplZENvbW1lbnRbXSB7XG4gIGNvbnN0IHN5bnRoZXNpemVkQ29tbWVudHM6IHRzLlN5bnRoZXNpemVkQ29tbWVudFtdID0gW107XG4gIHBhcnNlZENvbW1lbnRzLmZvckVhY2goKHtraW5kLCBwb3MsIGVuZCwgaGFzVHJhaWxpbmdOZXdMaW5lfSwgY29tbWVudElkeCkgPT4ge1xuICAgIGxldCBjb21tZW50VGV4dCA9IHNvdXJjZUZpbGUudGV4dC5zdWJzdHJpbmcocG9zLCBlbmQpLnRyaW0oKTtcbiAgICBpZiAoa2luZCA9PT0gdHMuU3ludGF4S2luZC5NdWx0aUxpbmVDb21tZW50VHJpdmlhKSB7XG4gICAgICBjb21tZW50VGV4dCA9IGNvbW1lbnRUZXh0LnJlcGxhY2UoLyheXFwvXFwqKXwoXFwqXFwvJCkvZywgJycpO1xuICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gdHMuU3ludGF4S2luZC5TaW5nbGVMaW5lQ29tbWVudFRyaXZpYSkge1xuICAgICAgaWYgKGNvbW1lbnRUZXh0LnN0YXJ0c1dpdGgoJy8vLycpKSB7XG4gICAgICAgIC8vIHRyaXBsZS1zbGFzaCBjb21tZW50cyBhcmUgdHlwZXNjcmlwdCBzcGVjaWZpYywgaWdub3JlIHRoZW0gaW4gdGhlIG91dHB1dC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29tbWVudFRleHQgPSBjb21tZW50VGV4dC5yZXBsYWNlKC8oXlxcL1xcLykvZywgJycpO1xuICAgIH1cbiAgICBzeW50aGVzaXplZENvbW1lbnRzLnB1c2goe2tpbmQsIHRleHQ6IGNvbW1lbnRUZXh0LCBoYXNUcmFpbGluZ05ld0xpbmUsIHBvczogLTEsIGVuZDogLTF9KTtcbiAgfSk7XG4gIHJldHVybiBzeW50aGVzaXplZENvbW1lbnRzO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBub24gZW1pdHRlZCBzdGF0ZW1lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBzdG9yZSBzeW50aGVzaXplZCBjb21tZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSk6IHRzLk5vdEVtaXR0ZWRTdGF0ZW1lbnQge1xuICBjb25zdCBzdG10ID0gdHMuY3JlYXRlTm90RW1pdHRlZFN0YXRlbWVudChzb3VyY2VGaWxlKTtcbiAgdHMuc2V0T3JpZ2luYWxOb2RlKHN0bXQsIHVuZGVmaW5lZCk7XG4gIHRzLnNldFRleHRSYW5nZShzdG10LCB7cG9zOiAwLCBlbmQ6IDB9KTtcbiAgdHMuc2V0RW1pdEZsYWdzKHN0bXQsIHRzLkVtaXRGbGFncy5DdXN0b21Qcm9sb2d1ZSk7XG4gIHJldHVybiBzdG10O1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYSB2ZXJzaW9uIG9mIGB0cy52aXNpdEVhY2hDaGlsZGAgdGhhdCB3b3JrcyB0aGF0IGNhbGxzIG91ciB2ZXJzaW9uXG4gKiBvZiBgdXBkYXRlU291cmNlRmlsZU5vZGVgLCBzbyB0aGF0IHR5cGVzY3JpcHQgZG9lc24ndCBsb3NlIHR5cGUgaW5mb3JtYXRpb25cbiAqIGZvciBwcm9wZXJ0eSBkZWNvcmF0b3JzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMTczODRcbiAqXG4gKiBAcGFyYW0gc2ZcbiAqIEBwYXJhbSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXNpdEVhY2hDaGlsZChcbiAgICBub2RlOiB0cy5Ob2RlLCB2aXNpdG9yOiB0cy5WaXNpdG9yLCBjb250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpOiB0cy5Ob2RlIHtcbiAgaWYgKG5vZGUua2luZCA9PT0gdHMuU3ludGF4S2luZC5Tb3VyY2VGaWxlKSB7XG4gICAgY29uc3Qgc2YgPSBub2RlIGFzIHRzLlNvdXJjZUZpbGU7XG4gICAgcmV0dXJuIHVwZGF0ZVNvdXJjZUZpbGVOb2RlKHNmLCB0cy52aXNpdExleGljYWxFbnZpcm9ubWVudChzZi5zdGF0ZW1lbnRzLCB2aXNpdG9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXRvciwgY29udGV4dCk7XG59XG5cbi8qKlxuICogVGhpcyBpcyBhIHZlcnNpb24gb2YgYHRzLnVwZGF0ZVNvdXJjZUZpbGVOb2RlYCB0aGF0IHdvcmtzXG4gKiB3ZWxsIHdpdGggcHJvcGVydHkgZGVjb3JhdG9ycy5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzE3Mzg0XG4gKiBUT0RPKCM2MzQpOiBUaGlzIGhhcyBiZWVuIGZpeGVkIGluIFRTIDIuNS4gSW52ZXN0aWdhdGUgcmVtb3ZhbC5cbiAqXG4gKiBAcGFyYW0gc2ZcbiAqIEBwYXJhbSBzdGF0ZW1lbnRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVTb3VyY2VGaWxlTm9kZShcbiAgICBzZjogdHMuU291cmNlRmlsZSwgc3RhdGVtZW50czogdHMuTm9kZUFycmF5PHRzLlN0YXRlbWVudD4pOiB0cy5Tb3VyY2VGaWxlIHtcbiAgaWYgKHN0YXRlbWVudHMgPT09IHNmLnN0YXRlbWVudHMpIHtcbiAgICByZXR1cm4gc2Y7XG4gIH1cbiAgLy8gTm90ZTogTmVlZCB0byBjbG9uZSB0aGUgb3JpZ2luYWwgZmlsZSAoYW5kIG5vdCB1c2UgYHRzLnVwZGF0ZVNvdXJjZUZpbGVOb2RlYClcbiAgLy8gYXMgb3RoZXJ3aXNlIFRTIGZhaWxzIHdoZW4gcmVzb2x2aW5nIHR5cGVzIGZvciBkZWNvcmF0b3JzLlxuICBzZiA9IHRzLmdldE11dGFibGVDbG9uZShzZik7XG4gIHNmLnN0YXRlbWVudHMgPSBzdGF0ZW1lbnRzO1xuICByZXR1cm4gc2Y7XG59XG5cbi8vIENvcGllZCBmcm9tIFR5cGVTY3JpcHRcbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVOb2RlS2luZChraW5kOiB0cy5TeW50YXhLaW5kKSB7XG4gIHJldHVybiAoa2luZCA+PSB0cy5TeW50YXhLaW5kLkZpcnN0VHlwZU5vZGUgJiYga2luZCA8PSB0cy5TeW50YXhLaW5kLkxhc3RUeXBlTm9kZSkgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuQW55S2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLk51bWJlcktleXdvcmQgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuT2JqZWN0S2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLkJvb2xlYW5LZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLlN0cmluZ0tleXdvcmQgfHwga2luZCA9PT0gdHMuU3ludGF4S2luZC5TeW1ib2xLZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLlRoaXNLZXl3b3JkIHx8IGtpbmQgPT09IHRzLlN5bnRheEtpbmQuVm9pZEtleXdvcmQgfHxcbiAgICAgIGtpbmQgPT09IHRzLlN5bnRheEtpbmQuVW5kZWZpbmVkS2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLk51bGxLZXl3b3JkIHx8XG4gICAgICBraW5kID09PSB0cy5TeW50YXhLaW5kLk5ldmVyS2V5d29yZCB8fCBraW5kID09PSB0cy5TeW50YXhLaW5kLkV4cHJlc3Npb25XaXRoVHlwZUFyZ3VtZW50cztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyaW5nIGxpdGVyYWwgdGhhdCB1c2VzIHNpbmdsZSBxdW90ZXMuIFB1cmVseSBjb3NtZXRpYywgYnV0IGluY3JlYXNlcyBmaWRlbGl0eSB0byB0aGVcbiAqIGV4aXN0aW5nIHRlc3Qgc3VpdGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaW5nbGVRdW90ZVN0cmluZ0xpdGVyYWwodGV4dDogc3RyaW5nKTogdHMuU3RyaW5nTGl0ZXJhbCB7XG4gIGNvbnN0IHN0cmluZ0xpdGVyYWwgPSB0cy5jcmVhdGVMaXRlcmFsKHRleHQpO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55IGFjY2Vzc2luZyBUUyBpbnRlcm5hbCBBUEkuXG4gIChzdHJpbmdMaXRlcmFsIGFzIGFueSlbJ3NpbmdsZVF1b3RlJ10gPSB0cnVlO1xuICByZXR1cm4gc3RyaW5nTGl0ZXJhbDtcbn1cblxuLyoqIENyZWF0ZXMgYSBub3QgZW1pdHRlZCBzdGF0ZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gdGV4dCBhcyBhIHNpbmdsZSBsaW5lIGNvbW1lbnQuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2luZ2xlTGluZUNvbW1lbnQob3JpZ2luYWw6IHRzLk5vZGUsIHRleHQ6IHN0cmluZykge1xuICBjb25zdCBjb21tZW50OiB0cy5TeW50aGVzaXplZENvbW1lbnQgPSB7XG4gICAga2luZDogdHMuU3ludGF4S2luZC5TaW5nbGVMaW5lQ29tbWVudFRyaXZpYSxcbiAgICB0ZXh0OiAnICcgKyB0ZXh0LFxuICAgIGhhc1RyYWlsaW5nTmV3TGluZTogdHJ1ZSxcbiAgICBwb3M6IC0xLFxuICAgIGVuZDogLTEsXG4gIH07XG4gIHJldHVybiB0cy5zZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzKHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQob3JpZ2luYWwpLCBbY29tbWVudF0pO1xufVxuXG4vKiogQ3JlYXRlcyBhIG5vdCBlbWl0dGVkIHN0YXRlbWVudCB3aXRoIHRoZSBnaXZlbiB0ZXh0IGFzIGEgc2luZ2xlIGxpbmUgY29tbWVudC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNdWx0aUxpbmVDb21tZW50KG9yaWdpbmFsOiB0cy5Ob2RlLCB0ZXh0OiBzdHJpbmcpIHtcbiAgY29uc3QgY29tbWVudDogdHMuU3ludGhlc2l6ZWRDb21tZW50ID0ge1xuICAgIGtpbmQ6IHRzLlN5bnRheEtpbmQuTXVsdGlMaW5lQ29tbWVudFRyaXZpYSxcbiAgICB0ZXh0OiAnICcgKyB0ZXh0LFxuICAgIGhhc1RyYWlsaW5nTmV3TGluZTogdHJ1ZSxcbiAgICBwb3M6IC0xLFxuICAgIGVuZDogLTEsXG4gIH07XG4gIHJldHVybiB0cy5zZXRTeW50aGV0aWNUcmFpbGluZ0NvbW1lbnRzKHRzLmNyZWF0ZU5vdEVtaXR0ZWRTdGF0ZW1lbnQob3JpZ2luYWwpLCBbY29tbWVudF0pO1xufVxuXG4vKipcbiAqIGRlYnVnV2FybiBsb2dzIGEgZGVidWcgd2FybmluZy5cbiAqXG4gKiBUaGVzZSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjYXNlcyB3aGVyZSB0c2lja2xlIGlzIG1ha2luZyBhIHF1ZXN0aW9uYWJsZSBqdWRnZW1lbnQgYWJvdXQgd2hhdFxuICogdG8gZG8uIEJ5IGRlZmF1bHQsIHRzaWNrbGUgZG9lcyBub3QgcmVwb3J0IGFueSB3YXJuaW5ncyB0byB0aGUgY2FsbGVyLCBhbmQgd2FybmluZ3MgYXJlIGhpZGRlblxuICogYmVoaW5kIGEgZGVidWcgZmxhZywgYXMgd2FybmluZ3MgYXJlIG9ubHkgZm9yIHRzaWNrbGUgdG8gZGVidWcgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0RGVidWdXYXJuaW5nKFxuICAgIGhvc3Q6IHtsb2dXYXJuaW5nID8gKGQ6IHRzLkRpYWdub3N0aWMpIDogdm9pZH0sIG5vZGU6IHRzLk5vZGUsIG1lc3NhZ2VUZXh0OiBzdHJpbmcpIHtcbiAgaWYgKCFob3N0LmxvZ1dhcm5pbmcpIHJldHVybjtcbiAgaG9zdC5sb2dXYXJuaW5nKGNyZWF0ZURpYWdub3N0aWMoXG4gICAgICBub2RlLCBtZXNzYWdlVGV4dCwgLyogdGV4dFJhbmdlICovIHVuZGVmaW5lZCwgdHMuRGlhZ25vc3RpY0NhdGVnb3J5Lldhcm5pbmcpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuZCByZXBvcnRzIGEgZGlhZ25vc3RpYyBieSBhZGRpbmcgaXQgdG8gdGhlIGdpdmVuIGFycmF5LlxuICpcbiAqIFRoaXMgaXMgdXNlZCBmb3IgZXJyb3JzIGFuZCB3YXJuaW5ncyBpbiB0c2lja2xlJ3MgaW5wdXQuIEVtaXQgZXJyb3JzICh0aGUgZGVmYXVsdCkgaWYgdHNpY2tsZVxuICogY2Fubm90IGVtaXQgYSBjb3JyZWN0IHJlc3VsdCBnaXZlbiB0aGUgaW5wdXQuIEVtaXQgd2FybmluZ3MgZm9yIHF1ZXN0aW9uYWJsZSBpbnB1dCBpZiB0aGVyZSdzIGFcbiAqIGdvb2QgY2hhbmNlIHRoYXQgdGhlIG91dHB1dCB3aWxsIHdvcmsuXG4gKlxuICogRm9yIHR5cGljYWwgdHNpY2tsZSB1c2VycywgZXJyb3JzIGFyZSBhbHdheXMgcmVwb3J0ZWQgYW5kIGJyZWFrIHRoZSBjb21waWxhdGlvbiBvcGVyYXRpb24sXG4gKiB3YXJuaW5ncyB3aWxsIG9ubHkgYmUgZW1pdHRlZCBmb3IgZmlyc3QgcGFydHkgY29kZSAoYW5kIGJyZWFrIHRoZSBjb21waWxhdGlvbiB0aGVyZSksIGJ1dCB3aWwgYmVcbiAqIGlnbm9yZWQgZm9yIHRoaXJkIHBhcnR5IGNvZGUuXG4gKlxuICogQHBhcmFtIHRleHRSYW5nZSBwYXNzIHRvIG92ZXJycmlkZSB0aGUgdGV4dCByYW5nZSBmcm9tIHRoZSBub2RlIHdpdGggYSBtb3JlIHNwZWNpZmljIHJhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0RGlhZ25vc3RpYyhcbiAgICBkaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdLCBub2RlOiB0cy5Ob2RlLCBtZXNzYWdlVGV4dDogc3RyaW5nLCB0ZXh0UmFuZ2U/OiB0cy5UZXh0UmFuZ2UsXG4gICAgY2F0ZWdvcnkgPSB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkuRXJyb3IpIHtcbiAgZGlhZ25vc3RpY3MucHVzaChjcmVhdGVEaWFnbm9zdGljKG5vZGUsIG1lc3NhZ2VUZXh0LCB0ZXh0UmFuZ2UsIGNhdGVnb3J5KSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpYWdub3N0aWMoXG4gICAgbm9kZTogdHMuTm9kZSwgbWVzc2FnZVRleHQ6IHN0cmluZywgdGV4dFJhbmdlOiB0cy5UZXh0UmFuZ2V8dW5kZWZpbmVkLFxuICAgIGNhdGVnb3J5OiB0cy5EaWFnbm9zdGljQ2F0ZWdvcnkpOiB0cy5EaWFnbm9zdGljIHtcbiAgbGV0IHN0YXJ0LCBsZW5ndGg6IG51bWJlcjtcbiAgaWYgKHRleHRSYW5nZSkge1xuICAgIHN0YXJ0ID0gdGV4dFJhbmdlLnBvcztcbiAgICBsZW5ndGggPSB0ZXh0UmFuZ2UuZW5kIC0gdGV4dFJhbmdlLnBvcztcbiAgfSBlbHNlIHtcbiAgICAvLyBPbmx5IHVzZSBnZXRTdGFydCBpZiBub2RlIGhhcyBhIHZhbGlkIHBvcywgYXMgaXQgbWlnaHQgYmUgc3ludGhlc2l6ZWQuXG4gICAgc3RhcnQgPSBub2RlLnBvcyA+PSAwID8gbm9kZS5nZXRTdGFydCgpIDogMDtcbiAgICBsZW5ndGggPSBub2RlLmVuZCAtIG5vZGUucG9zO1xuICB9XG4gIHJldHVybiB7XG4gICAgZmlsZTogbm9kZS5nZXRTb3VyY2VGaWxlKCksXG4gICAgc3RhcnQsXG4gICAgbGVuZ3RoLFxuICAgIG1lc3NhZ2VUZXh0LFxuICAgIGNhdGVnb3J5LFxuICAgIGNvZGU6IDAsXG4gIH07XG59XG5cbi8qKlxuICogQSByZXBsYWNlbWVudCBmb3IgdHMuZ2V0TGVhZGluZ0NvbW1lbnRSYW5nZXMgdGhhdCByZXR1cm5zIHRoZSB1bmlvbiBvZiBzeW50aGV0aWMgYW5kXG4gKiBub24tc3ludGhldGljIGNvbW1lbnRzIG9uIHRoZSBnaXZlbiBub2RlLCB3aXRoIHRoZWlyIHRleHQgaW5jbHVkZWQuIFRoZSByZXR1cm5lZCBjb21tZW50cyBtdXN0XG4gKiBub3QgYmUgbXV0YXRlZCwgYXMgdGhlaXIgY29udGVudCBtaWdodCBvciBtaWdodCBub3QgYmUgcmVmbGVjdGVkIGJhY2sgaW50byB0aGUgQVNULlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsTGVhZGluZ0NvbW1lbnRzKG5vZGU6IHRzLk5vZGUpOlxuICAgIFJlYWRvbmx5QXJyYXk8UmVhZG9ubHk8dHMuQ29tbWVudFJhbmdlJnt0ZXh0OiBzdHJpbmd9Pj4ge1xuICBjb25zdCBhbGxSYW5nZXM6IEFycmF5PFJlYWRvbmx5PHRzLkNvbW1lbnRSYW5nZSZ7dGV4dDogc3RyaW5nfT4+ID0gW107XG4gIGNvbnN0IG5vZGVUZXh0ID0gbm9kZS5nZXRGdWxsVGV4dCgpO1xuICBjb25zdCBjciA9IHRzLmdldExlYWRpbmdDb21tZW50UmFuZ2VzKG5vZGVUZXh0LCAwKTtcbiAgaWYgKGNyKSBhbGxSYW5nZXMucHVzaCguLi5jci5tYXAoYyA9PiAoey4uLmMsIHRleHQ6IG5vZGVUZXh0LnN1YnN0cmluZyhjLnBvcywgYy5lbmQpfSkpKTtcbiAgY29uc3Qgc3ludGhldGljID0gdHMuZ2V0U3ludGhldGljTGVhZGluZ0NvbW1lbnRzKG5vZGUpO1xuICBpZiAoc3ludGhldGljKSBhbGxSYW5nZXMucHVzaCguLi5zeW50aGV0aWMpO1xuICByZXR1cm4gYWxsUmFuZ2VzO1xufVxuIl19

@@ -19,2 +19,3 @@ /**

Object.defineProperty(exports, "__esModule", { value: true });
exports.emit = exports.emitWithTsickle = exports.mergeEmitResults = void 0;
const ts = require("typescript");

@@ -33,8 +34,8 @@ const cli_support_1 = require("tsickle/src/cli_support");

var cli_support_2 = require("tsickle/src/cli_support");
exports.pathToModuleName = cli_support_2.pathToModuleName;
Object.defineProperty(exports, "pathToModuleName", { enumerable: true, get: function () { return cli_support_2.pathToModuleName; } });
// Retained here for API compatibility.
var externs_2 = require("tsickle/src/externs");
exports.getGeneratedExterns = externs_2.getGeneratedExterns;
Object.defineProperty(exports, "getGeneratedExterns", { enumerable: true, get: function () { return externs_2.getGeneratedExterns; } });
var modules_manifest_2 = require("tsickle/src/modules_manifest");
exports.ModulesManifest = modules_manifest_2.ModulesManifest;
Object.defineProperty(exports, "ModulesManifest", { enumerable: true, get: function () { return modules_manifest_2.ModulesManifest; } });
function mergeEmitResults(emitResults) {

@@ -301,2 +302,2 @@ const diagnostics = [];

});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpY2tsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c2lja2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7O0lBRUgsaUNBQWlDO0lBR2pDLHlEQUE2QztJQUM3QyxpR0FBZ0Y7SUFDaEYsdURBQWlGO0lBQ2pGLG1FQUFtRDtJQUNuRCxpREFBMEM7SUFDMUMsbUdBQXVGO0lBQ3ZGLHFEQUEyQztJQUMzQyxxRUFBMkU7SUFDM0UsbUVBQW1EO0lBQ25ELG1FQUFpRDtJQUVqRCw0REFBNEQ7SUFDNUQsdURBQStDO0lBQXZDLHlDQUFBLGdCQUFnQixDQUFBO0lBQ3hCLHVDQUF1QztJQUN2QywrQ0FBOEM7SUFBdEMsd0NBQUEsbUJBQW1CLENBQUE7SUFDM0IsaUVBQTREO0lBQTNDLDZDQUFBLGVBQWUsQ0FBQTtJQW1DaEMsU0FBZ0IsZ0JBQWdCLENBQUMsV0FBeUI7UUFDeEQsTUFBTSxXQUFXLEdBQW9CLEVBQUUsQ0FBQztRQUN4QyxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFpQyxFQUFFLENBQUM7UUFDakQsTUFBTSxlQUFlLEdBQUcsSUFBSSxrQ0FBZSxFQUFFLENBQUM7UUFDOUMsS0FBSyxNQUFNLEVBQUUsSUFBSSxXQUFXLEVBQUU7WUFDNUIsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwQyxXQUFXLEdBQUcsV0FBVyxJQUFJLEVBQUUsQ0FBQyxXQUFXLENBQUM7WUFDNUMsSUFBSSxFQUFFLENBQUMsWUFBWSxFQUFFO2dCQUNuQixZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3ZDO1lBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FB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ZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFDLE9BQU8sQ0FBQyxVQUF5QixFQUFFLEVBQUU7Z0JBQ25DLElBQUksSUFBSSxDQUFDLDJCQUEyQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDekQsT0FBTyxVQUFVLENBQUM7aUJBQ25CO2dCQUNELE9BQU8sUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQztJQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCAqIGFzIHRzIGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQge0Fubm90YXRvckhvc3R9IGZyb20gJy4vYW5ub3RhdG9yX2hvc3QnO1xuaW1wb3J0IHthc3NlcnRBYnNvbHV0ZX0gZnJvbSAnLi9jbGlfc3VwcG9ydCc7XG5pbXBvcnQge2RlY29yYXRvckRvd25sZXZlbFRyYW5zZm9ybWVyfSBmcm9tICcuL2RlY29yYXRvcl9kb3dubGV2ZWxfdHJhbnNmb3JtZXInO1xuaW1wb3J0IHt0cmFuc2Zvcm1EZWNvcmF0b3JzT3V0cHV0Rm9yQ2xvc3VyZVByb3BlcnR5UmVuYW1pbmd9IGZyb20gJy4vZGVjb3JhdG9ycyc7XG5pbXBvcnQge2VudW1UcmFuc2Zvcm1lcn0gZnJvbSAnLi9lbnVtX3RyYW5zZm9ybWVyJztcbmltcG9ydCB7Z2VuZXJhdGVFeHRlcm5zfSBmcm9tICcuL2V4dGVybnMnO1xuaW1wb3J0IHt0cmFuc2Zvcm1GaWxlb3ZlcnZpZXdDb21tZW50RmFjdG9yeX0gZnJvbSAnLi9maWxlb3ZlcnZpZXdfY29tbWVudF90cmFuc2Zvcm1lcic7XG5pbXBvcnQgKiBhcyBnb29nbW9kdWxlIGZyb20gJy4vZ29vZ21vZHVsZSc7XG5pbXBvcnQge2pzZG9jVHJhbnNmb3JtZXIsIHJlbW92ZVR5cGVBc3NlcnRpb25zfSBmcm9tICcuL2pzZG9jX3RyYW5zZm9ybWVyJztcbmltcG9ydCB7TW9kdWxlc01hbmlmZXN0fSBmcm9tICcuL21vZHVsZXNfbWFuaWZlc3QnO1xuaW1wb3J0IHtpc0R0c0ZpbGVOYW1lfSBmcm9tICcuL3RyYW5zZm9ybWVyX3V0aWwnO1xuXG4vLyBFeHBvcnRlZCBmb3IgdXNlcnMgYXMgYSBkZWZhdWx0IGltcGwgb2YgcGF0aFRvTW9kdWxlTmFtZS5cbmV4cG9ydCB7cGF0aFRvTW9kdWxlTmFtZX0gZnJvbSAnLi9jbGlfc3VwcG9ydCc7XG4vLyBSZXRhaW5lZCBoZXJlIGZvciBBUEkgY29tcGF0aWJpbGl0eS5cbmV4cG9ydCB7Z2V0R2VuZXJhdGVkRXh0ZXJuc30gZnJvbSAnLi9leHRlcm5zJztcbmV4cG9ydCB7RmlsZU1hcCwgTW9kdWxlc01hbmlmZXN0fSBmcm9tICcuL21vZHVsZXNfbWFuaWZlc3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRzaWNrbGVIb3N0IGV4dGVuZHMgZ29vZ21vZHVsZS5Hb29nTW9kdWxlUHJvY2Vzc29ySG9zdCwgQW5ub3RhdG9ySG9zdCB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRvd25sZXZlbCBkZWNvcmF0b3JzXG4gICAqL1xuICB0cmFuc2Zvcm1EZWNvcmF0b3JzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBjb252ZXJzIHR5cGVzIHRvIGNsb3N1cmVcbiAgICovXG4gIHRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhZGQgYWxpYXNlcyB0byB0aGUgLmQudHMgZmlsZXMgdG8gYWRkIHRoZSBleHBvcnRzIHRvIHRoZVxuICAgKiDgsqBf4LKgLmNsdXR6IG5hbWVzcGFjZS5cbiAgICovXG4gIGFkZER0c0NsdXR6QWxpYXNlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRydWUsIHRzaWNrbGUgYW5kIGRlY29yYXRvciBkb3dubGV2ZWwgcHJvY2Vzc2luZyB3aWxsIGJlIHNraXBwZWQgZm9yXG4gICAqIHRoYXQgZmlsZS5cbiAgICovXG4gIHNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZyhmaWxlTmFtZTogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKipcbiAgICogVHNpY2tsZSB0cmVhdHMgd2FybmluZ3MgYXMgZXJyb3JzLCBpZiB0cnVlLCBpZ25vcmUgd2FybmluZ3MuICBUaGlzIG1pZ2h0IGJlXG4gICAqIHVzZWZ1bCBmb3IgZS5nLiB0aGlyZCBwYXJ0eSBjb2RlLlxuICAgKi9cbiAgc2hvdWxkSWdub3JlV2FybmluZ3NGb3JQYXRoKGZpbGVQYXRoOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGNvbnZlcnQgQ29tbW9uSlMgcmVxdWlyZSgpIGltcG9ydHMgdG8gZ29vZy5tb2R1bGUoKSBhbmQgZ29vZy5yZXF1aXJlKCkgY2FsbHMuICovXG4gIGdvb2dtb2R1bGU6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUVtaXRSZXN1bHRzKGVtaXRSZXN1bHRzOiBFbWl0UmVzdWx0W10pOiBFbWl0UmVzdWx0IHtcbiAgY29uc3QgZGlhZ25vc3RpY3M6IHRzLkRpYWdub3N0aWNbXSA9IFtdO1xuICBsZXQgZW1pdFNraXBwZWQgPSB0cnVlO1xuICBjb25zdCBlbWl0dGVkRmlsZXM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgY29uc3QgbW9kdWxlc01hbmlmZXN0ID0gbmV3IE1vZHVsZXNNYW5pZmVzdCgpO1xuICBmb3IgKGNvbnN0IGVyIG9mIGVtaXRSZXN1bHRzKSB7XG4gICAgZGlhZ25vc3RpY3MucHVzaCguLi5lci5kaWFnbm9zdGljcyk7XG4gICAgZW1pdFNraXBwZWQgPSBlbWl0U2tpcHBlZCB8fCBlci5lbWl0U2tpcHBlZDtcbiAgICBpZiAoZXIuZW1pdHRlZEZpbGVzKSB7XG4gICAgICBlbWl0dGVkRmlsZXMucHVzaCguLi5lci5lbWl0dGVkRmlsZXMpO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKGV4dGVybnMsIGVyLmV4dGVybnMpO1xuICAgIG1vZHVsZXNNYW5pZmVzdC5hZGRNYW5pZmVzdChlci5tb2R1bGVzTWFuaWZlc3QpO1xuICB9XG4gIHJldHVybiB7ZGlhZ25vc3RpY3MsIGVtaXRTa2lwcGVkLCBlbWl0dGVkRmlsZXMsIGV4dGVybnMsIG1vZHVsZXNNYW5pZmVzdH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFJlc3VsdCBleHRlbmRzIHRzLkVtaXRSZXN1bHQge1xuICAvLyBUaGUgbWFuaWZlc3Qgb2YgSlMgbW9kdWxlcyBvdXRwdXQgYnkgdGhlIGNvbXBpbGVyLlxuICBtb2R1bGVzTWFuaWZlc3Q6IE1vZHVsZXNNYW5pZmVzdDtcbiAgLyoqXG4gICAqIGV4dGVybnMuanMgZmlsZXMgcHJvZHVjZWQgYnkgdHNpY2tsZSwgaWYgYW55LiBtb2R1bGUgSURzIGFyZSByZWxhdGl2ZSBwYXRocyBmcm9tXG4gICAqIGZpbGVOYW1lVG9Nb2R1bGVJZC5cbiAgICovXG4gIGV4dGVybnM6IHtbbW9kdWxlSWQ6IHN0cmluZ106IHN0cmluZ307XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFRyYW5zZm9ybWVycyB7XG4gIC8qKiBDdXN0b20gdHJhbnNmb3JtZXJzIHRvIGV2YWx1YXRlIGJlZm9yZSBUc2lja2xlIC5qcyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGJlZm9yZVRzaWNrbGU/OiB0cy5DdXN0b21UcmFuc2Zvcm1lcnNbJ2JlZm9yZSddO1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBiZWZvcmUgYnVpbHQtaW4gLmpzIHRyYW5zZm9ybWF0aW9ucy4gKi9cbiAgYmVmb3JlVHM/OiB0cy5DdXN0b21UcmFuc2Zvcm1lcnNbJ2JlZm9yZSddO1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBhZnRlciBidWlsdC1pbiAuanMgdHJhbnNmb3JtYXRpb25zLiAqL1xuICBhZnRlclRzPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydhZnRlciddO1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBhZnRlciBidWlsdC1pbiAuZC50cyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGFmdGVyRGVjbGFyYXRpb25zPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydhZnRlckRlY2xhcmF0aW9ucyddO1xufVxuXG5cbi8qKiBAZGVwcmVjYXRlZCBFeHBvc2VkIGZvciBiYWNrd2FyZCBjb21wYXQgd2l0aCBBbmd1bGFyLiAgVXNlIGVtaXQoKSBpbnN0ZWFkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRXaXRoVHNpY2tsZShcbiAgICBwcm9ncmFtOiB0cy5Qcm9ncmFtLCBob3N0OiBUc2lja2xlSG9zdCwgdHNIb3N0OiB0cy5Db21waWxlckhvc3QsIHRzT3B0aW9uczogdHMuQ29tcGlsZXJPcHRpb25zLFxuICAgIHRhcmdldFNvdXJjZUZpbGU/OiB0cy5Tb3VyY2VGaWxlLCB3cml0ZUZpbGU/OiB0cy5Xcml0ZUZpbGVDYWxsYmFjayxcbiAgICBjYW5jZWxsYXRpb25Ub2tlbj86IHRzLkNhbmNlbGxhdGlvblRva2VuLCBlbWl0T25seUR0c0ZpbGVzPzogYm9vbGVhbixcbiAgICBjdXN0b21UcmFuc2Zvcm1lcnM6IEVtaXRUcmFuc2Zvcm1lcnMgPSB7fSk6IEVtaXRSZXN1bHQge1xuICByZXR1cm4gZW1pdChcbiAgICAgIHByb2dyYW0sIGhvc3QsIHdyaXRlRmlsZSB8fCB0c0hvc3Qud3JpdGVGaWxlLmJpbmQodHNIb3N0KSwgdGFyZ2V0U291cmNlRmlsZSxcbiAgICAgIGNhbmNlbGxhdGlvblRva2VuLCBlbWl0T25seUR0c0ZpbGVzLCBjdXN0b21UcmFuc2Zvcm1lcnMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW1pdChcbiAgICBwcm9ncmFtOiB0cy5Qcm9ncmFtLCBob3N0OiBUc2lja2xlSG9zdCwgd3JpdGVGaWxlOiB0cy5Xcml0ZUZpbGVDYWxsYmFjayxcbiAgICB0YXJnZXRTb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZSwgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbixcbiAgICBlbWl0T25seUR0c0ZpbGVzPzogYm9vbGVhbiwgY3VzdG9tVHJhbnNmb3JtZXJzOiBFbWl0VHJhbnNmb3JtZXJzID0ge30pOiBFbWl0UmVzdWx0IHtcbiAgZm9yIChjb25zdCBzZiBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBhc3NlcnRBYnNvbHV0ZShzZi5maWxlTmFtZSk7XG4gIH1cblxuICBsZXQgdHNpY2tsZURpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgY29uc3QgdHlwZUNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gIGNvbnN0IHRzT3B0aW9ucyA9IHByb2dyYW0uZ2V0Q29tcGlsZXJPcHRpb25zKCk7XG4gIGNvbnN0IHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnM6IEFycmF5PHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPj4gPSBbXTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICAvLyBPbmx5IGFkZCBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9IGNvbW1lbnRzIHdoZW4gYWxzbyBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucy5cbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goXG4gICAgICAgIHRyYW5zZm9ybUZpbGVvdmVydmlld0NvbW1lbnRGYWN0b3J5KHRzT3B0aW9ucywgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICBqc2RvY1RyYW5zZm9ybWVyKGhvc3QsIHRzT3B0aW9ucywgdHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICAgIHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMucHVzaChlbnVtVHJhbnNmb3JtZXIodHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICB9XG4gIGlmIChob3N0LnRyYW5zZm9ybURlY29yYXRvcnMpIHtcbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goZGVjb3JhdG9yRG93bmxldmVsVHJhbnNmb3JtZXIodHlwZUNoZWNrZXIsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICB9XG4gIGNvbnN0IG1vZHVsZXNNYW5pZmVzdCA9IG5ldyBNb2R1bGVzTWFuaWZlc3QoKTtcbiAgY29uc3QgdHNUcmFuc2Zvcm1lcnM6IHRzLkN1c3RvbVRyYW5zZm9ybWVycyA9IHtcbiAgICBiZWZvcmU6IFtcbiAgICAgIC4uLihjdXN0b21UcmFuc2Zvcm1lcnMuYmVmb3JlVHNpY2tsZSB8fCBbXSksXG4gICAgICAuLi4odHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycyB8fCBbXSkubWFwKHRmID0+IHNraXBUcmFuc2Zvcm1Gb3JTb3VyY2VGaWxlSWZOZWVkZWQoaG9zdCwgdGYpKSxcbiAgICAgIC4uLihjdXN0b21UcmFuc2Zvcm1lcnMuYmVmb3JlVHMgfHwgW10pLFxuICAgIF0sXG4gICAgYWZ0ZXI6IFtcbiAgICAgIC4uLihjdXN0b21UcmFuc2Zvcm1lcnMuYWZ0ZXJUcyB8fCBbXSksXG4gICAgXSxcbiAgICBhZnRlckRlY2xhcmF0aW9uczogY3VzdG9tVHJhbnNmb3JtZXJzLmFmdGVyRGVjbGFyYXRpb25zLFxuICB9O1xuICBpZiAoaG9zdC50cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZSkge1xuICAgIC8vIFNlZSBjb21tZW50IG9uIHJlbW90ZVR5cGVBc3NlcnRpb25zLlxuICAgIHRzVHJhbnNmb3JtZXJzLmJlZm9yZSEucHVzaChyZW1vdmVUeXBlQXNzZXJ0aW9ucygpKTtcbiAgfVxuICBpZiAoaG9zdC5nb29nbW9kdWxlKSB7XG4gICAgdHNUcmFuc2Zvcm1lcnMuYWZ0ZXIhLnB1c2goZ29vZ21vZHVsZS5jb21tb25Kc1RvR29vZ21vZHVsZVRyYW5zZm9ybWVyKFxuICAgICAgICBob3N0LCBtb2R1bGVzTWFuaWZlc3QsIHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgICB0c1RyYW5zZm9ybWVycy5hZnRlciEucHVzaChcbiAgICAgICAgdHJhbnNmb3JtRGVjb3JhdG9yc091dHB1dEZvckNsb3N1cmVQcm9wZXJ0eVJlbmFtaW5nKHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICB9XG5cbiAgLy8gV3JhcCB0aGUgd3JpdGVGaWxlIGNhbGxiYWNrIHRvIGhvb2sgd3JpdGluZyBvZiB0aGUgZHRzIGZpbGUuXG4gIGNvbnN0IHdyaXRlRmlsZUltcGw6IHRzLldyaXRlRmlsZUNhbGxiYWNrID1cbiAgICAgIChmaWxlTmFtZSwgY29udGVudCwgd3JpdGVCeXRlT3JkZXJNYXJrLCBvbkVycm9yLCBzb3VyY2VGaWxlcykgPT4ge1xuICAgICAgICBhc3NlcnRBYnNvbHV0ZShmaWxlTmFtZSk7XG4gICAgICAgIGlmIChob3N0LmFkZER0c0NsdXR6QWxpYXNlcyAmJiBpc0R0c0ZpbGVOYW1lKGZpbGVOYW1lKSAmJiBzb3VyY2VGaWxlcykge1xuICAgICAgICAgIC8vIE9ubHkgYnVuZGxlIGVtaXRzIHBhc3MgbW9yZSB0aGFuIG9uZSBzb3VyY2UgZmlsZSBmb3IgLmQudHMgd3JpdGVzLiBCdW5kbGUgZW1pdHMgaG93ZXZlclxuICAgICAgICAgIC8vIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IHRzaWNrbGUsIGFzIHdlIGNhbm5vdCBhbm5vdGF0ZSB0aGVtIGZvciBDbG9zdXJlIGluIGFueSBtZWFuaW5nZnVsXG4gICAgICAgICAgLy8gd2F5IGFueXdheS5cbiAgICAgICAgICBpZiAoIXNvdXJjZUZpbGVzIHx8IHNvdXJjZUZpbGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgZXhhY3RseSBvbmUgc291cmNlIGZpbGUgZm9yIC5kLnRzIGVtaXQsIGdvdCAke1xuICAgICAgICAgICAgICAgIHNvdXJjZUZpbGVzLm1hcChzZiA9PiBzZi5maWxlTmFtZSl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU291cmNlID0gc291cmNlRmlsZXNbMF07XG4gICAgICAgICAgY29udGVudCA9IGFkZENsdXR6QWxpYXNlcyhjb250ZW50LCBvcmlnaW5hbFNvdXJjZSwgdHlwZUNoZWNrZXIsIGhvc3QsIHRzT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVGaWxlKGZpbGVOYW1lLCBjb250ZW50LCB3cml0ZUJ5dGVPcmRlck1hcmssIG9uRXJyb3IsIHNvdXJjZUZpbGVzKTtcbiAgICAgIH07XG5cbiAgY29uc3Qge2RpYWdub3N0aWNzOiB0c0RpYWdub3N0aWNzLCBlbWl0U2tpcHBlZCwgZW1pdHRlZEZpbGVzfSA9IHByb2dyYW0uZW1pdChcbiAgICAgIHRhcmdldFNvdXJjZUZpbGUsIHdyaXRlRmlsZUltcGwsIGNhbmNlbGxhdGlvblRva2VuLCBlbWl0T25seUR0c0ZpbGVzLCB0c1RyYW5zZm9ybWVycyk7XG5cbiAgY29uc3QgZXh0ZXJuczoge1tmaWxlTmFtZTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuICBpZiAoaG9zdC50cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZSkge1xuICAgIGNvbnN0IHNvdXJjZUZpbGVzID0gdGFyZ2V0U291cmNlRmlsZSA/IFt0YXJnZXRTb3VyY2VGaWxlXSA6IHByb2dyYW0uZ2V0U291cmNlRmlsZXMoKTtcbiAgICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2Ygc291cmNlRmlsZXMpIHtcbiAgICAgIGNvbnN0IGlzRHRzID0gaXNEdHNGaWxlTmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgIGlmIChpc0R0cyAmJiBob3N0LnNob3VsZFNraXBUc2lja2xlUHJvY2Vzc2luZyhzb3VyY2VGaWxlLmZpbGVOYW1lKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHtvdXRwdXQsIGRpYWdub3N0aWNzfSA9IGdlbmVyYXRlRXh0ZXJucyhcbiAgICAgICAgICB0eXBlQ2hlY2tlciwgc291cmNlRmlsZSwgaG9zdCwgaG9zdC5tb2R1bGVSZXNvbHV0aW9uSG9zdCwgcHJvZ3JhbS5nZXRDb21waWxlck9wdGlvbnMoKSk7XG4gICAgICBpZiAob3V0cHV0KSB7XG4gICAgICAgIGV4dGVybnNbc291cmNlRmlsZS5maWxlTmFtZV0gPSBvdXRwdXQ7XG4gICAgICB9XG4gICAgICBpZiAoZGlhZ25vc3RpY3MpIHtcbiAgICAgICAgdHNpY2tsZURpYWdub3N0aWNzLnB1c2goLi4uZGlhZ25vc3RpY3MpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBBbGwgZGlhZ25vc3RpY3MgKGluY2x1ZGluZyB3YXJuaW5ncykgYXJlIHRyZWF0ZWQgYXMgZXJyb3JzLlxuICAvLyBJZiB0aGUgaG9zdCBkZWNpZGVzIHRvIGlnbm9yZSB3YXJuaW5ncywganVzdCBkaXNjYXJkIHRoZW0uXG4gIC8vIFdhcm5pbmdzIGluY2x1ZGUgc3R1ZmYgbGlrZSBcImRvbid0IHVzZSBAdHlwZSBpbiB5b3VyIGpzZG9jXCI7IHRzaWNrbGVcbiAgLy8gd2FybnMgYW5kIHRoZW4gZml4ZXMgdXAgdGhlIGNvZGUgdG8gYmUgQ2xvc3VyZS1jb21wYXRpYmxlIGFueXdheS5cbiAgdHNpY2tsZURpYWdub3N0aWNzID0gdHNpY2tsZURpYWdub3N0aWNzLmZpbHRlcihcbiAgICAgIGQgPT4gZC5jYXRlZ29yeSA9PT0gdHMuRGlhZ25vc3RpY0NhdGVnb3J5LkVycm9yIHx8XG4gICAgICAgICAgIWhvc3Quc2hvdWxkSWdub3JlV2FybmluZ3NGb3JQYXRoKGQuZmlsZSEuZmlsZU5hbWUpKTtcblxuICByZXR1cm4ge1xuICAgIG1vZHVsZXNNYW5pZmVzdCxcbiAgICBlbWl0U2tpcHBlZCxcbiAgICBlbWl0dGVkRmlsZXM6IGVtaXR0ZWRGaWxlcyB8fCBbXSxcbiAgICBkaWFnbm9zdGljczogWy4uLnRzRGlhZ25vc3RpY3MsIC4uLnRzaWNrbGVEaWFnbm9zdGljc10sXG4gICAgZXh0ZXJuc1xuICB9O1xufVxuXG4vKiogQ29tcGFyZXMgdHdvIHN0cmluZ3MgYW5kIHJldHVybnMgYSBudW1iZXIgc3VpdGFibGUgZm9yIHVzZSBpbiBzb3J0KCkuICovXG5mdW5jdGlvbiBzdHJpbmdDb21wYXJlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgaWYgKGEgPCBiKSByZXR1cm4gLTE7XG4gIGlmIChhID4gYikgcmV0dXJuIDE7XG4gIHJldHVybiAwO1xufVxuXG4vKipcbiAqIEEgdHNpY2tsZSBwcm9kdWNlZCBkZWNsYXJhdGlvbiBmaWxlIG1pZ2h0IGJlIGNvbnN1bWVkIGJlIHJlZmVyZW5jZWQgYnkgQ2x1dHpcbiAqIHByb2R1Y2VkIC5kLnRzIGZpbGVzLCB3aGljaCB1c2Ugc3ltYm9sIG5hbWVzIGJhc2VkIG9uIENsb3N1cmUncyBpbnRlcm5hbFxuICogbmFtaW5nIGNvbnZlbnRpb25zLCBzbyB3ZSBuZWVkIHRvIHByb3ZpZGUgYWxpYXNlcyBmb3IgYWxsIHRoZSBleHBvcnRlZCBzeW1ib2xzXG4gKiBpbiB0aGUgQ2x1dHogbmFtaW5nIGNvbnZlbnRpb24uXG4gKi9cbmZ1bmN0aW9uIGFkZENsdXR6QWxpYXNlcyhcbiAgICBkdHNGaWxlQ29udGVudDogc3RyaW5nLCBzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlLCB0eXBlQ2hlY2tlcjogdHMuVHlwZUNoZWNrZXIsXG4gICAgaG9zdDogVHNpY2tsZUhvc3QsIG9wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyk6IHN0cmluZyB7XG4gIGNvbnN0IG1vZHVsZVN5bWJvbCA9IHR5cGVDaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gIGNvbnN0IG1vZHVsZUV4cG9ydHMgPSBtb2R1bGVTeW1ib2wgJiYgdHlwZUNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCk7XG4gIGlmICghbW9kdWxlRXhwb3J0cykgcmV0dXJuIGR0c0ZpbGVDb250ZW50O1xuXG4gIC8vIC5kLnRzIGZpbGVzIGNhbiBiZSB0cmFuc2Zvcm1lZCwgdG9vLCBzbyB3ZSBuZWVkIHRvIGNvbXBhcmUgdGhlIG9yaWdpbmFsIG5vZGUgYmVsb3cuXG4gIGNvbnN0IG9yaWdTb3VyY2VGaWxlID0gdHMuZ2V0T3JpZ2luYWxOb2RlKHNvdXJjZUZpbGUpO1xuICAvLyBJbiBvcmRlciB0byB3cml0ZSBhbGlhc2VzLCB0aGUgZXhwb3J0ZWQgc3ltYm9scyBuZWVkIHRvIGJlIGF2YWlsYWJsZSBpbiB0aGVcbiAgLy8gdGhlIG1vZHVsZSBzY29wZS4gVGhhdCBpcyBub3QgYWx3YXlzIHRoZSBjYXNlOlxuICAvL1xuICAvLyBleHBvcnRcbiAgLy8gMSkgZXhwb3J0IGNvbnN0IFg7ICAgICAgICAgICAvLyB3b3Jrc1xuICAvL1xuICAvLyByZWV4cG9ydFxuICAvLyAyKSBleHBvcnQge1h9IGZyb20gJy4vZm9vJzsgIC8vIGRvZXNuJ3RcbiAgLy9cbiAgLy8gaW1wb3J0ZWQgcmVleHBvcnRcbiAgLy8gMykgaW1wb3J0IHtYfSBmcm9tICcuL2Zvbyc7ICAvLyB3b3Jrc1xuICAvLyAgICBleHBvcnQge1h9IGZyb20gJy4vZm9vJztcbiAgLy9cbiAgLy8gZ2V0RXhwb3J0c09mTW9kdWxlIHJldHVybnMgYWxsIHRocmVlIHR5cGVzLCBidXQgd2UgbmVlZCB0byBzZXBhcmF0ZSAyKS5cbiAgLy8gRm9yIG5vdyB3ZSAnZml4JyAyKSBieSBzaW1wbHkgbm90IGVtaXR0aW5nIGEgY2x1dHogYWxpYXMsIHNpbmNlIGNsdXR6XG4gIC8vIGludGVyb3AgaXMgdXNlZCBpbiBtaW5vcml0eSBvZiBzY2VuYXJpb3MuXG4gIC8vXG4gIC8vIFRPRE8ocmFkb2tpcm92KTogYXR0ZW1wdCB0byBhZGQgYXBwcm9wcmlhdGUgaW1wb3J0cyBmb3IgMikgc28gdGhhdFxuICAvLyBjdXJyZW50bHkgZmluZGluZyBvdXQgbG9jYWwgYXBwZWFycyBldmVuIGhhcmRlciB0aGFuIGZpeGluZyBleHBvcnRzLlxuICBjb25zdCBsb2NhbEV4cG9ydHMgPSBtb2R1bGVFeHBvcnRzLmZpbHRlcihlID0+IHtcbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gZGVjbGFyYXRpb25zLCBiZSBjb25zZXJ2YXRpdmUgYW5kIGRvbid0IGVtaXQgdGhlIGFsaWFzZXMuXG4gICAgLy8gSSBkb24ndCBrbm93IGhvdyBjYW4gdGhpcyBoYXBwZW4sIHdlIGhhdmUgbm8gdGVzdHMgdGhhdCBleGNlcmNpc2UgaXQuXG4gICAgaWYgKCFlLmRlY2xhcmF0aW9ucykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gU2tpcCBkZWZhdWx0IGV4cG9ydHMsIHRoZXkgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLlxuICAgIC8vIGRlZmF1bHQgaXMgYSBrZXl3b3JkIGluIHR5cGVzY3JpcHQsIHNvIHRoZSBuYW1lIG9mIHRoZSBleHBvcnQgYmVpbmdcbiAgICAvLyBkZWZhdWx0IG1lYW5zIHRoYXQgaXQncyBhIGRlZmF1bHQgZXhwb3J0LlxuICAgIGlmIChlLm5hbWUgPT09ICdkZWZhdWx0JykgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gVXNlIHRoZSBkZWNsYXJhdGlvbiBsb2NhdGlvbiB0byBkZXRlcm1pbmUgc2VwYXJhdGUgY2FzZXMgYWJvdmUuXG4gICAgZm9yIChjb25zdCBkIG9mIGUuZGVjbGFyYXRpb25zKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIGZvciBleHBvcnQgKi4gVGVjaG5pY2FsbHksIGl0IGlzIG91dHNpZGUgdGhlXG4gICAgICAvLyB0aHJlZSBjYXNlcyBvdXRsaW5lZCwgYnV0IGF0IHRoaXMgcG9pbnQgd2UgaGF2ZSByZXdyaXR0ZW4gaXQgdG8gYVxuICAgICAgLy8gcmVleHBvcnQgb3IgYW4gaW1wb3J0ZWQgcmVleHBvcnQuIEhvd2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCB0aGVcbiAgICAgIC8vIHJld3JpdGluZyBhbHNvIGhhcyBtYWRlIGl0IGJlaGF2ZSBkaWZmZXJlbnQgZnJvbSBleHBsaWNpdCBuYW1lZCBleHBvcnRcbiAgICAgIC8vIGluIHRoZSBzZW5zZSB0aGF0IHRoZSBkZWNsYXJhdGlvbiBhcHBlYXJzIHRvIHBvaW50IGF0IHRoZSBvcmlnaW5hbFxuICAgICAgLy8gbG9jYXRpb24gbm90IHRoZSByZWV4cG9ydCBsb2NhdGlvbi4gIFNpbmNlIHdlIGNhbid0IGZpZ3VyZSBvdXQgd2hldGhlclxuICAgICAgLy8gdGhlcmUgaXMgYSBsb2NhbCBpbXBvcnQgaGVyZSwgd2UgZXJyIG9uIHRoZSBzaWRlIG9mIGxlc3MgZW1pdC5cbiAgICAgIGlmIChkLmdldFNvdXJjZUZpbGUoKSAhPT0gb3JpZ1NvdXJjZUZpbGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBAaW50ZXJuYWwgbWFya2VkIEFQSXMgYXJlIG5vdCBleHBvcnRlZCwgc28gbXVzdCBub3QgZ2V0IGFsaWFzZXMuXG4gICAgICAvLyBUaGlzIHVzZXMgYW4gaW50ZXJuYWwgVFMgQVBJLCBhc3N1bWluZyB0aGF0IGFjY2Vzc2luZyB0aGlzIHdpbGwgYmUgbW9yZSBzdGFibGUgY29tcGFyZWQgdG9cbiAgICAgIC8vIGltcGxlbWVudGluZyBvdXIgb3duIHZlcnNpb24uXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWFueVxuICAgICAgaWYgKG9wdGlvbnMuc3RyaXBJbnRlcm5hbCAmJiAodHMgYXMgYW55KVsnaXNJbnRlcm5hbERlY2xhcmF0aW9uJ10oZCwgb3JpZ1NvdXJjZUZpbGUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0cy5pc0V4cG9ydFNwZWNpZmllcihkKSkge1xuICAgICAgICAvLyB3ZSBoYXZlIGEgcHVyZSBleHBvcnQgKGNhc2UgMSkgdGh1cyBzYWZlIHRvIGVtaXQgY2x1dHogYWxpYXMuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUaGUgZGVjbGFyYXRpb24gZCBpcyB1c2VsZXNzIHRvIHNlcGFyYXRlIHJlZXhwb3J0IGFuZCBpbXBvcnQtcmVleHBvcnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSBib3RoIHBvaW50IHRvIHRoZSByZWV4cG9ydGluZyBmaWxlIGFuZCBub3QgdG8gdGhlIG9yaWdpbmFsXG4gICAgICAvLyBvbmUuICBIb3dldmVyLCB0aGVyZSBpcyBhbm90aGVyIHRzIEFQSSB0aGF0IGNhbiBkbyBhIGRlZXBlciByZXNvbHV0aW9uLlxuICAgICAgY29uc3QgbG9jYWxTeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRFeHBvcnRTcGVjaWZpZXJMb2NhbFRhcmdldFN5bWJvbChkKTtcbiAgICAgIC8vIEkgZG9uJ3Qga25vdyBob3cgY2FuIHRoaXMgaGFwcGVuLCBidXQgZXJyIG9uIHRoZSBzaWRlIG9mIGxlc3MgZW1pdC5cbiAgICAgIGlmICghbG9jYWxTeW1ib2wpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIGBkZWNsYXJhdGlvbnNgIGlzIHVuZGVmaW5lZCBmb3IgYnVpbHRpbiBzeW1ib2xzLCBzdWNoIGFzIGB1bmtub3duYC5cbiAgICAgIGlmICghbG9jYWxTeW1ib2wuZGVjbGFyYXRpb25zKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIC8vIEluIGNhc2Ugb2Ygbm8gaW1wb3J0IHdlIGVuZGVkIHVwIGluIGEgZGVjbGFyYXRpb24gaW4gZm9vLnRzLCB3aGlsZSBpblxuICAgICAgLy8gY2FzZSBvZiBoYXZpbmcgYW4gaW1wb3J0IGxvY2FsRCBpcyBzdGlsbCBpbiB0aGUgcmVleHBvcmluZyBmaWxlLlxuICAgICAgZm9yIChjb25zdCBsb2NhbEQgb2YgbG9jYWxTeW1ib2wuZGVjbGFyYXRpb25zKSB7XG4gICAgICAgIGlmIChsb2NhbEQuZ2V0U291cmNlRmlsZSgpICE9PSBvcmlnU291cmNlRmlsZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG4gIGlmICghbG9jYWxFeHBvcnRzLmxlbmd0aCkgcmV0dXJuIGR0c0ZpbGVDb250ZW50O1xuXG4gIC8vIFR5cGVTY3JpcHQgMi44IGFuZCBUeXBlU2NyaXB0IDIuOSBkaWZmZXIgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZVxuICAvLyBtb2R1bGUgc3ltYm9scyBjb21lIG91dCwgc28gc29ydCBoZXJlIHRvIG1ha2UgdGhlIHRlc3RzIHN0YWJsZS5cbiAgbG9jYWxFeHBvcnRzLnNvcnQoKGEsIGIpID0+IHN0cmluZ0NvbXBhcmUoYS5uYW1lLCBiLm5hbWUpKTtcblxuICBjb25zdCBtb2R1bGVOYW1lID0gaG9zdC5wYXRoVG9Nb2R1bGVOYW1lKCcnLCBzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgY29uc3QgY2x1dHpNb2R1bGVOYW1lID0gbW9kdWxlTmFtZS5yZXBsYWNlKC9cXC4vZywgJyQnKTtcblxuICAvLyBDbHV0eiBtaWdodCByZWZlciB0byB0aGUgbmFtZSBpbiB0d28gZGlmZmVyZW50IGZvcm1zIChzdGVtbWluZyBmcm9tIGdvb2cucHJvdmlkZSBhbmRcbiAgLy8gZ29vZy5tb2R1bGUgcmVzcGVjdGl2ZWx5KS5cbiAgLy8gMSkgZ2xvYmFsIGluIGNsdXR6OiAgIOCyoF/gsqAuY2x1dHoubW9kdWxlJGNvbnRlbnRzJHBhdGgkdG8kbW9kdWxlX1N5bWJvbC4uLlxuICAvLyAyKSBsb2NhbCBpbiBhIG1vZHVsZTog4LKgX+CyoC5jbHV0ei5tb2R1bGUkZXhwb3J0cyRwYXRoJHRvJG1vZHVsZS5TeW1ib2wgLi5cbiAgLy8gU2VlIGV4YW1wbGVzIGF0OlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jbHV0ei90cmVlL21hc3Rlci9zcmMvdGVzdC9qYXZhL2NvbS9nb29nbGUvamF2YXNjcmlwdC9jbHV0elxuXG4gIC8vIENhc2UgKDEpIGZyb20gYWJvdmUuXG4gIGxldCBnbG9iYWxTeW1ib2xzID0gJyc7XG4gIC8vIENhc2UgKDIpIGZyb20gYWJvdmUuXG4gIGxldCBuZXN0ZWRTeW1ib2xzID0gJyc7XG4gIGZvciAoY29uc3Qgc3ltYm9sIG9mIGxvY2FsRXhwb3J0cykge1xuICAgIGxldCBsb2NhbE5hbWUgPSBzeW1ib2wubmFtZTtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHN5bWJvbC5kZWNsYXJhdGlvbnMuZmluZChkID0+IGQuZ2V0U291cmNlRmlsZSgpID09PSBvcmlnU291cmNlRmlsZSk7XG4gICAgaWYgKGRlY2xhcmF0aW9uICYmIHRzLmlzRXhwb3J0U3BlY2lmaWVyKGRlY2xhcmF0aW9uKSAmJiBkZWNsYXJhdGlvbi5wcm9wZXJ0eU5hbWUpIHtcbiAgICAgIC8vIElmIGRlY2xhcmVkIGluIGFuIFwiZXhwb3J0IHtYIGFzIFl9O1wiIGV4cG9ydCBzcGVjaWZpZXIsIHRoZW4gWCAoc3RvcmVkIGluIHByb3BlcnR5TmFtZSkgaXNcbiAgICAgIC8vIHRoZSBsb2NhbCBuYW1lIHRoYXQgcmVzb2x2ZXMgd2l0aGluIHRoZSBtb2R1bGUsIHdoZXJlYXMgWSBpcyBvbmx5IGF2YWlsYWJsZSBvbiB0aGUgZXhwb3J0cyxcbiAgICAgIC8vIGkuZS4gdGhlIG5hbWUgdXNlZCB0byBhZGRyZXNzIHRoZSBzeW1ib2wgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUuXG4gICAgICAvLyBVc2UgdGhlIGxvY2FsTmFtZSBmb3IgdGhlIGV4cG9ydCB0aGVuLCBidXQgcHVibGlzaCB1bmRlciB0aGUgZXh0ZXJuYWwgbmFtZS5cbiAgICAgIGxvY2FsTmFtZSA9IGRlY2xhcmF0aW9uLnByb3BlcnR5TmFtZS50ZXh0O1xuICAgIH1cbiAgICBjb25zdCBtYW5nbGVkTmFtZSA9IGBtb2R1bGUkY29udGVudHMkJHtjbHV0ek1vZHVsZU5hbWV9XyR7c3ltYm9sLm5hbWV9YDtcbiAgICBnbG9iYWxTeW1ib2xzICs9IGBcXHRcXHRleHBvcnQgeyR7bG9jYWxOYW1lfSBhcyAke21hbmdsZWROYW1lfX1cXG5gO1xuICAgIC8vIFRPRE8obXByb2JzdCk6IE9uY2UgdHNpY2tsZSBpcyBvbiBUUzMuNywgdGhlIHR3byBsaW5lcyBiZWxvdyBjYW4gYmUgcmVwbGFjZWQgd2l0aFxuICAgIC8vIFwiZXhwb3J0IHtsb2NhbE5hbWV9O1wiLiBIb3dldmVyIGluIFRTMy41LCBsb2NhbE5hbWUgcmVzb2x2ZXMgd2l0aGluIHRoZSBtb2R1bGUsIHNvXG4gICAgLy8gZXhwb3J0aW5nIHtsb2NhbE5hbWV9IGNhdXNlcyBhIGNpcmN1bGFyIGRlZmluaXRpb24gZXJyb3IuIFRoZSB3b3JrYXJvdW5kIGlzIHRvIGltcG9ydCB0aGVcbiAgICAvLyBtYW5nbGVkIG5hbWUuXG4gICAgbmVzdGVkU3ltYm9scyArPSBgXFx0XFx0aW1wb3J0ICR7bG9jYWxOYW1lfSRjbHV0eiA9IOCyoF/gsqAuY2x1dHouJHttYW5nbGVkTmFtZX07XFxuYDtcbiAgICBuZXN0ZWRTeW1ib2xzICs9IGBcXHRcXHRleHBvcnQgeyR7bG9jYWxOYW1lfSRjbHV0eiBhcyAke3N5bWJvbC5uYW1lfX07XFxuYDtcbiAgfVxuXG4gIGR0c0ZpbGVDb250ZW50ICs9ICdkZWNsYXJlIGdsb2JhbCB7XFxuJztcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdG5hbWVzcGFjZSDgsqBf4LKgLmNsdXR6IHtcXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSBnbG9iYWxTeW1ib2xzO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0fVxcbmA7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHRuYW1lc3BhY2Ug4LKgX+CyoC5jbHV0ei5tb2R1bGUkZXhwb3J0cyQke2NsdXR6TW9kdWxlTmFtZX0ge1xcbmA7XG4gIC8vIFRPRE8obWFydGlucHJvYnN0KTogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMzUzODUsIHJlbW92ZSBvbmNlIGZpeGVkXG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHRcXHRjb25zdCBjbHV0eiR3b3JrYXJvdW5kJHRpc3N1ZSQzNTM4NTogbnVtYmVyO1xcbmA7XG4gIGR0c0ZpbGVDb250ZW50ICs9IG5lc3RlZFN5bWJvbHM7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHR9XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gJ31cXG4nO1xuXG4gIHJldHVybiBkdHNGaWxlQ29udGVudDtcbn1cblxuZnVuY3Rpb24gc2tpcFRyYW5zZm9ybUZvclNvdXJjZUZpbGVJZk5lZWRlZChcbiAgICBob3N0OiBUc2lja2xlSG9zdCxcbiAgICBkZWxlZ2F0ZUZhY3Rvcnk6IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPik6IHRzLlRyYW5zZm9ybWVyRmFjdG9yeTx0cy5Tb3VyY2VGaWxlPiB7XG4gIHJldHVybiAoY29udGV4dDogdHMuVHJhbnNmb3JtYXRpb25Db250ZXh0KSA9PiB7XG4gICAgY29uc3QgZGVsZWdhdGUgPSBkZWxlZ2F0ZUZhY3RvcnkoY29udGV4dCk7XG4gICAgcmV0dXJuIChzb3VyY2VGaWxlOiB0cy5Tb3VyY2VGaWxlKSA9PiB7XG4gICAgICBpZiAoaG9zdC5zaG91bGRTa2lwVHNpY2tsZVByb2Nlc3Npbmcoc291cmNlRmlsZS5maWxlTmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZUZpbGU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGVsZWdhdGUoc291cmNlRmlsZSk7XG4gICAgfTtcbiAgfTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpY2tsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90c2lja2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRzs7Ozs7Ozs7Ozs7OztJQUVILGlDQUFpQztJQUdqQyx5REFBNkM7SUFDN0MsaUdBQWdGO0lBQ2hGLHVEQUFpRjtJQUNqRixtRUFBbUQ7SUFDbkQsaURBQTBDO0lBQzFDLG1HQUF1RjtJQUN2RixxREFBMkM7SUFDM0MscUVBQTJFO0lBQzNFLG1FQUFtRDtJQUNuRCxtRUFBaUQ7SUFFakQsNERBQTREO0lBQzVELHVEQUErQztJQUF2QywrR0FBQSxnQkFBZ0IsT0FBQTtJQUN4Qix1Q0FBdUM7SUFDdkMsK0NBQThDO0lBQXRDLDhHQUFBLG1CQUFtQixPQUFBO0lBQzNCLGlFQUE0RDtJQUEzQyxtSEFBQSxlQUFlLE9BQUE7SUFtQ2hDLFNBQWdCLGdCQUFnQixDQUFDLFdBQXlCO1FBQ3hELE1BQU0sV0FBVyxHQUFvQixFQUFFLENBQUM7UUFDeEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBaUMsRUFBRSxDQUFDO1FBQ2pELE1BQU0sZUFBZSxHQUFHLElBQUksa0NBQWUsRUFBRSxDQUFDO1FBQzlDLEtBQUssTUFBTSxFQUFFLElBQUksV0FBVyxFQUFFO1lBQzVCLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEMsV0FBVyxHQUFHLFdBQVcsSUFBSSxFQUFFLENBQUMsV0FBVyxDQUFDO1lBQzVDLElBQUksRUFBRSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUN2QztZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENB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QWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsVUFBeUIsRUFBRSxFQUFFO2dCQUNuQyxJQUFJLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ3pELE9BQU8sVUFBVSxDQUFDO2lCQUNuQjtnQkFDRCxPQUFPLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7SUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgKiBhcyB0cyBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtBbm5vdGF0b3JIb3N0fSBmcm9tICcuL2Fubm90YXRvcl9ob3N0JztcbmltcG9ydCB7YXNzZXJ0QWJzb2x1dGV9IGZyb20gJy4vY2xpX3N1cHBvcnQnO1xuaW1wb3J0IHtkZWNvcmF0b3JEb3dubGV2ZWxUcmFuc2Zvcm1lcn0gZnJvbSAnLi9kZWNvcmF0b3JfZG93bmxldmVsX3RyYW5zZm9ybWVyJztcbmltcG9ydCB7dHJhbnNmb3JtRGVjb3JhdG9yc091dHB1dEZvckNsb3N1cmVQcm9wZXJ0eVJlbmFtaW5nfSBmcm9tICcuL2RlY29yYXRvcnMnO1xuaW1wb3J0IHtlbnVtVHJhbnNmb3JtZXJ9IGZyb20gJy4vZW51bV90cmFuc2Zvcm1lcic7XG5pbXBvcnQge2dlbmVyYXRlRXh0ZXJuc30gZnJvbSAnLi9leHRlcm5zJztcbmltcG9ydCB7dHJhbnNmb3JtRmlsZW92ZXJ2aWV3Q29tbWVudEZhY3Rvcnl9IGZyb20gJy4vZmlsZW92ZXJ2aWV3X2NvbW1lbnRfdHJhbnNmb3JtZXInO1xuaW1wb3J0ICogYXMgZ29vZ21vZHVsZSBmcm9tICcuL2dvb2dtb2R1bGUnO1xuaW1wb3J0IHtqc2RvY1RyYW5zZm9ybWVyLCByZW1vdmVUeXBlQXNzZXJ0aW9uc30gZnJvbSAnLi9qc2RvY190cmFuc2Zvcm1lcic7XG5pbXBvcnQge01vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcbmltcG9ydCB7aXNEdHNGaWxlTmFtZX0gZnJvbSAnLi90cmFuc2Zvcm1lcl91dGlsJztcblxuLy8gRXhwb3J0ZWQgZm9yIHVzZXJzIGFzIGEgZGVmYXVsdCBpbXBsIG9mIHBhdGhUb01vZHVsZU5hbWUuXG5leHBvcnQge3BhdGhUb01vZHVsZU5hbWV9IGZyb20gJy4vY2xpX3N1cHBvcnQnO1xuLy8gUmV0YWluZWQgaGVyZSBmb3IgQVBJIGNvbXBhdGliaWxpdHkuXG5leHBvcnQge2dldEdlbmVyYXRlZEV4dGVybnN9IGZyb20gJy4vZXh0ZXJucyc7XG5leHBvcnQge0ZpbGVNYXAsIE1vZHVsZXNNYW5pZmVzdH0gZnJvbSAnLi9tb2R1bGVzX21hbmlmZXN0JztcblxuZXhwb3J0IGludGVyZmFjZSBUc2lja2xlSG9zdCBleHRlbmRzIGdvb2dtb2R1bGUuR29vZ01vZHVsZVByb2Nlc3Nvckhvc3QsIEFubm90YXRvckhvc3Qge1xuICAvKipcbiAgICogV2hldGhlciB0byBkb3dubGV2ZWwgZGVjb3JhdG9yc1xuICAgKi9cbiAgdHJhbnNmb3JtRGVjb3JhdG9ycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY29udmVycyB0eXBlcyB0byBjbG9zdXJlXG4gICAqL1xuICB0cmFuc2Zvcm1UeXBlc1RvQ2xvc3VyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWRkIGFsaWFzZXMgdG8gdGhlIC5kLnRzIGZpbGVzIHRvIGFkZCB0aGUgZXhwb3J0cyB0byB0aGVcbiAgICog4LKgX+CyoC5jbHV0eiBuYW1lc3BhY2UuXG4gICAqL1xuICBhZGREdHNDbHV0ekFsaWFzZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCB0c2lja2xlIGFuZCBkZWNvcmF0b3IgZG93bmxldmVsIHByb2Nlc3Npbmcgd2lsbCBiZSBza2lwcGVkIGZvclxuICAgKiB0aGF0IGZpbGUuXG4gICAqL1xuICBzaG91bGRTa2lwVHNpY2tsZVByb2Nlc3NpbmcoZmlsZU5hbWU6IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRzaWNrbGUgdHJlYXRzIHdhcm5pbmdzIGFzIGVycm9ycywgaWYgdHJ1ZSwgaWdub3JlIHdhcm5pbmdzLiAgVGhpcyBtaWdodCBiZVxuICAgKiB1c2VmdWwgZm9yIGUuZy4gdGhpcmQgcGFydHkgY29kZS5cbiAgICovXG4gIHNob3VsZElnbm9yZVdhcm5pbmdzRm9yUGF0aChmaWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBjb252ZXJ0IENvbW1vbkpTIHJlcXVpcmUoKSBpbXBvcnRzIHRvIGdvb2cubW9kdWxlKCkgYW5kIGdvb2cucmVxdWlyZSgpIGNhbGxzLiAqL1xuICBnb29nbW9kdWxlOiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VFbWl0UmVzdWx0cyhlbWl0UmVzdWx0czogRW1pdFJlc3VsdFtdKTogRW1pdFJlc3VsdCB7XG4gIGNvbnN0IGRpYWdub3N0aWNzOiB0cy5EaWFnbm9zdGljW10gPSBbXTtcbiAgbGV0IGVtaXRTa2lwcGVkID0gdHJ1ZTtcbiAgY29uc3QgZW1pdHRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBleHRlcm5zOiB7W2ZpbGVOYW1lOiBzdHJpbmddOiBzdHJpbmd9ID0ge307XG4gIGNvbnN0IG1vZHVsZXNNYW5pZmVzdCA9IG5ldyBNb2R1bGVzTWFuaWZlc3QoKTtcbiAgZm9yIChjb25zdCBlciBvZiBlbWl0UmVzdWx0cykge1xuICAgIGRpYWdub3N0aWNzLnB1c2goLi4uZXIuZGlhZ25vc3RpY3MpO1xuICAgIGVtaXRTa2lwcGVkID0gZW1pdFNraXBwZWQgfHwgZXIuZW1pdFNraXBwZWQ7XG4gICAgaWYgKGVyLmVtaXR0ZWRGaWxlcykge1xuICAgICAgZW1pdHRlZEZpbGVzLnB1c2goLi4uZXIuZW1pdHRlZEZpbGVzKTtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihleHRlcm5zLCBlci5leHRlcm5zKTtcbiAgICBtb2R1bGVzTWFuaWZlc3QuYWRkTWFuaWZlc3QoZXIubW9kdWxlc01hbmlmZXN0KTtcbiAgfVxuICByZXR1cm4ge2RpYWdub3N0aWNzLCBlbWl0U2tpcHBlZCwgZW1pdHRlZEZpbGVzLCBleHRlcm5zLCBtb2R1bGVzTWFuaWZlc3R9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRSZXN1bHQgZXh0ZW5kcyB0cy5FbWl0UmVzdWx0IHtcbiAgLy8gVGhlIG1hbmlmZXN0IG9mIEpTIG1vZHVsZXMgb3V0cHV0IGJ5IHRoZSBjb21waWxlci5cbiAgbW9kdWxlc01hbmlmZXN0OiBNb2R1bGVzTWFuaWZlc3Q7XG4gIC8qKlxuICAgKiBleHRlcm5zLmpzIGZpbGVzIHByb2R1Y2VkIGJ5IHRzaWNrbGUsIGlmIGFueS4gbW9kdWxlIElEcyBhcmUgcmVsYXRpdmUgcGF0aHMgZnJvbVxuICAgKiBmaWxlTmFtZVRvTW9kdWxlSWQuXG4gICAqL1xuICBleHRlcm5zOiB7W21vZHVsZUlkOiBzdHJpbmddOiBzdHJpbmd9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRUcmFuc2Zvcm1lcnMge1xuICAvKiogQ3VzdG9tIHRyYW5zZm9ybWVycyB0byBldmFsdWF0ZSBiZWZvcmUgVHNpY2tsZSAuanMgdHJhbnNmb3JtYXRpb25zLiAqL1xuICBiZWZvcmVUc2lja2xlPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydiZWZvcmUnXTtcbiAgLyoqIEN1c3RvbSB0cmFuc2Zvcm1lcnMgdG8gZXZhbHVhdGUgYmVmb3JlIGJ1aWx0LWluIC5qcyB0cmFuc2Zvcm1hdGlvbnMuICovXG4gIGJlZm9yZVRzPzogdHMuQ3VzdG9tVHJhbnNmb3JtZXJzWydiZWZvcmUnXTtcbiAgLyoqIEN1c3RvbSB0cmFuc2Zvcm1lcnMgdG8gZXZhbHVhdGUgYWZ0ZXIgYnVpbHQtaW4gLmpzIHRyYW5zZm9ybWF0aW9ucy4gKi9cbiAgYWZ0ZXJUcz86IHRzLkN1c3RvbVRyYW5zZm9ybWVyc1snYWZ0ZXInXTtcbiAgLyoqIEN1c3RvbSB0cmFuc2Zvcm1lcnMgdG8gZXZhbHVhdGUgYWZ0ZXIgYnVpbHQtaW4gLmQudHMgdHJhbnNmb3JtYXRpb25zLiAqL1xuICBhZnRlckRlY2xhcmF0aW9ucz86IHRzLkN1c3RvbVRyYW5zZm9ybWVyc1snYWZ0ZXJEZWNsYXJhdGlvbnMnXTtcbn1cblxuXG4vKiogQGRlcHJlY2F0ZWQgRXhwb3NlZCBmb3IgYmFja3dhcmQgY29tcGF0IHdpdGggQW5ndWxhci4gIFVzZSBlbWl0KCkgaW5zdGVhZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0V2l0aFRzaWNrbGUoXG4gICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgaG9zdDogVHNpY2tsZUhvc3QsIHRzSG9zdDogdHMuQ29tcGlsZXJIb3N0LCB0c09wdGlvbnM6IHRzLkNvbXBpbGVyT3B0aW9ucyxcbiAgICB0YXJnZXRTb3VyY2VGaWxlPzogdHMuU291cmNlRmlsZSwgd3JpdGVGaWxlPzogdHMuV3JpdGVGaWxlQ2FsbGJhY2ssXG4gICAgY2FuY2VsbGF0aW9uVG9rZW4/OiB0cy5DYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcz86IGJvb2xlYW4sXG4gICAgY3VzdG9tVHJhbnNmb3JtZXJzOiBFbWl0VHJhbnNmb3JtZXJzID0ge30pOiBFbWl0UmVzdWx0IHtcbiAgcmV0dXJuIGVtaXQoXG4gICAgICBwcm9ncmFtLCBob3N0LCB3cml0ZUZpbGUgfHwgdHNIb3N0LndyaXRlRmlsZS5iaW5kKHRzSG9zdCksIHRhcmdldFNvdXJjZUZpbGUsXG4gICAgICBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgY3VzdG9tVHJhbnNmb3JtZXJzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVtaXQoXG4gICAgcHJvZ3JhbTogdHMuUHJvZ3JhbSwgaG9zdDogVHNpY2tsZUhvc3QsIHdyaXRlRmlsZTogdHMuV3JpdGVGaWxlQ2FsbGJhY2ssXG4gICAgdGFyZ2V0U291cmNlRmlsZT86IHRzLlNvdXJjZUZpbGUsIGNhbmNlbGxhdGlvblRva2VuPzogdHMuQ2FuY2VsbGF0aW9uVG9rZW4sXG4gICAgZW1pdE9ubHlEdHNGaWxlcz86IGJvb2xlYW4sIGN1c3RvbVRyYW5zZm9ybWVyczogRW1pdFRyYW5zZm9ybWVycyA9IHt9KTogRW1pdFJlc3VsdCB7XG4gIGZvciAoY29uc3Qgc2Ygb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgYXNzZXJ0QWJzb2x1dGUoc2YuZmlsZU5hbWUpO1xuICB9XG5cbiAgbGV0IHRzaWNrbGVEaWFnbm9zdGljczogdHMuRGlhZ25vc3RpY1tdID0gW107XG4gIGNvbnN0IHR5cGVDaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCB0c09wdGlvbnMgPSBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpO1xuICBjb25zdCB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzOiBBcnJheTx0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4+ID0gW107XG4gIGlmIChob3N0LnRyYW5zZm9ybVR5cGVzVG9DbG9zdXJlKSB7XG4gICAgLy8gT25seSBhZGQgQHN1cHByZXNzIHtjaGVja1R5cGVzfSBjb21tZW50cyB3aGVuIGFsc28gYWRkaW5nIHR5cGUgYW5ub3RhdGlvbnMuXG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKFxuICAgICAgICB0cmFuc2Zvcm1GaWxlb3ZlcnZpZXdDb21tZW50RmFjdG9yeSh0c09wdGlvbnMsIHRzaWNrbGVEaWFnbm9zdGljcykpO1xuICAgIHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMucHVzaChcbiAgICAgICAganNkb2NUcmFuc2Zvcm1lcihob3N0LCB0c09wdGlvbnMsIHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgICB0c2lja2xlU291cmNlVHJhbnNmb3JtZXJzLnB1c2goZW51bVRyYW5zZm9ybWVyKHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuICBpZiAoaG9zdC50cmFuc2Zvcm1EZWNvcmF0b3JzKSB7XG4gICAgdHNpY2tsZVNvdXJjZVRyYW5zZm9ybWVycy5wdXNoKGRlY29yYXRvckRvd25sZXZlbFRyYW5zZm9ybWVyKHR5cGVDaGVja2VyLCB0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuICBjb25zdCBtb2R1bGVzTWFuaWZlc3QgPSBuZXcgTW9kdWxlc01hbmlmZXN0KCk7XG4gIGNvbnN0IHRzVHJhbnNmb3JtZXJzOiB0cy5DdXN0b21UcmFuc2Zvcm1lcnMgPSB7XG4gICAgYmVmb3JlOiBbXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmJlZm9yZVRzaWNrbGUgfHwgW10pLFxuICAgICAgLi4uKHRzaWNrbGVTb3VyY2VUcmFuc2Zvcm1lcnMgfHwgW10pLm1hcCh0ZiA9PiBza2lwVHJhbnNmb3JtRm9yU291cmNlRmlsZUlmTmVlZGVkKGhvc3QsIHRmKSksXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmJlZm9yZVRzIHx8IFtdKSxcbiAgICBdLFxuICAgIGFmdGVyOiBbXG4gICAgICAuLi4oY3VzdG9tVHJhbnNmb3JtZXJzLmFmdGVyVHMgfHwgW10pLFxuICAgIF0sXG4gICAgYWZ0ZXJEZWNsYXJhdGlvbnM6IGN1c3RvbVRyYW5zZm9ybWVycy5hZnRlckRlY2xhcmF0aW9ucyxcbiAgfTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICAvLyBTZWUgY29tbWVudCBvbiByZW1vdGVUeXBlQXNzZXJ0aW9ucy5cbiAgICB0c1RyYW5zZm9ybWVycy5iZWZvcmUhLnB1c2gocmVtb3ZlVHlwZUFzc2VydGlvbnMoKSk7XG4gIH1cbiAgaWYgKGhvc3QuZ29vZ21vZHVsZSkge1xuICAgIHRzVHJhbnNmb3JtZXJzLmFmdGVyIS5wdXNoKGdvb2dtb2R1bGUuY29tbW9uSnNUb0dvb2dtb2R1bGVUcmFuc2Zvcm1lcihcbiAgICAgICAgaG9zdCwgbW9kdWxlc01hbmlmZXN0LCB0eXBlQ2hlY2tlciwgdHNpY2tsZURpYWdub3N0aWNzKSk7XG4gICAgdHNUcmFuc2Zvcm1lcnMuYWZ0ZXIhLnB1c2goXG4gICAgICAgIHRyYW5zZm9ybURlY29yYXRvcnNPdXRwdXRGb3JDbG9zdXJlUHJvcGVydHlSZW5hbWluZyh0c2lja2xlRGlhZ25vc3RpY3MpKTtcbiAgfVxuXG4gIC8vIFdyYXAgdGhlIHdyaXRlRmlsZSBjYWxsYmFjayB0byBob29rIHdyaXRpbmcgb2YgdGhlIGR0cyBmaWxlLlxuICBjb25zdCB3cml0ZUZpbGVJbXBsOiB0cy5Xcml0ZUZpbGVDYWxsYmFjayA9XG4gICAgICAoZmlsZU5hbWUsIGNvbnRlbnQsIHdyaXRlQnl0ZU9yZGVyTWFyaywgb25FcnJvciwgc291cmNlRmlsZXMpID0+IHtcbiAgICAgICAgYXNzZXJ0QWJzb2x1dGUoZmlsZU5hbWUpO1xuICAgICAgICBpZiAoaG9zdC5hZGREdHNDbHV0ekFsaWFzZXMgJiYgaXNEdHNGaWxlTmFtZShmaWxlTmFtZSkgJiYgc291cmNlRmlsZXMpIHtcbiAgICAgICAgICAvLyBPbmx5IGJ1bmRsZSBlbWl0cyBwYXNzIG1vcmUgdGhhbiBvbmUgc291cmNlIGZpbGUgZm9yIC5kLnRzIHdyaXRlcy4gQnVuZGxlIGVtaXRzIGhvd2V2ZXJcbiAgICAgICAgICAvLyBhcmUgbm90IHN1cHBvcnRlZCBieSB0c2lja2xlLCBhcyB3ZSBjYW5ub3QgYW5ub3RhdGUgdGhlbSBmb3IgQ2xvc3VyZSBpbiBhbnkgbWVhbmluZ2Z1bFxuICAgICAgICAgIC8vIHdheSBhbnl3YXkuXG4gICAgICAgICAgaWYgKCFzb3VyY2VGaWxlcyB8fCBzb3VyY2VGaWxlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGV4cGVjdGVkIGV4YWN0bHkgb25lIHNvdXJjZSBmaWxlIGZvciAuZC50cyBlbWl0LCBnb3QgJHtcbiAgICAgICAgICAgICAgICBzb3VyY2VGaWxlcy5tYXAoc2YgPT4gc2YuZmlsZU5hbWUpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFNvdXJjZSA9IHNvdXJjZUZpbGVzWzBdO1xuICAgICAgICAgIGNvbnRlbnQgPSBhZGRDbHV0ekFsaWFzZXMoY29udGVudCwgb3JpZ2luYWxTb3VyY2UsIHR5cGVDaGVja2VyLCBob3N0LCB0c09wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlRmlsZShmaWxlTmFtZSwgY29udGVudCwgd3JpdGVCeXRlT3JkZXJNYXJrLCBvbkVycm9yLCBzb3VyY2VGaWxlcyk7XG4gICAgICB9O1xuXG4gIGNvbnN0IHtkaWFnbm9zdGljczogdHNEaWFnbm9zdGljcywgZW1pdFNraXBwZWQsIGVtaXR0ZWRGaWxlc30gPSBwcm9ncmFtLmVtaXQoXG4gICAgICB0YXJnZXRTb3VyY2VGaWxlLCB3cml0ZUZpbGVJbXBsLCBjYW5jZWxsYXRpb25Ub2tlbiwgZW1pdE9ubHlEdHNGaWxlcywgdHNUcmFuc2Zvcm1lcnMpO1xuXG4gIGNvbnN0IGV4dGVybnM6IHtbZmlsZU5hbWU6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcbiAgaWYgKGhvc3QudHJhbnNmb3JtVHlwZXNUb0Nsb3N1cmUpIHtcbiAgICBjb25zdCBzb3VyY2VGaWxlcyA9IHRhcmdldFNvdXJjZUZpbGUgPyBbdGFyZ2V0U291cmNlRmlsZV0gOiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCk7XG4gICAgZm9yIChjb25zdCBzb3VyY2VGaWxlIG9mIHNvdXJjZUZpbGVzKSB7XG4gICAgICBjb25zdCBpc0R0cyA9IGlzRHRzRmlsZU5hbWUoc291cmNlRmlsZS5maWxlTmFtZSk7XG4gICAgICBpZiAoaXNEdHMgJiYgaG9zdC5zaG91bGRTa2lwVHNpY2tsZVByb2Nlc3Npbmcoc291cmNlRmlsZS5maWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCB7b3V0cHV0LCBkaWFnbm9zdGljc30gPSBnZW5lcmF0ZUV4dGVybnMoXG4gICAgICAgICAgdHlwZUNoZWNrZXIsIHNvdXJjZUZpbGUsIGhvc3QsIGhvc3QubW9kdWxlUmVzb2x1dGlvbkhvc3QsIHByb2dyYW0uZ2V0Q29tcGlsZXJPcHRpb25zKCkpO1xuICAgICAgaWYgKG91dHB1dCkge1xuICAgICAgICBleHRlcm5zW3NvdXJjZUZpbGUuZmlsZU5hbWVdID0gb3V0cHV0O1xuICAgICAgfVxuICAgICAgaWYgKGRpYWdub3N0aWNzKSB7XG4gICAgICAgIHRzaWNrbGVEaWFnbm9zdGljcy5wdXNoKC4uLmRpYWdub3N0aWNzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gQWxsIGRpYWdub3N0aWNzIChpbmNsdWRpbmcgd2FybmluZ3MpIGFyZSB0cmVhdGVkIGFzIGVycm9ycy5cbiAgLy8gSWYgdGhlIGhvc3QgZGVjaWRlcyB0byBpZ25vcmUgd2FybmluZ3MsIGp1c3QgZGlzY2FyZCB0aGVtLlxuICAvLyBXYXJuaW5ncyBpbmNsdWRlIHN0dWZmIGxpa2UgXCJkb24ndCB1c2UgQHR5cGUgaW4geW91ciBqc2RvY1wiOyB0c2lja2xlXG4gIC8vIHdhcm5zIGFuZCB0aGVuIGZpeGVzIHVwIHRoZSBjb2RlIHRvIGJlIENsb3N1cmUtY29tcGF0aWJsZSBhbnl3YXkuXG4gIHRzaWNrbGVEaWFnbm9zdGljcyA9IHRzaWNrbGVEaWFnbm9zdGljcy5maWx0ZXIoXG4gICAgICBkID0+IGQuY2F0ZWdvcnkgPT09IHRzLkRpYWdub3N0aWNDYXRlZ29yeS5FcnJvciB8fFxuICAgICAgICAgICFob3N0LnNob3VsZElnbm9yZVdhcm5pbmdzRm9yUGF0aChkLmZpbGUhLmZpbGVOYW1lKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBtb2R1bGVzTWFuaWZlc3QsXG4gICAgZW1pdFNraXBwZWQsXG4gICAgZW1pdHRlZEZpbGVzOiBlbWl0dGVkRmlsZXMgfHwgW10sXG4gICAgZGlhZ25vc3RpY3M6IFsuLi50c0RpYWdub3N0aWNzLCAuLi50c2lja2xlRGlhZ25vc3RpY3NdLFxuICAgIGV4dGVybnNcbiAgfTtcbn1cblxuLyoqIENvbXBhcmVzIHR3byBzdHJpbmdzIGFuZCByZXR1cm5zIGEgbnVtYmVyIHN1aXRhYmxlIGZvciB1c2UgaW4gc29ydCgpLiAqL1xuZnVuY3Rpb24gc3RyaW5nQ29tcGFyZShhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XG4gIGlmIChhIDwgYikgcmV0dXJuIC0xO1xuICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICByZXR1cm4gMDtcbn1cblxuLyoqXG4gKiBBIHRzaWNrbGUgcHJvZHVjZWQgZGVjbGFyYXRpb24gZmlsZSBtaWdodCBiZSBjb25zdW1lZCBiZSByZWZlcmVuY2VkIGJ5IENsdXR6XG4gKiBwcm9kdWNlZCAuZC50cyBmaWxlcywgd2hpY2ggdXNlIHN5bWJvbCBuYW1lcyBiYXNlZCBvbiBDbG9zdXJlJ3MgaW50ZXJuYWxcbiAqIG5hbWluZyBjb252ZW50aW9ucywgc28gd2UgbmVlZCB0byBwcm92aWRlIGFsaWFzZXMgZm9yIGFsbCB0aGUgZXhwb3J0ZWQgc3ltYm9sc1xuICogaW4gdGhlIENsdXR6IG5hbWluZyBjb252ZW50aW9uLlxuICovXG5mdW5jdGlvbiBhZGRDbHV0ekFsaWFzZXMoXG4gICAgZHRzRmlsZUNvbnRlbnQ6IHN0cmluZywgc291cmNlRmlsZTogdHMuU291cmNlRmlsZSwgdHlwZUNoZWNrZXI6IHRzLlR5cGVDaGVja2VyLFxuICAgIGhvc3Q6IFRzaWNrbGVIb3N0LCBvcHRpb25zOiB0cy5Db21waWxlck9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBtb2R1bGVTeW1ib2wgPSB0eXBlQ2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICBjb25zdCBtb2R1bGVFeHBvcnRzID0gbW9kdWxlU3ltYm9sICYmIHR5cGVDaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpO1xuICBpZiAoIW1vZHVsZUV4cG9ydHMpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyAuZC50cyBmaWxlcyBjYW4gYmUgdHJhbnNmb3JtZWQsIHRvbywgc28gd2UgbmVlZCB0byBjb21wYXJlIHRoZSBvcmlnaW5hbCBub2RlIGJlbG93LlxuICBjb25zdCBvcmlnU291cmNlRmlsZSA9IHRzLmdldE9yaWdpbmFsTm9kZShzb3VyY2VGaWxlKTtcbiAgLy8gSW4gb3JkZXIgdG8gd3JpdGUgYWxpYXNlcywgdGhlIGV4cG9ydGVkIHN5bWJvbHMgbmVlZCB0byBiZSBhdmFpbGFibGUgaW4gdGhlXG4gIC8vIHRoZSBtb2R1bGUgc2NvcGUuIFRoYXQgaXMgbm90IGFsd2F5cyB0aGUgY2FzZTpcbiAgLy9cbiAgLy8gZXhwb3J0XG4gIC8vIDEpIGV4cG9ydCBjb25zdCBYOyAgICAgICAgICAgLy8gd29ya3NcbiAgLy9cbiAgLy8gcmVleHBvcnRcbiAgLy8gMikgZXhwb3J0IHtYfSBmcm9tICcuL2Zvbyc7ICAvLyBkb2Vzbid0XG4gIC8vXG4gIC8vIGltcG9ydGVkIHJlZXhwb3J0XG4gIC8vIDMpIGltcG9ydCB7WH0gZnJvbSAnLi9mb28nOyAgLy8gd29ya3NcbiAgLy8gICAgZXhwb3J0IHtYfSBmcm9tICcuL2Zvbyc7XG4gIC8vXG4gIC8vIGdldEV4cG9ydHNPZk1vZHVsZSByZXR1cm5zIGFsbCB0aHJlZSB0eXBlcywgYnV0IHdlIG5lZWQgdG8gc2VwYXJhdGUgMikuXG4gIC8vIEZvciBub3cgd2UgJ2ZpeCcgMikgYnkgc2ltcGx5IG5vdCBlbWl0dGluZyBhIGNsdXR6IGFsaWFzLCBzaW5jZSBjbHV0elxuICAvLyBpbnRlcm9wIGlzIHVzZWQgaW4gbWlub3JpdHkgb2Ygc2NlbmFyaW9zLlxuICAvL1xuICAvLyBUT0RPKHJhZG9raXJvdik6IGF0dGVtcHQgdG8gYWRkIGFwcHJvcHJpYXRlIGltcG9ydHMgZm9yIDIpIHNvIHRoYXRcbiAgLy8gY3VycmVudGx5IGZpbmRpbmcgb3V0IGxvY2FsIGFwcGVhcnMgZXZlbiBoYXJkZXIgdGhhbiBmaXhpbmcgZXhwb3J0cy5cbiAgY29uc3QgbG9jYWxFeHBvcnRzID0gbW9kdWxlRXhwb3J0cy5maWx0ZXIoZSA9PiB7XG4gICAgLy8gSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmF0aW9ucywgYmUgY29uc2VydmF0aXZlIGFuZCBkb24ndCBlbWl0IHRoZSBhbGlhc2VzLlxuICAgIC8vIEkgZG9uJ3Qga25vdyBob3cgY2FuIHRoaXMgaGFwcGVuLCB3ZSBoYXZlIG5vIHRlc3RzIHRoYXQgZXhjZXJjaXNlIGl0LlxuICAgIGlmICghZS5kZWNsYXJhdGlvbnMpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFNraXAgZGVmYXVsdCBleHBvcnRzLCB0aGV5IGFyZSBub3QgY3VycmVudGx5IHN1cHBvcnRlZC5cbiAgICAvLyBkZWZhdWx0IGlzIGEga2V5d29yZCBpbiB0eXBlc2NyaXB0LCBzbyB0aGUgbmFtZSBvZiB0aGUgZXhwb3J0IGJlaW5nXG4gICAgLy8gZGVmYXVsdCBtZWFucyB0aGF0IGl0J3MgYSBkZWZhdWx0IGV4cG9ydC5cbiAgICBpZiAoZS5uYW1lID09PSAnZGVmYXVsdCcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFVzZSB0aGUgZGVjbGFyYXRpb24gbG9jYXRpb24gdG8gZGV0ZXJtaW5lIHNlcGFyYXRlIGNhc2VzIGFib3ZlLlxuICAgIGZvciAoY29uc3QgZCBvZiBlLmRlY2xhcmF0aW9ucykge1xuICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgZXhwb3J0ICouIFRlY2huaWNhbGx5LCBpdCBpcyBvdXRzaWRlIHRoZVxuICAgICAgLy8gdGhyZWUgY2FzZXMgb3V0bGluZWQsIGJ1dCBhdCB0aGlzIHBvaW50IHdlIGhhdmUgcmV3cml0dGVuIGl0IHRvIGFcbiAgICAgIC8vIHJlZXhwb3J0IG9yIGFuIGltcG9ydGVkIHJlZXhwb3J0LiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgdGhlXG4gICAgICAvLyByZXdyaXRpbmcgYWxzbyBoYXMgbWFkZSBpdCBiZWhhdmUgZGlmZmVyZW50IGZyb20gZXhwbGljaXQgbmFtZWQgZXhwb3J0XG4gICAgICAvLyBpbiB0aGUgc2Vuc2UgdGhhdCB0aGUgZGVjbGFyYXRpb24gYXBwZWFycyB0byBwb2ludCBhdCB0aGUgb3JpZ2luYWxcbiAgICAgIC8vIGxvY2F0aW9uIG5vdCB0aGUgcmVleHBvcnQgbG9jYXRpb24uICBTaW5jZSB3ZSBjYW4ndCBmaWd1cmUgb3V0IHdoZXRoZXJcbiAgICAgIC8vIHRoZXJlIGlzIGEgbG9jYWwgaW1wb3J0IGhlcmUsIHdlIGVyciBvbiB0aGUgc2lkZSBvZiBsZXNzIGVtaXQuXG4gICAgICBpZiAoZC5nZXRTb3VyY2VGaWxlKCkgIT09IG9yaWdTb3VyY2VGaWxlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgLy8gQGludGVybmFsIG1hcmtlZCBBUElzIGFyZSBub3QgZXhwb3J0ZWQsIHNvIG11c3Qgbm90IGdldCBhbGlhc2VzLlxuICAgICAgLy8gVGhpcyB1c2VzIGFuIGludGVybmFsIFRTIEFQSSwgYXNzdW1pbmcgdGhhdCBhY2Nlc3NpbmcgdGhpcyB3aWxsIGJlIG1vcmUgc3RhYmxlIGNvbXBhcmVkIHRvXG4gICAgICAvLyBpbXBsZW1lbnRpbmcgb3VyIG93biB2ZXJzaW9uLlxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1hbnlcbiAgICAgIGlmIChvcHRpb25zLnN0cmlwSW50ZXJuYWwgJiYgKHRzIGFzIGFueSlbJ2lzSW50ZXJuYWxEZWNsYXJhdGlvbiddKGQsIG9yaWdTb3VyY2VGaWxlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghdHMuaXNFeHBvcnRTcGVjaWZpZXIoZCkpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBhIHB1cmUgZXhwb3J0IChjYXNlIDEpIHRodXMgc2FmZSB0byBlbWl0IGNsdXR6IGFsaWFzLlxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gVGhlIGRlY2xhcmF0aW9uIGQgaXMgdXNlbGVzcyB0byBzZXBhcmF0ZSByZWV4cG9ydCBhbmQgaW1wb3J0LXJlZXhwb3J0XG4gICAgICAvLyBiZWNhdXNlIHRoZXkgYm90aCBwb2ludCB0byB0aGUgcmVleHBvcnRpbmcgZmlsZSBhbmQgbm90IHRvIHRoZSBvcmlnaW5hbFxuICAgICAgLy8gb25lLiAgSG93ZXZlciwgdGhlcmUgaXMgYW5vdGhlciB0cyBBUEkgdGhhdCBjYW4gZG8gYSBkZWVwZXIgcmVzb2x1dGlvbi5cbiAgICAgIGNvbnN0IGxvY2FsU3ltYm9sID0gdHlwZUNoZWNrZXIuZ2V0RXhwb3J0U3BlY2lmaWVyTG9jYWxUYXJnZXRTeW1ib2woZCk7XG4gICAgICAvLyBJIGRvbid0IGtub3cgaG93IGNhbiB0aGlzIGhhcHBlbiwgYnV0IGVyciBvbiB0aGUgc2lkZSBvZiBsZXNzIGVtaXQuXG4gICAgICBpZiAoIWxvY2FsU3ltYm9sKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBgZGVjbGFyYXRpb25zYCBpcyB1bmRlZmluZWQgZm9yIGJ1aWx0aW4gc3ltYm9scywgc3VjaCBhcyBgdW5rbm93bmAuXG4gICAgICBpZiAoIWxvY2FsU3ltYm9sLmRlY2xhcmF0aW9ucykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAvLyBJbiBjYXNlIG9mIG5vIGltcG9ydCB3ZSBlbmRlZCB1cCBpbiBhIGRlY2xhcmF0aW9uIGluIGZvby50cywgd2hpbGUgaW5cbiAgICAgIC8vIGNhc2Ugb2YgaGF2aW5nIGFuIGltcG9ydCBsb2NhbEQgaXMgc3RpbGwgaW4gdGhlIHJlZXhwb3JpbmcgZmlsZS5cbiAgICAgIGZvciAoY29uc3QgbG9jYWxEIG9mIGxvY2FsU3ltYm9sLmRlY2xhcmF0aW9ucykge1xuICAgICAgICBpZiAobG9jYWxELmdldFNvdXJjZUZpbGUoKSAhPT0gb3JpZ1NvdXJjZUZpbGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBpZiAoIWxvY2FsRXhwb3J0cy5sZW5ndGgpIHJldHVybiBkdHNGaWxlQ29udGVudDtcblxuICAvLyBUeXBlU2NyaXB0IDIuOCBhbmQgVHlwZVNjcmlwdCAyLjkgZGlmZmVyIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGVcbiAgLy8gbW9kdWxlIHN5bWJvbHMgY29tZSBvdXQsIHNvIHNvcnQgaGVyZSB0byBtYWtlIHRoZSB0ZXN0cyBzdGFibGUuXG4gIGxvY2FsRXhwb3J0cy5zb3J0KChhLCBiKSA9PiBzdHJpbmdDb21wYXJlKGEubmFtZSwgYi5uYW1lKSk7XG5cbiAgY29uc3QgbW9kdWxlTmFtZSA9IGhvc3QucGF0aFRvTW9kdWxlTmFtZSgnJywgc291cmNlRmlsZS5maWxlTmFtZSk7XG4gIGNvbnN0IGNsdXR6TW9kdWxlTmFtZSA9IG1vZHVsZU5hbWUucmVwbGFjZSgvXFwuL2csICckJyk7XG5cbiAgLy8gQ2x1dHogbWlnaHQgcmVmZXIgdG8gdGhlIG5hbWUgaW4gdHdvIGRpZmZlcmVudCBmb3JtcyAoc3RlbW1pbmcgZnJvbSBnb29nLnByb3ZpZGUgYW5kXG4gIC8vIGdvb2cubW9kdWxlIHJlc3BlY3RpdmVseSkuXG4gIC8vIDEpIGdsb2JhbCBpbiBjbHV0ejogICDgsqBf4LKgLmNsdXR6Lm1vZHVsZSRjb250ZW50cyRwYXRoJHRvJG1vZHVsZV9TeW1ib2wuLi5cbiAgLy8gMikgbG9jYWwgaW4gYSBtb2R1bGU6IOCyoF/gsqAuY2x1dHoubW9kdWxlJGV4cG9ydHMkcGF0aCR0byRtb2R1bGUuU3ltYm9sIC4uXG4gIC8vIFNlZSBleGFtcGxlcyBhdDpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY2x1dHovdHJlZS9tYXN0ZXIvc3JjL3Rlc3QvamF2YS9jb20vZ29vZ2xlL2phdmFzY3JpcHQvY2x1dHpcblxuICAvLyBDYXNlICgxKSBmcm9tIGFib3ZlLlxuICBsZXQgZ2xvYmFsU3ltYm9scyA9ICcnO1xuICAvLyBDYXNlICgyKSBmcm9tIGFib3ZlLlxuICBsZXQgbmVzdGVkU3ltYm9scyA9ICcnO1xuICBmb3IgKGNvbnN0IHN5bWJvbCBvZiBsb2NhbEV4cG9ydHMpIHtcbiAgICBsZXQgbG9jYWxOYW1lID0gc3ltYm9sLm5hbWU7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBzeW1ib2wuZGVjbGFyYXRpb25zLmZpbmQoZCA9PiBkLmdldFNvdXJjZUZpbGUoKSA9PT0gb3JpZ1NvdXJjZUZpbGUpO1xuICAgIGlmIChkZWNsYXJhdGlvbiAmJiB0cy5pc0V4cG9ydFNwZWNpZmllcihkZWNsYXJhdGlvbikgJiYgZGVjbGFyYXRpb24ucHJvcGVydHlOYW1lKSB7XG4gICAgICAvLyBJZiBkZWNsYXJlZCBpbiBhbiBcImV4cG9ydCB7WCBhcyBZfTtcIiBleHBvcnQgc3BlY2lmaWVyLCB0aGVuIFggKHN0b3JlZCBpbiBwcm9wZXJ0eU5hbWUpIGlzXG4gICAgICAvLyB0aGUgbG9jYWwgbmFtZSB0aGF0IHJlc29sdmVzIHdpdGhpbiB0aGUgbW9kdWxlLCB3aGVyZWFzIFkgaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGV4cG9ydHMsXG4gICAgICAvLyBpLmUuIHRoZSBuYW1lIHVzZWQgdG8gYWRkcmVzcyB0aGUgc3ltYm9sIGZyb20gb3V0c2lkZSB0aGUgbW9kdWxlLlxuICAgICAgLy8gVXNlIHRoZSBsb2NhbE5hbWUgZm9yIHRoZSBleHBvcnQgdGhlbiwgYnV0IHB1Ymxpc2ggdW5kZXIgdGhlIGV4dGVybmFsIG5hbWUuXG4gICAgICBsb2NhbE5hbWUgPSBkZWNsYXJhdGlvbi5wcm9wZXJ0eU5hbWUudGV4dDtcbiAgICB9XG4gICAgY29uc3QgbWFuZ2xlZE5hbWUgPSBgbW9kdWxlJGNvbnRlbnRzJCR7Y2x1dHpNb2R1bGVOYW1lfV8ke3N5bWJvbC5uYW1lfWA7XG4gICAgZ2xvYmFsU3ltYm9scyArPSBgXFx0XFx0ZXhwb3J0IHske2xvY2FsTmFtZX0gYXMgJHttYW5nbGVkTmFtZX19XFxuYDtcbiAgICAvLyBUT0RPKG1wcm9ic3QpOiBPbmNlIHRzaWNrbGUgaXMgb24gVFMzLjcsIHRoZSB0d28gbGluZXMgYmVsb3cgY2FuIGJlIHJlcGxhY2VkIHdpdGhcbiAgICAvLyBcImV4cG9ydCB7bG9jYWxOYW1lfTtcIi4gSG93ZXZlciBpbiBUUzMuNSwgbG9jYWxOYW1lIHJlc29sdmVzIHdpdGhpbiB0aGUgbW9kdWxlLCBzb1xuICAgIC8vIGV4cG9ydGluZyB7bG9jYWxOYW1lfSBjYXVzZXMgYSBjaXJjdWxhciBkZWZpbml0aW9uIGVycm9yLiBUaGUgd29ya2Fyb3VuZCBpcyB0byBpbXBvcnQgdGhlXG4gICAgLy8gbWFuZ2xlZCBuYW1lLlxuICAgIG5lc3RlZFN5bWJvbHMgKz0gYFxcdFxcdGltcG9ydCAke2xvY2FsTmFtZX0kY2x1dHogPSDgsqBf4LKgLmNsdXR6LiR7bWFuZ2xlZE5hbWV9O1xcbmA7XG4gICAgbmVzdGVkU3ltYm9scyArPSBgXFx0XFx0ZXhwb3J0IHske2xvY2FsTmFtZX0kY2x1dHogYXMgJHtzeW1ib2wubmFtZX19O1xcbmA7XG4gIH1cblxuICBkdHNGaWxlQ29udGVudCArPSAnZGVjbGFyZSBnbG9iYWwge1xcbic7XG4gIGR0c0ZpbGVDb250ZW50ICs9IGBcXHRuYW1lc3BhY2Ug4LKgX+CyoC5jbHV0eiB7XFxuYDtcbiAgZHRzRmlsZUNvbnRlbnQgKz0gZ2xvYmFsU3ltYm9scztcbiAgZHRzRmlsZUNvbnRlbnQgKz0gYFxcdH1cXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0bmFtZXNwYWNlIOCyoF/gsqAuY2x1dHoubW9kdWxlJGV4cG9ydHMkJHtjbHV0ek1vZHVsZU5hbWV9IHtcXG5gO1xuICAvLyBUT0RPKG1hcnRpbnByb2JzdCk6IFNlZSBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzM1Mzg1LCByZW1vdmUgb25jZSBmaXhlZFxuICBkdHNGaWxlQ29udGVudCArPSBgXFx0XFx0Y29uc3QgY2x1dHokd29ya2Fyb3VuZCR0aXNzdWUkMzUzODU6IG51bWJlcjtcXG5gO1xuICBkdHNGaWxlQ29udGVudCArPSBuZXN0ZWRTeW1ib2xzO1xuICBkdHNGaWxlQ29udGVudCArPSBgXFx0fVxcbmA7XG4gIGR0c0ZpbGVDb250ZW50ICs9ICd9XFxuJztcblxuICByZXR1cm4gZHRzRmlsZUNvbnRlbnQ7XG59XG5cbmZ1bmN0aW9uIHNraXBUcmFuc2Zvcm1Gb3JTb3VyY2VGaWxlSWZOZWVkZWQoXG4gICAgaG9zdDogVHNpY2tsZUhvc3QsXG4gICAgZGVsZWdhdGVGYWN0b3J5OiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4pOiB0cy5UcmFuc2Zvcm1lckZhY3Rvcnk8dHMuU291cmNlRmlsZT4ge1xuICByZXR1cm4gKGNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIGNvbnN0IGRlbGVnYXRlID0gZGVsZWdhdGVGYWN0b3J5KGNvbnRleHQpO1xuICAgIHJldHVybiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgaWYgKGhvc3Quc2hvdWxkU2tpcFRzaWNrbGVQcm9jZXNzaW5nKHNvdXJjZUZpbGUuZmlsZU5hbWUpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2VGaWxlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRlbGVnYXRlKHNvdXJjZUZpbGUpO1xuICAgIH07XG4gIH07XG59XG4iXX0=

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

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

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

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

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