cdk-nextjs 0.7.7 → 0.7.9
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 +2 -2
- package/docs/adapter-runtime.md +1 -1
- package/docs/harness-coverage.md +153 -73
- package/lib/adapter/adapter.mjs +12 -3
- package/lib/adapter/aws-cache-store.d.ts +7 -0
- package/lib/adapter/aws-cache-store.js +12 -1
- package/lib/adapter/aws-cache-store.test.js +32 -1
- package/lib/adapter/cache-handler.d.ts +5 -3
- package/lib/adapter/cache-handler.js +16 -10
- package/lib/adapter/cache-handler.mjs +103 -26
- package/lib/adapter/cache-handler.test.js +44 -1
- package/lib/adapter/cache-utils.d.ts +22 -0
- package/lib/adapter/cache-utils.js +44 -1
- package/lib/adapter/function-groups.js +17 -4
- package/lib/adapter/function-groups.test.js +33 -1
- package/lib/adapter/memory-cache-handler.d.ts +5 -1
- package/lib/adapter/memory-cache-handler.js +6 -2
- package/lib/adapter/s3-cache-handler.d.ts +12 -1
- package/lib/adapter/s3-cache-handler.js +30 -8
- package/lib/adapter/s3-cache-handler.test.js +84 -2
- package/lib/adapter/use-cache-common.d.ts +13 -0
- package/lib/adapter/use-cache-common.js +22 -6
- package/lib/adapter/use-cache-common.test.js +37 -1
- package/lib/adapter/use-cache-default-handler.mjs +33 -10
- package/lib/adapter/use-cache-remote-handler.mjs +33 -12
- package/lib/nextjs-api.js +1 -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-distribution.js +1 -1
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/root-constructs/nextjs-base-construct.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.js +1 -1
- package/lib/root-constructs/nextjs-global-functions.js +1 -1
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +1 -1
- package/lib/runtime/core.js +3 -1
- package/lib/runtime/image-utils.d.ts +8 -9
- package/lib/runtime/image-utils.js +16 -1
- package/lib/runtime/image-utils.test.js +13 -1
- package/lib/runtime/image.js +9 -3
- package/lib/runtime/lambda.mjs +50 -15
- package/lib/runtime/server.mjs +50 -15
- package/lib/runtime/tag-manifest.d.ts +25 -0
- package/lib/runtime/tag-manifest.js +37 -2
- package/lib/runtime/tag-manifest.test.js +27 -1
- package/package.json +3 -3
- package/scripts/e2e-deploy.sh +7 -2
- package/scripts/e2e-harness/README.md +72 -35
- package/scripts/e2e-harness/screen.mjs +148 -7
- package/scripts/playwright-install-deps.sh +40 -0
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* S3 fetching and error mapping for `/_next/image`, split out from
|
|
3
|
-
* {@link ./image.ts} so it is unit-testable without `next` present.
|
|
4
|
-
*
|
|
5
|
-
* The one value from `next` that this file needs is passed in rather than
|
|
6
|
-
* imported: `next` is external to the shell bundles, so a static `import` here
|
|
7
|
-
* would be hoisted into the bundle where it cannot resolve. `image.ts` requires
|
|
8
|
-
* it through `./next-modules` instead.
|
|
9
|
-
*/
|
|
10
1
|
import { S3Client } from "@aws-sdk/client-s3";
|
|
11
2
|
/** Where the app is served versus where its assets were uploaded. */
|
|
12
3
|
export interface S3AssetLocation {
|
|
@@ -64,6 +55,14 @@ export declare function fetchFromS3(s3: S3Client, bucket: string, url: string, l
|
|
|
64
55
|
export declare class ImageTooLargeError extends Error {
|
|
65
56
|
constructor(key: string);
|
|
66
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* `extractEtag` from next's image optimizer, restated: next 16.4 moved it out
|
|
60
|
+
* of `next/dist/server/image-optimizer.js` (into `image-optimizer/extract-etag`),
|
|
61
|
+
* so the old export is `undefined` there and the new path is absent before it.
|
|
62
|
+
* The upstream etag is base64url-encoded, because it is weak-signed and ends up
|
|
63
|
+
* in a cache entry's name; without one the etag is the image's own hash.
|
|
64
|
+
*/
|
|
65
|
+
export declare function extractEtag(etag: string | null | undefined, imageBuffer: Buffer): string;
|
|
67
66
|
/** `ImageError` from `next/dist/server/image-optimizer.js`. */
|
|
68
67
|
export type ImageErrorClass = (typeof import("next/dist/server/image-optimizer.js"))["ImageError"];
|
|
69
68
|
/**
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ImageTooLargeError = void 0;
|
|
4
4
|
exports.fetchFromS3 = fetchFromS3;
|
|
5
|
+
exports.extractEtag = extractEtag;
|
|
5
6
|
exports.resolveErrorResponse = resolveErrorResponse;
|
|
6
7
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
7
8
|
/**
|
|
@@ -13,6 +14,7 @@ exports.resolveErrorResponse = resolveErrorResponse;
|
|
|
13
14
|
* would be hoisted into the bundle where it cannot resolve. `image.ts` requires
|
|
14
15
|
* it through `./next-modules` instead.
|
|
15
16
|
*/
|
|
17
|
+
const node_crypto_1 = require("node:crypto");
|
|
16
18
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
17
19
|
const util_1 = require("./util");
|
|
18
20
|
/**
|
|
@@ -108,6 +110,19 @@ class ImageTooLargeError extends Error {
|
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
exports.ImageTooLargeError = ImageTooLargeError;
|
|
113
|
+
/**
|
|
114
|
+
* `extractEtag` from next's image optimizer, restated: next 16.4 moved it out
|
|
115
|
+
* of `next/dist/server/image-optimizer.js` (into `image-optimizer/extract-etag`),
|
|
116
|
+
* so the old export is `undefined` there and the new path is absent before it.
|
|
117
|
+
* The upstream etag is base64url-encoded, because it is weak-signed and ends up
|
|
118
|
+
* in a cache entry's name; without one the etag is the image's own hash.
|
|
119
|
+
*/
|
|
120
|
+
function extractEtag(etag, imageBuffer) {
|
|
121
|
+
if (etag) {
|
|
122
|
+
return Buffer.from(etag).toString("base64url");
|
|
123
|
+
}
|
|
124
|
+
return (0, node_crypto_1.createHash)("sha256").update(imageBuffer).digest("base64url");
|
|
125
|
+
}
|
|
111
126
|
/**
|
|
112
127
|
* Maps an error thrown while processing an image request to the HTTP
|
|
113
128
|
* status/message it should produce, preserving the status Next.js's own
|
|
@@ -126,4 +141,4 @@ function resolveErrorResponse(error, ImageError) {
|
|
|
126
141
|
}
|
|
127
142
|
return { statusCode: 500, message: "Internal Server Error" };
|
|
128
143
|
}
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE2REEsa0NBMkRDO0FBaUNELG9EQWlCQztBQTFLRCxzREFBc0Q7QUFDdEQ7Ozs7Ozs7O0dBUUc7QUFDSCxrREFBZ0U7QUFDaEUsaUNBQXVEO0FBMEJ2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUMvQixFQUFZLEVBQ1osTUFBYyxFQUNkLEdBQVcsRUFDWCxRQUF5QixFQUN6QixXQUFtQjtJQUVuQixNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUM1Qyx5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCw2RUFBNkU7SUFDN0UsK0JBQStCO0lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUEsaUJBQVUsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxJ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LHVCQUF1QixFQUFFLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyoqXG4gKiBTMyBmZXRjaGluZyBhbmQgZXJyb3IgbWFwcGluZyBmb3IgYC9fbmV4dC9pbWFnZWAsIHNwbGl0IG91dCBmcm9tXG4gKiB7QGxpbmsgLi9pbWFnZS50c30gc28gaXQgaXMgdW5pdC10ZXN0YWJsZSB3aXRob3V0IGBuZXh0YCBwcmVzZW50LlxuICpcbiAqIFRoZSBvbmUgdmFsdWUgZnJvbSBgbmV4dGAgdGhhdCB0aGlzIGZpbGUgbmVlZHMgaXMgcGFzc2VkIGluIHJhdGhlciB0aGFuXG4gKiBpbXBvcnRlZDogYG5leHRgIGlzIGV4dGVybmFsIHRvIHRoZSBzaGVsbCBidW5kbGVzLCBzbyBhIHN0YXRpYyBgaW1wb3J0YCBoZXJlXG4gKiB3b3VsZCBiZSBob2lzdGVkIGludG8gdGhlIGJ1bmRsZSB3aGVyZSBpdCBjYW5ub3QgcmVzb2x2ZS4gYGltYWdlLnRzYCByZXF1aXJlc1xuICogaXQgdGhyb3VnaCBgLi9uZXh0LW1vZHVsZXNgIGluc3RlYWQuXG4gKi9cbmltcG9ydCB7IEdldE9iamVjdENvbW1hbmQsIFMzQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgc2FmZURlY29kZSwgd2l0aG91dFBhdGhQcmVmaXggfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKiBXaGVyZSB0aGUgYXBwIGlzIHNlcnZlZCB2ZXJzdXMgd2hlcmUgaXRzIGFzc2V0cyB3ZXJlIHVwbG9hZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0Fzc2V0TG9jYXRpb24ge1xuICAvKipcbiAgICogVGhlIGFwcCdzIG93biBgYmFzZVBhdGhgIOKAlCB0aGUgcHJlZml4IG9mIHRoZSAqVVJMKiBpdCBpcyBzZXJ2ZWQgYXQuIE9ubHlcbiAgICogc3RyaXBwZWQgZnJvbSB0aGUgaHJlZiwgbmV2ZXIgdXNlZCB0byBidWlsZCBhIGtleTogb24gdGhlIEFQSSBHYXRld2F5XG4gICAqIGRlcGxveW1lbnQgdHlwZXMgdGhpcyBpcyB0aGUgc3RhZ2UgbmFtZSwgd2hpY2ggbmV2ZXIgYXBwZWFycyBpbiBTMy5cbiAgICovXG4gIHJlYWRvbmx5IHVybEJhc2VQYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGA6IHRoZSBTMyBrZXkgcHJlZml4IHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZFxuICAgKiB1bmRlciwgd2l0aG91dCBhIGxlYWRpbmcgc2xhc2guIEVtcHR5IGZvciBhIGJ1Y2tldC1yb290IGRlcGxveW1lbnQuXG4gICAqL1xuICByZWFkb25seSBrZXlQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhcHAncyBgYXNzZXRQcmVmaXhgLCB3aGVuIGl0IGlzIGEgcGF0aCAoYC9jZG5gKS4gTmV4dC5qcyBwdXRzIGl0IGluXG4gICAqIGZyb250IG9mIGAvX25leHQvYCBpbiBwbGFjZSBvZiBgYmFzZVBhdGhgLCBzbyBhIHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2Unc1xuICAgKiBocmVmIGlzIGAvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS/igKZgLCBhbmQgYG5leHQgc3RhcnRgIHN0cmlwcyBpdCBhZ2FpbiB3aGVuXG4gICAqIGl0IHNlcnZlcyB0aGUgZmlsZS4gQW4gYWJzb2x1dGUgYGFzc2V0UHJlZml4YCBtYWtlcyB0aGUgaHJlZiBhYnNvbHV0ZSwgd2hpY2hcbiAgICogbmV2ZXIgcmVhY2hlcyBoZXJlLlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0UHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYSBub24tYWJzb2x1dGUgKGxvY2FsKSBpbWFnZSByZWZlcmVuY2VkIGJ5IGFuIGA8SW1hZ2U+YCBmcm9tIFMzLlxuICpcbiAqIGB1cmxgIGlzIGluY29uc2lzdGVudCBhYm91dCB0aGUgYXBwJ3MgYGJhc2VQYXRoYDogbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgaXRcbiAqIGludG8gdGhlIGhyZWYgZm9yIHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2VzLCB3aGlsZSBwbGFpbiBzdHJpbmcgcGF0aHMgYXJlXG4gKiBwYXNzZWQgdGhyb3VnaCBhcyBsaXRlcmFsbHkgd3JpdHRlbiBieSB0aGUgYXBwLiBTbyBpdCBpcyBzdHJpcHBlZCB3aGVuIHByZXNlbnQsXG4gKiBsZWF2aW5nIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYXNzZXQgcm9vdCwgYW5kIHRoZSBidWNrZXQncyBvd24ga2V5IHByZWZpeCBpc1xuICogYXBwbGllZCB0byB0aGF0LiBEZXJpdmluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBpbnN0ZWFkIGlzIHdyb25nIHdoZW5ldmVyIHRoZVxuICogdHdvIGRpZmZlciwgd2hpY2ggdGhleSBkbyBmb3IgZXZlcnkgQVBJIEdhdGV3YXkgZGVwbG95bWVudC5cbiAqXG4gKiBUaGUga2V5IGlzIHBlcmNlbnQtZGVjb2RlZCwgYmVjYXVzZSBhbiBTMyBrZXkgaXMgdGhlIGZpbGUncyByZWFsIG5hbWUgd2hpbGVcbiAqIGB1cmxgIGlzIGEgVVJMIHBhdGguIGBwdWJsaWMvaGVsbG8gd29ybGQuanBnYCBhcnJpdmVzIGhlcmUgYXNcbiAqIGAvaGVsbG8lMjB3b3JsZC5qcGdgIOKAlCB0aGUgYHVybGAgcXVlcnkgdmFsdWUgaXMgZG91YmxlLWVuY29kZWQsIHNvIGRlY29kaW5nIHRoZVxuICogcXVlcnkgc3RyaW5nIGxlYXZlcyBvbmUgbGF5ZXIg4oCUIGFuZCBpdHMgb2JqZWN0IGtleSBpcyBgaGVsbG8gd29ybGQuanBnYC5cbiAqIE5leHQuanMncyBvd24gYGZldGNoSW50ZXJuYWxJbWFnZWAgZ2V0cyB0aGUgZGVjb2RlIGZvciBmcmVlLCBzaW5jZSBpdCBtYWtlcyBhblxuICogSFRUUCBzdWJyZXF1ZXN0IGFuZCBpdHMgc3RhdGljIGZpbGUgc2VydmVyIHJlc29sdmVzIHRoZSBwYXRoIGFnYWluc3QgdGhlXG4gKiBmaWxlc3lzdGVtOyBza2lwcGluZyBpdCBoZXJlIDQwMCdkIHRoYXQgZmlsZVxuICogKGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCkuIFVuaWNvZGUgbmVlZHMgbm90aGluZzogYMOkw7bDvMWhxI3FmcOtLnBuZ2Agc3Vydml2ZXNcbiAqIHRoZSBxdWVyeSBkZWNvZGUgYXMgaXRzZWxmIGFuZCBpcyBhbHJlYWR5IHRoZSBvYmplY3QncyBuYW1lLlxuICpcbiAqIFRocm93cyB7QGxpbmsgSW1hZ2VUb29MYXJnZUVycm9yfSByYXRoZXIgdGhhbiByZWFkIHBhc3QgYG1heGltdW1Cb2R5YFxuICogKGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWApLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlc1xuICogdG9vOiBhIGxhcmdlIGBwdWJsaWMvYCBmaWxlIHdvdWxkIG90aGVyd2lzZSBiZSByZWFkIGludG8gbWVtb3J5IHdob2xlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hGcm9tUzMoXG4gIHMzOiBTM0NsaWVudCxcbiAgYnVja2V0OiBzdHJpbmcsXG4gIHVybDogc3RyaW5nLFxuICBsb2NhdGlvbjogUzNBc3NldExvY2F0aW9uLFxuICBtYXhpbXVtQm9keTogbnVtYmVyLFxuKTogUHJvbWlzZTx7IGJ1ZmZlcjogQnVmZmVyOyBjb250ZW50VHlwZTogc3RyaW5nIHwgbnVsbDsgZXRhZzogc3RyaW5nIH0+IHtcbiAgY29uc3QgeyB1cmxCYXNlUGF0aCwga2V5UHJlZml4IH0gPSBsb2NhdGlvbjtcbiAgLy8gVGhlIGtleSBpcyB0aGUgcGF0aCBhbG9uZS4gYC9sb2dvLnBuZz92PTJgIGlzIGEgY2FjaGUtYnVzdGVyIG9uIGEgZmlsZVxuICAvLyBuYW1lZCBgbG9nby5wbmdgLCBhbmQgYG5leHQgc3RhcnRgIHRyZWF0cyBpdCBhcyBvbmU6IGBmZXRjaEludGVybmFsSW1hZ2VgXG4gIC8vIHJvdXRlcyB0aGUgaHJlZiBhcyBhIHJlcXVlc3QsIHdob3NlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGVcbiAgLy8gc3RhdGljIGZpbGUgbG9va3VwLiBMZWZ0IG9uLCB0aGV5IGJlY2FtZSBwYXJ0IG9mIHRoZSBrZXksIHdoaWNoIG1pc3NlZC5cbiAgLy8gQ3V0IGJlZm9yZSBkZWNvZGluZywgc28gYSBgP2AgdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lIChgJTNGYCkgc3Vydml2ZXMuXG4gIGNvbnN0IHBhdGggPSB3aXRob3V0QXNzZXRQcmVmaXgodXJsLnNwbGl0KC9bPyNdLywgMSlbMF0sIGxvY2F0aW9uKTtcbiAgLy8gTWF0Y2hpbmcgb24gYSBwYXRoIGJvdW5kYXJ5IGtlZXBzIGEgc2libGluZyBsaWtlIFwiL2Jhc2VtZW50L2xvZ28ucG5nXCIgZnJvbVxuICAvLyBiZWluZyB0cmVhdGVkIGFzIGJhc2VQYXRoIFwiL2Jhc2VcIiBwbHVzIFwibWVudC9sb2dvLnBuZ1wiLiBJdCdzIHN0aWxsXG4gIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGBwdWJsaWMvYmFzZS9gIGRpcmVjdG9yeSwgd2hpY2ggbG9zZXM7IHRoYXQnc1xuICAvLyB0aGUgcmlnaHQgdHJhZGUsIHNpbmNlIGV2ZXJ5IHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2UgY2FycmllcyB0aGUgcHJlZml4XG4gIC8vIGFuZCB0aGUgYWx0ZXJuYXRpdmUgY29zdHMgYW4gUzMgcm91bmQgdHJpcCBwZXIgcmVxdWVzdCB0byBkZXRlY3QgaXQuXG4gIGNvbnN0IGFzc2V0UGF0aCA9IHdpdGhvdXRQYXRoUHJlZml4KHBhdGgsIHVybEJhc2VQYXRoKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICBjb25zdCBwcmVmaXggPSBrZXlQcmVmaXgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIik7XG4gIC8vIEEgbWFsZm9ybWVkIGVuY29kaW5nIHRoYXQgaXNuJ3QgYSBsaXRlcmFsIGAlYCBqdXN0IG1pc3NlcyB0aGUga2V5IGFuZCBnZXRzXG4gIC8vIHRoZSA0MDAgYW4gYWJzZW50IGZpbGUgZ2V0cy5cbiAgY29uc3QgZGVjb2RlZCA9IHNhZmVEZWNvZGUoYXNzZXRQYXRoKTtcbiAgY29uc3Qga2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fS8ke2RlY29kZWR9YCA6IGRlY29kZWQ7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5zZW5kKFxuICAgIG5ldyBHZXRPYmplY3RDb21tYW5kKHtcbiAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgS2V5OiBrZXksXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgYm9keSA9IHJlc3BvbnNlLkJvZHk7XG4gIGlmICghYm9keSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgcmVzcG9uc2UgZnJvbSBTMyBmb3Iga2V5OiAke2tleX1gKTtcbiAgfVxuXG4gIGlmICgocmVzcG9uc2UuQ29udGVudExlbmd0aCA/PyAwKSA+IG1heGltdW1Cb2R5KSB7XG4gICAgKGJvZHkgYXMgeyBkZXN0cm95PzogKCkgPT4gdm9pZCB9KS5kZXN0cm95Py4oKTtcbiAgICB0aHJvdyBuZXcgSW1hZ2VUb29MYXJnZUVycm9yKGtleSk7XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBsZXQgc2l6ZSA9IDA7XG4gIC8vIENvdW50ZWQgYXMgd2VsbCwgZm9yIGFuIG9iamVjdCB3aXRob3V0IGEgYENvbnRlbnRMZW5ndGhgLiBUaHJvd2luZyBvdXQgb2ZcbiAgLy8gdGhlIGxvb3AgZGVzdHJveXMgdGhlIHN0cmVhbS5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5IGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pIHtcbiAgICBzaXplICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgaWYgKHNpemUgPiBtYXhpbXVtQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEltYWdlVG9vTGFyZ2VFcnJvcihrZXkpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBidWZmZXI6IEJ1ZmZlci5jb25jYXQoY2h1bmtzKSxcbiAgICBjb250ZW50VHlwZTogcmVzcG9uc2UuQ29udGVudFR5cGUgfHwgbnVsbCxcbiAgICBldGFnOiByZXNwb25zZS5FVGFnIHx8IFwiXCIsXG4gIH07XG59XG5cbi8qKlxuICogYC9jZG4vX25leHQvc3RhdGljL21lZGlhL2xvZ28ucG5nYCDihpIgYC9fbmV4dC9zdGF0aWMvbWVkaWEvbG9nby5wbmdgLCBmb3IgYVxuICogcGF0aCBgYXNzZXRQcmVmaXhgIG9mIGAvY2RuYDogb25seSBpbiBmcm9udCBvZiBgL19uZXh0L2AsIHRoZSBvbmUgcGxhY2VcbiAqIE5leHQuanMgcHV0cyBpdC5cbiAqL1xuZnVuY3Rpb24gd2l0aG91dEFzc2V0UHJlZml4KHBhdGg6IHN0cmluZywgbG9jYXRpb246IFMzQXNzZXRMb2NhdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IGFzc2V0UHJlZml4ID0gbG9jYXRpb24uYXNzZXRQcmVmaXg/LnJlcGxhY2UoL1xcLyskLywgXCJcIikgPz8gXCJcIjtcbiAgaWYgKCFhc3NldFByZWZpeC5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIHBhdGg7XG4gIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoYCR7YXNzZXRQcmVmaXh9L19uZXh0L2ApXG4gICAgPyBwYXRoLnNsaWNlKGFzc2V0UHJlZml4Lmxlbmd0aClcbiAgICA6IHBhdGg7XG59XG5cbi8qKiBBIHNvdXJjZSBvdmVyIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWA7IHNlZSB7QGxpbmsgZmV0Y2hGcm9tUzN9LiAqL1xuZXhwb3J0IGNsYXNzIEltYWdlVG9vTGFyZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFMzIG9iamVjdCAke2tleX0gaXMgb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWApO1xuICAgIHRoaXMubmFtZSA9IFwiSW1hZ2VUb29MYXJnZUVycm9yXCI7XG4gIH1cbn1cblxuLyoqIGBJbWFnZUVycm9yYCBmcm9tIGBuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc2AuICovXG5leHBvcnQgdHlwZSBJbWFnZUVycm9yQ2xhc3MgPVxuICAodHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIpKVtcIkltYWdlRXJyb3JcIl07XG5cbi8qKlxuICogTWFwcyBhbiBlcnJvciB0aHJvd24gd2hpbGUgcHJvY2Vzc2luZyBhbiBpbWFnZSByZXF1ZXN0IHRvIHRoZSBIVFRQXG4gKiBzdGF0dXMvbWVzc2FnZSBpdCBzaG91bGQgcHJvZHVjZSwgcHJlc2VydmluZyB0aGUgc3RhdHVzIE5leHQuanMncyBvd25cbiAqIGBJbWFnZUVycm9yYC9gZmV0Y2hFeHRlcm5hbEltYWdlYCBhdHRhY2guIEEgc291cmNlIG92ZXJcbiAqIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWAgaXMgdGhlIDQxMyBgZmV0Y2hJbnRlcm5hbEltYWdlYCBhbnN3ZXJzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVycm9yUmVzcG9uc2UoXG4gIGVycm9yOiB1bmtub3duLFxuICBJbWFnZUVycm9yOiBJbWFnZUVycm9yQ2xhc3MsXG4pOiB7XG4gIHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xufSB7XG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEltYWdlRXJyb3IpIHtcbiAgICByZXR1cm4geyBzdGF0dXNDb2RlOiBlcnJvci5zdGF0dXNDb2RlLCBtZXNzYWdlOiBlcnJvci5tZXNzYWdlIH07XG4gIH1cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgSW1hZ2VUb29MYXJnZUVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1c0NvZGU6IDQxMyxcbiAgICAgIG1lc3NhZ2U6ICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgfTtcbiAgfVxuICByZXR1cm4geyBzdGF0dXNDb2RlOiA1MDAsIG1lc3NhZ2U6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIgfTtcbn1cbiJdfQ==
|
|
144
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUE4REEsa0NBMkRDO0FBOEJELGtDQVFDO0FBWUQsb0RBaUJDO0FBNUxELHNEQUFzRDtBQUN0RDs7Ozs7Ozs7R0FRRztBQUNILDZDQUF5QztBQUN6QyxrREFBZ0U7QUFDaEUsaUNBQXVEO0FBMEJ2RDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSSxLQUFLLFVBQVUsV0FBVyxDQUMvQixFQUFZLEVBQ1osTUFBYyxFQUNkLEdBQVcsRUFDWCxRQUF5QixFQUN6QixXQUFtQjtJQUVuQixNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLFFBQVEsQ0FBQztJQUM1Qyx5RUFBeUU7SUFDekUsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSwwRUFBMEU7SUFDMUUsMkVBQTJFO0lBQzNFLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ25FLDZFQUE2RTtJQUM3RSxxRUFBcUU7SUFDckUsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBQSx3QkFBaUIsRUFBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRCw2RUFBNkU7SUFDN0UsK0JBQStCO0lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUEsaUJBQVUsRUFBQyxTQUFTLENBQUMsQ0FBQztJQUN0QyxNQUFNLEdBQUcsR0FBRyxNQUFNLENB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QUEyQjtJQUszQixJQUFJLEtBQUssWUFBWSxVQUFVLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxLQUFLLFlBQVksa0JBQWtCLEVBQUUsQ0FBQztRQUN4QyxPQUFPO1lBQ0wsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsMkRBQTJEO1NBQ3JFLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFDL0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyoqXG4gKiBTMyBmZXRjaGluZyBhbmQgZXJyb3IgbWFwcGluZyBmb3IgYC9fbmV4dC9pbWFnZWAsIHNwbGl0IG91dCBmcm9tXG4gKiB7QGxpbmsgLi9pbWFnZS50c30gc28gaXQgaXMgdW5pdC10ZXN0YWJsZSB3aXRob3V0IGBuZXh0YCBwcmVzZW50LlxuICpcbiAqIFRoZSBvbmUgdmFsdWUgZnJvbSBgbmV4dGAgdGhhdCB0aGlzIGZpbGUgbmVlZHMgaXMgcGFzc2VkIGluIHJhdGhlciB0aGFuXG4gKiBpbXBvcnRlZDogYG5leHRgIGlzIGV4dGVybmFsIHRvIHRoZSBzaGVsbCBidW5kbGVzLCBzbyBhIHN0YXRpYyBgaW1wb3J0YCBoZXJlXG4gKiB3b3VsZCBiZSBob2lzdGVkIGludG8gdGhlIGJ1bmRsZSB3aGVyZSBpdCBjYW5ub3QgcmVzb2x2ZS4gYGltYWdlLnRzYCByZXF1aXJlc1xuICogaXQgdGhyb3VnaCBgLi9uZXh0LW1vZHVsZXNgIGluc3RlYWQuXG4gKi9cbmltcG9ydCB7IGNyZWF0ZUhhc2ggfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7IEdldE9iamVjdENvbW1hbmQsIFMzQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgc2FmZURlY29kZSwgd2l0aG91dFBhdGhQcmVmaXggfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKiBXaGVyZSB0aGUgYXBwIGlzIHNlcnZlZCB2ZXJzdXMgd2hlcmUgaXRzIGFzc2V0cyB3ZXJlIHVwbG9hZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0Fzc2V0TG9jYXRpb24ge1xuICAvKipcbiAgICogVGhlIGFwcCdzIG93biBgYmFzZVBhdGhgIOKAlCB0aGUgcHJlZml4IG9mIHRoZSAqVVJMKiBpdCBpcyBzZXJ2ZWQgYXQuIE9ubHlcbiAgICogc3RyaXBwZWQgZnJvbSB0aGUgaHJlZiwgbmV2ZXIgdXNlZCB0byBidWlsZCBhIGtleTogb24gdGhlIEFQSSBHYXRld2F5XG4gICAqIGRlcGxveW1lbnQgdHlwZXMgdGhpcyBpcyB0aGUgc3RhZ2UgbmFtZSwgd2hpY2ggbmV2ZXIgYXBwZWFycyBpbiBTMy5cbiAgICovXG4gIHJlYWRvbmx5IHVybEJhc2VQYXRoOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGA6IHRoZSBTMyBrZXkgcHJlZml4IHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZFxuICAgKiB1bmRlciwgd2l0aG91dCBhIGxlYWRpbmcgc2xhc2guIEVtcHR5IGZvciBhIGJ1Y2tldC1yb290IGRlcGxveW1lbnQuXG4gICAqL1xuICByZWFkb25seSBrZXlQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBhcHAncyBgYXNzZXRQcmVmaXhgLCB3aGVuIGl0IGlzIGEgcGF0aCAoYC9jZG5gKS4gTmV4dC5qcyBwdXRzIGl0IGluXG4gICAqIGZyb250IG9mIGAvX25leHQvYCBpbiBwbGFjZSBvZiBgYmFzZVBhdGhgLCBzbyBhIHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2Unc1xuICAgKiBocmVmIGlzIGAvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS/igKZgLCBhbmQgYG5leHQgc3RhcnRgIHN0cmlwcyBpdCBhZ2FpbiB3aGVuXG4gICAqIGl0IHNlcnZlcyB0aGUgZmlsZS4gQW4gYWJzb2x1dGUgYGFzc2V0UHJlZml4YCBtYWtlcyB0aGUgaHJlZiBhYnNvbHV0ZSwgd2hpY2hcbiAgICogbmV2ZXIgcmVhY2hlcyBoZXJlLlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0UHJlZml4Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZldGNoZXMgYSBub24tYWJzb2x1dGUgKGxvY2FsKSBpbWFnZSByZWZlcmVuY2VkIGJ5IGFuIGA8SW1hZ2U+YCBmcm9tIFMzLlxuICpcbiAqIGB1cmxgIGlzIGluY29uc2lzdGVudCBhYm91dCB0aGUgYXBwJ3MgYGJhc2VQYXRoYDogbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgaXRcbiAqIGludG8gdGhlIGhyZWYgZm9yIHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2VzLCB3aGlsZSBwbGFpbiBzdHJpbmcgcGF0aHMgYXJlXG4gKiBwYXNzZWQgdGhyb3VnaCBhcyBsaXRlcmFsbHkgd3JpdHRlbiBieSB0aGUgYXBwLiBTbyBpdCBpcyBzdHJpcHBlZCB3aGVuIHByZXNlbnQsXG4gKiBsZWF2aW5nIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgYXNzZXQgcm9vdCwgYW5kIHRoZSBidWNrZXQncyBvd24ga2V5IHByZWZpeCBpc1xuICogYXBwbGllZCB0byB0aGF0LiBEZXJpdmluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBpbnN0ZWFkIGlzIHdyb25nIHdoZW5ldmVyIHRoZVxuICogdHdvIGRpZmZlciwgd2hpY2ggdGhleSBkbyBmb3IgZXZlcnkgQVBJIEdhdGV3YXkgZGVwbG95bWVudC5cbiAqXG4gKiBUaGUga2V5IGlzIHBlcmNlbnQtZGVjb2RlZCwgYmVjYXVzZSBhbiBTMyBrZXkgaXMgdGhlIGZpbGUncyByZWFsIG5hbWUgd2hpbGVcbiAqIGB1cmxgIGlzIGEgVVJMIHBhdGguIGBwdWJsaWMvaGVsbG8gd29ybGQuanBnYCBhcnJpdmVzIGhlcmUgYXNcbiAqIGAvaGVsbG8lMjB3b3JsZC5qcGdgIOKAlCB0aGUgYHVybGAgcXVlcnkgdmFsdWUgaXMgZG91YmxlLWVuY29kZWQsIHNvIGRlY29kaW5nIHRoZVxuICogcXVlcnkgc3RyaW5nIGxlYXZlcyBvbmUgbGF5ZXIg4oCUIGFuZCBpdHMgb2JqZWN0IGtleSBpcyBgaGVsbG8gd29ybGQuanBnYC5cbiAqIE5leHQuanMncyBvd24gYGZldGNoSW50ZXJuYWxJbWFnZWAgZ2V0cyB0aGUgZGVjb2RlIGZvciBmcmVlLCBzaW5jZSBpdCBtYWtlcyBhblxuICogSFRUUCBzdWJyZXF1ZXN0IGFuZCBpdHMgc3RhdGljIGZpbGUgc2VydmVyIHJlc29sdmVzIHRoZSBwYXRoIGFnYWluc3QgdGhlXG4gKiBmaWxlc3lzdGVtOyBza2lwcGluZyBpdCBoZXJlIDQwMCdkIHRoYXQgZmlsZVxuICogKGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCkuIFVuaWNvZGUgbmVlZHMgbm90aGluZzogYMOkw7bDvMWhxI3FmcOtLnBuZ2Agc3Vydml2ZXNcbiAqIHRoZSBxdWVyeSBkZWNvZGUgYXMgaXRzZWxmIGFuZCBpcyBhbHJlYWR5IHRoZSBvYmplY3QncyBuYW1lLlxuICpcbiAqIFRocm93cyB7QGxpbmsgSW1hZ2VUb29MYXJnZUVycm9yfSByYXRoZXIgdGhhbiByZWFkIHBhc3QgYG1heGltdW1Cb2R5YFxuICogKGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWApLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlc1xuICogdG9vOiBhIGxhcmdlIGBwdWJsaWMvYCBmaWxlIHdvdWxkIG90aGVyd2lzZSBiZSByZWFkIGludG8gbWVtb3J5IHdob2xlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hGcm9tUzMoXG4gIHMzOiBTM0NsaWVudCxcbiAgYnVja2V0OiBzdHJpbmcsXG4gIHVybDogc3RyaW5nLFxuICBsb2NhdGlvbjogUzNBc3NldExvY2F0aW9uLFxuICBtYXhpbXVtQm9keTogbnVtYmVyLFxuKTogUHJvbWlzZTx7IGJ1ZmZlcjogQnVmZmVyOyBjb250ZW50VHlwZTogc3RyaW5nIHwgbnVsbDsgZXRhZzogc3RyaW5nIH0+IHtcbiAgY29uc3QgeyB1cmxCYXNlUGF0aCwga2V5UHJlZml4IH0gPSBsb2NhdGlvbjtcbiAgLy8gVGhlIGtleSBpcyB0aGUgcGF0aCBhbG9uZS4gYC9sb2dvLnBuZz92PTJgIGlzIGEgY2FjaGUtYnVzdGVyIG9uIGEgZmlsZVxuICAvLyBuYW1lZCBgbG9nby5wbmdgLCBhbmQgYG5leHQgc3RhcnRgIHRyZWF0cyBpdCBhcyBvbmU6IGBmZXRjaEludGVybmFsSW1hZ2VgXG4gIC8vIHJvdXRlcyB0aGUgaHJlZiBhcyBhIHJlcXVlc3QsIHdob3NlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGVcbiAgLy8gc3RhdGljIGZpbGUgbG9va3VwLiBMZWZ0IG9uLCB0aGV5IGJlY2FtZSBwYXJ0IG9mIHRoZSBrZXksIHdoaWNoIG1pc3NlZC5cbiAgLy8gQ3V0IGJlZm9yZSBkZWNvZGluZywgc28gYSBgP2AgdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lIChgJTNGYCkgc3Vydml2ZXMuXG4gIGNvbnN0IHBhdGggPSB3aXRob3V0QXNzZXRQcmVmaXgodXJsLnNwbGl0KC9bPyNdLywgMSlbMF0sIGxvY2F0aW9uKTtcbiAgLy8gTWF0Y2hpbmcgb24gYSBwYXRoIGJvdW5kYXJ5IGtlZXBzIGEgc2libGluZyBsaWtlIFwiL2Jhc2VtZW50L2xvZ28ucG5nXCIgZnJvbVxuICAvLyBiZWluZyB0cmVhdGVkIGFzIGJhc2VQYXRoIFwiL2Jhc2VcIiBwbHVzIFwibWVudC9sb2dvLnBuZ1wiLiBJdCdzIHN0aWxsXG4gIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGBwdWJsaWMvYmFzZS9gIGRpcmVjdG9yeSwgd2hpY2ggbG9zZXM7IHRoYXQnc1xuICAvLyB0aGUgcmlnaHQgdHJhZGUsIHNpbmNlIGV2ZXJ5IHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2UgY2FycmllcyB0aGUgcHJlZml4XG4gIC8vIGFuZCB0aGUgYWx0ZXJuYXRpdmUgY29zdHMgYW4gUzMgcm91bmQgdHJpcCBwZXIgcmVxdWVzdCB0byBkZXRlY3QgaXQuXG4gIGNvbnN0IGFzc2V0UGF0aCA9IHdpdGhvdXRQYXRoUHJlZml4KHBhdGgsIHVybEJhc2VQYXRoKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpO1xuICBjb25zdCBwcmVmaXggPSBrZXlQcmVmaXgucmVwbGFjZSgvXlxcLyt8XFwvKyQvZywgXCJcIik7XG4gIC8vIEEgbWFsZm9ybWVkIGVuY29kaW5nIHRoYXQgaXNuJ3QgYSBsaXRlcmFsIGAlYCBqdXN0IG1pc3NlcyB0aGUga2V5IGFuZCBnZXRzXG4gIC8vIHRoZSA0MDAgYW4gYWJzZW50IGZpbGUgZ2V0cy5cbiAgY29uc3QgZGVjb2RlZCA9IHNhZmVEZWNvZGUoYXNzZXRQYXRoKTtcbiAgY29uc3Qga2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fS8ke2RlY29kZWR9YCA6IGRlY29kZWQ7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5zZW5kKFxuICAgIG5ldyBHZXRPYmplY3RDb21tYW5kKHtcbiAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgS2V5OiBrZXksXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgYm9keSA9IHJlc3BvbnNlLkJvZHk7XG4gIGlmICghYm9keSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgcmVzcG9uc2UgZnJvbSBTMyBmb3Iga2V5OiAke2tleX1gKTtcbiAgfVxuXG4gIGlmICgocmVzcG9uc2UuQ29udGVudExlbmd0aCA/PyAwKSA+IG1heGltdW1Cb2R5KSB7XG4gICAgKGJvZHkgYXMgeyBkZXN0cm95PzogKCkgPT4gdm9pZCB9KS5kZXN0cm95Py4oKTtcbiAgICB0aHJvdyBuZXcgSW1hZ2VUb29MYXJnZUVycm9yKGtleSk7XG4gIH1cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBsZXQgc2l6ZSA9IDA7XG4gIC8vIENvdW50ZWQgYXMgd2VsbCwgZm9yIGFuIG9iamVjdCB3aXRob3V0IGEgYENvbnRlbnRMZW5ndGhgLiBUaHJvd2luZyBvdXQgb2ZcbiAgLy8gdGhlIGxvb3AgZGVzdHJveXMgdGhlIHN0cmVhbS5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5IGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pIHtcbiAgICBzaXplICs9IGNodW5rLmJ5dGVMZW5ndGg7XG4gICAgaWYgKHNpemUgPiBtYXhpbXVtQm9keSkge1xuICAgICAgdGhyb3cgbmV3IEltYWdlVG9vTGFyZ2VFcnJvcihrZXkpO1xuICAgIH1cbiAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBidWZmZXI6IEJ1ZmZlci5jb25jYXQoY2h1bmtzKSxcbiAgICBjb250ZW50VHlwZTogcmVzcG9uc2UuQ29udGVudFR5cGUgfHwgbnVsbCxcbiAgICBldGFnOiByZXNwb25zZS5FVGFnIHx8IFwiXCIsXG4gIH07XG59XG5cbi8qKlxuICogYC9jZG4vX25leHQvc3RhdGljL21lZGlhL2xvZ28ucG5nYCDihpIgYC9fbmV4dC9zdGF0aWMvbWVkaWEvbG9nby5wbmdgLCBmb3IgYVxuICogcGF0aCBgYXNzZXRQcmVmaXhgIG9mIGAvY2RuYDogb25seSBpbiBmcm9udCBvZiBgL19uZXh0L2AsIHRoZSBvbmUgcGxhY2VcbiAqIE5leHQuanMgcHV0cyBpdC5cbiAqL1xuZnVuY3Rpb24gd2l0aG91dEFzc2V0UHJlZml4KHBhdGg6IHN0cmluZywgbG9jYXRpb246IFMzQXNzZXRMb2NhdGlvbik6IHN0cmluZyB7XG4gIGNvbnN0IGFzc2V0UHJlZml4ID0gbG9jYXRpb24uYXNzZXRQcmVmaXg/LnJlcGxhY2UoL1xcLyskLywgXCJcIikgPz8gXCJcIjtcbiAgaWYgKCFhc3NldFByZWZpeC5zdGFydHNXaXRoKFwiL1wiKSkgcmV0dXJuIHBhdGg7XG4gIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoYCR7YXNzZXRQcmVmaXh9L19uZXh0L2ApXG4gICAgPyBwYXRoLnNsaWNlKGFzc2V0UHJlZml4Lmxlbmd0aClcbiAgICA6IHBhdGg7XG59XG5cbi8qKiBBIHNvdXJjZSBvdmVyIGBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWA7IHNlZSB7QGxpbmsgZmV0Y2hGcm9tUzN9LiAqL1xuZXhwb3J0IGNsYXNzIEltYWdlVG9vTGFyZ2VFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoYFMzIG9iamVjdCAke2tleX0gaXMgb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keWApO1xuICAgIHRoaXMubmFtZSA9IFwiSW1hZ2VUb29MYXJnZUVycm9yXCI7XG4gIH1cbn1cblxuLyoqXG4gKiBgZXh0cmFjdEV0YWdgIGZyb20gbmV4dCdzIGltYWdlIG9wdGltaXplciwgcmVzdGF0ZWQ6IG5leHQgMTYuNCBtb3ZlZCBpdCBvdXRcbiAqIG9mIGBuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc2AgKGludG8gYGltYWdlLW9wdGltaXplci9leHRyYWN0LWV0YWdgKSxcbiAqIHNvIHRoZSBvbGQgZXhwb3J0IGlzIGB1bmRlZmluZWRgIHRoZXJlIGFuZCB0aGUgbmV3IHBhdGggaXMgYWJzZW50IGJlZm9yZSBpdC5cbiAqIFRoZSB1cHN0cmVhbSBldGFnIGlzIGJhc2U2NHVybC1lbmNvZGVkLCBiZWNhdXNlIGl0IGlzIHdlYWstc2lnbmVkIGFuZCBlbmRzIHVwXG4gKiBpbiBhIGNhY2hlIGVudHJ5J3MgbmFtZTsgd2l0aG91dCBvbmUgdGhlIGV0YWcgaXMgdGhlIGltYWdlJ3Mgb3duIGhhc2guXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0RXRhZyhcbiAgZXRhZzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaW1hZ2VCdWZmZXI6IEJ1ZmZlcixcbik6IHN0cmluZyB7XG4gIGlmIChldGFnKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGV0YWcpLnRvU3RyaW5nKFwiYmFzZTY0dXJsXCIpO1xuICB9XG4gIHJldHVybiBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShpbWFnZUJ1ZmZlcikuZGlnZXN0KFwiYmFzZTY0dXJsXCIpO1xufVxuXG4vKiogYEltYWdlRXJyb3JgIGZyb20gYG5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzYC4gKi9cbmV4cG9ydCB0eXBlIEltYWdlRXJyb3JDbGFzcyA9XG4gICh0eXBlb2YgaW1wb3J0KFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIikpW1wiSW1hZ2VFcnJvclwiXTtcblxuLyoqXG4gKiBNYXBzIGFuIGVycm9yIHRocm93biB3aGlsZSBwcm9jZXNzaW5nIGFuIGltYWdlIHJlcXVlc3QgdG8gdGhlIEhUVFBcbiAqIHN0YXR1cy9tZXNzYWdlIGl0IHNob3VsZCBwcm9kdWNlLCBwcmVzZXJ2aW5nIHRoZSBzdGF0dXMgTmV4dC5qcydzIG93blxuICogYEltYWdlRXJyb3JgL2BmZXRjaEV4dGVybmFsSW1hZ2VgIGF0dGFjaC4gQSBzb3VyY2Ugb3ZlclxuICogYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCBpcyB0aGUgNDEzIGBmZXRjaEludGVybmFsSW1hZ2VgIGFuc3dlcnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRXJyb3JSZXNwb25zZShcbiAgZXJyb3I6IHVua25vd24sXG4gIEltYWdlRXJyb3I6IEltYWdlRXJyb3JDbGFzcyxcbik6IHtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59IHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgSW1hZ2VFcnJvcikge1xuICAgIHJldHVybiB7IHN0YXR1c0NvZGU6IGVycm9yLnN0YXR1c0NvZGUsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfTtcbiAgfVxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJbWFnZVRvb0xhcmdlRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzQ29kZTogNDEzLFxuICAgICAgbWVzc2FnZTogJ1widXJsXCIgcGFyYW1ldGVyIGlzIHZhbGlkIGJ1dCBpbnRlcm5hbCByZXNwb25zZSBpcyBpbnZhbGlkJyxcbiAgICB9O1xuICB9XG4gIHJldHVybiB7IHN0YXR1c0NvZGU6IDUwMCwgbWVzc2FnZTogXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIiB9O1xufVxuIl19
|
|
@@ -209,6 +209,18 @@ describe("fetchFromS3", () => {
|
|
|
209
209
|
await expect((0, image_utils_1.fetchFromS3)(s3, "my-bucket", "/missing.png", ROOT, Infinity)).rejects.toThrow(/Empty response from S3/);
|
|
210
210
|
});
|
|
211
211
|
});
|
|
212
|
+
describe("extractEtag", () => {
|
|
213
|
+
const image = Buffer.from("not really a png");
|
|
214
|
+
// What next's own `extractEtag` returns for these inputs, recorded from
|
|
215
|
+
// 16.4's `image-optimizer/extract-etag.js`: a literal, so the test runs on
|
|
216
|
+
// every supported `next`, including those without that module.
|
|
217
|
+
it("matches next's own, with and without an upstream etag", () => {
|
|
218
|
+
expect((0, image_utils_1.extractEtag)('W/"abc"', image)).toBe("Vy8iYWJjIg");
|
|
219
|
+
for (const missing of ["", null, undefined]) {
|
|
220
|
+
expect((0, image_utils_1.extractEtag)(missing, image)).toBe("6QE3053jBO77vniLxTXH6C8nq7-AaVBfu9ip3NxPICQ");
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
});
|
|
212
224
|
describe("resolveErrorResponse", () => {
|
|
213
225
|
it("preserves the status code and message from an ImageError", () => {
|
|
214
226
|
const error = new image_optimizer_js_1.ImageError(400, '"url" parameter is not allowed');
|
|
@@ -234,4 +246,4 @@ describe("resolveErrorResponse", () => {
|
|
|
234
246
|
});
|
|
235
247
|
});
|
|
236
248
|
});
|
|
237
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsK0NBSXVCO0FBRXZCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUVoRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2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QU0sQ0FDSixJQUFBLGtDQUFvQixFQUFDLElBQUksZ0NBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsK0JBQVUsQ0FBQyxDQUNwRSxDQUFDLE9BQU8sQ0FBQztZQUNSLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLDJEQUEyRDtTQUNyRSxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLElBQUEsa0NBQW9CLEVBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsK0JBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQ2xFLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLHVCQUF1QjtTQUNqQyxDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsSUFBQSxrQ0FBb0IsRUFBQyxjQUFjLEVBQUUsK0JBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQy9ELFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLHVCQUF1QjtTQUNqQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5qZXN0Lm1vY2soXCJAYXdzLXNkay9jbGllbnQtczNcIik7XG5cbmltcG9ydCB7IEdldE9iamVjdENvbW1hbmQsIFMzQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgSW1hZ2VFcnJvciB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiO1xuaW1wb3J0IHtcbiAgZmV0Y2hGcm9tUzMsXG4gIEltYWdlVG9vTGFyZ2VFcnJvcixcbiAgcmVzb2x2ZUVycm9yUmVzcG9uc2UsXG59IGZyb20gXCIuL2ltYWdlLXV0aWxzXCI7XG5cbmZ1bmN0aW9uIGFzeW5jSXRlcmFibGVGcm9tKGNodW5rczogVWludDhBcnJheVtdKTogQXN5bmNJdGVyYWJsZTxVaW50OEFycmF5PiB7XG4gIHJldHVybiB7XG4gICAgW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6IGFzeW5jICgpID0+XG4gICAgICAgICAgaSA8IGNodW5rcy5sZW5ndGhcbiAgICAgICAgICAgID8geyBkb25lOiBmYWxzZSwgdmFsdWU6IGNodW5rc1tpKytdIH1cbiAgICAgICAgICAgIDogeyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG5cbi8qKiBObyBhcHAgYGJhc2VQYXRoYCwgYXNzZXRzIGF0IHRoZSByb290IG9mIHRoZSBidWNrZXQ6IHRoZSBkZWZhdWx0LiAqL1xuY29uc3QgUk9PVCA9IHsgdXJsQmFzZVBhdGg6IFwiXCIsIGtleVByZWZpeDogXCJcIiB9O1xuXG5kZXNjcmliZShcImZldGNoRnJvbVMzXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja1NlbmQgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHMzID0gbmV3IFMzQ2xpZW50KHt9KSBhcyB1bmtub3duIGFzIFMzQ2xpZW50O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIChzMyBhcyB1bmtub3duIGFzIHsgc2VuZDogdHlwZW9mIG1vY2tTZW5kIH0pLnNlbmQgPSBtb2NrU2VuZDtcbiAgICBtb2NrU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgY29uc3Qgb2sgPSAoKSA9PlxuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL3BuZ1wiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuICBjb25zdCBrZXlPZiA9ICgpID0+XG4gICAgKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF0uS2V5O1xuXG4gIGl0KFwic3RyaXBzIHRoZSBsZWFkaW5nIHNsYXNoIHdoZW4gdGhlIGFzc2V0cyBzaXQgYXQgdGhlIGJ1Y2tldCByb290XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9zdGF0aWMvZm9vLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCJcIixcbiAgICAgICAga2V5UHJlZml4OiBcIlwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3QoKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF0pLnRvRXF1YWwoXG4gICAgICB7IEJ1Y2tldDogXCJteS1idWNrZXRcIiwgS2V5OiBcInN0YXRpYy9mb28ucG5nXCIgfSxcbiAgICApO1xuICB9KTtcblxuICBpdChcImFwcGxpZXMgdGhlIGJ1Y2tldCBrZXkgcHJlZml4XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9zdGF0aWMvZm9vLmpwZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZVwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2Uvc3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIGl0KFwiZG9lcyBub3QgcmVwZWF0IHRoZSBwcmVmaXggd2hlbiB0aGUgdXJsIGFscmVhZHkgY2FycmllcyBiYXNlUGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIC8vIG5leHQtaW1hZ2UtbG9hZGVyIGJha2VzIGBiYXNlUGF0aGAgaW50byB0aGUgaHJlZiBvZiBhIHN0YXRpY2FsbHkgaW1wb3J0ZWRcbiAgICAvLyBpbWFnZSwgdW5saWtlIGEgcGxhaW4gc3RyaW5nIHBhdGguXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9iYXNlL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZVwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2UvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIpO1xuICB9KTtcblxuICAvKipcbiAgICogVGhlIEFQSSBHYXRld2F5IGRlcGxveW1lbnQgdHlwZXMgc2VydmUgdGhlIGFwcCB1bmRlciB0aGUgc3RhZ2UgbmFtZSwgc28gdGhlXG4gICAqIGFwcCdzIGBiYXNlUGF0aGAgaXMgYC9wcm9kYCB3aGlsZSB0aGUgYXNzZXRzIHdlcmUgdXBsb2FkZWQgdG8gdGhlIHJvb3Qgb2YgdGhlXG4gICAqIGJ1Y2tldC4gQnVpbGRpbmcgdGhlIGtleSBmcm9tIGBiYXNlUGF0aGAgYXNrcyBTMyBmb3IgYHByb2QvLi4uYCwgd2hpY2ggZG9lc1xuICAgKiBub3QgZXhpc3QsIGFuZCBldmVyeSBsb2NhbCBgPEltYWdlPmAgNDAwcy5cbiAgICovXG4gIGl0KFwic3RyaXBzIGEgYmFzZVBhdGggdGhhdCBpcyBub3QgcGFydCBvZiB0aGUga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9wcm9kL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvcHJvZFwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIHVybCB3aXRob3V0IGJhc2VQYXRoIGFsb25lIHdoZW4gdGhlcmUgaXMgbm8ga2V5IHByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvc3RhdGljL2Zvby5qcGdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiL3Byb2RcIixcbiAgICAgICAga2V5UHJlZml4OiBcIlwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcInN0YXRpYy9mb28uanBnXCIpO1xuICB9KTtcblxuICAvLyBXaXRoIGBhc3NldFByZWZpeDogXCIvY2RuXCJgLCBhIHN0YXRpYyBpbXBvcnQncyBocmVmIGlzXG4gIC8vIGAvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS/igKZgLCB3aXRoIGBiYXNlUGF0aGAgbm93aGVyZSBpbiBpdC5cbiAgaXQoXCJzdHJpcHMgYSBwYXRoIGFzc2V0UHJlZml4IGluIGZyb250IG9mIC9fbmV4dC9cIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Nkbi9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgICAga2V5UHJlZml4OiBcIlwiLFxuICAgICAgICBhc3NldFByZWZpeDogXCIvY2RuL1wiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcIl9uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJsZWF2ZXMgYSBwdWJsaWMvIGZpbGUgdW5kZXIgYSBkaXJlY3RvcnkgbmFtZWQgbGlrZSB0aGUgYXNzZXRQcmVmaXggYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Nkbi9sb2dvLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCJcIixcbiAgICAgICAga2V5UHJlZml4OiBcIlwiLFxuICAgICAgICBhc3NldFByZWZpeDogXCIvY2RuXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiY2RuL2xvZ28ucG5nXCIpO1xuICB9KTtcblxuICBpdChcImlnbm9yZXMgYW4gYWJzb2x1dGUgYXNzZXRQcmVmaXhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCJcIixcbiAgICAgICAga2V5UHJlZml4OiBcIlwiLFxuICAgICAgICBhc3NldFByZWZpeDogXCJodHRwczovL2Nkbi5leGFtcGxlLnRlc3RcIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJfbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwib25seSBtYXRjaGVzIGJhc2VQYXRoIG9uIGEgcGF0aCBib3VuZGFyeVwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvYmFzZW1lbnQvbG9nby5wbmdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgICAga2V5UHJlZml4OiBcImJhc2VcIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJiYXNlL2Jhc2VtZW50L2xvZ28ucG5nXCIpO1xuICB9KTtcblxuICAvLyBDYXJyaWVkIG92ZXIgZnJvbSAjMjY3LCB3aGljaCBmaXhlZCB0aGUgc2FtZSBidWcgaW4gdGhlIHByZS1hZGFwdGVyIGltYWdlXG4gIC8vIGhhbmRsZXI6IGEgYGRlc3RpbmF0aW9uS2V5UHJlZml4YCBvdmVycmlkZSBjYW4gYXJyaXZlIHdpdGggYSB0cmFpbGluZyBzbGFzaC5cbiAgaXQoXCJkb2Vzbid0IGRvdWJsZSB0aGUgc2VwYXJhdG9yIHdoZW4gdGhlIGtleSBwcmVmaXggaGFzIGEgdHJhaWxpbmcgc2xhc2hcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28uanBnXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZS9cIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJiYXNlL3N0YXRpYy9mb28uanBnXCIpO1xuICB9KTtcblxuICAvLyBgbmV4dC1pbWFnZS1sZWdhY3kvdW5pY29kZWAsIHdob3NlIGBwdWJsaWMvYCBob2xkcyBib3RoIG9mIHRoZXNlIG5hbWVzLiBUaGVcbiAgLy8gc3BhY2UgaXMgd2hhdCBicm9rZTogdGhlIGtleSBpcyB0aGUgZmlsZSdzIHJlYWwgbmFtZSwgdGhlIHVybCBpcyBhIFVSTCBwYXRoLlxuICBpdC5lYWNoKFtcbiAgICBbXCIvaGVsbG8lMjB3b3JsZC5qcGdcIiwgXCJoZWxsbyB3b3JsZC5qcGdcIl0sXG4gICAgW1wiL8Okw7bDvMWhxI3FmcOtLnBuZ1wiLCBcIsOkw7bDvMWhxI3FmcOtLnBuZ1wiXSxcbiAgICBbXCIvJUMzJUE0JUMzJUI2LnBuZ1wiLCBcIsOkw7YucG5nXCJdLFxuICBdKShcImRlY29kZXMgJXMgaW50byB0aGUgb2JqZWN0J3MgcmVhbCBuYW1lXCIsIGFzeW5jICh1cmwsIGtleSkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgdXJsLCBST09ULCBJbmZpbml0eSk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShrZXkpO1xuICB9KTtcblxuICAvLyBBIGNhY2hlLWJ1c3RlciBvbiBhIGxvY2FsIHNyYzogYG5leHQgc3RhcnRgIHJvdXRlcyB0aGUgaHJlZiBhcyBhIHJlcXVlc3QsIHNvXG4gIC8vIHRoZSBxdWVyeSBhbmQgZnJhZ21lbnQgbmV2ZXIgcmVhY2ggdGhlIGZpbGUgbG9va3VwLlxuICBpdC5lYWNoKFtcbiAgICBbXCIvbG9nby5wbmc/dj0yXCIsIFwibG9nby5wbmdcIl0sXG4gICAgW1wiL2xvZ28ucG5nI3RvcFwiLCBcImxvZ28ucG5nXCJdLFxuICAgIFtcIi9sb2dvLnBuZz92PTIjdG9wXCIsIFwibG9nby5wbmdcIl0sXG4gICAgW1wiL2Jhc2UvbG9nby5wbmc/dj0yXCIsIFwibG9nby5wbmdcIl0sXG4gICAgLy8gQSBgP2AgdGhhdCBpcyBwYXJ0IG9mIHRoZSBuYW1lIGFycml2ZXMgZW5jb2RlZCBhbmQgaXMgbm90IGEgcXVlcnkuXG4gICAgW1wiL3doYXQlM0YucG5nP3Y9MlwiLCBcIndoYXQ/LnBuZ1wiXSxcbiAgXSkoXCJrZXlzICVzIGJ5IGl0cyBwYXRoIGFsb25lXCIsIGFzeW5jICh1cmwsIGtleSkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIHVybCxcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgICAga2V5UHJlZml4OiBcIlwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShrZXkpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIG5hbWUgdGhhdCBpc24ndCB2YWxpZCBwZXJjZW50LWVuY29kaW5nIGFsb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiLzEwMCUucG5nXCIsIFJPT1QsIEluZmluaXR5KTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiMTAwJS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkIGJ1ZmZlciwgY29udGVudCB0eXBlLCBhbmQgZXRhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9qcGVnXCIsXG4gICAgICBFVGFnOiAnXCJ0aGUtZXRhZ1wiJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvZm9vLmpwZ1wiLFxuICAgICAgUk9PVCxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzdWx0LmJ1ZmZlci50b1N0cmluZygpKS50b0JlKFwiaGVsbG9cIik7XG4gICAgZXhwZWN0KHJlc3VsdC5jb250ZW50VHlwZSkudG9CZShcImltYWdlL2pwZWdcIik7XG4gICAgZXhwZWN0KHJlc3VsdC5ldGFnKS50b0JlKCdcInRoZS1ldGFnXCInKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGFuIGVtcHR5IGV0YWcgd2hlbiBTMyBkb2Vzbid0IHByb3ZpZGUgb25lXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJkYXRhXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogbnVsbCxcbiAgICAgIEVUYWc6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvZm9vLnBuZ1wiLFxuICAgICAgUk9PVCxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoXCJcIik7XG4gICAgZXhwZWN0KHJlc3VsdC5jb250ZW50VHlwZSkudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgLy8gYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCwgd2hpY2ggYG5leHQgc3RhcnRgIGVuZm9yY2VzIG9uIGxvY2FsIHNvdXJjZXMuXG4gIGl0KFwicmVmdXNlcyBhbiBvYmplY3Qgd2hvc2UgQ29udGVudExlbmd0aCBpcyBvdmVyIHRoZSBsaW1pdCwgdW5yZWFkXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBkZXN0cm95ID0gamVzdC5mbigpO1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IHsgLi4uYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwibmV2ZXIgcmVhZFwiKV0pLCBkZXN0cm95IH0sXG4gICAgICBDb250ZW50TGVuZ3RoOiAxMSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iaWcucG5nXCIsIFJPT1QsIDEwKSxcbiAgICApLnJlamVjdHMudG9CZUluc3RhbmNlT2YoSW1hZ2VUb29MYXJnZUVycm9yKTtcbiAgICBleHBlY3QoZGVzdHJveSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICB9KTtcblxuICBpdChcInN0b3BzIHJlYWRpbmcgb25jZSB0aGUgYnl0ZXMgcmVhZCBwYXNzIHRoZSBsaW1pdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvYmlnLnBuZ1wiLCBST09ULCA0KSxcbiAgICApLnJlamVjdHMudG9CZUluc3RhbmNlT2YoSW1hZ2VUb29MYXJnZUVycm9yKTtcbiAgICAvLyBBdCB0aGUgbGltaXQgZXhhY3RseSBpcyBmaW5lLlxuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImhlbFwiKSwgQnVmZmVyLmZyb20oXCJsb1wiKV0pLFxuICAgICAgQ29udGVudExlbmd0aDogNSxcbiAgICB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvb2sucG5nXCIsIFJPT1QsIDUpO1xuICAgIGV4cGVjdChyZXN1bHQuYnVmZmVyLnRvU3RyaW5nKCkpLnRvQmUoXCJoZWxsb1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3Mgd2hlbiBTMyByZXR1cm5zIG5vIGJvZHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHsgQm9keTogdW5kZWZpbmVkIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL21pc3NpbmcucG5nXCIsIFJPT1QsIEluZmluaXR5KSxcbiAgICApLnJlamVjdHMudG9UaHJvdygvRW1wdHkgcmVzcG9uc2UgZnJvbSBTMy8pO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVFcnJvclJlc3BvbnNlXCIsICgpID0+IHtcbiAgaXQoXCJwcmVzZXJ2ZXMgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGZyb20gYW4gSW1hZ2VFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSW1hZ2VFcnJvcig0MDAsICdcInVybFwiIHBhcmFtZXRlciBpcyBub3QgYWxsb3dlZCcpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1hcHMgYSBzb3VyY2Ugb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keSB0byBuZXh0IHN0YXJ0J3MgNDEzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgSW1hZ2VUb29MYXJnZUVycm9yKFwiYmlnLnBuZ1wiKSwgSW1hZ2VFcnJvciksXG4gICAgKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDQxMyxcbiAgICAgIG1lc3NhZ2U6ICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byA1MDAgZm9yIHVucmVjb2duaXplZCBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgRXJyb3IoXCJib29tXCIpLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShcIm5vdCBhbiBlcnJvclwiLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
249
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtdXRpbHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ydW50aW1lL2ltYWdlLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsK0NBS3VCO0FBRXZCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUVoRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2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QUMvRCxVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSx1QkFBdUI7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuamVzdC5tb2NrKFwiQGF3cy1zZGsvY2xpZW50LXMzXCIpO1xuXG5pbXBvcnQgeyBHZXRPYmplY3RDb21tYW5kLCBTM0NsaWVudCB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7IEltYWdlRXJyb3IgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9pbWFnZS1vcHRpbWl6ZXIuanNcIjtcbmltcG9ydCB7XG4gIGV4dHJhY3RFdGFnLFxuICBmZXRjaEZyb21TMyxcbiAgSW1hZ2VUb29MYXJnZUVycm9yLFxuICByZXNvbHZlRXJyb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4vaW1hZ2UtdXRpbHNcIjtcblxuZnVuY3Rpb24gYXN5bmNJdGVyYWJsZUZyb20oY2h1bmtzOiBVaW50OEFycmF5W10pOiBBc3luY0l0ZXJhYmxlPFVpbnQ4QXJyYXk+IHtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgICAgbGV0IGkgPSAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogYXN5bmMgKCkgPT5cbiAgICAgICAgICBpIDwgY2h1bmtzLmxlbmd0aFxuICAgICAgICAgICAgPyB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogY2h1bmtzW2krK10gfVxuICAgICAgICAgICAgOiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSxcbiAgICAgIH07XG4gICAgfSxcbiAgfTtcbn1cblxuLyoqIE5vIGFwcCBgYmFzZVBhdGhgLCBhc3NldHMgYXQgdGhlIHJvb3Qgb2YgdGhlIGJ1Y2tldDogdGhlIGRlZmF1bHQuICovXG5jb25zdCBST09UID0geyB1cmxCYXNlUGF0aDogXCJcIiwga2V5UHJlZml4OiBcIlwiIH07XG5cbmRlc2NyaWJlKFwiZmV0Y2hGcm9tUzNcIiwgKCkgPT4ge1xuICBjb25zdCBtb2NrU2VuZCA9IGplc3QuZm4oKTtcbiAgY29uc3QgczMgPSBuZXcgUzNDbGllbnQoe30pIGFzIHVua25vd24gYXMgUzNDbGllbnQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgKHMzIGFzIHVua25vd24gYXMgeyBzZW5kOiB0eXBlb2YgbW9ja1NlbmQgfSkuc2VuZCA9IG1vY2tTZW5kO1xuICAgIG1vY2tTZW5kLm1vY2tSZXNldCgpO1xuICB9KTtcblxuICBjb25zdCBvayA9ICgpID0+XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBFVGFnOiAnXCJhYmMxMjNcIicsXG4gICAgfSk7XG4gIGNvbnN0IGtleU9mID0gKCkgPT5cbiAgICAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXS5LZXk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGxlYWRpbmcgc2xhc2ggd2hlbiB0aGUgYXNzZXRzIHNpdCBhdCB0aGUgYnVja2V0IHJvb3RcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdCgoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXSkudG9FcXVhbChcbiAgICAgIHsgQnVja2V0OiBcIm15LWJ1Y2tldFwiLCBLZXk6IFwic3RhdGljL2Zvby5wbmdcIiB9LFxuICAgICk7XG4gIH0pO1xuXG4gIGl0KFwiYXBwbGllcyB0aGUgYnVja2V0IGtleSBwcmVmaXhcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9mb28uanBnXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9zdGF0aWMvZm9vLmpwZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCByZXBlYXQgdGhlIHByZWZpeCB3aGVuIHRoZSB1cmwgYWxyZWFkeSBjYXJyaWVzIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgLy8gbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgYGJhc2VQYXRoYCBpbnRvIHRoZSBocmVmIG9mIGEgc3RhdGljYWxseSBpbXBvcnRlZFxuICAgIC8vIGltYWdlLCB1bmxpa2UgYSBwbGFpbiBzdHJpbmcgcGF0aC5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Jhc2UvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9iYXNlXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiYmFzZS9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBUaGUgQVBJIEdhdGV3YXkgZGVwbG95bWVudCB0eXBlcyBzZXJ2ZSB0aGUgYXBwIHVuZGVyIHRoZSBzdGFnZSBuYW1lLCBzbyB0aGVcbiAgICogYXBwJ3MgYGJhc2VQYXRoYCBpcyBgL3Byb2RgIHdoaWxlIHRoZSBhc3NldHMgd2VyZSB1cGxvYWRlZCB0byB0aGUgcm9vdCBvZiB0aGVcbiAgICogYnVja2V0LiBCdWlsZGluZyB0aGUga2V5IGZyb20gYGJhc2VQYXRoYCBhc2tzIFMzIGZvciBgcHJvZC8uLi5gLCB3aGljaCBkb2VzXG4gICAqIG5vdCBleGlzdCwgYW5kIGV2ZXJ5IGxvY2FsIGA8SW1hZ2U+YCA0MDBzLlxuICAgKi9cbiAgaXQoXCJzdHJpcHMgYSBiYXNlUGF0aCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHRoZSBrZXlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3Byb2QvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIi9wcm9kXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJcIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJfbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgdXJsIHdpdGhvdXQgYmFzZVBhdGggYWxvbmUgd2hlbiB0aGVyZSBpcyBubyBrZXkgcHJlZml4XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9zdGF0aWMvZm9vLmpwZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvcHJvZFwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwic3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIFdpdGggYGFzc2V0UHJlZml4OiBcIi9jZG5cImAsIGEgc3RhdGljIGltcG9ydCdzIGhyZWYgaXNcbiAgLy8gYC9jZG4vX25leHQvc3RhdGljL21lZGlhL+KApmAsIHdpdGggYGJhc2VQYXRoYCBub3doZXJlIGluIGl0LlxuICBpdChcInN0cmlwcyBhIHBhdGggYXNzZXRQcmVmaXggaW4gZnJvbnQgb2YgL19uZXh0L1wiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG4vXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKFwiX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIpO1xuICB9KTtcblxuICBpdChcImxlYXZlcyBhIHB1YmxpYy8gZmlsZSB1bmRlciBhIGRpcmVjdG9yeSBuYW1lZCBsaWtlIHRoZSBhc3NldFByZWZpeCBhbG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvY2RuL2xvZ28ucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcIi9jZG5cIixcbiAgICAgIH0sXG4gICAgICBJbmZpbml0eSxcbiAgICApO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCJjZG4vbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwiaWdub3JlcyBhbiBhYnNvbHV0ZSBhc3NldFByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICB7XG4gICAgICAgIHVybEJhc2VQYXRoOiBcIlwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICAgIGFzc2V0UHJlZml4OiBcImh0dHBzOi8vY2RuLmV4YW1wbGUudGVzdFwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcIl9uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJvbmx5IG1hdGNoZXMgYmFzZVBhdGggb24gYSBwYXRoIGJvdW5kYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBvaygpO1xuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9iYXNlbWVudC9sb2dvLnBuZ1wiLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiYmFzZVwiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2UvYmFzZW1lbnQvbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIC8vIENhcnJpZWQgb3ZlciBmcm9tICMyNjcsIHdoaWNoIGZpeGVkIHRoZSBzYW1lIGJ1ZyBpbiB0aGUgcHJlLWFkYXB0ZXIgaW1hZ2VcbiAgLy8gaGFuZGxlcjogYSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlIGNhbiBhcnJpdmUgd2l0aCBhIHRyYWlsaW5nIHNsYXNoLlxuICBpdChcImRvZXNuJ3QgZG91YmxlIHRoZSBzZXBhcmF0b3Igd2hlbiB0aGUga2V5IHByZWZpeCBoYXMgYSB0cmFpbGluZyBzbGFzaFwiLCBhc3luYyAoKSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvc3RhdGljL2Zvby5qcGdcIixcbiAgICAgIHtcbiAgICAgICAgdXJsQmFzZVBhdGg6IFwiXCIsXG4gICAgICAgIGtleVByZWZpeDogXCJiYXNlL1wiLFxuICAgICAgfSxcbiAgICAgIEluZmluaXR5LFxuICAgICk7XG5cbiAgICBleHBlY3Qoa2V5T2YoKSkudG9CZShcImJhc2Uvc3RhdGljL2Zvby5qcGdcIik7XG4gIH0pO1xuXG4gIC8vIGBuZXh0LWltYWdlLWxlZ2FjeS91bmljb2RlYCwgd2hvc2UgYHB1YmxpYy9gIGhvbGRzIGJvdGggb2YgdGhlc2UgbmFtZXMuIFRoZVxuICAvLyBzcGFjZSBpcyB3aGF0IGJyb2tlOiB0aGUga2V5IGlzIHRoZSBmaWxlJ3MgcmVhbCBuYW1lLCB0aGUgdXJsIGlzIGEgVVJMIHBhdGguXG4gIGl0LmVhY2goW1xuICAgIFtcIi9oZWxsbyUyMHdvcmxkLmpwZ1wiLCBcImhlbGxvIHdvcmxkLmpwZ1wiXSxcbiAgICBbXCIvw6TDtsO8xaHEjcWZw60ucG5nXCIsIFwiw6TDtsO8xaHEjcWZw60ucG5nXCJdLFxuICAgIFtcIi8lQzMlQTQlQzMlQjYucG5nXCIsIFwiw6TDti5wbmdcIl0sXG4gIF0pKFwiZGVjb2RlcyAlcyBpbnRvIHRoZSBvYmplY3QncyByZWFsIG5hbWVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCB1cmwsIFJPT1QsIEluZmluaXR5KTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIC8vIEEgY2FjaGUtYnVzdGVyIG9uIGEgbG9jYWwgc3JjOiBgbmV4dCBzdGFydGAgcm91dGVzIHRoZSBocmVmIGFzIGEgcmVxdWVzdCwgc29cbiAgLy8gdGhlIHF1ZXJ5IGFuZCBmcmFnbWVudCBuZXZlciByZWFjaCB0aGUgZmlsZSBsb29rdXAuXG4gIGl0LmVhY2goW1xuICAgIFtcIi9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvbG9nby5wbmcjdG9wXCIsIFwibG9nby5wbmdcIl0sXG4gICAgW1wiL2xvZ28ucG5nP3Y9MiN0b3BcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICBbXCIvYmFzZS9sb2dvLnBuZz92PTJcIiwgXCJsb2dvLnBuZ1wiXSxcbiAgICAvLyBBIGA/YCB0aGF0IGlzIHBhcnQgb2YgdGhlIG5hbWUgYXJyaXZlcyBlbmNvZGVkIGFuZCBpcyBub3QgYSBxdWVyeS5cbiAgICBbXCIvd2hhdCUzRi5wbmc/dj0yXCIsIFwid2hhdD8ucG5nXCJdLFxuICBdKShcImtleXMgJXMgYnkgaXRzIHBhdGggYWxvbmVcIiwgYXN5bmMgKHVybCwga2V5KSA9PiB7XG4gICAgb2soKTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgdXJsLFxuICAgICAge1xuICAgICAgICB1cmxCYXNlUGF0aDogXCIvYmFzZVwiLFxuICAgICAgICBrZXlQcmVmaXg6IFwiXCIsXG4gICAgICB9LFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChrZXlPZigpKS50b0JlKGtleSk7XG4gIH0pO1xuXG4gIGl0KFwibGVhdmVzIGEgbmFtZSB0aGF0IGlzbid0IHZhbGlkIHBlcmNlbnQtZW5jb2RpbmcgYWxvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG9rKCk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvMTAwJS5wbmdcIiwgUk9PVCwgSW5maW5pdHkpO1xuXG4gICAgZXhwZWN0KGtleU9mKCkpLnRvQmUoXCIxMDAlLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgYnVmZmVyLCBjb250ZW50IHR5cGUsIGFuZCBldGFnXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL2pwZWdcIixcbiAgICAgIEVUYWc6ICdcInRoZS1ldGFnXCInLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28uanBnXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuYnVmZmVyLnRvU3RyaW5nKCkpLnRvQmUoXCJoZWxsb1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlKFwiaW1hZ2UvanBlZ1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoJ1widGhlLWV0YWdcIicpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYW4gZW1wdHkgZXRhZyB3aGVuIFMzIGRvZXNuJ3QgcHJvdmlkZSBvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBudWxsLFxuICAgICAgRVRhZzogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICBzMyxcbiAgICAgIFwibXktYnVja2V0XCIsXG4gICAgICBcIi9mb28ucG5nXCIsXG4gICAgICBST09ULFxuICAgICAgSW5maW5pdHksXG4gICAgKTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXRhZykudG9CZShcIlwiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICAvLyBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCB3aGljaCBgbmV4dCBzdGFydGAgZW5mb3JjZXMgb24gbG9jYWwgc291cmNlcy5cbiAgaXQoXCJyZWZ1c2VzIGFuIG9iamVjdCB3aG9zZSBDb250ZW50TGVuZ3RoIGlzIG92ZXIgdGhlIGxpbWl0LCB1bnJlYWRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3kgPSBqZXN0LmZuKCk7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogeyAuLi5hc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJuZXZlciByZWFkXCIpXSksIGRlc3Ryb3kgfSxcbiAgICAgIENvbnRlbnRMZW5ndGg6IDExLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL2JpZy5wbmdcIiwgUk9PVCwgMTApLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIGV4cGVjdChkZXN0cm95KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gIH0pO1xuXG4gIGl0KFwic3RvcHMgcmVhZGluZyBvbmNlIHRoZSBieXRlcyByZWFkIHBhc3MgdGhlIGxpbWl0XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJoZWxcIiksIEJ1ZmZlci5mcm9tKFwibG9cIildKSxcbiAgICB9KTtcblxuICAgIGF3YWl0IGV4cGVjdChcbiAgICAgIGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iaWcucG5nXCIsIFJPT1QsIDQpLFxuICAgICkucmVqZWN0cy50b0JlSW5zdGFuY2VPZihJbWFnZVRvb0xhcmdlRXJyb3IpO1xuICAgIC8vIEF0IHRoZSBsaW1pdCBleGFjdGx5IGlzIGZpbmUuXG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgICBDb250ZW50TGVuZ3RoOiA1LFxuICAgIH0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9vay5wbmdcIiwgUk9PVCwgNSk7XG4gICAgZXhwZWN0KHJlc3VsdC5idWZmZXIudG9TdHJpbmcoKSkudG9CZShcImhlbGxvXCIpO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIFMzIHJldHVybnMgbm8gYm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoeyBCb2R5OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvbWlzc2luZy5wbmdcIiwgUk9PVCwgSW5maW5pdHkpLFxuICAgICkucmVqZWN0cy50b1Rocm93KC9FbXB0eSByZXNwb25zZSBmcm9tIFMzLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZXh0cmFjdEV0YWdcIiwgKCkgPT4ge1xuICBjb25zdCBpbWFnZSA9IEJ1ZmZlci5mcm9tKFwibm90IHJlYWxseSBhIHBuZ1wiKTtcblxuICAvLyBXaGF0IG5leHQncyBvd24gYGV4dHJhY3RFdGFnYCByZXR1cm5zIGZvciB0aGVzZSBpbnB1dHMsIHJlY29yZGVkIGZyb21cbiAgLy8gMTYuNCdzIGBpbWFnZS1vcHRpbWl6ZXIvZXh0cmFjdC1ldGFnLmpzYDogYSBsaXRlcmFsLCBzbyB0aGUgdGVzdCBydW5zIG9uXG4gIC8vIGV2ZXJ5IHN1cHBvcnRlZCBgbmV4dGAsIGluY2x1ZGluZyB0aG9zZSB3aXRob3V0IHRoYXQgbW9kdWxlLlxuICBpdChcIm1hdGNoZXMgbmV4dCdzIG93biwgd2l0aCBhbmQgd2l0aG91dCBhbiB1cHN0cmVhbSBldGFnXCIsICgpID0+IHtcbiAgICBleHBlY3QoZXh0cmFjdEV0YWcoJ1cvXCJhYmNcIicsIGltYWdlKSkudG9CZShcIlZ5OGlZV0pqSWdcIik7XG4gICAgZm9yIChjb25zdCBtaXNzaW5nIG9mIFtcIlwiLCBudWxsLCB1bmRlZmluZWRdKSB7XG4gICAgICBleHBlY3QoZXh0cmFjdEV0YWcobWlzc2luZywgaW1hZ2UpKS50b0JlKFxuICAgICAgICBcIjZRRTMwNTNqQk83N3ZuaUx4VFhINkM4bnE3LUFhVkJmdTlpcDNOeFBJQ1FcIixcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVFcnJvclJlc3BvbnNlXCIsICgpID0+IHtcbiAgaXQoXCJwcmVzZXJ2ZXMgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGZyb20gYW4gSW1hZ2VFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSW1hZ2VFcnJvcig0MDAsICdcInVybFwiIHBhcmFtZXRlciBpcyBub3QgYWxsb3dlZCcpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1hcHMgYSBzb3VyY2Ugb3ZlciBpbWFnZXMubWF4aW11bVJlc3BvbnNlQm9keSB0byBuZXh0IHN0YXJ0J3MgNDEzXCIsICgpID0+IHtcbiAgICBleHBlY3QoXG4gICAgICByZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgSW1hZ2VUb29MYXJnZUVycm9yKFwiYmlnLnBuZ1wiKSwgSW1hZ2VFcnJvciksXG4gICAgKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDQxMyxcbiAgICAgIG1lc3NhZ2U6ICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byA1MDAgZm9yIHVucmVjb2duaXplZCBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgRXJyb3IoXCJib29tXCIpLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShcIm5vdCBhbiBlcnJvclwiLCBJbWFnZUVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
package/lib/runtime/image.js
CHANGED
|
@@ -112,6 +112,11 @@ class RuntimeImageOptimizer {
|
|
|
112
112
|
// without this, a Lambda could freeze with the regeneration half done.
|
|
113
113
|
waitUntil,
|
|
114
114
|
});
|
|
115
|
+
// A failed render, from next 16.4; `next-server.js` rethrows it the same
|
|
116
|
+
// way. The generator above throws instead, so this is the type's case.
|
|
117
|
+
if (entry && "error" in entry) {
|
|
118
|
+
throw entry.error;
|
|
119
|
+
}
|
|
115
120
|
const value = entry?.value;
|
|
116
121
|
if (value?.kind !== IMAGE_KIND) {
|
|
117
122
|
throw new Error("The image cache returned no image entry");
|
|
@@ -158,7 +163,8 @@ class RuntimeImageOptimizer {
|
|
|
158
163
|
buffer: result.buffer,
|
|
159
164
|
contentType: result.contentType,
|
|
160
165
|
cacheControl: null,
|
|
161
|
-
|
|
166
|
+
// Encoded as for a route's response: `fetchInternalImage` does too.
|
|
167
|
+
etag: (0, image_utils_1.extractEtag)(result.etag, result.buffer),
|
|
162
168
|
};
|
|
163
169
|
}
|
|
164
170
|
catch (error) {
|
|
@@ -186,7 +192,7 @@ class RuntimeImageOptimizer {
|
|
|
186
192
|
buffer: response.body,
|
|
187
193
|
contentType: (0, util_1.firstValue)(response.headers["content-type"]) ?? null,
|
|
188
194
|
cacheControl: (0, util_1.firstValue)(response.headers["cache-control"]) ?? null,
|
|
189
|
-
etag:
|
|
195
|
+
etag: (0, image_utils_1.extractEtag)((0, util_1.firstValue)(response.headers.etag) ?? null, response.body),
|
|
190
196
|
};
|
|
191
197
|
}
|
|
192
198
|
}
|
|
@@ -319,4 +325,4 @@ function loadImageRuntime({ deploymentRoot, manifest }) {
|
|
|
319
325
|
},
|
|
320
326
|
};
|
|
321
327
|
}
|
|
322
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpZEEsc0RBY0M7QUEvZEQsc0RBQXNEO0FBQ3REOzs7Ozs7OztHQVFHO0FBQ0gscUNBQXVDO0FBQ3ZDLHlDQUErRDtBQUMvRCx1Q0FBd0Q7QUFJeEQsOENBQXVFO0FBQ3ZFLCtDQUFrRTtBQUVsRSxpREFBNEM7QUFDNUMsaUNBQThDO0FBeUY5QyxNQUFhLHFCQUFxQjtJQUtJO0lBSm5CLEVBQUUsR0FBRyxJQUFBLGVBQVEsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sQ0FBdUM7SUFDN0MsVUFBVSxDQUF1QjtJQUV6QyxZQUFvQyxPQUE4QjtRQUE5QixZQUFPLEdBQVAsT0FBTyxDQUF1QjtJQUFHLENBQUM7SUFFdEU7Ozs7OztPQU1HO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO0lBQ3hFLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUNqQixHQUF3QixFQUN4QixHQUF1QixFQUN2QixHQUFRLEVBQ1IsU0FBOEM7UUFFOUMsNkVBQTZFO1FBQzdFLGtFQUFrRTtRQUNsRSxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2RCxNQUFNLEVBQ0osVUFBVSxFQUNWLG1CQUFtQixFQUNuQixrQkFBa0IsRUFD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Iiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKipcbiAqIGAvX25leHQvaW1hZ2VgLCBmb2xkZWQgaW50byB0aGUgcnVudGltZSBjb3JlLlxuICpcbiAqIFRoZSByZXNwb25zZSBpcyB3cml0dGVuIHRvIGEge0BsaW5rIFNoaW1TZXJ2ZXJSZXNwb25zZX0gcmF0aGVyIHRoYW4gc3RyYWlnaHQgdG9cbiAqIGEgTGFtYmRhIHJlc3BvbnNlIHN0cmVhbSwgc28gaXQgY29tcG9zZXMgd2l0aCByb3V0aW5nOiBkaXNwYXRjaCBvbmx5IGNsYXNzaWZpZXNcbiAqIGEgcmVxdWVzdCBhcyBpbWFnZSBvcHRpbWl6YXRpb24gKmFmdGVyKiBtaWRkbGV3YXJlIGhhcyBoYWQgaXQsIHdoaWNoIGlzIHdoYXRcbiAqIG1ha2VzIGBOZXh0UmVzcG9uc2UucmV3cml0ZSgpYCBvbnRvIGFuIGltYWdlIHdvcmsuIFRoYXQgaXMgYWxzbyB3aHkgdGhlcmUgaXMgbm9cbiAqIGxvbmdlciBhIGRlZGljYXRlZCBpbWFnZSBvcHRpbWl6YXRpb24gTGFtYmRhIOKAlCBtaWRkbGV3YXJlIG5ldmVyIHJhbiBmb3IgaXQuXG4gKi9cbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBpc0Fic29sdXRlIGFzIGlzQWJzb2x1dGVQYXRoLCBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCwgcGF0aFRvRmlsZVVSTCB9IGZyb20gXCJub2RlOnVybFwiO1xuaW1wb3J0IHR5cGUgeyBOZXh0Q29uZmlnQ29tcGxldGUgfSBmcm9tIFwibmV4dC9kaXN0L3NlcnZlci9jb25maWctc2hhcmVkLmpzXCI7XG5pbXBvcnQgdHlwZSB7IENhY2hlZFJvdXRlS2luZCB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL3R5cGVzLmpzXCI7XG5pbXBvcnQgdHlwZSB7IFNoaW1JbmNvbWluZ01lc3NhZ2UgfSBmcm9tIFwiLi9odHRwL3JlcXVlc3RcIjtcbmltcG9ydCB7IGFzU2VydmVyUmVzcG9uc2UsIFNoaW1TZXJ2ZXJSZXNwb25zZSB9IGZyb20gXCIuL2h0dHAvcmVzcG9uc2VcIjtcbmltcG9ydCB7IGZldGNoRnJvbVMzLCByZXNvbHZlRXJyb3JSZXNwb25zZSB9IGZyb20gXCIuL2ltYWdlLXV0aWxzXCI7XG5pbXBvcnQgeyBBZGFwdGVyTWFuaWZlc3QgfSBmcm9tIFwiLi9tYW5pZmVzdFwiO1xuaW1wb3J0IHsgbmV4dE1vZHVsZSB9IGZyb20gXCIuL25leHQtbW9kdWxlc1wiO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZSwgczNDbGllbnQgfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKlxuICogUmVxdWlyZWQgdGhyb3VnaCB7QGxpbmsgbmV4dE1vZHVsZX0gcmF0aGVyIHRoYW4gaW1wb3J0ZWQsIGJlY2F1c2UgYG5leHRgIGlzXG4gKiBleHRlcm5hbCB0byB0aGUgc2hlbGwgYnVuZGxlcyBhbmQgZG9lcyBub3QgcmVzb2x2ZSBmcm9tIHdoZXJlIHRoZXkgc2l0LiBFdmVyeVxuICogdHlwZSBoZXJlIGlzIHN0aWxsIHRoZSByZWFsIG9uZTogYHR5cGVvZiBpbXBvcnQoLi4uKWAgaXMgZXJhc2VkLlxuICovXG5pbnRlcmZhY2UgTmV4dEltYWdlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IGNvbmZpZ1NoYXJlZDogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvY29uZmlnLXNoYXJlZC5qc1wiKTtcbiAgcmVhZG9ubHkgaW1hZ2VDb25maWc6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWcuanNcIik7XG4gIHJlYWRvbmx5IG9wdGltaXplcjogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIpO1xuICByZWFkb25seSBzZXJ2ZVN0YXRpYzogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCIpO1xufVxuXG4vKiogVGhlIG1vZHVsZXMgb25seSB0aGUgaW1hZ2UgY2FjaGUgbmVlZHMsIGxvYWRlZCB3aXRoIGl0LiAqL1xuaW50ZXJmYWNlIE5leHRJbWFnZUNhY2hlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IHJlc3BvbnNlQ2FjaGU6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpO1xufVxuXG4vKiogQSBgY2FjaGVIYW5kbGVyYCBjbGFzcywgYXMgYG5leHQuY29uZmlnYCdzIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBleHBvcnRzIGl0LiAqL1xudHlwZSBDYWNoZUhhbmRsZXJDbGFzcyA9IG5ldyAoXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKSA9PiBOb25OdWxsYWJsZTxcbiAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFxuICAgIE5leHRJbWFnZU1vZHVsZXNbXCJvcHRpbWl6ZXJcIl1bXCJJbWFnZU9wdGltaXplckNhY2hlXCJdXG4gID5bMF1bXCJjYWNoZUhhbmRsZXJcIl1cbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VPcHRpbWl6ZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGVwbG95bWVudFJvb3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdDtcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfQlVDS0VUX05BTUVgLiBFbXB0eSB3aGVuIHRoZSBzb3VyY2VzIGFyZSBvbiBkaXNrXG4gICAqIChgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYCksIHdoaWNoIHNlbmRzIGV2ZXJ5IG9uZSB0byBgZmV0Y2hJbnRlcm5hbGAuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfS0VZX1BSRUZJWGAuIEVtcHR5IHdoZW4gdGhlIGFzc2V0cyBzaXQgYXQgdGhlIHJvb3RcbiAgICogb2YgdGhlIGJ1Y2tldCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXRLZXlQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcXVlc3RzIGEgbG9jYWwgc291cmNlIGZyb20gdGhlIGFwcCdzIG93biByb3V0ZXMsIGZvciBvbmUgUzMgaGFzIG5vIGZpbGVcbiAgICogZm9yOiBgPEltYWdlIHNyYz1cIi9hcGkvYXZhdGFyP2lkPTQyXCI+YCwgc2VydmVkIGJ5IGEgcm91dGUgaGFuZGxlci4gYG5leHRcbiAgICogc3RhcnRgIGZldGNoZXMgZXZlcnkgbG9jYWwgc291cmNlIHRoYXQgd2F5IChgZmV0Y2hJbnRlcm5hbEltYWdlYCk7IGhlcmUgaXRcbiAgICogaXMgdGhlIGZhbGxiYWNrLCBzaW5jZSBuZWFybHkgZXZlcnkgc291cmNlIGlzIGEgZmlsZSwgYW5kIGEgYEdldE9iamVjdGAgaXNcbiAgICogZmFyIGNoZWFwZXIgdGhhbiBhIHJvdXRlIGludm9jYXRpb24uXG4gICAqXG4gICAqIEdpdmVuIHRoZSByZXF1ZXN0IGJlaW5nIG9wdGltaXplZCwgZm9yIGl0cyBhdXRob3JpdHk7IGxpa2UgYG5leHQgc3RhcnRgLFxuICAgKiB0aGUgdmlld2VyJ3MgY29va2llcyBhbmQgb3RoZXIgaGVhZGVycyBhcmUgbm90IHRoZSBpbXBsZW1lbnRhdGlvbidzIHRvXG4gICAqIGZvcndhcmQuIEFuZCBnaXZlbiBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCBwYXN0IHdoaWNoIGl0IHN0b3BzXG4gICAqIHJlYWRpbmcgYW5kIGFuc3dlcnMge0BsaW5rIEludGVybmFsSW1hZ2VSZXNwb25zZS50b29MYXJnZX0uXG4gICAqL1xuICByZWFkb25seSBmZXRjaEludGVybmFsOiAoXG4gICAgaHJlZjogc3RyaW5nLFxuICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICBtYXhpbXVtUmVzcG9uc2VCb2R5OiBudW1iZXIsXG4gICkgPT4gUHJvbWlzZTxJbnRlcm5hbEltYWdlUmVzcG9uc2U+O1xuICAvKipcbiAgICogTG9hZHMgdGhlIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBmcm9tIGl0cyBmaWxlIFVSTC4gQSBzZWFtIGZvciB0ZXN0cywgd2hpY2hcbiAgICogcnVuIGFzIENvbW1vbkpTIGFuZCBjYW5ub3QgYGltcG9ydCgpYCBhIFVSTC5cbiAgICogQGRlZmF1bHQgLSBgaW1wb3J0KClgXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRNb2R1bGU/OiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKiBUaGUgcmVzcG9uc2Uge0BsaW5rIEltYWdlT3B0aW1pemVyT3B0aW9ucy5mZXRjaEludGVybmFsfSBnb3QuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsSW1hZ2VSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVhZGVyczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+PjtcbiAgcmVhZG9ubHkgYm9keTogQnVmZmVyO1xuICAvKipcbiAgICogVGhlIGBmdW5jdGlvbkdyb3Vwc2AgZ3JvdXAgd2hvc2UgcGFja2FnZSBoYXMgdGhlIHJvdXRlIHRoYXQgc2VydmVzIHRoZVxuICAgKiBzb3VyY2UsIHdoZW4gaXQgaXMgbm90IHRoaXMgZnVuY3Rpb24nczogdGhlcmUgaXMgbm8gcmVzcG9uc2UgdG8gdXNlLCBhbmRcbiAgICogdGhlIG9wdGltaXplciBhbnN3ZXJzIGFuIGV4cGxpY2l0IDUwMiByYXRoZXIgdGhhbiBhIFwibm90IGEgdmFsaWQgaW1hZ2VcIi5cbiAgICovXG4gIHJlYWRvbmx5IG90aGVyR3JvdXA/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYm9keSBwYXNzZWQgYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCwgc28gaXQgd2FzIGN1dCBvZmY6IGEgNDEzLCBhc1xuICAgKiBgbmV4dCBzdGFydGAgYW5zd2Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHRvb0xhcmdlPzogYm9vbGVhbjtcbn1cblxuLyoqIFdoYXQgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBpcyByZWFkIGZvci4gKi9cbmludGVyZmFjZSBSZXF1aXJlZFNlcnZlckZpbGVzIHtcbiAgY29uZmlnOiBOZXh0Q29uZmlnQ29tcGxldGU7XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lSW1hZ2VPcHRpbWl6ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHMzID0gczNDbGllbnQoKTtcbiAgcHJpdmF0ZSBsb2FkZWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPjtcbiAgcHJpdmF0ZSBpbWFnZUNhY2hlPzogUHJvbWlzZTxJbWFnZUNhY2hlPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbWFnZU9wdGltaXplck9wdGlvbnMpIHt9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFwcCBzZXJ2ZXMgYC9fbmV4dC9pbWFnZWAgYXQgYWxsLiBgbmV4dCBzdGFydGAgYW5zd2VycyA0MDRcbiAgICogd2hlbiBgaW1hZ2VzLnVub3B0aW1pemVkYCBpcyBzZXQgb3IgYSBub24tZGVmYXVsdCBgbG9hZGVyYCBpcyBjb25maWd1cmVkXG4gICAqIChgbmV4dC1zZXJ2ZXIuanNgKSwgYW5kIHNvIGRvZXMgdGhlIHJ1bnRpbWU6IG90aGVyd2lzZSBhbnlvbmUgY2FuIG1ha2UgdGhlXG4gICAqIGNvbXB1dGUgcnVuIHNoYXJwIGFuZCB3cml0ZSB0aGUgaW1hZ2UgY2FjaGUgb24gYW4gZW5kcG9pbnQgdGhlIGFwcCB0dXJuZWRcbiAgICogb2ZmLlxuICAgKi9cbiAgcHVibGljIGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICB0aGlzLmxvYWRlZCA/Pz0gbG9hZEltYWdlUnVudGltZSh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgaW1hZ2VzQ29uZmlnIH0gPSB0aGlzLmxvYWRlZDtcbiAgICByZXR1cm4gaW1hZ2VzQ29uZmlnLmxvYWRlciA9PT0gXCJkZWZhdWx0XCIgJiYgIWltYWdlc0NvbmZpZy51bm9wdGltaXplZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGUoXG4gICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogU2hpbVNlcnZlclJlc3BvbnNlLFxuICAgIHVybDogVVJMLFxuICAgIHdhaXRVbnRpbDogKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4pID0+IHZvaWQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJlc29sdmVkIG9uIHRoZSBmaXJzdCBpbWFnZSByZXF1ZXN0IHJhdGhlciB0aGFuIGF0IGNvbGQgc3RhcnQ6IGFuIGFwcCB3aXRoXG4gICAgLy8gbm8gYDxJbWFnZT5gIHNob3VsZCBwYXkgbmVpdGhlciB0aGUgYG5leHRgIG1vZHVsZSBsb2FkcyBub3IgdGhlXG4gICAgLy8gYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBwYXJzZS5cbiAgICB0aGlzLmxvYWRlZCA/Pz0gbG9hZEltYWdlUnVudGltZSh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgbmV4dCwgbmV4dENvbmZpZywgaW1hZ2VzQ29uZmlnIH0gPSB0aGlzLmxvYWRlZDtcbiAgICBjb25zdCB7XG4gICAgICBJbWFnZUVycm9yLFxuICAgICAgSW1hZ2VPcHRpbWl6ZXJDYWNoZSxcbiAgICAgIGZldGNoRXh0ZXJuYWxJbWFnZSxcbiAgICAgIGltYWdlT3B0aW1pemVyLFxuICAgICAgc2VuZFJlc3BvbnNlLFxuICAgIH0gPSBuZXh0Lm9wdGltaXplcjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBJbWFnZU9wdGltaXplckNhY2hlLnZhbGlkYXRlUGFyYW1zKFxuICAgICAgICByZXEgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICAgIHR5cGVvZiBJbWFnZU9wdGltaXplckNhY2hlLnZhbGlkYXRlUGFyYW1zXG4gICAgICAgID5bMF0sXG4gICAgICAgIE9iamVjdC5mcm9tRW50cmllcyh1cmwuc2VhcmNoUGFyYW1zKSxcbiAgICAgICAgbmV4dENvbmZpZyxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgICAgaWYgKFwiZXJyb3JNZXNzYWdlXCIgaW4gcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBzZW5kVGV4dChyZXMsIDQwMCwgcGFyYW1zLmVycm9yTWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaHJlZiwgaXNBYnNvbHV0ZSB9ID0gcGFyYW1zO1xuICAgICAgY29uc3Qgb3B0aW1pemUgPSBhc3luYyAocHJldmlvdXNDYWNoZUVudHJ5PzogUHJldmlvdXNJbWFnZUVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwc3RyZWFtID0gaXNBYnNvbHV0ZVxuICAgICAgICAgID8gYXdhaXQgZmV0Y2hFeHRlcm5hbEltYWdlKFxuICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcuZGFuZ2Vyb3VzbHlBbGxvd0xvY2FsSVAsXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5tYXhpbXVtUmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcubWF4aW11bVJlZGlyZWN0cyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGF3YWl0IHRoaXMuZmV0Y2hMb2NhbChcbiAgICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICBuZXh0Q29uZmlnLFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcubWF4aW11bVJlc3BvbnNlQm9keSxcbiAgICAgICAgICAgICAgbmV4dC5vcHRpbWl6ZXIsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG9wdGltaXplZCA9IGF3YWl0IGltYWdlT3B0aW1pemVyKFxuICAgICAgICAgIHVwc3RyZWFtLFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHBlcmltZW50YWw6IG5leHRDb25maWcuZXhwZXJpbWVudGFsLFxuICAgICAgICAgICAgaW1hZ2VzOiB7XG4gICAgICAgICAgICAgIGRhbmdlcm91c2x5QWxsb3dTVkc6IGltYWdlc0NvbmZpZy5kYW5nZXJvdXNseUFsbG93U1ZHLFxuICAgICAgICAgICAgICBtaW5pbXVtQ2FjaGVUVEw6IGltYWdlc0NvbmZpZy5taW5pbXVtQ2FjaGVUVEwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBpc0RldjogZmFsc2UsIHByZXZpb3VzQ2FjaGVFbnRyeSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGBpbWFnZU9wdGltaXplcmAgcmVwb3J0cyBhIGZhaWxlZCBvcHRpbWl6YXRpb24gYnkgcmV0dXJuaW5nIHRoZVxuICAgICAgICAvLyB1bnRvdWNoZWQgdXBzdHJlYW0gaW1hZ2UgYWxvbmdzaWRlIGBlcnJvcmAgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNvXG4gICAgICAgIC8vIHdpdGhvdXQgdGhpcyBhIGJyb2tlbiBgc2hhcnBgIGluc3RhbGwgc2VydmVzIGZ1bGwtc2l6ZSBvcmlnaW5hbHMgd2l0aFxuICAgICAgICAvLyBhIDIwMCBpbmRlZmluaXRlbHkgYW5kIG5vdGhpbmcgaW4gdGhlIGxvZ3Mgc2F5cyB3aHkuXG4gICAgICAgIGlmIChvcHRpbWl6ZWQuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBvcHRpbWl6ZSAke2hyZWZ9LCBzZXJ2aW5nIHRoZSB1bm9wdGltaXplZCBvcmlnaW5hbDpgLFxuICAgICAgICAgICAgb3B0aW1pemVkLmVycm9yLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGltaXplZDtcbiAgICAgIH07XG5cbiAgICAgIC8vIE5leHQncyBvd24gcmVzcG9uc2Ugd3JpdGVyLCByYXRoZXIgdGhhbiBhIHJlc3RhdGVtZW50IG9mIGl0LCBzbyB0aGVcbiAgICAgIC8vIGhlYWRlcnMgYG5leHQgc3RhcnRgIHNlbmRzIGNvbWUgd2l0aCBpdDogdGhlIHllYXItbG9uZyBgaW1tdXRhYmxlYCBmb3JcbiAgICAgIC8vIGEgYC9fbmV4dC9zdGF0aWMvbWVkaWFgIHNyYywgYElmLU5vbmUtTWF0Y2hgIGFzIGBmcmVzaGAgcmVhZHMgaXQgKHdlYWtcbiAgICAgIC8vIGFuZCBsaXN0ZWQgdGFncywgYENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlYCksIGEgYENvbnRlbnQtRGlzcG9zaXRpb25gXG4gICAgICAvLyB0aGF0IFJGQyA1OTg3LWVuY29kZXMgYSBmaWxlbmFtZSBgd3JpdGVIZWFkYCB3b3VsZCByZWplY3QgYXNcbiAgICAgIC8vIG5vbi1sYXRpbjEsIGBDb250ZW50LUxlbmd0aGAsIGFuZCBubyBib2R5IGZvciBIRUFELiBUaGUgcmVzdGF0ZWRcbiAgICAgIC8vIHZlcnNpb24gaGFkIGRyaWZ0ZWQgb24gZXZlcnkgb25lIG9mIHRob3NlLlxuICAgICAgY29uc3Qgc2VuZCA9IChcbiAgICAgICAgZXh0ZW5zaW9uOiBzdHJpbmcsXG4gICAgICAgIGJ1ZmZlcjogQnVmZmVyLFxuICAgICAgICBldGFnOiBzdHJpbmcsXG4gICAgICAgIHhDYWNoZTogXCJNSVNTXCIgfCBcIkhJVFwiIHwgXCJTVEFMRVwiLFxuICAgICAgICBtYXhBZ2U6IG51bWJlcixcbiAgICAgICkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgc2VuZFJlc3BvbnNlKFxuICAgICAgICAgIHJlcSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHNlbmRSZXNwb25zZT5bMF0sXG4gICAgICAgICAgYXNTZXJ2ZXJSZXNwb25zZShyZXMpLFxuICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgZXh0ZW5zaW9uLFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBldGFnLFxuICAgICAgICAgIHBhcmFtcy5pc1N0YXRpYyxcbiAgICAgICAgICB4Q2FjaGUsXG4gICAgICAgICAgaW1hZ2VzQ29uZmlnLFxuICAgICAgICAgIG1heEFnZSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIGBuZXh0IHN0YXJ0YCdzIGBoYW5kbGVOZXh0SW1hZ2VSZXF1ZXN0YCwgc3RlcCBmb3Igc3RlcDogYVxuICAgICAgLy8gYFJlc3BvbnNlQ2FjaGVgIG92ZXIgYW4gYEltYWdlT3B0aW1pemVyQ2FjaGVgIGJhY2tlZCBieSB0aGUgYXBwJ3NcbiAgICAgIC8vIGBjYWNoZUhhbmRsZXJgLCBzbyBhIGhpdCBza2lwcyB0aGUgZmV0Y2ggYW5kIGBzaGFycGAsIGEgc3RhbGUgZW50cnkgaXNcbiAgICAgIC8vIHNlcnZlZCB3aGlsZSBpdCBpcyByZWdlbmVyYXRlZCwgYW5kIGNvbmN1cnJlbnQgbWlzc2VzIGZvciBvbmUgaW1hZ2VcbiAgICAgIC8vIG9wdGltaXplIGl0IG9uY2UuIFRoZSBhcHAncyBgY2FjaGVIYW5kbGVyYCBpcyB0aGUgUzMgY2FjaGUsIHdoaWNoIHRoZVxuICAgICAgLy8gYWRhcHRlciB0dXJucyBvbiB3aXRoIGBpbWFnZXMuY3VzdG9tQ2FjaGVIYW5kbGVyYDogd2l0aCBubyBDRE4gaW4gZnJvbnRcbiAgICAgIC8vICh0aGUgUmVnaW9uYWwgdHlwZXMpIGV2ZXJ5IHJlcXVlc3Qgd291bGQgb3RoZXJ3aXNlIHJ1biBgc2hhcnBgIGFnYWluLFxuICAgICAgLy8gYW5kIGJlaGluZCBDbG91ZEZyb250IGVhY2ggZWRnZSBtaXNzIGlzIGFuIFMzIHJlYWQgaW5zdGVhZC5cbiAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUodGhpcy5sb2FkZWQpO1xuICAgICAgY29uc3QgZW50cnkgPSBhd2FpdCBjYWNoZS5yZXNwb25zZXMuZ2V0KFxuICAgICAgICBJbWFnZU9wdGltaXplckNhY2hlLmdldENhY2hlS2V5KHBhcmFtcyksXG4gICAgICAgIGFzeW5jICh7IHByZXZpb3VzQ2FjaGVFbnRyeSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBidWZmZXIsIGNvbnRlbnRUeXBlLCBtYXhBZ2UsIGV0YWcsIHVwc3RyZWFtRXRhZyB9ID1cbiAgICAgICAgICAgIGF3YWl0IG9wdGltaXplKHByZXZpb3VzQ2FjaGVFbnRyeSBhcyBQcmV2aW91c0ltYWdlRW50cnkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBraW5kOiBJTUFHRV9LSU5ELFxuICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgIGV0YWcsXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjogbmV4dC5zZXJ2ZVN0YXRpYy5nZXRFeHRlbnNpb24oY29udGVudFR5cGUpID8/IFwiXCIsXG4gICAgICAgICAgICAgIHVwc3RyZWFtRXRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHsgcmV2YWxpZGF0ZTogbWF4QWdlLCBleHBpcmU6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICByb3V0ZUtpbmQ6IElNQUdFX0tJTkQsXG4gICAgICAgICAgaW5jcmVtZW50YWxDYWNoZTogZGVmZXJXcml0ZXMoY2FjaGUuaW1hZ2VzLCB3YWl0VW50aWwpLFxuICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIC8vIEEgc3RhbGUgZW50cnkgaXMgc2VydmVkIGF0IG9uY2UgYW5kIHJlZ2VuZXJhdGVkIGluIHRoZSBiYWNrZ3JvdW5kO1xuICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcywgYSBMYW1iZGEgY291bGQgZnJlZXplIHdpdGggdGhlIHJlZ2VuZXJhdGlvbiBoYWxmIGRvbmUuXG4gICAgICAgICAgd2FpdFVudGlsLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxJbWFnZUNhY2hlW1wicmVzcG9uc2VzXCJdW1wiZ2V0XCJdPlsyXSxcbiAgICAgICk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGVudHJ5Py52YWx1ZSBhc1xuICAgICAgICB8IHtcbiAgICAgICAgICAgIGtpbmQ6IHN0cmluZztcbiAgICAgICAgICAgIGV4dGVuc2lvbjogc3RyaW5nO1xuICAgICAgICAgICAgYnVmZmVyOiBCdWZmZXI7XG4gICAgICAgICAgICBldGFnOiBzdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICB8IG51bGxcbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodmFsdWU/LmtpbmQgIT09IElNQUdFX0tJTkQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIGltYWdlIGNhY2hlIHJldHVybmVkIG5vIGltYWdlIGVudHJ5XCIpO1xuICAgICAgfVxuICAgICAgc2VuZChcbiAgICAgICAgdmFsdWUuZXh0ZW5zaW9uLFxuICAgICAgICB2YWx1ZS5idWZmZXIsXG4gICAgICAgIHZhbHVlLmV0YWcsXG4gICAgICAgIGVudHJ5IS5pc01pc3MgPyBcIk1JU1NcIiA6IGVudHJ5IS5pc1N0YWxlID8gXCJTVEFMRVwiIDogXCJISVRcIixcbiAgICAgICAgZW50cnkhLmNhY2hlQ29udHJvbD8ucmV2YWxpZGF0ZSB8fCAwLFxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBzdGF0dXNDb2RlLCBtZXNzYWdlIH0gPSByZXNvbHZlRXJyb3JSZXNwb25zZShlcnJvciwgSW1hZ2VFcnJvcik7XG4gICAgICBpZiAoc3RhdHVzQ29kZSA+PSA1MDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkltYWdlIG9wdGltaXphdGlvbiBmYWlsZWQ6XCIsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHNlbmRUZXh0KHJlcywgc3RhdHVzQ29kZSwgbWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2aWN0ZWQgb24gZmFpbHVyZSwgYXMgYEVudHJ5cG9pbnRSZWdpc3RyeS5sb2FkYCBldmljdHMgYSBmYWlsZWQgbW9kdWxlIGxvYWQ6XG4gICAqIGEgdHJhbnNpZW50IGZhaWx1cmUgaW1wb3J0aW5nIHRoZSBgY2FjaGVIYW5kbGVyYCAoRU1GSUxFIHVuZGVyIGEgY29sZC1zdGFydFxuICAgKiBidXJzdCkgd291bGQgb3RoZXJ3aXNlIDUwMCBldmVyeSBpbWFnZSByZXF1ZXN0IHVudGlsIHRoZSBzYW5kYm94IHJlY3ljbGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkQ2FjaGUoXG4gICAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbiAgKTogUHJvbWlzZTxJbWFnZUNhY2hlPiB7XG4gICAgaWYgKCF0aGlzLmltYWdlQ2FjaGUpIHtcbiAgICAgIGNvbnN0IGNhY2hlID0gbG9hZEltYWdlQ2FjaGUodGhpcy5vcHRpb25zLCBsb2FkZWQpO1xuICAgICAgdGhpcy5pbWFnZUNhY2hlID0gY2FjaGU7XG4gICAgICBjYWNoZS5jYXRjaCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmltYWdlQ2FjaGUgPT09IGNhY2hlKSB7XG4gICAgICAgICAgdGhpcy5pbWFnZUNhY2hlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW1hZ2VDYWNoZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hMb2NhbChcbiAgICByZXE6IFNoaW1JbmNvbWluZ01lc3NhZ2UsXG4gICAgaHJlZjogc3RyaW5nLFxuICAgIG5leHRDb25maWc6IFJldHVyblR5cGU8dHlwZW9mIGxvYWRJbWFnZVJ1bnRpbWU+W1wibmV4dENvbmZpZ1wiXSxcbiAgICBtYXhpbXVtUmVzcG9uc2VCb2R5OiBudW1iZXIsXG4gICAgb3B0aW1pemVyOiBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdLFxuICApIHtcbiAgICBjb25zdCB7IGJ1Y2tldCwgZmV0Y2hJbnRlcm5hbCB9ID0gdGhpcy5vcHRpb25zO1xuICAgIC8vIE5vIGJ1Y2tldCB3aGVuIHRoZSBzb3VyY2VzIGFyZSBvbiBkaXNrIChgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYCksIGFuZFxuICAgIC8vIHRoZSByb3V0ZXMgc2VydmUgdGhvc2UgYXMgdGhleSBzZXJ2ZSBhbnl0aGluZyBTMyBoYXMgbm8gZmlsZSBmb3IuXG4gICAgaWYgKGJ1Y2tldCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoXG4gICAgICAgICAgdGhpcy5zMyxcbiAgICAgICAgICBidWNrZXQsXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICB7XG4gICAgICAgICAgICB1cmxCYXNlUGF0aDogbmV4dENvbmZpZy5iYXNlUGF0aCxcbiAgICAgICAgICAgIGtleVByZWZpeDogdGhpcy5vcHRpb25zLmJ1Y2tldEtleVByZWZpeCxcbiAgICAgICAgICAgIGFzc2V0UHJlZml4OiBuZXh0Q29uZmlnLmFzc2V0UHJlZml4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWF4aW11bVJlc3BvbnNlQm9keSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBidWZmZXI6IHJlc3VsdC5idWZmZXIsXG4gICAgICAgICAgY29udGVudFR5cGU6IHJlc3VsdC5jb250ZW50VHlwZSxcbiAgICAgICAgICBjYWNoZUNvbnRyb2w6IG51bGwsXG4gICAgICAgICAgZXRhZzogcmVzdWx0LmV0YWcsXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBtaXNzaW5nID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vU3VjaEtleVwiO1xuICAgICAgICBpZiAoIW1pc3NpbmcpIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoYXQgYGZldGNoSW50ZXJuYWxJbWFnZWAgY2hlY2tzLCBhbmQgdGhyb3dzLCBmb3IgdGhlIHNhbWUgcmVzcG9uc2UuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaEludGVybmFsKGhyZWYsIHJlcSwgbWF4aW11bVJlc3BvbnNlQm9keSk7XG4gICAgaWYgKHJlc3BvbnNlLm90aGVyR3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSBkZXBsb3ltZW50IHByb2JsZW0sIG5vdCBhIGJhZCBgdXJsYDogbGVhdmUgdGhlIHJvdXRlIGluIHRoZSBkZWZhdWx0XG4gICAgICAvLyBncm91cCwgb3Igc2VydmUgdGhlIGltYWdlIGFzIGEgZmlsZSAocHVibGljLyBvciBhIHN0YXRpYyBpbXBvcnQpLlxuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA1MDIsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaXRzIHNvdXJjZSBpcyBhIHJvdXRlIGluIGFub3RoZXIgJyArXG4gICAgICAgICAgYGZ1bmN0aW9uR3JvdXBzIGdyb3VwIChcIiR7cmVzcG9uc2Uub3RoZXJHcm91cH1cIiksIHdoaWNoIHRoZSBpbWFnZSBgICtcbiAgICAgICAgICBcIm9wdGltaXplciBjYW5ub3QgZmV0Y2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyZXNwb25zZS50b29MYXJnZSkge1xuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA0MTMsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXJlc3BvbnNlLnN0YXR1c0NvZGUgfHwgcmVzcG9uc2UuYm9keS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBvcHRpbWl6ZXIuSW1hZ2VFcnJvcihcbiAgICAgICAgNDAwLFxuICAgICAgICAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgdmFsaWQgYnV0IGludGVybmFsIHJlc3BvbnNlIGlzIGludmFsaWQnLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1ZmZlcjogcmVzcG9uc2UuYm9keSxcbiAgICAgIGNvbnRlbnRUeXBlOiBmaXJzdFZhbHVlKHJlc3BvbnNlLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0pID8/IG51bGwsXG4gICAgICBjYWNoZUNvbnRyb2w6IGZpcnN0VmFsdWUocmVzcG9uc2UuaGVhZGVyc1tcImNhY2hlLWNvbnRyb2xcIl0pID8/IG51bGwsXG4gICAgICBldGFnOiBvcHRpbWl6ZXIuZXh0cmFjdEV0YWcoXG4gICAgICAgIGZpcnN0VmFsdWUocmVzcG9uc2UuaGVhZGVycy5ldGFnKSA/PyBudWxsLFxuICAgICAgICByZXNwb25zZS5ib2R5LFxuICAgICAgKSxcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogYENhY2hlZFJvdXRlS2luZC5JTUFHRWAsIHdoaWNoIGlzIGFsc28gYFJvdXRlS2luZC5JTUFHRWAuIFJlc3RhdGVkOiB0aGUgZW51bSBpc1xuICogYSBydW50aW1lIHZhbHVlIG9mIGBuZXh0YCwgd2hpY2ggdGhlIGJ1bmRsZSBjYW5ub3QgaW1wb3J0LlxuICovXG5jb25zdCBJTUFHRV9LSU5EID0gXCJJTUFHRVwiIGFzIENhY2hlZFJvdXRlS2luZC5JTUFHRTtcblxuLyoqIGBpbWFnZU9wdGltaXplcmAncyBgcHJldmlvdXNDYWNoZUVudHJ5YC4gKi9cbnR5cGUgUHJldmlvdXNJbWFnZUVudHJ5ID0gUGFyYW1ldGVyczxcbiAgTmV4dEltYWdlTW9kdWxlc1tcIm9wdGltaXplclwiXVtcImltYWdlT3B0aW1pemVyXCJdXG4+WzNdW1wicHJldmlvdXNDYWNoZUVudHJ5XCJdO1xuXG5pbnRlcmZhY2UgSW1hZ2VDYWNoZSB7XG4gIHJlYWRvbmx5IHJlc3BvbnNlczogSW5zdGFuY2VUeXBlPFxuICAgIE5leHRJbWFnZUNhY2hlTW9kdWxlc1tcInJlc3BvbnNlQ2FjaGVcIl1bXCJkZWZhdWx0XCJdXG4gID47XG4gIHJlYWRvbmx5IGltYWdlczogSW5zdGFuY2VUeXBlPFxuICAgIE5leHRJbWFnZU1vZHVsZXNbXCJvcHRpbWl6ZXJcIl1bXCJJbWFnZU9wdGltaXplckNhY2hlXCJdXG4gID47XG59XG5cbi8qKlxuICogVGhlIGFwcCdzIGBjYWNoZUhhbmRsZXJgLCBjb25zdHJ1Y3RlZCB0aGUgd2F5IGBuZXh0IHN0YXJ0YCBjb25zdHJ1Y3RzIGl0IGZvclxuICogaW1hZ2VzIChgbmV4dC1zZXJ2ZXIuanNgLCBgaGFuZGxlTmV4dEltYWdlUmVxdWVzdGApOiBvbmNlLCBhbmQga2VwdCwgc28gaXRzXG4gKiBpbi1tZW1vcnkgbGF5ZXIgbGFzdHMgYWNyb3NzIHJlcXVlc3RzLiBJdHMgcGF0aCBpbiBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gXG4gKiBpcyByZWxhdGl2ZSB0byB0aGUgZGlzdCBkaXI7IHNlZSB7QGxpbmsgY2FjaGVIYW5kbGVyVXJsfS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbG9hZEltYWdlQ2FjaGUoXG4gIHsgZGVwbG95bWVudFJvb3QsIG1hbmlmZXN0LCBpbXBvcnRNb2R1bGUgfTogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zLFxuICBsb2FkZWQ6IFJldHVyblR5cGU8dHlwZW9mIGxvYWRJbWFnZVJ1bnRpbWU+LFxuKTogUHJvbWlzZTxJbWFnZUNhY2hlPiB7XG4gIGNvbnN0IHsgbmV4dCwgbmV4dENvbmZpZyB9ID0gbG9hZGVkO1xuICBjb25zdCBtb2R1bGVzOiBOZXh0SW1hZ2VDYWNoZU1vZHVsZXMgPSB7XG4gICAgcmVzcG9uc2VDYWNoZTogbmV4dE1vZHVsZShcIm5leHQvZGlzdC9zZXJ2ZXIvcmVzcG9uc2UtY2FjaGUvaW5kZXguanNcIiksXG4gIH07XG4gIGNvbnN0IGRpc3REaXIgPSBqb2luKFxuICAgIGRlcGxveW1lbnRSb290LFxuICAgIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpcixcbiAgICBtYW5pZmVzdC5jb25maWcuZGlzdERpcixcbiAgKTtcbiAgbGV0IGNhY2hlSGFuZGxlcjogSW5zdGFuY2VUeXBlPENhY2hlSGFuZGxlckNsYXNzPiB8IHVuZGVmaW5lZDtcbiAgaWYgKG5leHRDb25maWcuY2FjaGVIYW5kbGVyKSB7XG4gICAgY29uc3QgdXJsID0gY2FjaGVIYW5kbGVyVXJsKGRpc3REaXIsIG5leHRDb25maWcuY2FjaGVIYW5kbGVyKTtcbiAgICBjb25zdCBpbXBvcnRlZCA9IChhd2FpdCAoaW1wb3J0TW9kdWxlXG4gICAgICA/IGltcG9ydE1vZHVsZSh1cmwpXG4gICAgICA6IGltcG9ydCh1cmwpKSkgYXMgeyBkZWZhdWx0PzogQ2FjaGVIYW5kbGVyQ2xhc3MgfSAmIENhY2hlSGFuZGxlckNsYXNzO1xuICAgIGNvbnN0IENhY2hlSGFuZGxlciA9IGltcG9ydGVkLmRlZmF1bHQgPz8gaW1wb3J0ZWQ7XG4gICAgY2FjaGVIYW5kbGVyID0gbmV3IENhY2hlSGFuZGxlcih7XG4gICAgICBkZXY6IGZhbHNlLFxuICAgICAgZmx1c2hUb0Rpc2s6IG5leHRDb25maWcuZXhwZXJpbWVudGFsLmlzckZsdXNoVG9EaXNrLFxuICAgICAgc2VydmVyRGlzdERpcjogam9pbihkaXN0RGlyLCBcInNlcnZlclwiKSxcbiAgICAgIG1heE1lbW9yeUNhY2hlU2l6ZTogbmV4dENvbmZpZy5jYWNoZU1heE1lbW9yeVNpemUsXG4gICAgICByZXZhbGlkYXRlZFRhZ3M6IFtdLFxuICAgICAgX3JlcXVlc3RIZWFkZXJzOiB7fSxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHJlc3BvbnNlczogbmV3SW1hZ2VSZXNwb25zZUNhY2hlKG1vZHVsZXMucmVzcG9uc2VDYWNoZS5kZWZhdWx0KSxcbiAgICBpbWFnZXM6IG5ldyBuZXh0Lm9wdGltaXplci5JbWFnZU9wdGltaXplckNhY2hlKHtcbiAgICAgIGRpc3REaXIsXG4gICAgICBuZXh0Q29uZmlnLFxuICAgICAgY2FjaGVIYW5kbGVyLFxuICAgIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIGBuZXcgUmVzcG9uc2VDYWNoZSguLi4pYCBmb3IgaW1hZ2VzLCBvbiBlaXRoZXIgc2lkZSBvZiBuZXh0IDE2LjMuOC4gQmVmb3JlXG4gKiBpdCB0aGUgY29uc3RydWN0b3IgdG9vayBgbWluaW1hbE1vZGVgOyBmcm9tIGl0LCBgeyBtaW5pbWFsTW9kZSwgcm91dGUgfWAsIGFuZFxuICogaXQgdGhyb3dzIHdpdGhvdXQgYSBgcm91dGVgIC0gYG5leHQtc2VydmVyLmpzYCBwYXNzZXMgYFwiaW1hZ2VcImAuIE5laXRoZXIgZm9ybVxuICogY2FuIHN0YW5kIGluIGZvciB0aGUgb3RoZXI6IGFuIG9sZGVyIGBuZXh0YCB0YWtlcyB0aGUgb3B0aW9ucyBvYmplY3QgYXMgYVxuICogdHJ1dGh5IGBtaW5pbWFsTW9kZWAsIGFuZCAxNi4zLjggcmVqZWN0cyBhIGJhcmUgYGZhbHNlYC5cbiAqXG4gKiBUb2xkIGFwYXJ0IGJ5IHdoZXRoZXIgdGhlIGNvbnN0cnVjdG9yIGFjY2VwdHMgdGhlIG9sZGVyIGZvcm0gcmF0aGVyIHRoYW4gYnlcbiAqIHRoZSB2ZXJzaW9uLCB3aGljaCBhIGNhbmFyeSBkb2VzIG5vdCBvcmRlciwgb3IgYnkgaXRzIHByaXZhdGUgZmllbGRzOiAxNi4zLjhcbiAqIGRlc3RydWN0dXJlcyBhIGJhcmUgYGZhbHNlYCBpbnRvIG5vIGByb3V0ZWAgYW5kIHRocm93cy4gT25seSB0aGF0IHRocm93XG4gKiBzZWxlY3RzIHRoZSBuZXdlciBmb3JtOyBhbnkgb3RoZXIgZXJyb3IgZnJvbSB0aGUgY29uc3RydWN0b3IgaXMgcmV0aHJvd25cbiAqIHJhdGhlciB0aGFuIHJlYWQgYXMgYSB2ZXJzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbmV3SW1hZ2VSZXNwb25zZUNhY2hlKFxuICBSZXNwb25zZUNhY2hlOiBOZXh0SW1hZ2VDYWNoZU1vZHVsZXNbXCJyZXNwb25zZUNhY2hlXCJdW1wiZGVmYXVsdFwiXSxcbik6IEluc3RhbmNlVHlwZTxOZXh0SW1hZ2VDYWNoZU1vZHVsZXNbXCJyZXNwb25zZUNhY2hlXCJdW1wiZGVmYXVsdFwiXT4ge1xuICBjb25zdCBMZWdhY3kgPSBSZXNwb25zZUNhY2hlIGFzIHVua25vd24gYXMgbmV3IChcbiAgICBtaW5pbWFsTW9kZTogYm9vbGVhbixcbiAgKSA9PiBJbnN0YW5jZVR5cGU8dHlwZW9mIFJlc3BvbnNlQ2FjaGU+O1xuICB0cnkge1xuICAgIHJldHVybiBuZXcgTGVnYWN5KGZhbHNlKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKCFTdHJpbmcoKGVyciBhcyBFcnJvcik/Lm1lc3NhZ2UpLmluY2x1ZGVzKFwicmVxdWlyZXMgYSBzb3VyY2Ugcm91dGVcIikpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZUNhY2hlKHsgbWluaW1hbE1vZGU6IGZhbHNlLCByb3V0ZTogXCJpbWFnZVwiIH0pO1xuICB9XG59XG5cbi8qKlxuICogYGZvcm1hdER5bmFtaWNJbXBvcnRQYXRoYCBmcm9tIGBuZXh0L2Rpc3QvbGliL2Zvcm1hdC1keW5hbWljLWltcG9ydC1wYXRoLmpzYCxcbiAqIHJlc3RhdGVkOiBgbmV4dCBidWlsZGAgZG9lc24ndCB0cmFjZSB0aGF0IG1vZHVsZSBpbnRvIHRoZSBkZXBsb3ltZW50LCBzb1xuICogbG9hZGluZyBpdCBmYWlsZWQgZXZlcnkgaW1hZ2UgcmVxdWVzdCB3aXRoIHRoZSBjYWNoZSBvbi5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYW5kbGVyVXJsKGRpc3REaXI6IHN0cmluZywgY2FjaGVIYW5kbGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBwYXRoID0gY2FjaGVIYW5kbGVyLnN0YXJ0c1dpdGgoXCJmaWxlOi8vXCIpXG4gICAgPyBmaWxlVVJMVG9QYXRoKGNhY2hlSGFuZGxlcilcbiAgICA6IGNhY2hlSGFuZGxlcjtcbiAgcmV0dXJuIHBhdGhUb0ZpbGVVUkwoXG4gICAgaXNBYnNvbHV0ZVBhdGgocGF0aCkgPyBwYXRoIDogam9pbihkaXN0RGlyLCBwYXRoKSxcbiAgKS50b1N0cmluZygpO1xufVxuXG4vKipcbiAqIGBpbWFnZXNgLCB3aXRoIGl0cyBgc2V0YCBtb3ZlZCBvZmYgdGhlIHJlc3BvbnNlJ3MgY3JpdGljYWwgcGF0aC5cbiAqXG4gKiBgUmVzcG9uc2VDYWNoZWAgYXdhaXRzIHRoZSB3cml0ZSBvZiBhIGZyZXNobHkgb3B0aW1pemVkIGltYWdlIGJlZm9yZSBpdCBoYW5kc1xuICogdGhlIGltYWdlIGJhY2ssIHNvIGV2ZXJ5IG1pc3MgcGFpZCBhbiBTMyBgUHV0T2JqZWN0YCAofjMwIG1zIG1lYXN1cmVkKSBiZWZvcmVcbiAqIGl0cyBmaXJzdCBieXRlLiBUaGUgd3JpdGUgaXMgcmVnaXN0ZXJlZCB3aXRoIGB3YWl0VW50aWxgIGluc3RlYWQsIHdoaWNoIHRoZVxuICogcnVudGltZSBkcmFpbnMgYmVmb3JlIGEgTGFtYmRhIGludm9jYXRpb24gcmV0dXJucyBvciBhIGNvbnRhaW5lciBzaHV0cyBkb3duLFxuICogc28gaXQgc3RpbGwgbGFuZHMuIEEgZmFpbGVkIHdyaXRlIGlzIGxvZ2dlZDsgdGhlIG5leHQgcmVxdWVzdCBvcHRpbWl6ZXMgdGhlXG4gKiBpbWFnZSBhZ2Fpbiwgd2hpY2ggaXMgd2hhdCBpdCB3b3VsZCBoYXZlIGRvbmUgYW55d2F5LlxuICovXG5mdW5jdGlvbiBkZWZlcldyaXRlcyhcbiAgaW1hZ2VzOiBJbWFnZUNhY2hlW1wiaW1hZ2VzXCJdLFxuICB3YWl0VW50aWw6IChwcm9taXNlOiBQcm9taXNlPHVua25vd24+KSA9PiB2b2lkLFxuKTogSW1hZ2VDYWNoZVtcImltYWdlc1wiXSB7XG4gIGNvbnN0IGRlZmVycmVkID0gT2JqZWN0LmNyZWF0ZShpbWFnZXMpIGFzIEltYWdlQ2FjaGVbXCJpbWFnZXNcIl07XG4gIGRlZmVycmVkLnNldCA9ICguLi5hcmdzOiBQYXJhbWV0ZXJzPEltYWdlQ2FjaGVbXCJpbWFnZXNcIl1bXCJzZXRcIl0+KSA9PiB7XG4gICAgd2FpdFVudGlsKFxuICAgICAgaW1hZ2VzLnNldCguLi5hcmdzKS5jYXRjaCgoZXJyb3I6IHVua25vd24pID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBjYWNoZSBhbiBvcHRpbWl6ZWQgaW1hZ2U6XCIsIGVycm9yKTtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuICByZXR1cm4gZGVmZXJyZWQ7XG59XG5cbmZ1bmN0aW9uIHNlbmRUZXh0KFxuICByZXM6IFNoaW1TZXJ2ZXJSZXNwb25zZSxcbiAgc3RhdHVzQ29kZTogbnVtYmVyLFxuICBib2R5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgcmVzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlO1xuICByZXMuc2V0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwidGV4dC9wbGFpblwiKTtcbiAgcmVzLmVuZChib2R5KTtcbn1cblxuLyoqXG4gKiBUaGUgaW1hZ2UgY29uZmlnIGNvbWVzIGZyb20gdGhlIGFwcCdzIG93biBgcmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25gLCBub3QgdGhlXG4gKiBhZGFwdGVyIG1hbmlmZXN0OiBgaW1hZ2VPcHRpbWl6ZXJgIHJlYWRzIHdob2xlIGBleHBlcmltZW50YWxgIGFuZCBgaW1hZ2VzYFxuICogb2JqZWN0cywgYW5kIG1pcnJvcmluZyB0aG9zZSBpbnRvIHRoZSBtYW5pZmVzdCB3b3VsZCBiZSBhIHNlY29uZCBkZWZpbml0aW9uIG9mXG4gKiB0aGUgc2FtZSB0aGluZyB0aGF0IHNpbGVudGx5IGdvZXMgc3RhbGUgb24gYSBgbmV4dGAgbWlub3IuXG4gKi9cbmZ1bmN0aW9uIGxvYWRJbWFnZVJ1bnRpbWUoeyBkZXBsb3ltZW50Um9vdCwgbWFuaWZlc3QgfTogSW1hZ2VPcHRpbWl6ZXJPcHRpb25zKSB7XG4gIGNvbnN0IG5leHQ6IE5leHRJbWFnZU1vZHVsZXMgPSB7XG4gICAgY29uZmlnU2hhcmVkOiBuZXh0TW9kdWxlKFwibmV4dC9kaXN0L3NlcnZlci9jb25maWctc2hhcmVkLmpzXCIpLFxuICAgIGltYWdlQ29uZmlnOiBuZXh0TW9kdWxlKFwibmV4dC9kaXN0L3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLmpzXCIpLFxuICAgIG9wdGltaXplcjogbmV4dE1vZHVsZShcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIpLFxuICAgIHNlcnZlU3RhdGljOiBuZXh0TW9kdWxlKFwibmV4dC9kaXN0L3NlcnZlci9zZXJ2ZS1zdGF0aWMuanNcIiksXG4gIH07XG4gIGNvbnN0IHBhdGggPSBqb2luKFxuICAgIGRlcGxveW1lbnRSb290LFxuICAgIG1hbmlmZXN0LnJlbGF0aXZlUHJvamVjdERpcixcbiAgICBtYW5pZmVzdC5jb25maWcuZGlzdERpcixcbiAgICBcInJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uXCIsXG4gICk7XG4gIGNvbnN0IHJlcXVpcmVkOiBSZXF1aXJlZFNlcnZlckZpbGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGYtOFwiKSk7XG4gIGNvbnN0IG5leHRDb25maWcgPSBuZXh0LmNvbmZpZ1NoYXJlZC5nZXROZXh0Q29uZmlnUnVudGltZShyZXF1aXJlZC5jb25maWcpO1xuICByZXR1cm4ge1xuICAgIG5leHQsXG4gICAgbmV4dENvbmZpZyxcbiAgICBpbWFnZXNDb25maWc6IHtcbiAgICAgIC4uLm5leHQuaW1hZ2VDb25maWcuaW1hZ2VDb25maWdEZWZhdWx0LFxuICAgICAgLi4ubmV4dENvbmZpZy5pbWFnZXMsXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcnVudGltZS9pbWFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF1ZEEsc0RBY0M7QUFyZUQsc0RBQXNEO0FBQ3REOzs7Ozs7OztHQVFHO0FBQ0gscUNBQXVDO0FBQ3ZDLHlDQUErRDtBQUMvRCx1Q0FBd0Q7QUFJeEQsOENBQXVFO0FBQ3ZFLCtDQUErRTtBQUUvRSxpREFBNEM7QUFDNUMsaUNBQThDO0FBeUY5QyxNQUFhLHFCQUFxQjtJQUtJO0lBSm5CLEVBQUUsR0FBRyxJQUFBLGVBQVEsR0FBRSxDQUFDO0lBQ3pCLE1BQU0sQ0FBdUM7SUFDN0MsVUFBVSxDQUF1QjtJQUV6QyxZQUFvQyxPQUE4QjtRQUE5QixZQUFPLEdBQVAsT0FBTyxDQUF1QjtJQUFHLENBQUM7SUFFdEU7Ozs7OztPQU1HO0lBQ0ksU0FBUztRQUNkLElBQUksQ0FBQyxNQUFNLEtBQUssZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9DLE1BQU0sRUFBRSxZQUFZLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO0lBQ3hFLENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUNqQixHQUF3QixFQUN4QixHQUF1QixFQUN2QixHQUFRLEVBQ1IsU0FBOEM7UUFFOUMsNkVBQTZFO1FBQzdFLGtFQUFrRTtRQUNsRSxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN2RCxNQUFNLEVBQ0osVUFBVSxFQUNWLG1CQUFtQixFQUNuQixrQkFBa0IsRUFD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Q0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0UsT0FBTztRQUNMLElBQUk7UUFDSixVQUFVO1FBQ1YsWUFBWSxFQUFFO1lBQ1osR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQjtZQUN0QyxHQUFHLFVBQVUsQ0FBQyxNQUFNO1NBQ3JCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qKlxuICogYC9fbmV4dC9pbWFnZWAsIGZvbGRlZCBpbnRvIHRoZSBydW50aW1lIGNvcmUuXG4gKlxuICogVGhlIHJlc3BvbnNlIGlzIHdyaXR0ZW4gdG8gYSB7QGxpbmsgU2hpbVNlcnZlclJlc3BvbnNlfSByYXRoZXIgdGhhbiBzdHJhaWdodCB0b1xuICogYSBMYW1iZGEgcmVzcG9uc2Ugc3RyZWFtLCBzbyBpdCBjb21wb3NlcyB3aXRoIHJvdXRpbmc6IGRpc3BhdGNoIG9ubHkgY2xhc3NpZmllc1xuICogYSByZXF1ZXN0IGFzIGltYWdlIG9wdGltaXphdGlvbiAqYWZ0ZXIqIG1pZGRsZXdhcmUgaGFzIGhhZCBpdCwgd2hpY2ggaXMgd2hhdFxuICogbWFrZXMgYE5leHRSZXNwb25zZS5yZXdyaXRlKClgIG9udG8gYW4gaW1hZ2Ugd29yay4gVGhhdCBpcyBhbHNvIHdoeSB0aGVyZSBpcyBub1xuICogbG9uZ2VyIGEgZGVkaWNhdGVkIGltYWdlIG9wdGltaXphdGlvbiBMYW1iZGEg4oCUIG1pZGRsZXdhcmUgbmV2ZXIgcmFuIGZvciBpdC5cbiAqL1xuaW1wb3J0IHsgcmVhZEZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IGlzQWJzb2x1dGUgYXMgaXNBYnNvbHV0ZVBhdGgsIGpvaW4gfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoLCBwYXRoVG9GaWxlVVJMIH0gZnJvbSBcIm5vZGU6dXJsXCI7XG5pbXBvcnQgdHlwZSB7IE5leHRDb25maWdDb21wbGV0ZSB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2NvbmZpZy1zaGFyZWQuanNcIjtcbmltcG9ydCB0eXBlIHsgQ2FjaGVkUm91dGVLaW5kIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvcmVzcG9uc2UtY2FjaGUvdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgU2hpbUluY29taW5nTWVzc2FnZSB9IGZyb20gXCIuL2h0dHAvcmVxdWVzdFwiO1xuaW1wb3J0IHsgYXNTZXJ2ZXJSZXNwb25zZSwgU2hpbVNlcnZlclJlc3BvbnNlIH0gZnJvbSBcIi4vaHR0cC9yZXNwb25zZVwiO1xuaW1wb3J0IHsgZXh0cmFjdEV0YWcsIGZldGNoRnJvbVMzLCByZXNvbHZlRXJyb3JSZXNwb25zZSB9IGZyb20gXCIuL2ltYWdlLXV0aWxzXCI7XG5pbXBvcnQgeyBBZGFwdGVyTWFuaWZlc3QgfSBmcm9tIFwiLi9tYW5pZmVzdFwiO1xuaW1wb3J0IHsgbmV4dE1vZHVsZSB9IGZyb20gXCIuL25leHQtbW9kdWxlc1wiO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZSwgczNDbGllbnQgfSBmcm9tIFwiLi91dGlsXCI7XG5cbi8qKlxuICogUmVxdWlyZWQgdGhyb3VnaCB7QGxpbmsgbmV4dE1vZHVsZX0gcmF0aGVyIHRoYW4gaW1wb3J0ZWQsIGJlY2F1c2UgYG5leHRgIGlzXG4gKiBleHRlcm5hbCB0byB0aGUgc2hlbGwgYnVuZGxlcyBhbmQgZG9lcyBub3QgcmVzb2x2ZSBmcm9tIHdoZXJlIHRoZXkgc2l0LiBFdmVyeVxuICogdHlwZSBoZXJlIGlzIHN0aWxsIHRoZSByZWFsIG9uZTogYHR5cGVvZiBpbXBvcnQoLi4uKWAgaXMgZXJhc2VkLlxuICovXG5pbnRlcmZhY2UgTmV4dEltYWdlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IGNvbmZpZ1NoYXJlZDogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvY29uZmlnLXNoYXJlZC5qc1wiKTtcbiAgcmVhZG9ubHkgaW1hZ2VDb25maWc6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWcuanNcIik7XG4gIHJlYWRvbmx5IG9wdGltaXplcjogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCIpO1xuICByZWFkb25seSBzZXJ2ZVN0YXRpYzogdHlwZW9mIGltcG9ydChcIm5leHQvZGlzdC9zZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCIpO1xufVxuXG4vKiogVGhlIG1vZHVsZXMgb25seSB0aGUgaW1hZ2UgY2FjaGUgbmVlZHMsIGxvYWRlZCB3aXRoIGl0LiAqL1xuaW50ZXJmYWNlIE5leHRJbWFnZUNhY2hlTW9kdWxlcyB7XG4gIHJlYWRvbmx5IHJlc3BvbnNlQ2FjaGU6IHR5cGVvZiBpbXBvcnQoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpO1xufVxuXG4vKiogQSBgY2FjaGVIYW5kbGVyYCBjbGFzcywgYXMgYG5leHQuY29uZmlnYCdzIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBleHBvcnRzIGl0LiAqL1xudHlwZSBDYWNoZUhhbmRsZXJDbGFzcyA9IG5ldyAoXG4gIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKSA9PiBOb25OdWxsYWJsZTxcbiAgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFxuICAgIE5leHRJbWFnZU1vZHVsZXNbXCJvcHRpbWl6ZXJcIl1bXCJJbWFnZU9wdGltaXplckNhY2hlXCJdXG4gID5bMF1bXCJjYWNoZUhhbmRsZXJcIl1cbj47XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW1hZ2VPcHRpbWl6ZXJPcHRpb25zIHtcbiAgcmVhZG9ubHkgZGVwbG95bWVudFJvb3Q6IHN0cmluZztcbiAgcmVhZG9ubHkgbWFuaWZlc3Q6IEFkYXB0ZXJNYW5pZmVzdDtcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfQlVDS0VUX05BTUVgLiBFbXB0eSB3aGVuIHRoZSBzb3VyY2VzIGFyZSBvbiBkaXNrXG4gICAqIChgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYCksIHdoaWNoIHNlbmRzIGV2ZXJ5IG9uZSB0byBgZmV0Y2hJbnRlcm5hbGAuXG4gICAqL1xuICByZWFkb25seSBidWNrZXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIGBDREtfTkVYVEpTX1NUQVRJQ19BU1NFVFNfS0VZX1BSRUZJWGAuIEVtcHR5IHdoZW4gdGhlIGFzc2V0cyBzaXQgYXQgdGhlIHJvb3RcbiAgICogb2YgdGhlIGJ1Y2tldCwgd2hpY2ggaXMgdGhlIGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBidWNrZXRLZXlQcmVmaXg6IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcXVlc3RzIGEgbG9jYWwgc291cmNlIGZyb20gdGhlIGFwcCdzIG93biByb3V0ZXMsIGZvciBvbmUgUzMgaGFzIG5vIGZpbGVcbiAgICogZm9yOiBgPEltYWdlIHNyYz1cIi9hcGkvYXZhdGFyP2lkPTQyXCI+YCwgc2VydmVkIGJ5IGEgcm91dGUgaGFuZGxlci4gYG5leHRcbiAgICogc3RhcnRgIGZldGNoZXMgZXZlcnkgbG9jYWwgc291cmNlIHRoYXQgd2F5IChgZmV0Y2hJbnRlcm5hbEltYWdlYCk7IGhlcmUgaXRcbiAgICogaXMgdGhlIGZhbGxiYWNrLCBzaW5jZSBuZWFybHkgZXZlcnkgc291cmNlIGlzIGEgZmlsZSwgYW5kIGEgYEdldE9iamVjdGAgaXNcbiAgICogZmFyIGNoZWFwZXIgdGhhbiBhIHJvdXRlIGludm9jYXRpb24uXG4gICAqXG4gICAqIEdpdmVuIHRoZSByZXF1ZXN0IGJlaW5nIG9wdGltaXplZCwgZm9yIGl0cyBhdXRob3JpdHk7IGxpa2UgYG5leHQgc3RhcnRgLFxuICAgKiB0aGUgdmlld2VyJ3MgY29va2llcyBhbmQgb3RoZXIgaGVhZGVycyBhcmUgbm90IHRoZSBpbXBsZW1lbnRhdGlvbidzIHRvXG4gICAqIGZvcndhcmQuIEFuZCBnaXZlbiBgaW1hZ2VzLm1heGltdW1SZXNwb25zZUJvZHlgLCBwYXN0IHdoaWNoIGl0IHN0b3BzXG4gICAqIHJlYWRpbmcgYW5kIGFuc3dlcnMge0BsaW5rIEludGVybmFsSW1hZ2VSZXNwb25zZS50b29MYXJnZX0uXG4gICAqL1xuICByZWFkb25seSBmZXRjaEludGVybmFsOiAoXG4gICAgaHJlZjogc3RyaW5nLFxuICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICBtYXhpbXVtUmVzcG9uc2VCb2R5OiBudW1iZXIsXG4gICkgPT4gUHJvbWlzZTxJbnRlcm5hbEltYWdlUmVzcG9uc2U+O1xuICAvKipcbiAgICogTG9hZHMgdGhlIGBjYWNoZUhhbmRsZXJgIG1vZHVsZSBmcm9tIGl0cyBmaWxlIFVSTC4gQSBzZWFtIGZvciB0ZXN0cywgd2hpY2hcbiAgICogcnVuIGFzIENvbW1vbkpTIGFuZCBjYW5ub3QgYGltcG9ydCgpYCBhIFVSTC5cbiAgICogQGRlZmF1bHQgLSBgaW1wb3J0KClgXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRNb2R1bGU/OiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG59XG5cbi8qKiBUaGUgcmVzcG9uc2Uge0BsaW5rIEltYWdlT3B0aW1pemVyT3B0aW9ucy5mZXRjaEludGVybmFsfSBnb3QuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVybmFsSW1hZ2VSZXNwb25zZSB7XG4gIHJlYWRvbmx5IHN0YXR1c0NvZGU6IG51bWJlcjtcbiAgcmVhZG9ubHkgaGVhZGVyczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQ+PjtcbiAgcmVhZG9ubHkgYm9keTogQnVmZmVyO1xuICAvKipcbiAgICogVGhlIGBmdW5jdGlvbkdyb3Vwc2AgZ3JvdXAgd2hvc2UgcGFja2FnZSBoYXMgdGhlIHJvdXRlIHRoYXQgc2VydmVzIHRoZVxuICAgKiBzb3VyY2UsIHdoZW4gaXQgaXMgbm90IHRoaXMgZnVuY3Rpb24nczogdGhlcmUgaXMgbm8gcmVzcG9uc2UgdG8gdXNlLCBhbmRcbiAgICogdGhlIG9wdGltaXplciBhbnN3ZXJzIGFuIGV4cGxpY2l0IDUwMiByYXRoZXIgdGhhbiBhIFwibm90IGEgdmFsaWQgaW1hZ2VcIi5cbiAgICovXG4gIHJlYWRvbmx5IG90aGVyR3JvdXA/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgYm9keSBwYXNzZWQgYGltYWdlcy5tYXhpbXVtUmVzcG9uc2VCb2R5YCwgc28gaXQgd2FzIGN1dCBvZmY6IGEgNDEzLCBhc1xuICAgKiBgbmV4dCBzdGFydGAgYW5zd2Vycy5cbiAgICovXG4gIHJlYWRvbmx5IHRvb0xhcmdlPzogYm9vbGVhbjtcbn1cblxuLyoqIFdoYXQgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBpcyByZWFkIGZvci4gKi9cbmludGVyZmFjZSBSZXF1aXJlZFNlcnZlckZpbGVzIHtcbiAgY29uZmlnOiBOZXh0Q29uZmlnQ29tcGxldGU7XG59XG5cbmV4cG9ydCBjbGFzcyBSdW50aW1lSW1hZ2VPcHRpbWl6ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHMzID0gczNDbGllbnQoKTtcbiAgcHJpdmF0ZSBsb2FkZWQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPjtcbiAgcHJpdmF0ZSBpbWFnZUNhY2hlPzogUHJvbWlzZTxJbWFnZUNhY2hlPjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJbWFnZU9wdGltaXplck9wdGlvbnMpIHt9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGFwcCBzZXJ2ZXMgYC9fbmV4dC9pbWFnZWAgYXQgYWxsLiBgbmV4dCBzdGFydGAgYW5zd2VycyA0MDRcbiAgICogd2hlbiBgaW1hZ2VzLnVub3B0aW1pemVkYCBpcyBzZXQgb3IgYSBub24tZGVmYXVsdCBgbG9hZGVyYCBpcyBjb25maWd1cmVkXG4gICAqIChgbmV4dC1zZXJ2ZXIuanNgKSwgYW5kIHNvIGRvZXMgdGhlIHJ1bnRpbWU6IG90aGVyd2lzZSBhbnlvbmUgY2FuIG1ha2UgdGhlXG4gICAqIGNvbXB1dGUgcnVuIHNoYXJwIGFuZCB3cml0ZSB0aGUgaW1hZ2UgY2FjaGUgb24gYW4gZW5kcG9pbnQgdGhlIGFwcCB0dXJuZWRcbiAgICogb2ZmLlxuICAgKi9cbiAgcHVibGljIGlzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICB0aGlzLmxvYWRlZCA/Pz0gbG9hZEltYWdlUnVudGltZSh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgaW1hZ2VzQ29uZmlnIH0gPSB0aGlzLmxvYWRlZDtcbiAgICByZXR1cm4gaW1hZ2VzQ29uZmlnLmxvYWRlciA9PT0gXCJkZWZhdWx0XCIgJiYgIWltYWdlc0NvbmZpZy51bm9wdGltaXplZDtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBoYW5kbGUoXG4gICAgcmVxOiBTaGltSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogU2hpbVNlcnZlclJlc3BvbnNlLFxuICAgIHVybDogVVJMLFxuICAgIHdhaXRVbnRpbDogKHByb21pc2U6IFByb21pc2U8dW5rbm93bj4pID0+IHZvaWQsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFJlc29sdmVkIG9uIHRoZSBmaXJzdCBpbWFnZSByZXF1ZXN0IHJhdGhlciB0aGFuIGF0IGNvbGQgc3RhcnQ6IGFuIGFwcCB3aXRoXG4gICAgLy8gbm8gYDxJbWFnZT5gIHNob3VsZCBwYXkgbmVpdGhlciB0aGUgYG5leHRgIG1vZHVsZSBsb2FkcyBub3IgdGhlXG4gICAgLy8gYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCBwYXJzZS5cbiAgICB0aGlzLmxvYWRlZCA/Pz0gbG9hZEltYWdlUnVudGltZSh0aGlzLm9wdGlvbnMpO1xuICAgIGNvbnN0IHsgbmV4dCwgbmV4dENvbmZpZywgaW1hZ2VzQ29uZmlnIH0gPSB0aGlzLmxvYWRlZDtcbiAgICBjb25zdCB7XG4gICAgICBJbWFnZUVycm9yLFxuICAgICAgSW1hZ2VPcHRpbWl6ZXJDYWNoZSxcbiAgICAgIGZldGNoRXh0ZXJuYWxJbWFnZSxcbiAgICAgIGltYWdlT3B0aW1pemVyLFxuICAgICAgc2VuZFJlc3BvbnNlLFxuICAgIH0gPSBuZXh0Lm9wdGltaXplcjtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbXMgPSBJbWFnZU9wdGltaXplckNhY2hlLnZhbGlkYXRlUGFyYW1zKFxuICAgICAgICByZXEgYXMgdW5rbm93biBhcyBQYXJhbWV0ZXJzPFxuICAgICAgICAgIHR5cGVvZiBJbWFnZU9wdGltaXplckNhY2hlLnZhbGlkYXRlUGFyYW1zXG4gICAgICAgID5bMF0sXG4gICAgICAgIE9iamVjdC5mcm9tRW50cmllcyh1cmwuc2VhcmNoUGFyYW1zKSxcbiAgICAgICAgbmV4dENvbmZpZyxcbiAgICAgICAgZmFsc2UsXG4gICAgICApO1xuICAgICAgaWYgKFwiZXJyb3JNZXNzYWdlXCIgaW4gcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBzZW5kVGV4dChyZXMsIDQwMCwgcGFyYW1zLmVycm9yTWVzc2FnZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgaHJlZiwgaXNBYnNvbHV0ZSB9ID0gcGFyYW1zO1xuICAgICAgY29uc3Qgb3B0aW1pemUgPSBhc3luYyAocHJldmlvdXNDYWNoZUVudHJ5PzogUHJldmlvdXNJbWFnZUVudHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IHVwc3RyZWFtID0gaXNBYnNvbHV0ZVxuICAgICAgICAgID8gYXdhaXQgZmV0Y2hFeHRlcm5hbEltYWdlKFxuICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcuZGFuZ2Vyb3VzbHlBbGxvd0xvY2FsSVAsXG4gICAgICAgICAgICAgIGltYWdlc0NvbmZpZy5tYXhpbXVtUmVzcG9uc2VCb2R5LFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcubWF4aW11bVJlZGlyZWN0cyxcbiAgICAgICAgICAgIClcbiAgICAgICAgICA6IGF3YWl0IHRoaXMuZmV0Y2hMb2NhbChcbiAgICAgICAgICAgICAgcmVxLFxuICAgICAgICAgICAgICBocmVmLFxuICAgICAgICAgICAgICBuZXh0Q29uZmlnLFxuICAgICAgICAgICAgICBpbWFnZXNDb25maWcubWF4aW11bVJlc3BvbnNlQm9keSxcbiAgICAgICAgICAgICAgbmV4dC5vcHRpbWl6ZXIsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG9wdGltaXplZCA9IGF3YWl0IGltYWdlT3B0aW1pemVyKFxuICAgICAgICAgIHVwc3RyZWFtLFxuICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHBlcmltZW50YWw6IG5leHRDb25maWcuZXhwZXJpbWVudGFsLFxuICAgICAgICAgICAgaW1hZ2VzOiB7XG4gICAgICAgICAgICAgIGRhbmdlcm91c2x5QWxsb3dTVkc6IGltYWdlc0NvbmZpZy5kYW5nZXJvdXNseUFsbG93U1ZHLFxuICAgICAgICAgICAgICBtaW5pbXVtQ2FjaGVUVEw6IGltYWdlc0NvbmZpZy5taW5pbXVtQ2FjaGVUVEwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBpc0RldjogZmFsc2UsIHByZXZpb3VzQ2FjaGVFbnRyeSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGBpbWFnZU9wdGltaXplcmAgcmVwb3J0cyBhIGZhaWxlZCBvcHRpbWl6YXRpb24gYnkgcmV0dXJuaW5nIHRoZVxuICAgICAgICAvLyB1bnRvdWNoZWQgdXBzdHJlYW0gaW1hZ2UgYWxvbmdzaWRlIGBlcnJvcmAgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNvXG4gICAgICAgIC8vIHdpdGhvdXQgdGhpcyBhIGJyb2tlbiBgc2hhcnBgIGluc3RhbGwgc2VydmVzIGZ1bGwtc2l6ZSBvcmlnaW5hbHMgd2l0aFxuICAgICAgICAvLyBhIDIwMCBpbmRlZmluaXRlbHkgYW5kIG5vdGhpbmcgaW4gdGhlIGxvZ3Mgc2F5cyB3aHkuXG4gICAgICAgIGlmIChvcHRpbWl6ZWQuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgYEZhaWxlZCB0byBvcHRpbWl6ZSAke2hyZWZ9LCBzZXJ2aW5nIHRoZSB1bm9wdGltaXplZCBvcmlnaW5hbDpgLFxuICAgICAgICAgICAgb3B0aW1pemVkLmVycm9yLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wdGltaXplZDtcbiAgICAgIH07XG5cbiAgICAgIC8vIE5leHQncyBvd24gcmVzcG9uc2Ugd3JpdGVyLCByYXRoZXIgdGhhbiBhIHJlc3RhdGVtZW50IG9mIGl0LCBzbyB0aGVcbiAgICAgIC8vIGhlYWRlcnMgYG5leHQgc3RhcnRgIHNlbmRzIGNvbWUgd2l0aCBpdDogdGhlIHllYXItbG9uZyBgaW1tdXRhYmxlYCBmb3JcbiAgICAgIC8vIGEgYC9fbmV4dC9zdGF0aWMvbWVkaWFgIHNyYywgYElmLU5vbmUtTWF0Y2hgIGFzIGBmcmVzaGAgcmVhZHMgaXQgKHdlYWtcbiAgICAgIC8vIGFuZCBsaXN0ZWQgdGFncywgYENhY2hlLUNvbnRyb2w6IG5vLWNhY2hlYCksIGEgYENvbnRlbnQtRGlzcG9zaXRpb25gXG4gICAgICAvLyB0aGF0IFJGQyA1OTg3LWVuY29kZXMgYSBmaWxlbmFtZSBgd3JpdGVIZWFkYCB3b3VsZCByZWplY3QgYXNcbiAgICAgIC8vIG5vbi1sYXRpbjEsIGBDb250ZW50LUxlbmd0aGAsIGFuZCBubyBib2R5IGZvciBIRUFELiBUaGUgcmVzdGF0ZWRcbiAgICAgIC8vIHZlcnNpb24gaGFkIGRyaWZ0ZWQgb24gZXZlcnkgb25lIG9mIHRob3NlLlxuICAgICAgY29uc3Qgc2VuZCA9IChcbiAgICAgICAgZXh0ZW5zaW9uOiBzdHJpbmcsXG4gICAgICAgIGJ1ZmZlcjogQnVmZmVyLFxuICAgICAgICBldGFnOiBzdHJpbmcsXG4gICAgICAgIHhDYWNoZTogXCJNSVNTXCIgfCBcIkhJVFwiIHwgXCJTVEFMRVwiLFxuICAgICAgICBtYXhBZ2U6IG51bWJlcixcbiAgICAgICkgPT4ge1xuICAgICAgICByZXMuc3RhdHVzQ29kZSA9IDIwMDtcbiAgICAgICAgc2VuZFJlc3BvbnNlKFxuICAgICAgICAgIHJlcSBhcyB1bmtub3duIGFzIFBhcmFtZXRlcnM8dHlwZW9mIHNlbmRSZXNwb25zZT5bMF0sXG4gICAgICAgICAgYXNTZXJ2ZXJSZXNwb25zZShyZXMpLFxuICAgICAgICAgIGhyZWYsXG4gICAgICAgICAgZXh0ZW5zaW9uLFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBldGFnLFxuICAgICAgICAgIHBhcmFtcy5pc1N0YXRpYyxcbiAgICAgICAgICB4Q2FjaGUsXG4gICAgICAgICAgaW1hZ2VzQ29uZmlnLFxuICAgICAgICAgIG1heEFnZSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIGBuZXh0IHN0YXJ0YCdzIGBoYW5kbGVOZXh0SW1hZ2VSZXF1ZXN0YCwgc3RlcCBmb3Igc3RlcDogYVxuICAgICAgLy8gYFJlc3BvbnNlQ2FjaGVgIG92ZXIgYW4gYEltYWdlT3B0aW1pemVyQ2FjaGVgIGJhY2tlZCBieSB0aGUgYXBwJ3NcbiAgICAgIC8vIGBjYWNoZUhhbmRsZXJgLCBzbyBhIGhpdCBza2lwcyB0aGUgZmV0Y2ggYW5kIGBzaGFycGAsIGEgc3RhbGUgZW50cnkgaXNcbiAgICAgIC8vIHNlcnZlZCB3aGlsZSBpdCBpcyByZWdlbmVyYXRlZCwgYW5kIGNvbmN1cnJlbnQgbWlzc2VzIGZvciBvbmUgaW1hZ2VcbiAgICAgIC8vIG9wdGltaXplIGl0IG9uY2UuIFRoZSBhcHAncyBgY2FjaGVIYW5kbGVyYCBpcyB0aGUgUzMgY2FjaGUsIHdoaWNoIHRoZVxuICAgICAgLy8gYWRhcHRlciB0dXJucyBvbiB3aXRoIGBpbWFnZXMuY3VzdG9tQ2FjaGVIYW5kbGVyYDogd2l0aCBubyBDRE4gaW4gZnJvbnRcbiAgICAgIC8vICh0aGUgUmVnaW9uYWwgdHlwZXMpIGV2ZXJ5IHJlcXVlc3Qgd291bGQgb3RoZXJ3aXNlIHJ1biBgc2hhcnBgIGFnYWluLFxuICAgICAgLy8gYW5kIGJlaGluZCBDbG91ZEZyb250IGVhY2ggZWRnZSBtaXNzIGlzIGFuIFMzIHJlYWQgaW5zdGVhZC5cbiAgICAgIGNvbnN0IGNhY2hlID0gYXdhaXQgdGhpcy5sb2FkQ2FjaGUodGhpcy5sb2FkZWQpO1xuICAgICAgY29uc3QgZW50cnkgPSBhd2FpdCBjYWNoZS5yZXNwb25zZXMuZ2V0KFxuICAgICAgICBJbWFnZU9wdGltaXplckNhY2hlLmdldENhY2hlS2V5KHBhcmFtcyksXG4gICAgICAgIGFzeW5jICh7IHByZXZpb3VzQ2FjaGVFbnRyeSB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyBidWZmZXIsIGNvbnRlbnRUeXBlLCBtYXhBZ2UsIGV0YWcsIHVwc3RyZWFtRXRhZyB9ID1cbiAgICAgICAgICAgIGF3YWl0IG9wdGltaXplKHByZXZpb3VzQ2FjaGVFbnRyeSBhcyBQcmV2aW91c0ltYWdlRW50cnkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBraW5kOiBJTUFHRV9LSU5ELFxuICAgICAgICAgICAgICBidWZmZXIsXG4gICAgICAgICAgICAgIGV0YWcsXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjogbmV4dC5zZXJ2ZVN0YXRpYy5nZXRFeHRlbnNpb24oY29udGVudFR5cGUpID8/IFwiXCIsXG4gICAgICAgICAgICAgIHVwc3RyZWFtRXRhZyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjYWNoZUNvbnRyb2w6IHsgcmV2YWxpZGF0ZTogbWF4QWdlLCBleHBpcmU6IHVuZGVmaW5lZCB9LFxuICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICByb3V0ZUtpbmQ6IElNQUdFX0tJTkQsXG4gICAgICAgICAgaW5jcmVtZW50YWxDYWNoZTogZGVmZXJXcml0ZXMoY2FjaGUuaW1hZ2VzLCB3YWl0VW50aWwpLFxuICAgICAgICAgIGlzRmFsbGJhY2s6IGZhbHNlLFxuICAgICAgICAgIC8vIEEgc3RhbGUgZW50cnkgaXMgc2VydmVkIGF0IG9uY2UgYW5kIHJlZ2VuZXJhdGVkIGluIHRoZSBiYWNrZ3JvdW5kO1xuICAgICAgICAgIC8vIHdpdGhvdXQgdGhpcywgYSBMYW1iZGEgY291bGQgZnJlZXplIHdpdGggdGhlIHJlZ2VuZXJhdGlvbiBoYWxmIGRvbmUuXG4gICAgICAgICAgd2FpdFVudGlsLFxuICAgICAgICB9IGFzIHVua25vd24gYXMgUGFyYW1ldGVyczxJbWFnZUNhY2hlW1wicmVzcG9uc2VzXCJdW1wiZ2V0XCJdPlsyXSxcbiAgICAgICk7XG4gICAgICAvLyBBIGZhaWxlZCByZW5kZXIsIGZyb20gbmV4dCAxNi40OyBgbmV4dC1zZXJ2ZXIuanNgIHJldGhyb3dzIGl0IHRoZSBzYW1lXG4gICAgICAvLyB3YXkuIFRoZSBnZW5lcmF0b3IgYWJvdmUgdGhyb3dzIGluc3RlYWQsIHNvIHRoaXMgaXMgdGhlIHR5cGUncyBjYXNlLlxuICAgICAgaWYgKGVudHJ5ICYmIFwiZXJyb3JcIiBpbiBlbnRyeSkge1xuICAgICAgICB0aHJvdyBlbnRyeS5lcnJvcjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHZhbHVlID0gZW50cnk/LnZhbHVlIGFzXG4gICAgICAgIHwge1xuICAgICAgICAgICAga2luZDogc3RyaW5nO1xuICAgICAgICAgICAgZXh0ZW5zaW9uOiBzdHJpbmc7XG4gICAgICAgICAgICBidWZmZXI6IEJ1ZmZlcjtcbiAgICAgICAgICAgIGV0YWc6IHN0cmluZztcbiAgICAgICAgICB9XG4gICAgICAgIHwgbnVsbFxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh2YWx1ZT8ua2luZCAhPT0gSU1BR0VfS0lORCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgaW1hZ2UgY2FjaGUgcmV0dXJuZWQgbm8gaW1hZ2UgZW50cnlcIik7XG4gICAgICB9XG4gICAgICBzZW5kKFxuICAgICAgICB2YWx1ZS5leHRlbnNpb24sXG4gICAgICAgIHZhbHVlLmJ1ZmZlcixcbiAgICAgICAgdmFsdWUuZXRhZyxcbiAgICAgICAgZW50cnkhLmlzTWlzcyA/IFwiTUlTU1wiIDogZW50cnkhLmlzU3RhbGUgPyBcIlNUQUxFXCIgOiBcIkhJVFwiLFxuICAgICAgICBlbnRyeSEuY2FjaGVDb250cm9sPy5yZXZhbGlkYXRlIHx8IDAsXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCB7IHN0YXR1c0NvZGUsIG1lc3NhZ2UgfSA9IHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yLCBJbWFnZUVycm9yKTtcbiAgICAgIGlmIChzdGF0dXNDb2RlID49IDUwMCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiSW1hZ2Ugb3B0aW1pemF0aW9uIGZhaWxlZDpcIiwgZXJyb3IpO1xuICAgICAgfVxuICAgICAgc2VuZFRleHQocmVzLCBzdGF0dXNDb2RlLCBtZXNzYWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZpY3RlZCBvbiBmYWlsdXJlLCBhcyBgRW50cnlwb2ludFJlZ2lzdHJ5LmxvYWRgIGV2aWN0cyBhIGZhaWxlZCBtb2R1bGUgbG9hZDpcbiAgICogYSB0cmFuc2llbnQgZmFpbHVyZSBpbXBvcnRpbmcgdGhlIGBjYWNoZUhhbmRsZXJgIChFTUZJTEUgdW5kZXIgYSBjb2xkLXN0YXJ0XG4gICAqIGJ1cnN0KSB3b3VsZCBvdGhlcndpc2UgNTAwIGV2ZXJ5IGltYWdlIHJlcXVlc3QgdW50aWwgdGhlIHNhbmRib3ggcmVjeWNsZXMuXG4gICAqL1xuICBwcml2YXRlIGxvYWRDYWNoZShcbiAgICBsb2FkZWQ6IFJldHVyblR5cGU8dHlwZW9mIGxvYWRJbWFnZVJ1bnRpbWU+LFxuICApOiBQcm9taXNlPEltYWdlQ2FjaGU+IHtcbiAgICBpZiAoIXRoaXMuaW1hZ2VDYWNoZSkge1xuICAgICAgY29uc3QgY2FjaGUgPSBsb2FkSW1hZ2VDYWNoZSh0aGlzLm9wdGlvbnMsIGxvYWRlZCk7XG4gICAgICB0aGlzLmltYWdlQ2FjaGUgPSBjYWNoZTtcbiAgICAgIGNhY2hlLmNhdGNoKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuaW1hZ2VDYWNoZSA9PT0gY2FjaGUpIHtcbiAgICAgICAgICB0aGlzLmltYWdlQ2FjaGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbWFnZUNhY2hlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaExvY2FsKFxuICAgIHJlcTogU2hpbUluY29taW5nTWVzc2FnZSxcbiAgICBocmVmOiBzdHJpbmcsXG4gICAgbmV4dENvbmZpZzogUmV0dXJuVHlwZTx0eXBlb2YgbG9hZEltYWdlUnVudGltZT5bXCJuZXh0Q29uZmlnXCJdLFxuICAgIG1heGltdW1SZXNwb25zZUJvZHk6IG51bWJlcixcbiAgICBvcHRpbWl6ZXI6IE5leHRJbWFnZU1vZHVsZXNbXCJvcHRpbWl6ZXJcIl0sXG4gICkge1xuICAgIGNvbnN0IHsgYnVja2V0LCBmZXRjaEludGVybmFsIH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgLy8gTm8gYnVja2V0IHdoZW4gdGhlIHNvdXJjZXMgYXJlIG9uIGRpc2sgKGBOZXh0anNSZWdpb25hbENvbnRhaW5lcnNgKSwgYW5kXG4gICAgLy8gdGhlIHJvdXRlcyBzZXJ2ZSB0aG9zZSBhcyB0aGV5IHNlcnZlIGFueXRoaW5nIFMzIGhhcyBubyBmaWxlIGZvci5cbiAgICBpZiAoYnVja2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgICAgICB0aGlzLnMzLFxuICAgICAgICAgIGJ1Y2tldCxcbiAgICAgICAgICBocmVmLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHVybEJhc2VQYXRoOiBuZXh0Q29uZmlnLmJhc2VQYXRoLFxuICAgICAgICAgICAga2V5UHJlZml4OiB0aGlzLm9wdGlvbnMuYnVja2V0S2V5UHJlZml4LFxuICAgICAgICAgICAgYXNzZXRQcmVmaXg6IG5leHRDb25maWcuYXNzZXRQcmVmaXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYXhpbXVtUmVzcG9uc2VCb2R5LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJ1ZmZlcjogcmVzdWx0LmJ1ZmZlcixcbiAgICAgICAgICBjb250ZW50VHlwZTogcmVzdWx0LmNvbnRlbnRUeXBlLFxuICAgICAgICAgIGNhY2hlQ29udHJvbDogbnVsbCxcbiAgICAgICAgICAvLyBFbmNvZGVkIGFzIGZvciBhIHJvdXRlJ3MgcmVzcG9uc2U6IGBmZXRjaEludGVybmFsSW1hZ2VgIGRvZXMgdG9vLlxuICAgICAgICAgIGV0YWc6IGV4dHJhY3RFdGFnKHJlc3VsdC5ldGFnLCByZXN1bHQuYnVmZmVyKSxcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IG1pc3NpbmcgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmIGVycm9yLm5hbWUgPT09IFwiTm9TdWNoS2V5XCI7XG4gICAgICAgIGlmICghbWlzc2luZykgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gV2hhdCBgZmV0Y2hJbnRlcm5hbEltYWdlYCBjaGVja3MsIGFuZCB0aHJvd3MsIGZvciB0aGUgc2FtZSByZXNwb25zZS5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoSW50ZXJuYWwoaHJlZiwgcmVxLCBtYXhpbXVtUmVzcG9uc2VCb2R5KTtcbiAgICBpZiAocmVzcG9uc2Uub3RoZXJHcm91cCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBBIGRlcGxveW1lbnQgcHJvYmxlbSwgbm90IGEgYmFkIGB1cmxgOiBsZWF2ZSB0aGUgcm91dGUgaW4gdGhlIGRlZmF1bHRcbiAgICAgIC8vIGdyb3VwLCBvciBzZXJ2ZSB0aGUgaW1hZ2UgYXMgYSBmaWxlIChwdWJsaWMvIG9yIGEgc3RhdGljIGltcG9ydCkuXG4gICAgICB0aHJvdyBuZXcgb3B0aW1pemVyLkltYWdlRXJyb3IoXG4gICAgICAgIDUwMixcbiAgICAgICAgJ1widXJsXCIgcGFyYW1ldGVyIGlzIHZhbGlkIGJ1dCBpdHMgc291cmNlIGlzIGEgcm91dGUgaW4gYW5vdGhlciAnICtcbiAgICAgICAgICBgZnVuY3Rpb25Hcm91cHMgZ3JvdXAgKFwiJHtyZXNwb25zZS5vdGhlckdyb3VwfVwiKSwgd2hpY2ggdGhlIGltYWdlIGAgK1xuICAgICAgICAgIFwib3B0aW1pemVyIGNhbm5vdCBmZXRjaFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlc3BvbnNlLnRvb0xhcmdlKSB7XG4gICAgICB0aHJvdyBuZXcgb3B0aW1pemVyLkltYWdlRXJyb3IoXG4gICAgICAgIDQxMyxcbiAgICAgICAgJ1widXJsXCIgcGFyYW1ldGVyIGlzIHZhbGlkIGJ1dCBpbnRlcm5hbCByZXNwb25zZSBpcyBpbnZhbGlkJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICghcmVzcG9uc2Uuc3RhdHVzQ29kZSB8fCByZXNwb25zZS5ib2R5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IG9wdGltaXplci5JbWFnZUVycm9yKFxuICAgICAgICA0MDAsXG4gICAgICAgICdcInVybFwiIHBhcmFtZXRlciBpcyB2YWxpZCBidXQgaW50ZXJuYWwgcmVzcG9uc2UgaXMgaW52YWxpZCcsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYnVmZmVyOiByZXNwb25zZS5ib2R5LFxuICAgICAgY29udGVudFR5cGU6IGZpcnN0VmFsdWUocmVzcG9uc2UuaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSkgPz8gbnVsbCxcbiAgICAgIGNhY2hlQ29udHJvbDogZmlyc3RWYWx1ZShyZXNwb25zZS5oZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSkgPz8gbnVsbCxcbiAgICAgIGV0YWc6IGV4dHJhY3RFdGFnKFxuICAgICAgICBmaXJzdFZhbHVlKHJlc3BvbnNlLmhlYWRlcnMuZXRhZykgPz8gbnVsbCxcbiAgICAgICAgcmVzcG9uc2UuYm9keSxcbiAgICAgICksXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIGBDYWNoZWRSb3V0ZUtpbmQuSU1BR0VgLCB3aGljaCBpcyBhbHNvIGBSb3V0ZUtpbmQuSU1BR0VgLiBSZXN0YXRlZDogdGhlIGVudW0gaXNcbiAqIGEgcnVudGltZSB2YWx1ZSBvZiBgbmV4dGAsIHdoaWNoIHRoZSBidW5kbGUgY2Fubm90IGltcG9ydC5cbiAqL1xuY29uc3QgSU1BR0VfS0lORCA9IFwiSU1BR0VcIiBhcyBDYWNoZWRSb3V0ZUtpbmQuSU1BR0U7XG5cbi8qKiBgaW1hZ2VPcHRpbWl6ZXJgJ3MgYHByZXZpb3VzQ2FjaGVFbnRyeWAuICovXG50eXBlIFByZXZpb3VzSW1hZ2VFbnRyeSA9IFBhcmFtZXRlcnM8XG4gIE5leHRJbWFnZU1vZHVsZXNbXCJvcHRpbWl6ZXJcIl1bXCJpbWFnZU9wdGltaXplclwiXVxuPlszXVtcInByZXZpb3VzQ2FjaGVFbnRyeVwiXTtcblxuaW50ZXJmYWNlIEltYWdlQ2FjaGUge1xuICByZWFkb25seSByZXNwb25zZXM6IEluc3RhbmNlVHlwZTxcbiAgICBOZXh0SW1hZ2VDYWNoZU1vZHVsZXNbXCJyZXNwb25zZUNhY2hlXCJdW1wiZGVmYXVsdFwiXVxuICA+O1xuICByZWFkb25seSBpbWFnZXM6IEluc3RhbmNlVHlwZTxcbiAgICBOZXh0SW1hZ2VNb2R1bGVzW1wib3B0aW1pemVyXCJdW1wiSW1hZ2VPcHRpbWl6ZXJDYWNoZVwiXVxuICA+O1xufVxuXG4vKipcbiAqIFRoZSBhcHAncyBgY2FjaGVIYW5kbGVyYCwgY29uc3RydWN0ZWQgdGhlIHdheSBgbmV4dCBzdGFydGAgY29uc3RydWN0cyBpdCBmb3JcbiAqIGltYWdlcyAoYG5leHQtc2VydmVyLmpzYCwgYGhhbmRsZU5leHRJbWFnZVJlcXVlc3RgKTogb25jZSwgYW5kIGtlcHQsIHNvIGl0c1xuICogaW4tbWVtb3J5IGxheWVyIGxhc3RzIGFjcm9zcyByZXF1ZXN0cy4gSXRzIHBhdGggaW4gYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYFxuICogaXMgcmVsYXRpdmUgdG8gdGhlIGRpc3QgZGlyOyBzZWUge0BsaW5rIGNhY2hlSGFuZGxlclVybH0uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGxvYWRJbWFnZUNhY2hlKFxuICB7IGRlcGxveW1lbnRSb290LCBtYW5pZmVzdCwgaW1wb3J0TW9kdWxlIH06IEltYWdlT3B0aW1pemVyT3B0aW9ucyxcbiAgbG9hZGVkOiBSZXR1cm5UeXBlPHR5cGVvZiBsb2FkSW1hZ2VSdW50aW1lPixcbik6IFByb21pc2U8SW1hZ2VDYWNoZT4ge1xuICBjb25zdCB7IG5leHQsIG5leHRDb25maWcgfSA9IGxvYWRlZDtcbiAgY29uc3QgbW9kdWxlczogTmV4dEltYWdlQ2FjaGVNb2R1bGVzID0ge1xuICAgIHJlc3BvbnNlQ2FjaGU6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL3Jlc3BvbnNlLWNhY2hlL2luZGV4LmpzXCIpLFxuICB9O1xuICBjb25zdCBkaXN0RGlyID0gam9pbihcbiAgICBkZXBsb3ltZW50Um9vdCxcbiAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgbWFuaWZlc3QuY29uZmlnLmRpc3REaXIsXG4gICk7XG4gIGxldCBjYWNoZUhhbmRsZXI6IEluc3RhbmNlVHlwZTxDYWNoZUhhbmRsZXJDbGFzcz4gfCB1bmRlZmluZWQ7XG4gIGlmIChuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcikge1xuICAgIGNvbnN0IHVybCA9IGNhY2hlSGFuZGxlclVybChkaXN0RGlyLCBuZXh0Q29uZmlnLmNhY2hlSGFuZGxlcik7XG4gICAgY29uc3QgaW1wb3J0ZWQgPSAoYXdhaXQgKGltcG9ydE1vZHVsZVxuICAgICAgPyBpbXBvcnRNb2R1bGUodXJsKVxuICAgICAgOiBpbXBvcnQodXJsKSkpIGFzIHsgZGVmYXVsdD86IENhY2hlSGFuZGxlckNsYXNzIH0gJiBDYWNoZUhhbmRsZXJDbGFzcztcbiAgICBjb25zdCBDYWNoZUhhbmRsZXIgPSBpbXBvcnRlZC5kZWZhdWx0ID8/IGltcG9ydGVkO1xuICAgIGNhY2hlSGFuZGxlciA9IG5ldyBDYWNoZUhhbmRsZXIoe1xuICAgICAgZGV2OiBmYWxzZSxcbiAgICAgIGZsdXNoVG9EaXNrOiBuZXh0Q29uZmlnLmV4cGVyaW1lbnRhbC5pc3JGbHVzaFRvRGlzayxcbiAgICAgIHNlcnZlckRpc3REaXI6IGpvaW4oZGlzdERpciwgXCJzZXJ2ZXJcIiksXG4gICAgICBtYXhNZW1vcnlDYWNoZVNpemU6IG5leHRDb25maWcuY2FjaGVNYXhNZW1vcnlTaXplLFxuICAgICAgcmV2YWxpZGF0ZWRUYWdzOiBbXSxcbiAgICAgIF9yZXF1ZXN0SGVhZGVyczoge30sXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZXNwb25zZXM6IG5ld0ltYWdlUmVzcG9uc2VDYWNoZShtb2R1bGVzLnJlc3BvbnNlQ2FjaGUuZGVmYXVsdCksXG4gICAgaW1hZ2VzOiBuZXcgbmV4dC5vcHRpbWl6ZXIuSW1hZ2VPcHRpbWl6ZXJDYWNoZSh7XG4gICAgICBkaXN0RGlyLFxuICAgICAgbmV4dENvbmZpZyxcbiAgICAgIGNhY2hlSGFuZGxlcixcbiAgICB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBgbmV3IFJlc3BvbnNlQ2FjaGUoLi4uKWAgZm9yIGltYWdlcywgb24gZWl0aGVyIHNpZGUgb2YgbmV4dCAxNi4zLjguIEJlZm9yZVxuICogaXQgdGhlIGNvbnN0cnVjdG9yIHRvb2sgYG1pbmltYWxNb2RlYDsgZnJvbSBpdCwgYHsgbWluaW1hbE1vZGUsIHJvdXRlIH1gLCBhbmRcbiAqIGl0IHRocm93cyB3aXRob3V0IGEgYHJvdXRlYCAtIGBuZXh0LXNlcnZlci5qc2AgcGFzc2VzIGBcImltYWdlXCJgLiBOZWl0aGVyIGZvcm1cbiAqIGNhbiBzdGFuZCBpbiBmb3IgdGhlIG90aGVyOiBhbiBvbGRlciBgbmV4dGAgdGFrZXMgdGhlIG9wdGlvbnMgb2JqZWN0IGFzIGFcbiAqIHRydXRoeSBgbWluaW1hbE1vZGVgLCBhbmQgMTYuMy44IHJlamVjdHMgYSBiYXJlIGBmYWxzZWAuXG4gKlxuICogVG9sZCBhcGFydCBieSB3aGV0aGVyIHRoZSBjb25zdHJ1Y3RvciBhY2NlcHRzIHRoZSBvbGRlciBmb3JtIHJhdGhlciB0aGFuIGJ5XG4gKiB0aGUgdmVyc2lvbiwgd2hpY2ggYSBjYW5hcnkgZG9lcyBub3Qgb3JkZXIsIG9yIGJ5IGl0cyBwcml2YXRlIGZpZWxkczogMTYuMy44XG4gKiBkZXN0cnVjdHVyZXMgYSBiYXJlIGBmYWxzZWAgaW50byBubyBgcm91dGVgIGFuZCB0aHJvd3MuIE9ubHkgdGhhdCB0aHJvd1xuICogc2VsZWN0cyB0aGUgbmV3ZXIgZm9ybTsgYW55IG90aGVyIGVycm9yIGZyb20gdGhlIGNvbnN0cnVjdG9yIGlzIHJldGhyb3duXG4gKiByYXRoZXIgdGhhbiByZWFkIGFzIGEgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5ld0ltYWdlUmVzcG9uc2VDYWNoZShcbiAgUmVzcG9uc2VDYWNoZTogTmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0sXG4pOiBJbnN0YW5jZVR5cGU8TmV4dEltYWdlQ2FjaGVNb2R1bGVzW1wicmVzcG9uc2VDYWNoZVwiXVtcImRlZmF1bHRcIl0+IHtcbiAgY29uc3QgTGVnYWN5ID0gUmVzcG9uc2VDYWNoZSBhcyB1bmtub3duIGFzIG5ldyAoXG4gICAgbWluaW1hbE1vZGU6IGJvb2xlYW4sXG4gICkgPT4gSW5zdGFuY2VUeXBlPHR5cGVvZiBSZXNwb25zZUNhY2hlPjtcbiAgdHJ5IHtcbiAgICByZXR1cm4gbmV3IExlZ2FjeShmYWxzZSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghU3RyaW5nKChlcnIgYXMgRXJyb3IpPy5tZXNzYWdlKS5pbmNsdWRlcyhcInJlcXVpcmVzIGEgc291cmNlIHJvdXRlXCIpKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2VDYWNoZSh7IG1pbmltYWxNb2RlOiBmYWxzZSwgcm91dGU6IFwiaW1hZ2VcIiB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGBmb3JtYXREeW5hbWljSW1wb3J0UGF0aGAgZnJvbSBgbmV4dC9kaXN0L2xpYi9mb3JtYXQtZHluYW1pYy1pbXBvcnQtcGF0aC5qc2AsXG4gKiByZXN0YXRlZDogYG5leHQgYnVpbGRgIGRvZXNuJ3QgdHJhY2UgdGhhdCBtb2R1bGUgaW50byB0aGUgZGVwbG95bWVudCwgc29cbiAqIGxvYWRpbmcgaXQgZmFpbGVkIGV2ZXJ5IGltYWdlIHJlcXVlc3Qgd2l0aCB0aGUgY2FjaGUgb24uXG4gKi9cbmZ1bmN0aW9uIGNhY2hlSGFuZGxlclVybChkaXN0RGlyOiBzdHJpbmcsIGNhY2hlSGFuZGxlcjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcGF0aCA9IGNhY2hlSGFuZGxlci5zdGFydHNXaXRoKFwiZmlsZTovL1wiKVxuICAgID8gZmlsZVVSTFRvUGF0aChjYWNoZUhhbmRsZXIpXG4gICAgOiBjYWNoZUhhbmRsZXI7XG4gIHJldHVybiBwYXRoVG9GaWxlVVJMKFxuICAgIGlzQWJzb2x1dGVQYXRoKHBhdGgpID8gcGF0aCA6IGpvaW4oZGlzdERpciwgcGF0aCksXG4gICkudG9TdHJpbmcoKTtcbn1cblxuLyoqXG4gKiBgaW1hZ2VzYCwgd2l0aCBpdHMgYHNldGAgbW92ZWQgb2ZmIHRoZSByZXNwb25zZSdzIGNyaXRpY2FsIHBhdGguXG4gKlxuICogYFJlc3BvbnNlQ2FjaGVgIGF3YWl0cyB0aGUgd3JpdGUgb2YgYSBmcmVzaGx5IG9wdGltaXplZCBpbWFnZSBiZWZvcmUgaXQgaGFuZHNcbiAqIHRoZSBpbWFnZSBiYWNrLCBzbyBldmVyeSBtaXNzIHBhaWQgYW4gUzMgYFB1dE9iamVjdGAgKH4zMCBtcyBtZWFzdXJlZCkgYmVmb3JlXG4gKiBpdHMgZmlyc3QgYnl0ZS4gVGhlIHdyaXRlIGlzIHJlZ2lzdGVyZWQgd2l0aCBgd2FpdFVudGlsYCBpbnN0ZWFkLCB3aGljaCB0aGVcbiAqIHJ1bnRpbWUgZHJhaW5zIGJlZm9yZSBhIExhbWJkYSBpbnZvY2F0aW9uIHJldHVybnMgb3IgYSBjb250YWluZXIgc2h1dHMgZG93bixcbiAqIHNvIGl0IHN0aWxsIGxhbmRzLiBBIGZhaWxlZCB3cml0ZSBpcyBsb2dnZWQ7IHRoZSBuZXh0IHJlcXVlc3Qgb3B0aW1pemVzIHRoZVxuICogaW1hZ2UgYWdhaW4sIHdoaWNoIGlzIHdoYXQgaXQgd291bGQgaGF2ZSBkb25lIGFueXdheS5cbiAqL1xuZnVuY3Rpb24gZGVmZXJXcml0ZXMoXG4gIGltYWdlczogSW1hZ2VDYWNoZVtcImltYWdlc1wiXSxcbiAgd2FpdFVudGlsOiAocHJvbWlzZTogUHJvbWlzZTx1bmtub3duPikgPT4gdm9pZCxcbik6IEltYWdlQ2FjaGVbXCJpbWFnZXNcIl0ge1xuICBjb25zdCBkZWZlcnJlZCA9IE9iamVjdC5jcmVhdGUoaW1hZ2VzKSBhcyBJbWFnZUNhY2hlW1wiaW1hZ2VzXCJdO1xuICBkZWZlcnJlZC5zZXQgPSAoLi4uYXJnczogUGFyYW1ldGVyczxJbWFnZUNhY2hlW1wiaW1hZ2VzXCJdW1wic2V0XCJdPikgPT4ge1xuICAgIHdhaXRVbnRpbChcbiAgICAgIGltYWdlcy5zZXQoLi4uYXJncykuY2F0Y2goKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJGYWlsZWQgdG8gY2FjaGUgYW4gb3B0aW1pemVkIGltYWdlOlwiLCBlcnJvcik7XG4gICAgICB9KSxcbiAgICApO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcbiAgcmV0dXJuIGRlZmVycmVkO1xufVxuXG5mdW5jdGlvbiBzZW5kVGV4dChcbiAgcmVzOiBTaGltU2VydmVyUmVzcG9uc2UsXG4gIHN0YXR1c0NvZGU6IG51bWJlcixcbiAgYm9keTogc3RyaW5nLFxuKTogdm9pZCB7XG4gIHJlcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcbiAgcmVzLnNldEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcInRleHQvcGxhaW5cIik7XG4gIHJlcy5lbmQoYm9keSk7XG59XG5cbi8qKlxuICogVGhlIGltYWdlIGNvbmZpZyBjb21lcyBmcm9tIHRoZSBhcHAncyBvd24gYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCwgbm90IHRoZVxuICogYWRhcHRlciBtYW5pZmVzdDogYGltYWdlT3B0aW1pemVyYCByZWFkcyB3aG9sZSBgZXhwZXJpbWVudGFsYCBhbmQgYGltYWdlc2BcbiAqIG9iamVjdHMsIGFuZCBtaXJyb3JpbmcgdGhvc2UgaW50byB0aGUgbWFuaWZlc3Qgd291bGQgYmUgYSBzZWNvbmQgZGVmaW5pdGlvbiBvZlxuICogdGhlIHNhbWUgdGhpbmcgdGhhdCBzaWxlbnRseSBnb2VzIHN0YWxlIG9uIGEgYG5leHRgIG1pbm9yLlxuICovXG5mdW5jdGlvbiBsb2FkSW1hZ2VSdW50aW1lKHsgZGVwbG95bWVudFJvb3QsIG1hbmlmZXN0IH06IEltYWdlT3B0aW1pemVyT3B0aW9ucykge1xuICBjb25zdCBuZXh0OiBOZXh0SW1hZ2VNb2R1bGVzID0ge1xuICAgIGNvbmZpZ1NoYXJlZDogbmV4dE1vZHVsZShcIm5leHQvZGlzdC9zZXJ2ZXIvY29uZmlnLXNoYXJlZC5qc1wiKSxcbiAgICBpbWFnZUNvbmZpZzogbmV4dE1vZHVsZShcIm5leHQvZGlzdC9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZy5qc1wiKSxcbiAgICBvcHRpbWl6ZXI6IG5leHRNb2R1bGUoXCJuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiKSxcbiAgICBzZXJ2ZVN0YXRpYzogbmV4dE1vZHVsZShcIm5leHQvZGlzdC9zZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCIpLFxuICB9O1xuICBjb25zdCBwYXRoID0gam9pbihcbiAgICBkZXBsb3ltZW50Um9vdCxcbiAgICBtYW5pZmVzdC5yZWxhdGl2ZVByb2plY3REaXIsXG4gICAgbWFuaWZlc3QuY29uZmlnLmRpc3REaXIsXG4gICAgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiLFxuICApO1xuICBjb25zdCByZXF1aXJlZDogUmVxdWlyZWRTZXJ2ZXJGaWxlcyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmLThcIikpO1xuICBjb25zdCBuZXh0Q29uZmlnID0gbmV4dC5jb25maWdTaGFyZWQuZ2V0TmV4dENvbmZpZ1J1bnRpbWUocmVxdWlyZWQuY29uZmlnKTtcbiAgcmV0dXJuIHtcbiAgICBuZXh0LFxuICAgIG5leHRDb25maWcsXG4gICAgaW1hZ2VzQ29uZmlnOiB7XG4gICAgICAuLi5uZXh0LmltYWdlQ29uZmlnLmltYWdlQ29uZmlnRGVmYXVsdCxcbiAgICAgIC4uLm5leHRDb25maWcuaW1hZ2VzLFxuICAgIH0sXG4gIH07XG59XG4iXX0=
|