cdk-nextjs 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +117 -45
- package/.jsii.tabl.json +1 -1
- package/API.md +66 -1
- package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +10 -7
- package/docs/breaking-changes.md +23 -3
- package/lib/generated-structs/OptionalNextjsPostDeployProps.d.ts +5 -0
- package/lib/generated-structs/OptionalNextjsPostDeployProps.js +1 -1
- package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.d.ts +7 -0
- package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.js +1 -1
- package/lib/lambdas/post-deploy/post-deploy.lambda.js +3 -2
- package/lib/lambdas/post-deploy/prune-s3.d.ts +9 -2
- package/lib/lambdas/post-deploy/prune-s3.js +17 -7
- package/lib/lambdas/post-deploy/prune-s3.test.d.ts +1 -0
- package/lib/lambdas/post-deploy/prune-s3.test.js +176 -0
- package/lib/nextjs-api.d.ts +5 -0
- package/lib/nextjs-api.js +13 -3
- package/lib/nextjs-api.test.js +46 -1
- package/lib/nextjs-build/nextjs-build.js +1 -1
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-compute/nextjs-image-function.js +1 -1
- package/lib/nextjs-distribution.js +1 -1
- package/lib/nextjs-post-deploy.d.ts +12 -0
- package/lib/nextjs-post-deploy.js +3 -2
- package/lib/nextjs-static-assets.d.ts +6 -0
- package/lib/nextjs-static-assets.js +9 -3
- package/lib/nextjs-static-assets.test.js +20 -1
- package/lib/root-constructs/nextjs-base-construct.d.ts +16 -0
- package/lib/root-constructs/nextjs-base-construct.js +21 -3
- package/lib/root-constructs/nextjs-global-containers.js +3 -2
- package/lib/root-constructs/nextjs-global-functions.js +3 -2
- package/lib/root-constructs/nextjs-regional-containers.d.ts +7 -0
- package/lib/root-constructs/nextjs-regional-containers.js +12 -3
- package/lib/root-constructs/nextjs-regional-functions.js +3 -2
- package/lib/utils/base-path.d.ts +19 -0
- package/lib/utils/base-path.js +25 -1
- package/lib/utils/base-path.test.js +58 -1
- package/package.json +1 -1
package/lib/utils/base-path.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.normalizeBasePath = normalizeBasePath;
|
|
4
4
|
exports.joinPath = joinPath;
|
|
5
|
+
exports.prefixWithBasePath = prefixWithBasePath;
|
|
5
6
|
exports.readNextConfigBasePath = readNextConfigBasePath;
|
|
6
7
|
exports.resolveBasePath = resolveBasePath;
|
|
7
8
|
const node_fs_1 = require("node:fs");
|
|
@@ -23,6 +24,29 @@ function normalizeBasePath(basePath) {
|
|
|
23
24
|
function joinPath(...parts) {
|
|
24
25
|
return parts.map(normalizeBasePath).filter(Boolean).join("/");
|
|
25
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Prefixes an absolute app path (a health check path, say) with `basePath`,
|
|
29
|
+
* always returning a leading slash. An empty or unset `basePath` only
|
|
30
|
+
* normalizes that leading slash. Anything after the first segment is passed
|
|
31
|
+
* through as given, trailing slash included, since a `trailingSlash` app
|
|
32
|
+
* answers "/api/health" and "/api/health/" differently.
|
|
33
|
+
*
|
|
34
|
+
* Use this for paths handed to something that talks to the app directly — an ALB
|
|
35
|
+
* target group health check, the Lambda Web Adapter readiness check — since the
|
|
36
|
+
* app only answers under its own `basePath`.
|
|
37
|
+
*
|
|
38
|
+
* Prefixes unconditionally, so `path` has to arrive as the app routes it,
|
|
39
|
+
* without `basePath`: for an app based at "/base", "/base/api/health" becomes
|
|
40
|
+
* "/base/base/api/health". Deliberately not special-cased — an app can route
|
|
41
|
+
* "/base/base/..." legitimately, and accepting both spellings would give the
|
|
42
|
+
* path two meanings. See `docs/breaking-changes.md` (0.6.0), which tells users
|
|
43
|
+
* who prefixed `healthCheckPath` by hand to drop the prefix.
|
|
44
|
+
*/
|
|
45
|
+
function prefixWithBasePath(basePath, path) {
|
|
46
|
+
const normalized = normalizeBasePath(basePath);
|
|
47
|
+
const absolute = path.startsWith("/") ? path : `/${path}`;
|
|
48
|
+
return normalized ? `/${normalized}${absolute}` : absolute;
|
|
49
|
+
}
|
|
26
50
|
/**
|
|
27
51
|
* Read the Next.js app's own `basePath` out of `required-server-files.json`,
|
|
28
52
|
* which `next build` writes into `.next` with the fully resolved config (so
|
|
@@ -120,4 +144,4 @@ function resolveBasePath(nextjsType, propBasePath, nextConfigBasePath) {
|
|
|
120
144
|
return prop || undefined;
|
|
121
145
|
}
|
|
122
146
|
}
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Jhc2UtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLDhDQUVDO0FBT0QsNEJBRUM7QUFjRCx3REF1QkM7QUFtQkQsMENBNERDO0FBeElELHFDQUFtRDtBQUNuRCx5Q0FBaUM7QUFDakMsNENBQXNEO0FBRXREOzs7O0dBSUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxRQUFpQjtJQUNqRCxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEtBQTZCO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsV0FBbUI7SUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLGdCQUFJLEVBQUMsV0FBVyxFQUFFLDRCQUE0QixDQUFDLENBQUM7SUFDNUUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsc0JBQVUsSUFBSSxNQUFNLG9EQUFvRDtZQUN6RSxxRUFBcUU7WUFDckUsdURBQXVELENBQzFELENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxDQUNiLDZDQUE2QyxtQkFBbUIsRUFBRSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUEsc0JBQVksRUFBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxRQUFRLENBQ2IsZ0NBQWdDLG1CQUFtQixLQUFLLEtBQUssRUFBRSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxRQUFnQjtJQUM3QixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixlQUFlLENBQzdCLFVBQXNCLEVBQ3RCLFlBQXFCLEVBQ3JCLGtCQUEyQjtJQUUzQixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQ1osR0FBRyxzQkFBVSxxQ0FBcUMsVUFBVSw4QkFBOEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO1FBQ3hHLHNEQUFzRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUUxRSxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqQyxLQUFLLHNCQUFVLENBQUMsaUJBQWlCO1lBQy9CLDRFQUE0RTtZQUM1RSxxRUFBcUU7WUFDckUseUVBQXlFO1lBQ3pFLHdFQUF3RTtZQUN4RSxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLFFBQVE7Z0JBQ04sa0tBQWtLO2dCQUNsSyxxR0FBcUcsQ0FDeEcsQ0FBQztRQUNKLEtBQUssc0JBQVUsQ0FBQyxrQkFBa0I7WUFDaEMseUVBQXlFO1lBQ3pFLHlFQUF5RTtZQUN6RSwwRUFBMEU7WUFDMUUsK0RBQStEO1lBQy9ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQ0QseUVBQXlFO1lBQ3pFLHdFQUF3RTtZQUN4RSxxRUFBcUU7WUFDckUseUVBQXlFO1lBQ3pFLG9FQUFvRTtZQUNwRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELDBFQUEwRTtZQUMxRSx3REFBd0Q7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYixRQUFRO2dCQUNOLCtLQUErSztnQkFDL0ssdVZBQXVWLENBQzFWLENBQUM7UUFDSixLQUFLLHNCQUFVLENBQUMsbUJBQW1CO1lBQ2pDLHFFQUFxRTtZQUNyRSwwRUFBMEU7WUFDMUUsdURBQXVEO1lBQ3ZELE9BQU8sSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgTE9HX1BSRUZJWCwgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBSZWR1Y2VzIGEgYGJhc2VQYXRoYCB0byBhIGJhcmUgcGF0aCBzZWdtZW50IHNvIHZhbHVlcyB0aGF0IGFkZHJlc3MgdGhlIHNhbWVcbiAqIHBhdGggKFwiL2Jhc2VcIiwgXCJiYXNlXCIsIFwiL2Jhc2UvXCIpIGNvbXBhcmUgZXF1YWwgYW5kIGNhbiBiZSBjb25jYXRlbmF0ZWRcbiAqIHdpdGhvdXQgZG91Ymxpbmcgc2VwYXJhdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2VQYXRoKGJhc2VQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChiYXNlUGF0aCB8fCBcIlwiKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG59XG5cbi8qKlxuICogSm9pbnMgcGF0aCBwYXJ0cyB3aXRoIGEgc2luZ2xlIFwiL1wiLCBub3JtYWxpemluZyBlYWNoIChzbyBubyBsZWFkaW5nIG9yXG4gKiB0cmFpbGluZyBzbGFzaCBzdXJ2aXZlcywgaW5jbHVkaW5nIG9uIHRoZSByZXN1bHQpIGFuZCBkcm9wcGluZyB0aGUgZW1wdHlcbiAqIG9uZXMsIHNvIGFuIHVuc2V0IGBiYXNlUGF0aGAgb3Iga2V5IHByZWZpeCBsZWF2ZXMgdGhlIHJlc3QgdW50b3VjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pblBhdGgoLi4ucGFydHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFydHMubWFwKG5vcm1hbGl6ZUJhc2VQYXRoKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIi9cIik7XG59XG5cbi8qKlxuICogUmVhZCB0aGUgTmV4dC5qcyBhcHAncyBvd24gYGJhc2VQYXRoYCBvdXQgb2YgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCxcbiAqIHdoaWNoIGBuZXh0IGJ1aWxkYCB3cml0ZXMgaW50byBgLm5leHRgIHdpdGggdGhlIGZ1bGx5IHJlc29sdmVkIGNvbmZpZyAoc29cbiAqIHRoaXMgcGlja3MgdXAgYSBgYmFzZVBhdGhgIGNvbXB1dGVkIGluIGBuZXh0LmNvbmZpZy5qc2AsIG5vdCBvbmx5IGEgbGl0ZXJhbFxuICogb25lKS4gTm9ybWFsaXplZCwgZW1wdHkgd2hlbiB0aGUgYXBwIHNldHMgbm9uZS5cbiAqXG4gKiBEZWdyYWRlcyB0byBgXCJcImAgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNpbmNlIGFuIHVucmVhZGFibGUgZmlsZSBzaG91bGRuJ3RcbiAqIGZhaWwgYSBkZXBsb3ltZW50IHRoYXQgd291bGQgb3RoZXJ3aXNlIHdvcmsuIEl0IHdhcm5zIGJlY2F1c2UgYFwiXCJgIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFwcCB0aGF0IGdlbnVpbmVseSBzZXRzIG5vIGBiYXNlUGF0aGA6IHRoZVxuICogYE5leHRqc1R5cGVgcyB0aGF0IGRlcml2ZSBgYmFzZVBhdGhgIGZyb20gdGhlIGFwcCB3b3VsZCBxdWlldGx5IG5vdCBkZXJpdmVcbiAqIGl0IGFuZCA0MDQgZXZlcnkgc3RhdGljIGFzc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZE5leHRDb25maWdCYXNlUGF0aChkb3ROZXh0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVxdWlyZWRTZXJ2ZXJGaWxlcyA9IGpvaW4oZG90TmV4dFBhdGgsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIik7XG4gIGNvbnN0IGZhbGxiYWNrID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCR7TE9HX1BSRUZJWH0gJHtyZWFzb259LiBBc3N1bWluZyB5b3VyIE5leHQuanMgYXBwIHNldHMgbm8gXFxgYmFzZVBhdGhcXGA6IGAgK1xuICAgICAgICBcImlmIGl0IGRvZXMgc2V0IG9uZSwgc3RhdGljIGFzc2V0cyB3aWxsIDQwNCBhbmQgYW55IGBiYXNlUGF0aGAgcHJvcCBcIiArXG4gICAgICAgIFwibWlzbWF0Y2ggcmVwb3J0ZWQgYXQgc3ludGggd2lsbCBuYW1lIHRoZSB3cm9uZyB2YWx1ZS5cIixcbiAgICApO1xuICAgIHJldHVybiBcIlwiO1xuICB9O1xuICBpZiAoIWV4aXN0c1N5bmMocmVxdWlyZWRTZXJ2ZXJGaWxlcykpIHtcbiAgICByZXR1cm4gZmFsbGJhY2soXG4gICAgICBgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiIG5vdCBmb3VuZCBhdCAke3JlcXVpcmVkU2VydmVyRmlsZXN9YCxcbiAgICApO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHJlcXVpcmVkU2VydmVyRmlsZXMsIFwidXRmLThcIikpO1xuICAgIHJldHVybiBub3JtYWxpemVCYXNlUGF0aChjb25maWc/LmJhc2VQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsbGJhY2soXG4gICAgICBgQ291bGQgbm90IHJlYWQgYmFzZVBhdGggZnJvbSAke3JlcXVpcmVkU2VydmVyRmlsZXN9OiAke2Vycm9yfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBxdW90ZShiYXNlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJhc2VQYXRoID8gYFwiLyR7YmFzZVBhdGh9XCJgIDogXCJ1bnNldFwiO1xufVxuXG4vKipcbiAqIFNldHRsZXMgb24gdGhlIHNpbmdsZSBgYmFzZVBhdGhgIHRoZSBpbmZyYXN0cnVjdHVyZSBzaG91bGQgYmUgYnVpbHQgYXJvdW5kLFxuICogZ2l2ZW4gdGhlIENESyBgYmFzZVBhdGhgIHByb3AgYW5kIHRoZSBOZXh0LmpzIGFwcCdzIG93biBgYmFzZVBhdGhgXG4gKiAoYE5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aGApLCB0aHJvd2luZyBhdCBzeW50aCBpZiB0aGUgdHdvIGNhbid0IHNlcnZlXG4gKiB0aGUgYXBwIHRvZ2V0aGVyLiBSZXR1cm5zIGEgbm9ybWFsaXplZCB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vXG4gKiBgYmFzZVBhdGhgIGF0IGFsbDsgY29uc3VtZXJzIHRoYXQgbmVlZCBhIGxlYWRpbmcgc2xhc2ggYWRkIHRoZWlyIG93bi5cbiAqXG4gKiBUaGUgdHdvIGlucHV0cyBhcmUgZ2VudWluZWx5IGRpZmZlcmVudCB0aGluZ3Mg4oCUIHRoZSBwcm9wIGlzIHdoZXJlIHRoZVxuICogaW5mcmFzdHJ1Y3R1cmUgc2VydmVzIHRoZSBhcHAgZnJvbSAoYW5kIHdoaWNoIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHNcbiAqIGxhbmQgdW5kZXIpLCB0aGUgY29uZmlnIGlzIHRoZSBwcmVmaXggdGhlIGFwcCBlbWl0cyBpdHMgb3duIGxpbmtzIGFuZCBhc3NldFxuICogaHJlZnMgdW5kZXIg4oCUIHNvIGhvdyBzdHJpY3RseSB0aGV5IGhhdmUgdG8gbGluZSB1cCwgYW5kIHdoZXRoZXIgb25lIGNhbiBzdGFuZFxuICogaW4gZm9yIHRoZSBvdGhlciwgZGVwZW5kcyBvbiBob3cgdGhlIGBOZXh0anNUeXBlYCByb3V0ZXMgc3RhdGljIHJlcXVlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhc2VQYXRoKFxuICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLFxuICBwcm9wQmFzZVBhdGg/OiBzdHJpbmcsXG4gIG5leHRDb25maWdCYXNlUGF0aD86IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHByb3AgPSBub3JtYWxpemVCYXNlUGF0aChwcm9wQmFzZVBhdGgpO1xuICBjb25zdCBjb25maWcgPSBub3JtYWxpemVCYXNlUGF0aChuZXh0Q29uZmlnQmFzZVBhdGgpO1xuICBpZiAocHJvcCA9PT0gY29uZmlnKSB7XG4gICAgcmV0dXJuIHByb3AgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWlzbWF0Y2ggPVxuICAgIGAke0xPR19QUkVGSVh9IGJhc2VQYXRoIG1pc21hdGNoIGZvciBOZXh0anNUeXBlLiR7bmV4dGpzVHlwZX06IHRoZSBcXGBiYXNlUGF0aFxcYCBwcm9wIGlzICR7cXVvdGUocHJvcCl9IGAgK1xuICAgIGBidXQgeW91ciBOZXh0LmpzIGFwcCdzIGNvbmZpZyBzZXRzIFxcYGJhc2VQYXRoXFxgIHRvICR7cXVvdGUoY29uZmlnKX0uIGA7XG5cbiAgc3dpdGNoIChuZXh0anNUeXBlKSB7XG4gICAgY2FzZSBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlM6XG4gICAgY2FzZSBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTOlxuICAgICAgLy8gYE5leHRqc0Rpc3RyaWJ1dGlvbmAgYnVpbGRzIGl0cyBiZWhhdmlvcnMgYXMgYC8ke2Jhc2VQYXRofS9fbmV4dC9zdGF0aWMqYFxuICAgICAgLy8gYW5kIENsb3VkRnJvbnQgaGFuZHMgYW4gUzMgb3JpZ2luIHRoZSByZXF1ZXN0IHBhdGggdmVyYmF0aW0gYXMgdGhlXG4gICAgICAvLyBvYmplY3Qga2V5LCBzbyB0aGUgb25seSB2YWx1ZSB0aGF0IGNhbiBzZXJ2ZSB0aGUgYXBwIGlzIHRoZSBwcmVmaXggdGhlXG4gICAgICAvLyBhcHAgaXRzZWxmIGVtaXRzLiBUaGF0IGxlYXZlcyB0aGUgcHJvcCBubyByb29tIHRvIGRpZmZlciwgd2hpY2ggbWFrZXNcbiAgICAgIC8vIHRoZSBhcHAncyBjb25maWcgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggd29ydGggZGVyaXZpbmcgZnJvbS5cbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBtaXNtYXRjaCArXG4gICAgICAgICAgXCJDbG91ZEZyb250IHNlcnZlcyBzdGF0aWMgYXNzZXRzIHN0cmFpZ2h0IGZyb20gUzMgdXNpbmcgdGhlIHJlcXVlc3QgcGF0aCBhcyB0aGUgb2JqZWN0IGtleSwgc28gYSBtaXNtYXRjaCBtZWFucyBldmVyeSBgX25leHQvc3RhdGljYCBhbmQgYHB1YmxpYy9gIHJlcXVlc3QgNDA0cy4gXCIgK1xuICAgICAgICAgIFwiRWl0aGVyIHNldCBib3RoIHRvIHRoZSBzYW1lIHZhbHVlLCBvciBkcm9wIHRoZSBwcm9wIOKAlCBsZWZ0IHVuc2V0LCBpdCBmb2xsb3dzIHlvdXIgYXBwJ3MgYGJhc2VQYXRoYC5cIixcbiAgICAgICk7XG4gICAgY2FzZSBOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUzpcbiAgICAgIC8vIERlbGliZXJhdGVseSBub3QgZGVyaXZlZDogQVBJIEdhdGV3YXkgbW91bnRzIHJlc291cmNlcyBiZWxvdyB0aGUgc3RhZ2VcbiAgICAgIC8vIGFuZCBzdHJpcHMgaXQgYmVmb3JlIGludm9raW5nIHRoZSBhcHAsIHNvIGFuIGFwcCB3aG9zZSBiYXNlUGF0aCBpcyB0aGVcbiAgICAgIC8vIHN0YWdlIG5hbWUgKG9yIGEgY3VzdG9tIGRvbWFpbiBiYXNlIHBhdGggbWFwcGluZyB0aGF0IGdldHMgc3RyaXBwZWQgdGhlXG4gICAgICAvLyBzYW1lIHdheSkgaXMgY29ycmVjdCBwcmVjaXNlbHkgYmVjYXVzZSB0aGUgcHJvcCBzdGF5cyB1bnNldC5cbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHByb3Agb25seSBoYXMgdG8gYmUgdGhlIHRhaWwgb2Ygd2hhdCB0aGUgYXBwIGVtaXRzLCBub3QgYWxsIG9mIGl0LFxuICAgICAgLy8gYmVjYXVzZSB0aGUgc3RyaXBwZWQgcHJlZml4IGlzIHBhcnQgb2YgdGhlIGFwcCdzIGBiYXNlUGF0aGAgYnV0IG5ldmVyXG4gICAgICAvLyBwYXJ0IG9mIHRoZSByZXNvdXJjZSBwYXRoOiBhbiBhcHAgYXQgdGhlIGBwcm9kYCBzdGFnZSBuZXN0ZWQgdW5kZXJcbiAgICAgIC8vIFwiL2Jhc2VcIiBzZXRzIGBiYXNlUGF0aDogXCIvcHJvZC9iYXNlXCJgIGFuZCB0aGUgcHJvcCB0byBcIi9iYXNlXCIuIENoZWNrZWRcbiAgICAgIC8vIG9uIGEgcGF0aCBib3VuZGFyeSBzbyBcIi9wcm9kL2Jhc2VcIiBkb2Vzbid0IGFjY2VwdCBhIHByb3Agb2YgXCJzZVwiLlxuICAgICAgaWYgKGNvbmZpZy5lbmRzV2l0aChgLyR7cHJvcH1gKSkge1xuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgbmV2ZXIgd29ya3M6IHRoZSBwcm9wIG1vdmVzIGV2ZXJ5IHJlc291cmNlLCBpbmNsdWRpbmcgdGhlXG4gICAgICAvLyBgQU5ZYCBjYXRjaC1hbGwsIHVuZGVyIGEgcGF0aCB0aGUgYXBwIG5ldmVyIGxpbmtzIHRvLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBtaXNtYXRjaCArXG4gICAgICAgICAgXCJUaGUgYGJhc2VQYXRoYCBwcm9wIG5lc3RzIGV2ZXJ5IEFQSSBHYXRld2F5IHJlc291cmNlIHVuZGVyIHRoYXQgcGF0aCwgaW5jbHVkaW5nIHRoZSBjYXRjaC1hbGwsIHNvIHRoZSBhcHAgaGFzIHRvIGVtaXQgaXRzIGxpbmtzIHVuZGVyIHRoZSBzYW1lIHByZWZpeCBvciBldmVyeSByZXF1ZXN0IDQwNHMuIFwiICtcbiAgICAgICAgICAnRWl0aGVyIHNldCB5b3VyIGFwcFxcJ3MgYGJhc2VQYXRoYCB0byBlbmQgd2l0aCB0aGUgcHJvcCAob3B0aW9uYWxseSBwcmVmaXhlZCBieSB0aGUgc3RhZ2Ugb3IgYmFzZSBwYXRoIG1hcHBpbmcgQVBJIEdhdGV3YXkgc3RyaXBzLCBlLmcuIGBiYXNlUGF0aDogXCIvcHJvZC9iYXNlXCJgIHdpdGggYSBwcm9wIG9mIFwiL2Jhc2VcIiksIG9yIGxlYXZlIHRoZSBwcm9wIHVuc2V0IOKAlCB1bnNldCBpcyB3aGF0IHlvdSB3YW50IHdoZW4gdGhlIGFwcFxcJ3MgYGJhc2VQYXRoYCBpcyB0aGUgQVBJIEdhdGV3YXkgc3RhZ2UgbmFtZSwgc2luY2UgdGhlIHN0YWdlIGlzblxcJ3QgcGFydCBvZiB0aGUgcmVzb3VyY2UgcGF0aC4nLFxuICAgICAgKTtcbiAgICBjYXNlIE5leHRqc1R5cGUuUkVHSU9OQUxfQ09OVEFJTkVSUzpcbiAgICAgIC8vIFRoZSBBTEIgZm9yd2FyZHMgZXZlcnkgcGF0aCB0byB0aGUgY29udGFpbmVyLCB3aGljaCBzZXJ2ZXMgaXRzIG93blxuICAgICAgLy8gc3RhdGljIGFzc2V0cywgc28gaGVyZSBgYmFzZVBhdGhgIG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0IGFuZCBoYXNcbiAgICAgIC8vIG5vIHJvdXRpbmcgbWVhbmluZyB0aGF0IGNvdWxkIGRpc2FncmVlIHdpdGggdGhlIGFwcC5cbiAgICAgIHJldHVybiBwcm9wIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Jhc2UtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLDhDQUVDO0FBT0QsNEJBRUM7QUFvQkQsZ0RBT0M7QUFjRCx3REF1QkM7QUFtQkQsMENBNERDO0FBbktELHFDQUFtRDtBQUNuRCx5Q0FBaUM7QUFDakMsNENBQXNEO0FBRXREOzs7O0dBSUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxRQUFpQjtJQUNqRCxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEtBQTZCO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQUNILFNBQWdCLGtCQUFrQixDQUNoQyxRQUE0QixFQUM1QixJQUFZO0lBRVosTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQzFELE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsR0FBRyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzdELENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILFNBQWdCLHNCQUFzQixDQUFDLFdBQW1CO0lB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QUFtQjtZQUNqQyxxRUFBcUU7WUFDckUsMEVBQTBFO1lBQzFFLHVEQUF1RDtZQUN2RCxPQUFPLElBQUksSUFBSSxTQUFTLENBQUM7SUFDN0IsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IExPR19QUkVGSVgsIE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbi8qKlxuICogUmVkdWNlcyBhIGBiYXNlUGF0aGAgdG8gYSBiYXJlIHBhdGggc2VnbWVudCBzbyB2YWx1ZXMgdGhhdCBhZGRyZXNzIHRoZSBzYW1lXG4gKiBwYXRoIChcIi9iYXNlXCIsIFwiYmFzZVwiLCBcIi9iYXNlL1wiKSBjb21wYXJlIGVxdWFsIGFuZCBjYW4gYmUgY29uY2F0ZW5hdGVkXG4gKiB3aXRob3V0IGRvdWJsaW5nIHNlcGFyYXRvcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVCYXNlUGF0aChiYXNlUGF0aD86IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAoYmFzZVBhdGggfHwgXCJcIikucmVwbGFjZSgvXlxcLysvLCBcIlwiKS5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpO1xufVxuXG4vKipcbiAqIEpvaW5zIHBhdGggcGFydHMgd2l0aCBhIHNpbmdsZSBcIi9cIiwgbm9ybWFsaXppbmcgZWFjaCAoc28gbm8gbGVhZGluZyBvclxuICogdHJhaWxpbmcgc2xhc2ggc3Vydml2ZXMsIGluY2x1ZGluZyBvbiB0aGUgcmVzdWx0KSBhbmQgZHJvcHBpbmcgdGhlIGVtcHR5XG4gKiBvbmVzLCBzbyBhbiB1bnNldCBgYmFzZVBhdGhgIG9yIGtleSBwcmVmaXggbGVhdmVzIHRoZSByZXN0IHVudG91Y2hlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5QYXRoKC4uLnBhcnRzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhcnRzLm1hcChub3JtYWxpemVCYXNlUGF0aCkuZmlsdGVyKEJvb2xlYW4pLmpvaW4oXCIvXCIpO1xufVxuXG4vKipcbiAqIFByZWZpeGVzIGFuIGFic29sdXRlIGFwcCBwYXRoIChhIGhlYWx0aCBjaGVjayBwYXRoLCBzYXkpIHdpdGggYGJhc2VQYXRoYCxcbiAqIGFsd2F5cyByZXR1cm5pbmcgYSBsZWFkaW5nIHNsYXNoLiBBbiBlbXB0eSBvciB1bnNldCBgYmFzZVBhdGhgIG9ubHlcbiAqIG5vcm1hbGl6ZXMgdGhhdCBsZWFkaW5nIHNsYXNoLiBBbnl0aGluZyBhZnRlciB0aGUgZmlyc3Qgc2VnbWVudCBpcyBwYXNzZWRcbiAqIHRocm91Z2ggYXMgZ2l2ZW4sIHRyYWlsaW5nIHNsYXNoIGluY2x1ZGVkLCBzaW5jZSBhIGB0cmFpbGluZ1NsYXNoYCBhcHBcbiAqIGFuc3dlcnMgXCIvYXBpL2hlYWx0aFwiIGFuZCBcIi9hcGkvaGVhbHRoL1wiIGRpZmZlcmVudGx5LlxuICpcbiAqIFVzZSB0aGlzIGZvciBwYXRocyBoYW5kZWQgdG8gc29tZXRoaW5nIHRoYXQgdGFsa3MgdG8gdGhlIGFwcCBkaXJlY3RseSDigJQgYW4gQUxCXG4gKiB0YXJnZXQgZ3JvdXAgaGVhbHRoIGNoZWNrLCB0aGUgTGFtYmRhIFdlYiBBZGFwdGVyIHJlYWRpbmVzcyBjaGVjayDigJQgc2luY2UgdGhlXG4gKiBhcHAgb25seSBhbnN3ZXJzIHVuZGVyIGl0cyBvd24gYGJhc2VQYXRoYC5cbiAqXG4gKiBQcmVmaXhlcyB1bmNvbmRpdGlvbmFsbHksIHNvIGBwYXRoYCBoYXMgdG8gYXJyaXZlIGFzIHRoZSBhcHAgcm91dGVzIGl0LFxuICogd2l0aG91dCBgYmFzZVBhdGhgOiBmb3IgYW4gYXBwIGJhc2VkIGF0IFwiL2Jhc2VcIiwgXCIvYmFzZS9hcGkvaGVhbHRoXCIgYmVjb21lc1xuICogXCIvYmFzZS9iYXNlL2FwaS9oZWFsdGhcIi4gRGVsaWJlcmF0ZWx5IG5vdCBzcGVjaWFsLWNhc2VkIOKAlCBhbiBhcHAgY2FuIHJvdXRlXG4gKiBcIi9iYXNlL2Jhc2UvLi4uXCIgbGVnaXRpbWF0ZWx5LCBhbmQgYWNjZXB0aW5nIGJvdGggc3BlbGxpbmdzIHdvdWxkIGdpdmUgdGhlXG4gKiBwYXRoIHR3byBtZWFuaW5ncy4gU2VlIGBkb2NzL2JyZWFraW5nLWNoYW5nZXMubWRgICgwLjYuMCksIHdoaWNoIHRlbGxzIHVzZXJzXG4gKiB3aG8gcHJlZml4ZWQgYGhlYWx0aENoZWNrUGF0aGAgYnkgaGFuZCB0byBkcm9wIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhXaXRoQmFzZVBhdGgoXG4gIGJhc2VQYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHBhdGg6IHN0cmluZyxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVCYXNlUGF0aChiYXNlUGF0aCk7XG4gIGNvbnN0IGFic29sdXRlID0gcGF0aC5zdGFydHNXaXRoKFwiL1wiKSA/IHBhdGggOiBgLyR7cGF0aH1gO1xuICByZXR1cm4gbm9ybWFsaXplZCA/IGAvJHtub3JtYWxpemVkfSR7YWJzb2x1dGV9YCA6IGFic29sdXRlO1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIE5leHQuanMgYXBwJ3Mgb3duIGBiYXNlUGF0aGAgb3V0IG9mIGByZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvbmAsXG4gKiB3aGljaCBgbmV4dCBidWlsZGAgd3JpdGVzIGludG8gYC5uZXh0YCB3aXRoIHRoZSBmdWxseSByZXNvbHZlZCBjb25maWcgKHNvXG4gKiB0aGlzIHBpY2tzIHVwIGEgYGJhc2VQYXRoYCBjb21wdXRlZCBpbiBgbmV4dC5jb25maWcuanNgLCBub3Qgb25seSBhIGxpdGVyYWxcbiAqIG9uZSkuIE5vcm1hbGl6ZWQsIGVtcHR5IHdoZW4gdGhlIGFwcCBzZXRzIG5vbmUuXG4gKlxuICogRGVncmFkZXMgdG8gYFwiXCJgIHJhdGhlciB0aGFuIHRocm93aW5nLCBzaW5jZSBhbiB1bnJlYWRhYmxlIGZpbGUgc2hvdWxkbid0XG4gKiBmYWlsIGEgZGVwbG95bWVudCB0aGF0IHdvdWxkIG90aGVyd2lzZSB3b3JrLiBJdCB3YXJucyBiZWNhdXNlIGBcIlwiYCBpc1xuICogaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhcHAgdGhhdCBnZW51aW5lbHkgc2V0cyBubyBgYmFzZVBhdGhgOiB0aGVcbiAqIGBOZXh0anNUeXBlYHMgdGhhdCBkZXJpdmUgYGJhc2VQYXRoYCBmcm9tIHRoZSBhcHAgd291bGQgcXVpZXRseSBub3QgZGVyaXZlXG4gKiBpdCBhbmQgNDA0IGV2ZXJ5IHN0YXRpYyBhc3NldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlcXVpcmVkU2VydmVyRmlsZXMgPSBqb2luKGRvdE5leHRQYXRoLCBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpO1xuICBjb25zdCBmYWxsYmFjayA9IChyZWFzb246IHN0cmluZykgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGAke0xPR19QUkVGSVh9ICR7cmVhc29ufS4gQXNzdW1pbmcgeW91ciBOZXh0LmpzIGFwcCBzZXRzIG5vIFxcYGJhc2VQYXRoXFxgOiBgICtcbiAgICAgICAgXCJpZiBpdCBkb2VzIHNldCBvbmUsIHN0YXRpYyBhc3NldHMgd2lsbCA0MDQgYW5kIGFueSBgYmFzZVBhdGhgIHByb3AgXCIgK1xuICAgICAgICBcIm1pc21hdGNoIHJlcG9ydGVkIGF0IHN5bnRoIHdpbGwgbmFtZSB0aGUgd3JvbmcgdmFsdWUuXCIsXG4gICAgKTtcbiAgICByZXR1cm4gXCJcIjtcbiAgfTtcbiAgaWYgKCFleGlzdHNTeW5jKHJlcXVpcmVkU2VydmVyRmlsZXMpKSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrKFxuICAgICAgYFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiBub3QgZm91bmQgYXQgJHtyZXF1aXJlZFNlcnZlckZpbGVzfWAsXG4gICAgKTtcbiAgfVxuICB0cnkge1xuICAgIGNvbnN0IHsgY29uZmlnIH0gPSBKU09OLnBhcnNlKHJlYWRGaWxlU3luYyhyZXF1aXJlZFNlcnZlckZpbGVzLCBcInV0Zi04XCIpKTtcbiAgICByZXR1cm4gbm9ybWFsaXplQmFzZVBhdGgoY29uZmlnPy5iYXNlUGF0aCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrKFxuICAgICAgYENvdWxkIG5vdCByZWFkIGJhc2VQYXRoIGZyb20gJHtyZXF1aXJlZFNlcnZlckZpbGVzfTogJHtlcnJvcn1gLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcXVvdGUoYmFzZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBiYXNlUGF0aCA/IGBcIi8ke2Jhc2VQYXRofVwiYCA6IFwidW5zZXRcIjtcbn1cblxuLyoqXG4gKiBTZXR0bGVzIG9uIHRoZSBzaW5nbGUgYGJhc2VQYXRoYCB0aGUgaW5mcmFzdHJ1Y3R1cmUgc2hvdWxkIGJlIGJ1aWx0IGFyb3VuZCxcbiAqIGdpdmVuIHRoZSBDREsgYGJhc2VQYXRoYCBwcm9wIGFuZCB0aGUgTmV4dC5qcyBhcHAncyBvd24gYGJhc2VQYXRoYFxuICogKGBOZXh0anNCdWlsZC5uZXh0Q29uZmlnQmFzZVBhdGhgKSwgdGhyb3dpbmcgYXQgc3ludGggaWYgdGhlIHR3byBjYW4ndCBzZXJ2ZVxuICogdGhlIGFwcCB0b2dldGhlci4gUmV0dXJucyBhIG5vcm1hbGl6ZWQgdmFsdWUsIG9yIGB1bmRlZmluZWRgIGZvciBub1xuICogYGJhc2VQYXRoYCBhdCBhbGw7IGNvbnN1bWVycyB0aGF0IG5lZWQgYSBsZWFkaW5nIHNsYXNoIGFkZCB0aGVpciBvd24uXG4gKlxuICogVGhlIHR3byBpbnB1dHMgYXJlIGdlbnVpbmVseSBkaWZmZXJlbnQgdGhpbmdzIOKAlCB0aGUgcHJvcCBpcyB3aGVyZSB0aGVcbiAqIGluZnJhc3RydWN0dXJlIHNlcnZlcyB0aGUgYXBwIGZyb20gKGFuZCB3aGljaCBTMyBrZXkgcHJlZml4IHRoZSBzdGF0aWMgYXNzZXRzXG4gKiBsYW5kIHVuZGVyKSwgdGhlIGNvbmZpZyBpcyB0aGUgcHJlZml4IHRoZSBhcHAgZW1pdHMgaXRzIG93biBsaW5rcyBhbmQgYXNzZXRcbiAqIGhyZWZzIHVuZGVyIOKAlCBzbyBob3cgc3RyaWN0bHkgdGhleSBoYXZlIHRvIGxpbmUgdXAsIGFuZCB3aGV0aGVyIG9uZSBjYW4gc3RhbmRcbiAqIGluIGZvciB0aGUgb3RoZXIsIGRlcGVuZHMgb24gaG93IHRoZSBgTmV4dGpzVHlwZWAgcm91dGVzIHN0YXRpYyByZXF1ZXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVCYXNlUGF0aChcbiAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZSxcbiAgcHJvcEJhc2VQYXRoPzogc3RyaW5nLFxuICBuZXh0Q29uZmlnQmFzZVBhdGg/OiBzdHJpbmcsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBwcm9wID0gbm9ybWFsaXplQmFzZVBhdGgocHJvcEJhc2VQYXRoKTtcbiAgY29uc3QgY29uZmlnID0gbm9ybWFsaXplQmFzZVBhdGgobmV4dENvbmZpZ0Jhc2VQYXRoKTtcbiAgaWYgKHByb3AgPT09IGNvbmZpZykge1xuICAgIHJldHVybiBwcm9wIHx8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG1pc21hdGNoID1cbiAgICBgJHtMT0dfUFJFRklYfSBiYXNlUGF0aCBtaXNtYXRjaCBmb3IgTmV4dGpzVHlwZS4ke25leHRqc1R5cGV9OiB0aGUgXFxgYmFzZVBhdGhcXGAgcHJvcCBpcyAke3F1b3RlKHByb3ApfSBgICtcbiAgICBgYnV0IHlvdXIgTmV4dC5qcyBhcHAncyBjb25maWcgc2V0cyBcXGBiYXNlUGF0aFxcYCB0byAke3F1b3RlKGNvbmZpZyl9LiBgO1xuXG4gIHN3aXRjaCAobmV4dGpzVHlwZSkge1xuICAgIGNhc2UgTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TOlxuICAgIGNhc2UgTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSUzpcbiAgICAgIC8vIGBOZXh0anNEaXN0cmlidXRpb25gIGJ1aWxkcyBpdHMgYmVoYXZpb3JzIGFzIGAvJHtiYXNlUGF0aH0vX25leHQvc3RhdGljKmBcbiAgICAgIC8vIGFuZCBDbG91ZEZyb250IGhhbmRzIGFuIFMzIG9yaWdpbiB0aGUgcmVxdWVzdCBwYXRoIHZlcmJhdGltIGFzIHRoZVxuICAgICAgLy8gb2JqZWN0IGtleSwgc28gdGhlIG9ubHkgdmFsdWUgdGhhdCBjYW4gc2VydmUgdGhlIGFwcCBpcyB0aGUgcHJlZml4IHRoZVxuICAgICAgLy8gYXBwIGl0c2VsZiBlbWl0cy4gVGhhdCBsZWF2ZXMgdGhlIHByb3Agbm8gcm9vbSB0byBkaWZmZXIsIHdoaWNoIG1ha2VzXG4gICAgICAvLyB0aGUgYXBwJ3MgY29uZmlnIHRoZSBzaW5nbGUgc291cmNlIG9mIHRydXRoIHdvcnRoIGRlcml2aW5nIGZyb20uXG4gICAgICBpZiAoIXByb3ApIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgbWlzbWF0Y2ggK1xuICAgICAgICAgIFwiQ2xvdWRGcm9udCBzZXJ2ZXMgc3RhdGljIGFzc2V0cyBzdHJhaWdodCBmcm9tIFMzIHVzaW5nIHRoZSByZXF1ZXN0IHBhdGggYXMgdGhlIG9iamVjdCBrZXksIHNvIGEgbWlzbWF0Y2ggbWVhbnMgZXZlcnkgYF9uZXh0L3N0YXRpY2AgYW5kIGBwdWJsaWMvYCByZXF1ZXN0IDQwNHMuIFwiICtcbiAgICAgICAgICBcIkVpdGhlciBzZXQgYm90aCB0byB0aGUgc2FtZSB2YWx1ZSwgb3IgZHJvcCB0aGUgcHJvcCDigJQgbGVmdCB1bnNldCwgaXQgZm9sbG93cyB5b3VyIGFwcCdzIGBiYXNlUGF0aGAuXCIsXG4gICAgICApO1xuICAgIGNhc2UgTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlM6XG4gICAgICAvLyBEZWxpYmVyYXRlbHkgbm90IGRlcml2ZWQ6IEFQSSBHYXRld2F5IG1vdW50cyByZXNvdXJjZXMgYmVsb3cgdGhlIHN0YWdlXG4gICAgICAvLyBhbmQgc3RyaXBzIGl0IGJlZm9yZSBpbnZva2luZyB0aGUgYXBwLCBzbyBhbiBhcHAgd2hvc2UgYmFzZVBhdGggaXMgdGhlXG4gICAgICAvLyBzdGFnZSBuYW1lIChvciBhIGN1c3RvbSBkb21haW4gYmFzZSBwYXRoIG1hcHBpbmcgdGhhdCBnZXRzIHN0cmlwcGVkIHRoZVxuICAgICAgLy8gc2FtZSB3YXkpIGlzIGNvcnJlY3QgcHJlY2lzZWx5IGJlY2F1c2UgdGhlIHByb3Agc3RheXMgdW5zZXQuXG4gICAgICBpZiAoIXByb3ApIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBwcm9wIG9ubHkgaGFzIHRvIGJlIHRoZSB0YWlsIG9mIHdoYXQgdGhlIGFwcCBlbWl0cywgbm90IGFsbCBvZiBpdCxcbiAgICAgIC8vIGJlY2F1c2UgdGhlIHN0cmlwcGVkIHByZWZpeCBpcyBwYXJ0IG9mIHRoZSBhcHAncyBgYmFzZVBhdGhgIGJ1dCBuZXZlclxuICAgICAgLy8gcGFydCBvZiB0aGUgcmVzb3VyY2UgcGF0aDogYW4gYXBwIGF0IHRoZSBgcHJvZGAgc3RhZ2UgbmVzdGVkIHVuZGVyXG4gICAgICAvLyBcIi9iYXNlXCIgc2V0cyBgYmFzZVBhdGg6IFwiL3Byb2QvYmFzZVwiYCBhbmQgdGhlIHByb3AgdG8gXCIvYmFzZVwiLiBDaGVja2VkXG4gICAgICAvLyBvbiBhIHBhdGggYm91bmRhcnkgc28gXCIvcHJvZC9iYXNlXCIgZG9lc24ndCBhY2NlcHQgYSBwcm9wIG9mIFwic2VcIi5cbiAgICAgIGlmIChjb25maWcuZW5kc1dpdGgoYC8ke3Byb3B9YCkpIHtcbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgICB9XG4gICAgICAvLyBBbnl0aGluZyBlbHNlIG5ldmVyIHdvcmtzOiB0aGUgcHJvcCBtb3ZlcyBldmVyeSByZXNvdXJjZSwgaW5jbHVkaW5nIHRoZVxuICAgICAgLy8gYEFOWWAgY2F0Y2gtYWxsLCB1bmRlciBhIHBhdGggdGhlIGFwcCBuZXZlciBsaW5rcyB0by5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgbWlzbWF0Y2ggK1xuICAgICAgICAgIFwiVGhlIGBiYXNlUGF0aGAgcHJvcCBuZXN0cyBldmVyeSBBUEkgR2F0ZXdheSByZXNvdXJjZSB1bmRlciB0aGF0IHBhdGgsIGluY2x1ZGluZyB0aGUgY2F0Y2gtYWxsLCBzbyB0aGUgYXBwIGhhcyB0byBlbWl0IGl0cyBsaW5rcyB1bmRlciB0aGUgc2FtZSBwcmVmaXggb3IgZXZlcnkgcmVxdWVzdCA0MDRzLiBcIiArXG4gICAgICAgICAgJ0VpdGhlciBzZXQgeW91ciBhcHBcXCdzIGBiYXNlUGF0aGAgdG8gZW5kIHdpdGggdGhlIHByb3AgKG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgdGhlIHN0YWdlIG9yIGJhc2UgcGF0aCBtYXBwaW5nIEFQSSBHYXRld2F5IHN0cmlwcywgZS5nLiBgYmFzZVBhdGg6IFwiL3Byb2QvYmFzZVwiYCB3aXRoIGEgcHJvcCBvZiBcIi9iYXNlXCIpLCBvciBsZWF2ZSB0aGUgcHJvcCB1bnNldCDigJQgdW5zZXQgaXMgd2hhdCB5b3Ugd2FudCB3aGVuIHRoZSBhcHBcXCdzIGBiYXNlUGF0aGAgaXMgdGhlIEFQSSBHYXRld2F5IHN0YWdlIG5hbWUsIHNpbmNlIHRoZSBzdGFnZSBpc25cXCd0IHBhcnQgb2YgdGhlIHJlc291cmNlIHBhdGguJyxcbiAgICAgICk7XG4gICAgY2FzZSBOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlM6XG4gICAgICAvLyBUaGUgQUxCIGZvcndhcmRzIGV2ZXJ5IHBhdGggdG8gdGhlIGNvbnRhaW5lciwgd2hpY2ggc2VydmVzIGl0cyBvd25cbiAgICAgIC8vIHN0YXRpYyBhc3NldHMsIHNvIGhlcmUgYGJhc2VQYXRoYCBvbmx5IG5hbWVzcGFjZXMgdGhlIFMzIGJ1Y2tldCBhbmQgaGFzXG4gICAgICAvLyBubyByb3V0aW5nIG1lYW5pbmcgdGhhdCBjb3VsZCBkaXNhZ3JlZSB3aXRoIHRoZSBhcHAuXG4gICAgICByZXR1cm4gcHJvcCB8fCB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -41,6 +41,63 @@ describe("joinPath", () => {
|
|
|
41
41
|
expect((0, base_path_1.joinPath)()).toBe("");
|
|
42
42
|
expect((0, base_path_1.joinPath)(undefined, "", "/")).toBe("");
|
|
43
43
|
});
|
|
44
|
+
// How `NextjsRegionalContainers.url` appends the app's basePath: the ALB
|
|
45
|
+
// forwards every path to the container unchanged, so the app only answers
|
|
46
|
+
// under its own basePath and the bare ALB URL would 404.
|
|
47
|
+
it("appends an app basePath to a bare ALB origin", () => {
|
|
48
|
+
const alb = "http://my-alb-123.us-east-1.elb.amazonaws.com";
|
|
49
|
+
expect((0, base_path_1.joinPath)(alb, "base")).toBe(`${alb}/base`);
|
|
50
|
+
expect((0, base_path_1.joinPath)(alb, "team/app")).toBe(`${alb}/team/app`);
|
|
51
|
+
// An app with no basePath is served at the origin itself.
|
|
52
|
+
expect((0, base_path_1.joinPath)(alb, "")).toBe(alb);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe("prefixWithBasePath", () => {
|
|
56
|
+
// The health check path is handed to things that talk to the app directly (an
|
|
57
|
+
// ALB target group, the Lambda Web Adapter readiness check), and the app only
|
|
58
|
+
// answers under its basePath. Unprefixed, every check 404s: the target never
|
|
59
|
+
// turns healthy, so tasks are killed on the health check interval and the
|
|
60
|
+
// deployment rolls back.
|
|
61
|
+
it("prefixes a health check path with the app's basePath", () => {
|
|
62
|
+
expect((0, base_path_1.prefixWithBasePath)("base", "/api/health")).toBe("/base/api/health");
|
|
63
|
+
expect((0, base_path_1.prefixWithBasePath)("/base/", "/api/health")).toBe("/base/api/health");
|
|
64
|
+
});
|
|
65
|
+
it("leaves the path untouched when the app sets no basePath", () => {
|
|
66
|
+
expect((0, base_path_1.prefixWithBasePath)(undefined, "/api/health")).toBe("/api/health");
|
|
67
|
+
expect((0, base_path_1.prefixWithBasePath)("", "/api/health")).toBe("/api/health");
|
|
68
|
+
expect((0, base_path_1.prefixWithBasePath)("/", "/api/health")).toBe("/api/health");
|
|
69
|
+
});
|
|
70
|
+
it("always returns a leading slash, whatever the path came with", () => {
|
|
71
|
+
// The ALB health check and the readiness check URL both need an absolute
|
|
72
|
+
// path, so the result can't come back bare. Without a basePath a bare path
|
|
73
|
+
// used to pass straight through, which concatenated into
|
|
74
|
+
// "http://127.0.0.1:3000api/health" as the readiness check URL.
|
|
75
|
+
expect((0, base_path_1.prefixWithBasePath)("base", "api/health")).toBe("/base/api/health");
|
|
76
|
+
expect((0, base_path_1.prefixWithBasePath)(undefined, "api/health")).toBe("/api/health");
|
|
77
|
+
expect((0, base_path_1.prefixWithBasePath)("", "api/health")).toBe("/api/health");
|
|
78
|
+
});
|
|
79
|
+
// The path is what the app routes, without basePath, and it is prefixed
|
|
80
|
+
// whether or not it already looks prefixed: an app can route "/base/base/..."
|
|
81
|
+
// legitimately, so treating a leading "/base" as already-prefixed would make
|
|
82
|
+
// that path unreachable and give the prop two meanings. Users who prefixed
|
|
83
|
+
// `healthCheckPath` by hand to work around the missing prefix drop it on
|
|
84
|
+
// upgrade — documented in docs/breaking-changes.md under 0.6.0.
|
|
85
|
+
it("prefixes a path that already looks prefixed", () => {
|
|
86
|
+
expect((0, base_path_1.prefixWithBasePath)("base", "/base/api/health")).toBe("/base/base/api/health");
|
|
87
|
+
});
|
|
88
|
+
// A `trailingSlash: true` app redirects "/api/health" to "/api/health/" with a
|
|
89
|
+
// 308, which an ALB health check doesn't count as healthy, so the slash the
|
|
90
|
+
// user wrote has to survive.
|
|
91
|
+
it("preserves a trailing slash", () => {
|
|
92
|
+
expect((0, base_path_1.prefixWithBasePath)("base", "/api/health/")).toBe("/base/api/health/");
|
|
93
|
+
expect((0, base_path_1.prefixWithBasePath)(undefined, "/api/health/")).toBe("/api/health/");
|
|
94
|
+
});
|
|
95
|
+
it("handles a nested basePath, as REGIONAL_FUNCTIONS can produce", () => {
|
|
96
|
+
// An app at the `prod` stage nested under "/base" sets `basePath:
|
|
97
|
+
// "/prod/base"`, and the readiness check hits the local server, so the
|
|
98
|
+
// whole prefix has to be there.
|
|
99
|
+
expect((0, base_path_1.prefixWithBasePath)("/prod/base", "/api/health")).toBe("/prod/base/api/health");
|
|
100
|
+
});
|
|
44
101
|
});
|
|
45
102
|
describe("readNextConfigBasePath", () => {
|
|
46
103
|
let dotNextPath;
|
|
@@ -160,4 +217,4 @@ describe("resolveBasePath", () => {
|
|
|
160
217
|
});
|
|
161
218
|
});
|
|
162
219
|
});
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYmFzZS1wYXRoLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBNkQ7QUFDN0QscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw0Q0FBMEM7QUFDMUMsMkNBS3FCO0FBRXJCLE1BQU0sTUFBTSxHQUFHLENBQUMsc0JBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFM0UsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxQyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7UUFDckQsTUFBTSxDQUFDLElBQUEsNkJBQWlCLEVBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDM0QsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLHVDQUF1QyxDQUFDO0lBRXZELEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDM0IsTUFBTSxDQUFDLElBQUEsb0JBQVEsRUFBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0QyxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMxRCxtQkFBbUIsQ0FDcEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGdFQUFnRSxFQUFFLEdBQUcsRUFBRTtRQUN4RSxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLENBQUM7UUFDekQsTUFBTSxDQUFDLElBQUEsb0JBQVEsRUFBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxJQUFBLG9CQUFRLEVBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxXQUFXLENBQUMsQ0FBQztRQUNsRSxNQUFNLENBQUMsSUFBQSxvQkFBUSxFQUFDLFFBQVEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUNwRCx5QkFBeUIsQ0FDMUIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtRQUMxRCxNQUFNLENBQUMsSUFBQSxvQkFBUSxHQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLElBQUEsb0JBQVEsRUFBQyxTQUFTLEVBQUUsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsd0JBQXdCLEVBQUUsR0FBRyxFQUFFO0lBQ3RDLElBQUksV0FBbUIsQ0FBQztJQUN4QixJQUFJLElBQXNCLENBQUM7SUFFM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLFdBQVcsR0FBRyxJQUFBLHFCQUFXLEVBQUMsSUFBQSxnQkFBSSxFQUFDLElBQUEsZ0JBQU0sR0FBRSxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUM7UUFDeEQsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNuQixJQUFBLGdCQUFNLEVBQUMsV0FBVyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsd0JBQXdCLENBQUMsUUFBZ0I7UUFDaEQsSUFBQSx1QkFBYSxFQUFDLElBQUEsZ0JBQUksRUFBQyxXQUFXLEVBQUUsNEJBQTRCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsRUFBRSxDQUFDLHVEQUF1RCxFQUFFLEdBQUcsRUFBRTtRQUMvRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTVFLE1BQU0sQ0FBQyxJQUFBLGtDQUFzQixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUN0QyxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyx1REFBdUQsRUFBRSxHQUFHLEVBQUU7UUFDL0QsNERBQTREO1FBQzVELHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFdkUsTUFBTSxDQUFDLElBQUEsa0NBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBRUgsNkVBQTZFO0lBQzdFLDBFQUEwRTtJQUMxRSw0RUFBNEU7SUFDNUUsb0RBQW9EO0lBQ3BELEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxHQUFHLEVBQUU7UUFDMUQsTUFBTSxDQUFDLElBQUEsa0NBQXNCLEVBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckQsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUMvQixNQUFNLENBQUMsZ0JBQWdCLENBQUMsNEJBQTRCLENBQUMsQ0FDdEQsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNDQUFzQyxFQUFFLEdBQUcsRUFBRTtRQUM5Qyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVyQyxNQUFNLENBQUMsSUFBQSxrQ0FBc0IsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQy9CLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQyxDQUNuRCxDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMseURBQXlELEVBQUUsR0FBRyxFQUFFO1FBQ2pFLHdCQUF3QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXhELE1BQU0sQ0FBQyxJQUFBLGtDQUFzQixFQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUM7QUFFSCxRQUFRLENBQUMsaUJBQWlCLEVBQUUsR0FBRyxFQUFFO0lBQy9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQkFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUM1RCxFQUFFLENBQUMsMkNBQTJDLEVBQUUsR0FBRyxFQUFFO1lBQ25ELE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1RCx1RUFBdUU7WUFDdkUsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzRCxDQUFDLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxzRUFBc0U7UUFDdEUsMENBQTBDO1FBQzFDLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLEVBQUU7WUFDckQsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25FLE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRSxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEUsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQ3pDLHlFQUF5RTtRQUN6RSw2RUFBNkU7UUFDN0Usb0RBQW9EO1FBQ3BELEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLElBQUEsMkJBQWUsRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM3RCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQy9ELFVBQVUsQ0FDWCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsR0FBRyxFQUFFO1lBQzdELE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUN4RCxrREFBa0QsQ0FDbkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQzNELHFFQUFxRSxDQUN0RSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxzQkFBVSxDQUFDLGtCQUFrQixFQUFFLEdBQUcsRUFBRTtRQUMzQywyRUFBMkU7UUFDM0UseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSxxRUFBcUU7UUFDckUsRUFBRSxDQUFDLG9DQUFvQyxFQUFFLEdBQUcsRUFBRTtZQUM1QyxNQUFNLENBQ0osSUFBQSwyQkFBZSxFQUFDLHNCQUFVLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUNuRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSxrREFBa0Q7UUFDbEQsRUFBRSxDQUFDLGlEQUFpRCxFQUFFLEdBQUcsRUFBRTtZQUN6RCxNQUFNLENBQ0osSUFBQSwyQkFBZSxFQUFDLHNCQUFVLENBQUMsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUN0RSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx3REFBd0QsRUFBRSxHQUFHLEVBQUU7WUFDaEUsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsMkJBQWUsRUFBQyxzQkFBVSxDQUFDLGtCQUFrQixFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FDcEUsQ0FBQyxPQUFPLENBQUMsa0RBQWtELENBQUMsQ0FBQztZQUM5RCx3RUFBd0U7WUFDeEUsb0VBQW9FO1lBQ3BFLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FDVixJQUFBLDJCQUFlLEVBQUMsc0JBQVUsQ0FBQyxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQ3RFLENBQUMsT0FBTyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDaEUsQ0FBQyxDQUFDLENBQUM7UUFFSCwyRUFBMkU7UUFDM0Usa0RBQWtEO1FBQ2xELEVBQUUsQ0FBQyxxREFBcUQsRUFBRSxHQUFHLEVBQUU7WUFDN0QsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUNWLElBQUEsMkJBQWUsRUFBQyxzQkFBVSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUN4RCxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFLEdBQUcsRUFBRTtZQUN0QyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQ1YsSUFBQSwyQkFBZSxFQUFDLHNCQUFVLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUMzRCxDQUFDLE9BQU8sQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ2hFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsc0JBQVUsQ0FBQyxtQkFBbUIsRUFBRSxHQUFHLEVBQUU7UUFDNUMsMkVBQTJFO1FBQzNFLDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxNQUFNLFVBQVUsR0FBRyxzQkFBVSxDQUFDLG1CQUFtQixDQUFDO1lBQ2xELE1BQU0sQ0FBQyxJQUFBLDJCQUFlLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxRCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxNQUFNLENBQUMsSUFBQSwyQkFBZSxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGpvaW5QYXRoLFxuICBub3JtYWxpemVCYXNlUGF0aCxcbiAgcmVhZE5leHRDb25maWdCYXNlUGF0aCxcbiAgcmVzb2x2ZUJhc2VQYXRoLFxufSBmcm9tIFwiLi9iYXNlLXBhdGhcIjtcblxuY29uc3QgR0xPQkFMID0gW05leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUywgTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU107XG5cbmRlc2NyaWJlKFwibm9ybWFsaXplQmFzZVBhdGhcIiwgKCkgPT4ge1xuICBpdChcInJlZHVjZXMgdmFsdWVzIGFkZHJlc3NpbmcgdGhlIHNhbWUgcGF0aCB0byB0aGUgc2FtZSBzZWdtZW50XCIsICgpID0+IHtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCIvYmFzZVwiKSkudG9CZShcImJhc2VcIik7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUJhc2VQYXRoKFwiYmFzZVwiKSkudG9CZShcImJhc2VcIik7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUJhc2VQYXRoKFwiL2Jhc2UvXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCIvL2Jhc2UvL1wiKSkudG9CZShcImJhc2VcIik7XG4gIH0pO1xuXG4gIGl0KFwibWFwcyB1bmRlZmluZWQgYW5kIGVtcHR5IHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aCh1bmRlZmluZWQpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aChcIlwiKSkudG9CZShcIlwiKTtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCIvXCIpKS50b0JlKFwiXCIpO1xuICB9KTtcblxuICBpdChcImtlZXBzIGludGVyaW9yIHNsYXNoZXMgb2YgYSBuZXN0ZWQgYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aChcIi90ZWFtL2FwcC9cIikpLnRvQmUoXCJ0ZWFtL2FwcFwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJqb2luUGF0aFwiLCAoKSA9PiB7XG4gIGNvbnN0IG9yaWdpbiA9IFwiaHR0cHM6Ly9kMTExMTExYWJjZGVmOC5jbG91ZGZyb250Lm5ldFwiO1xuXG4gIGl0KFwiZHJvcHMgZW1wdHkgcGFydHNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChqb2luUGF0aChvcmlnaW4pKS50b0JlKG9yaWdpbik7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgXCJcIikpLnRvQmUob3JpZ2luKTtcbiAgICBleHBlY3Qoam9pblBhdGgob3JpZ2luLCB1bmRlZmluZWQpKS50b0JlKG9yaWdpbik7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgXCIvXCIpKS50b0JlKG9yaWdpbik7XG4gICAgZXhwZWN0KGpvaW5QYXRoKFwiXCIsIFwiYmFzZVwiLCB1bmRlZmluZWQsIFwiX25leHQvc3RhdGljXCIpKS50b0JlKFxuICAgICAgXCJiYXNlL19uZXh0L3N0YXRpY1wiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiam9pbnMgd2l0aCBleGFjdGx5IG9uZSBzbGFzaCByZWdhcmRsZXNzIG9mIGVhY2ggcGFydCdzIHNsYXNoZXNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChqb2luUGF0aChvcmlnaW4sIFwiL2Jhc2VcIikpLnRvQmUoYCR7b3JpZ2lufS9iYXNlYCk7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgXCJiYXNlL1wiKSkudG9CZShgJHtvcmlnaW59L2Jhc2VgKTtcbiAgICBleHBlY3Qoam9pblBhdGgob3JpZ2luLCBcIi90ZWFtL2FwcC9cIikpLnRvQmUoYCR7b3JpZ2lufS90ZWFtL2FwcGApO1xuICAgIGV4cGVjdChqb2luUGF0aChcIi9iYXNlL1wiLCBcIi9fbmV4dC9zdGF0aWMve2tleX1cIikpLnRvQmUoXG4gICAgICBcImJhc2UvX25leHQvc3RhdGljL3trZXl9XCIsXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGFuIGVtcHR5IHN0cmluZyB3aGVuIGV2ZXJ5IHBhcnQgaXMgZW1wdHlcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChqb2luUGF0aCgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdChqb2luUGF0aCh1bmRlZmluZWQsIFwiXCIsIFwiL1wiKSkudG9CZShcIlwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoXCIsICgpID0+IHtcbiAgbGV0IGRvdE5leHRQYXRoOiBzdHJpbmc7XG4gIGxldCB3YXJuOiBqZXN0LlNweUluc3RhbmNlO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGRvdE5leHRQYXRoID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJiYXNlLXBhdGgtXCIpKTtcbiAgICB3YXJuID0gamVzdC5zcHlPbihjb25zb2xlLCBcIndhcm5cIikubW9ja0ltcGxlbWVudGF0aW9uKCgpID0+IHt9KTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICB3YXJuLm1vY2tSZXN0b3JlKCk7XG4gICAgcm1TeW5jKGRvdE5leHRQYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHdyaXRlUmVxdWlyZWRTZXJ2ZXJGaWxlcyhjb250ZW50czogc3RyaW5nKSB7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKGRvdE5leHRQYXRoLCBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpLCBjb250ZW50cyk7XG4gIH1cblxuICBpdChcInJlYWRzIHRoZSBhcHAncyBiYXNlUGF0aCBhbmQgc3RyaXBzIHRoZSBsZWFkaW5nIHNsYXNoXCIsICgpID0+IHtcbiAgICB3cml0ZVJlcXVpcmVkU2VydmVyRmlsZXMoSlNPTi5zdHJpbmdpZnkoeyBjb25maWc6IHsgYmFzZVBhdGg6IFwiL3Byb2RcIiB9IH0pKTtcblxuICAgIGV4cGVjdChyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoKGRvdE5leHRQYXRoKSkudG9CZShcInByb2RcIik7XG4gICAgZXhwZWN0KHdhcm4pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgYXBwIHNldHMgbm8gYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgIC8vIGBuZXh0IGJ1aWxkYCB3cml0ZXMgYmFzZVBhdGg6IFwiXCIgcmF0aGVyIHRoYW4gb21pdHRpbmcgaXQuXG4gICAgd3JpdGVSZXF1aXJlZFNlcnZlckZpbGVzKEpTT04uc3RyaW5naWZ5KHsgY29uZmlnOiB7IGJhc2VQYXRoOiBcIlwiIH0gfSkpO1xuXG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdCh3YXJuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICAvLyBEZWdyYWRpbmcgdG8gXCJcIiBpcyBkZWxpYmVyYXRlLCBidXQgaXQncyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFwcCB0aGF0XG4gIC8vIHNldHMgbm8gYmFzZVBhdGgsIHNvIGl0IGhhcyB0byBiZSB2aXNpYmxlOiB0aGUgR2xvYmFsIGNvbnN0cnVjdHMgZGVyaXZlXG4gIC8vIHRoZWlyIGJhc2VQYXRoIGZyb20gdGhpcyB2YWx1ZSBhbmQgd291bGQgb3RoZXJ3aXNlIDQwNCBldmVyeSBzdGF0aWMgYXNzZXRcbiAgLy8gd2l0aCBub3RoaW5nIGJ1dCBhIHNpbGVudCBmYWxsYmFjayB0byBleHBsYWluIGl0LlxuICBpdChcIndhcm5zIHdoZW4gcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb24gaXMgbWlzc2luZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIiksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJ3YXJucyB3aGVuIHRoZSBmaWxlIGlzbid0IHZhbGlkIEpTT05cIiwgKCkgPT4ge1xuICAgIHdyaXRlUmVxdWlyZWRTZXJ2ZXJGaWxlcyhcIm5vdCBqc29uXCIpO1xuXG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICAgIGV4cGVjdCh3YXJuKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5zdHJpbmdDb250YWluaW5nKFwiQ291bGQgbm90IHJlYWQgYmFzZVBhdGhcIiksXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGFuIGVtcHR5IHN0cmluZyB3aGVuIHRoZSBmaWxlIGhhcyBubyBjb25maWcga2V5XCIsICgpID0+IHtcbiAgICB3cml0ZVJlcXVpcmVkU2VydmVyRmlsZXMoSlNPTi5zdHJpbmdpZnkoeyBmaWxlczogW10gfSkpO1xuXG4gICAgZXhwZWN0KHJlYWROZXh0Q29uZmlnQmFzZVBhdGgoZG90TmV4dFBhdGgpKS50b0JlKFwiXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVCYXNlUGF0aFwiLCAoKSA9PiB7XG4gIGRlc2NyaWJlLmVhY2goT2JqZWN0LnZhbHVlcyhOZXh0anNUeXBlKSkoXCIlc1wiLCAobmV4dGpzVHlwZSkgPT4ge1xuICAgIGl0KFwicmVzb2x2ZXMgdG8gdW5kZWZpbmVkIHdoZW4gYm90aCBhcmUgdW5zZXRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIlwiLCBcIlwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgICAgLy8gTm9ybWFsaXplcyB0byBlbXB0eSwgc28gaXQncyB0aGUgc2FtZSBhcyB1bnNldCByYXRoZXIgdGhhbiBhIHByZWZpeC5cbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBPbmUgc2hhcGUgb3V0LCB3aGF0ZXZlciBzaGFwZSBjYW1lIGluOiBjb25zdW1lcnMgdGhhdCBuZWVkIGEgbGVhZGluZ1xuICAgIC8vIHNsYXNoIChvbmx5IGBOZXh0anNEaXN0cmlidXRpb25gJ3MgcGF0aCBwYXR0ZXJucykgYWRkIHRoZWlyIG93biwgc29cbiAgICAvLyBub3RoaW5nIGRvd25zdHJlYW0gaGFzIHRvIHJlLW5vcm1hbGl6ZS5cbiAgICBpdChcIm5vcm1hbGl6ZXMgdGhlIHByb3Agd2hlbiBpdCBtYXRjaGVzIHRoZSBhcHBcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIi9iYXNlXCIsIFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcImJhc2VcIiwgXCIvYmFzZVwiKSkudG9CZShcImJhc2VcIik7XG4gICAgICBleHBlY3QocmVzb2x2ZUJhc2VQYXRoKG5leHRqc1R5cGUsIFwiL2Jhc2UvXCIsIFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcImJhc2UvL1wiLCBcIi9iYXNlXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUuZWFjaChHTE9CQUwpKFwiJXNcIiwgKG5leHRqc1R5cGUpID0+IHtcbiAgICAvLyBDbG91ZEZyb250IHVzZXMgdGhlIHJlcXVlc3QgcGF0aCB2ZXJiYXRpbSBhcyB0aGUgUzMgb2JqZWN0IGtleSwgc28gdGhlXG4gICAgLy8gcHJvcCBoYXMgdG8gYmUgdGhlIHByZWZpeCB0aGUgYXBwIGVtaXRzIOKAlCB0aGVyZSdzIGV4YWN0bHkgb25lIHZhbGlkIHZhbHVlLFxuICAgIC8vIHdoaWNoIG1ha2VzIHRoZSBhcHAncyBjb25maWcgdGhlIHNvdXJjZSBvZiB0cnV0aC5cbiAgICBpdChcImRlcml2ZXMgdGhlIHByb3AgZnJvbSB0aGUgYXBwJ3MgYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCB1bmRlZmluZWQsIFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIlwiLCBcImJhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCB1bmRlZmluZWQsIFwiL3RlYW0vYXBwL1wiKSkudG9CZShcbiAgICAgICAgXCJ0ZWFtL2FwcFwiLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVqZWN0cyB0aGUgcHJvcCBzZXR0aW5nIGEgYmFzZVBhdGggdGhlIGFwcCBkb2Vzbid0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiByZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvYmFzZVwiKSkudG9UaHJvdyhcbiAgICAgICAgL0Nsb3VkRnJvbnQgc2VydmVzIHN0YXRpYyBhc3NldHMgc3RyYWlnaHQgZnJvbSBTMy8sXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZWplY3RzIHR3byBkaWZmZXJlbnQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PiByZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvYVwiLCBcIi9iXCIpKS50b1Rocm93KFxuICAgICAgICAncHJvcCBpcyBcIi9hXCIgYnV0IHlvdXIgTmV4dC5qcyBhcHBcXCdzIGNvbmZpZyBzZXRzIGBiYXNlUGF0aGAgdG8gXCIvYlwiJyxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCAoKSA9PiB7XG4gICAgLy8gQVBJIEdhdGV3YXkgc3RyaXBzIHRoZSBzdGFnZSBiZWZvcmUgbWF0Y2hpbmcgcmVzb3VyY2VzLCBzbyBhbiBhcHAgc2VydmVkXG4gICAgLy8gYXQgdGhlIGRlZmF1bHQgYHByb2RgIHN0YWdlIHNldHMgYmFzZVBhdGg6IFwiL3Byb2RcIiBhbmQgbGVhdmVzIHRoZSBwcm9wXG4gICAgLy8gdW5zZXQuIFNhbWUgc2hhcGUgYXMgYSBjdXN0b20gZG9tYWluIGJhc2UgcGF0aCBtYXBwaW5nLiBEZXJpdmluZyBoZXJlXG4gICAgLy8gd291bGQgbmVzdCBldmVyeSByZXNvdXJjZSB1bmRlciBhIHBhdGggdGhlIHN0YWdlIGFscmVhZHkgY29uc3VtZWQuXG4gICAgaXQoXCJkb2VzIG5vdCBkZXJpdmUgdGhlIGFwcCdzIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgcmVzb2x2ZUJhc2VQYXRoKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCB1bmRlZmluZWQsIFwiL3Byb2RcIiksXG4gICAgICApLnRvQmVVbmRlZmluZWQoKTtcbiAgICB9KTtcblxuICAgIC8vIFRoZSBzdHJpcHBlZCBwcmVmaXggaXMgcGFydCBvZiB3aGF0IHRoZSBhcHAgZW1pdHMgYnV0IG5ldmVyIHBhcnQgb2YgdGhlXG4gICAgLy8gcmVzb3VyY2UgcGF0aCwgc28gYW4gYXBwIGF0IHRoZSBgcHJvZGAgc3RhZ2UgbmVzdGVkIHVuZGVyIFwiL2Jhc2VcIiBzZXRzXG4gICAgLy8gYmFzZVBhdGg6IFwiL3Byb2QvYmFzZVwiIGFuZCB0aGUgcHJvcCB0byBcIi9iYXNlXCIuXG4gICAgaXQoXCJhY2NlcHRzIGFuIGFwcCBiYXNlUGF0aCB0aGF0IGVuZHMgd2l0aCB0aGUgcHJvcFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlc29sdmVCYXNlUGF0aChOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUywgXCIvYmFzZVwiLCBcIi9wcm9kL2Jhc2VcIiksXG4gICAgICApLnRvQmUoXCJiYXNlXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJvbmx5IGFjY2VwdHMgdGhlIHByb3AgYXMgYSB3aG9sZSB0cmFpbGluZyBwYXRoIHNlZ21lbnRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHJlc29sdmVCYXNlUGF0aChOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUywgXCIvc2VcIiwgXCIvcHJvZC9iYXNlXCIpLFxuICAgICAgKS50b1Rocm93KC9uZXN0cyBldmVyeSBBUEkgR2F0ZXdheSByZXNvdXJjZSB1bmRlciB0aGF0IHBhdGgvKTtcbiAgICAgIC8vIExlYWRpbmcsIG5vdCB0cmFpbGluZzogQVBJIEdhdGV3YXkgc3RyaXBzIHRoZSBzdGFnZSwgc28gdGhlIGFwcCB3b3VsZFxuICAgICAgLy8gZW1pdCBcIi9wcm9kLy4uLlwiIHdoaWxlIHRoZSByZXNvdXJjZXMgbGl2ZSB1bmRlciBcIi9wcm9kL2Jhc2UvLi4uXCIuXG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgcmVzb2x2ZUJhc2VQYXRoKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCBcIi9wcm9kXCIsIFwiL3Byb2QvYmFzZVwiKSxcbiAgICAgICkudG9UaHJvdygvbmVzdHMgZXZlcnkgQVBJIEdhdGV3YXkgcmVzb3VyY2UgdW5kZXIgdGhhdCBwYXRoLyk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgcmV2ZXJzZSBpcyBuZXZlciByaWdodDogdGhlIHByb3AgbmVzdHMgZXZlcnkgcmVzb3VyY2UsIGluY2x1ZGluZyB0aGVcbiAgICAvLyBjYXRjaC1hbGwsIHVuZGVyIGEgcGF0aCB0aGUgYXBwIG5ldmVyIGxpbmtzIHRvLlxuICAgIGl0KFwicmVqZWN0cyB0aGUgcHJvcCBzZXR0aW5nIGEgYmFzZVBhdGggdGhlIGFwcCBkb2Vzbid0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICByZXNvbHZlQmFzZVBhdGgoTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsIFwiL2Jhc2VcIiksXG4gICAgICApLnRvVGhyb3coL25lc3RzIGV2ZXJ5IEFQSSBHYXRld2F5IHJlc291cmNlIHVuZGVyIHRoYXQgcGF0aC8pO1xuICAgIH0pO1xuXG4gICAgaXQoXCJyZWplY3RzIHR3byBkaWZmZXJlbnQgdmFsdWVzXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICByZXNvbHZlQmFzZVBhdGgoTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsIFwiL2FcIiwgXCIvYlwiKSxcbiAgICAgICkudG9UaHJvdygvbmVzdHMgZXZlcnkgQVBJIEdhdGV3YXkgcmVzb3VyY2UgdW5kZXIgdGhhdCBwYXRoLyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKE5leHRqc1R5cGUuUkVHSU9OQUxfQ09OVEFJTkVSUywgKCkgPT4ge1xuICAgIC8vIGJhc2VQYXRoIG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0IGhlcmU6IHRoZSBBTEIgZm9yd2FyZHMgZXZlcnkgcGF0aFxuICAgIC8vIHRvIHRoZSBjb250YWluZXIsIHdoaWNoIHNlcnZlcyBpdHMgb3duIHN0YXRpYyBhc3NldHMuIFNvIGFueSBjb21iaW5hdGlvblxuICAgIC8vIGlzIHZhbGlkLCBhbmQgdGhlIGFwcCdzIGJhc2VQYXRoIGlzIG5ldmVyIGRlcml2ZWQgaW50byB0aGUgYnVja2V0IHByZWZpeC5cbiAgICBpdChcImFjY2VwdHMgYW55IGNvbWJpbmF0aW9uLCBhbHdheXMga2VlcGluZyB0aGUgcHJvcFwiLCAoKSA9PiB7XG4gICAgICBjb25zdCBuZXh0anNUeXBlID0gTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIi9hXCIsIFwiL2JcIikpLnRvQmUoXCJhXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIi9hXCIpKS50b0JlKFwiYVwiKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgdW5kZWZpbmVkLCBcIi9iXCIpKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvYmFzZS1wYXRoLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBNkQ7QUFDN0QscUNBQWlDO0FBQ2pDLHlDQUFpQztBQUNqQyw0Q0FBMEM7QUFDMUMsMkNBTXFCO0FBRXJCLE1BQU0sTUFBTSxHQUFHLENBQUMsc0JBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxzQkFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFFM0UsUUFBUSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsRUFBRTtJQUNqQyxFQUFFLENBQUMsNkRBQTZELEVBQUUsR0FBRyxFQUFFO1FBQ3JFLE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELE1BQU0sQ0FBQyxJQUFBLDZCQUFpQixFQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3JELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFLEdBQUcsRUFBRTtRQUM1RCxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLENBQUMsSUFBQSw2QkFBaUIsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QyxNQUFNLENBQUMsSUFBQSw2QkFBaUIs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RUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IG1rZHRlbXBTeW5jLCBybVN5bmMsIHdyaXRlRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHsgdG1wZGlyIH0gZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgam9pblBhdGgsXG4gIG5vcm1hbGl6ZUJhc2VQYXRoLFxuICBwcmVmaXhXaXRoQmFzZVBhdGgsXG4gIHJlYWROZXh0Q29uZmlnQmFzZVBhdGgsXG4gIHJlc29sdmVCYXNlUGF0aCxcbn0gZnJvbSBcIi4vYmFzZS1wYXRoXCI7XG5cbmNvbnN0IEdMT0JBTCA9IFtOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMsIE5leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlNdO1xuXG5kZXNjcmliZShcIm5vcm1hbGl6ZUJhc2VQYXRoXCIsICgpID0+IHtcbiAgaXQoXCJyZWR1Y2VzIHZhbHVlcyBhZGRyZXNzaW5nIHRoZSBzYW1lIHBhdGggdG8gdGhlIHNhbWUgc2VnbWVudFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUJhc2VQYXRoKFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aChcImJhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgIGV4cGVjdChub3JtYWxpemVCYXNlUGF0aChcIi9iYXNlL1wiKSkudG9CZShcImJhc2VcIik7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUJhc2VQYXRoKFwiLy9iYXNlLy9cIikpLnRvQmUoXCJiYXNlXCIpO1xuICB9KTtcblxuICBpdChcIm1hcHMgdW5kZWZpbmVkIGFuZCBlbXB0eSB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nXCIsICgpID0+IHtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgodW5kZWZpbmVkKSkudG9CZShcIlwiKTtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCJcIikpLnRvQmUoXCJcIik7XG4gICAgZXhwZWN0KG5vcm1hbGl6ZUJhc2VQYXRoKFwiL1wiKSkudG9CZShcIlwiKTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyBpbnRlcmlvciBzbGFzaGVzIG9mIGEgbmVzdGVkIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICBleHBlY3Qobm9ybWFsaXplQmFzZVBhdGgoXCIvdGVhbS9hcHAvXCIpKS50b0JlKFwidGVhbS9hcHBcIik7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiam9pblBhdGhcIiwgKCkgPT4ge1xuICBjb25zdCBvcmlnaW4gPSBcImh0dHBzOi8vZDExMTExMWFiY2RlZjguY2xvdWRmcm9udC5uZXRcIjtcblxuICBpdChcImRyb3BzIGVtcHR5IHBhcnRzXCIsICgpID0+IHtcbiAgICBleHBlY3Qoam9pblBhdGgob3JpZ2luKSkudG9CZShvcmlnaW4pO1xuICAgIGV4cGVjdChqb2luUGF0aChvcmlnaW4sIFwiXCIpKS50b0JlKG9yaWdpbik7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgdW5kZWZpbmVkKSkudG9CZShvcmlnaW4pO1xuICAgIGV4cGVjdChqb2luUGF0aChvcmlnaW4sIFwiL1wiKSkudG9CZShvcmlnaW4pO1xuICAgIGV4cGVjdChqb2luUGF0aChcIlwiLCBcImJhc2VcIiwgdW5kZWZpbmVkLCBcIl9uZXh0L3N0YXRpY1wiKSkudG9CZShcbiAgICAgIFwiYmFzZS9fbmV4dC9zdGF0aWNcIixcbiAgICApO1xuICB9KTtcblxuICBpdChcImpvaW5zIHdpdGggZXhhY3RseSBvbmUgc2xhc2ggcmVnYXJkbGVzcyBvZiBlYWNoIHBhcnQncyBzbGFzaGVzXCIsICgpID0+IHtcbiAgICBleHBlY3Qoam9pblBhdGgob3JpZ2luLCBcIi9iYXNlXCIpKS50b0JlKGAke29yaWdpbn0vYmFzZWApO1xuICAgIGV4cGVjdChqb2luUGF0aChvcmlnaW4sIFwiYmFzZS9cIikpLnRvQmUoYCR7b3JpZ2lufS9iYXNlYCk7XG4gICAgZXhwZWN0KGpvaW5QYXRoKG9yaWdpbiwgXCIvdGVhbS9hcHAvXCIpKS50b0JlKGAke29yaWdpbn0vdGVhbS9hcHBgKTtcbiAgICBleHBlY3Qoam9pblBhdGgoXCIvYmFzZS9cIiwgXCIvX25leHQvc3RhdGljL3trZXl9XCIpKS50b0JlKFxuICAgICAgXCJiYXNlL19uZXh0L3N0YXRpYy97a2V5fVwiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiBldmVyeSBwYXJ0IGlzIGVtcHR5XCIsICgpID0+IHtcbiAgICBleHBlY3Qoam9pblBhdGgoKSkudG9CZShcIlwiKTtcbiAgICBleHBlY3Qoam9pblBhdGgodW5kZWZpbmVkLCBcIlwiLCBcIi9cIikpLnRvQmUoXCJcIik7XG4gIH0pO1xuXG4gIC8vIEhvdyBgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzLnVybGAgYXBwZW5kcyB0aGUgYXBwJ3MgYmFzZVBhdGg6IHRoZSBBTEJcbiAgLy8gZm9yd2FyZHMgZXZlcnkgcGF0aCB0byB0aGUgY29udGFpbmVyIHVuY2hhbmdlZCwgc28gdGhlIGFwcCBvbmx5IGFuc3dlcnNcbiAgLy8gdW5kZXIgaXRzIG93biBiYXNlUGF0aCBhbmQgdGhlIGJhcmUgQUxCIFVSTCB3b3VsZCA0MDQuXG4gIGl0KFwiYXBwZW5kcyBhbiBhcHAgYmFzZVBhdGggdG8gYSBiYXJlIEFMQiBvcmlnaW5cIiwgKCkgPT4ge1xuICAgIGNvbnN0IGFsYiA9IFwiaHR0cDovL215LWFsYi0xMjMudXMtZWFzdC0xLmVsYi5hbWF6b25hd3MuY29tXCI7XG4gICAgZXhwZWN0KGpvaW5QYXRoKGFsYiwgXCJiYXNlXCIpKS50b0JlKGAke2FsYn0vYmFzZWApO1xuICAgIGV4cGVjdChqb2luUGF0aChhbGIsIFwidGVhbS9hcHBcIikpLnRvQmUoYCR7YWxifS90ZWFtL2FwcGApO1xuICAgIC8vIEFuIGFwcCB3aXRoIG5vIGJhc2VQYXRoIGlzIHNlcnZlZCBhdCB0aGUgb3JpZ2luIGl0c2VsZi5cbiAgICBleHBlY3Qoam9pblBhdGgoYWxiLCBcIlwiKSkudG9CZShhbGIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInByZWZpeFdpdGhCYXNlUGF0aFwiLCAoKSA9PiB7XG4gIC8vIFRoZSBoZWFsdGggY2hlY2sgcGF0aCBpcyBoYW5kZWQgdG8gdGhpbmdzIHRoYXQgdGFsayB0byB0aGUgYXBwIGRpcmVjdGx5IChhblxuICAvLyBBTEIgdGFyZ2V0IGdyb3VwLCB0aGUgTGFtYmRhIFdlYiBBZGFwdGVyIHJlYWRpbmVzcyBjaGVjayksIGFuZCB0aGUgYXBwIG9ubHlcbiAgLy8gYW5zd2VycyB1bmRlciBpdHMgYmFzZVBhdGguIFVucHJlZml4ZWQsIGV2ZXJ5IGNoZWNrIDQwNHM6IHRoZSB0YXJnZXQgbmV2ZXJcbiAgLy8gdHVybnMgaGVhbHRoeSwgc28gdGFza3MgYXJlIGtpbGxlZCBvbiB0aGUgaGVhbHRoIGNoZWNrIGludGVydmFsIGFuZCB0aGVcbiAgLy8gZGVwbG95bWVudCByb2xscyBiYWNrLlxuICBpdChcInByZWZpeGVzIGEgaGVhbHRoIGNoZWNrIHBhdGggd2l0aCB0aGUgYXBwJ3MgYmFzZVBhdGhcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChwcmVmaXhXaXRoQmFzZVBhdGgoXCJiYXNlXCIsIFwiL2FwaS9oZWFsdGhcIikpLnRvQmUoXCIvYmFzZS9hcGkvaGVhbHRoXCIpO1xuICAgIGV4cGVjdChwcmVmaXhXaXRoQmFzZVBhdGgoXCIvYmFzZS9cIiwgXCIvYXBpL2hlYWx0aFwiKSkudG9CZShcbiAgICAgIFwiL2Jhc2UvYXBpL2hlYWx0aFwiLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIHRoZSBwYXRoIHVudG91Y2hlZCB3aGVuIHRoZSBhcHAgc2V0cyBubyBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByZWZpeFdpdGhCYXNlUGF0aCh1bmRlZmluZWQsIFwiL2FwaS9oZWFsdGhcIikpLnRvQmUoXCIvYXBpL2hlYWx0aFwiKTtcbiAgICBleHBlY3QocHJlZml4V2l0aEJhc2VQYXRoKFwiXCIsIFwiL2FwaS9oZWFsdGhcIikpLnRvQmUoXCIvYXBpL2hlYWx0aFwiKTtcbiAgICBleHBlY3QocHJlZml4V2l0aEJhc2VQYXRoKFwiL1wiLCBcIi9hcGkvaGVhbHRoXCIpKS50b0JlKFwiL2FwaS9oZWFsdGhcIik7XG4gIH0pO1xuXG4gIGl0KFwiYWx3YXlzIHJldHVybnMgYSBsZWFkaW5nIHNsYXNoLCB3aGF0ZXZlciB0aGUgcGF0aCBjYW1lIHdpdGhcIiwgKCkgPT4ge1xuICAgIC8vIFRoZSBBTEIgaGVhbHRoIGNoZWNrIGFuZCB0aGUgcmVhZGluZXNzIGNoZWNrIFVSTCBib3RoIG5lZWQgYW4gYWJzb2x1dGVcbiAgICAvLyBwYXRoLCBzbyB0aGUgcmVzdWx0IGNhbid0IGNvbWUgYmFjayBiYXJlLiBXaXRob3V0IGEgYmFzZVBhdGggYSBiYXJlIHBhdGhcbiAgICAvLyB1c2VkIHRvIHBhc3Mgc3RyYWlnaHQgdGhyb3VnaCwgd2hpY2ggY29uY2F0ZW5hdGVkIGludG9cbiAgICAvLyBcImh0dHA6Ly8xMjcuMC4wLjE6MzAwMGFwaS9oZWFsdGhcIiBhcyB0aGUgcmVhZGluZXNzIGNoZWNrIFVSTC5cbiAgICBleHBlY3QocHJlZml4V2l0aEJhc2VQYXRoKFwiYmFzZVwiLCBcImFwaS9oZWFsdGhcIikpLnRvQmUoXCIvYmFzZS9hcGkvaGVhbHRoXCIpO1xuICAgIGV4cGVjdChwcmVmaXhXaXRoQmFzZVBhdGgodW5kZWZpbmVkLCBcImFwaS9oZWFsdGhcIikpLnRvQmUoXCIvYXBpL2hlYWx0aFwiKTtcbiAgICBleHBlY3QocHJlZml4V2l0aEJhc2VQYXRoKFwiXCIsIFwiYXBpL2hlYWx0aFwiKSkudG9CZShcIi9hcGkvaGVhbHRoXCIpO1xuICB9KTtcblxuICAvLyBUaGUgcGF0aCBpcyB3aGF0IHRoZSBhcHAgcm91dGVzLCB3aXRob3V0IGJhc2VQYXRoLCBhbmQgaXQgaXMgcHJlZml4ZWRcbiAgLy8gd2hldGhlciBvciBub3QgaXQgYWxyZWFkeSBsb29rcyBwcmVmaXhlZDogYW4gYXBwIGNhbiByb3V0ZSBcIi9iYXNlL2Jhc2UvLi4uXCJcbiAgLy8gbGVnaXRpbWF0ZWx5LCBzbyB0cmVhdGluZyBhIGxlYWRpbmcgXCIvYmFzZVwiIGFzIGFscmVhZHktcHJlZml4ZWQgd291bGQgbWFrZVxuICAvLyB0aGF0IHBhdGggdW5yZWFjaGFibGUgYW5kIGdpdmUgdGhlIHByb3AgdHdvIG1lYW5pbmdzLiBVc2VycyB3aG8gcHJlZml4ZWRcbiAgLy8gYGhlYWx0aENoZWNrUGF0aGAgYnkgaGFuZCB0byB3b3JrIGFyb3VuZCB0aGUgbWlzc2luZyBwcmVmaXggZHJvcCBpdCBvblxuICAvLyB1cGdyYWRlIOKAlCBkb2N1bWVudGVkIGluIGRvY3MvYnJlYWtpbmctY2hhbmdlcy5tZCB1bmRlciAwLjYuMC5cbiAgaXQoXCJwcmVmaXhlcyBhIHBhdGggdGhhdCBhbHJlYWR5IGxvb2tzIHByZWZpeGVkXCIsICgpID0+IHtcbiAgICBleHBlY3QocHJlZml4V2l0aEJhc2VQYXRoKFwiYmFzZVwiLCBcIi9iYXNlL2FwaS9oZWFsdGhcIikpLnRvQmUoXG4gICAgICBcIi9iYXNlL2Jhc2UvYXBpL2hlYWx0aFwiLFxuICAgICk7XG4gIH0pO1xuXG4gIC8vIEEgYHRyYWlsaW5nU2xhc2g6IHRydWVgIGFwcCByZWRpcmVjdHMgXCIvYXBpL2hlYWx0aFwiIHRvIFwiL2FwaS9oZWFsdGgvXCIgd2l0aCBhXG4gIC8vIDMwOCwgd2hpY2ggYW4gQUxCIGhlYWx0aCBjaGVjayBkb2Vzbid0IGNvdW50IGFzIGhlYWx0aHksIHNvIHRoZSBzbGFzaCB0aGVcbiAgLy8gdXNlciB3cm90ZSBoYXMgdG8gc3Vydml2ZS5cbiAgaXQoXCJwcmVzZXJ2ZXMgYSB0cmFpbGluZyBzbGFzaFwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHByZWZpeFdpdGhCYXNlUGF0aChcImJhc2VcIiwgXCIvYXBpL2hlYWx0aC9cIikpLnRvQmUoXG4gICAgICBcIi9iYXNlL2FwaS9oZWFsdGgvXCIsXG4gICAgKTtcbiAgICBleHBlY3QocHJlZml4V2l0aEJhc2VQYXRoKHVuZGVmaW5lZCwgXCIvYXBpL2hlYWx0aC9cIikpLnRvQmUoXCIvYXBpL2hlYWx0aC9cIik7XG4gIH0pO1xuXG4gIGl0KFwiaGFuZGxlcyBhIG5lc3RlZCBiYXNlUGF0aCwgYXMgUkVHSU9OQUxfRlVOQ1RJT05TIGNhbiBwcm9kdWNlXCIsICgpID0+IHtcbiAgICAvLyBBbiBhcHAgYXQgdGhlIGBwcm9kYCBzdGFnZSBuZXN0ZWQgdW5kZXIgXCIvYmFzZVwiIHNldHMgYGJhc2VQYXRoOlxuICAgIC8vIFwiL3Byb2QvYmFzZVwiYCwgYW5kIHRoZSByZWFkaW5lc3MgY2hlY2sgaGl0cyB0aGUgbG9jYWwgc2VydmVyLCBzbyB0aGVcbiAgICAvLyB3aG9sZSBwcmVmaXggaGFzIHRvIGJlIHRoZXJlLlxuICAgIGV4cGVjdChwcmVmaXhXaXRoQmFzZVBhdGgoXCIvcHJvZC9iYXNlXCIsIFwiL2FwaS9oZWFsdGhcIikpLnRvQmUoXG4gICAgICBcIi9wcm9kL2Jhc2UvYXBpL2hlYWx0aFwiLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwicmVhZE5leHRDb25maWdCYXNlUGF0aFwiLCAoKSA9PiB7XG4gIGxldCBkb3ROZXh0UGF0aDogc3RyaW5nO1xuICBsZXQgd2FybjogamVzdC5TcHlJbnN0YW5jZTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBkb3ROZXh0UGF0aCA9IG1rZHRlbXBTeW5jKGpvaW4odG1wZGlyKCksIFwiYmFzZS1wYXRoLVwiKSk7XG4gICAgd2FybiA9IGplc3Quc3B5T24oY29uc29sZSwgXCJ3YXJuXCIpLm1vY2tJbXBsZW1lbnRhdGlvbigoKSA9PiB7fSk7XG4gIH0pO1xuXG4gIGFmdGVyRWFjaCgoKSA9PiB7XG4gICAgd2Fybi5tb2NrUmVzdG9yZSgpO1xuICAgIHJtU3luYyhkb3ROZXh0UGF0aCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9KTtcblxuICBmdW5jdGlvbiB3cml0ZVJlcXVpcmVkU2VydmVyRmlsZXMoY29udGVudHM6IHN0cmluZykge1xuICAgIHdyaXRlRmlsZVN5bmMoam9pbihkb3ROZXh0UGF0aCwgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiKSwgY29udGVudHMpO1xuICB9XG5cbiAgaXQoXCJyZWFkcyB0aGUgYXBwJ3MgYmFzZVBhdGggYW5kIHN0cmlwcyB0aGUgbGVhZGluZyBzbGFzaFwiLCAoKSA9PiB7XG4gICAgd3JpdGVSZXF1aXJlZFNlcnZlckZpbGVzKEpTT04uc3RyaW5naWZ5KHsgY29uZmlnOiB7IGJhc2VQYXRoOiBcIi9wcm9kXCIgfSB9KSk7XG5cbiAgICBleHBlY3QocmVhZE5leHRDb25maWdCYXNlUGF0aChkb3ROZXh0UGF0aCkpLnRvQmUoXCJwcm9kXCIpO1xuICAgIGV4cGVjdCh3YXJuKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYW4gZW1wdHkgc3RyaW5nIHdoZW4gdGhlIGFwcCBzZXRzIG5vIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAvLyBgbmV4dCBidWlsZGAgd3JpdGVzIGJhc2VQYXRoOiBcIlwiIHJhdGhlciB0aGFuIG9taXR0aW5nIGl0LlxuICAgIHdyaXRlUmVxdWlyZWRTZXJ2ZXJGaWxlcyhKU09OLnN0cmluZ2lmeSh7IGNvbmZpZzogeyBiYXNlUGF0aDogXCJcIiB9IH0pKTtcblxuICAgIGV4cGVjdChyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoKGRvdE5leHRQYXRoKSkudG9CZShcIlwiKTtcbiAgICBleHBlY3Qod2Fybikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG5cbiAgLy8gRGVncmFkaW5nIHRvIFwiXCIgaXMgZGVsaWJlcmF0ZSwgYnV0IGl0J3MgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhcHAgdGhhdFxuICAvLyBzZXRzIG5vIGJhc2VQYXRoLCBzbyBpdCBoYXMgdG8gYmUgdmlzaWJsZTogdGhlIEdsb2JhbCBjb25zdHJ1Y3RzIGRlcml2ZVxuICAvLyB0aGVpciBiYXNlUGF0aCBmcm9tIHRoaXMgdmFsdWUgYW5kIHdvdWxkIG90aGVyd2lzZSA0MDQgZXZlcnkgc3RhdGljIGFzc2V0XG4gIC8vIHdpdGggbm90aGluZyBidXQgYSBzaWxlbnQgZmFsbGJhY2sgdG8gZXhwbGFpbiBpdC5cbiAgaXQoXCJ3YXJucyB3aGVuIHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uIGlzIG1pc3NpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoKGRvdE5leHRQYXRoKSkudG9CZShcIlwiKTtcbiAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIpLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwid2FybnMgd2hlbiB0aGUgZmlsZSBpc24ndCB2YWxpZCBKU09OXCIsICgpID0+IHtcbiAgICB3cml0ZVJlcXVpcmVkU2VydmVyRmlsZXMoXCJub3QganNvblwiKTtcblxuICAgIGV4cGVjdChyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoKGRvdE5leHRQYXRoKSkudG9CZShcIlwiKTtcbiAgICBleHBlY3Qod2FybikudG9IYXZlQmVlbkNhbGxlZFdpdGgoXG4gICAgICBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcIkNvdWxkIG5vdCByZWFkIGJhc2VQYXRoXCIpLFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgd2hlbiB0aGUgZmlsZSBoYXMgbm8gY29uZmlnIGtleVwiLCAoKSA9PiB7XG4gICAgd3JpdGVSZXF1aXJlZFNlcnZlckZpbGVzKEpTT04uc3RyaW5naWZ5KHsgZmlsZXM6IFtdIH0pKTtcblxuICAgIGV4cGVjdChyZWFkTmV4dENvbmZpZ0Jhc2VQYXRoKGRvdE5leHRQYXRoKSkudG9CZShcIlwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJyZXNvbHZlQmFzZVBhdGhcIiwgKCkgPT4ge1xuICBkZXNjcmliZS5lYWNoKE9iamVjdC52YWx1ZXMoTmV4dGpzVHlwZSkpKFwiJXNcIiwgKG5leHRqc1R5cGUpID0+IHtcbiAgICBpdChcInJlc29sdmVzIHRvIHVuZGVmaW5lZCB3aGVuIGJvdGggYXJlIHVuc2V0XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSkpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCJcIiwgXCJcIikpLnRvQmVVbmRlZmluZWQoKTtcbiAgICAgIC8vIE5vcm1hbGl6ZXMgdG8gZW1wdHksIHNvIGl0J3MgdGhlIHNhbWUgYXMgdW5zZXQgcmF0aGVyIHRoYW4gYSBwcmVmaXguXG4gICAgICBleHBlY3QocmVzb2x2ZUJhc2VQYXRoKG5leHRqc1R5cGUsIFwiL1wiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gT25lIHNoYXBlIG91dCwgd2hhdGV2ZXIgc2hhcGUgY2FtZSBpbjogY29uc3VtZXJzIHRoYXQgbmVlZCBhIGxlYWRpbmdcbiAgICAvLyBzbGFzaCAob25seSBgTmV4dGpzRGlzdHJpYnV0aW9uYCdzIHBhdGggcGF0dGVybnMpIGFkZCB0aGVpciBvd24sIHNvXG4gICAgLy8gbm90aGluZyBkb3duc3RyZWFtIGhhcyB0byByZS1ub3JtYWxpemUuXG4gICAgaXQoXCJub3JtYWxpemVzIHRoZSBwcm9wIHdoZW4gaXQgbWF0Y2hlcyB0aGUgYXBwXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvYmFzZVwiLCBcIi9iYXNlXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCJiYXNlXCIsIFwiL2Jhc2VcIikpLnRvQmUoXCJiYXNlXCIpO1xuICAgICAgZXhwZWN0KHJlc29sdmVCYXNlUGF0aChuZXh0anNUeXBlLCBcIi9iYXNlL1wiLCBcIi9iYXNlXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCJiYXNlLy9cIiwgXCIvYmFzZVwiKSkudG9CZShcImJhc2VcIik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlLmVhY2goR0xPQkFMKShcIiVzXCIsIChuZXh0anNUeXBlKSA9PiB7XG4gICAgLy8gQ2xvdWRGcm9udCB1c2VzIHRoZSByZXF1ZXN0IHBhdGggdmVyYmF0aW0gYXMgdGhlIFMzIG9iamVjdCBrZXksIHNvIHRoZVxuICAgIC8vIHByb3AgaGFzIHRvIGJlIHRoZSBwcmVmaXggdGhlIGFwcCBlbWl0cyDigJQgdGhlcmUncyBleGFjdGx5IG9uZSB2YWxpZCB2YWx1ZSxcbiAgICAvLyB3aGljaCBtYWtlcyB0aGUgYXBwJ3MgY29uZmlnIHRoZSBzb3VyY2Ugb2YgdHJ1dGguXG4gICAgaXQoXCJkZXJpdmVzIHRoZSBwcm9wIGZyb20gdGhlIGFwcCdzIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgdW5kZWZpbmVkLCBcIi9iYXNlXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCJcIiwgXCJiYXNlXCIpKS50b0JlKFwiYmFzZVwiKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgdW5kZWZpbmVkLCBcIi90ZWFtL2FwcC9cIikpLnRvQmUoXG4gICAgICAgIFwidGVhbS9hcHBcIixcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdChcInJlamVjdHMgdGhlIHByb3Agc2V0dGluZyBhIGJhc2VQYXRoIHRoZSBhcHAgZG9lc24ndFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gcmVzb2x2ZUJhc2VQYXRoKG5leHRqc1R5cGUsIFwiL2Jhc2VcIikpLnRvVGhyb3coXG4gICAgICAgIC9DbG91ZEZyb250IHNlcnZlcyBzdGF0aWMgYXNzZXRzIHN0cmFpZ2h0IGZyb20gUzMvLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVqZWN0cyB0d28gZGlmZmVyZW50IHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT4gcmVzb2x2ZUJhc2VQYXRoKG5leHRqc1R5cGUsIFwiL2FcIiwgXCIvYlwiKSkudG9UaHJvdyhcbiAgICAgICAgJ3Byb3AgaXMgXCIvYVwiIGJ1dCB5b3VyIE5leHQuanMgYXBwXFwncyBjb25maWcgc2V0cyBgYmFzZVBhdGhgIHRvIFwiL2JcIicsXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUywgKCkgPT4ge1xuICAgIC8vIEFQSSBHYXRld2F5IHN0cmlwcyB0aGUgc3RhZ2UgYmVmb3JlIG1hdGNoaW5nIHJlc291cmNlcywgc28gYW4gYXBwIHNlcnZlZFxuICAgIC8vIGF0IHRoZSBkZWZhdWx0IGBwcm9kYCBzdGFnZSBzZXRzIGJhc2VQYXRoOiBcIi9wcm9kXCIgYW5kIGxlYXZlcyB0aGUgcHJvcFxuICAgIC8vIHVuc2V0LiBTYW1lIHNoYXBlIGFzIGEgY3VzdG9tIGRvbWFpbiBiYXNlIHBhdGggbWFwcGluZy4gRGVyaXZpbmcgaGVyZVxuICAgIC8vIHdvdWxkIG5lc3QgZXZlcnkgcmVzb3VyY2UgdW5kZXIgYSBwYXRoIHRoZSBzdGFnZSBhbHJlYWR5IGNvbnN1bWVkLlxuICAgIGl0KFwiZG9lcyBub3QgZGVyaXZlIHRoZSBhcHAncyBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlc29sdmVCYXNlUGF0aChOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUywgdW5kZWZpbmVkLCBcIi9wcm9kXCIpLFxuICAgICAgKS50b0JlVW5kZWZpbmVkKCk7XG4gICAgfSk7XG5cbiAgICAvLyBUaGUgc3RyaXBwZWQgcHJlZml4IGlzIHBhcnQgb2Ygd2hhdCB0aGUgYXBwIGVtaXRzIGJ1dCBuZXZlciBwYXJ0IG9mIHRoZVxuICAgIC8vIHJlc291cmNlIHBhdGgsIHNvIGFuIGFwcCBhdCB0aGUgYHByb2RgIHN0YWdlIG5lc3RlZCB1bmRlciBcIi9iYXNlXCIgc2V0c1xuICAgIC8vIGJhc2VQYXRoOiBcIi9wcm9kL2Jhc2VcIiBhbmQgdGhlIHByb3AgdG8gXCIvYmFzZVwiLlxuICAgIGl0KFwiYWNjZXB0cyBhbiBhcHAgYmFzZVBhdGggdGhhdCBlbmRzIHdpdGggdGhlIHByb3BcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KFxuICAgICAgICByZXNvbHZlQmFzZVBhdGgoTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsIFwiL2Jhc2VcIiwgXCIvcHJvZC9iYXNlXCIpLFxuICAgICAgKS50b0JlKFwiYmFzZVwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwib25seSBhY2NlcHRzIHRoZSBwcm9wIGFzIGEgd2hvbGUgdHJhaWxpbmcgcGF0aCBzZWdtZW50XCIsICgpID0+IHtcbiAgICAgIGV4cGVjdCgoKSA9PlxuICAgICAgICByZXNvbHZlQmFzZVBhdGgoTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMsIFwiL3NlXCIsIFwiL3Byb2QvYmFzZVwiKSxcbiAgICAgICkudG9UaHJvdygvbmVzdHMgZXZlcnkgQVBJIEdhdGV3YXkgcmVzb3VyY2UgdW5kZXIgdGhhdCBwYXRoLyk7XG4gICAgICAvLyBMZWFkaW5nLCBub3QgdHJhaWxpbmc6IEFQSSBHYXRld2F5IHN0cmlwcyB0aGUgc3RhZ2UsIHNvIHRoZSBhcHAgd291bGRcbiAgICAgIC8vIGVtaXQgXCIvcHJvZC8uLi5cIiB3aGlsZSB0aGUgcmVzb3VyY2VzIGxpdmUgdW5kZXIgXCIvcHJvZC9iYXNlLy4uLlwiLlxuICAgICAgZXhwZWN0KCgpID0+XG4gICAgICAgIHJlc29sdmVCYXNlUGF0aChOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUywgXCIvcHJvZFwiLCBcIi9wcm9kL2Jhc2VcIiksXG4gICAgICApLnRvVGhyb3coL25lc3RzIGV2ZXJ5IEFQSSBHYXRld2F5IHJlc291cmNlIHVuZGVyIHRoYXQgcGF0aC8pO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHJldmVyc2UgaXMgbmV2ZXIgcmlnaHQ6IHRoZSBwcm9wIG5lc3RzIGV2ZXJ5IHJlc291cmNlLCBpbmNsdWRpbmcgdGhlXG4gICAgLy8gY2F0Y2gtYWxsLCB1bmRlciBhIHBhdGggdGhlIGFwcCBuZXZlciBsaW5rcyB0by5cbiAgICBpdChcInJlamVjdHMgdGhlIHByb3Agc2V0dGluZyBhIGJhc2VQYXRoIHRoZSBhcHAgZG9lc24ndFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgcmVzb2x2ZUJhc2VQYXRoKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCBcIi9iYXNlXCIpLFxuICAgICAgKS50b1Rocm93KC9uZXN0cyBldmVyeSBBUEkgR2F0ZXdheSByZXNvdXJjZSB1bmRlciB0aGF0IHBhdGgvKTtcbiAgICB9KTtcblxuICAgIGl0KFwicmVqZWN0cyB0d28gZGlmZmVyZW50IHZhbHVlc1wiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoKCkgPT5cbiAgICAgICAgcmVzb2x2ZUJhc2VQYXRoKE5leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TLCBcIi9hXCIsIFwiL2JcIiksXG4gICAgICApLnRvVGhyb3coL25lc3RzIGV2ZXJ5IEFQSSBHYXRld2F5IHJlc291cmNlIHVuZGVyIHRoYXQgcGF0aC8pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZShOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlMsICgpID0+IHtcbiAgICAvLyBiYXNlUGF0aCBvbmx5IG5hbWVzcGFjZXMgdGhlIFMzIGJ1Y2tldCBoZXJlOiB0aGUgQUxCIGZvcndhcmRzIGV2ZXJ5IHBhdGhcbiAgICAvLyB0byB0aGUgY29udGFpbmVyLCB3aGljaCBzZXJ2ZXMgaXRzIG93biBzdGF0aWMgYXNzZXRzLiBTbyBhbnkgY29tYmluYXRpb25cbiAgICAvLyBpcyB2YWxpZCwgYW5kIHRoZSBhcHAncyBiYXNlUGF0aCBpcyBuZXZlciBkZXJpdmVkIGludG8gdGhlIGJ1Y2tldCBwcmVmaXguXG4gICAgaXQoXCJhY2NlcHRzIGFueSBjb21iaW5hdGlvbiwgYWx3YXlzIGtlZXBpbmcgdGhlIHByb3BcIiwgKCkgPT4ge1xuICAgICAgY29uc3QgbmV4dGpzVHlwZSA9IE5leHRqc1R5cGUuUkVHSU9OQUxfQ09OVEFJTkVSUztcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvYVwiLCBcIi9iXCIpKS50b0JlKFwiYVwiKTtcbiAgICAgIGV4cGVjdChyZXNvbHZlQmFzZVBhdGgobmV4dGpzVHlwZSwgXCIvYVwiKSkudG9CZShcImFcIik7XG4gICAgICBleHBlY3QocmVzb2x2ZUJhc2VQYXRoKG5leHRqc1R5cGUsIHVuZGVmaW5lZCwgXCIvYlwiKSkudG9CZVVuZGVmaW5lZCgpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|