@aws-solutions-constructs/core 2.41.0 → 2.43.0

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.
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DefaultKendraIndexProps = void 0;
16
+ const utils_1 = require("./utils");
17
+ /**
18
+ * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
19
+ */
20
+ function DefaultKendraIndexProps(id, roleArn) {
21
+ return {
22
+ name: utils_1.generatePhysicalName("", ["KendraIndex", id], 1000),
23
+ roleArn,
24
+ edition: 'DEVELOPER_EDITION',
25
+ };
26
+ }
27
+ exports.DefaultKendraIndexProps = DefaultKendraIndexProps;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VuZHJhLWRlZmF1bHRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsia2VuZHJhLWRlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7R0FXRzs7O0FBR0gsbUNBQStDO0FBRS9DOztHQUVHO0FBQ0gsU0FBZ0IsdUJBQXVCLENBQUMsRUFBVSxFQUFFLE9BQWdCO0lBQ2xFLE9BQU87UUFDTCxJQUFJLEVBQUUsNEJBQW9CLENBQUMsRUFBRSxFQUFFLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQztRQUN6RCxPQUFPO1FBQ1AsT0FBTyxFQUFFLG1CQUFtQjtLQUNMLENBQUM7QUFDNUIsQ0FBQztBQU5ELDBEQU1DIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMga2VuZHJhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rZW5kcmEnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQaHlzaWNhbE5hbWUgfSBmcm9tIFwiLi91dGlsc1wiO1xuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBEZWZhdWx0S2VuZHJhSW5kZXhQcm9wcyhpZDogc3RyaW5nLCByb2xlQXJuPzogc3RyaW5nKToga2VuZHJhLkNmbkluZGV4UHJvcHMge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IGdlbmVyYXRlUGh5c2ljYWxOYW1lKFwiXCIsIFtcIktlbmRyYUluZGV4XCIsIGlkXSwgMTAwMCksXG4gICAgcm9sZUFybixcbiAgICBlZGl0aW9uOiAnREVWRUxPUEVSX0VESVRJT04nLFxuICB9IGFzIGtlbmRyYS5DZm5JbmRleFByb3BzO1xufVxuIl19
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ import * as kendra from 'aws-cdk-lib/aws-kendra';
14
+ import { Construct } from 'constructs';
15
+ export interface BuildKendraIndexProps {
16
+ readonly kendraIndexProps?: kendra.CfnIndexProps | any;
17
+ /**
18
+ * Existing instance of Kendra Index object, Providing both this and kendraIndexProps will cause an error.
19
+ *
20
+ * @default - None
21
+ */
22
+ readonly existingIndexObj?: kendra.CfnIndex;
23
+ }
24
+ /**
25
+ * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
26
+ */
27
+ export declare function buildKendraIndex(scope: Construct, id: string, props: BuildKendraIndexProps): kendra.CfnIndex;
28
+ /**
29
+ * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
30
+ */
31
+ export declare function AddMultipleKendraDataSources(scope: Construct, id: string, kendraIndex: kendra.CfnIndex, clientDataSourceProps: Array<Partial<kendra.CfnDataSourceProps>>): kendra.CfnDataSource[];
32
+ /**
33
+ * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
34
+ */
35
+ export declare function AddKendraDataSource(scope: Construct, id: string, index: kendra.CfnIndex, clientDataSourceProps: kendra.CfnDataSourceProps | any): kendra.CfnDataSource;
36
+ export declare function normalizeKendraPermissions(rawPermissions: string[]): string[];
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
6
+ * with the License. A copy of the License is located at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
11
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
12
+ * and limitations under the License.
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.normalizeKendraPermissions = exports.AddKendraDataSource = exports.AddMultipleKendraDataSources = exports.buildKendraIndex = void 0;
16
+ /*
17
+ * The functions found here in the core library are for internal use and can be changed
18
+ * or removed outside of a major release. We recommend against calling them directly from client code.
19
+ */
20
+ const kendra = require("aws-cdk-lib/aws-kendra");
21
+ const iam = require("aws-cdk-lib/aws-iam");
22
+ const utils_1 = require("./utils");
23
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
24
+ const kendra_defaults_1 = require("./kendra-defaults");
25
+ const utils_2 = require("./utils");
26
+ /**
27
+ * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
28
+ */
29
+ function buildKendraIndex(scope, id, props) {
30
+ // Conditional lambda function creation
31
+ if (props.existingIndexObj) {
32
+ // The client provided an Index, so we'll do nothing and return it to them
33
+ return props.existingIndexObj;
34
+ }
35
+ else {
36
+ let indexRoleArn = "";
37
+ // If the client provided a role, then don't bother creating a new one that we don't need
38
+ if (!props.kendraIndexProps?.roleArn) {
39
+ indexRoleArn = CreateKendraIndexLoggingRole(scope, id);
40
+ }
41
+ const defaultIndexProperties = kendra_defaults_1.DefaultKendraIndexProps(id, indexRoleArn);
42
+ const consolidatedIndexProperties = utils_1.consolidateProps(defaultIndexProperties, props.kendraIndexProps);
43
+ const newIndex = new kendra.CfnIndex(scope, `kendra-index-${id}`, consolidatedIndexProperties);
44
+ utils_1.addCfnSuppressRules(newIndex, [{
45
+ id: "W80",
46
+ reason: "We consulted the Kendra TFC and they confirmed the default encryption is sufficient for general use cases"
47
+ }]);
48
+ return newIndex;
49
+ }
50
+ }
51
+ exports.buildKendraIndex = buildKendraIndex;
52
+ /**
53
+ * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
54
+ */
55
+ function AddMultipleKendraDataSources(scope, id, kendraIndex, clientDataSourceProps) {
56
+ const returnDataSources = [];
57
+ clientDataSourceProps.forEach((props, index) => {
58
+ returnDataSources.push(AddKendraDataSource(scope, `${id}${index}`, kendraIndex, props));
59
+ });
60
+ return returnDataSources;
61
+ }
62
+ exports.AddMultipleKendraDataSources = AddMultipleKendraDataSources;
63
+ /**
64
+ * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
65
+ */
66
+ function AddKendraDataSource(scope, id, index, clientDataSourceProps) {
67
+ if (clientDataSourceProps.type === 'S3') {
68
+ return CreateS3DataSource(scope, index, id, clientDataSourceProps);
69
+ }
70
+ else {
71
+ if (clientDataSourceProps.indexId) {
72
+ throw new Error('Invalid DataSource prop specified - Construct must set the indexId prop');
73
+ }
74
+ return new kendra.CfnDataSource(scope, `kendra-data-source-${id}`, {
75
+ ...clientDataSourceProps,
76
+ indexId: index.attrId
77
+ });
78
+ }
79
+ }
80
+ exports.AddKendraDataSource = AddKendraDataSource;
81
+ function CreateS3DataSource(scope, targetIndex, id, clientProps) {
82
+ // We go through some hoops here to extract the various inputs, because we need to narrow
83
+ // the type to remove the union with IResolvable
84
+ const dataSourceConfig = clientProps.dataSourceConfiguration;
85
+ if (!dataSourceConfig) {
86
+ throw new Error('Error - an S3 Kendra DataSource requires an DataSourceCofiguration prop');
87
+ }
88
+ const s3DataSourceConfig = dataSourceConfig.s3Configuration;
89
+ if (!s3DataSourceConfig) {
90
+ throw new Error('Error - an S3 Kendra DataSource requires an DataSourceCofiguration.S3Configuration prop');
91
+ }
92
+ // No Bucket name is an error
93
+ if (!s3DataSourceConfig.bucketName) {
94
+ throw new Error('Error - an S3 Kendra DataSource requires the DataSourceCofiguration.S3Configuration.bucketName prop');
95
+ }
96
+ // If there's no role, make a role and put it into defaultProps
97
+ // Put bucket name in default props
98
+ let defaultProps = {
99
+ indexId: targetIndex.ref,
100
+ name: utils_2.generatePhysicalName('', ['s3-datasource', id], 1000),
101
+ type: 'S3'
102
+ };
103
+ // Return consolidated default and user props
104
+ if (!clientProps.roleArn) {
105
+ const s3CrawlPolicy = new iam.PolicyDocument({
106
+ statements: [
107
+ new iam.PolicyStatement({
108
+ actions: [
109
+ "s3:GetObject"
110
+ ],
111
+ resources: [
112
+ `arn:aws:s3:::${s3DataSourceConfig.bucketName}/*`
113
+ ],
114
+ effect: iam.Effect.ALLOW
115
+ }),
116
+ new iam.PolicyStatement({
117
+ actions: [
118
+ "s3:ListBucket"
119
+ ],
120
+ resources: [
121
+ `arn:aws:s3:::${s3DataSourceConfig.bucketName}`
122
+ ],
123
+ effect: iam.Effect.ALLOW
124
+ }),
125
+ new iam.PolicyStatement({
126
+ effect: iam.Effect.ALLOW,
127
+ actions: [
128
+ "kendra:BatchPutDocument",
129
+ "kendra:BatchDeleteDocument"
130
+ ],
131
+ resources: [
132
+ targetIndex.attrArn
133
+ ]
134
+ }),
135
+ ]
136
+ });
137
+ const dataSourceRole = new iam.Role(scope, `data-source-role-${id}`, {
138
+ assumedBy: new iam.ServicePrincipal('kendra.amazonaws.com'),
139
+ description: 'Policy for Kendra S3 Data Source',
140
+ inlinePolicies: {
141
+ s3CrawlPolicy,
142
+ },
143
+ });
144
+ defaultProps = utils_2.overrideProps(defaultProps, { roleArn: dataSourceRole.roleArn });
145
+ }
146
+ const consolidatedProps = utils_1.consolidateProps(defaultProps, clientProps);
147
+ return new kendra.CfnDataSource(scope, `data-source-${id}`, consolidatedProps);
148
+ }
149
+ function CreateKendraIndexLoggingRole(scope, id) {
150
+ const allowKendraToLogPolicy = new iam.PolicyDocument({
151
+ statements: [
152
+ new iam.PolicyStatement({
153
+ resources: ['*'],
154
+ actions: [
155
+ "cloudwatch:PutMetricData"
156
+ ],
157
+ effect: iam.Effect.ALLOW,
158
+ conditions: {
159
+ StringEquals: {
160
+ "cloudwatch:namespace": "AWS/Kendra"
161
+ }
162
+ }
163
+ }),
164
+ new iam.PolicyStatement({
165
+ resources: [`arn:aws:logs:${aws_cdk_lib_1.Aws.REGION}:${aws_cdk_lib_1.Aws.ACCOUNT_ID}:log-group:/aws/kendra/*`],
166
+ actions: [
167
+ "logs:CreateLogGroup"
168
+ ],
169
+ effect: iam.Effect.ALLOW,
170
+ }),
171
+ new iam.PolicyStatement({
172
+ resources: [`arn:${aws_cdk_lib_1.Aws.PARTITION}:logs:${aws_cdk_lib_1.Aws.REGION}:${aws_cdk_lib_1.Aws.ACCOUNT_ID}:log-group:/aws/kendra/*`],
173
+ actions: [
174
+ "logs:DescribeLogGroups"
175
+ ],
176
+ effect: iam.Effect.ALLOW,
177
+ }),
178
+ new iam.PolicyStatement({
179
+ resources: [`arn:${aws_cdk_lib_1.Aws.PARTITION}:logs:${aws_cdk_lib_1.Aws.REGION}:${aws_cdk_lib_1.Aws.ACCOUNT_ID}:log-group:/aws/kendra/*:log-stream:*`],
180
+ actions: [
181
+ 'logs:CreateLogStream',
182
+ 'logs:PutLogEvents',
183
+ 'logs:DescribeLogStream',
184
+ ],
185
+ effect: iam.Effect.ALLOW,
186
+ }),
187
+ ],
188
+ });
189
+ const indexRole = new iam.Role(scope, `kendra-index-role-${id}`, {
190
+ assumedBy: new iam.ServicePrincipal('kendra.amazonaws.com'),
191
+ description: 'Allow Kendra index to write CloudWatch Logs',
192
+ inlinePolicies: {
193
+ AllowLogging: allowKendraToLogPolicy,
194
+ },
195
+ });
196
+ utils_1.addCfnSuppressRules(indexRole, [{
197
+ id: "W11",
198
+ reason: "PutMetricData does not allow resource specification, " +
199
+ "scope is narrowed by the namespace condition. " +
200
+ "https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncloudwatch.html"
201
+ }]);
202
+ return indexRole.roleArn;
203
+ }
204
+ // @summary Confirm each entry is a correct value, uppercase each entry
205
+ function normalizeKendraPermissions(rawPermissions) {
206
+ const validPermissions = ["READ", "SUBMITFEEDBACK", "WRITE"];
207
+ const result = rawPermissions.map((s) => {
208
+ const upperCaseValue = s.toUpperCase();
209
+ if (!validPermissions.includes(upperCaseValue)) {
210
+ throw new Error(`Invalid indexPermission value - valid values are "READ", "SUBMITFEEDBACK" and "WRITE"`);
211
+ }
212
+ return upperCaseValue;
213
+ });
214
+ return result;
215
+ }
216
+ exports.normalizeKendraPermissions = normalizeKendraPermissions;
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2VuZHJhLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImtlbmRyYS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCxpREFBaUQ7QUFDakQsMkNBQTJDO0FBQzNDLG1DQUFnRTtBQUNoRSw2Q0FBa0M7QUFJbEMsdURBQTREO0FBQzVELG1DQUE4RDtBQVk5RDs7R0FFRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO0lBQ3pGLHVDQUF1QztJQUN2QyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRTtRQUMxQiwwRUFBMEU7UUFDMUUsT0FBTyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7S0FDL0I7U0FBTTtRQUVMLElBQUksWUFBWSxHQUFXLEVBQUUsQ0FBQztRQUU5Qix5RkFBeUY7UUFDekYsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxPQUFPLEVBQUU7WUFDcEMsWUFBWSxHQUFHLDRCQUE0QixDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUN4RDtRQUNELE1BQU0sc0JBQXNCLEdBQUcseUNBQXVCLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBRXpFLE1BQU0sMkJBQTJCLEdBQUcsd0JBQWdCLENBQUMsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckcsTUFBTSxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLEVBQUUsMkJBQTJCLENBQUMsQ0FBQztRQUMvRiwyQkFBbUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsTUFBTSxFQUFFLDJHQUEyRzthQUNwSCxDQUFDLENBQUMsQ0FBQztRQUVKLE9BQU8sUUFBUSxDQUFDO0tBQ2pCO0FBQ0gsQ0FBQztB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LEVBQUUsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsc0JBQXNCLENBQUM7UUFDM0QsV0FBVyxFQUFFLDZDQUE2QztRQUMxRCxjQUFjLEVBQUU7WUFDZCxZQUFZLEVBQUUsc0JBQXNCO1NBQ3JDO0tBQ0YsQ0FBQyxDQUFDO0lBQ0gsMkJBQW1CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDOUIsRUFBRSxFQUFFLEtBQUs7WUFDVCxNQUFNLEVBQUUsdURBQXVEO2dCQUM3RCxnREFBZ0Q7Z0JBQ2hELCtGQUErRjtTQUNsRyxDQUFDLENBQUMsQ0FBQztJQUNKLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUMzQixDQUFDO0FBRUQsdUVBQXVFO0FBQ3ZFLFNBQWdCLDBCQUEwQixDQUFDLGNBQXdCO0lBQ2pFLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFN0QsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEdBQUcsQ0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQzlDLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFO1lBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsdUZBQXVGLENBQUMsQ0FBQztTQUMxRztRQUNELE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQVhELGdFQVdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLypcbiAqICBUaGUgZnVuY3Rpb25zIGZvdW5kIGhlcmUgaW4gdGhlIGNvcmUgbGlicmFyeSBhcmUgZm9yIGludGVybmFsIHVzZSBhbmQgY2FuIGJlIGNoYW5nZWRcbiAqICBvciByZW1vdmVkIG91dHNpZGUgb2YgYSBtYWpvciByZWxlYXNlLiBXZSByZWNvbW1lbmQgYWdhaW5zdCBjYWxsaW5nIHRoZW0gZGlyZWN0bHkgZnJvbSBjbGllbnQgY29kZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBrZW5kcmEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWtlbmRyYSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDZm5TdXBwcmVzc1J1bGVzLCBjb25zb2xpZGF0ZVByb3BzIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IEF3cyB9IGZyb20gJ2F3cy1jZGstbGliJztcblxuLy8gTm90ZTogVG8gZW5zdXJlIENES3YyIGNvbXBhdGliaWxpdHksIGtlZXAgdGhlIGltcG9ydCBzdGF0ZW1lbnQgZm9yIENvbnN0cnVjdCBzZXBhcmF0ZVxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEZWZhdWx0S2VuZHJhSW5kZXhQcm9wcyB9IGZyb20gJy4va2VuZHJhLWRlZmF1bHRzJztcbmltcG9ydCB7IGdlbmVyYXRlUGh5c2ljYWxOYW1lLCBvdmVycmlkZVByb3BzIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZEtlbmRyYUluZGV4UHJvcHMge1xuICByZWFkb25seSBrZW5kcmFJbmRleFByb3BzPzoga2VuZHJhLkNmbkluZGV4UHJvcHMgfCBhbnk7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBLZW5kcmEgSW5kZXggb2JqZWN0LCBQcm92aWRpbmcgYm90aCB0aGlzIGFuZCBrZW5kcmFJbmRleFByb3BzIHdpbGwgY2F1c2UgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdJbmRleE9iaj86IGtlbmRyYS5DZm5JbmRleDtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRLZW5kcmFJbmRleChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQnVpbGRLZW5kcmFJbmRleFByb3BzKToga2VuZHJhLkNmbkluZGV4IHtcbiAgLy8gQ29uZGl0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uIGNyZWF0aW9uXG4gIGlmIChwcm9wcy5leGlzdGluZ0luZGV4T2JqKSB7XG4gICAgLy8gVGhlIGNsaWVudCBwcm92aWRlZCBhbiBJbmRleCwgc28gd2UnbGwgZG8gbm90aGluZyBhbmQgcmV0dXJuIGl0IHRvIHRoZW1cbiAgICByZXR1cm4gcHJvcHMuZXhpc3RpbmdJbmRleE9iajtcbiAgfSBlbHNlIHtcblxuICAgIGxldCBpbmRleFJvbGVBcm46IHN0cmluZyA9IFwiXCI7XG5cbiAgICAvLyBJZiB0aGUgY2xpZW50IHByb3ZpZGVkIGEgcm9sZSwgdGhlbiBkb24ndCBib3RoZXIgY3JlYXRpbmcgYSBuZXcgb25lIHRoYXQgd2UgZG9uJ3QgbmVlZFxuICAgIGlmICghcHJvcHMua2VuZHJhSW5kZXhQcm9wcz8ucm9sZUFybikge1xuICAgICAgaW5kZXhSb2xlQXJuID0gQ3JlYXRlS2VuZHJhSW5kZXhMb2dnaW5nUm9sZShzY29wZSwgaWQpO1xuICAgIH1cbiAgICBjb25zdCBkZWZhdWx0SW5kZXhQcm9wZXJ0aWVzID0gRGVmYXVsdEtlbmRyYUluZGV4UHJvcHMoaWQsIGluZGV4Um9sZUFybik7XG5cbiAgICBjb25zdCBjb25zb2xpZGF0ZWRJbmRleFByb3BlcnRpZXMgPSBjb25zb2xpZGF0ZVByb3BzKGRlZmF1bHRJbmRleFByb3BlcnRpZXMsIHByb3BzLmtlbmRyYUluZGV4UHJvcHMpO1xuICAgIGNvbnN0IG5ld0luZGV4ID0gbmV3IGtlbmRyYS5DZm5JbmRleChzY29wZSwgYGtlbmRyYS1pbmRleC0ke2lkfWAsIGNvbnNvbGlkYXRlZEluZGV4UHJvcGVydGllcyk7XG4gICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhuZXdJbmRleCwgW3tcbiAgICAgIGlkOiBcIlc4MFwiLFxuICAgICAgcmVhc29uOiBcIldlIGNvbnN1bHRlZCB0aGUgS2VuZHJhIFRGQyBhbmQgdGhleSBjb25maXJtZWQgdGhlIGRlZmF1bHQgZW5jcnlwdGlvbiBpcyBzdWZmaWNpZW50IGZvciBnZW5lcmFsIHVzZSBjYXNlc1wiXG4gICAgfV0pO1xuXG4gICAgcmV0dXJuIG5ld0luZGV4O1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFkZE11bHRpcGxlS2VuZHJhRGF0YVNvdXJjZXMoc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZyxcbiAga2VuZHJhSW5kZXg6IGtlbmRyYS5DZm5JbmRleCxcbiAgY2xpZW50RGF0YVNvdXJjZVByb3BzOiBBcnJheTxQYXJ0aWFsPGtlbmRyYS5DZm5EYXRhU291cmNlUHJvcHM+Pik6IGtlbmRyYS5DZm5EYXRhU291cmNlW10ge1xuXG4gIGNvbnN0IHJldHVybkRhdGFTb3VyY2VzOiBrZW5kcmEuQ2ZuRGF0YVNvdXJjZVtdID0gW107XG4gIGNsaWVudERhdGFTb3VyY2VQcm9wcy5mb3JFYWNoKChwcm9wcywgaW5kZXgpID0+IHtcbiAgICByZXR1cm5EYXRhU291cmNlcy5wdXNoKEFkZEtlbmRyYURhdGFTb3VyY2Uoc2NvcGUsIGAke2lkfSR7aW5kZXh9YCwga2VuZHJhSW5kZXgsIHByb3BzKSk7XG4gIH0pO1xuICByZXR1cm4gcmV0dXJuRGF0YVNvdXJjZXM7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFkZEtlbmRyYURhdGFTb3VyY2Uoc2NvcGU6IENvbnN0cnVjdCxcbiAgaWQ6IHN0cmluZywgaW5kZXg6IGtlbmRyYS5DZm5JbmRleCxcbiAgY2xpZW50RGF0YVNvdXJjZVByb3BzOiBrZW5kcmEuQ2ZuRGF0YVNvdXJjZVByb3BzIHwgYW55KToga2VuZHJhLkNmbkRhdGFTb3VyY2Uge1xuXG4gIGlmICAoY2xpZW50RGF0YVNvdXJjZVByb3BzLnR5cGUgPT09ICdTMycpIHtcbiAgICByZXR1cm4gQ3JlYXRlUzNEYXRhU291cmNlKHNjb3BlLCBpbmRleCwgaWQsIGNsaWVudERhdGFTb3VyY2VQcm9wcyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGNsaWVudERhdGFTb3VyY2VQcm9wcy5pbmRleElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgRGF0YVNvdXJjZSBwcm9wIHNwZWNpZmllZCAtIENvbnN0cnVjdCBtdXN0IHNldCB0aGUgaW5kZXhJZCBwcm9wJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcga2VuZHJhLkNmbkRhdGFTb3VyY2Uoc2NvcGUsIGBrZW5kcmEtZGF0YS1zb3VyY2UtJHtpZH1gLCB7XG4gICAgICAuLi5jbGllbnREYXRhU291cmNlUHJvcHMsXG4gICAgICBpbmRleElkOiBpbmRleC5hdHRySWRcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBDcmVhdGVTM0RhdGFTb3VyY2Uoc2NvcGU6IENvbnN0cnVjdCxcbiAgdGFyZ2V0SW5kZXg6IGtlbmRyYS5DZm5JbmRleCxcbiAgaWQ6IHN0cmluZyxcbiAgY2xpZW50UHJvcHM6IFBhcnRpYWw8a2VuZHJhLkNmbkRhdGFTb3VyY2VQcm9wcz4pOiBrZW5kcmEuQ2ZuRGF0YVNvdXJjZSB7XG5cbiAgLy8gV2UgZ28gdGhyb3VnaCBzb21lIGhvb3BzIGhlcmUgdG8gZXh0cmFjdCB0aGUgdmFyaW91cyBpbnB1dHMsIGJlY2F1c2Ugd2UgbmVlZCB0byBuYXJyb3dcbiAgLy8gdGhlIHR5cGUgdG8gcmVtb3ZlIHRoZSB1bmlvbiB3aXRoIElSZXNvbHZhYmxlXG4gIGNvbnN0IGRhdGFTb3VyY2VDb25maWcgPSBjbGllbnRQcm9wcy5kYXRhU291cmNlQ29uZmlndXJhdGlvbiBhcyBrZW5kcmEuQ2ZuRGF0YVNvdXJjZS5EYXRhU291cmNlQ29uZmlndXJhdGlvblByb3BlcnR5O1xuICBpZiAoIWRhdGFTb3VyY2VDb25maWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIC0gYW4gUzMgS2VuZHJhIERhdGFTb3VyY2UgcmVxdWlyZXMgYW4gRGF0YVNvdXJjZUNvZmlndXJhdGlvbiBwcm9wJyk7XG4gIH1cblxuICBjb25zdCBzM0RhdGFTb3VyY2VDb25maWcgPSBkYXRhU291cmNlQ29uZmlnLnMzQ29uZmlndXJhdGlvbiBhcyBrZW5kcmEuQ2ZuRGF0YVNvdXJjZS5TM0RhdGFTb3VyY2VDb25maWd1cmF0aW9uUHJvcGVydHk7XG5cbiAgaWYgKCFzM0RhdGFTb3VyY2VDb25maWcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIC0gYW4gUzMgS2VuZHJhIERhdGFTb3VyY2UgcmVxdWlyZXMgYW4gRGF0YVNvdXJjZUNvZmlndXJhdGlvbi5TM0NvbmZpZ3VyYXRpb24gcHJvcCcpO1xuICB9XG5cbiAgLy8gTm8gQnVja2V0IG5hbWUgaXMgYW4gZXJyb3JcbiAgaWYgKCFzM0RhdGFTb3VyY2VDb25maWcuYnVja2V0TmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignRXJyb3IgLSBhbiBTMyBLZW5kcmEgRGF0YVNvdXJjZSByZXF1aXJlcyB0aGUgRGF0YVNvdXJjZUNvZmlndXJhdGlvbi5TM0NvbmZpZ3VyYXRpb24uYnVja2V0TmFtZSBwcm9wJyk7XG4gIH1cblxuICAvLyBJZiB0aGVyZSdzIG5vIHJvbGUsIG1ha2UgYSByb2xlIGFuZCBwdXQgaXQgaW50byBkZWZhdWx0UHJvcHNcbiAgLy8gUHV0IGJ1Y2tldCBuYW1lIGluIGRlZmF1bHQgcHJvcHNcbiAgbGV0IGRlZmF1bHRQcm9wczoga2VuZHJhLkNmbkRhdGFTb3VyY2VQcm9wcyA9IHtcbiAgICBpbmRleElkOiB0YXJnZXRJbmRleC5yZWYsXG4gICAgbmFtZTogZ2VuZXJhdGVQaHlzaWNhbE5hbWUoJycsIFsnczMtZGF0YXNvdXJjZScsIGlkXSwgMTAwMCksXG4gICAgdHlwZTogJ1MzJ1xuICB9O1xuXG4gIC8vIFJldHVybiBjb25zb2xpZGF0ZWQgZGVmYXVsdCBhbmQgdXNlciBwcm9wc1xuICBpZiAoIWNsaWVudFByb3BzLnJvbGVBcm4pIHtcbiAgICBjb25zdCBzM0NyYXdsUG9saWN5ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBcInMzOkdldE9iamVjdFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOnMzOjo6JHtzM0RhdGFTb3VyY2VDb25maWcuYnVja2V0TmFtZX0vKmBcbiAgICAgICAgICBdLFxuICAgICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPV1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFwiczM6TGlzdEJ1Y2tldFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIGBhcm46YXdzOnMzOjo6JHtzM0RhdGFTb3VyY2VDb25maWcuYnVja2V0TmFtZX1gXG4gICAgICAgICAgXSxcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1dcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgXCJrZW5kcmE6QmF0Y2hQdXREb2N1bWVudFwiLFxuICAgICAgICAgICAgXCJrZW5kcmE6QmF0Y2hEZWxldGVEb2N1bWVudFwiXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAgIHRhcmdldEluZGV4LmF0dHJBcm5cbiAgICAgICAgICBdXG4gICAgICAgIH0pLFxuICAgICAgXVxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YVNvdXJjZVJvbGU6IGlhbS5Sb2xlID0gbmV3IGlhbS5Sb2xlKHNjb3BlLCBgZGF0YS1zb3VyY2Utcm9sZS0ke2lkfWAsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdrZW5kcmEuYW1hem9uYXdzLmNvbScpLFxuICAgICAgZGVzY3JpcHRpb246ICdQb2xpY3kgZm9yIEtlbmRyYSBTMyBEYXRhIFNvdXJjZScsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBzM0NyYXdsUG9saWN5LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBkZWZhdWx0UHJvcHMgPSBvdmVycmlkZVByb3BzKGRlZmF1bHRQcm9wcywgeyByb2xlQXJuOiBkYXRhU291cmNlUm9sZS5yb2xlQXJuIH0pO1xuICB9XG5cbiAgY29uc3QgY29uc29saWRhdGVkUHJvcHM6IGtlbmRyYS5DZm5EYXRhU291cmNlUHJvcHMgPSBjb25zb2xpZGF0ZVByb3BzKGRlZmF1bHRQcm9wcywgY2xpZW50UHJvcHMpO1xuXG4gIHJldHVybiBuZXcga2VuZHJhLkNmbkRhdGFTb3VyY2Uoc2NvcGUsIGBkYXRhLXNvdXJjZS0ke2lkfWAsIGNvbnNvbGlkYXRlZFByb3BzKTtcblxufVxuXG5mdW5jdGlvbiBDcmVhdGVLZW5kcmFJbmRleExvZ2dpbmdSb2xlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBhbGxvd0tlbmRyYVRvTG9nUG9saWN5ID0gbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgc3RhdGVtZW50czogW1xuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgXCJjbG91ZHdhdGNoOlB1dE1ldHJpY0RhdGFcIlxuICAgICAgICBdLFxuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgIFwiY2xvdWR3YXRjaDpuYW1lc3BhY2VcIjogXCJBV1MvS2VuZHJhXCJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czpsb2dzOiR7QXdzLlJFR0lPTn06JHtBd3MuQUNDT1VOVF9JRH06bG9nLWdyb3VwOi9hd3Mva2VuZHJhLypgXSxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgIFwibG9nczpDcmVhdGVMb2dHcm91cFwiXG4gICAgICAgIF0sXG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICByZXNvdXJjZXM6IFtgYXJuOiR7QXdzLlBBUlRJVElPTn06bG9nczoke0F3cy5SRUdJT059OiR7QXdzLkFDQ09VTlRfSUR9OmxvZy1ncm91cDovYXdzL2tlbmRyYS8qYF0sXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcImxvZ3M6RGVzY3JpYmVMb2dHcm91cHNcIlxuICAgICAgICBdLFxuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICB9KSxcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgcmVzb3VyY2VzOiBbYGFybjoke0F3cy5QQVJUSVRJT059OmxvZ3M6JHtBd3MuUkVHSU9OfToke0F3cy5BQ0NPVU5UX0lEfTpsb2ctZ3JvdXA6L2F3cy9rZW5kcmEvKjpsb2ctc3RyZWFtOipgXSxcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdsb2dzOkNyZWF0ZUxvZ1N0cmVhbScsXG4gICAgICAgICAgJ2xvZ3M6UHV0TG9nRXZlbnRzJyxcbiAgICAgICAgICAnbG9nczpEZXNjcmliZUxvZ1N0cmVhbScsXG4gICAgICAgIF0sXG4gICAgICAgIGVmZmVjdDogaWFtLkVmZmVjdC5BTExPVyxcbiAgICAgIH0pLFxuICAgIF0sXG4gIH0pO1xuXG4gIGNvbnN0IGluZGV4Um9sZTogaWFtLlJvbGUgPSBuZXcgaWFtLlJvbGUoc2NvcGUsIGBrZW5kcmEtaW5kZXgtcm9sZS0ke2lkfWAsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgna2VuZHJhLmFtYXpvbmF3cy5jb20nKSxcbiAgICBkZXNjcmlwdGlvbjogJ0FsbG93IEtlbmRyYSBpbmRleCB0byB3cml0ZSBDbG91ZFdhdGNoIExvZ3MnLFxuICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICBBbGxvd0xvZ2dpbmc6IGFsbG93S2VuZHJhVG9Mb2dQb2xpY3ksXG4gICAgfSxcbiAgfSk7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoaW5kZXhSb2xlLCBbe1xuICAgIGlkOiBcIlcxMVwiLFxuICAgIHJlYXNvbjogXCJQdXRNZXRyaWNEYXRhIGRvZXMgbm90IGFsbG93IHJlc291cmNlIHNwZWNpZmljYXRpb24sIFwiICtcbiAgICAgIFwic2NvcGUgaXMgbmFycm93ZWQgYnkgdGhlIG5hbWVzcGFjZSBjb25kaXRpb24uIFwiICtcbiAgICAgIFwiaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaC5odG1sXCJcbiAgfV0pO1xuICByZXR1cm4gaW5kZXhSb2xlLnJvbGVBcm47XG59XG5cbi8vIEBzdW1tYXJ5IENvbmZpcm0gZWFjaCBlbnRyeSBpcyBhIGNvcnJlY3QgdmFsdWUsIHVwcGVyY2FzZSBlYWNoIGVudHJ5XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplS2VuZHJhUGVybWlzc2lvbnMocmF3UGVybWlzc2lvbnM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xuICBjb25zdCB2YWxpZFBlcm1pc3Npb25zID0gW1wiUkVBRFwiLCBcIlNVQk1JVEZFRURCQUNLXCIsIFwiV1JJVEVcIl07XG5cbiAgY29uc3QgcmVzdWx0ID0gcmF3UGVybWlzc2lvbnMubWFwPHN0cmluZz4oKHMpID0+IHtcbiAgICBjb25zdCB1cHBlckNhc2VWYWx1ZSA9IHMudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIXZhbGlkUGVybWlzc2lvbnMuaW5jbHVkZXModXBwZXJDYXNlVmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgaW5kZXhQZXJtaXNzaW9uIHZhbHVlIC0gdmFsaWQgdmFsdWVzIGFyZSBcIlJFQURcIiwgXCJTVUJNSVRGRUVEQkFDS1wiIGFuZCBcIldSSVRFXCJgKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwcGVyQ2FzZVZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiJdfQ==
@@ -36,11 +36,11 @@ export interface BuildLambdaFunctionProps {
36
36
  /**
37
37
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
38
38
  */
39
- export declare function buildLambdaFunction(scope: Construct, props: BuildLambdaFunctionProps): lambda.Function;
39
+ export declare function buildLambdaFunction(scope: Construct, props: BuildLambdaFunctionProps, constructId?: string): lambda.Function;
40
40
  /**
41
41
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
42
42
  */
43
- export declare function deployLambdaFunction(scope: Construct, lambdaFunctionProps: lambda.FunctionProps, functionId?: string, vpc?: ec2.IVpc): lambda.Function;
43
+ export declare function deployLambdaFunction(scope: Construct, lambdaFunctionProps: lambda.FunctionProps, constructId?: string, vpc?: ec2.IVpc): lambda.Function;
44
44
  /**
45
45
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
46
46
  *
@@ -26,11 +26,14 @@ const security_group_helper_1 = require("./security-group-helper");
26
26
  /**
27
27
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
28
28
  */
29
- function buildLambdaFunction(scope, props) {
29
+ function buildLambdaFunction(scope, props, constructId) {
30
30
  // Conditional lambda function creation
31
31
  if (!props.existingLambdaObj) {
32
32
  if (props.lambdaFunctionProps) {
33
- return deployLambdaFunction(scope, props.lambdaFunctionProps, props.lambdaFunctionProps.functionName, props.vpc);
33
+ // constructId may be specified by the calling code, but if not, fallback to the original behavior of using the
34
+ // function name as the construct id used when creating the underlying lambda function and iam role.
35
+ constructId = constructId ?? props.lambdaFunctionProps.functionName;
36
+ return deployLambdaFunction(scope, props.lambdaFunctionProps, constructId, props.vpc);
34
37
  }
35
38
  else {
36
39
  throw Error('Either existingLambdaObj or lambdaFunctionProps is required');
@@ -57,14 +60,14 @@ exports.buildLambdaFunction = buildLambdaFunction;
57
60
  /**
58
61
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
59
62
  */
60
- function deployLambdaFunction(scope, lambdaFunctionProps, functionId, vpc) {
61
- const _functionId = functionId ? functionId : 'LambdaFunction';
62
- const _functionRoleId = _functionId + 'ServiceRole';
63
+ function deployLambdaFunction(scope, lambdaFunctionProps, constructId, vpc) {
64
+ const functionId = constructId ?? 'LambdaFunction';
65
+ const functionRoleId = functionId + 'ServiceRole';
63
66
  if (vpc && lambdaFunctionProps.vpc) {
64
67
  throw new Error("Cannot provide a VPC in both the lambdaFunctionProps and the function argument");
65
68
  }
66
69
  // Setup the IAM Role for Lambda Service
67
- const lambdaServiceRole = new iam.Role(scope, _functionRoleId, {
70
+ const lambdaServiceRole = new iam.Role(scope, functionRoleId, {
68
71
  assumedBy: new iam.ServicePrincipal('lambda.amazonaws.com'),
69
72
  inlinePolicies: {
70
73
  LambdaFunctionServiceRolePolicy: new iam.PolicyDocument({
@@ -107,7 +110,7 @@ function deployLambdaFunction(scope, lambdaFunctionProps, functionId, vpc) {
107
110
  vpc,
108
111
  }, true);
109
112
  }
110
- const lambdafunction = new lambda.Function(scope, _functionId, finalLambdaFunctionProps);
113
+ const lambdafunction = new lambda.Function(scope, functionId, finalLambdaFunctionProps);
111
114
  if (lambdaFunctionProps.runtime === lambda.Runtime.NODEJS_16_X) {
112
115
  lambdafunction.addEnvironment('AWS_NODEJS_CONNECTION_REUSE_ENABLED', '1', { removeInEdge: true });
113
116
  }
@@ -179,4 +182,4 @@ function getLambdaVpcSecurityGroupIds(lambdaFunction) {
179
182
  return securityGroupIds;
180
183
  }
181
184
  exports.getLambdaVpcSecurityGroupIds = getLambdaVpcSecurityGroupIds;
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCxpREFBaUQ7QUFDakQsMkNBQTJDO0FBRTNDLHVEQUErRDtBQUMvRCxtQ0FBbUM7QUFDbkMsbUNBQTZEO0FBQzdELG1FQUE2RDtBQXlCN0Q7O0dBRUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFnQixFQUFFLEtBQStCO0lBQ25GLHVDQUF1QztJQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFO1FBQzVCLElBQUksS0FBSyxDQUFDLG1CQUFtQixFQUFFO1lBQzdCLE9BQU8sb0JBQW9CLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsbUJBQW1CLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNsSDthQUFNO1lBQ0wsTUFBTSxLQUFLLENBQUMsNkRBQTZELENBQUMsQ0FBQztTQUM1RTtLQUNGO1NBQU07UUFDTCxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDYixNQUFNLGdCQUFnQixHQUF1QixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQWtDLENBQUM7WUFDN0csSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsY0FBYyxFQUFFO2dCQUM3QyxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ2IsS0FBSyxDQUFDLG1CQUFtQixFQUFFLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3JELHVHQUF1RztvQkFDdkcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLHlDQUF5QyxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDckcsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELElBQUks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QixvQ0FBb0M7UUFDcEMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7YUFDbkU7WUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsSUFBSSxVQUFVLEdBQUcsVUFBVSxFQUFFO2dCQUMzQixVQUFVLEdBQUcsVUFBVSxDQUFDO2FBQ3pCO1NBQ0Y7SUFFSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxRQUFRLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLDRCQUE0QixDQUFDLGNBQStCO0lBQzFFLE1BQU0sZ0JBQWdCLEdBQWEsRUFBRSxDQUFDO0lBRXRDLGNBQWMsQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUU3RyxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFORCxvRUFNQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBEZWZhdWx0TGFtYmRhRnVuY3Rpb25Qcm9wcyB9IGZyb20gJy4vbGFtYmRhLWRlZmF1bHRzJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBvdmVycmlkZVByb3BzLCBhZGRDZm5TdXBwcmVzc1J1bGVzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBidWlsZFNlY3VyaXR5R3JvdXAgfSBmcm9tIFwiLi9zZWN1cml0eS1ncm91cC1oZWxwZXJcIjtcbi8vIE5vdGU6IFRvIGVuc3VyZSBDREt2MiBjb21wYXRpYmlsaXR5LCBrZWVwIHRoZSBpbXBvcnQgc3RhdGVtZW50IGZvciBDb25zdHJ1Y3Qgc2VwYXJhdGVcbmltcG9ydCB7IENvbnN0cnVjdCwgSUNvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkTGFtYmRhRnVuY3Rpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBMYW1iZGEgRnVuY3Rpb24gb2JqZWN0LCBQcm92aWRpbmcgYm90aCB0aGlzIGFuZCBsYW1iZGFGdW5jdGlvblByb3BzIHdpbGwgY2F1c2UgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdMYW1iZGFPYmo/OiBsYW1iZGEuRnVuY3Rpb247XG4gIC8qKlxuICAgKiBVc2VyIHByb3ZpZGVkIHByb3BzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHByb3BzIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHQgcHJvcHMgYXJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGxhbWJkYUZ1bmN0aW9uUHJvcHM/OiBsYW1iZGEuRnVuY3Rpb25Qcm9wcztcbiAgLyoqXG4gICAqIEEgVlBDIHdoZXJlIHRoZSBMYW1iZGEgZnVuY3Rpb24gd2lsbCBhY2Nlc3MgaW50ZXJuYWwgcmVzb3VyY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTGFtYmRhRnVuY3Rpb24oc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IEJ1aWxkTGFtYmRhRnVuY3Rpb25Qcm9wcyk6IGxhbWJkYS5GdW5jdGlvbiB7XG4gIC8vIENvbmRpdGlvbmFsIGxhbWJkYSBmdW5jdGlvbiBjcmVhdGlvblxuICBpZiAoIXByb3BzLmV4aXN0aW5nTGFtYmRhT2JqKSB7XG4gICAgaWYgKHByb3BzLmxhbWJkYUZ1bmN0aW9uUHJvcHMpIHtcbiAgICAgIHJldHVybiBkZXBsb3lMYW1iZGFGdW5jdGlvbihzY29wZSwgcHJvcHMubGFtYmRhRnVuY3Rpb25Qcm9wcywgcHJvcHMubGFtYmRhRnVuY3Rpb25Qcm9wcy5mdW5jdGlvbk5hbWUsIHByb3BzLnZwYyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKCdFaXRoZXIgZXhpc3RpbmdMYW1iZGFPYmogb3IgbGFtYmRhRnVuY3Rpb25Qcm9wcyBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvcHMudnBjKSB7XG4gICAgICBjb25zdCBsZXZlbE9uZUZ1bmN0aW9uOiBsYW1iZGEuQ2ZuRnVuY3Rpb24gPSBwcm9wcy5leGlzdGluZ0xhbWJkYU9iai5ub2RlLmRlZmF1bHRDaGlsZCBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG4gICAgICBpZiAocHJvcHMubGFtYmRhRnVuY3Rpb25Qcm9wcz8uc2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgbGV0IGN0ciA9IDIwO1xuICAgICAgICBwcm9wcy5sYW1iZGFGdW5jdGlvblByb3BzPy5zZWN1cml0eUdyb3Vwcy5mb3JFYWNoKHNnID0+IHtcbiAgICAgICAgICAvLyBJdCBhcHBlYXJzIHdlIGNhbid0IGdldCBSL08gYWNjZXNzIHRvIFZwY0NvbmZpZ1NlY3VyaXR5R3JvdXBJZHMsIHN1Y2ggYWNjZXNzIHdvdWxkIG1ha2UgdGhpcyBjbGVhbmVyXG4gICAgICAgICAgbGV2ZWxPbmVGdW5jdGlvbi5hZGRPdmVycmlkZShgUHJvcGVydGllcy5WcGNDb25maWcuU2VjdXJpdHlHcm91cElkcy4ke2N0cisrfWAsIHNnLnNlY3VyaXR5R3JvdXBJZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFwcm9wcy5leGlzdGluZ0xhbWJkYU9iai5pc0JvdW5kVG9WcGMpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0EgTGFtYmRhIGZ1bmN0aW9uIG11c3QgYmUgYm91bmQgdG8gYSBWUEMgdXBvbiBjcmVhdGlvbiwgaXQgY2Fubm90IGJlIGFkZGVkIHRvIGEgVlBDIGluIGEgc3Vic2VxdWVudCBjb25zdHJ1Y3QnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByb3BzLmV4aXN0aW5nTGFtYmRhT2JqO1xuICB9XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcGxveUxhbWJkYUZ1bmN0aW9uKHNjb3BlOiBDb25zdHJ1Y3QsXG4gIGxhbWJkYUZ1bmN0aW9uUHJvcHM6IGxhbWJkYS5GdW5jdGlvblByb3BzLFxuICBmdW5jdGlvbklkPzogc3RyaW5nLFxuICB2cGM/OiBlYzIuSVZwYyk6IGxhbWJkYS5GdW5jdGlvbiB7XG5cbiAgY29uc3QgX2Z1bmN0aW9uSWQgPSBmdW5jdGlvbklkID8gZnVuY3Rpb25JZCA6ICdMYW1iZGFGdW5jdGlvbic7XG4gIGNvbnN0IF9mdW5jdGlvblJvbGVJZCA9IF9mdW5jdGlvbklkICsgJ1NlcnZpY2VSb2xlJztcblxuICBpZiAodnBjICYmIGxhbWJkYUZ1bmN0aW9uUHJvcHMudnBjKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJDYW5ub3QgcHJvdmlkZSBhIFZQQyBpbiBib3RoIHRoZSBsYW1iZGFGdW5jdGlvblByb3BzIGFuZCB0aGUgZnVuY3Rpb24gYXJndW1lbnRcIlxuICAgICk7XG4gIH1cblxuICAvLyBTZXR1cCB0aGUgSUFNIFJvbGUgZm9yIExhbWJkYSBTZXJ2aWNlXG4gIGNvbnN0IGxhbWJkYVNlcnZpY2VSb2xlID0gbmV3IGlhbS5Sb2xlKHNjb3BlLCBfZnVuY3Rpb25Sb2xlSWQsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgTGFtYmRhRnVuY3Rpb25TZXJ2aWNlUm9sZVBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgIHN0YXRlbWVudHM6IFtuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nR3JvdXAnLFxuICAgICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJyxcbiAgICAgICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cydcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46JHtjZGsuQXdzLlBBUlRJVElPTn06bG9nczoke2Nkay5Bd3MuUkVHSU9OfToke2Nkay5Bd3MuQUNDT1VOVF9JRH06bG9nLWdyb3VwOi9hd3MvbGFtYmRhLypgXVxuICAgICAgICB9KV1cbiAgICAgIH0pXG4gICAgfVxuICB9KTtcblxuICAvLyBJZiB0aGlzIExhbWJkYSBmdW5jdGlvbiBpcyBnb2luZyB0byBhY2Nlc3MgcmVzb3VyZXMgaW4gYVxuICAvLyBWUEMsIHRoZW4gaXQgbmVlZHMgcHJpdmlsZWdlcyB0byBhY2Nlc3MgYW4gRU5JIGluIHRoYXQgVlBDXG4gIGlmIChsYW1iZGFGdW5jdGlvblByb3BzLnZwYyB8fCB2cGMpIHtcbiAgICBsYW1iZGFTZXJ2aWNlUm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIFwiZWMyOkNyZWF0ZU5ldHdvcmtJbnRlcmZhY2VcIixcbiAgICAgICAgXCJlYzI6RGVzY3JpYmVOZXR3b3JrSW50ZXJmYWNlc1wiLFxuICAgICAgICBcImVjMjpEZWxldGVOZXR3b3JrSW50ZXJmYWNlXCIsXG4gICAgICAgIFwiZWMyOkFzc2lnblByaXZhdGVJcEFkZHJlc3Nlc1wiLFxuICAgICAgICBcImVjMjpVbmFzc2lnblByaXZhdGVJcEFkZHJlc3Nlc1wiXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgdGhlIERlZmF1bHRGdW5jdGlvblByb3BzIHdpdGggdXNlciBwcm92aWRlZCAgbGFtYmRhRnVuY3Rpb25Qcm9wc1xuICBsZXQgZmluYWxMYW1iZGFGdW5jdGlvblByb3BzOiBsYW1iZGEuRnVuY3Rpb25Qcm9wcyA9IG92ZXJyaWRlUHJvcHMoRGVmYXVsdExhbWJkYUZ1bmN0aW9uUHJvcHMobGFtYmRhU2VydmljZVJvbGUpLCBsYW1iZGFGdW5jdGlvblByb3BzKTtcblxuICBpZiAodnBjKSB7XG5cbiAgICAvLyBUaGlzIGlzIGxpdGVyYWxseSBzZXR0aW5nIHVwIHdoYXQgd291bGQgYmUgdGhlIGRlZmF1bHQgU0csIGJ1dFxuICAgIC8vIHdlIG5lZWQgdG8gdG8gaXQgZXhwbGljaXRseSB0byBkaXNhYmxlIHRoZSBjZm5fbmFnIGVycm9yXG4gICAgY29uc3QgbGFtYmRhU2VjdXJpdHlHcm91cCA9IGJ1aWxkU2VjdXJpdHlHcm91cChcbiAgICAgIHNjb3BlLFxuICAgICAgXCJSZXBsYWNlRGVmYXVsdFNlY3VyaXR5R3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgdnBjLFxuICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIFtdLFxuICAgICAgW11cbiAgICApO1xuXG4gICAgZmluYWxMYW1iZGFGdW5jdGlvblByb3BzID0gb3ZlcnJpZGVQcm9wcyhmaW5hbExhbWJkYUZ1bmN0aW9uUHJvcHMsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbbGFtYmRhU2VjdXJpdHlHcm91cF0sXG4gICAgICB2cGMsXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBjb25zdCBsYW1iZGFmdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc2NvcGUsIF9mdW5jdGlvbklkLCBmaW5hbExhbWJkYUZ1bmN0aW9uUHJvcHMpO1xuXG4gIGlmIChsYW1iZGFGdW5jdGlvblByb3BzLnJ1bnRpbWUgPT09IGxhbWJkYS5SdW50aW1lLk5PREVKU18xNl9YKSB7XG4gICAgbGFtYmRhZnVuY3Rpb24uYWRkRW52aXJvbm1lbnQoJ0FXU19OT0RFSlNfQ09OTkVDVElPTl9SRVVTRV9FTkFCTEVEJywgJzEnLCB7IHJlbW92ZUluRWRnZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGNvbnN0IGNmbkxhbWJkYWZ1bmN0aW9uOiBsYW1iZGEuQ2ZuRnVuY3Rpb24gPSBsYW1iZGFmdW5jdGlvbi5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBsYW1iZGEuQ2ZuRnVuY3Rpb247XG5cbiAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhsYW1iZGFmdW5jdGlvbiwgW1xuICAgIHtcbiAgICAgIGlkOiAnVzU4JyxcbiAgICAgIHJlYXNvbjogYExhbWJkYSBmdW5jdGlvbnMgaGFzIHRoZSByZXF1aXJlZCBwZXJtaXNzaW9uIHRvIHdyaXRlIENsb3VkV2F0Y2ggTG9ncy4gSXQgdXNlcyBjdXN0b20gcG9saWN5IGluc3RlYWQgb2YgYXJuOmF3czppYW06OmF3czpwb2xpY3kvc2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSB3aXRoIHRpZ2h0ZXIgcGVybWlzc2lvbnMuYFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdXODknLFxuICAgICAgcmVhc29uOiBgVGhpcyBpcyBub3QgYSBydWxlIGZvciB0aGUgZ2VuZXJhbCBjYXNlLCBqdXN0IGZvciBzcGVjaWZpYyB1c2UgY2FzZXMvaW5kdXN0cmllc2BcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnVzkyJyxcbiAgICAgIHJlYXNvbjogYEltcG9zc2libGUgZm9yIHVzIHRvIGRlZmluZSB0aGUgY29ycmVjdCBjb25jdXJyZW5jeSBmb3IgY2xpZW50c2BcbiAgICB9XG4gIF0pO1xuXG4gIGlmIChjZm5MYW1iZGFmdW5jdGlvbi50cmFjaW5nQ29uZmlnKSB7XG4gICAgLy8gRmluZCB0aGUgWC1SYXkgSUFNIFBvbGljeVxuICAgIGNvbnN0IGNmbkxhbWJkYWZ1bmN0aW9uRGVmUG9saWN5ID0gbGFtYmRhZnVuY3Rpb24ucm9sZT8ubm9kZS50cnlGaW5kQ2hpbGQoJ0RlZmF1bHRQb2xpY3knKT8ubm9kZS5maW5kQ2hpbGQoJ1Jlc291cmNlJykgYXMgaWFtLkNmblBvbGljeTtcblxuICAgIC8vIEFkZCB0aGUgQ0ZOIE5BRyBzdXBwcmVzcyB0byBhbGxvdyBmb3IgXCJSZXNvdXJjZVwiOiBcIipcIiBmb3IgQVdTIFgtUmF5XG4gICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhjZm5MYW1iZGFmdW5jdGlvbkRlZlBvbGljeSwgW1xuICAgICAge1xuICAgICAgICBpZDogJ1cxMicsXG4gICAgICAgIHJlYXNvbjogYExhbWJkYSBuZWVkcyB0aGUgZm9sbG93aW5nIG1pbmltdW0gcmVxdWlyZWQgcGVybWlzc2lvbnMgdG8gc2VuZCB0cmFjZSBkYXRhIHRvIFgtUmF5IGFuZCBhY2Nlc3MgRU5JcyBpbiBhIFZQQy5gXG4gICAgICB9XG4gICAgXSk7XG4gIH1cblxuICByZXR1cm4gbGFtYmRhZnVuY3Rpb247XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqXG4gKiBBIHdyYXBwZXIgYWJvdmUgRnVuY3Rpb24uYWRkUGVybWlzaW9uIHRoYXRcbiAqIHByZXZlbnRzIHR3byBkaWZmZXJlbnQgY2FsbHMgdG8gYWRkUGVybWlzc2lvbiB1c2luZ1xuICogdGhlIHNhbWUgY29uc3RydWN0IGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUGVybWlzc2lvbih0YXJnZXRGdW5jdGlvbjogbGFtYmRhLkZ1bmN0aW9uLCBuYW1lOiBzdHJpbmcsIHBlcm1pc3Npb246IGxhbWJkYS5QZXJtaXNzaW9uKTogYW55IHtcbiAgdGFyZ2V0RnVuY3Rpb24uYWRkUGVybWlzc2lvbihHZXROZXh0SWQodGFyZ2V0RnVuY3Rpb24ucGVybWlzc2lvbnNOb2RlLmNoaWxkcmVuLCBuYW1lKSwgcGVybWlzc2lvbik7XG59XG5cbi8vIFNjYW4gdGhlIGN1cnJlbnQgcGVybWlzc2lvbnMgZm9yIGFueSBlbnRyaWVzIHdpdGggdGhpcyBjb3JlIG5hbWUgYW5kXG4vLyByZXR1cm4gdGhlIGZpcnN0IGF2YWlsYWJsZSBzeW50aGVzaXplZCBuYW1lLiBOYW1lcyBhcmUgY29yZU5hbWUtc3VmZml4LlxuZnVuY3Rpb24gR2V0TmV4dElkKGNoaWxkcmVuOiBJQ29uc3RydWN0W10sIGNvcmVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgbGFzdFN1ZmZpeDogbnVtYmVyID0gMDtcblxuICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcblxuICAgIC8vIGlmIChjb21wYXJlIHJpZ2h0IHNpZGUgb2Ygc3RyaW5nKVxuICAgIGlmIChjaGlsZC5ub2RlLmlkLmluZGV4T2YoY29yZU5hbWUpID09PSAwKSB7XG4gICAgICBjb25zdCBjb21wb25lbnRzID0gY2hpbGQubm9kZS5pZC5zcGxpdCgnLScpO1xuICAgICAgaWYgKGNvbXBvbmVudHMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdGx5IGZvcm1hdHRlZCBzeW50aGVzaXplZCBjb25zdHJ1Y3QgSURcIik7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVzZWRTdWZmaXggPSBOdW1iZXIoY29tcG9uZW50c1sxXSk7XG4gICAgICBpZiAodXNlZFN1ZmZpeCA+IGxhc3RTdWZmaXgpIHtcbiAgICAgICAgbGFzdFN1ZmZpeCA9IHVzZWRTdWZmaXg7XG4gICAgICB9XG4gICAgfVxuXG4gIH0pO1xuXG4gIHJldHVybiBgJHtjb3JlTmFtZX0tJHtsYXN0U3VmZml4ICsgMX1gO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYW1iZGFWcGNTZWN1cml0eUdyb3VwSWRzKGxhbWJkYUZ1bmN0aW9uOiBsYW1iZGEuRnVuY3Rpb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHNlY3VyaXR5R3JvdXBJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgbGFtYmRhRnVuY3Rpb24uY29ubmVjdGlvbnMuc2VjdXJpdHlHcm91cHMuZm9yRWFjaChlbGVtZW50ID0+IHNlY3VyaXR5R3JvdXBJZHMucHVzaChlbGVtZW50LnNlY3VyaXR5R3JvdXBJZCkpO1xuXG4gIHJldHVybiBzZWN1cml0eUdyb3VwSWRzO1xufSJdfQ==
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFtYmRhLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImxhbWJkYS1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCxpREFBaUQ7QUFDakQsMkNBQTJDO0FBRTNDLHVEQUErRDtBQUMvRCxtQ0FBbUM7QUFDbkMsbUNBQTZEO0FBQzdELG1FQUE2RDtBQXlCN0Q7O0dBRUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxLQUFnQixFQUFFLEtBQStCLEVBQUUsV0FBb0I7SUFDekcsdUNBQXVDO0lBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7UUFDNUIsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsK0dBQStHO1lBQy9HLG9HQUFvRztZQUNwRyxXQUFXLEdBQUcsV0FBVyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLENBQUM7WUFDcEUsT0FBTyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDdkY7YUFBTTtZQUNMLE1BQU0sS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7U0FDNUU7S0FDRjtTQUFNO1FBQ0wsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ2IsTUFBTSxnQkFBZ0IsR0FBdUIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFrQyxDQUFDO1lBQzdHLElBQUksS0FBSyxDQUFDLG1CQUFtQixFQUFFLGNBQWMsRUFBRTtnQkFDN0MsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNiLEtBQUssQ0FBQyxtQkFBbUIsRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO29CQUNyRCx1R0FBdUc7b0JBQ3ZHLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyx5Q0FBeUMsR0FBRyxFQUFF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RTNCLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFFdkIsb0NBQW9DO1FBQ3BDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN6QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQyxDQUFDO2FBQ25FO1lBRUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksVUFBVSxHQUFHLFVBQVUsRUFBRTtnQkFDM0IsVUFBVSxHQUFHLFVBQVUsQ0FBQzthQUN6QjtTQUNGO0lBRUgsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsUUFBUSxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQiw0QkFBNEIsQ0FBQyxjQUErQjtJQUMxRSxNQUFNLGdCQUFnQixHQUFhLEVBQUUsQ0FBQztJQUV0QyxjQUFjLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFFN0csT0FBTyxnQkFBZ0IsQ0FBQztBQUMxQixDQUFDO0FBTkQsb0VBTUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqICBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKS4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZVxuICogIHdpdGggdGhlIExpY2Vuc2UuIEEgY29weSBvZiB0aGUgTGljZW5zZSBpcyBsb2NhdGVkIGF0XG4gKlxuICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgb3IgaW4gdGhlICdsaWNlbnNlJyBmaWxlIGFjY29tcGFueWluZyB0aGlzIGZpbGUuIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVNcbiAqICBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9uc1xuICogIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKlxuICogIFRoZSBmdW5jdGlvbnMgZm91bmQgaGVyZSBpbiB0aGUgY29yZSBsaWJyYXJ5IGFyZSBmb3IgaW50ZXJuYWwgdXNlIGFuZCBjYW4gYmUgY2hhbmdlZFxuICogIG9yIHJlbW92ZWQgb3V0c2lkZSBvZiBhIG1ham9yIHJlbGVhc2UuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IGNhbGxpbmcgdGhlbSBkaXJlY3RseSBmcm9tIGNsaWVudCBjb2RlLlxuICovXG5cbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgRGVmYXVsdExhbWJkYUZ1bmN0aW9uUHJvcHMgfSBmcm9tICcuL2xhbWJkYS1kZWZhdWx0cyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgb3ZlcnJpZGVQcm9wcywgYWRkQ2ZuU3VwcHJlc3NSdWxlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYnVpbGRTZWN1cml0eUdyb3VwIH0gZnJvbSBcIi4vc2VjdXJpdHktZ3JvdXAtaGVscGVyXCI7XG4vLyBOb3RlOiBUbyBlbnN1cmUgQ0RLdjIgY29tcGF0aWJpbGl0eSwga2VlcCB0aGUgaW1wb3J0IHN0YXRlbWVudCBmb3IgQ29uc3RydWN0IHNlcGFyYXRlXG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZExhbWJkYUZ1bmN0aW9uUHJvcHMge1xuICAvKipcbiAgICogRXhpc3RpbmcgaW5zdGFuY2Ugb2YgTGFtYmRhIEZ1bmN0aW9uIG9iamVjdCwgUHJvdmlkaW5nIGJvdGggdGhpcyBhbmQgbGFtYmRhRnVuY3Rpb25Qcm9wcyB3aWxsIGNhdXNlIGFuIGVycm9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nTGFtYmRhT2JqPzogbGFtYmRhLkZ1bmN0aW9uO1xuICAvKipcbiAgICogVXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0IHByb3BzIGFyZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBsYW1iZGFGdW5jdGlvblByb3BzPzogbGFtYmRhLkZ1bmN0aW9uUHJvcHM7XG4gIC8qKlxuICAgKiBBIFZQQyB3aGVyZSB0aGUgTGFtYmRhIGZ1bmN0aW9uIHdpbGwgYWNjZXNzIGludGVybmFsIHJlc291cmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZExhbWJkYUZ1bmN0aW9uKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBCdWlsZExhbWJkYUZ1bmN0aW9uUHJvcHMsIGNvbnN0cnVjdElkPzogc3RyaW5nKTogbGFtYmRhLkZ1bmN0aW9uIHtcbiAgLy8gQ29uZGl0aW9uYWwgbGFtYmRhIGZ1bmN0aW9uIGNyZWF0aW9uXG4gIGlmICghcHJvcHMuZXhpc3RpbmdMYW1iZGFPYmopIHtcbiAgICBpZiAocHJvcHMubGFtYmRhRnVuY3Rpb25Qcm9wcykge1xuICAgICAgLy8gY29uc3RydWN0SWQgbWF5IGJlIHNwZWNpZmllZCBieSB0aGUgY2FsbGluZyBjb2RlLCBidXQgaWYgbm90LCBmYWxsYmFjayB0byB0aGUgb3JpZ2luYWwgYmVoYXZpb3Igb2YgdXNpbmcgdGhlXG4gICAgICAvLyBmdW5jdGlvbiBuYW1lIGFzIHRoZSBjb25zdHJ1Y3QgaWQgdXNlZCB3aGVuIGNyZWF0aW5nIHRoZSB1bmRlcmx5aW5nIGxhbWJkYSBmdW5jdGlvbiBhbmQgaWFtIHJvbGUuXG4gICAgICBjb25zdHJ1Y3RJZCA9IGNvbnN0cnVjdElkID8/IHByb3BzLmxhbWJkYUZ1bmN0aW9uUHJvcHMuZnVuY3Rpb25OYW1lO1xuICAgICAgcmV0dXJuIGRlcGxveUxhbWJkYUZ1bmN0aW9uKHNjb3BlLCBwcm9wcy5sYW1iZGFGdW5jdGlvblByb3BzLCBjb25zdHJ1Y3RJZCwgcHJvcHMudnBjKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgRXJyb3IoJ0VpdGhlciBleGlzdGluZ0xhbWJkYU9iaiBvciBsYW1iZGFGdW5jdGlvblByb3BzIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChwcm9wcy52cGMpIHtcbiAgICAgIGNvbnN0IGxldmVsT25lRnVuY3Rpb246IGxhbWJkYS5DZm5GdW5jdGlvbiA9IHByb3BzLmV4aXN0aW5nTGFtYmRhT2JqLm5vZGUuZGVmYXVsdENoaWxkIGFzIGxhbWJkYS5DZm5GdW5jdGlvbjtcbiAgICAgIGlmIChwcm9wcy5sYW1iZGFGdW5jdGlvblByb3BzPy5zZWN1cml0eUdyb3Vwcykge1xuICAgICAgICBsZXQgY3RyID0gMjA7XG4gICAgICAgIHByb3BzLmxhbWJkYUZ1bmN0aW9uUHJvcHM/LnNlY3VyaXR5R3JvdXBzLmZvckVhY2goc2cgPT4ge1xuICAgICAgICAgIC8vIEl0IGFwcGVhcnMgd2UgY2FuJ3QgZ2V0IFIvTyBhY2Nlc3MgdG8gVnBjQ29uZmlnU2VjdXJpdHlHcm91cElkcywgc3VjaCBhY2Nlc3Mgd291bGQgbWFrZSB0aGlzIGNsZWFuZXJcbiAgICAgICAgICBsZXZlbE9uZUZ1bmN0aW9uLmFkZE92ZXJyaWRlKGBQcm9wZXJ0aWVzLlZwY0NvbmZpZy5TZWN1cml0eUdyb3VwSWRzLiR7Y3RyKyt9YCwgc2cuc2VjdXJpdHlHcm91cElkKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoIXByb3BzLmV4aXN0aW5nTGFtYmRhT2JqLmlzQm91bmRUb1ZwYykge1xuICAgICAgICB0aHJvdyBFcnJvcignQSBMYW1iZGEgZnVuY3Rpb24gbXVzdCBiZSBib3VuZCB0byBhIFZQQyB1cG9uIGNyZWF0aW9uLCBpdCBjYW5ub3QgYmUgYWRkZWQgdG8gYSBWUEMgaW4gYSBzdWJzZXF1ZW50IGNvbnN0cnVjdCcpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcHMuZXhpc3RpbmdMYW1iZGFPYmo7XG4gIH1cbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVwbG95TGFtYmRhRnVuY3Rpb24oc2NvcGU6IENvbnN0cnVjdCxcbiAgbGFtYmRhRnVuY3Rpb25Qcm9wczogbGFtYmRhLkZ1bmN0aW9uUHJvcHMsXG4gIGNvbnN0cnVjdElkPzogc3RyaW5nLFxuICB2cGM/OiBlYzIuSVZwYyk6IGxhbWJkYS5GdW5jdGlvbiB7XG5cbiAgY29uc3QgZnVuY3Rpb25JZCA9IGNvbnN0cnVjdElkID8/ICdMYW1iZGFGdW5jdGlvbic7XG4gIGNvbnN0IGZ1bmN0aW9uUm9sZUlkID0gZnVuY3Rpb25JZCArICdTZXJ2aWNlUm9sZSc7XG5cbiAgaWYgKHZwYyAmJiBsYW1iZGFGdW5jdGlvblByb3BzLnZwYykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiQ2Fubm90IHByb3ZpZGUgYSBWUEMgaW4gYm90aCB0aGUgbGFtYmRhRnVuY3Rpb25Qcm9wcyBhbmQgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50XCJcbiAgICApO1xuICB9XG5cbiAgLy8gU2V0dXAgdGhlIElBTSBSb2xlIGZvciBMYW1iZGEgU2VydmljZVxuICBjb25zdCBsYW1iZGFTZXJ2aWNlUm9sZSA9IG5ldyBpYW0uUm9sZShzY29wZSwgZnVuY3Rpb25Sb2xlSWQsIHtcbiAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgTGFtYmRhRnVuY3Rpb25TZXJ2aWNlUm9sZVBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgIHN0YXRlbWVudHM6IFtuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nR3JvdXAnLFxuICAgICAgICAgICAgJ2xvZ3M6Q3JlYXRlTG9nU3RyZWFtJyxcbiAgICAgICAgICAgICdsb2dzOlB1dExvZ0V2ZW50cydcbiAgICAgICAgICBdLFxuICAgICAgICAgIHJlc291cmNlczogW2Bhcm46JHtjZGsuQXdzLlBBUlRJVElPTn06bG9nczoke2Nkay5Bd3MuUkVHSU9OfToke2Nkay5Bd3MuQUNDT1VOVF9JRH06bG9nLWdyb3VwOi9hd3MvbGFtYmRhLypgXVxuICAgICAgICB9KV1cbiAgICAgIH0pXG4gICAgfVxuICB9KTtcblxuICAvLyBJZiB0aGlzIExhbWJkYSBmdW5jdGlvbiBpcyBnb2luZyB0byBhY2Nlc3MgcmVzb3VyZXMgaW4gYVxuICAvLyBWUEMsIHRoZW4gaXQgbmVlZHMgcHJpdmlsZWdlcyB0byBhY2Nlc3MgYW4gRU5JIGluIHRoYXQgVlBDXG4gIGlmIChsYW1iZGFGdW5jdGlvblByb3BzLnZwYyB8fCB2cGMpIHtcbiAgICBsYW1iZGFTZXJ2aWNlUm9sZS5hZGRUb1BvbGljeShuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIFwiZWMyOkNyZWF0ZU5ldHdvcmtJbnRlcmZhY2VcIixcbiAgICAgICAgXCJlYzI6RGVzY3JpYmVOZXR3b3JrSW50ZXJmYWNlc1wiLFxuICAgICAgICBcImVjMjpEZWxldGVOZXR3b3JrSW50ZXJmYWNlXCIsXG4gICAgICAgIFwiZWMyOkFzc2lnblByaXZhdGVJcEFkZHJlc3Nlc1wiLFxuICAgICAgICBcImVjMjpVbmFzc2lnblByaXZhdGVJcEFkZHJlc3Nlc1wiXG4gICAgICBdLFxuICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdXG4gICAgfSkpO1xuICB9XG5cbiAgLy8gT3ZlcnJpZGUgdGhlIERlZmF1bHRGdW5jdGlvblByb3BzIHdpdGggdXNlciBwcm92aWRlZCAgbGFtYmRhRnVuY3Rpb25Qcm9wc1xuICBsZXQgZmluYWxMYW1iZGFGdW5jdGlvblByb3BzOiBsYW1iZGEuRnVuY3Rpb25Qcm9wcyA9IG92ZXJyaWRlUHJvcHMoRGVmYXVsdExhbWJkYUZ1bmN0aW9uUHJvcHMobGFtYmRhU2VydmljZVJvbGUpLCBsYW1iZGFGdW5jdGlvblByb3BzKTtcblxuICBpZiAodnBjKSB7XG5cbiAgICAvLyBUaGlzIGlzIGxpdGVyYWxseSBzZXR0aW5nIHVwIHdoYXQgd291bGQgYmUgdGhlIGRlZmF1bHQgU0csIGJ1dFxuICAgIC8vIHdlIG5lZWQgdG8gdG8gaXQgZXhwbGljaXRseSB0byBkaXNhYmxlIHRoZSBjZm5fbmFnIGVycm9yXG4gICAgY29uc3QgbGFtYmRhU2VjdXJpdHlHcm91cCA9IGJ1aWxkU2VjdXJpdHlHcm91cChcbiAgICAgIHNjb3BlLFxuICAgICAgXCJSZXBsYWNlRGVmYXVsdFNlY3VyaXR5R3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgdnBjLFxuICAgICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIFtdLFxuICAgICAgW11cbiAgICApO1xuXG4gICAgZmluYWxMYW1iZGFGdW5jdGlvblByb3BzID0gb3ZlcnJpZGVQcm9wcyhmaW5hbExhbWJkYUZ1bmN0aW9uUHJvcHMsIHtcbiAgICAgIHNlY3VyaXR5R3JvdXBzOiBbbGFtYmRhU2VjdXJpdHlHcm91cF0sXG4gICAgICB2cGMsXG4gICAgfSwgdHJ1ZSk7XG4gIH1cblxuICBjb25zdCBsYW1iZGFmdW5jdGlvbiA9IG5ldyBsYW1iZGEuRnVuY3Rpb24oc2NvcGUsIGZ1bmN0aW9uSWQsIGZpbmFsTGFtYmRhRnVuY3Rpb25Qcm9wcyk7XG5cbiAgaWYgKGxhbWJkYUZ1bmN0aW9uUHJvcHMucnVudGltZSA9PT0gbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzE2X1gpIHtcbiAgICBsYW1iZGFmdW5jdGlvbi5hZGRFbnZpcm9ubWVudCgnQVdTX05PREVKU19DT05ORUNUSU9OX1JFVVNFX0VOQUJMRUQnLCAnMScsIHsgcmVtb3ZlSW5FZGdlOiB0cnVlIH0pO1xuICB9XG5cbiAgY29uc3QgY2ZuTGFtYmRhZnVuY3Rpb246IGxhbWJkYS5DZm5GdW5jdGlvbiA9IGxhbWJkYWZ1bmN0aW9uLm5vZGUuZmluZENoaWxkKCdSZXNvdXJjZScpIGFzIGxhbWJkYS5DZm5GdW5jdGlvbjtcblxuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGxhbWJkYWZ1bmN0aW9uLCBbXG4gICAge1xuICAgICAgaWQ6ICdXNTgnLFxuICAgICAgcmVhc29uOiBgTGFtYmRhIGZ1bmN0aW9ucyBoYXMgdGhlIHJlcXVpcmVkIHBlcm1pc3Npb24gdG8gd3JpdGUgQ2xvdWRXYXRjaCBMb2dzLiBJdCB1c2VzIGN1c3RvbSBwb2xpY3kgaW5zdGVhZCBvZiBhcm46YXdzOmlhbTo6YXdzOnBvbGljeS9zZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIHdpdGggdGlnaHRlciBwZXJtaXNzaW9ucy5gXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJ1c4OScsXG4gICAgICByZWFzb246IGBUaGlzIGlzIG5vdCBhIHJ1bGUgZm9yIHRoZSBnZW5lcmFsIGNhc2UsIGp1c3QgZm9yIHNwZWNpZmljIHVzZSBjYXNlcy9pbmR1c3RyaWVzYFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICdXOTInLFxuICAgICAgcmVhc29uOiBgSW1wb3NzaWJsZSBmb3IgdXMgdG8gZGVmaW5lIHRoZSBjb3JyZWN0IGNvbmN1cnJlbmN5IGZvciBjbGllbnRzYFxuICAgIH1cbiAgXSk7XG5cbiAgaWYgKGNmbkxhbWJkYWZ1bmN0aW9uLnRyYWNpbmdDb25maWcpIHtcbiAgICAvLyBGaW5kIHRoZSBYLVJheSBJQU0gUG9saWN5XG4gICAgY29uc3QgY2ZuTGFtYmRhZnVuY3Rpb25EZWZQb2xpY3kgPSBsYW1iZGFmdW5jdGlvbi5yb2xlPy5ub2RlLnRyeUZpbmRDaGlsZCgnRGVmYXVsdFBvbGljeScpPy5ub2RlLmZpbmRDaGlsZCgnUmVzb3VyY2UnKSBhcyBpYW0uQ2ZuUG9saWN5O1xuXG4gICAgLy8gQWRkIHRoZSBDRk4gTkFHIHN1cHByZXNzIHRvIGFsbG93IGZvciBcIlJlc291cmNlXCI6IFwiKlwiIGZvciBBV1MgWC1SYXlcbiAgICBhZGRDZm5TdXBwcmVzc1J1bGVzKGNmbkxhbWJkYWZ1bmN0aW9uRGVmUG9saWN5LCBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnVzEyJyxcbiAgICAgICAgcmVhc29uOiBgTGFtYmRhIG5lZWRzIHRoZSBmb2xsb3dpbmcgbWluaW11bSByZXF1aXJlZCBwZXJtaXNzaW9ucyB0byBzZW5kIHRyYWNlIGRhdGEgdG8gWC1SYXkgYW5kIGFjY2VzcyBFTklzIGluIGEgVlBDLmBcbiAgICAgIH1cbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBsYW1iZGFmdW5jdGlvbjtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICpcbiAqIEEgd3JhcHBlciBhYm92ZSBGdW5jdGlvbi5hZGRQZXJtaXNpb24gdGhhdFxuICogcHJldmVudHMgdHdvIGRpZmZlcmVudCBjYWxscyB0byBhZGRQZXJtaXNzaW9uIHVzaW5nXG4gKiB0aGUgc2FtZSBjb25zdHJ1Y3QgaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRQZXJtaXNzaW9uKHRhcmdldEZ1bmN0aW9uOiBsYW1iZGEuRnVuY3Rpb24sIG5hbWU6IHN0cmluZywgcGVybWlzc2lvbjogbGFtYmRhLlBlcm1pc3Npb24pOiBhbnkge1xuICB0YXJnZXRGdW5jdGlvbi5hZGRQZXJtaXNzaW9uKEdldE5leHRJZCh0YXJnZXRGdW5jdGlvbi5wZXJtaXNzaW9uc05vZGUuY2hpbGRyZW4sIG5hbWUpLCBwZXJtaXNzaW9uKTtcbn1cblxuLy8gU2NhbiB0aGUgY3VycmVudCBwZXJtaXNzaW9ucyBmb3IgYW55IGVudHJpZXMgd2l0aCB0aGlzIGNvcmUgbmFtZSBhbmRcbi8vIHJldHVybiB0aGUgZmlyc3QgYXZhaWxhYmxlIHN5bnRoZXNpemVkIG5hbWUuIE5hbWVzIGFyZSBjb3JlTmFtZS1zdWZmaXguXG5mdW5jdGlvbiBHZXROZXh0SWQoY2hpbGRyZW46IElDb25zdHJ1Y3RbXSwgY29yZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGxldCBsYXN0U3VmZml4OiBudW1iZXIgPSAwO1xuXG4gIGNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuXG4gICAgLy8gaWYgKGNvbXBhcmUgcmlnaHQgc2lkZSBvZiBzdHJpbmcpXG4gICAgaWYgKGNoaWxkLm5vZGUuaWQuaW5kZXhPZihjb3JlTmFtZSkgPT09IDApIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBjaGlsZC5ub2RlLmlkLnNwbGl0KCctJyk7XG4gICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0bHkgZm9ybWF0dGVkIHN5bnRoZXNpemVkIGNvbnN0cnVjdCBJRFwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdXNlZFN1ZmZpeCA9IE51bWJlcihjb21wb25lbnRzWzFdKTtcbiAgICAgIGlmICh1c2VkU3VmZml4ID4gbGFzdFN1ZmZpeCkge1xuICAgICAgICBsYXN0U3VmZml4ID0gdXNlZFN1ZmZpeDtcbiAgICAgIH1cbiAgICB9XG5cbiAgfSk7XG5cbiAgcmV0dXJuIGAke2NvcmVOYW1lfS0ke2xhc3RTdWZmaXggKyAxfWA7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldExhbWJkYVZwY1NlY3VyaXR5R3JvdXBJZHMobGFtYmRhRnVuY3Rpb246IGxhbWJkYS5GdW5jdGlvbik6IHN0cmluZ1tdIHtcbiAgY29uc3Qgc2VjdXJpdHlHcm91cElkczogc3RyaW5nW10gPSBbXTtcblxuICBsYW1iZGFGdW5jdGlvbi5jb25uZWN0aW9ucy5zZWN1cml0eUdyb3Vwcy5mb3JFYWNoKGVsZW1lbnQgPT4gc2VjdXJpdHlHcm91cElkcy5wdXNoKGVsZW1lbnQuc2VjdXJpdHlHcm91cElkKSk7XG5cbiAgcmV0dXJuIHNlY3VyaXR5R3JvdXBJZHM7XG59Il19
@@ -48,7 +48,8 @@ export declare enum ServiceEndpointTypes {
48
48
  ECR_DKR = "ECR_DKR",
49
49
  EVENTS = "CLOUDWATCH_EVENTS",
50
50
  KINESIS_FIREHOSE = "KINESIS_FIREHOSE",
51
- KINESIS_STREAMS = "KINESIS_STREAMS"
51
+ KINESIS_STREAMS = "KINESIS_STREAMS",
52
+ KENDRA = "KENDRA"
52
53
  }
53
54
  /**
54
55
  * @internal This is an internal core function and should not be called directly by Solutions Constructs clients.
package/lib/vpc-helper.js CHANGED
@@ -52,6 +52,7 @@ var ServiceEndpointTypes;
52
52
  ServiceEndpointTypes["EVENTS"] = "CLOUDWATCH_EVENTS";
53
53
  ServiceEndpointTypes["KINESIS_FIREHOSE"] = "KINESIS_FIREHOSE";
54
54
  ServiceEndpointTypes["KINESIS_STREAMS"] = "KINESIS_STREAMS";
55
+ ServiceEndpointTypes["KENDRA"] = "KENDRA";
55
56
  })(ServiceEndpointTypes = exports.ServiceEndpointTypes || (exports.ServiceEndpointTypes = {}));
56
57
  var EndpointTypes;
57
58
  (function (EndpointTypes) {
@@ -123,6 +124,11 @@ const endpointSettings = [
123
124
  endpointName: ServiceEndpointTypes.KINESIS_STREAMS,
124
125
  endpointType: EndpointTypes.INTERFACE,
125
126
  endpointInterfaceService: ec2.InterfaceVpcEndpointAwsService.KINESIS_STREAMS
127
+ },
128
+ {
129
+ endpointName: ServiceEndpointTypes.KENDRA,
130
+ endpointType: EndpointTypes.INTERFACE,
131
+ endpointInterfaceService: ec2.InterfaceVpcEndpointAwsService.KENDRA
126
132
  }
127
133
  ];
128
134
  /**
@@ -207,4 +213,4 @@ function retrievePrivateSubnetIds(vpc) {
207
213
  return vpc.selectSubnets(subnetSelector).subnetIds;
208
214
  }
209
215
  exports.retrievePrivateSubnetIds = retrievePrivateSubnetIds;
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZwYy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCwyQ0FBMkM7QUFHM0MsbUVBQTZEO0FBQzdELG1DQUFnRTtBQXNCaEU7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsS0FBZ0IsRUFBRSxLQUFvQjtJQUM3RCxJQUFJLEtBQUssRUFBRSxXQUFXLEVBQUU7UUFDdEIsT0FBTyxLQUFLLEVBQUUsV0FBVyxDQUFDO0tBQzNCO0lBRUQsSUFBSSxlQUFlLEdBQWlCLEtBQUssRUFBRSxlQUFlLENBQUM7SUFFM0QsZUFBZSxHQUFHLHdCQUFnQixDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRW5HLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXZELGdHQUFnRztJQUNoRyxNQUFNLE9BQU8sR0FBZ0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV0QyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFsQkQsNEJBa0JDO0FBRUQsSUFBWSxvQkFjWDtBQWRELFdBQVksb0JBQW9CO0lBQzlCLHdDQUFnQixDQUFBO0lBQ2hCLG1DQUFXLENBQUE7SUFDWCxtQ0FBVyxDQUFBO0lBQ1gsaUNBQVMsQ0FBQTtJQUNULHlEQUFpQyxDQUFBO0lBQ2pDLCtEQUF1QyxDQUFBO0lBQ3ZDLDJEQUFtQyxDQUFBO0lBQ25DLG1DQUFXLENBQUE7SUFDWCwyQ0FBbUIsQ0FBQTtJQUNuQiwyQ0FBbUIsQ0FBQTtJQUNuQixvREFBNEIs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QWtCLENBQUMsWUFBWSxFQUFFO1FBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsc0JBQTBEO0tBQzVFLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLHdCQUF3QixDQUFDLEdBQWE7SUFDcEQsSUFBSSxnQkFBZ0IsQ0FBQztJQUVyQixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFO1FBQzlCLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7S0FDcEQ7U0FBTSxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFO1FBQ3BDLGdCQUFnQixHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUM7S0FDdkQ7U0FBTTtRQUNMLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztLQUM1RTtJQUVELE1BQU0sY0FBYyxHQUFHO1FBQ3JCLFFBQVEsRUFBRSxJQUFJO1FBQ2QsVUFBVSxFQUFFLGdCQUFnQjtLQUM3QixDQUFDO0lBRUYsT0FBTyxHQUFHLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNyRCxDQUFDO0FBakJELDREQWlCQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbi8qXG4gKiAgVGhlIGZ1bmN0aW9ucyBmb3VuZCBoZXJlIGluIHRoZSBjb3JlIGxpYnJhcnkgYXJlIGZvciBpbnRlcm5hbCB1c2UgYW5kIGNhbiBiZSBjaGFuZ2VkXG4gKiAgb3IgcmVtb3ZlZCBvdXRzaWRlIG9mIGEgbWFqb3IgcmVsZWFzZS4gV2UgcmVjb21tZW5kIGFnYWluc3QgY2FsbGluZyB0aGVtIGRpcmVjdGx5IGZyb20gY2xpZW50IGNvZGUuXG4gKi9cblxuaW1wb3J0ICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBDZm5Mb2dHcm91cCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbG9nc1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGJ1aWxkU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwLWhlbHBlclwiO1xuaW1wb3J0IHsgY29uc29saWRhdGVQcm9wcywgYWRkQ2ZuU3VwcHJlc3NSdWxlcyB9IGZyb20gXCIuL3V0aWxzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRWcGNQcm9wcyB7XG4gIC8qKlxuICAgKiBFeGlzdGluZyBpbnN0YW5jZSBvZiBhIFZQQywgaWYgdGhpcyBpcyBzZXQgdGhlbiB0aGUgYWxsIFByb3BzIGFyZSBpZ25vcmVkXG4gICAqL1xuICByZWFkb25seSBleGlzdGluZ1ZwYz86IGVjMi5JVnBjO1xuICAvKipcbiAgICogT25lIG9mIHRoZSBkZWZhdWx0IFZQQyBjb25maWd1cmF0aW9ucyBhdmFpbGFibGUgaW4gdnBjLWRlZmF1bHRzXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0VnBjUHJvcHM6IGVjMi5WcGNQcm9wcztcbiAgLyoqXG4gICAqIFVzZXIgcHJvdmlkZWQgcHJvcHMgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcHJvcHMgZm9yIHRoZSBWUEMuXG4gICAqL1xuICByZWFkb25seSB1c2VyVnBjUHJvcHM/OiBlYzIuVnBjUHJvcHM7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3Qgc3BlY2lmaWVkIHByb3BzIHRoYXQgb3ZlcnJpZGUgYm90aCB0aGUgZGVmYXVsdCBwcm9wc1xuICAgKiBhbmQgdXNlciBwcm9wcyBmb3IgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdFZwY1Byb3BzPzogZWMyLlZwY1Byb3BzO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFZwYyhzY29wZTogQ29uc3RydWN0LCBwcm9wczogQnVpbGRWcGNQcm9wcyk6IGVjMi5JVnBjIHtcbiAgaWYgKHByb3BzPy5leGlzdGluZ1ZwYykge1xuICAgIHJldHVybiBwcm9wcz8uZXhpc3RpbmdWcGM7XG4gIH1cblxuICBsZXQgY3VtdWxhdGl2ZVByb3BzOiBlYzIuVnBjUHJvcHMgPSBwcm9wcz8uZGVmYXVsdFZwY1Byb3BzO1xuXG4gIGN1bXVsYXRpdmVQcm9wcyA9IGNvbnNvbGlkYXRlUHJvcHMoY3VtdWxhdGl2ZVByb3BzLCBwcm9wcz8udXNlclZwY1Byb3BzLCBwcm9wcz8uY29uc3RydWN0VnBjUHJvcHMpO1xuXG4gIGNvbnN0IHZwYyA9IG5ldyBlYzIuVnBjKHNjb3BlLCBcIlZwY1wiLCBjdW11bGF0aXZlUHJvcHMpO1xuXG4gIC8vIEFkZCBWUEMgRmxvd0xvZ3Mgd2l0aCB0aGUgZGVmYXVsdCBzZXR0aW5nIG9mIHRyYWZmaWNUeXBlOkFMTCBhbmQgZGVzdGluYXRpb246IENsb3VkV2F0Y2ggTG9nc1xuICBjb25zdCBmbG93TG9nOiBlYzIuRmxvd0xvZyA9IHZwYy5hZGRGbG93TG9nKFwiRmxvd0xvZ1wiKTtcblxuICBTdXBwcmVzc01hcFB1YmxpY0lwV2FybmluZ3ModnBjKTtcbiAgU3VwcHJlc3NFbmNyeXB0ZWRMb2dXYXJuaW5ncyhmbG93TG9nKTtcblxuICByZXR1cm4gdnBjO1xufVxuXG5leHBvcnQgZW51bSBTZXJ2aWNlRW5kcG9pbnRUeXBlcyB7XG4gIERZTkFNT0RCID0gXCJEREJcIixcbiAgU05TID0gXCJTTlNcIixcbiAgU1FTID0gXCJTUVNcIixcbiAgUzMgPSBcIlMzXCIsXG4gIFNURVBfRlVOQ1RJT05TID0gXCJTVEVQX0ZVTkNUSU9OU1wiLFxuICBTQUdFTUFLRVJfUlVOVElNRSA9IFwiU0FHRU1BS0VSX1JVTlRJTUVcIixcbiAgU0VDUkVUU19NQU5BR0VSID0gXCJTRUNSRVRTX01BTkFHRVJcIixcbiAgU1NNID0gXCJTU01cIixcbiAgRUNSX0FQSSA9IFwiRUNSX0FQSVwiLFxuICBFQ1JfREtSID0gXCJFQ1JfREtSXCIsXG4gIEVWRU5UUyA9IFwiQ0xPVURXQVRDSF9FVkVOVFNcIixcbiAgS0lORVNJU19GSVJFSE9TRSA9IFwiS0lORVNJU19GSVJFSE9TRVwiLFxuICBLSU5FU0lTX1NUUkVBTVMgPSBcIktJTkVTSVNfU1RSRUFNU1wiXG59XG5cbmVudW0gRW5kcG9pbnRUeXBlcyB7XG4gIEdBVEVXQVkgPSBcIkdhdGV3YXlcIixcbiAgSU5URVJGQUNFID0gXCJJbnRlcmZhY2VcIixcbn1cblxuaW50ZXJmYWNlIEVuZHBvaW50RGVmaW5pdGlvbiB7XG4gIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXM7XG4gIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcztcbiAgZW5kcG9pbnRHYXRld2F5U2VydmljZT86IGVjMi5HYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlO1xuICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U/OiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlO1xufVxuXG5jb25zdCBlbmRwb2ludFNldHRpbmdzOiBFbmRwb2ludERlZmluaXRpb25bXSA9IFtcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuRFlOQU1PREIsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLkdBVEVXQVksXG4gICAgZW5kcG9pbnRHYXRld2F5U2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuRFlOQU1PREIsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlMzLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5HQVRFV0FZLFxuICAgIGVuZHBvaW50R2F0ZXdheVNlcnZpY2U6IGVjMi5HYXRld2F5VnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlMzLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TVEVQX0ZVTkNUSU9OUyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TVEVQX0ZVTkNUSU9OUyxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU05TLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNOUyxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU1FTLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNRUyxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU0FHRU1BS0VSX1JVTlRJTUUsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU0FHRU1BS0VSX1JVTlRJTUUsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNFQ1JFVFNfTUFOQUdFUixcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TRUNSRVRTX01BTkFHRVIsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNTTSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TU00sXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLkVDUl9BUEksXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLkVDUl9ES1IsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRUNSX0RPQ0tFUlxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5FVkVOVFMsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuQ0xPVURXQVRDSF9FVkVOVFNcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuS0lORVNJU19GSVJFSE9TRSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5LSU5FU0lTX0ZJUkVIT1NFXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLktJTkVTSVNfU1RSRUFNUyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5LSU5FU0lTX1NUUkVBTVNcbiAgfVxuXTtcblxuLyoqXG4gKiBAaW50ZXJuYWwgVGhpcyBpcyBhbiBpbnRlcm5hbCBjb3JlIGZ1bmN0aW9uIGFuZCBzaG91bGQgbm90IGJlIGNhbGxlZCBkaXJlY3RseSBieSBTb2x1dGlvbnMgQ29uc3RydWN0cyBjbGllbnRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gQWRkQXdzU2VydmljZUVuZHBvaW50KFxuICBzY29wZTogQ29uc3RydWN0LFxuICB2cGM6IGVjMi5JVnBjLFxuICBpbnRlcmZhY2VUYWc6IFNlcnZpY2VFbmRwb2ludFR5cGVzXG4pIHtcbiAgaWYgKENoZWNrSWZFbmRwb2ludEFscmVhZHlFeGlzdHModnBjLCBpbnRlcmZhY2VUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc2VydmljZSA9IGVuZHBvaW50U2V0dGluZ3MuZmluZChcbiAgICAoZW5kcG9pbnQpID0+IGVuZHBvaW50LmVuZHBvaW50TmFtZSA9PT0gaW50ZXJmYWNlVGFnXG4gICk7XG5cbiAgaWYgKCFzZXJ2aWNlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgU2VydmljZSBzZW50IHRvIEFkZFNlcnZpY2VFbmRwb2ludFwiKTtcbiAgfVxuXG4gIGlmIChzZXJ2aWNlLmVuZHBvaW50VHlwZSA9PT0gRW5kcG9pbnRUeXBlcy5HQVRFV0FZKSB7XG4gICAgQWRkR2F0ZXdheUVuZHBvaW50KHZwYywgc2VydmljZSwgaW50ZXJmYWNlVGFnKTtcbiAgfVxuICBpZiAoc2VydmljZS5lbmRwb2ludFR5cGUgPT09IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFKSB7XG4gICAgQWRkSW50ZXJmYWNlRW5kcG9pbnQoc2NvcGUsIHZwYywgc2VydmljZSwgaW50ZXJmYWNlVGFnKTtcbiAgfVxuXG4gIC8vIEVTTGludCByZXF1aXJlcyB0aGlzIHJldHVybiBzdGF0ZW1lbnQsIHNvIGRpc2FibGluZyBTb25hclF1YmUgd2FybmluZ1xuICByZXR1cm47IC8vIE5PU09OQVJcbn1cblxuZnVuY3Rpb24gQ2hlY2tJZkVuZHBvaW50QWxyZWFkeUV4aXN0cyh2cGM6IGVjMi5JVnBjLCBpbnRlcmZhY2VUYWc6IFNlcnZpY2VFbmRwb2ludFR5cGVzKTogYm9vbGVhbiB7XG4gIHJldHVybiB2cGMubm9kZS5jaGlsZHJlbi5zb21lKChjaGlsZCkgPT4gY2hpbGQubm9kZS5pZCA9PT0gaW50ZXJmYWNlVGFnKTtcbn1cblxuZnVuY3Rpb24gU3VwcHJlc3NNYXBQdWJsaWNJcFdhcm5pbmdzKHZwYzogZWMyLlZwYykge1xuICAvLyBBZGQgQ2ZuIE5hZyBzdXBwcmVzc2lvbiBmb3IgUFVCTElDIHN1Ym5ldHMgdG8gc3VwcHJlc3MgV0FSTiBXMzM6IEVDMiBTdWJuZXQgc2hvdWxkIG5vdCBoYXZlIE1hcFB1YmxpY0lwT25MYXVuY2ggc2V0IHRvIHRydWVcbiAgdnBjLnB1YmxpY1N1Ym5ldHMuZm9yRWFjaCgoc3VibmV0KSA9PiB7XG4gICAgY29uc3QgY2ZuU3VibmV0ID0gc3VibmV0Lm5vZGUuZGVmYXVsdENoaWxkIGFzIGVjMi5DZm5TdWJuZXQ7XG4gICAgYWRkQ2ZuU3VwcHJlc3NSdWxlcyhjZm5TdWJuZXQsIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdXMzMnLFxuICAgICAgICByZWFzb246ICdBbGxvdyBQdWJsaWMgU3VibmV0cyB0byBoYXZlIE1hcFB1YmxpY0lwT25MYXVuY2ggc2V0IHRvIHRydWUnXG4gICAgICB9XG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBTdXBwcmVzc0VuY3J5cHRlZExvZ1dhcm5pbmdzKGZsb3dMb2c6IGVjMi5GbG93TG9nKSB7XG4gIC8vIEFkZCBDZm4gTmFnIHN1cHByZXNzaW9uIGZvciBDbG91ZFdhdGNoTG9ncyBMb2dHcm91cHMgZGF0YSBpcyBlbmNyeXB0ZWRcbiAgY29uc3QgY2ZuTG9nR3JvdXA6IENmbkxvZ0dyb3VwID0gZmxvd0xvZy5sb2dHcm91cD8ubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuTG9nR3JvdXA7XG4gIGFkZENmblN1cHByZXNzUnVsZXMoY2ZuTG9nR3JvdXAsIFtcbiAgICB7XG4gICAgICBpZDogJ1c4NCcsXG4gICAgICByZWFzb246ICdCeSBkZWZhdWx0IENsb3VkV2F0Y2hMb2dzIExvZ0dyb3VwcyBkYXRhIGlzIGVuY3J5cHRlZCB1c2luZyB0aGUgQ2xvdWRXYXRjaCBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGtleXMgKEFXUyBNYW5hZ2VkIEtleXMpJ1xuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIEFkZEludGVyZmFjZUVuZHBvaW50KHNjb3BlOiBDb25zdHJ1Y3QsIHZwYzogZWMyLklWcGMsIHNlcnZpY2U6IEVuZHBvaW50RGVmaW5pdGlvbiwgaW50ZXJmYWNlVGFnOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcykge1xuICBjb25zdCBlbmRwb2ludERlZmF1bHRTZWN1cml0eUdyb3VwID0gYnVpbGRTZWN1cml0eUdyb3VwKFxuICAgIHNjb3BlLFxuICAgIGAke3Njb3BlLm5vZGUuaWR9LSR7c2VydmljZS5lbmRwb2ludE5hbWV9YCxcbiAgICB7XG4gICAgICB2cGMsXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0sXG4gICAgW3sgcGVlcjogZWMyLlBlZXIuaXB2NCh2cGMudnBjQ2lkckJsb2NrKSwgY29ubmVjdGlvbjogZWMyLlBvcnQudGNwKDQ0MykgfV0sXG4gICAgW11cbiAgKTtcblxuICB2cGMuYWRkSW50ZXJmYWNlRW5kcG9pbnQoaW50ZXJmYWNlVGFnLCB7XG4gICAgc2VydmljZTogc2VydmljZS5lbmRwb2ludEludGVyZmFjZVNlcnZpY2UgYXMgZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZSxcbiAgICBzZWN1cml0eUdyb3VwczogW2VuZHBvaW50RGVmYXVsdFNlY3VyaXR5R3JvdXBdLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gQWRkR2F0ZXdheUVuZHBvaW50KHZwYzogZWMyLklWcGMsIHNlcnZpY2U6IEVuZHBvaW50RGVmaW5pdGlvbiwgaW50ZXJmYWNlVGFnOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcykge1xuICB2cGMuYWRkR2F0ZXdheUVuZHBvaW50KGludGVyZmFjZVRhZywge1xuICAgIHNlcnZpY2U6IHNlcnZpY2UuZW5kcG9pbnRHYXRld2F5U2VydmljZSBhcyBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZSxcbiAgfSk7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJldHJpZXZlUHJpdmF0ZVN1Ym5ldElkcyh2cGM6IGVjMi5JVnBjKSB7XG4gIGxldCB0YXJnZXRTdWJuZXRUeXBlO1xuXG4gIGlmICh2cGMuaXNvbGF0ZWRTdWJuZXRzLmxlbmd0aCkge1xuICAgIHRhcmdldFN1Ym5ldFR5cGUgPSBlYzIuU3VibmV0VHlwZS5QUklWQVRFX0lTT0xBVEVEO1xuICB9IGVsc2UgaWYgKHZwYy5wcml2YXRlU3VibmV0cy5sZW5ndGgpIHtcbiAgICB0YXJnZXRTdWJuZXRUeXBlID0gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUztcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Vycm9yIC0gTm8gaXNvbGF0ZWQgb3IgcHJpdmF0ZSBzdWJuZXRzIGF2YWlsYWJsZSBpbiBWUEMnKTtcbiAgfVxuXG4gIGNvbnN0IHN1Ym5ldFNlbGVjdG9yID0ge1xuICAgIG9uZVBlckF6OiB0cnVlLFxuICAgIHN1Ym5ldFR5cGU6IHRhcmdldFN1Ym5ldFR5cGVcbiAgfTtcblxuICByZXR1cm4gdnBjLnNlbGVjdFN1Ym5ldHMoc3VibmV0U2VsZWN0b3IpLnN1Ym5ldElkcztcbn0iXX0=
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidnBjLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInZwYy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7OztHQVdHOzs7QUFFSDs7O0dBR0c7QUFFSCwyQ0FBMkM7QUFHM0MsbUVBQTZEO0FBQzdELG1DQUFnRTtBQXNCaEU7O0dBRUc7QUFDSCxTQUFnQixRQUFRLENBQUMsS0FBZ0IsRUFBRSxLQUFvQjtJQUM3RCxJQUFJLEtBQUssRUFBRSxXQUFXLEVBQUU7UUFDdEIsT0FBTyxLQUFLLEVBQUUsV0FBVyxDQUFDO0tBQzNCO0lBRUQsSUFBSSxlQUFlLEdBQWlCLEtBQUssRUFBRSxlQUFlLENBQUM7SUFFM0QsZUFBZSxHQUFHLHdCQUFnQixDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRW5HLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBRXZELGdHQUFnRztJQUNoRyxNQUFNLE9BQU8sR0FBZ0IsR0FBRyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUV2RCwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyw0QkFBNEIsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUV0QyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFsQkQsNEJBa0JDO0FBRUQsSUFBWSxvQkFlWDtBQWZELFdBQVksb0JBQW9CO0lBQzlCLHdDQUFnQixDQUFBO0lBQ2hCLG1DQUFXLENBQUE7SUFDWCxtQ0FBVyxDQUFBO0lBQ1gsaUNBQVMsQ0FBQTtJQUNULHlEQUFpQyxDQUFBO0lBQ2pDLCtEQUF1QyxDQUFBO0lBQ3ZDLDJEQUFtQyxDQUFBO0lBQ25DLG1DQUFXLENBQUE7SUFDWCwyQ0FBbUIsQ0FBQTtJQUNuQiwyQ0FBbUIsQ0FBQTtJQUNuQixvREFBNEIsQ0FBQTtJQUM1Qiw2REFBcUMsQ0FBQTtJQUNyQywyREFBbUMsQ0FBQTtJQUNuQyx5Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBZlcsb0JBQW9CLEdBQXBCLDRCQUFvQixLQUFwQiw0QkFBb0IsUUFlL0I7QUFFRCxJQUFLLGFBR0o7QUFIRCxXQUFLLGFBQWE7SUFDaEIsb0NBQW1CLENBQUE7SUFDbkIsd0NBQXVCLENBQUE7QUFDekIsQ0FBQyxFQUhJLGFBQWEsS0FBYixhQUFhLFFBR2pCO0FBU0QsTUFBTSxnQkFBZ0IsR0FBeUI7SUFDN0M7UUFDRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsUUFBUTtRQUMzQyxZQUFZLEVBQUUsYUFBYSxDQUFDLE9BQU87UUFDbkMsc0JBQXNCLEVBQUUsR0FBRyxDQUFDLDRCQUE0QixDQUFDLFFBQVE7S0FDbEU7SUFDRDtRQUNFLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxFQUFFO1FBQ3JDLFlBQVksRUFBRSxhQUFhLENBQUMsT0FBTztRQUNuQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsNEJBQTRCLENBQUMsRUFBRTtLQUM1RDtJQUNEO1FBQ0UsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGNBQWM7UUFDakQsWUFBWSxFQUFFLGFBQWEsQ0FBQyxTQUFTO1FBQ3JDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxjQUFjO0tBQzVFO0lBQ0Q7UUFDRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsR0FBRztRQUN0QyxZQUFZLEVBQUUsYUFBYSxDQUFDLFNBQVM7UUFDckMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEdBQUc7S0FDakU7SUFDRDtRQUNFLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxHQUFHO1FBQ3RDLFlBQVksRUFBRSxhQUFhLENBQUMsU0FBUztRQUNyQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsOEJBQThCLENBQUMsR0FBRztLQUNqRTtJQUNEO1FBQ0UsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGlCQUFpQjtRQUNwRCxZQUFZLEVBQUUsYUFBYSxDQUFDLFNBQVM7UUFDckMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLDhCQUE4QixDQUFDLGlCQUFpQjtLQUMvRTtJQUNEO1FBQ0UsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGVBQWU7UUFDbEQsWUFBWSxFQUFFLGFBQWEsQ0FBQyxTQUFTO1FBQ3JDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxlQUFlO0tBQzdFO0lBQ0Q7UUFDRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsR0FBRztRQUN0QyxZQUFZLEVBQUUsYUFBYSxDQUFDLFNBQVM7UUFDckMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLDhCQUE4QixDQUFDLEdBQUc7S0FDakU7SUFDRDtRQUNFLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxPQUFPO1FBQzFDLFlBQVksRUFBRSxhQUFhLENBQUMsU0FBUztRQUNyQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsOEJBQThCLENBQUMsR0FBRztLQUNqRTtJQUNEO1FBQ0UsWUFBWSxFQUFFLG9CQUFvQixDQUFDLE9BQU87UUFDMUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxTQUFTO1FBQ3JDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxVQUFVO0tBQ3hFO0lBQ0Q7UUFDRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsTUFBTTtRQUN6QyxZQUFZLEVBQUUsYUFBYSxDQUFDLFNBQVM7UUFDckMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLDhCQUE4QixDQUFDLGlCQUFpQjtLQUMvRTtJQUNEO1FBQ0UsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGdCQUFnQjtRQUNuRCxZQUFZLEVBQUUsYUFBYSxDQUFDLFNBQVM7UUFDckMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLDhCQUE4QixDQUFDLGdCQUFnQjtLQUM5RTtJQUNEO1FBQ0UsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGVBQWU7UUFDbEQsWUFBWSxFQUFFLGFBQWEsQ0FBQyxTQUFTO1FBQ3JDLHdCQUF3QixFQUFFLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxlQUFlO0tBQzdFO0lBQ0Q7UUFDRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsTUFBTTtRQUN6QyxZQUFZLEVBQUUsYUFBYSxDQUFDLFNBQVM7UUFDckMsd0JBQXdCLEVBQUUsR0FBRyxDQUFDLDhCQUE4QixDQUFDLE1BQU07S0FDcEU7Q0FDRixDQUFDO0FBRUY7O0dBRUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsS0FBZ0IsRUFDaEIsR0FBYSxFQUNiLFlBQWtDO0lBRWxDLElBQUksNEJBQTRCLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxFQUFFO1FBQ25ELE9BQU87S0FDUjtJQUVELE1BQU0sT0FBTyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FDbkMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEtBQUssWUFBWSxDQUNyRCxDQUFDO0lBRUYsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztLQUNuRTtJQUVELElBQUksT0FBTyxDQUFDLFlBQVksS0FBSyxhQUFhLENBQUMsT0FBTyxFQUFFO1FBQ2xELGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7S0FDaEQ7SUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEtBQUssYUFBYSxDQUFDLFNBQVMsRUFBRTtRQUNwRCxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQztLQUN6RDtJQUVELHdFQUF3RTtJQUN4RSxPQUFPLENBQUMsVUFBVTtBQUNwQixDQUFDO0FBMUJELHNEQTBCQztBQUVELFNBQVMsNEJBQTRCLENBQUMsR0FBYSxFQUFFLFlBQWtDO0lBQ3JGLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsQ0FBQztBQUMzRSxDQUFDO0FBRUQsU0FBUywyQkFBMkIsQ0FBQyxHQUFZO0lBQy9DLDhIQUE4SDtJQUM5SCxHQUFHLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBNkIsQ0FBQztRQUM1RCwyQkFBbUIsQ0FBQyxTQUFTLEVBQUU7WUFDN0I7Z0JBQ0UsRUFBRSxFQUFFLEtBQUs7Z0JBQ1QsTUFBTSxFQUFFLDhEQUE4RDthQUN2RTtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsNEJBQTRCLENBQUMsT0FBb0I7SUFDeEQseUVBQXlFO0lBQ3pFLE1BQU0sV0FBVyxHQUFnQixPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUEyQixDQUFDO0lBQ3BGLDJCQUFtQixDQUFDLFdBQVcsRUFBRTtRQUMvQjtZQUNFLEVBQUUsRUFBRSxLQUFLO1lBQ1QsTUFBTSxFQUFFLDJIQUEySDtTQUNwSTtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLG9CQUFvQixDQUFDLEtBQWdCLEVBQUUsR0FBYSxFQUFFLE9BQTJCLEVBQUUsWUFBa0M7SUFDNUgsTUFBTSw0QkFBNEIsR0FBRywwQ0FBa0IsQ0FDckQsS0FBSyxFQUNMLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRSxFQUMxQztRQUNFLEdBQUc7UUFDSCxnQkFBZ0IsRUFBRSxJQUFJO0tBQ3ZCLEVBQ0QsQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFDMUUsRUFBRSxDQUNILENBQUM7SUFFRixHQUFHLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFO1FBQ3JDLE9BQU8sRUFBRSxPQUFPLENBQUMsd0JBQThEO1FBQy9FLGNBQWMsRUFBRSxDQUFDLDRCQUE0QixDQUFDO0tBQy9DLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGtCQUFrQixDQUFDLEdBQWEsRUFBRSxPQUEyQixFQUFFLFlBQWtDO0lBQ3hHLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUU7UUFDbkMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxzQkFBMEQ7S0FDNUUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOztHQUVHO0FBQ0gsU0FBZ0Isd0JBQXdCLENBQUMsR0FBYTtJQUNwRCxJQUFJLGdCQUFnQixDQUFDO0lBRXJCLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUU7UUFDOUIsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztLQUNwRDtTQUFNLElBQUksR0FBRyxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUU7UUFDcEMsZ0JBQWdCLEdBQUcsR0FBRyxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQztLQUN2RDtTQUFNO1FBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0tBQzVFO0lBRUQsTUFBTSxjQUFjLEdBQUc7UUFDckIsUUFBUSxFQUFFLElBQUk7UUFDZCxVQUFVLEVBQUUsZ0JBQWdCO0tBQzdCLENBQUM7SUFFRixPQUFPLEdBQUcsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQ3JELENBQUM7QUFqQkQsNERBaUJDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLypcbiAqICBUaGUgZnVuY3Rpb25zIGZvdW5kIGhlcmUgaW4gdGhlIGNvcmUgbGlicmFyeSBhcmUgZm9yIGludGVybmFsIHVzZSBhbmQgY2FuIGJlIGNoYW5nZWRcbiAqICBvciByZW1vdmVkIG91dHNpZGUgb2YgYSBtYWpvciByZWxlYXNlLiBXZSByZWNvbW1lbmQgYWdhaW5zdCBjYWxsaW5nIHRoZW0gZGlyZWN0bHkgZnJvbSBjbGllbnQgY29kZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBlYzIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IENmbkxvZ0dyb3VwIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sb2dzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgYnVpbGRTZWN1cml0eUdyb3VwIH0gZnJvbSBcIi4vc2VjdXJpdHktZ3JvdXAtaGVscGVyXCI7XG5pbXBvcnQgeyBjb25zb2xpZGF0ZVByb3BzLCBhZGRDZm5TdXBwcmVzc1J1bGVzIH0gZnJvbSBcIi4vdXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFZwY1Byb3BzIHtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIGluc3RhbmNlIG9mIGEgVlBDLCBpZiB0aGlzIGlzIHNldCB0aGVuIHRoZSBhbGwgUHJvcHMgYXJlIGlnbm9yZWRcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nVnBjPzogZWMyLklWcGM7XG4gIC8qKlxuICAgKiBPbmUgb2YgdGhlIGRlZmF1bHQgVlBDIGNvbmZpZ3VyYXRpb25zIGF2YWlsYWJsZSBpbiB2cGMtZGVmYXVsdHNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWcGNQcm9wczogZWMyLlZwY1Byb3BzO1xuICAvKipcbiAgICogVXNlciBwcm92aWRlZCBwcm9wcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHVzZXJWcGNQcm9wcz86IGVjMi5WcGNQcm9wcztcbiAgLyoqXG4gICAqIENvbnN0cnVjdCBzcGVjaWZpZWQgcHJvcHMgdGhhdCBvdmVycmlkZSBib3RoIHRoZSBkZWZhdWx0IHByb3BzXG4gICAqIGFuZCB1c2VyIHByb3BzIGZvciB0aGUgVlBDLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0VnBjUHJvcHM/OiBlYzIuVnBjUHJvcHM7XG59XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkVnBjKHNjb3BlOiBDb25zdHJ1Y3QsIHByb3BzOiBCdWlsZFZwY1Byb3BzKTogZWMyLklWcGMge1xuICBpZiAocHJvcHM/LmV4aXN0aW5nVnBjKSB7XG4gICAgcmV0dXJuIHByb3BzPy5leGlzdGluZ1ZwYztcbiAgfVxuXG4gIGxldCBjdW11bGF0aXZlUHJvcHM6IGVjMi5WcGNQcm9wcyA9IHByb3BzPy5kZWZhdWx0VnBjUHJvcHM7XG5cbiAgY3VtdWxhdGl2ZVByb3BzID0gY29uc29saWRhdGVQcm9wcyhjdW11bGF0aXZlUHJvcHMsIHByb3BzPy51c2VyVnBjUHJvcHMsIHByb3BzPy5jb25zdHJ1Y3RWcGNQcm9wcyk7XG5cbiAgY29uc3QgdnBjID0gbmV3IGVjMi5WcGMoc2NvcGUsIFwiVnBjXCIsIGN1bXVsYXRpdmVQcm9wcyk7XG5cbiAgLy8gQWRkIFZQQyBGbG93TG9ncyB3aXRoIHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdHJhZmZpY1R5cGU6QUxMIGFuZCBkZXN0aW5hdGlvbjogQ2xvdWRXYXRjaCBMb2dzXG4gIGNvbnN0IGZsb3dMb2c6IGVjMi5GbG93TG9nID0gdnBjLmFkZEZsb3dMb2coXCJGbG93TG9nXCIpO1xuXG4gIFN1cHByZXNzTWFwUHVibGljSXBXYXJuaW5ncyh2cGMpO1xuICBTdXBwcmVzc0VuY3J5cHRlZExvZ1dhcm5pbmdzKGZsb3dMb2cpO1xuXG4gIHJldHVybiB2cGM7XG59XG5cbmV4cG9ydCBlbnVtIFNlcnZpY2VFbmRwb2ludFR5cGVzIHtcbiAgRFlOQU1PREIgPSBcIkREQlwiLFxuICBTTlMgPSBcIlNOU1wiLFxuICBTUVMgPSBcIlNRU1wiLFxuICBTMyA9IFwiUzNcIixcbiAgU1RFUF9GVU5DVElPTlMgPSBcIlNURVBfRlVOQ1RJT05TXCIsXG4gIFNBR0VNQUtFUl9SVU5USU1FID0gXCJTQUdFTUFLRVJfUlVOVElNRVwiLFxuICBTRUNSRVRTX01BTkFHRVIgPSBcIlNFQ1JFVFNfTUFOQUdFUlwiLFxuICBTU00gPSBcIlNTTVwiLFxuICBFQ1JfQVBJID0gXCJFQ1JfQVBJXCIsXG4gIEVDUl9ES1IgPSBcIkVDUl9ES1JcIixcbiAgRVZFTlRTID0gXCJDTE9VRFdBVENIX0VWRU5UU1wiLFxuICBLSU5FU0lTX0ZJUkVIT1NFID0gXCJLSU5FU0lTX0ZJUkVIT1NFXCIsXG4gIEtJTkVTSVNfU1RSRUFNUyA9IFwiS0lORVNJU19TVFJFQU1TXCIsXG4gIEtFTkRSQSA9IFwiS0VORFJBXCJcbn1cblxuZW51bSBFbmRwb2ludFR5cGVzIHtcbiAgR0FURVdBWSA9IFwiR2F0ZXdheVwiLFxuICBJTlRFUkZBQ0UgPSBcIkludGVyZmFjZVwiLFxufVxuXG5pbnRlcmZhY2UgRW5kcG9pbnREZWZpbml0aW9uIHtcbiAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcztcbiAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzO1xuICBlbmRwb2ludEdhdGV3YXlTZXJ2aWNlPzogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2U7XG4gIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZT86IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2U7XG59XG5cbmNvbnN0IGVuZHBvaW50U2V0dGluZ3M6IEVuZHBvaW50RGVmaW5pdGlvbltdID0gW1xuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5EWU5BTU9EQixcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuR0FURVdBWSxcbiAgICBlbmRwb2ludEdhdGV3YXlTZXJ2aWNlOiBlYzIuR2F0ZXdheVZwY0VuZHBvaW50QXdzU2VydmljZS5EWU5BTU9EQixcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuUzMsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLkdBVEVXQVksXG4gICAgZW5kcG9pbnRHYXRld2F5U2VydmljZTogZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMsXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLlNURVBfRlVOQ1RJT05TLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNURVBfRlVOQ1RJT05TLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TTlMsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU05TLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TUVMsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1FTLFxuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5TQUdFTUFLRVJfUlVOVElNRSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TQUdFTUFLRVJfUlVOVElNRSxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU0VDUkVUU19NQU5BR0VSLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNFQ1JFVFNfTUFOQUdFUixcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuU1NNLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLlNTTSxcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuRUNSX0FQSSxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5FQ1JcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuRUNSX0RLUixcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5FQ1JfRE9DS0VSXG4gIH0sXG4gIHtcbiAgICBlbmRwb2ludE5hbWU6IFNlcnZpY2VFbmRwb2ludFR5cGVzLkVWRU5UUyxcbiAgICBlbmRwb2ludFR5cGU6IEVuZHBvaW50VHlwZXMuSU5URVJGQUNFLFxuICAgIGVuZHBvaW50SW50ZXJmYWNlU2VydmljZTogZWMyLkludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5DTE9VRFdBVENIX0VWRU5UU1xuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5LSU5FU0lTX0ZJUkVIT1NFLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLktJTkVTSVNfRklSRUhPU0VcbiAgfSxcbiAge1xuICAgIGVuZHBvaW50TmFtZTogU2VydmljZUVuZHBvaW50VHlwZXMuS0lORVNJU19TVFJFQU1TLFxuICAgIGVuZHBvaW50VHlwZTogRW5kcG9pbnRUeXBlcy5JTlRFUkZBQ0UsXG4gICAgZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlOiBlYzIuSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLktJTkVTSVNfU1RSRUFNU1xuICB9LFxuICB7XG4gICAgZW5kcG9pbnROYW1lOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcy5LRU5EUkEsXG4gICAgZW5kcG9pbnRUeXBlOiBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSxcbiAgICBlbmRwb2ludEludGVyZmFjZVNlcnZpY2U6IGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuS0VORFJBXG4gIH1cbl07XG5cbi8qKlxuICogQGludGVybmFsIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29yZSBmdW5jdGlvbiBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgU29sdXRpb25zIENvbnN0cnVjdHMgY2xpZW50cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEFkZEF3c1NlcnZpY2VFbmRwb2ludChcbiAgc2NvcGU6IENvbnN0cnVjdCxcbiAgdnBjOiBlYzIuSVZwYyxcbiAgaW50ZXJmYWNlVGFnOiBTZXJ2aWNlRW5kcG9pbnRUeXBlc1xuKSB7XG4gIGlmIChDaGVja0lmRW5kcG9pbnRBbHJlYWR5RXhpc3RzKHZwYywgaW50ZXJmYWNlVGFnKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHNlcnZpY2UgPSBlbmRwb2ludFNldHRpbmdzLmZpbmQoXG4gICAgKGVuZHBvaW50KSA9PiBlbmRwb2ludC5lbmRwb2ludE5hbWUgPT09IGludGVyZmFjZVRhZ1xuICApO1xuXG4gIGlmICghc2VydmljZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIFNlcnZpY2Ugc2VudCB0byBBZGRTZXJ2aWNlRW5kcG9pbnRcIik7XG4gIH1cblxuICBpZiAoc2VydmljZS5lbmRwb2ludFR5cGUgPT09IEVuZHBvaW50VHlwZXMuR0FURVdBWSkge1xuICAgIEFkZEdhdGV3YXlFbmRwb2ludCh2cGMsIHNlcnZpY2UsIGludGVyZmFjZVRhZyk7XG4gIH1cbiAgaWYgKHNlcnZpY2UuZW5kcG9pbnRUeXBlID09PSBFbmRwb2ludFR5cGVzLklOVEVSRkFDRSkge1xuICAgIEFkZEludGVyZmFjZUVuZHBvaW50KHNjb3BlLCB2cGMsIHNlcnZpY2UsIGludGVyZmFjZVRhZyk7XG4gIH1cblxuICAvLyBFU0xpbnQgcmVxdWlyZXMgdGhpcyByZXR1cm4gc3RhdGVtZW50LCBzbyBkaXNhYmxpbmcgU29uYXJRdWJlIHdhcm5pbmdcbiAgcmV0dXJuOyAvLyBOT1NPTkFSXG59XG5cbmZ1bmN0aW9uIENoZWNrSWZFbmRwb2ludEFscmVhZHlFeGlzdHModnBjOiBlYzIuSVZwYywgaW50ZXJmYWNlVGFnOiBTZXJ2aWNlRW5kcG9pbnRUeXBlcyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdnBjLm5vZGUuY2hpbGRyZW4uc29tZSgoY2hpbGQpID0+IGNoaWxkLm5vZGUuaWQgPT09IGludGVyZmFjZVRhZyk7XG59XG5cbmZ1bmN0aW9uIFN1cHByZXNzTWFwUHVibGljSXBXYXJuaW5ncyh2cGM6IGVjMi5WcGMpIHtcbiAgLy8gQWRkIENmbiBOYWcgc3VwcHJlc3Npb24gZm9yIFBVQkxJQyBzdWJuZXRzIHRvIHN1cHByZXNzIFdBUk4gVzMzOiBFQzIgU3VibmV0IHNob3VsZCBub3QgaGF2ZSBNYXBQdWJsaWNJcE9uTGF1bmNoIHNldCB0byB0cnVlXG4gIHZwYy5wdWJsaWNTdWJuZXRzLmZvckVhY2goKHN1Ym5ldCkgPT4ge1xuICAgIGNvbnN0IGNmblN1Ym5ldCA9IHN1Ym5ldC5ub2RlLmRlZmF1bHRDaGlsZCBhcyBlYzIuQ2ZuU3VibmV0O1xuICAgIGFkZENmblN1cHByZXNzUnVsZXMoY2ZuU3VibmV0LCBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnVzMzJyxcbiAgICAgICAgcmVhc29uOiAnQWxsb3cgUHVibGljIFN1Ym5ldHMgdG8gaGF2ZSBNYXBQdWJsaWNJcE9uTGF1bmNoIHNldCB0byB0cnVlJ1xuICAgICAgfVxuICAgIF0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gU3VwcHJlc3NFbmNyeXB0ZWRMb2dXYXJuaW5ncyhmbG93TG9nOiBlYzIuRmxvd0xvZykge1xuICAvLyBBZGQgQ2ZuIE5hZyBzdXBwcmVzc2lvbiBmb3IgQ2xvdWRXYXRjaExvZ3MgTG9nR3JvdXBzIGRhdGEgaXMgZW5jcnlwdGVkXG4gIGNvbnN0IGNmbkxvZ0dyb3VwOiBDZm5Mb2dHcm91cCA9IGZsb3dMb2cubG9nR3JvdXA/Lm5vZGUuZGVmYXVsdENoaWxkIGFzIENmbkxvZ0dyb3VwO1xuICBhZGRDZm5TdXBwcmVzc1J1bGVzKGNmbkxvZ0dyb3VwLCBbXG4gICAge1xuICAgICAgaWQ6ICdXODQnLFxuICAgICAgcmVhc29uOiAnQnkgZGVmYXVsdCBDbG91ZFdhdGNoTG9ncyBMb2dHcm91cHMgZGF0YSBpcyBlbmNyeXB0ZWQgdXNpbmcgdGhlIENsb3VkV2F0Y2ggc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBrZXlzIChBV1MgTWFuYWdlZCBLZXlzKSdcbiAgICB9XG4gIF0pO1xufVxuXG5mdW5jdGlvbiBBZGRJbnRlcmZhY2VFbmRwb2ludChzY29wZTogQ29uc3RydWN0LCB2cGM6IGVjMi5JVnBjLCBzZXJ2aWNlOiBFbmRwb2ludERlZmluaXRpb24sIGludGVyZmFjZVRhZzogU2VydmljZUVuZHBvaW50VHlwZXMpIHtcbiAgY29uc3QgZW5kcG9pbnREZWZhdWx0U2VjdXJpdHlHcm91cCA9IGJ1aWxkU2VjdXJpdHlHcm91cChcbiAgICBzY29wZSxcbiAgICBgJHtzY29wZS5ub2RlLmlkfS0ke3NlcnZpY2UuZW5kcG9pbnROYW1lfWAsXG4gICAge1xuICAgICAgdnBjLFxuICAgICAgYWxsb3dBbGxPdXRib3VuZDogdHJ1ZSxcbiAgICB9LFxuICAgIFt7IHBlZXI6IGVjMi5QZWVyLmlwdjQodnBjLnZwY0NpZHJCbG9jayksIGNvbm5lY3Rpb246IGVjMi5Qb3J0LnRjcCg0NDMpIH1dLFxuICAgIFtdXG4gICk7XG5cbiAgdnBjLmFkZEludGVyZmFjZUVuZHBvaW50KGludGVyZmFjZVRhZywge1xuICAgIHNlcnZpY2U6IHNlcnZpY2UuZW5kcG9pbnRJbnRlcmZhY2VTZXJ2aWNlIGFzIGVjMi5JbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UsXG4gICAgc2VjdXJpdHlHcm91cHM6IFtlbmRwb2ludERlZmF1bHRTZWN1cml0eUdyb3VwXSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIEFkZEdhdGV3YXlFbmRwb2ludCh2cGM6IGVjMi5JVnBjLCBzZXJ2aWNlOiBFbmRwb2ludERlZmluaXRpb24sIGludGVyZmFjZVRhZzogU2VydmljZUVuZHBvaW50VHlwZXMpIHtcbiAgdnBjLmFkZEdhdGV3YXlFbmRwb2ludChpbnRlcmZhY2VUYWcsIHtcbiAgICBzZXJ2aWNlOiBzZXJ2aWNlLmVuZHBvaW50R2F0ZXdheVNlcnZpY2UgYXMgZWMyLkdhdGV3YXlWcGNFbmRwb2ludEF3c1NlcnZpY2UsXG4gIH0pO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbCBUaGlzIGlzIGFuIGludGVybmFsIGNvcmUgZnVuY3Rpb24gYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGJ5IFNvbHV0aW9ucyBDb25zdHJ1Y3RzIGNsaWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXRyaWV2ZVByaXZhdGVTdWJuZXRJZHModnBjOiBlYzIuSVZwYykge1xuICBsZXQgdGFyZ2V0U3VibmV0VHlwZTtcblxuICBpZiAodnBjLmlzb2xhdGVkU3VibmV0cy5sZW5ndGgpIHtcbiAgICB0YXJnZXRTdWJuZXRUeXBlID0gZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9JU09MQVRFRDtcbiAgfSBlbHNlIGlmICh2cGMucHJpdmF0ZVN1Ym5ldHMubGVuZ3RoKSB7XG4gICAgdGFyZ2V0U3VibmV0VHlwZSA9IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1M7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFcnJvciAtIE5vIGlzb2xhdGVkIG9yIHByaXZhdGUgc3VibmV0cyBhdmFpbGFibGUgaW4gVlBDJyk7XG4gIH1cblxuICBjb25zdCBzdWJuZXRTZWxlY3RvciA9IHtcbiAgICBvbmVQZXJBejogdHJ1ZSxcbiAgICBzdWJuZXRUeXBlOiB0YXJnZXRTdWJuZXRUeXBlXG4gIH07XG5cbiAgcmV0dXJuIHZwYy5zZWxlY3RTdWJuZXRzKHN1Ym5ldFNlbGVjdG9yKS5zdWJuZXRJZHM7XG59Il19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-solutions-constructs/core",
3
- "version": "2.41.0",
3
+ "version": "2.43.0",
4
4
  "description": "Core CDK Construct for patterns library",
5
5
  "main": "index.js",
6
6
  "types": "index.ts",
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
5
+ * with the License. A copy of the License is located at
6
+ *
7
+ * http://www.apache.org/licenses/LICENSE-2.0
8
+ *
9
+ * or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
10
+ * OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
11
+ * and limitations under the License.
12
+ */
13
+ export {};