cdk-nextjs 0.5.16 → 0.6.1
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 +290 -183
- package/.jsii.tabl.json +1 -1
- package/API.md +244 -4
- package/README.md +2 -2
- package/docs/breaking-changes.md +53 -0
- package/docs/development-guide.md +6 -4
- package/lib/adapter/adapter.mjs +1 -1
- package/lib/adapter/cache-handler.mjs +1 -1
- package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +3 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
- package/lib/image-optimization/handler-utils.d.ts +7 -5
- package/lib/image-optimization/handler-utils.js +17 -11
- package/lib/image-optimization/handler-utils.test.js +42 -6
- package/lib/image-optimization/handler.mjs +20 -6
- package/lib/nextjs-api.d.ts +26 -0
- package/lib/nextjs-api.js +41 -13
- package/lib/nextjs-api.test.d.ts +1 -0
- package/lib/nextjs-api.test.js +144 -0
- package/lib/nextjs-build/nextjs-build.d.ts +8 -0
- package/lib/nextjs-build/nextjs-build.js +12 -2
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-compute/nextjs-image-function.d.ts +10 -0
- package/lib/nextjs-compute/nextjs-image-function.js +3 -2
- package/lib/nextjs-distribution.d.ts +11 -0
- package/lib/nextjs-distribution.js +16 -10
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.d.ts +18 -0
- package/lib/nextjs-static-assets.js +33 -6
- package/lib/nextjs-static-assets.test.d.ts +1 -0
- package/lib/nextjs-static-assets.test.js +58 -0
- package/lib/root-constructs/nextjs-base-construct.d.ts +38 -1
- package/lib/root-constructs/nextjs-base-construct.js +41 -3
- package/lib/root-constructs/nextjs-global-containers.d.ts +6 -1
- package/lib/root-constructs/nextjs-global-containers.js +11 -5
- package/lib/root-constructs/nextjs-global-functions.d.ts +5 -0
- package/lib/root-constructs/nextjs-global-functions.js +10 -4
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.js +5 -5
- package/lib/utils/base-path.d.ts +40 -0
- package/lib/utils/base-path.js +123 -0
- package/lib/utils/base-path.test.d.ts +1 -0
- package/lib/utils/base-path.test.js +163 -0
- package/package.json +1 -1
|
@@ -7,21 +7,27 @@ exports.resolveErrorResponse = resolveErrorResponse;
|
|
|
7
7
|
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
8
8
|
const image_optimizer_js_1 = require("next/dist/server/image-optimizer.js");
|
|
9
9
|
const serve_static_js_1 = require("next/dist/server/serve-static.js");
|
|
10
|
+
const base_path_1 = require("../utils/base-path");
|
|
10
11
|
/**
|
|
11
12
|
* Fetches a non-absolute (local) image referenced by an `<Image>` from S3.
|
|
12
13
|
*
|
|
13
|
-
* `
|
|
14
|
-
* includes it. `url` is inconsistent: next-image-loader bakes `basePath` into
|
|
14
|
+
* `url` is inconsistent: next-image-loader bakes the app's own `basePath` into
|
|
15
15
|
* the href for statically imported images, while plain string paths are passed
|
|
16
|
-
* through as literally written
|
|
17
|
-
*
|
|
16
|
+
* through as literally written. So `nextBasePath` (the app's config) is stripped
|
|
17
|
+
* off, then `staticAssetsKeyPrefix` (`NextjsStaticAssets.keyPrefix`) applied.
|
|
18
|
+
* The two are separate arguments because nothing requires them to be the same
|
|
19
|
+
* value — e.g. an app whose `basePath` is an API Gateway stage, deployed without
|
|
20
|
+
* the CDK `basePath` prop.
|
|
18
21
|
*/
|
|
19
|
-
async function fetchFromS3(s3, bucket, url,
|
|
20
|
-
// Matching on a path boundary keeps a sibling like "/basement/logo.png"
|
|
21
|
-
//
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
async function fetchFromS3(s3, bucket, url, nextBasePath, staticAssetsKeyPrefix = "") {
|
|
23
|
+
// Matching on a path boundary keeps a sibling like "/basement/logo.png" from
|
|
24
|
+
// being treated as nextBasePath "/base" plus "ment/logo.png". It's still
|
|
25
|
+
// indistinguishable from a real `public/base/` directory, which loses; that's
|
|
26
|
+
// the right trade, since every statically imported image carries the prefix
|
|
27
|
+
// and the alternative costs an S3 round trip per request to detect it.
|
|
28
|
+
const hasNextBasePath = !!nextBasePath &&
|
|
29
|
+
(url === nextBasePath || url.startsWith(`${nextBasePath}/`));
|
|
30
|
+
const key = (0, base_path_1.joinPath)(staticAssetsKeyPrefix, hasNextBasePath ? url.slice(nextBasePath.length) : url);
|
|
25
31
|
const response = await s3.send(new client_s3_1.GetObjectCommand({
|
|
26
32
|
Bucket: bucket,
|
|
27
33
|
Key: key,
|
|
@@ -74,4 +80,4 @@ function resolveErrorResponse(error) {
|
|
|
74
80
|
}
|
|
75
81
|
return { statusCode: 500, message: "Internal Server Error" };
|
|
76
82
|
}
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbWFnZS1vcHRpbWl6YXRpb24vaGFuZGxlci11dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWlCQSxrQ0EwQ0M7QUFHRCw0REFZQztBQWFELG9EQWNDO0FBckdELHNEQUFzRDtBQUN0RCxrREFBZ0U7QUFDaEUsNEVBQWlFO0FBQ2pFLHNFQUFnRTtBQUNoRSxrREFBOEM7QUFFOUM7Ozs7Ozs7Ozs7R0FVRztBQUNJLEtBQUssVUFBVSxXQUFXLENBQy9CLEVBQVksRUFDWixNQUFjLEVBQ2QsR0FBVyxFQUNYLFlBQW9CLEVBQ3BCLHdCQUFnQyxFQUFFO0lBRWxDLDZFQUE2RTtJQUM3RSx5RUFBeUU7SUFDekUsOEVBQThFO0lBQzlFLDRFQUE0RTtJQUM1RSx1RUFBdUU7SUFDdkUsTUFBTSxlQUFlLEdBQ25CLENBQUMsQ0FBQyxZQUFZO1FBQ2QsQ0FBQyxHQUFHLEtBQUssWUFBWSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0QsTUFBTSxHQUFHLEdBQUcsSUFBQSxvQkFBUSxFQUNsQixxQkFBcUIsRUFDckIsZUFBZSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUN2RCxDQUFDO0lBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUM1QixJQUFJLDRCQUFnQixDQUFDO1FBQ25CLE1BQU0sRUFBRSxNQUFNO1FBQ2QsR0FBRyxFQUFFLEdBQUc7S0FDVCxDQUFDLENBQ0gsQ0FBQztJQUVGLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDM0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLElBQUksS0FBSyxFQUFFLE1BQU0sS0FBSyxJQUFJLElBQWlDLEVBQUUsQ0FBQztRQUM1RCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsT0FBTztRQUNMLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM3QixXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsSUFBSSxJQUFJO1FBQ3pDLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUU7S0FDMUIsQ0FBQztBQUNKLENBQUM7QUFFRCw4RUFBOEU7QUFDOUUsU0FBZ0Isd0JBQXdCLENBQ3RDLEdBQVcsRUFDWCxXQUEwQjtJQUUxQixNQUFNLENBQUMscUJBQXFCLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNsRCxNQUFNLHFCQUFxQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyRSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMzQyxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBQ0QsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBQSw4QkFBWSxFQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzVDLE9BQU8sR0FBRyxRQUFRLElBQUksU0FBUyxFQUFFLENBQUM7QUFDcEMsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQixvQkFBb0IsQ0FBQyxLQUFjO0lBSWpELElBQUksS0FBSyxZQUFZLCtCQUFVLEVBQUUsQ0FBQztRQUNoQyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsSUFBSSxLQUFLLFlBQVksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDekQsT0FBTztZQUNMLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLDZDQUE2QztTQUN2RCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCB7IEdldE9iamVjdENvbW1hbmQsIFMzQ2xpZW50IH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1zM1wiO1xuaW1wb3J0IHsgSW1hZ2VFcnJvciB9IGZyb20gXCJuZXh0L2Rpc3Qvc2VydmVyL2ltYWdlLW9wdGltaXplci5qc1wiO1xuaW1wb3J0IHsgZ2V0RXh0ZW5zaW9uIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvc2VydmUtc3RhdGljLmpzXCI7XG5pbXBvcnQgeyBqb2luUGF0aCB9IGZyb20gXCIuLi91dGlscy9iYXNlLXBhdGhcIjtcblxuLyoqXG4gKiBGZXRjaGVzIGEgbm9uLWFic29sdXRlIChsb2NhbCkgaW1hZ2UgcmVmZXJlbmNlZCBieSBhbiBgPEltYWdlPmAgZnJvbSBTMy5cbiAqXG4gKiBgdXJsYCBpcyBpbmNvbnNpc3RlbnQ6IG5leHQtaW1hZ2UtbG9hZGVyIGJha2VzIHRoZSBhcHAncyBvd24gYGJhc2VQYXRoYCBpbnRvXG4gKiB0aGUgaHJlZiBmb3Igc3RhdGljYWxseSBpbXBvcnRlZCBpbWFnZXMsIHdoaWxlIHBsYWluIHN0cmluZyBwYXRocyBhcmUgcGFzc2VkXG4gKiB0aHJvdWdoIGFzIGxpdGVyYWxseSB3cml0dGVuLiBTbyBgbmV4dEJhc2VQYXRoYCAodGhlIGFwcCdzIGNvbmZpZykgaXMgc3RyaXBwZWRcbiAqIG9mZiwgdGhlbiBgc3RhdGljQXNzZXRzS2V5UHJlZml4YCAoYE5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXhgKSBhcHBsaWVkLlxuICogVGhlIHR3byBhcmUgc2VwYXJhdGUgYXJndW1lbnRzIGJlY2F1c2Ugbm90aGluZyByZXF1aXJlcyB0aGVtIHRvIGJlIHRoZSBzYW1lXG4gKiB2YWx1ZSDigJQgZS5nLiBhbiBhcHAgd2hvc2UgYGJhc2VQYXRoYCBpcyBhbiBBUEkgR2F0ZXdheSBzdGFnZSwgZGVwbG95ZWQgd2l0aG91dFxuICogdGhlIENESyBgYmFzZVBhdGhgIHByb3AuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEZyb21TMyhcbiAgczM6IFMzQ2xpZW50LFxuICBidWNrZXQ6IHN0cmluZyxcbiAgdXJsOiBzdHJpbmcsXG4gIG5leHRCYXNlUGF0aDogc3RyaW5nLFxuICBzdGF0aWNBc3NldHNLZXlQcmVmaXg6IHN0cmluZyA9IFwiXCIsXG4pOiBQcm9taXNlPHsgYnVmZmVyOiBCdWZmZXI7IGNvbnRlbnRUeXBlOiBzdHJpbmcgfCBudWxsOyBldGFnOiBzdHJpbmcgfT4ge1xuICAvLyBNYXRjaGluZyBvbiBhIHBhdGggYm91bmRhcnkga2VlcHMgYSBzaWJsaW5nIGxpa2UgXCIvYmFzZW1lbnQvbG9nby5wbmdcIiBmcm9tXG4gIC8vIGJlaW5nIHRyZWF0ZWQgYXMgbmV4dEJhc2VQYXRoIFwiL2Jhc2VcIiBwbHVzIFwibWVudC9sb2dvLnBuZ1wiLiBJdCdzIHN0aWxsXG4gIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gYSByZWFsIGBwdWJsaWMvYmFzZS9gIGRpcmVjdG9yeSwgd2hpY2ggbG9zZXM7IHRoYXQnc1xuICAvLyB0aGUgcmlnaHQgdHJhZGUsIHNpbmNlIGV2ZXJ5IHN0YXRpY2FsbHkgaW1wb3J0ZWQgaW1hZ2UgY2FycmllcyB0aGUgcHJlZml4XG4gIC8vIGFuZCB0aGUgYWx0ZXJuYXRpdmUgY29zdHMgYW4gUzMgcm91bmQgdHJpcCBwZXIgcmVxdWVzdCB0byBkZXRlY3QgaXQuXG4gIGNvbnN0IGhhc05leHRCYXNlUGF0aCA9XG4gICAgISFuZXh0QmFzZVBhdGggJiZcbiAgICAodXJsID09PSBuZXh0QmFzZVBhdGggfHwgdXJsLnN0YXJ0c1dpdGgoYCR7bmV4dEJhc2VQYXRofS9gKSk7XG4gIGNvbnN0IGtleSA9IGpvaW5QYXRoKFxuICAgIHN0YXRpY0Fzc2V0c0tleVByZWZpeCxcbiAgICBoYXNOZXh0QmFzZVBhdGggPyB1cmwuc2xpY2UobmV4dEJhc2VQYXRoLmxlbmd0aCkgOiB1cmwsXG4gICk7XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBzMy5zZW5kKFxuICAgIG5ldyBHZXRPYmplY3RDb21tYW5kKHtcbiAgICAgIEJ1Y2tldDogYnVja2V0LFxuICAgICAgS2V5OiBrZXksXG4gICAgfSksXG4gICk7XG5cbiAgY29uc3QgYm9keSA9IHJlc3BvbnNlLkJvZHk7XG4gIGlmICghYm9keSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgRW1wdHkgcmVzcG9uc2UgZnJvbSBTMyBmb3Iga2V5OiAke2tleX1gKTtcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogQnVmZmVyW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5IGFzIEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4pIHtcbiAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBidWZmZXI6IEJ1ZmZlci5jb25jYXQoY2h1bmtzKSxcbiAgICBjb250ZW50VHlwZTogcmVzcG9uc2UuQ29udGVudFR5cGUgfHwgbnVsbCxcbiAgICBldGFnOiByZXNwb25zZS5FVGFnIHx8IFwiXCIsXG4gIH07XG59XG5cbi8qKiBNaXJyb3JzIE5leHQuanMncyBvd24gYGdldEZpbGVOYW1lV2l0aEV4dGVuc2lvbmAgaW4gaW1hZ2Utb3B0aW1pemVyLmpzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVOYW1lV2l0aEV4dGVuc2lvbihcbiAgdXJsOiBzdHJpbmcsXG4gIGNvbnRlbnRUeXBlOiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHtcbiAgY29uc3QgW3VybFdpdGhvdXRRdWVyeVBhcmFtc10gPSB1cmwuc3BsaXQoXCI/XCIsIDEpO1xuICBjb25zdCBmaWxlTmFtZVdpdGhFeHRlbnNpb24gPSB1cmxXaXRob3V0UXVlcnlQYXJhbXMuc3BsaXQoXCIvXCIpLnBvcCgpO1xuICBpZiAoIWNvbnRlbnRUeXBlIHx8ICFmaWxlTmFtZVdpdGhFeHRlbnNpb24pIHtcbiAgICByZXR1cm4gXCJpbWFnZS5iaW5cIjtcbiAgfVxuICBjb25zdCBbZmlsZU5hbWVdID0gZmlsZU5hbWVXaXRoRXh0ZW5zaW9uLnNwbGl0KFwiLlwiLCAxKTtcbiAgY29uc3QgZXh0ZW5zaW9uID0gZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKTtcbiAgcmV0dXJuIGAke2ZpbGVOYW1lfS4ke2V4dGVuc2lvbn1gO1xufVxuXG4vKipcbiAqIE1hcHMgYW4gZXJyb3IgdGhyb3duIHdoaWxlIHByb2Nlc3NpbmcgYW4gaW1hZ2UgcmVxdWVzdCB0byB0aGUgSFRUUFxuICogc3RhdHVzL21lc3NhZ2UgaXQgc2hvdWxkIHByb2R1Y2UsIHByZXNlcnZpbmcgdGhlIHN0YXR1cyBOZXh0LmpzJ3Mgb3duXG4gKiBgSW1hZ2VFcnJvcmAvYGZldGNoRXh0ZXJuYWxJbWFnZWAgYXR0YWNoLiBBIG1pc3NpbmcgUzMgb2JqZWN0IGlzIG1hcHBlZCB0b1xuICogdGhlIHNhbWUgNDAwIE5leHQuanMncyBvd24gbG9jYWwtaW1hZ2UgZmV0Y2ggcGF0aCAoYGZldGNoSW50ZXJuYWxJbWFnZWAgaW5cbiAqIGltYWdlLW9wdGltaXplci5qcykgcHJvZHVjZXMgZm9yIGEgbWlzc2luZyBmaWxlOiBpdCBuZXZlciBpbnNwZWN0cyB0aGVcbiAqIGludGVybmFsIHJlcXVlc3QncyBzdGF0dXMgY29kZSwgc28gYSA0MDQgdGhlcmUganVzdCBmbG93cyBpbnRvIHRoZSBub3JtYWxcbiAqIFwibm90IGEgdmFsaWQgaW1hZ2VcIiBjb250ZW50LXR5cGUgY2hlY2sgYXMgaWYgaXQgd2VyZSBtYWxmb3JtZWQgaW1hZ2VcbiAqIGJ5dGVzLiBUaGlzIG1pcnJvcnMgdGhhdCBiZWhhdmlvciBpbnN0ZWFkIG9mIHN1cmZhY2luZyBhIDQwNCwgc28gRnVuY3Rpb25zXG4gKiBhbmQgQ29udGFpbmVycyBkZXBsb3ltZW50cyByZXNwb25kIGlkZW50aWNhbGx5IGZvciB0aGlzIGNhc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRXJyb3JSZXNwb25zZShlcnJvcjogdW5rbm93bik6IHtcbiAgc3RhdHVzQ29kZTogbnVtYmVyO1xuICBtZXNzYWdlOiBzdHJpbmc7XG59IHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgSW1hZ2VFcnJvcikge1xuICAgIHJldHVybiB7IHN0YXR1c0NvZGU6IGVycm9yLnN0YXR1c0NvZGUsIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UgfTtcbiAgfVxuICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnJvci5uYW1lID09PSBcIk5vU3VjaEtleVwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1c0NvZGU6IDQwMCxcbiAgICAgIG1lc3NhZ2U6IFwiVGhlIHJlcXVlc3RlZCByZXNvdXJjZSBpc24ndCBhIHZhbGlkIGltYWdlLlwiLFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHsgc3RhdHVzQ29kZTogNTAwLCBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiIH07XG59XG4iXX0=
|
|
@@ -37,7 +37,7 @@ describe("fetchFromS3", () => {
|
|
|
37
37
|
Key: "base/foo.png",
|
|
38
38
|
});
|
|
39
39
|
});
|
|
40
|
-
it("
|
|
40
|
+
it("applies the key prefix once when the url already includes the app basePath", async () => {
|
|
41
41
|
mockSend.mockResolvedValue({
|
|
42
42
|
Body: asyncIterableFrom([Buffer.from("data")]),
|
|
43
43
|
ContentType: "image/png",
|
|
@@ -46,11 +46,11 @@ describe("fetchFromS3", () => {
|
|
|
46
46
|
// next-image-loader bakes "/base" into the href for statically imported
|
|
47
47
|
// images, and NextjsStaticAssets uploads under the same prefix, so the
|
|
48
48
|
// key must carry it exactly once.
|
|
49
|
-
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/base/_next/static/media/a.png", "/base");
|
|
49
|
+
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/base/_next/static/media/a.png", "/base", "/base");
|
|
50
50
|
const params = client_s3_1.GetObjectCommand.mock.calls[0][0];
|
|
51
51
|
expect(params.Key).toBe("base/_next/static/media/a.png");
|
|
52
52
|
});
|
|
53
|
-
it("
|
|
53
|
+
it("applies the key prefix when the url omits the app basePath", async () => {
|
|
54
54
|
mockSend.mockResolvedValue({
|
|
55
55
|
Body: asyncIterableFrom([Buffer.from("data")]),
|
|
56
56
|
ContentType: "image/png",
|
|
@@ -59,7 +59,7 @@ describe("fetchFromS3", () => {
|
|
|
59
59
|
// Plain string paths (e.g. `<Image src="/static/foo.jpg">`) are passed
|
|
60
60
|
// through by next/image as written, without basePath baked in, but the
|
|
61
61
|
// S3 key still has it.
|
|
62
|
-
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/static/foo.jpg", "/base");
|
|
62
|
+
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/static/foo.jpg", "/base", "/base");
|
|
63
63
|
const params = client_s3_1.GetObjectCommand.mock.calls[0][0];
|
|
64
64
|
expect(params.Key).toBe("base/static/foo.jpg");
|
|
65
65
|
});
|
|
@@ -71,10 +71,46 @@ describe("fetchFromS3", () => {
|
|
|
71
71
|
});
|
|
72
72
|
// "/basement" merely shares a prefix with basePath "/base"; treating it
|
|
73
73
|
// as a match would produce the key "base/ment/logo.png".
|
|
74
|
-
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/basement/logo.png", "/base");
|
|
74
|
+
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/basement/logo.png", "/base", "/base");
|
|
75
75
|
const params = client_s3_1.GetObjectCommand.mock.calls[0][0];
|
|
76
76
|
expect(params.Key).toBe("base/basement/logo.png");
|
|
77
77
|
});
|
|
78
|
+
// regression test: the Next.js app's own `basePath` (e.g. set to match an
|
|
79
|
+
// API Gateway stage) and the CDK `NextjsStaticAssets` `basePath` prop (key
|
|
80
|
+
// namespacing) are unrelated and don't have to match. A deployment that
|
|
81
|
+
// only sets the former must not leak it into the S3 key.
|
|
82
|
+
it("doesn't apply nextBasePath as a key prefix when the key prefix differs", async () => {
|
|
83
|
+
mockSend.mockResolvedValue({
|
|
84
|
+
Body: asyncIterableFrom([Buffer.from("data")]),
|
|
85
|
+
ContentType: "image/png",
|
|
86
|
+
ETag: '"abc123"',
|
|
87
|
+
});
|
|
88
|
+
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/static/nextjs-icon-light-background.png", "/prod", "");
|
|
89
|
+
const params = client_s3_1.GetObjectCommand.mock.calls[0][0];
|
|
90
|
+
expect(params.Key).toBe("static/nextjs-icon-light-background.png");
|
|
91
|
+
});
|
|
92
|
+
it("strips nextBasePath from a baked-in href before applying a different key prefix", async () => {
|
|
93
|
+
mockSend.mockResolvedValue({
|
|
94
|
+
Body: asyncIterableFrom([Buffer.from("data")]),
|
|
95
|
+
ContentType: "image/png",
|
|
96
|
+
ETag: '"abc123"',
|
|
97
|
+
});
|
|
98
|
+
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/prod/_next/static/media/imported-logo.png", "/prod", "");
|
|
99
|
+
const params = client_s3_1.GetObjectCommand.mock.calls[0][0];
|
|
100
|
+
expect(params.Key).toBe("_next/static/media/imported-logo.png");
|
|
101
|
+
});
|
|
102
|
+
it("doesn't double the separator when the key prefix has a trailing slash", async () => {
|
|
103
|
+
mockSend.mockResolvedValue({
|
|
104
|
+
Body: asyncIterableFrom([Buffer.from("data")]),
|
|
105
|
+
ContentType: "image/png",
|
|
106
|
+
ETag: '"abc123"',
|
|
107
|
+
});
|
|
108
|
+
// BucketDeployment collapses the trailing slash when uploading, so the
|
|
109
|
+
// object is at "base/static/foo.jpg", not "base//static/foo.jpg".
|
|
110
|
+
await (0, handler_utils_1.fetchFromS3)(s3, "my-bucket", "/static/foo.jpg", "", "/base/");
|
|
111
|
+
const params = client_s3_1.GetObjectCommand.mock.calls[0][0];
|
|
112
|
+
expect(params.Key).toBe("base/static/foo.jpg");
|
|
113
|
+
});
|
|
78
114
|
it("returns the concatenated buffer, content type, and etag", async () => {
|
|
79
115
|
mockSend.mockResolvedValue({
|
|
80
116
|
Body: asyncIterableFrom([Buffer.from("hel"), Buffer.from("lo")]),
|
|
@@ -139,4 +175,4 @@ describe("resolveErrorResponse", () => {
|
|
|
139
175
|
});
|
|
140
176
|
});
|
|
141
177
|
});
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci11dGlscy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltYWdlLW9wdGltaXphdGlvbi9oYW5kbGVyLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsbURBSXlCO0FBRXpCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRSxRQUFR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QUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTtcblxuaW1wb3J0IHsgR2V0T2JqZWN0Q29tbWFuZCwgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBJbWFnZUVycm9yIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCI7XG5pbXBvcnQge1xuICBmZXRjaEZyb21TMyxcbiAgZ2V0RmlsZU5hbWVXaXRoRXh0ZW5zaW9uLFxuICByZXNvbHZlRXJyb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4vaGFuZGxlci11dGlsc1wiO1xuXG5mdW5jdGlvbiBhc3luY0l0ZXJhYmxlRnJvbShjaHVua3M6IFVpbnQ4QXJyYXlbXSk6IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4ge1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBhc3luYyAoKSA9PlxuICAgICAgICAgIGkgPCBjaHVua3MubGVuZ3RoXG4gICAgICAgICAgICA/IHsgZG9uZTogZmFsc2UsIHZhbHVlOiBjaHVua3NbaSsrXSB9XG4gICAgICAgICAgICA6IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5kZXNjcmliZShcImZldGNoRnJvbVMzXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja1NlbmQgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHMzID0gbmV3IFMzQ2xpZW50KHt9KSBhcyB1bmtub3duIGFzIFMzQ2xpZW50O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIChzMyBhcyB1bmtub3duIGFzIHsgc2VuZDogdHlwZW9mIG1vY2tTZW5kIH0pLnNlbmQgPSBtb2NrU2VuZDtcbiAgICBtb2NrU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGxlYWRpbmcgc2xhc2ggYW5kIHVzZXMgdXJsIGFzLWlzIGZvciB0aGUgUzMga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJkYXRhXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgIEVUYWc6ICdcImFiYzEyM1wiJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iYXNlL2Zvby5wbmdcIiwgXCJcIik7XG5cbiAgICBjb25zdCBwYXJhbXMgPSAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXTtcbiAgICBleHBlY3QocGFyYW1zKS50b0VxdWFsKHtcbiAgICAgIEJ1Y2tldDogXCJteS1idWNrZXRcIixcbiAgICAgIEtleTogXCJiYXNlL2Zvby5wbmdcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJrZWVwcyBhIHNpbmdsZSBiYXNlUGF0aCBwcmVmaXggd2hlbiB0aGUgdXJsIGFscmVhZHkgaW5jbHVkZXMgaXRcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL3BuZ1wiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuXG4gICAgLy8gbmV4dC1pbWFnZS1sb2FkZXIgYmFrZXMgXCIvYmFzZVwiIGludG8gdGhlIGhyZWYgZm9yIHN0YXRpY2FsbHkgaW1wb3J0ZWRcbiAgICAvLyBpbWFnZXMsIGFuZCBOZXh0anNTdGF0aWNBc3NldHMgdXBsb2FkcyB1bmRlciB0aGUgc2FtZSBwcmVmaXgsIHNvIHRoZVxuICAgIC8vIGtleSBtdXN0IGNhcnJ5IGl0IGV4YWN0bHkgb25jZS5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL2Jhc2UvX25leHQvc3RhdGljL21lZGlhL2EucG5nXCIsXG4gICAgICBcIi9iYXNlXCIsXG4gICAgKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IChHZXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdWzBdO1xuICAgIGV4cGVjdChwYXJhbXMuS2V5KS50b0JlKFwiYmFzZS9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwiYWRkcyB0aGUgYmFzZVBhdGggcHJlZml4IHdoZW4gdGhlIHVybCBvbWl0cyBpdFwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBFVGFnOiAnXCJhYmMxMjNcIicsXG4gICAgfSk7XG5cbiAgICAvLyBQbGFpbiBzdHJpbmcgcGF0aHMgKGUuZy4gYDxJbWFnZSBzcmM9XCIvc3RhdGljL2Zvby5qcGdcIj5gKSBhcmUgcGFzc2VkXG4gICAgLy8gdGhyb3VnaCBieSBuZXh0L2ltYWdlIGFzIHdyaXR0ZW4sIHdpdGhvdXQgYmFzZVBhdGggYmFrZWQgaW4sIGJ1dCB0aGVcbiAgICAvLyBTMyBrZXkgc3RpbGwgaGFzIGl0LlxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9zdGF0aWMvZm9vLmpwZ1wiLCBcIi9iYXNlXCIpO1xuXG4gICAgY29uc3QgcGFyYW1zID0gKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF07XG4gICAgZXhwZWN0KHBhcmFtcy5LZXkpLnRvQmUoXCJiYXNlL3N0YXRpYy9mb28uanBnXCIpO1xuICB9KTtcblxuICBpdChcIm9ubHkgbWF0Y2hlcyBiYXNlUGF0aCBvbiBhIHBhdGggYm91bmRhcnlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL3BuZ1wiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuXG4gICAgLy8gXCIvYmFzZW1lbnRcIiBtZXJlbHkgc2hhcmVzIGEgcHJlZml4IHdpdGggYmFzZVBhdGggXCIvYmFzZVwiOyB0cmVhdGluZyBpdFxuICAgIC8vIGFzIGEgbWF0Y2ggd291bGQgcHJvZHVjZSB0aGUga2V5IFwiYmFzZS9tZW50L2xvZ28ucG5nXCIuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL2Jhc2VtZW50L2xvZ28ucG5nXCIsIFwiL2Jhc2VcIik7XG5cbiAgICBjb25zdCBwYXJhbXMgPSAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXTtcbiAgICBleHBlY3QocGFyYW1zLktleSkudG9CZShcImJhc2UvYmFzZW1lbnQvbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkIGJ1ZmZlciwgY29udGVudCB0eXBlLCBhbmQgZXRhZ1wiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiaGVsXCIpLCBCdWZmZXIuZnJvbShcImxvXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9qcGVnXCIsXG4gICAgICBFVGFnOiAnXCJ0aGUtZXRhZ1wiJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9mb28uanBnXCIsIFwiXCIpO1xuXG4gICAgZXhwZWN0KHJlc3VsdC5idWZmZXIudG9TdHJpbmcoKSkudG9CZShcImhlbGxvXCIpO1xuICAgIGV4cGVjdChyZXN1bHQuY29udGVudFR5cGUpLnRvQmUoXCJpbWFnZS9qcGVnXCIpO1xuICAgIGV4cGVjdChyZXN1bHQuZXRhZykudG9CZSgnXCJ0aGUtZXRhZ1wiJyk7XG4gIH0pO1xuXG4gIGl0KFwicmV0dXJucyBhbiBlbXB0eSBldGFnIHdoZW4gUzMgZG9lc24ndCBwcm92aWRlIG9uZVwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IG51bGwsXG4gICAgICBFVGFnOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvZm9vLnBuZ1wiLCBcIlwiKTtcblxuICAgIGV4cGVjdChyZXN1bHQuZXRhZykudG9CZShcIlwiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlTnVsbCgpO1xuICB9KTtcblxuICBpdChcInRocm93cyB3aGVuIFMzIHJldHVybnMgbm8gYm9keVwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoeyBCb2R5OiB1bmRlZmluZWQgfSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvbWlzc2luZy5wbmdcIiwgXCJcIiksXG4gICAgKS5yZWplY3RzLnRvVGhyb3coL0VtcHR5IHJlc3BvbnNlIGZyb20gUzMvKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJnZXRGaWxlTmFtZVdpdGhFeHRlbnNpb25cIiwgKCkgPT4ge1xuICBpdChcImRlcml2ZXMgZmlsZW5hbWUgYW5kIGV4dGVuc2lvbiBmcm9tIHRoZSB1cmwgYW5kIGNvbnRlbnQgdHlwZVwiLCAoKSA9PiB7XG4gICAgZXhwZWN0KFxuICAgICAgZ2V0RmlsZU5hbWVXaXRoRXh0ZW5zaW9uKFwiL2Zvby9iYXIucG5nP3c9MTAwJnE9NzVcIiwgXCJpbWFnZS93ZWJwXCIpLFxuICAgICkudG9CZShcImJhci53ZWJwXCIpO1xuICB9KTtcblxuICBpdChcImZhbGxzIGJhY2sgdG8gaW1hZ2UuYmluIHdoZW4gY29udGVudFR5cGUgaXMgbWlzc2luZ1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KGdldEZpbGVOYW1lV2l0aEV4dGVuc2lvbihcIi9mb28vYmFyLnBuZ1wiLCBudWxsKSkudG9CZShcImltYWdlLmJpblwiKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHRvIGltYWdlLmJpbiB3aGVuIHRoZSB1cmwgaGFzIG5vIGZpbGVuYW1lIHNlZ21lbnRcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChnZXRGaWxlTmFtZVdpdGhFeHRlbnNpb24oXCIvXCIsIFwiaW1hZ2UvcG5nXCIpKS50b0JlKFwiaW1hZ2UuYmluXCIpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZShcInJlc29sdmVFcnJvclJlc3BvbnNlXCIsICgpID0+IHtcbiAgaXQoXCJwcmVzZXJ2ZXMgdGhlIHN0YXR1cyBjb2RlIGFuZCBtZXNzYWdlIGZyb20gYW4gSW1hZ2VFcnJvclwiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgSW1hZ2VFcnJvcig0MDAsICdcInVybFwiIHBhcmFtZXRlciBpcyBub3QgYWxsb3dlZCcpO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnLFxuICAgIH0pO1xuICB9KTtcblxuICBpdChcIm1hcHMgYSBtaXNzaW5nIFMzIG9iamVjdCB0byB0aGUgc2FtZSA0MDAgTmV4dC5qcydzIG93biBsb2NhbC1pbWFnZSBmZXRjaCBwcm9kdWNlc1wiLCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJOb1N1Y2hLZXk6IGRvZXMgbm90IGV4aXN0XCIpO1xuICAgIGVycm9yLm5hbWUgPSBcIk5vU3VjaEtleVwiO1xuXG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKGVycm9yKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA0MDAsXG4gICAgICBtZXNzYWdlOiBcIlRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgaXNuJ3QgYSB2YWxpZCBpbWFnZS5cIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHRvIDUwMCBmb3IgdW5yZWNvZ25pemVkIGVycm9yc1wiLCAoKSA9PiB7XG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKG5ldyBFcnJvcihcImJvb21cIikpKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDUwMCxcbiAgICAgIG1lc3NhZ2U6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIsXG4gICAgfSk7XG4gICAgZXhwZWN0KHJlc29sdmVFcnJvclJlc3BvbnNlKFwibm90IGFuIGVycm9yXCIpKS50b0VxdWFsKHtcbiAgICAgIHN0YXR1c0NvZGU6IDUwMCxcbiAgICAgIG1lc3NhZ2U6IFwiSW50ZXJuYWwgU2VydmVyIEVycm9yXCIsXG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlci11dGlscy50ZXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ltYWdlLW9wdGltaXphdGlvbi9oYW5kbGVyLXV0aWxzLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzREFBc0Q7QUFDdEQsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0FBRWhDLGtEQUFnRTtBQUNoRSw0RUFBaUU7QUFDakUsbURBSXlCO0FBRXpCLFNBQVMsaUJBQWlCLENBQUMsTUFBb0I7SUFDN0MsT0FBTztRQUNMLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixPQUFPO2dCQUNMLElBQUksRUFBRSxLQUFLLElBQUksRUFBRSxDQUNmLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTTtvQkFDZixDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDckMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2FBQ3ZDLENBQUM7UUFDSixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUM7QUFFRCxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRTtJQUMzQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDM0IsTUFBTSxFQUFFLEdBQUcsSUFBSSxvQkFBUSxDQUFDLEVBQUUsQ0FBd0IsQ0FBQztJQUVuRCxVQUFVLENBQUMsR0FBRyxFQUFFO1FBQ2IsRUFBMkMsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQzdELFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN2QixDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQyw0REFBNEQsRUFBRSxLQUFLLElBQUksRUFBRTtRQUMxRSxRQUFR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QUFFLEdBQUcsRUFBRTtRQUMzRixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ3JELEtBQUssQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO1FBRXpCLE1BQU0sQ0FBQyxJQUFBLG9DQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzFDLFVBQVUsRUFBRSxHQUFHO1lBQ2YsT0FBTyxFQUFFLDZDQUE2QztTQUN2RCxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILEVBQUUsQ0FBQywyQ0FBMkMsRUFBRSxHQUFHLEVBQUU7UUFDbkQsTUFBTSxDQUFDLElBQUEsb0NBQW9CLEVBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUN0RCxVQUFVLEVBQUUsR0FBRztZQUNmLE9BQU8sRUFBRSx1QkFBdUI7U0FDakMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxDQUFDLElBQUEsb0NBQW9CLEVBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDbkQsVUFBVSxFQUFFLEdBQUc7WUFDZixPQUFPLEVBQUUsdUJBQXVCO1NBQ2pDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmplc3QubW9jayhcIkBhd3Mtc2RrL2NsaWVudC1zM1wiKTtcblxuaW1wb3J0IHsgR2V0T2JqZWN0Q29tbWFuZCwgUzNDbGllbnQgfSBmcm9tIFwiQGF3cy1zZGsvY2xpZW50LXMzXCI7XG5pbXBvcnQgeyBJbWFnZUVycm9yIH0gZnJvbSBcIm5leHQvZGlzdC9zZXJ2ZXIvaW1hZ2Utb3B0aW1pemVyLmpzXCI7XG5pbXBvcnQge1xuICBmZXRjaEZyb21TMyxcbiAgZ2V0RmlsZU5hbWVXaXRoRXh0ZW5zaW9uLFxuICByZXNvbHZlRXJyb3JSZXNwb25zZSxcbn0gZnJvbSBcIi4vaGFuZGxlci11dGlsc1wiO1xuXG5mdW5jdGlvbiBhc3luY0l0ZXJhYmxlRnJvbShjaHVua3M6IFVpbnQ4QXJyYXlbXSk6IEFzeW5jSXRlcmFibGU8VWludDhBcnJheT4ge1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICBsZXQgaSA9IDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBhc3luYyAoKSA9PlxuICAgICAgICAgIGkgPCBjaHVua3MubGVuZ3RoXG4gICAgICAgICAgICA/IHsgZG9uZTogZmFsc2UsIHZhbHVlOiBjaHVua3NbaSsrXSB9XG4gICAgICAgICAgICA6IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuXG5kZXNjcmliZShcImZldGNoRnJvbVMzXCIsICgpID0+IHtcbiAgY29uc3QgbW9ja1NlbmQgPSBqZXN0LmZuKCk7XG4gIGNvbnN0IHMzID0gbmV3IFMzQ2xpZW50KHt9KSBhcyB1bmtub3duIGFzIFMzQ2xpZW50O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIChzMyBhcyB1bmtub3duIGFzIHsgc2VuZDogdHlwZW9mIG1vY2tTZW5kIH0pLnNlbmQgPSBtb2NrU2VuZDtcbiAgICBtb2NrU2VuZC5tb2NrUmVzZXQoKTtcbiAgfSk7XG5cbiAgaXQoXCJzdHJpcHMgdGhlIGxlYWRpbmcgc2xhc2ggYW5kIHVzZXMgdXJsIGFzLWlzIGZvciB0aGUgUzMga2V5XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJkYXRhXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgIEVUYWc6ICdcImFiYzEyM1wiJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iYXNlL2Zvby5wbmdcIiwgXCJcIik7XG5cbiAgICBjb25zdCBwYXJhbXMgPSAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXTtcbiAgICBleHBlY3QocGFyYW1zKS50b0VxdWFsKHtcbiAgICAgIEJ1Y2tldDogXCJteS1idWNrZXRcIixcbiAgICAgIEtleTogXCJiYXNlL2Zvby5wbmdcIixcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBsaWVzIHRoZSBrZXkgcHJlZml4IG9uY2Ugd2hlbiB0aGUgdXJsIGFscmVhZHkgaW5jbHVkZXMgdGhlIGFwcCBiYXNlUGF0aFwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBFVGFnOiAnXCJhYmMxMjNcIicsXG4gICAgfSk7XG5cbiAgICAvLyBuZXh0LWltYWdlLWxvYWRlciBiYWtlcyBcIi9iYXNlXCIgaW50byB0aGUgaHJlZiBmb3Igc3RhdGljYWxseSBpbXBvcnRlZFxuICAgIC8vIGltYWdlcywgYW5kIE5leHRqc1N0YXRpY0Fzc2V0cyB1cGxvYWRzIHVuZGVyIHRoZSBzYW1lIHByZWZpeCwgc28gdGhlXG4gICAgLy8ga2V5IG11c3QgY2FycnkgaXQgZXhhY3RseSBvbmNlLlxuICAgIGF3YWl0IGZldGNoRnJvbVMzKFxuICAgICAgczMsXG4gICAgICBcIm15LWJ1Y2tldFwiLFxuICAgICAgXCIvYmFzZS9fbmV4dC9zdGF0aWMvbWVkaWEvYS5wbmdcIixcbiAgICAgIFwiL2Jhc2VcIixcbiAgICAgIFwiL2Jhc2VcIixcbiAgICApO1xuXG4gICAgY29uc3QgcGFyYW1zID0gKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF07XG4gICAgZXhwZWN0KHBhcmFtcy5LZXkpLnRvQmUoXCJiYXNlL19uZXh0L3N0YXRpYy9tZWRpYS9hLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJhcHBsaWVzIHRoZSBrZXkgcHJlZml4IHdoZW4gdGhlIHVybCBvbWl0cyB0aGUgYXBwIGJhc2VQYXRoXCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJkYXRhXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgIEVUYWc6ICdcImFiYzEyM1wiJyxcbiAgICB9KTtcblxuICAgIC8vIFBsYWluIHN0cmluZyBwYXRocyAoZS5nLiBgPEltYWdlIHNyYz1cIi9zdGF0aWMvZm9vLmpwZ1wiPmApIGFyZSBwYXNzZWRcbiAgICAvLyB0aHJvdWdoIGJ5IG5leHQvaW1hZ2UgYXMgd3JpdHRlbiwgd2l0aG91dCBiYXNlUGF0aCBiYWtlZCBpbiwgYnV0IHRoZVxuICAgIC8vIFMzIGtleSBzdGlsbCBoYXMgaXQuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL3N0YXRpYy9mb28uanBnXCIsIFwiL2Jhc2VcIiwgXCIvYmFzZVwiKTtcblxuICAgIGNvbnN0IHBhcmFtcyA9IChHZXRPYmplY3RDb21tYW5kIGFzIHVua25vd24gYXMgamVzdC5Nb2NrKS5tb2NrLmNhbGxzWzBdWzBdO1xuICAgIGV4cGVjdChwYXJhbXMuS2V5KS50b0JlKFwiYmFzZS9zdGF0aWMvZm9vLmpwZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJvbmx5IG1hdGNoZXMgYmFzZVBhdGggb24gYSBwYXRoIGJvdW5kYXJ5XCIsIGFzeW5jICgpID0+IHtcbiAgICBtb2NrU2VuZC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBCb2R5OiBhc3luY0l0ZXJhYmxlRnJvbShbQnVmZmVyLmZyb20oXCJkYXRhXCIpXSksXG4gICAgICBDb250ZW50VHlwZTogXCJpbWFnZS9wbmdcIixcbiAgICAgIEVUYWc6ICdcImFiYzEyM1wiJyxcbiAgICB9KTtcblxuICAgIC8vIFwiL2Jhc2VtZW50XCIgbWVyZWx5IHNoYXJlcyBhIHByZWZpeCB3aXRoIGJhc2VQYXRoIFwiL2Jhc2VcIjsgdHJlYXRpbmcgaXRcbiAgICAvLyBhcyBhIG1hdGNoIHdvdWxkIHByb2R1Y2UgdGhlIGtleSBcImJhc2UvbWVudC9sb2dvLnBuZ1wiLlxuICAgIGF3YWl0IGZldGNoRnJvbVMzKHMzLCBcIm15LWJ1Y2tldFwiLCBcIi9iYXNlbWVudC9sb2dvLnBuZ1wiLCBcIi9iYXNlXCIsIFwiL2Jhc2VcIik7XG5cbiAgICBjb25zdCBwYXJhbXMgPSAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXTtcbiAgICBleHBlY3QocGFyYW1zLktleSkudG9CZShcImJhc2UvYmFzZW1lbnQvbG9nby5wbmdcIik7XG4gIH0pO1xuXG4gIC8vIHJlZ3Jlc3Npb24gdGVzdDogdGhlIE5leHQuanMgYXBwJ3Mgb3duIGBiYXNlUGF0aGAgKGUuZy4gc2V0IHRvIG1hdGNoIGFuXG4gIC8vIEFQSSBHYXRld2F5IHN0YWdlKSBhbmQgdGhlIENESyBgTmV4dGpzU3RhdGljQXNzZXRzYCBgYmFzZVBhdGhgIHByb3AgKGtleVxuICAvLyBuYW1lc3BhY2luZykgYXJlIHVucmVsYXRlZCBhbmQgZG9uJ3QgaGF2ZSB0byBtYXRjaC4gQSBkZXBsb3ltZW50IHRoYXRcbiAgLy8gb25seSBzZXRzIHRoZSBmb3JtZXIgbXVzdCBub3QgbGVhayBpdCBpbnRvIHRoZSBTMyBrZXkuXG4gIGl0KFwiZG9lc24ndCBhcHBseSBuZXh0QmFzZVBhdGggYXMgYSBrZXkgcHJlZml4IHdoZW4gdGhlIGtleSBwcmVmaXggZGlmZmVyc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBFVGFnOiAnXCJhYmMxMjNcIicsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3N0YXRpYy9uZXh0anMtaWNvbi1saWdodC1iYWNrZ3JvdW5kLnBuZ1wiLFxuICAgICAgXCIvcHJvZFwiLFxuICAgICAgXCJcIixcbiAgICApO1xuXG4gICAgY29uc3QgcGFyYW1zID0gKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF07XG4gICAgZXhwZWN0KHBhcmFtcy5LZXkpLnRvQmUoXCJzdGF0aWMvbmV4dGpzLWljb24tbGlnaHQtYmFja2dyb3VuZC5wbmdcIik7XG4gIH0pO1xuXG4gIGl0KFwic3RyaXBzIG5leHRCYXNlUGF0aCBmcm9tIGEgYmFrZWQtaW4gaHJlZiBiZWZvcmUgYXBwbHlpbmcgYSBkaWZmZXJlbnQga2V5IHByZWZpeFwiLCBhc3luYyAoKSA9PiB7XG4gICAgbW9ja1NlbmQubW9ja1Jlc29sdmVkVmFsdWUoe1xuICAgICAgQm9keTogYXN5bmNJdGVyYWJsZUZyb20oW0J1ZmZlci5mcm9tKFwiZGF0YVwiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvcG5nXCIsXG4gICAgICBFVGFnOiAnXCJhYmMxMjNcIicsXG4gICAgfSk7XG5cbiAgICBhd2FpdCBmZXRjaEZyb21TMyhcbiAgICAgIHMzLFxuICAgICAgXCJteS1idWNrZXRcIixcbiAgICAgIFwiL3Byb2QvX25leHQvc3RhdGljL21lZGlhL2ltcG9ydGVkLWxvZ28ucG5nXCIsXG4gICAgICBcIi9wcm9kXCIsXG4gICAgICBcIlwiLFxuICAgICk7XG5cbiAgICBjb25zdCBwYXJhbXMgPSAoR2V0T2JqZWN0Q29tbWFuZCBhcyB1bmtub3duIGFzIGplc3QuTW9jaykubW9jay5jYWxsc1swXVswXTtcbiAgICBleHBlY3QocGFyYW1zLktleSkudG9CZShcIl9uZXh0L3N0YXRpYy9tZWRpYS9pbXBvcnRlZC1sb2dvLnBuZ1wiKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2Vzbid0IGRvdWJsZSB0aGUgc2VwYXJhdG9yIHdoZW4gdGhlIGtleSBwcmVmaXggaGFzIGEgdHJhaWxpbmcgc2xhc2hcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBcImltYWdlL3BuZ1wiLFxuICAgICAgRVRhZzogJ1wiYWJjMTIzXCInLFxuICAgIH0pO1xuXG4gICAgLy8gQnVja2V0RGVwbG95bWVudCBjb2xsYXBzZXMgdGhlIHRyYWlsaW5nIHNsYXNoIHdoZW4gdXBsb2FkaW5nLCBzbyB0aGVcbiAgICAvLyBvYmplY3QgaXMgYXQgXCJiYXNlL3N0YXRpYy9mb28uanBnXCIsIG5vdCBcImJhc2UvL3N0YXRpYy9mb28uanBnXCIuXG4gICAgYXdhaXQgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL3N0YXRpYy9mb28uanBnXCIsIFwiXCIsIFwiL2Jhc2UvXCIpO1xuXG4gICAgY29uc3QgcGFyYW1zID0gKEdldE9iamVjdENvbW1hbmQgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2spLm1vY2suY2FsbHNbMF1bMF07XG4gICAgZXhwZWN0KHBhcmFtcy5LZXkpLnRvQmUoXCJiYXNlL3N0YXRpYy9mb28uanBnXCIpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgdGhlIGNvbmNhdGVuYXRlZCBidWZmZXIsIGNvbnRlbnQgdHlwZSwgYW5kIGV0YWdcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImhlbFwiKSwgQnVmZmVyLmZyb20oXCJsb1wiKV0pLFxuICAgICAgQ29udGVudFR5cGU6IFwiaW1hZ2UvanBlZ1wiLFxuICAgICAgRVRhZzogJ1widGhlLWV0YWdcIicsXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmZXRjaEZyb21TMyhzMywgXCJteS1idWNrZXRcIiwgXCIvZm9vLmpwZ1wiLCBcIlwiKTtcblxuICAgIGV4cGVjdChyZXN1bHQuYnVmZmVyLnRvU3RyaW5nKCkpLnRvQmUoXCJoZWxsb1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmNvbnRlbnRUeXBlKS50b0JlKFwiaW1hZ2UvanBlZ1wiKTtcbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoJ1widGhlLWV0YWdcIicpO1xuICB9KTtcblxuICBpdChcInJldHVybnMgYW4gZW1wdHkgZXRhZyB3aGVuIFMzIGRvZXNuJ3QgcHJvdmlkZSBvbmVcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHtcbiAgICAgIEJvZHk6IGFzeW5jSXRlcmFibGVGcm9tKFtCdWZmZXIuZnJvbShcImRhdGFcIildKSxcbiAgICAgIENvbnRlbnRUeXBlOiBudWxsLFxuICAgICAgRVRhZzogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL2Zvby5wbmdcIiwgXCJcIik7XG5cbiAgICBleHBlY3QocmVzdWx0LmV0YWcpLnRvQmUoXCJcIik7XG4gICAgZXhwZWN0KHJlc3VsdC5jb250ZW50VHlwZSkudG9CZU51bGwoKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3Mgd2hlbiBTMyByZXR1cm5zIG5vIGJvZHlcIiwgYXN5bmMgKCkgPT4ge1xuICAgIG1vY2tTZW5kLm1vY2tSZXNvbHZlZFZhbHVlKHsgQm9keTogdW5kZWZpbmVkIH0pO1xuXG4gICAgYXdhaXQgZXhwZWN0KFxuICAgICAgZmV0Y2hGcm9tUzMoczMsIFwibXktYnVja2V0XCIsIFwiL21pc3NpbmcucG5nXCIsIFwiXCIpLFxuICAgICkucmVqZWN0cy50b1Rocm93KC9FbXB0eSByZXNwb25zZSBmcm9tIFMzLyk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKFwiZ2V0RmlsZU5hbWVXaXRoRXh0ZW5zaW9uXCIsICgpID0+IHtcbiAgaXQoXCJkZXJpdmVzIGZpbGVuYW1lIGFuZCBleHRlbnNpb24gZnJvbSB0aGUgdXJsIGFuZCBjb250ZW50IHR5cGVcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChcbiAgICAgIGdldEZpbGVOYW1lV2l0aEV4dGVuc2lvbihcIi9mb28vYmFyLnBuZz93PTEwMCZxPTc1XCIsIFwiaW1hZ2Uvd2VicFwiKSxcbiAgICApLnRvQmUoXCJiYXIud2VicFwiKTtcbiAgfSk7XG5cbiAgaXQoXCJmYWxscyBiYWNrIHRvIGltYWdlLmJpbiB3aGVuIGNvbnRlbnRUeXBlIGlzIG1pc3NpbmdcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChnZXRGaWxlTmFtZVdpdGhFeHRlbnNpb24oXCIvZm9vL2Jhci5wbmdcIiwgbnVsbCkpLnRvQmUoXCJpbWFnZS5iaW5cIik7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byBpbWFnZS5iaW4gd2hlbiB0aGUgdXJsIGhhcyBubyBmaWxlbmFtZSBzZWdtZW50XCIsICgpID0+IHtcbiAgICBleHBlY3QoZ2V0RmlsZU5hbWVXaXRoRXh0ZW5zaW9uKFwiL1wiLCBcImltYWdlL3BuZ1wiKSkudG9CZShcImltYWdlLmJpblwiKTtcbiAgfSk7XG59KTtcblxuZGVzY3JpYmUoXCJyZXNvbHZlRXJyb3JSZXNwb25zZVwiLCAoKSA9PiB7XG4gIGl0KFwicHJlc2VydmVzIHRoZSBzdGF0dXMgY29kZSBhbmQgbWVzc2FnZSBmcm9tIGFuIEltYWdlRXJyb3JcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEltYWdlRXJyb3IoNDAwLCAnXCJ1cmxcIiBwYXJhbWV0ZXIgaXMgbm90IGFsbG93ZWQnKTtcblxuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShlcnJvcikpLnRvRXF1YWwoe1xuICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgbWVzc2FnZTogJ1widXJsXCIgcGFyYW1ldGVyIGlzIG5vdCBhbGxvd2VkJyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoXCJtYXBzIGEgbWlzc2luZyBTMyBvYmplY3QgdG8gdGhlIHNhbWUgNDAwIE5leHQuanMncyBvd24gbG9jYWwtaW1hZ2UgZmV0Y2ggcHJvZHVjZXNcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFwiTm9TdWNoS2V5OiBkb2VzIG5vdCBleGlzdFwiKTtcbiAgICBlcnJvci5uYW1lID0gXCJOb1N1Y2hLZXlcIjtcblxuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShlcnJvcikpLnRvRXF1YWwoe1xuICAgICAgc3RhdHVzQ29kZTogNDAwLFxuICAgICAgbWVzc2FnZTogXCJUaGUgcmVxdWVzdGVkIHJlc291cmNlIGlzbid0IGEgdmFsaWQgaW1hZ2UuXCIsXG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KFwiZmFsbHMgYmFjayB0byA1MDAgZm9yIHVucmVjb2duaXplZCBlcnJvcnNcIiwgKCkgPT4ge1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShuZXcgRXJyb3IoXCJib29tXCIpKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICAgIGV4cGVjdChyZXNvbHZlRXJyb3JSZXNwb25zZShcIm5vdCBhbiBlcnJvclwiKSkudG9FcXVhbCh7XG4gICAgICBzdGF0dXNDb2RlOiA1MDAsXG4gICAgICBtZXNzYWdlOiBcIkludGVybmFsIFNlcnZlciBFcnJvclwiLFxuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createRequire } from 'node:module'; import { fileURLToPath } from 'node:url'; import { dirname } from 'node:path'; const
|
|
1
|
+
import { createRequire } from 'node:module'; const require = createRequire(import.meta.url); import { fileURLToPath } from 'node:url'; import { dirname } from 'node:path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename);
|
|
2
2
|
var __create = Object.create;
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -55838,10 +55838,22 @@ import { readFileSync } from "node:fs";
|
|
|
55838
55838
|
var import_client_s3 = __toESM(require_dist_cjs16());
|
|
55839
55839
|
var import_image_optimizer = __toESM(require_image_optimizer());
|
|
55840
55840
|
var import_serve_static = __toESM(require_serve_static());
|
|
55841
|
-
|
|
55842
|
-
|
|
55843
|
-
|
|
55844
|
-
|
|
55841
|
+
|
|
55842
|
+
// src/utils/base-path.ts
|
|
55843
|
+
function normalizeBasePath(basePath) {
|
|
55844
|
+
return (basePath || "").replace(/^\/+/, "").replace(/\/+$/, "");
|
|
55845
|
+
}
|
|
55846
|
+
function joinPath(...parts) {
|
|
55847
|
+
return parts.map(normalizeBasePath).filter(Boolean).join("/");
|
|
55848
|
+
}
|
|
55849
|
+
|
|
55850
|
+
// src/image-optimization/handler-utils.ts
|
|
55851
|
+
async function fetchFromS3(s32, bucket, url, nextBasePath, staticAssetsKeyPrefix = "") {
|
|
55852
|
+
const hasNextBasePath = !!nextBasePath && (url === nextBasePath || url.startsWith(`${nextBasePath}/`));
|
|
55853
|
+
const key = joinPath(
|
|
55854
|
+
staticAssetsKeyPrefix,
|
|
55855
|
+
hasNextBasePath ? url.slice(nextBasePath.length) : url
|
|
55856
|
+
);
|
|
55845
55857
|
const response = await s32.send(
|
|
55846
55858
|
new import_client_s3.GetObjectCommand({
|
|
55847
55859
|
Bucket: bucket,
|
|
@@ -55889,6 +55901,7 @@ function resolveErrorResponse(error2) {
|
|
|
55889
55901
|
var debug = (0, import_debug5.default)("cdk-nextjs:image-optimization");
|
|
55890
55902
|
var s3 = new import_client_s32.S3Client({});
|
|
55891
55903
|
var STATIC_ASSETS_BUCKET = process.env.CDK_NEXTJS_STATIC_ASSETS_BUCKET_NAME || "";
|
|
55904
|
+
var STATIC_ASSETS_KEY_PREFIX = process.env.CDK_NEXTJS_STATIC_ASSETS_KEY_PREFIX || "";
|
|
55892
55905
|
var requiredServerFiles = JSON.parse(
|
|
55893
55906
|
readFileSync("required-server-files.json", "utf-8")
|
|
55894
55907
|
);
|
|
@@ -55940,7 +55953,8 @@ var handler = awslambda.streamifyResponse(
|
|
|
55940
55953
|
s3,
|
|
55941
55954
|
STATIC_ASSETS_BUCKET,
|
|
55942
55955
|
href,
|
|
55943
|
-
nextConfig.basePath
|
|
55956
|
+
nextConfig.basePath,
|
|
55957
|
+
STATIC_ASSETS_KEY_PREFIX
|
|
55944
55958
|
).then((result) => ({
|
|
55945
55959
|
buffer: result.buffer,
|
|
55946
55960
|
contentType: result.contentType,
|
package/lib/nextjs-api.d.ts
CHANGED
|
@@ -46,6 +46,17 @@ export interface NextjsApiProps {
|
|
|
46
46
|
* The S3 bucket containing static assets
|
|
47
47
|
*/
|
|
48
48
|
readonly staticAssetsBucket: IBucket;
|
|
49
|
+
/**
|
|
50
|
+
* S3 key prefix the static assets were uploaded under, i.e.
|
|
51
|
+
* `NextjsStaticAssets.keyPrefix`, which namespaces a shared bucket.
|
|
52
|
+
*
|
|
53
|
+
* Independent of `basePath` above: that one is the URL prefix the REST API
|
|
54
|
+
* serves the app at (commonly the API Gateway stage), while this one is where
|
|
55
|
+
* the objects live in the bucket. `_next/static` and public directory
|
|
56
|
+
* requests are mapped to S3 keys directly, so they 404 unless this prefix is
|
|
57
|
+
* applied.
|
|
58
|
+
*/
|
|
59
|
+
readonly staticAssetsKeyPrefix?: string;
|
|
49
60
|
/**
|
|
50
61
|
* [Future] Required if `NextjsRegionalContainers`. VPC to create VPC Link and ECS Service Discovery
|
|
51
62
|
*/
|
|
@@ -59,6 +70,16 @@ export declare class NextjsApi extends Construct {
|
|
|
59
70
|
* The API Gateway REST API
|
|
60
71
|
*/
|
|
61
72
|
readonly api: RestApi;
|
|
73
|
+
/**
|
|
74
|
+
* Public URL of the app, including every path segment the API nests it under.
|
|
75
|
+
* Prefers a custom domain configured through `overrides.restApiProps.domainName`
|
|
76
|
+
* over the execute-api endpoint.
|
|
77
|
+
*
|
|
78
|
+
* A domain attached after this construct is created (`api.addDomainName()`) is
|
|
79
|
+
* still used for the host, but CDK keeps its base path mappings private, so a
|
|
80
|
+
* mapping added that way won't show up here.
|
|
81
|
+
*/
|
|
82
|
+
get url(): string;
|
|
62
83
|
private readonly baseResource;
|
|
63
84
|
private readonly nextResource;
|
|
64
85
|
private readonly props;
|
|
@@ -72,6 +93,11 @@ export declare class NextjsApi extends Construct {
|
|
|
72
93
|
private createBaseResource;
|
|
73
94
|
private createStaticIntegrationRole;
|
|
74
95
|
private createStaticIntegrations;
|
|
96
|
+
/**
|
|
97
|
+
* Prefixes a request path with the key prefix the assets were uploaded under,
|
|
98
|
+
* since the S3 integrations address objects by key rather than by URL.
|
|
99
|
+
*/
|
|
100
|
+
private s3Key;
|
|
75
101
|
/**
|
|
76
102
|
* Maps API request to S3 request.
|
|
77
103
|
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-parameter-mapping-sources.html
|
package/lib/nextjs-api.js
CHANGED
|
@@ -6,15 +6,40 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
6
6
|
const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway");
|
|
7
7
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
8
8
|
const constructs_1 = require("constructs");
|
|
9
|
+
const base_path_1 = require("./utils/base-path");
|
|
9
10
|
/**
|
|
10
11
|
* Creates an API Gateway REST API for Next.js applications
|
|
11
12
|
*/
|
|
12
13
|
class NextjsApi extends constructs_1.Construct {
|
|
13
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsApi", version: "0.6.1" };
|
|
14
15
|
/**
|
|
15
16
|
* The API Gateway REST API
|
|
16
17
|
*/
|
|
17
18
|
api;
|
|
19
|
+
/**
|
|
20
|
+
* Public URL of the app, including every path segment the API nests it under.
|
|
21
|
+
* Prefers a custom domain configured through `overrides.restApiProps.domainName`
|
|
22
|
+
* over the execute-api endpoint.
|
|
23
|
+
*
|
|
24
|
+
* A domain attached after this construct is created (`api.addDomainName()`) is
|
|
25
|
+
* still used for the host, but CDK keeps its base path mappings private, so a
|
|
26
|
+
* mapping added that way won't show up here.
|
|
27
|
+
*/
|
|
28
|
+
get url() {
|
|
29
|
+
const customDomain = this.api.domainName;
|
|
30
|
+
// A custom domain reaches the stage through a base path mapping, so the
|
|
31
|
+
// stage name isn't in the path there; the mapping may be, when set.
|
|
32
|
+
const [origin, prefix] = customDomain
|
|
33
|
+
? [
|
|
34
|
+
`https://${customDomain.domainName}`,
|
|
35
|
+
this.props.overrides?.restApiProps?.domainName?.basePath,
|
|
36
|
+
]
|
|
37
|
+
: [
|
|
38
|
+
`https://${this.api.restApiId}.execute-api.${aws_cdk_lib_1.Stack.of(this).region}.amazonaws.com`,
|
|
39
|
+
this.api.deploymentStage.stageName,
|
|
40
|
+
];
|
|
41
|
+
return (0, base_path_1.joinPath)(origin, prefix, this.props.basePath);
|
|
42
|
+
}
|
|
18
43
|
baseResource;
|
|
19
44
|
nextResource;
|
|
20
45
|
props;
|
|
@@ -59,14 +84,8 @@ class NextjsApi extends constructs_1.Construct {
|
|
|
59
84
|
*/
|
|
60
85
|
createBaseResource(basePath) {
|
|
61
86
|
// Create base resource path if needed
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const _basePath = basePath.startsWith("/")
|
|
65
|
-
? basePath.substring(1)
|
|
66
|
-
: basePath;
|
|
67
|
-
baseResource = this.api.root.addResource(_basePath);
|
|
68
|
-
}
|
|
69
|
-
return baseResource;
|
|
87
|
+
const normalized = (0, base_path_1.normalizeBasePath)(basePath);
|
|
88
|
+
return normalized ? this.api.root.addResource(normalized) : this.api.root;
|
|
70
89
|
}
|
|
71
90
|
createStaticIntegrationRole() {
|
|
72
91
|
// Create S3 integration role
|
|
@@ -86,22 +105,31 @@ class NextjsApi extends constructs_1.Construct {
|
|
|
86
105
|
this.nextResource
|
|
87
106
|
.addResource("static")
|
|
88
107
|
.addResource("{proxy+}")
|
|
89
|
-
.addMethod("GET", this.createS3Integration({ key: "_next/static/{key}" }), this.getStaticMethodOptions({ proxy: true }));
|
|
108
|
+
.addMethod("GET", this.createS3Integration({ key: this.s3Key("_next/static/{key}") }), this.getStaticMethodOptions({ proxy: true }));
|
|
90
109
|
// add public directory files/directories that exist at top level but need to go to S3.
|
|
91
110
|
for (const publicDirEntry of this.props.publicDirEntries) {
|
|
92
111
|
if (publicDirEntry.isDirectory) {
|
|
93
112
|
this.baseResource
|
|
94
113
|
.addResource(publicDirEntry.name)
|
|
95
114
|
.addResource("{proxy+}")
|
|
96
|
-
.addMethod("GET", this.createS3Integration({
|
|
115
|
+
.addMethod("GET", this.createS3Integration({
|
|
116
|
+
key: this.s3Key(`${publicDirEntry.name}/{key}`),
|
|
117
|
+
}), this.getStaticMethodOptions({ proxy: true }));
|
|
97
118
|
}
|
|
98
119
|
else {
|
|
99
120
|
this.baseResource
|
|
100
121
|
.addResource(publicDirEntry.name)
|
|
101
|
-
.addMethod("GET", this.createS3Integration({ key: publicDirEntry.name }), this.getStaticMethodOptions());
|
|
122
|
+
.addMethod("GET", this.createS3Integration({ key: this.s3Key(publicDirEntry.name) }), this.getStaticMethodOptions());
|
|
102
123
|
}
|
|
103
124
|
}
|
|
104
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Prefixes a request path with the key prefix the assets were uploaded under,
|
|
128
|
+
* since the S3 integrations address objects by key rather than by URL.
|
|
129
|
+
*/
|
|
130
|
+
s3Key(key) {
|
|
131
|
+
return (0, base_path_1.joinPath)(this.props.staticAssetsKeyPrefix, key);
|
|
132
|
+
}
|
|
105
133
|
/**
|
|
106
134
|
* Maps API request to S3 request.
|
|
107
135
|
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/rest-api-parameter-mapping-sources.html
|
|
@@ -201,4 +229,4 @@ class NextjsApi extends constructs_1.Construct {
|
|
|
201
229
|
}
|
|
202
230
|
}
|
|
203
231
|
exports.NextjsApi = NextjsApi;
|
|
204
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXh0anMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBMEM7QUFDMUMsK0RBWW9DO0FBRXBDLGlEQUs2QjtBQUc3QiwyQ0FBdUM7QUFvRHZDOztHQUVHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsc0JBQVM7O0lBQ3RDOztPQUVHO0lBQ2EsR0FBRyxDQUFVO0lBRVosWUFBWSxDQUFZO0lBQ3hCLFlBQVksQ0FBWTtJQUN4QixLQUFLLENBQWlCO0lBQy9CLHFCQUFxQixDQUFRO0lBRXJDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUI7UUFDN0QsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQztRQUNoRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6Qix5RUFBeUU7WUFDekUsK0NBQStDO1lBQy9DLElBQUksS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25ELENBQUM7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aUU7UUFDakUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGtDQUFpQixDQUFDLGFBQWEsRUFBRTtZQUM1RCxvQkFBb0IsRUFBRSxxQ0FBb0IsQ0FBQyxNQUFNO1lBQ2pELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCO1NBQy9DLENBQUMsQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdELGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVEOztPQUVHO0lBQ0ssd0JBQXdCLENBQUMsY0FBeUI7UUFDeEQsd0RBQXdEO1FBQ3hELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxrQ0FBaUIsQ0FBQyxjQUFjLEVBQUU7WUFDakUsb0JBQW9CLEVBQUUscUNBQW9CLENBQUMsTUFBTTtZQUNqRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QjtTQUNqRCxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFDekQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDaEUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztJQUN2RCxDQUFDOztBQTNOSCw4QkE0TkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTaXplLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHtcbiAgUmVzdEFwaSxcbiAgTGFtYmRhSW50ZWdyYXRpb24sXG4gIEF3c0ludGVncmF0aW9uLFxuICBNZXRob2RPcHRpb25zLFxuICBJUmVzb3VyY2UsXG4gIEVuZHBvaW50VHlwZSxcbiAgUmVzdEFwaVByb3BzLFxuICBBd3NJbnRlZ3JhdGlvblByb3BzLFxuICBMYW1iZGFJbnRlZ3JhdGlvbk9wdGlvbnMsXG4gIFBhc3N0aHJvdWdoQmVoYXZpb3IsXG4gIFJlc3BvbnNlVHJhbnNmZXJNb2RlLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXlcIjtcbmltcG9ydCB7IElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHtcbiAgUm9sZSxcbiAgU2VydmljZVByaW5jaXBhbCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBJUm9sZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IElGdW5jdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFB1YmxpY0RpckVudHJ5IH0gZnJvbSBcIi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0FwaU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IHJlc3RBcGlQcm9wcz86IFJlc3RBcGlQcm9wcztcbiAgcmVhZG9ubHkgc3RhdGljSW50ZWdyYXRpb25Qcm9wcz86IEF3c0ludGVncmF0aW9uUHJvcHM7XG4gIHJlYWRvbmx5IHMzTWV0aG9kT3B0aW9ucz86IE1ldGhvZE9wdGlvbnM7XG4gIHJlYWRvbmx5IGR5bmFtaWNJbnRlZ3JhdGlvblByb3BzPzogTGFtYmRhSW50ZWdyYXRpb25PcHRpb25zO1xuICByZWFkb25seSBpbWFnZUludGVncmF0aW9uUHJvcHM/OiBMYW1iZGFJbnRlZ3JhdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQXBpUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgYmFzZSBwYXRoIGZvciB0aGUgYXBwbGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgZm9yIGV2ZXJ5IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0FwaU92ZXJyaWRlcztcbiAgLyoqXG4gICAqIFBhdGggdG8gZGlyZWN0b3J5IG9mIE5leHQuanMgYXBwJ3MgcHVibGljIGRpcmVjdG9yeS4gVXNlZCB0byBhZGQgcmVzb3VyY2VzXG4gICAqIHRvIEFQSSBHYXRld2F5IFJFU1QgQVBJIGZvciBwdWJsaWMgZGlyZWN0b3J5IHRvIGdvIGRpcmVjdGx5IHRvIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljRGlyRW50cmllczogUHVibGljRGlyRW50cnlbXTtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGlmIGBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc2AuIFRoZSBMYW1iZGEgZnVuY3Rpb24gZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyRnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgaW1hZ2Ugb3B0aW1pemF0aW9uIExhbWJkYSBmb3IgdGhlIGBfbmV4dC9pbWFnZWAgcm91dGUuIFdoZW5cbiAgICogb21pdHRlZCwgbm8gYF9uZXh0L2ltYWdlYCByZXNvdXJjZSBpcyBjcmVhdGVkIGFuZCB0aG9zZSByZXF1ZXN0cyBmYWxsXG4gICAqIHRocm91Z2ggdG8gYHNlcnZlckZ1bmN0aW9uYCB2aWEgdGhlIGB7cHJveHkrfWAgY2F0Y2gtYWxsLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBpdCBpcyBhc3N1bWVkIHRvIHN1cHBvcnQgTGFtYmRhIHJlc3BvbnNlIHN0cmVhbWluZyAoYXMgdGhlXG4gICAqIGRlZGljYXRlZCBpbWFnZSBMYW1iZGEgdGhpcyBwYWNrYWdlIGJ1aWxkcyBkb2VzKSBhbmQgaXMgaW52b2tlZCB3aXRoXG4gICAqIGBSZXNwb25zZVRyYW5zZmVyTW9kZS5TVFJFQU1gIGFjY29yZGluZ2x5LiBJZiB5b3Ugc3VwcGx5IGEgY3VzdG9tXG4gICAqIGBpbWFnZUZ1bmN0aW9uYCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmcsIG92ZXJyaWRlXG4gICAqIGByZXNwb25zZVRyYW5zZmVyTW9kZWAgdG8gYEJVRkZFUkVEYCB2aWEgYG92ZXJyaWRlcy5pbWFnZUludGVncmF0aW9uUHJvcHNgLFxuICAgKiBvdGhlcndpc2UgQVBJIEdhdGV3YXkgcmV0dXJucyBhIDUwMi5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlRnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzQnVja2V0OiBJQnVja2V0O1xuICAvKipcbiAgICogW0Z1dHVyZV0gUmVxdWlyZWQgaWYgYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2AuIFZQQyB0byBjcmVhdGUgVlBDIExpbmsgYW5kIEVDUyBTZXJ2aWNlIERpc2NvdmVyeVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogSVZwYztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEFQSSBHYXRld2F5IFJFU1QgQVBJIGZvciBOZXh0LmpzIGFwcGxpY2F0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzQXBpIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBBUEkgR2F0ZXdheSBSRVNUIEFQSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaTogUmVzdEFwaTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VSZXNvdXJjZTogSVJlc291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRSZXNvdXJjZTogSVJlc291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBOZXh0anNBcGlQcm9wcztcbiAgcHJpdmF0ZSBzdGF0aWNJbnRlZ3JhdGlvblJvbGU6IElSb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKHByb3BzKTtcbiAgICB0aGlzLmFwaSA9IHRoaXMuY3JlYXRlUmVzdEFwaSgpO1xuICAgIHRoaXMuYmFzZVJlc291cmNlID0gdGhpcy5jcmVhdGVCYXNlUmVzb3VyY2UocHJvcHMuYmFzZVBhdGgpO1xuICAgIHRoaXMubmV4dFJlc291cmNlID0gdGhpcy5iYXNlUmVzb3VyY2UuYWRkUmVzb3VyY2UoXCJfbmV4dFwiKTtcbiAgICB0aGlzLnN0YXRpY0ludGVncmF0aW9uUm9sZSA9IHRoaXMuY3JlYXRlU3RhdGljSW50ZWdyYXRpb25Sb2xlKCk7XG4gICAgdGhpcy5jcmVhdGVTdGF0aWNJbnRlZ3JhdGlvbnMoKTtcbiAgICBpZiAocHJvcHMuc2VydmVyRnVuY3Rpb24pIHtcbiAgICAgIC8vIFdpdGhvdXQgYSBkZWRpY2F0ZWQgaW1hZ2UgZnVuY3Rpb24sIGBfbmV4dC9pbWFnZWAgZmFsbHMgdGhyb3VnaCB0byB0aGVcbiAgICAgIC8vIGB7cHJveHkrfWAgY2F0Y2gtYWxsIG9uIHRoZSBzZXJ2ZXIgZnVuY3Rpb24uXG4gICAgICBpZiAocHJvcHMuaW1hZ2VGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmNyZWF0ZUltYWdlSW50ZWdyYXRpb24ocHJvcHMuaW1hZ2VGdW5jdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUR5bmFtaWNJbnRlZ3JhdGlvbihwcm9wcy5zZXJ2ZXJGdW5jdGlvbik7XG4gICAgfSBlbHNlIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIC8vIFtGdXR1cmVdIGNyZWF0ZSBpbnRlZ3JhdGlvbiB3aXRoIEVDUyB2aWEgVlBDIExpbmsgYW5kIEVDUyBTZXJ2aWNlIERpc2NvdmVyeVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcyhwcm9wczogTmV4dGpzQXBpUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnNlcnZlckZ1bmN0aW9uICYmICFwcm9wcy52cGMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNlcnZlckZ1bmN0aW9uIG9yIHZwYyBtdXN0IGJlIHNldCBpbiBOZXh0anNBcGlQcm9wc1wiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc3RBcGkoKTogUmVzdEFwaSB7XG4gICAgcmV0dXJuIG5ldyBSZXN0QXBpKHRoaXMsIFwiUmVzdEFwaVwiLCB7XG4gICAgICBiaW5hcnlNZWRpYVR5cGVzOiBbXCIqLypcIl0sXG4gICAgICBkZXNjcmlwdGlvbjogYGNkay1uZXh0anMgUkVTVCBBUEkgZm9yICR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfWAsXG4gICAgICBlbmRwb2ludFR5cGVzOiBbRW5kcG9pbnRUeXBlLlJFR0lPTkFMXSxcbiAgICAgIG1pbkNvbXByZXNzaW9uU2l6ZTogU2l6ZS5ieXRlcygwKSwgLy8gY29tcHJlc3MgYWxsIHJlc3BvbnNlcyBmb3IgYmV0dGVyIHBlcmZcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5yZXN0QXBpUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJhc2UgcmVzb3VyY2UgcGF0aCBpZiBuZWVkZWQuIEltcG9ydGFudCBpZiBgYmFzZVBhdGhgIGlzIHNldC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQmFzZVJlc291cmNlKGJhc2VQYXRoPzogc3RyaW5nKTogSVJlc291cmNlIHtcbiAgICAvLyBDcmVhdGUgYmFzZSByZXNvdXJjZSBwYXRoIGlmIG5lZWRlZFxuICAgIGxldCBiYXNlUmVzb3VyY2UgPSB0aGlzLmFwaS5yb290O1xuICAgIGlmIChiYXNlUGF0aCkge1xuICAgICAgY29uc3QgX2Jhc2VQYXRoID0gYmFzZVBhdGguc3RhcnRzV2l0aChcIi9cIilcbiAgICAgICAgPyBiYXNlUGF0aC5zdWJzdHJpbmcoMSlcbiAgICAgICAgOiBiYXNlUGF0aDtcblxuICAgICAgYmFzZVJlc291cmNlID0gdGhpcy5hcGkucm9vdC5hZGRSZXNvdXJjZShfYmFzZVBhdGgpO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZVJlc291cmNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNJbnRlZ3JhdGlvblJvbGUoKSB7XG4gICAgLy8gQ3JlYXRlIFMzIGludGVncmF0aW9uIHJvbGVcbiAgICBjb25zdCBzdGF0aWNJbnRlZ3JhdGlvblJvbGUgPSBuZXcgUm9sZSh0aGlzLCBcIlN0YXRpY0ludGVncmF0aW9uUm9sZVwiLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBTZXJ2aWNlUHJpbmNpcGFsKFwiYXBpZ2F0ZXdheS5hbWF6b25hd3MuY29tXCIpLFxuICAgIH0pO1xuXG4gICAgc3RhdGljSW50ZWdyYXRpb25Sb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInMzOkdldE9iamVjdFwiLCBcInMzOkxpc3RCdWNrZXRcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHRoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldEFybixcbiAgICAgICAgICBgJHt0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXRBcm59LypgLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICByZXR1cm4gc3RhdGljSW50ZWdyYXRpb25Sb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTdGF0aWNJbnRlZ3JhdGlvbnMoKSB7XG4gICAgdGhpcy5uZXh0UmVzb3VyY2VcbiAgICAgIC5hZGRSZXNvdXJjZShcInN0YXRpY1wiKVxuICAgICAgLmFkZFJlc291cmNlKFwie3Byb3h5K31cIilcbiAgICAgIC5hZGRNZXRob2QoXG4gICAgICAgIFwiR0VUXCIsXG4gICAgICAgIHRoaXMuY3JlYXRlUzNJbnRlZ3JhdGlvbih7IGtleTogXCJfbmV4dC9zdGF0aWMve2tleX1cIiB9KSxcbiAgICAgICAgdGhpcy5nZXRTdGF0aWNNZXRob2RPcHRpb25zKHsgcHJveHk6IHRydWUgfSksXG4gICAgICApO1xuICAgIC8vIGFkZCBwdWJsaWMgZGlyZWN0b3J5IGZpbGVzL2RpcmVjdG9yaWVzIHRoYXQgZXhpc3QgYXQgdG9wIGxldmVsIGJ1dCBuZWVkIHRvIGdvIHRvIFMzLlxuICAgIGZvciAoY29uc3QgcHVibGljRGlyRW50cnkgb2YgdGhpcy5wcm9wcy5wdWJsaWNEaXJFbnRyaWVzKSB7XG4gICAgICBpZiAocHVibGljRGlyRW50cnkuaXNEaXJlY3RvcnkpIHtcbiAgICAgICAgdGhpcy5iYXNlUmVzb3VyY2VcbiAgICAgICAgICAuYWRkUmVzb3VyY2UocHVibGljRGlyRW50cnkubmFtZSlcbiAgICAgICAgICAuYWRkUmVzb3VyY2UoXCJ7cHJveHkrfVwiKVxuICAgICAgICAgIC5hZGRNZXRob2QoXG4gICAgICAgICAgICBcIkdFVFwiLFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVTM0ludGVncmF0aW9uKHsga2V5OiBgJHtwdWJsaWNEaXJFbnRyeS5uYW1lfS97a2V5fWAgfSksXG4gICAgICAgICAgICB0aGlzLmdldFN0YXRpY01ldGhvZE9wdGlvbnMoeyBwcm94eTogdHJ1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iYXNlUmVzb3VyY2VcbiAgICAgICAgICAuYWRkUmVzb3VyY2UocHVibGljRGlyRW50cnkubmFtZSlcbiAgICAgICAgICAuYWRkTWV0aG9kKFxuICAgICAgICAgICAgXCJHRVRcIixcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUzNJbnRlZ3JhdGlvbih7IGtleTogcHVibGljRGlyRW50cnkubmFtZSB9KSxcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RhdGljTWV0aG9kT3B0aW9ucygpLFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgQVBJIHJlcXVlc3QgdG8gUzMgcmVxdWVzdC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVzdC1hcGktcGFyYW1ldGVyLW1hcHBpbmctc291cmNlcy5odG1sXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2ludGVncmF0aW5nLWFwaS13aXRoLWF3cy1zZXJ2aWNlcy1zMy5odG1sI2FwaS1pdGVtcy1pbi1mb2xkZXItYXMtczMtb2JqZWN0cy1pbi1idWNrZXRcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlUzNJbnRlZ3JhdGlvbih7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBzM0ludGVncmF0aW9uID0gbmV3IEF3c0ludGVncmF0aW9uKHtcbiAgICAgIHNlcnZpY2U6IFwiczNcIixcbiAgICAgIGludGVncmF0aW9uSHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICAgIHBhdGg6IGAke3RoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWV9LyR7a2V5fWAsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNyZWRlbnRpYWxzUm9sZTogdGhpcy5zdGF0aWNJbnRlZ3JhdGlvblJvbGUsXG4gICAgICAgIHBhc3N0aHJvdWdoQmVoYXZpb3I6IFBhc3N0aHJvdWdoQmVoYXZpb3IuV0hFTl9OT19URU1QTEFURVMsIC8vIHJlY29tbWVuZGVkXG4gICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBrZXkuaW5jbHVkZXMoXCJ7a2V5fVwiKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBcImludGVncmF0aW9uLnJlcXVlc3QucGF0aC5rZXlcIjogXCJtZXRob2QucmVxdWVzdC5wYXRoLnByb3h5XCIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVncmF0aW9uUmVzcG9uc2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6XG4gICAgICAgICAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCIsXG4gICAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LUxlbmd0aFwiOlxuICAgICAgICAgICAgICAgIFwiaW50ZWdyYXRpb24ucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5DYWNoZS1Db250cm9sXCI6XG4gICAgICAgICAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXNwb25zZS5oZWFkZXIuQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuRVRhZ1wiOiBcImludGVncmF0aW9uLnJlc3BvbnNlLmhlYWRlci5FVGFnXCIsXG4gICAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5MYXN0LU1vZGlmaWVkXCI6XG4gICAgICAgICAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXNwb25zZS5oZWFkZXIuTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IFwiNDA0XCIsXG4gICAgICAgICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBcIjQwNFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LnN0YXRpY0ludGVncmF0aW9uUHJvcHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHMzSW50ZWdyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFN0YXRpY01ldGhvZE9wdGlvbnMoeyBwcm94eSB9ID0geyBwcm94eTogZmFsc2UgfSk6IE1ldGhvZE9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0UGFyYW1ldGVyczogcHJveHlcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBcIm1ldGhvZC5yZXF1ZXN0LnBhdGgucHJveHlcIjogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgbWV0aG9kUmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtTGVuZ3RoXCI6IHRydWUsXG4gICAgICAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ2FjaGUtQ29udHJvbFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkVUYWdcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5MYXN0LU1vZGlmaWVkXCI6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1c0NvZGU6IFwiNDA0XCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LnMzTWV0aG9kT3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBMYW1iZGEgUHJveHkgaW50ZWdyYXRpb24gZm9yIHRoZSBgX25leHQvaW1hZ2VgIHJvdXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZUludGVncmF0aW9uKGltYWdlRnVuY3Rpb246IElGdW5jdGlvbikge1xuICAgIC8vIGltYWdlRnVuY3Rpb24gaXMgYXNzdW1lZCB0byBiZSB0aGUgZGVkaWNhdGVkLCBzdHJlYW1pbmctY2FwYWJsZSBpbWFnZVxuICAgIC8vIExhbWJkYSAoc2VlIGl0cyBkb2MgY29tbWVudCk7IG92ZXJyaWRlIHJlc3BvbnNlVHJhbnNmZXJNb2RlIHZpYVxuICAgIC8vIGltYWdlSW50ZWdyYXRpb25Qcm9wcyBpZiB0aGF0IGFzc3VtcHRpb24gZG9lc24ndCBob2xkIGZvciBhIGN1c3RvbVxuICAgIC8vIGltYWdlRnVuY3Rpb24sIG90aGVyd2lzZSBBUEkgR2F0ZXdheSByZXR1cm5zIGEgNTAyLiBEZWxpYmVyYXRlbHlcbiAgICAvLyBkb2Vzbid0IGluaGVyaXQgZHluYW1pY0ludGVncmF0aW9uUHJvcHM6IHRoYXQncyBmb3Igc2VydmVyRnVuY3Rpb24sXG4gICAgLy8gYSBkaWZmZXJlbnQgTGFtYmRhIHdpdGggZGlmZmVyZW50IChhbmQgcG9zc2libHkgY29uZmxpY3RpbmcsIGUuZy5cbiAgICAvLyBCVUZGRVJFRCBmb3IgYSBub24tc3RyZWFtaW5nIExhbWJkYSBXZWIgQWRhcHRlciBzZXR1cCkgc3RyZWFtaW5nXG4gICAgLy8gcmVxdWlyZW1lbnRzIHRoYW4gdGhlIGFsd2F5cy1zdHJlYW1pbmcgZGVkaWNhdGVkIGltYWdlIExhbWJkYS5cbiAgICBjb25zdCBpbWFnZUludGVncmF0aW9uID0gbmV3IExhbWJkYUludGVncmF0aW9uKGltYWdlRnVuY3Rpb24sIHtcbiAgICAgIHJlc3BvbnNlVHJhbnNmZXJNb2RlOiBSZXNwb25zZVRyYW5zZmVyTW9kZS5TVFJFQU0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uaW1hZ2VJbnRlZ3JhdGlvblByb3BzLFxuICAgIH0pO1xuICAgIGNvbnN0IGltYWdlUmVzb3VyY2UgPSB0aGlzLm5leHRSZXNvdXJjZS5hZGRSZXNvdXJjZShcImltYWdlXCIpO1xuICAgIGltYWdlUmVzb3VyY2UuYWRkTWV0aG9kKFwiQU5ZXCIsIGltYWdlSW50ZWdyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBMYW1iZGEgUHJveHkgaW50ZWdyYXRpb24gZm9yIGFsbCBvdGhlciByb3V0ZXNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRHluYW1pY0ludGVncmF0aW9uKHNlcnZlckZ1bmN0aW9uOiBJRnVuY3Rpb24pIHtcbiAgICAvLyBBbGwgb3RoZXIgcm91dGVzIHVzZSBzdHJlYW1pbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIGNvbnN0IHN0cmVhbWluZ0ludGVncmF0aW9uID0gbmV3IExhbWJkYUludGVncmF0aW9uKHNlcnZlckZ1bmN0aW9uLCB7XG4gICAgICByZXNwb25zZVRyYW5zZmVyTW9kZTogUmVzcG9uc2VUcmFuc2Zlck1vZGUuU1RSRUFNLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmR5bmFtaWNJbnRlZ3JhdGlvblByb3BzLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGNhdGNoLWFsbCByb3V0ZXMgd2l0aCBzdHJlYW1pbmcgaW50ZWdyYXRpb24gZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xuICAgIHRoaXMuYmFzZVJlc291cmNlLmFkZE1ldGhvZChcIkFOWVwiLCBzdHJlYW1pbmdJbnRlZ3JhdGlvbik7XG4gICAgY29uc3QgcHJveHlSZXNvdXJjZSA9IHRoaXMuYmFzZVJlc291cmNlLmFkZFJlc291cmNlKFwie3Byb3h5K31cIik7XG4gICAgcHJveHlSZXNvdXJjZS5hZGRNZXRob2QoXCJBTllcIiwgc3RyZWFtaW5nSW50ZWdyYXRpb24pO1xuICB9XG59XG4iXX0=
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXh0anMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBMEM7QUFDMUMsK0RBWW9DO0FBRXBDLGlEQUs2QjtBQUc3QiwyQ0FBdUM7QUFFdkMsaURBQWdFO0FBOERoRTs7R0FFRztBQUNILE1BQWEsU0FBVSxTQUFRLHNCQUFTOztJQUN0Qzs7T0FFRztJQUNhLEdBQUcsQ0FBVTtJQUU3Qjs7Ozs7Ozs7T0FRRztJQUNILElBQUksR0FBRztRQUNMLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQ3pDLHdFQUF3RTtRQUN4RSxvRUFBb0U7UUFDcEUsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxZQUFZO1lBQ25DLENBQUMsQ0FBQztnQkFDRSxXQUFXLFlBQVksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUTthQUN6RDtZQUNILENBQUMsQ0FBQztnQkFDRSxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxnQkFBZ0IsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxnQkFBZ0I7Z0JBQ2xGLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVM7YUFDbkMsQ0FBQztRQUNOLE9BQU8sSUFBQSxvQkFBUSxFQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRWdCLFlBQVksQ0FBWTtJQUN4QixZQUFZLENBQVk7SUFDeEIsS0FBSyxDQUFpQjtJQUMvQixxQkFBcUIsQ0FBUTtJQUVyQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFCO1FBQzdELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFB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QUNLLHdCQUF3QixDQUFDLGNBQXlCO1FBQ3hELHdEQUF3RDtRQUN4RCxNQUFNLG9CQUFvQixHQUFHLElBQUksa0NBQWlCLENBQUMsY0FBYyxFQUFFO1lBQ2pFLG9CQUFvQixFQUFFLHFDQUFvQixDQUFDLE1BQU07WUFDakQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx1QkFBdUI7U0FDakQsQ0FBQyxDQUFDO1FBRUgsNEVBQTRFO1FBQzVFLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2hFLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDdkQsQ0FBQzs7QUF2UEgsOEJBd1BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2l6ZSwgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIFJlc3RBcGksXG4gIExhbWJkYUludGVncmF0aW9uLFxuICBBd3NJbnRlZ3JhdGlvbixcbiAgTWV0aG9kT3B0aW9ucyxcbiAgSVJlc291cmNlLFxuICBFbmRwb2ludFR5cGUsXG4gIFJlc3RBcGlQcm9wcyxcbiAgQXdzSW50ZWdyYXRpb25Qcm9wcyxcbiAgTGFtYmRhSW50ZWdyYXRpb25PcHRpb25zLFxuICBQYXNzdGhyb3VnaEJlaGF2aW9yLFxuICBSZXNwb25zZVRyYW5zZmVyTW9kZSxcbn0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1hcGlnYXRld2F5XCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7XG4gIFJvbGUsXG4gIFNlcnZpY2VQcmluY2lwYWwsXG4gIFBvbGljeVN0YXRlbWVudCxcbiAgSVJvbGUsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgeyBJRnVuY3Rpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBQdWJsaWNEaXJFbnRyeSB9IGZyb20gXCIuL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGRcIjtcbmltcG9ydCB7IGpvaW5QYXRoLCBub3JtYWxpemVCYXNlUGF0aCB9IGZyb20gXCIuL3V0aWxzL2Jhc2UtcGF0aFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0FwaU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IHJlc3RBcGlQcm9wcz86IFJlc3RBcGlQcm9wcztcbiAgcmVhZG9ubHkgc3RhdGljSW50ZWdyYXRpb25Qcm9wcz86IEF3c0ludGVncmF0aW9uUHJvcHM7XG4gIHJlYWRvbmx5IHMzTWV0aG9kT3B0aW9ucz86IE1ldGhvZE9wdGlvbnM7XG4gIHJlYWRvbmx5IGR5bmFtaWNJbnRlZ3JhdGlvblByb3BzPzogTGFtYmRhSW50ZWdyYXRpb25PcHRpb25zO1xuICByZWFkb25seSBpbWFnZUludGVncmF0aW9uUHJvcHM/OiBMYW1iZGFJbnRlZ3JhdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQXBpUHJvcHMge1xuICAvKipcbiAgICogT3B0aW9uYWwgYmFzZSBwYXRoIGZvciB0aGUgYXBwbGljYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgZm9yIGV2ZXJ5IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0FwaU92ZXJyaWRlcztcbiAgLyoqXG4gICAqIFBhdGggdG8gZGlyZWN0b3J5IG9mIE5leHQuanMgYXBwJ3MgcHVibGljIGRpcmVjdG9yeS4gVXNlZCB0byBhZGQgcmVzb3VyY2VzXG4gICAqIHRvIEFQSSBHYXRld2F5IFJFU1QgQVBJIGZvciBwdWJsaWMgZGlyZWN0b3J5IHRvIGdvIGRpcmVjdGx5IHRvIFMzLlxuICAgKi9cbiAgcmVhZG9ubHkgcHVibGljRGlyRW50cmllczogUHVibGljRGlyRW50cnlbXTtcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGlmIGBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc2AuIFRoZSBMYW1iZGEgZnVuY3Rpb24gZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xuICAgKi9cbiAgcmVhZG9ubHkgc2VydmVyRnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIC8qKlxuICAgKiBEZWRpY2F0ZWQgaW1hZ2Ugb3B0aW1pemF0aW9uIExhbWJkYSBmb3IgdGhlIGBfbmV4dC9pbWFnZWAgcm91dGUuIFdoZW5cbiAgICogb21pdHRlZCwgbm8gYF9uZXh0L2ltYWdlYCByZXNvdXJjZSBpcyBjcmVhdGVkIGFuZCB0aG9zZSByZXF1ZXN0cyBmYWxsXG4gICAqIHRocm91Z2ggdG8gYHNlcnZlckZ1bmN0aW9uYCB2aWEgdGhlIGB7cHJveHkrfWAgY2F0Y2gtYWxsLlxuICAgKlxuICAgKiBXaGVuIHByb3ZpZGVkLCBpdCBpcyBhc3N1bWVkIHRvIHN1cHBvcnQgTGFtYmRhIHJlc3BvbnNlIHN0cmVhbWluZyAoYXMgdGhlXG4gICAqIGRlZGljYXRlZCBpbWFnZSBMYW1iZGEgdGhpcyBwYWNrYWdlIGJ1aWxkcyBkb2VzKSBhbmQgaXMgaW52b2tlZCB3aXRoXG4gICAqIGBSZXNwb25zZVRyYW5zZmVyTW9kZS5TVFJFQU1gIGFjY29yZGluZ2x5LiBJZiB5b3Ugc3VwcGx5IGEgY3VzdG9tXG4gICAqIGBpbWFnZUZ1bmN0aW9uYCB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBzdHJlYW1pbmcsIG92ZXJyaWRlXG4gICAqIGByZXNwb25zZVRyYW5zZmVyTW9kZWAgdG8gYEJVRkZFUkVEYCB2aWEgYG92ZXJyaWRlcy5pbWFnZUludGVncmF0aW9uUHJvcHNgLFxuICAgKiBvdGhlcndpc2UgQVBJIEdhdGV3YXkgcmV0dXJucyBhIDUwMi5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlRnVuY3Rpb24/OiBJRnVuY3Rpb247XG4gIC8qKlxuICAgKiBUaGUgUzMgYnVja2V0IGNvbnRhaW5pbmcgc3RhdGljIGFzc2V0c1xuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzQnVja2V0OiBJQnVja2V0O1xuICAvKipcbiAgICogUzMga2V5IHByZWZpeCB0aGUgc3RhdGljIGFzc2V0cyB3ZXJlIHVwbG9hZGVkIHVuZGVyLCBpLmUuXG4gICAqIGBOZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4YCwgd2hpY2ggbmFtZXNwYWNlcyBhIHNoYXJlZCBidWNrZXQuXG4gICAqXG4gICAqIEluZGVwZW5kZW50IG9mIGBiYXNlUGF0aGAgYWJvdmU6IHRoYXQgb25lIGlzIHRoZSBVUkwgcHJlZml4IHRoZSBSRVNUIEFQSVxuICAgKiBzZXJ2ZXMgdGhlIGFwcCBhdCAoY29tbW9ubHkgdGhlIEFQSSBHYXRld2F5IHN0YWdlKSwgd2hpbGUgdGhpcyBvbmUgaXMgd2hlcmVcbiAgICogdGhlIG9iamVjdHMgbGl2ZSBpbiB0aGUgYnVja2V0LiBgX25leHQvc3RhdGljYCBhbmQgcHVibGljIGRpcmVjdG9yeVxuICAgKiByZXF1ZXN0cyBhcmUgbWFwcGVkIHRvIFMzIGtleXMgZGlyZWN0bHksIHNvIHRoZXkgNDA0IHVubGVzcyB0aGlzIHByZWZpeCBpc1xuICAgKiBhcHBsaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzS2V5UHJlZml4Pzogc3RyaW5nO1xuICAvKipcbiAgICogW0Z1dHVyZV0gUmVxdWlyZWQgaWYgYE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc2AuIFZQQyB0byBjcmVhdGUgVlBDIExpbmsgYW5kIEVDUyBTZXJ2aWNlIERpc2NvdmVyeVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogSVZwYztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIEFQSSBHYXRld2F5IFJFU1QgQVBJIGZvciBOZXh0LmpzIGFwcGxpY2F0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzQXBpIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBBUEkgR2F0ZXdheSBSRVNUIEFQSVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFwaTogUmVzdEFwaTtcblxuICAvKipcbiAgICogUHVibGljIFVSTCBvZiB0aGUgYXBwLCBpbmNsdWRpbmcgZXZlcnkgcGF0aCBzZWdtZW50IHRoZSBBUEkgbmVzdHMgaXQgdW5kZXIuXG4gICAqIFByZWZlcnMgYSBjdXN0b20gZG9tYWluIGNvbmZpZ3VyZWQgdGhyb3VnaCBgb3ZlcnJpZGVzLnJlc3RBcGlQcm9wcy5kb21haW5OYW1lYFxuICAgKiBvdmVyIHRoZSBleGVjdXRlLWFwaSBlbmRwb2ludC5cbiAgICpcbiAgICogQSBkb21haW4gYXR0YWNoZWQgYWZ0ZXIgdGhpcyBjb25zdHJ1Y3QgaXMgY3JlYXRlZCAoYGFwaS5hZGREb21haW5OYW1lKClgKSBpc1xuICAgKiBzdGlsbCB1c2VkIGZvciB0aGUgaG9zdCwgYnV0IENESyBrZWVwcyBpdHMgYmFzZSBwYXRoIG1hcHBpbmdzIHByaXZhdGUsIHNvIGFcbiAgICogbWFwcGluZyBhZGRlZCB0aGF0IHdheSB3b24ndCBzaG93IHVwIGhlcmUuXG4gICAqL1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY3VzdG9tRG9tYWluID0gdGhpcy5hcGkuZG9tYWluTmFtZTtcbiAgICAvLyBBIGN1c3RvbSBkb21haW4gcmVhY2hlcyB0aGUgc3RhZ2UgdGhyb3VnaCBhIGJhc2UgcGF0aCBtYXBwaW5nLCBzbyB0aGVcbiAgICAvLyBzdGFnZSBuYW1lIGlzbid0IGluIHRoZSBwYXRoIHRoZXJlOyB0aGUgbWFwcGluZyBtYXkgYmUsIHdoZW4gc2V0LlxuICAgIGNvbnN0IFtvcmlnaW4sIHByZWZpeF0gPSBjdXN0b21Eb21haW5cbiAgICAgID8gW1xuICAgICAgICAgIGBodHRwczovLyR7Y3VzdG9tRG9tYWluLmRvbWFpbk5hbWV9YCxcbiAgICAgICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ucmVzdEFwaVByb3BzPy5kb21haW5OYW1lPy5iYXNlUGF0aCxcbiAgICAgICAgXVxuICAgICAgOiBbXG4gICAgICAgICAgYGh0dHBzOi8vJHt0aGlzLmFwaS5yZXN0QXBpSWR9LmV4ZWN1dGUtYXBpLiR7U3RhY2sub2YodGhpcykucmVnaW9ufS5hbWF6b25hd3MuY29tYCxcbiAgICAgICAgICB0aGlzLmFwaS5kZXBsb3ltZW50U3RhZ2Uuc3RhZ2VOYW1lLFxuICAgICAgICBdO1xuICAgIHJldHVybiBqb2luUGF0aChvcmlnaW4sIHByZWZpeCwgdGhpcy5wcm9wcy5iYXNlUGF0aCk7XG4gIH1cblxuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VSZXNvdXJjZTogSVJlc291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IG5leHRSZXNvdXJjZTogSVJlc291cmNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBOZXh0anNBcGlQcm9wcztcbiAgcHJpdmF0ZSBzdGF0aWNJbnRlZ3JhdGlvblJvbGU6IElSb2xlO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBOZXh0anNBcGlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy52YWxpZGF0ZVByb3BzKHByb3BzKTtcbiAgICB0aGlzLmFwaSA9IHRoaXMuY3JlYXRlUmVzdEFwaSgpO1xuICAgIHRoaXMuYmFzZVJlc291cmNlID0gdGhpcy5jcmVhdGVCYXNlUmVzb3VyY2UocHJvcHMuYmFzZVBhdGgpO1xuICAgIHRoaXMubmV4dFJlc291cmNlID0gdGhpcy5iYXNlUmVzb3VyY2UuYWRkUmVzb3VyY2UoXCJfbmV4dFwiKTtcbiAgICB0aGlzLnN0YXRpY0ludGVncmF0aW9uUm9sZSA9IHRoaXMuY3JlYXRlU3RhdGljSW50ZWdyYXRpb25Sb2xlKCk7XG4gICAgdGhpcy5jcmVhdGVTdGF0aWNJbnRlZ3JhdGlvbnMoKTtcbiAgICBpZiAocHJvcHMuc2VydmVyRnVuY3Rpb24pIHtcbiAgICAgIC8vIFdpdGhvdXQgYSBkZWRpY2F0ZWQgaW1hZ2UgZnVuY3Rpb24sIGBfbmV4dC9pbWFnZWAgZmFsbHMgdGhyb3VnaCB0byB0aGVcbiAgICAgIC8vIGB7cHJveHkrfWAgY2F0Y2gtYWxsIG9uIHRoZSBzZXJ2ZXIgZnVuY3Rpb24uXG4gICAgICBpZiAocHJvcHMuaW1hZ2VGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmNyZWF0ZUltYWdlSW50ZWdyYXRpb24ocHJvcHMuaW1hZ2VGdW5jdGlvbik7XG4gICAgICB9XG4gICAgICB0aGlzLmNyZWF0ZUR5bmFtaWNJbnRlZ3JhdGlvbihwcm9wcy5zZXJ2ZXJGdW5jdGlvbik7XG4gICAgfSBlbHNlIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIC8vIFtGdXR1cmVdIGNyZWF0ZSBpbnRlZ3JhdGlvbiB3aXRoIEVDUyB2aWEgVlBDIExpbmsgYW5kIEVDUyBTZXJ2aWNlIERpc2NvdmVyeVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVQcm9wcyhwcm9wczogTmV4dGpzQXBpUHJvcHMpIHtcbiAgICBpZiAoIXByb3BzLnNlcnZlckZ1bmN0aW9uICYmICFwcm9wcy52cGMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInNlcnZlckZ1bmN0aW9uIG9yIHZwYyBtdXN0IGJlIHNldCBpbiBOZXh0anNBcGlQcm9wc1wiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlc3RBcGkoKTogUmVzdEFwaSB7XG4gICAgcmV0dXJuIG5ldyBSZXN0QXBpKHRoaXMsIFwiUmVzdEFwaVwiLCB7XG4gICAgICBiaW5hcnlNZWRpYVR5cGVzOiBbXCIqLypcIl0sXG4gICAgICBkZXNjcmlwdGlvbjogYGNkay1uZXh0anMgUkVTVCBBUEkgZm9yICR7U3RhY2sub2YodGhpcykuc3RhY2tOYW1lfWAsXG4gICAgICBlbmRwb2ludFR5cGVzOiBbRW5kcG9pbnRUeXBlLlJFR0lPTkFMXSxcbiAgICAgIG1pbkNvbXByZXNzaW9uU2l6ZTogU2l6ZS5ieXRlcygwKSwgLy8gY29tcHJlc3MgYWxsIHJlc3BvbnNlcyBmb3IgYmV0dGVyIHBlcmZcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5yZXN0QXBpUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGJhc2UgcmVzb3VyY2UgcGF0aCBpZiBuZWVkZWQuIEltcG9ydGFudCBpZiBgYmFzZVBhdGhgIGlzIHNldC5cbiAgICovXG4gIHByaXZhdGUgY3JlYXRlQmFzZVJlc291cmNlKGJhc2VQYXRoPzogc3RyaW5nKTogSVJlc291cmNlIHtcbiAgICAvLyBDcmVhdGUgYmFzZSByZXNvdXJjZSBwYXRoIGlmIG5lZWRlZFxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVCYXNlUGF0aChiYXNlUGF0aCk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQgPyB0aGlzLmFwaS5yb290LmFkZFJlc291cmNlKG5vcm1hbGl6ZWQpIDogdGhpcy5hcGkucm9vdDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RhdGljSW50ZWdyYXRpb25Sb2xlKCkge1xuICAgIC8vIENyZWF0ZSBTMyBpbnRlZ3JhdGlvbiByb2xlXG4gICAgY29uc3Qgc3RhdGljSW50ZWdyYXRpb25Sb2xlID0gbmV3IFJvbGUodGhpcywgXCJTdGF0aWNJbnRlZ3JhdGlvblJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbChcImFwaWdhdGV3YXkuYW1hem9uYXdzLmNvbVwiKSxcbiAgICB9KTtcblxuICAgIHN0YXRpY0ludGVncmF0aW9uUm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzMzpHZXRPYmplY3RcIiwgXCJzMzpMaXN0QnVja2V0XCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXRBcm4sXG4gICAgICAgICAgYCR7dGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQuYnVja2V0QXJufS8qYCxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgcmV0dXJuIHN0YXRpY0ludGVncmF0aW9uUm9sZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlU3RhdGljSW50ZWdyYXRpb25zKCkge1xuICAgIHRoaXMubmV4dFJlc291cmNlXG4gICAgICAuYWRkUmVzb3VyY2UoXCJzdGF0aWNcIilcbiAgICAgIC5hZGRSZXNvdXJjZShcIntwcm94eSt9XCIpXG4gICAgICAuYWRkTWV0aG9kKFxuICAgICAgICBcIkdFVFwiLFxuICAgICAgICB0aGlzLmNyZWF0ZVMzSW50ZWdyYXRpb24oeyBrZXk6IHRoaXMuczNLZXkoXCJfbmV4dC9zdGF0aWMve2tleX1cIikgfSksXG4gICAgICAgIHRoaXMuZ2V0U3RhdGljTWV0aG9kT3B0aW9ucyh7IHByb3h5OiB0cnVlIH0pLFxuICAgICAgKTtcbiAgICAvLyBhZGQgcHVibGljIGRpcmVjdG9yeSBmaWxlcy9kaXJlY3RvcmllcyB0aGF0IGV4aXN0IGF0IHRvcCBsZXZlbCBidXQgbmVlZCB0byBnbyB0byBTMy5cbiAgICBmb3IgKGNvbnN0IHB1YmxpY0RpckVudHJ5IG9mIHRoaXMucHJvcHMucHVibGljRGlyRW50cmllcykge1xuICAgICAgaWYgKHB1YmxpY0RpckVudHJ5LmlzRGlyZWN0b3J5KSB7XG4gICAgICAgIHRoaXMuYmFzZVJlc291cmNlXG4gICAgICAgICAgLmFkZFJlc291cmNlKHB1YmxpY0RpckVudHJ5Lm5hbWUpXG4gICAgICAgICAgLmFkZFJlc291cmNlKFwie3Byb3h5K31cIilcbiAgICAgICAgICAuYWRkTWV0aG9kKFxuICAgICAgICAgICAgXCJHRVRcIixcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUzNJbnRlZ3JhdGlvbih7XG4gICAgICAgICAgICAgIGtleTogdGhpcy5zM0tleShgJHtwdWJsaWNEaXJFbnRyeS5uYW1lfS97a2V5fWApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLmdldFN0YXRpY01ldGhvZE9wdGlvbnMoeyBwcm94eTogdHJ1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5iYXNlUmVzb3VyY2VcbiAgICAgICAgICAuYWRkUmVzb3VyY2UocHVibGljRGlyRW50cnkubmFtZSlcbiAgICAgICAgICAuYWRkTWV0aG9kKFxuICAgICAgICAgICAgXCJHRVRcIixcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlUzNJbnRlZ3JhdGlvbih7IGtleTogdGhpcy5zM0tleShwdWJsaWNEaXJFbnRyeS5uYW1lKSB9KSxcbiAgICAgICAgICAgIHRoaXMuZ2V0U3RhdGljTWV0aG9kT3B0aW9ucygpLFxuICAgICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZWZpeGVzIGEgcmVxdWVzdCBwYXRoIHdpdGggdGhlIGtleSBwcmVmaXggdGhlIGFzc2V0cyB3ZXJlIHVwbG9hZGVkIHVuZGVyLFxuICAgKiBzaW5jZSB0aGUgUzMgaW50ZWdyYXRpb25zIGFkZHJlc3Mgb2JqZWN0cyBieSBrZXkgcmF0aGVyIHRoYW4gYnkgVVJMLlxuICAgKi9cbiAgcHJpdmF0ZSBzM0tleShrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGpvaW5QYXRoKHRoaXMucHJvcHMuc3RhdGljQXNzZXRzS2V5UHJlZml4LCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hcHMgQVBJIHJlcXVlc3QgdG8gUzMgcmVxdWVzdC5cbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXBpZ2F0ZXdheS9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvcmVzdC1hcGktcGFyYW1ldGVyLW1hcHBpbmctc291cmNlcy5odG1sXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FwaWdhdGV3YXkvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL2ludGVncmF0aW5nLWFwaS13aXRoLWF3cy1zZXJ2aWNlcy1zMy5odG1sI2FwaS1pdGVtcy1pbi1mb2xkZXItYXMtczMtb2JqZWN0cy1pbi1idWNrZXRcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlUzNJbnRlZ3JhdGlvbih7IGtleSB9OiB7IGtleTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBzM0ludGVncmF0aW9uID0gbmV3IEF3c0ludGVncmF0aW9uKHtcbiAgICAgIHNlcnZpY2U6IFwiczNcIixcbiAgICAgIGludGVncmF0aW9uSHR0cE1ldGhvZDogXCJHRVRcIixcbiAgICAgIHBhdGg6IGAke3RoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWV9LyR7a2V5fWAsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIGNyZWRlbnRpYWxzUm9sZTogdGhpcy5zdGF0aWNJbnRlZ3JhdGlvblJvbGUsXG4gICAgICAgIHBhc3N0aHJvdWdoQmVoYXZpb3I6IFBhc3N0aHJvdWdoQmVoYXZpb3IuV0hFTl9OT19URU1QTEFURVMsIC8vIHJlY29tbWVuZGVkXG4gICAgICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBrZXkuaW5jbHVkZXMoXCJ7a2V5fVwiKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBcImludGVncmF0aW9uLnJlcXVlc3QucGF0aC5rZXlcIjogXCJtZXRob2QucmVxdWVzdC5wYXRoLnByb3h5XCIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGludGVncmF0aW9uUmVzcG9uc2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogXCIyMDBcIixcbiAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCI6XG4gICAgICAgICAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlXCIsXG4gICAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LUxlbmd0aFwiOlxuICAgICAgICAgICAgICAgIFwiaW50ZWdyYXRpb24ucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtTGVuZ3RoXCIsXG4gICAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5DYWNoZS1Db250cm9sXCI6XG4gICAgICAgICAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXNwb25zZS5oZWFkZXIuQ2FjaGUtQ29udHJvbFwiLFxuICAgICAgICAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuRVRhZ1wiOiBcImludGVncmF0aW9uLnJlc3BvbnNlLmhlYWRlci5FVGFnXCIsXG4gICAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5MYXN0LU1vZGlmaWVkXCI6XG4gICAgICAgICAgICAgICAgXCJpbnRlZ3JhdGlvbi5yZXNwb25zZS5oZWFkZXIuTGFzdC1Nb2RpZmllZFwiLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXR1c0NvZGU6IFwiNDA0XCIsXG4gICAgICAgICAgICBzZWxlY3Rpb25QYXR0ZXJuOiBcIjQwNFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LnN0YXRpY0ludGVncmF0aW9uUHJvcHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIHMzSW50ZWdyYXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFN0YXRpY01ldGhvZE9wdGlvbnMoeyBwcm94eSB9ID0geyBwcm94eTogZmFsc2UgfSk6IE1ldGhvZE9wdGlvbnMge1xuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0UGFyYW1ldGVyczogcHJveHlcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBcIm1ldGhvZC5yZXF1ZXN0LnBhdGgucHJveHlcIjogdHJ1ZSxcbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgbWV0aG9kUmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBzdGF0dXNDb2RlOiBcIjIwMFwiLFxuICAgICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtVHlwZVwiOiB0cnVlLFxuICAgICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkNvbnRlbnQtTGVuZ3RoXCI6IHRydWUsXG4gICAgICAgICAgICBcIm1ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ2FjaGUtQ29udHJvbFwiOiB0cnVlLFxuICAgICAgICAgICAgXCJtZXRob2QucmVzcG9uc2UuaGVhZGVyLkVUYWdcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwibWV0aG9kLnJlc3BvbnNlLmhlYWRlci5MYXN0LU1vZGlmaWVkXCI6IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIHN0YXR1c0NvZGU6IFwiNDA0XCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LnMzTWV0aG9kT3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBMYW1iZGEgUHJveHkgaW50ZWdyYXRpb24gZm9yIHRoZSBgX25leHQvaW1hZ2VgIHJvdXRlLlxuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVJbWFnZUludGVncmF0aW9uKGltYWdlRnVuY3Rpb246IElGdW5jdGlvbikge1xuICAgIC8vIGltYWdlRnVuY3Rpb24gaXMgYXNzdW1lZCB0byBiZSB0aGUgZGVkaWNhdGVkLCBzdHJlYW1pbmctY2FwYWJsZSBpbWFnZVxuICAgIC8vIExhbWJkYSAoc2VlIGl0cyBkb2MgY29tbWVudCk7IG92ZXJyaWRlIHJlc3BvbnNlVHJhbnNmZXJNb2RlIHZpYVxuICAgIC8vIGltYWdlSW50ZWdyYXRpb25Qcm9wcyBpZiB0aGF0IGFzc3VtcHRpb24gZG9lc24ndCBob2xkIGZvciBhIGN1c3RvbVxuICAgIC8vIGltYWdlRnVuY3Rpb24sIG90aGVyd2lzZSBBUEkgR2F0ZXdheSByZXR1cm5zIGEgNTAyLiBEZWxpYmVyYXRlbHlcbiAgICAvLyBkb2Vzbid0IGluaGVyaXQgZHluYW1pY0ludGVncmF0aW9uUHJvcHM6IHRoYXQncyBmb3Igc2VydmVyRnVuY3Rpb24sXG4gICAgLy8gYSBkaWZmZXJlbnQgTGFtYmRhIHdpdGggZGlmZmVyZW50IChhbmQgcG9zc2libHkgY29uZmxpY3RpbmcsIGUuZy5cbiAgICAvLyBCVUZGRVJFRCBmb3IgYSBub24tc3RyZWFtaW5nIExhbWJkYSBXZWIgQWRhcHRlciBzZXR1cCkgc3RyZWFtaW5nXG4gICAgLy8gcmVxdWlyZW1lbnRzIHRoYW4gdGhlIGFsd2F5cy1zdHJlYW1pbmcgZGVkaWNhdGVkIGltYWdlIExhbWJkYS5cbiAgICBjb25zdCBpbWFnZUludGVncmF0aW9uID0gbmV3IExhbWJkYUludGVncmF0aW9uKGltYWdlRnVuY3Rpb24sIHtcbiAgICAgIHJlc3BvbnNlVHJhbnNmZXJNb2RlOiBSZXNwb25zZVRyYW5zZmVyTW9kZS5TVFJFQU0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uaW1hZ2VJbnRlZ3JhdGlvblByb3BzLFxuICAgIH0pO1xuICAgIGNvbnN0IGltYWdlUmVzb3VyY2UgPSB0aGlzLm5leHRSZXNvdXJjZS5hZGRSZXNvdXJjZShcImltYWdlXCIpO1xuICAgIGltYWdlUmVzb3VyY2UuYWRkTWV0aG9kKFwiQU5ZXCIsIGltYWdlSW50ZWdyYXRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBMYW1iZGEgUHJveHkgaW50ZWdyYXRpb24gZm9yIGFsbCBvdGhlciByb3V0ZXNcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlRHluYW1pY0ludGVncmF0aW9uKHNlcnZlckZ1bmN0aW9uOiBJRnVuY3Rpb24pIHtcbiAgICAvLyBBbGwgb3RoZXIgcm91dGVzIHVzZSBzdHJlYW1pbmcgZm9yIGJldHRlciBwZXJmb3JtYW5jZVxuICAgIGNvbnN0IHN0cmVhbWluZ0ludGVncmF0aW9uID0gbmV3IExhbWJkYUludGVncmF0aW9uKHNlcnZlckZ1bmN0aW9uLCB7XG4gICAgICByZXNwb25zZVRyYW5zZmVyTW9kZTogUmVzcG9uc2VUcmFuc2Zlck1vZGUuU1RSRUFNLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/LmR5bmFtaWNJbnRlZ3JhdGlvblByb3BzLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIGNhdGNoLWFsbCByb3V0ZXMgd2l0aCBzdHJlYW1pbmcgaW50ZWdyYXRpb24gZm9yIHNlcnZlci1zaWRlIHJlbmRlcmluZ1xuICAgIHRoaXMuYmFzZVJlc291cmNlLmFkZE1ldGhvZChcIkFOWVwiLCBzdHJlYW1pbmdJbnRlZ3JhdGlvbik7XG4gICAgY29uc3QgcHJveHlSZXNvdXJjZSA9IHRoaXMuYmFzZVJlc291cmNlLmFkZFJlc291cmNlKFwie3Byb3h5K31cIik7XG4gICAgcHJveHlSZXNvdXJjZS5hZGRNZXRob2QoXCJBTllcIiwgc3RyZWFtaW5nSW50ZWdyYXRpb24pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|