@aws-mdaa/dataops-job-l3-construct 1.4.0 → 1.5.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.
- package/.jsii +98 -112
- package/lib/dataops-job-l3-construct.d.ts +30 -240
- package/lib/dataops-job-l3-construct.js +23 -23
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/.npmignore +34 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/jest.config.js +5 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.ts +241 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/package.json +9 -7
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.d.ts +5 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.js +200 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.ts +215 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.json +40 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/typedoc.json +7 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/.npmignore +34 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/jest.config.js +5 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.d.ts +2 -20
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.js +2 -11
- package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.ts +241 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/package.json +8 -6
- package/node_modules/@aws-mdaa/s3-inventory-helper/test/TODO +0 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.json +40 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.tsbuildinfo +1 -0
- package/node_modules/@aws-mdaa/s3-inventory-helper/typedoc.json +7 -0
- package/package.json +24 -22
|
@@ -31,19 +31,19 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
31
31
|
throw new Error('Deployment role ARN is required for job configuration');
|
|
32
32
|
}
|
|
33
33
|
const deploymentRole = iam_constructs_1.MdaaRole.fromRoleArn(this.scope, `deployment-role`, this.props.deploymentRoleArn);
|
|
34
|
-
if (!this.props.
|
|
34
|
+
if (!this.props.bucketName) {
|
|
35
35
|
throw new Error('Project bucket name is required for job configuration');
|
|
36
36
|
}
|
|
37
|
-
const
|
|
38
|
-
if (!this.props.
|
|
37
|
+
const bucket = s3_constructs_1.MdaaBucket.fromBucketName(this.scope, `project-bucket`, this.props.bucketName);
|
|
38
|
+
if (!this.props.kmsArn) {
|
|
39
39
|
throw new Error('Project KMS Key is required for job configuration');
|
|
40
40
|
}
|
|
41
|
-
this.
|
|
41
|
+
this.kmsKey = aws_kms_1.Key.fromKeyArn(this, this.props.projectName ?? 'kms-key', this.props.kmsArn);
|
|
42
42
|
// Build our jobs!
|
|
43
43
|
const allJobs = this.props.jobConfigs;
|
|
44
44
|
Object.keys(allJobs).forEach(jobName => {
|
|
45
45
|
const jobConfig = allJobs[jobName];
|
|
46
|
-
this.createJob(jobName, jobConfig, deploymentRole,
|
|
46
|
+
this.createJob(jobName, jobConfig, deploymentRole, bucket);
|
|
47
47
|
});
|
|
48
48
|
//CDK S3 Deployment automatically adds inline policy to project deployment role.
|
|
49
49
|
this.scope.node.children.forEach(child => {
|
|
@@ -57,17 +57,17 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
57
57
|
}
|
|
58
58
|
});
|
|
59
59
|
}
|
|
60
|
-
deployAdditionalFiles(additionalFilesSources,
|
|
60
|
+
deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, deploymentId, deploymentPath, extract) {
|
|
61
61
|
// Deploy Source asset(s) to /deployment/libs/<job> location.
|
|
62
62
|
return new aws_s3_deployment_1.BucketDeployment(this.scope, deploymentId, {
|
|
63
63
|
sources: additionalFilesSources,
|
|
64
|
-
destinationBucket:
|
|
64
|
+
destinationBucket: bucket,
|
|
65
65
|
destinationKeyPrefix: deploymentPath,
|
|
66
66
|
role: deploymentRole,
|
|
67
67
|
extract: extract,
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
|
-
addAdditionalScripts(jobName, jobConfig,
|
|
70
|
+
addAdditionalScripts(jobName, jobConfig, bucket, deploymentRole, defaultArguments) {
|
|
71
71
|
if (jobConfig.additionalScripts) {
|
|
72
72
|
/**
|
|
73
73
|
* Group all files at parent directory level. This will allow creating zip lib assests at various directory levels
|
|
@@ -88,7 +88,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
88
88
|
return aws_s3_deployment_1.Source.asset(filePath, { exclude: ['**', ...fileNames] });
|
|
89
89
|
});
|
|
90
90
|
const deploymentPath = `deployment/libs/${jobName}`;
|
|
91
|
-
const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources,
|
|
91
|
+
const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, `job-deployment-${jobName}-additional-script`, deploymentPath, false);
|
|
92
92
|
// Extract zip name(s) for each source and create comma separated list of s3 locations
|
|
93
93
|
const libraryZipNames = [];
|
|
94
94
|
for (let i = 0; i < additionalFilesSources.length; i++) {
|
|
@@ -104,7 +104,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
}
|
|
107
|
-
addAdditionalJars(jobName, jobConfig,
|
|
107
|
+
addAdditionalJars(jobName, jobConfig, bucket, deploymentRole, defaultArguments) {
|
|
108
108
|
if (jobConfig.additionalJars) {
|
|
109
109
|
// Create Source asset for each directory
|
|
110
110
|
const additionalFilesSources = jobConfig.additionalJars.map(fullFileName => {
|
|
@@ -113,7 +113,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
113
113
|
return aws_s3_deployment_1.Source.asset(filePath, { exclude: ['**', `!${fileName}`] });
|
|
114
114
|
});
|
|
115
115
|
const deploymentPath = `deployment/libs/${jobName}`;
|
|
116
|
-
const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources,
|
|
116
|
+
const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, `job-deployment-${jobName}-additional-jar`, deploymentPath, true);
|
|
117
117
|
const extraJarNames = jobConfig.additionalJars.map(fullFileName => {
|
|
118
118
|
const fileName = path.basename(fullFileName.trim());
|
|
119
119
|
return `s3://${additionalFileDeployment.deployedBucket.bucketName}/${deploymentPath}/${fileName}`;
|
|
@@ -127,7 +127,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
addAdditionalFiles(jobName, jobConfig,
|
|
130
|
+
addAdditionalFiles(jobName, jobConfig, bucket, deploymentRole, defaultArguments) {
|
|
131
131
|
if (jobConfig.additionalFiles) {
|
|
132
132
|
// Create Source asset for each directory
|
|
133
133
|
const additionalFilesSources = jobConfig.additionalFiles.map(fullFileName => {
|
|
@@ -136,7 +136,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
136
136
|
return aws_s3_deployment_1.Source.asset(filePath, { exclude: ['**', `!${fileName}`] });
|
|
137
137
|
});
|
|
138
138
|
const deploymentPath = `deployment/files/${jobName}`;
|
|
139
|
-
const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources,
|
|
139
|
+
const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, `job-deployment-${jobName}-additional-file`, deploymentPath, true);
|
|
140
140
|
const extraFileNames = jobConfig.additionalFiles.map(fullFileName => {
|
|
141
141
|
const fileName = path.basename(fullFileName.trim());
|
|
142
142
|
return `s3://${additionalFileDeployment.deployedBucket.bucketName}/${deploymentPath}/${fileName}`;
|
|
@@ -150,7 +150,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
152
|
}
|
|
153
|
-
createJob(jobName, jobConfig, deploymentRole,
|
|
153
|
+
createJob(jobName, jobConfig, deploymentRole, bucket) {
|
|
154
154
|
const defaultArguments = jobConfig.defaultArguments ? jobConfig.defaultArguments : {};
|
|
155
155
|
const scriptPath = path.dirname(jobConfig.command.scriptLocation.trim());
|
|
156
156
|
const scriptName = path.basename(jobConfig.command.scriptLocation.trim());
|
|
@@ -158,14 +158,14 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
158
158
|
const scriptDeploymentPath = `deployment/jobs/${jobName}`;
|
|
159
159
|
const scriptDeployment = new aws_s3_deployment_1.BucketDeployment(this.scope, `job-deployment-${jobName}`, {
|
|
160
160
|
sources: [scriptSource],
|
|
161
|
-
destinationBucket:
|
|
161
|
+
destinationBucket: bucket,
|
|
162
162
|
destinationKeyPrefix: scriptDeploymentPath,
|
|
163
163
|
role: deploymentRole,
|
|
164
164
|
extract: true,
|
|
165
165
|
});
|
|
166
|
-
this.addAdditionalScripts(jobName, jobConfig,
|
|
167
|
-
this.addAdditionalJars(jobName, jobConfig,
|
|
168
|
-
this.addAdditionalFiles(jobName, jobConfig,
|
|
166
|
+
this.addAdditionalScripts(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
|
|
167
|
+
this.addAdditionalJars(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
|
|
168
|
+
this.addAdditionalFiles(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
|
|
169
169
|
construct_1.MdaaNagSuppressions.addCodeResourceSuppressions(this.scope, [
|
|
170
170
|
{ id: 'AwsSolutions-L1', reason: 'Function is used only as custom resource during CDK deployment.' },
|
|
171
171
|
{
|
|
@@ -212,7 +212,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
212
212
|
connections: jobConfig.connections,
|
|
213
213
|
};
|
|
214
214
|
}
|
|
215
|
-
defaultArguments['--TempDir'] = `s3://${this.props.
|
|
215
|
+
defaultArguments['--TempDir'] = `s3://${this.props.bucketName}/temp/jobs/${jobName}`;
|
|
216
216
|
// add continuous logging unless explicitly disabled
|
|
217
217
|
if (jobConfig.continuousLogging) {
|
|
218
218
|
const logGroupName = jobName;
|
|
@@ -252,7 +252,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
252
252
|
workerType: jobConfig.workerType,
|
|
253
253
|
naming: this.props.naming,
|
|
254
254
|
});
|
|
255
|
-
if (job.name) {
|
|
255
|
+
if (job.name && this.props.projectName) {
|
|
256
256
|
dataops_project_l3_construct_1.DataOpsProjectUtils.createProjectSSMParam(this.scope, this.props.naming, this.props.projectName, `job/name/${jobName}`, job.name);
|
|
257
257
|
const eventRule = this.createJobMonitoringEventRule(`${jobName}-monitor`, [job.name]);
|
|
258
258
|
if (!this.props.notificationTopicArn) {
|
|
@@ -279,7 +279,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
279
279
|
naming: this.props.naming,
|
|
280
280
|
logGroupName: logGroupName,
|
|
281
281
|
logGroupNamePathPrefix: logGroupNamePathPrefix,
|
|
282
|
-
encryptionKey: this.
|
|
282
|
+
encryptionKey: this.kmsKey,
|
|
283
283
|
retention: logGroupRetentionDays,
|
|
284
284
|
};
|
|
285
285
|
new cloudwatch_constructs_1.MdaaLogGroup(this, logGroupName, logProps);
|
|
@@ -289,5 +289,5 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
|
|
|
289
289
|
}
|
|
290
290
|
exports.GlueJobL3Construct = GlueJobL3Construct;
|
|
291
291
|
_a = JSII_RTTI_SYMBOL_1;
|
|
292
|
-
GlueJobL3Construct[_a] = { fqn: "@aws-mdaa/dataops-job-l3-construct.GlueJobL3Construct", version: "1.
|
|
293
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztHQUdHO0FBRUgseUZBQTZFO0FBQzdFLHFFQUFpRTtBQUNqRSwrREFBdUQ7QUFDdkQsNkRBQW9EO0FBQ3BELDJEQUFxRDtBQUNyRCx5REFBK0U7QUFFL0UscUVBQWtGO0FBQ2xGLG1EQUEwRCxDQUFDLFNBQVM7QUFFcEUsNkJBQTZCO0FBQzdCLHVFQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNkNBQWlDO0FBRWpDLG1EQUFxRDtBQUNyRCwyRUFBK0Q7QUFDL0QsaURBQWdEO0FBQ2hELHVGQUFpRjtBQThVakYsTUFBYSxrQkFBbUIsU0FBUSw4QkFBZTtJQUlyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyx5QkFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsMEJBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUss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LElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUNqQixRQUFRLEVBQ1IsNkJBQTZCLEVBQzdCO1lBQ0UsT0FBTyxFQUFFLFFBQVE7WUFDakIsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7U0FDeEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxzQkFBOEIsRUFBRSxZQUFvQixFQUFFLGFBQTRCO1FBQ3ZHLElBQUkscUJBQW9DLENBQUM7UUFFekMsSUFBSSxhQUFhLENBQUMscUJBQXFCLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0MscUJBQXFCLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO1FBQzlELENBQUM7YUFBTSxDQUFDO1lBQ04scUJBQXFCLEdBQUcsd0JBQWEsQ0FBQyxRQUFRLENBQUM7UUFDakQsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN6QixZQUFZLEVBQUUsWUFBWTtZQUMxQixzQkFBc0IsRUFBRSxzQkFBc0I7WUFDOUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQztRQUNGLElBQUksb0NBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLDBEQUEwRDtRQUMxRCxPQUFPLElBQUEsNEJBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQyxZQUFhLENBQUM7SUFDN0MsQ0FBQzs7QUF2V0gsZ0RBd1dDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgRGF0YU9wc1Byb2plY3RVdGlscyB9IGZyb20gJ0Bhd3MtbWRhYS9kYXRhb3BzLXByb2plY3QtbDMtY29uc3RydWN0JztcbmltcG9ydCB7IEV2ZW50QnJpZGdlSGVscGVyIH0gZnJvbSAnQGF3cy1tZGFhL2V2ZW50YnJpZGdlLWhlbHBlcic7XG5pbXBvcnQgeyBNZGFhQ2ZuSm9iIH0gZnJvbSAnQGF3cy1tZGFhL2dsdWUtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhUm9sZSB9IGZyb20gJ0Bhd3MtbWRhYS9pYW0tY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhQnVja2V0IH0gZnJvbSAnQGF3cy1tZGFhL3MzLWNvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTWRhYUwzQ29uc3RydWN0LCBNZGFhTDNDb25zdHJ1Y3RQcm9wcyB9IGZyb20gJ0Bhd3MtbWRhYS9sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgQ2ZuSm9iIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgSVNvdXJjZSwgU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgTWRhYU5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ0Bhd3MtbWRhYS9jb25zdHJ1Y3QnOyAvL05PU09OQVJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNuc1RvcGljIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IE1kYWFTbnNUb3BpYyB9IGZyb20gJ0Bhd3MtbWRhYS9zbnMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FbGVtZW50IH0gZnJvbSAnQGF3cy1tZGFhL2NvbmZpZyc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgTWRhYUxvZ0dyb3VwIH0gZnJvbSAnQGF3cy1tZGFhL2Nsb3Vkd2F0Y2gtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJS2V5LCBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IHVwZGF0ZVByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2Nsb3Vkd2F0Y2gtY29uc3RydWN0cy9saWIvbG9nZ3JvdXAtdXRpbHMnO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBJUm9sZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuXG5leHBvcnQgdHlwZSBKb2JDb21tYW5kUHl0aG9uVmVyc2lvbiA9ICcyJyB8ICczJyB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIEpvYkNvbW1hbmROYW1lID0gJ2dsdWVldGwnIHwgJ3B5dGhvbnNoZWxsJztcblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIEdsdWUgam9iIGxvZ2dpbmcgd2l0aCBDbG91ZFdhdGNoIGxvZyByZXRlbnRpb24gbWFuYWdlbWVudCBhbmQgY29tcGxpYW5jZSByZXF1aXJlbWVudHMuIERlZmluZXMgbG9nIHJldGVudGlvbiBzZXR0aW5ncyBmb3IgR2x1ZSBqb2IgZXhlY3V0aW9uIGxvZ3MgZW5zdXJpbmcgcHJvcGVyIGxvZyBtYW5hZ2VtZW50LCBjb21wbGlhbmNlLCBhbmQgY29zdCBvcHRpbWl6YXRpb24gZm9yIERhdGFPcHMgam9iIG1vbml0b3JpbmcgYW5kIGF1ZGl0IHRyYWlscy5cbiAqXG4gKiBVc2UgY2FzZXM6IExvZyByZXRlbnRpb24gbWFuYWdlbWVudDsgQ29tcGxpYW5jZSByZXF1aXJlbWVudHM7IENvc3Qgb3B0aW1pemF0aW9uOyBBdWRpdCB0cmFpbCBtYW5hZ2VtZW50XG4gKlxuICogQVdTOiBDbG91ZFdhdGNoIGxvZyBncm91cCByZXRlbnRpb24gZm9yIEdsdWUgam9iIGV4ZWN1dGlvbiBsb2dzIGFuZCBtb25pdG9yaW5nXG4gKlxuICogVmFsaWRhdGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzIGlzIHJlcXVpcmVkIHdpdGggc3BlY2lmaWMgYWxsb3dlZCB2YWx1ZXMgZm9yIHJldGVudGlvbiBwZXJpb2RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nQ29uZmlnIHtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgcmV0ZW50aW9uIHBlcmlvZCBpbiBkYXlzIGZvciBHbHVlIGpvYiBsb2cgbWFuYWdlbWVudCBhbmQgY29tcGxpYW5jZSByZXF1aXJlbWVudHMuIERlZmluZXMgaG93IGxvbmcgam9iIGV4ZWN1dGlvbiBsb2dzIGFyZSByZXRhaW5lZCBpbiBDbG91ZFdhdGNoIHdpdGggc3BlY2lmaWMgYWxsb3dlZCB2YWx1ZXMgZm9yIGxvZyByZXRlbnRpb24sIGNvbXBsaWFuY2UgbWFuYWdlbWVudCwgYW5kIHN0b3JhZ2UgY29zdCBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogTG9nIHJldGVudGlvbiBtYW5hZ2VtZW50OyBDb21wbGlhbmNlIHJlcXVpcmVtZW50czsgU3RvcmFnZSBjb3N0IG9wdGltaXphdGlvbjsgQXVkaXQgdHJhaWwgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IENsb3VkV2F0Y2ggbG9nIGdyb3VwIHJldGVudGlvbiBmb3IgR2x1ZSBqb2IgZXhlY3V0aW9uIGxvZ3MgYW5kIGF1ZGl0IHRyYWlsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSAxLDMsNSw3LDE0LDMwLDYwLDkwLDEyMCwxNTAsMTgwLDM2NSw0MDAsNTQ1LDczMSwxODI3LDM2NTMsIG9yIDA7IHJlcXVpcmVkIGZvciBsb2cgcmV0ZW50aW9uIGNvbmZpZ3VyYXRpb25cbiAgICoqL1xuICByZWFkb25seSBsb2dHcm91cFJldGVudGlvbkRheXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIEdsdWUgam9iIGNvbW1hbmQgc3BlY2lmaWNhdGlvbiB3aXRoIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnQgc2V0dGluZ3MuIERlZmluZXMgam9iIGNvbW1hbmQgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgam9iIHR5cGUsIFB5dGhvbiB2ZXJzaW9uLCBhbmQgc2NyaXB0IGxvY2F0aW9uIGZvciBHbHVlIEVUTCBhbmQgUHl0aG9uIHNoZWxsIGpvYiBleGVjdXRpb24gd2l0aGluIERhdGFPcHMgd29ya2Zsb3dzLlxuICpcbiAqIFVzZSBjYXNlczogSm9iIGNvbW1hbmQgY29uZmlndXJhdGlvbjsgU2NyaXB0IGV4ZWN1dGlvbjsgUnVudGltZSBlbnZpcm9ubWVudDsgRVRMIGpvYiBzZXR1cFxuICpcbiAqIEFXUzogR2x1ZSBqb2IgY29tbWFuZCBjb25maWd1cmF0aW9uIGZvciBzY3JpcHQgZXhlY3V0aW9uIGFuZCBydW50aW1lIGVudmlyb25tZW50XG4gKlxuICogVmFsaWRhdGlvbjogbmFtZSBhbmQgc2NyaXB0TG9jYXRpb24gYXJlIHJlcXVpcmVkOyBweXRob25WZXJzaW9uIGlzIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb21tYW5kIHtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgam9iIGNvbW1hbmQgbmFtZSBzcGVjaWZpY2F0aW9uIGNvbnRyb2xsaW5nIEdsdWUgam9iIGV4ZWN1dGlvbiB0eXBlIGFuZCBydW50aW1lIGVudmlyb25tZW50LiBEZWZpbmVzIHdoZXRoZXIgdG8gdXNlIGdsdWVldGwgZm9yIEVUTCBqb2JzIHdpdGggU3BhcmsgcnVudGltZSBvciBweXRob25zaGVsbCBmb3IgUHl0aG9uIHNjcmlwdCBleGVjdXRpb24gd2l0aCBkaWZmZXJlbnQgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgY2FwYWJpbGl0aWVzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiB0eXBlIHNlbGVjdGlvbjsgUnVudGltZSBlbnZpcm9ubWVudDsgRXhlY3V0aW9uIG1vZGVsOyBSZXNvdXJjZSBhbGxvY2F0aW9uXG4gICAqXG4gICAqIEFXUzogR2x1ZSBqb2IgY29tbWFuZCBuYW1lIGZvciBleGVjdXRpb24gdHlwZSBhbmQgcnVudGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBnbHVlZXRsIG9yIHB5dGhvbnNoZWxsOyByZXF1aXJlZCBmb3Igam9iIGNvbW1hbmQgdHlwZSBhbmQgZXhlY3V0aW9uIGVudmlyb25tZW50XG4gICAqICAgKiovXG4gIHJlYWRvbmx5IG5hbWU6IEpvYkNvbW1hbmROYW1lO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBQeXRob24gdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiBydW50aW1lIGVudmlyb25tZW50IGVuYWJsaW5nIHZlcnNpb24tc3BlY2lmaWMgc2NyaXB0IGV4ZWN1dGlvbiBhbmQgY29tcGF0aWJpbGl0eS4gV2hlbiBzcGVjaWZpZWQsIGNvbnRyb2xzIHRoZSBQeXRob24gcnVudGltZSB2ZXJzaW9uIGZvciBqb2IgZXhlY3V0aW9uIGVuc3VyaW5nIHNjcmlwdCBjb21wYXRpYmlsaXR5IGFuZCBmZWF0dXJlIGF2YWlsYWJpbGl0eS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBQeXRob24gdmVyc2lvbiBjb250cm9sOyBSdW50aW1lIGNvbXBhdGliaWxpdHk7IFNjcmlwdCBleGVjdXRpb247IFZlcnNpb24gbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIFB5dGhvbiB2ZXJzaW9uIGZvciBydW50aW1lIGVudmlyb25tZW50IGFuZCBzY3JpcHQgY29tcGF0aWJpbGl0eVxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIDIgb3IgMyBpZiBwcm92aWRlZDsgY29udHJvbHMgUHl0aG9uIHJ1bnRpbWUgdmVyc2lvbiBmb3Igam9iIGV4ZWN1dGlvblxuICAgKiAgICoqL1xuICByZWFkb25seSBweXRob25WZXJzaW9uPzogSm9iQ29tbWFuZFB5dGhvblZlcnNpb247XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIFJlcXVpcmVkIHJlbGF0aXZlIHBhdGggdG8gR2x1ZSBzY3JpcHQgZm9yIGpvYiBleGVjdXRpb24gZW5hYmxpbmcgc2NyaXB0IGxvY2F0aW9uIHNwZWNpZmljYXRpb24gYW5kIGNvZGUgZGVwbG95bWVudC4gUHJvdmlkZXMgdGhlIFMzIHBhdGggb3IgcmVsYXRpdmUgbG9jYXRpb24gb2YgdGhlIEdsdWUgc2NyaXB0IHRoYXQgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgam9iIGZvciBFVEwgcHJvY2Vzc2luZyBhbmQgZGF0YSB0cmFuc2Zvcm1hdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBTY3JpcHQgbG9jYXRpb247IENvZGUgZGVwbG95bWVudDsgSm9iIGV4ZWN1dGlvbjsgRVRMIHByb2Nlc3NpbmdcbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBzY3JpcHQgbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uIGFuZCBFVEwgcHJvY2Vzc2luZ1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIHNjcmlwdCBwYXRoOyByZXF1aXJlZCBmb3Igam9iIHNjcmlwdCBsb2NhdGlvbiBhbmQgY29kZSBleGVjdXRpb25cbiAgICoqL1xuICByZWFkb25seSBzY3JpcHRMb2NhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JXb3JrZXJUeXBlID0gJ1N0YW5kYXJkJyB8ICdHLjFYJyB8ICdHLjJYJztcblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIEdsdWUgam9iIHByb3BlcnRpZXMgcHJvdmlkaW5nIEVUTCBqb2IgY29uZmlndXJhdGlvbiBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBjYXBhYmlsaXRpZXMuIERlZmluZXMgY29tcGxldGUgR2x1ZSBqb2Igc2V0dXAgaW5jbHVkaW5nIGV4ZWN1dGlvbiByb2xlcywgY29tbWFuZHMsIGNhcGFjaXR5IGFsbG9jYXRpb24sIHJldHJ5IHBvbGljaWVzLCBhbmQgbW9uaXRvcmluZyBmb3IgRGF0YU9wcyBFVEwgcHJvY2Vzc2luZyBhbmQgZGF0YSB0cmFuc2Zvcm1hdGlvbiB3b3JrZmxvd3MuXG4gKlxuICogVXNlIGNhc2VzOiBFVEwgam9iIGNvbmZpZ3VyYXRpb247IERhdGEgdHJhbnNmb3JtYXRpb247IEpvYiByZXNvdXJjZSBtYW5hZ2VtZW50OyBEYXRhT3BzIHByb2Nlc3NpbmdcbiAqXG4gKiBBV1M6IEdsdWUgam9iIGNvbmZpZ3VyYXRpb24gZm9yIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uIHdvcmtmbG93c1xuICpcbiAqIFZhbGlkYXRpb246IGV4ZWN1dGlvblJvbGVBcm4sIGNvbW1hbmQsIGFuZCBkZXNjcmlwdGlvbiBhcmUgcmVxdWlyZWQ7IG90aGVyIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb25maWcge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBleGVjdXRpb24gcm9sZSBBUk4gZm9yIEdsdWUgam9iIHBlcm1pc3Npb25zIGVuYWJsaW5nIHNlY3VyZSBqb2IgZXhlY3V0aW9uIGFuZCBBV1Mgc2VydmljZSBhY2Nlc3MuIFByb3ZpZGVzIHRoZSBJQU0gcm9sZSB0aGF0IHRoZSBHbHVlIGpvYiB3aWxsIGFzc3VtZSBmb3IgZXhlY3V0aW5nIEVUTCBvcGVyYXRpb25zIGFuZCBhY2Nlc3NpbmcgQVdTIHNlcnZpY2VzIGR1cmluZyBkYXRhIHByb2Nlc3Npbmcgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiBwZXJtaXNzaW9uczsgU2VydmljZSBhY2Nlc3M7IFNlY3VyZSBleGVjdXRpb247IElBTSByb2xlIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBJQU0gcm9sZSBBUk4gZm9yIEdsdWUgam9iIGV4ZWN1dGlvbiBwZXJtaXNzaW9ucyBhbmQgc2VydmljZSBhY2Nlc3NcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSB2YWxpZCBJQU0gcm9sZSBBUk47IHJlcXVpcmVkIGZvciBqb2IgZXhlY3V0aW9uIHBlcm1pc3Npb25zIGFuZCBzZXJ2aWNlIGFjY2Vzc1xuICAgKiovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgam9iIGNvbW1hbmQgY29uZmlndXJhdGlvbiBkZWZpbmluZyBzY3JpcHQgZXhlY3V0aW9uIGFuZCBydW50aW1lIGVudmlyb25tZW50IGZvciBHbHVlIGpvYiBwcm9jZXNzaW5nLiBQcm92aWRlcyB0aGUgY29tbWFuZCBzcGVjaWZpY2F0aW9uIGluY2x1ZGluZyBqb2IgdHlwZSwgUHl0aG9uIHZlcnNpb24sIGFuZCBzY3JpcHQgbG9jYXRpb24gZm9yIEVUTCBqb2IgZXhlY3V0aW9uIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFNjcmlwdCBleGVjdXRpb247IFJ1bnRpbWUgY29uZmlndXJhdGlvbjsgSm9iIGNvbW1hbmQgc2V0dXA7IEVUTCBwcm9jZXNzaW5nXG4gICAqXG4gICAqIEFXUzogR2x1ZSBqb2IgY29tbWFuZCBmb3Igc2NyaXB0IGV4ZWN1dGlvbiBhbmQgcnVudGltZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgSm9iQ29tbWFuZDsgcmVxdWlyZWQgZm9yIGpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gYW5kIHNjcmlwdCBleGVjdXRpb25cbiAgICogICAqKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogSm9iQ29tbWFuZDtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBqb2IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZSBlbmFibGluZyByZXVzYWJsZSBqb2IgY29uZmlndXJhdGlvbnMgYW5kIHN0YW5kYXJkaXplZCBzZXR1cHMuIFdoZW4gc3BlY2lmaWVkLCBpbmhlcml0cyBjb25maWd1cmF0aW9uIGZyb20gYSB0ZW1wbGF0ZSBkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmb3IgY29uc2lzdGVudCBqb2Igc2V0dXAgYW5kIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29uZmlndXJhdGlvbiBpbmhlcml0YW5jZTsgVGVtcGxhdGUgcmV1c2U7IFN0YW5kYXJkaXplZCBzZXR1cDsgQ29uZmlndXJhdGlvbiBtYW5hZ2VtZW50XG4gICAqXG4gICAqIEFXUzogSm9iIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZSBhbmQgc3RhbmRhcmRpemVkIGpvYiBzZXR1cFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIHRlbXBsYXRlIG5hbWUgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZSBmcm9tIGRlZmluZWQgdGVtcGxhdGVzXG4gICAqKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFsbG9jYXRlZCBjYXBhY2l0eSBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiByZXNvdXJjZSBhbGxvY2F0aW9uIGNvbnRyb2xsaW5nIGpvYiBwZXJmb3JtYW5jZSBhbmQgY29zdCBtYW5hZ2VtZW50LiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgYWxsb2NhdGVkIHRvIHRoZSBqb2IgZm9yIHByb2Nlc3NpbmcgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uIG9wdGltaXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBSZXNvdXJjZSBhbGxvY2F0aW9uOyBQZXJmb3JtYW5jZSB0dW5pbmc7IENvc3QgbWFuYWdlbWVudDsgQ2FwYWNpdHkgcGxhbm5pbmdcbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBhbGxvY2F0ZWQgY2FwYWNpdHkgZm9yIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgaWYgcHJvdmlkZWQ7IGNvbnRyb2xzIGpvYiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZVxuICAgKiovXG4gIHJlYWRvbmx5IGFsbG9jYXRlZENhcGFjaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBjb25uZWN0aW9uIG5hbWVzIGZvciBHbHVlIGpvYiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBlbmFibGluZyBkYXRhYmFzZSBhbmQgZXh0ZXJuYWwgc3lzdGVtIGFjY2Vzcy4gUHJvdmlkZXMgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgYWNjZXNzaW5nIGRhdGFiYXNlcywgVlBDIHJlc291cmNlcywgYW5kIGV4dGVybmFsIHN5c3RlbXMgZHVyaW5nIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIGludGVncmF0aW9uLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERhdGFiYXNlIGNvbm5lY3Rpdml0eTsgVlBDIGFjY2VzczsgRXh0ZXJuYWwgc3lzdGVtIGludGVncmF0aW9uOyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBjb25uZWN0aW9ucyBmb3IgZGF0YWJhc2UgYW5kIGV4dGVybmFsIHN5c3RlbSBjb25uZWN0aXZpdHlcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBjb25uZWN0aW9uIG5hbWVzIGlmIHByb3ZpZGVkOyBlbmFibGVzIGRhdGFiYXNlIGFuZCBleHRlcm5hbCBzeXN0ZW0gYWNjZXNzXG4gICAqKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgZGVmYXVsdCBhcmd1bWVudHMgbWFwIGZvciBHbHVlIGpvYiBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbiBlbmFibGluZyBqb2IgY3VzdG9taXphdGlvbiBhbmQgcnVudGltZSBiZWhhdmlvciBjb250cm9sLiBQcm92aWRlcyBkZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBqb2IgZm9yIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBhbmQgYmVoYXZpb3IgY3VzdG9taXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBKb2IgcGFyYW1ldGVyczsgUnVudGltZSBjb25maWd1cmF0aW9uOyBCZWhhdmlvciBjdXN0b21pemF0aW9uOyBQYXJhbWV0ZXIgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIGRlZmF1bHQgYXJndW1lbnRzIGZvciBydW50aW1lIGNvbmZpZ3VyYXRpb24gYW5kIHBhcmFtZXRlciBtYW5hZ2VtZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgQ29uZmlndXJhdGlvbkVsZW1lbnQgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgam9iIHBhcmFtZXRlciBjb25maWd1cmF0aW9uIGFuZCBjdXN0b21pemF0aW9uXG4gICAqKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFyZ3VtZW50cz86IENvbmZpZ3VyYXRpb25FbGVtZW50O1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBqb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIG1hbmFnZW1lbnQgZW5hYmxpbmcgam9iIGlkZW50aWZpY2F0aW9uIGFuZCBwdXJwb3NlIGRvY3VtZW50YXRpb24uIFByb3ZpZGVzIGRlc2NyaXB0aXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBqb2IncyBwdXJwb3NlLCBmdW5jdGlvbmFsaXR5LCBhbmQgb3BlcmF0aW9uYWwgY2hhcmFjdGVyaXN0aWNzIGZvciBtYW5hZ2VtZW50IGFuZCBkb2N1bWVudGF0aW9uLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiBkb2N1bWVudGF0aW9uOyBPcGVyYXRpb25hbCBtYW5hZ2VtZW50OyBQdXJwb3NlIGlkZW50aWZpY2F0aW9uOyBNYW5hZ2VtZW50IGluZm9ybWF0aW9uXG4gICAqXG4gICAqIEFXUzogR2x1ZSBqb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBkZXNjcmlwdGl2ZSB0ZXh0OyByZXF1aXJlZCBmb3Igam9iIGRvY3VtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIG1hbmFnZW1lbnRcbiAgICoqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBleGVjdXRpb24gcHJvcGVydHkgY29uZmlndXJhdGlvbiBmb3IgR2x1ZSBqb2IgY29uY3VycmVuY3kgY29udHJvbCBlbmFibGluZyBwYXJhbGxlbCBleGVjdXRpb24gbWFuYWdlbWVudCBhbmQgcmVzb3VyY2Ugb3B0aW1pemF0aW9uLiBEZWZpbmVzIGV4ZWN1dGlvbiBwcm9wZXJ0aWVzIGluY2x1ZGluZyBtYXhpbXVtIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3Igam9iIHNjaGVkdWxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29uY3VycmVuY3kgY29udHJvbDsgUGFyYWxsZWwgZXhlY3V0aW9uOyBSZXNvdXJjZSBtYW5hZ2VtZW50OyBKb2Igc2NoZWR1bGluZ1xuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIGV4ZWN1dGlvbiBwcm9wZXJ0aWVzIGZvciBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBwYXJhbGxlbCBleGVjdXRpb24gbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIEV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHkgaWYgcHJvdmlkZWQ7IGNvbnRyb2xzIGpvYiBjb25jdXJyZW5jeSBhbmQgcGFyYWxsZWwgZXhlY3V0aW9uXG4gICAqICAgKiovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblByb3BlcnR5PzogQ2ZuSm9iLkV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHk7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIEdsdWUgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGZvciBydW50aW1lIGVudmlyb25tZW50IGNvbnRyb2wgZW5hYmxpbmcgdmVyc2lvbi1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgY29tcGF0aWJpbGl0eS4gRGVmaW5lcyB0aGUgR2x1ZSBydW50aW1lIHZlcnNpb24gZm9yIGpvYiBleGVjdXRpb24gZW5zdXJpbmcgZmVhdHVyZSBhdmFpbGFiaWxpdHkgYW5kIGNvbXBhdGliaWxpdHkgd2l0aCBqb2IgcmVxdWlyZW1lbnRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFJ1bnRpbWUgdmVyc2lvbiBjb250cm9sOyBGZWF0dXJlIGF2YWlsYWJpbGl0eTsgQ29tcGF0aWJpbGl0eSBtYW5hZ2VtZW50OyBWZXJzaW9uIHNwZWNpZmljYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIHZlcnNpb24gZm9yIHJ1bnRpbWUgZW52aXJvbm1lbnQgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgR2x1ZSB2ZXJzaW9uIGlmIHByb3ZpZGVkOyBjb250cm9scyBydW50aW1lIGVudmlyb25tZW50IGFuZCBmZWF0dXJlIGF2YWlsYWJpbGl0eVxuICAgKiovXG4gIHJlYWRvbmx5IGdsdWVWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBtYXhpbXVtIGNhcGFjaXR5IHNwZWNpZmljYXRpb24gZm9yIEdsdWUgam9iIHJlc291cmNlIGxpbWl0cyBjb250cm9sbGluZyBtYXhpbXVtIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGNvc3QgbWFuYWdlbWVudC4gRGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgRFBVcyAoRGF0YSBQcm9jZXNzaW5nIFVuaXRzKSB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgdG8gdGhlIGpvYiBmb3IgcmVzb3VyY2UgY29udHJvbCBhbmQgY29zdCBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUmVzb3VyY2UgbGltaXRzOyBDb3N0IGNvbnRyb2w7IE1heGltdW0gYWxsb2NhdGlvbjsgUmVzb3VyY2UgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG1heGltdW0gY2FwYWNpdHkgZm9yIHJlc291cmNlIGxpbWl0cyBhbmQgY29zdCBjb250cm9sXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkOyBjb250cm9scyBtYXhpbXVtIERQVSBhbGxvY2F0aW9uIGFuZCByZXNvdXJjZSBsaW1pdHNcbiAgICoqL1xuICByZWFkb25seSBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgbWF4aW11bSByZXRyeSBjb3VudCBmb3IgR2x1ZSBqb2IgZmFpbHVyZSBoYW5kbGluZyBlbmFibGluZyBhdXRvbWF0aWMgcmV0cnkgYW5kIGVycm9yIHJlY292ZXJ5LiBEZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIGJlZm9yZSBqb2IgZmFpbHVyZSBvY2N1cnMgZm9yIGF1dG9tYXRpYyBlcnJvciByZWNvdmVyeSBhbmQgam9iIHJlbGlhYmlsaXR5LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEVycm9yIHJlY292ZXJ5OyBBdXRvbWF0aWMgcmV0cnk7IEpvYiByZWxpYWJpbGl0eTsgRmFpbHVyZSBoYW5kbGluZ1xuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG1heGltdW0gcmV0cmllcyBmb3IgYXV0b21hdGljIGVycm9yIHJlY292ZXJ5IGFuZCBqb2IgcmVsaWFiaWxpdHlcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlciBpZiBwcm92aWRlZDsgY29udHJvbHMgYXV0b21hdGljIHJldHJ5IGJlaGF2aW9yIGFuZCBlcnJvciByZWNvdmVyeVxuICAgKiovXG4gIHJlYWRvbmx5IG1heFJldHJpZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIG5vdGlmaWNhdGlvbiBwcm9wZXJ0eSBjb25maWd1cmF0aW9uIGZvciBHbHVlIGpvYiBtb25pdG9yaW5nIGFuZCBhbGVydGluZyBlbmFibGluZyBqb2Igc3RhdHVzIG5vdGlmaWNhdGlvbnMgYW5kIG9wZXJhdGlvbmFsIGF3YXJlbmVzcy4gRGVmaW5lcyBub3RpZmljYXRpb24gc2V0dGluZ3MgaW5jbHVkaW5nIG5vdGlmaWNhdGlvbiBkZWxheSBmb3Igam9iIG1vbml0b3JpbmcgYW5kIG9wZXJhdGlvbmFsIGFsZXJ0aW5nLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiBtb25pdG9yaW5nOyBTdGF0dXMgbm90aWZpY2F0aW9uczsgT3BlcmF0aW9uYWwgYWxlcnRpbmc7IE1vbml0b3JpbmcgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGZvciBtb25pdG9yaW5nIGFuZCBhbGVydGluZyBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgTm90aWZpY2F0aW9uUHJvcGVydHlQcm9wZXJ0eSBpZiBwcm92aWRlZDsgZW5hYmxlcyBqb2IgbW9uaXRvcmluZyBhbmQgYWxlcnRpbmdcbiAgICogICAqKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uUHJvcGVydHk/OiBDZm5Kb2IuTm90aWZpY2F0aW9uUHJvcGVydHlQcm9wZXJ0eTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgbnVtYmVyIG9mIHdvcmtlcnMgc3BlY2lmaWNhdGlvbiBmb3IgR2x1ZSBqb2IgcGFyYWxsZWwgcHJvY2Vzc2luZyBlbmFibGluZyBkaXN0cmlidXRlZCBwcm9jZXNzaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIERlZmluZXMgdGhlIG51bWJlciBvZiB3b3JrZXJzIGFzc2lnbmVkIHRvIHRoZSBqb2IgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcgYW5kIGRpc3RyaWJ1dGVkIGRhdGEgdHJhbnNmb3JtYXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUGFyYWxsZWwgcHJvY2Vzc2luZzsgRGlzdHJpYnV0ZWQgcHJvY2Vzc2luZzsgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBXb3JrZXIgYWxsb2NhdGlvblxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG51bWJlciBvZiB3b3JrZXJzIGZvciBwYXJhbGxlbCBwcm9jZXNzaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHByb3ZpZGVkOyBjb250cm9scyBwYXJhbGxlbCBwcm9jZXNzaW5nIGFuZCB3b3JrZXIgYWxsb2NhdGlvblxuICAgKiovXG4gIHJlYWRvbmx5IG51bWJlck9mV29ya2Vycz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgdGltZW91dCBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiBleGVjdXRpb24gbGltaXRzIGVuYWJsaW5nIGpvYiBydW50aW1lIGNvbnRyb2wgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIERlZmluZXMgdGhlIG1heGltdW0gZXhlY3V0aW9uIHRpbWUgZm9yIHRoZSBqb2IgaW4gbWludXRlcyBmb3IgcnVudGltZSBjb250cm9sIGFuZCByZXNvdXJjZSBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUnVudGltZSBjb250cm9sOyBFeGVjdXRpb24gbGltaXRzOyBSZXNvdXJjZSBtYW5hZ2VtZW50OyBUaW1lb3V0IGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiB0aW1lb3V0IGZvciBleGVjdXRpb24gdGltZSBsaW1pdHMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIGluIG1pbnV0ZXMgaWYgcHJvdmlkZWQ7IGNvbnRyb2xzIGpvYiBleGVjdXRpb24gdGltZSBsaW1pdHNcbiAgICoqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCB3b3JrZXIgdHlwZSBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiBjb21wdXRlIHJlc291cmNlIHNlbGVjdGlvbiBlbmFibGluZyBwZXJmb3JtYW5jZSBhbmQgY29zdCBvcHRpbWl6YXRpb24uIERlZmluZXMgdGhlIHR5cGUgb2Ygd29ya2VycyAoU3RhbmRhcmQsIEcuMVgsIEcuMlgpIGZvciBjb21wdXRlIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDb21wdXRlIHJlc291cmNlIHNlbGVjdGlvbjsgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBDb3N0IG1hbmFnZW1lbnQ7IFdvcmtlciB0eXBlIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiB3b3JrZXIgdHlwZSBmb3IgY29tcHV0ZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBTdGFuZGFyZCwgRy4xWCwgb3IgRy4yWCBpZiBwcm92aWRlZDsgY29udHJvbHMgY29tcHV0ZSByZXNvdXJjZSB0eXBlIGFuZCBwZXJmb3JtYW5jZVxuICAgKiAgICoqL1xuICByZWFkb25seSB3b3JrZXJUeXBlPzogSm9iV29ya2VyVHlwZTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgYWRkaXRpb25hbCBzY3JpcHQgcGF0aHMgZm9yIEdsdWUgam9iIGRlcGVuZGVuY3kgbWFuYWdlbWVudCBlbmFibGluZyBtb2R1bGFyIEVUTCBkZXZlbG9wbWVudCBhbmQgY29kZSByZXVzZS4gUHJvdmlkZXMgcmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBHbHVlIHNjcmlwdHMgcmVmZXJlbmNlZCBieSB0aGUgbWFpbiBFVEwgc2NyaXB0IGZvciBtb2R1bGFyIGRldmVsb3BtZW50IGFuZCBjb2RlIG9yZ2FuaXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBTY3JpcHQgZGVwZW5kZW5jaWVzOyBNb2R1bGFyIGRldmVsb3BtZW50OyBDb2RlIHJldXNlOyBEZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBBZGRpdGlvbmFsIEdsdWUgc2NyaXB0cyBmb3Igam9iIGRlcGVuZGVuY2llcyBhbmQgbW9kdWxhciBFVEwgZGV2ZWxvcG1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBzY3JpcHQgcGF0aHMgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgc2NyaXB0IGRlcGVuZGVuY2llcyBhbmQgbW9kdWxhciBkZXZlbG9wbWVudFxuICAgKiovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxTY3JpcHRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGFkZGl0aW9uYWwgSkFSIGZpbGUgcGF0aHMgZm9yIEdsdWUgam9iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGVuYWJsaW5nIEphdmEgbGlicmFyeSBpbnRlZ3JhdGlvbiBhbmQgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eS4gUHJvdmlkZXMgcmVsYXRpdmUgcGF0aHMgdG8gSkFSIGZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlIEVUTCBzY3JpcHQgZm9yIEphdmEgbGlicmFyeSBpbnRlZ3JhdGlvbiBhbmQgZXh0ZW5kZWQgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogSmF2YSBsaWJyYXJ5IGludGVncmF0aW9uOyBFeHRlbmRlZCBmdW5jdGlvbmFsaXR5OyBMaWJyYXJ5IGRlcGVuZGVuY2llczsgSkFSIGZpbGUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFkZGl0aW9uYWwgSkFSIGZpbGVzIGZvciBHbHVlIGpvYiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhbmQgSmF2YSBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIEpBUiBmaWxlIHBhdGhzIGlmIHByb3ZpZGVkOyBlbmFibGVzIEphdmEgbGlicmFyeSBpbnRlZ3JhdGlvbiBhbmQgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eVxuICAgKiovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxKYXJzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGFkZGl0aW9uYWwgZmlsZSBwYXRocyBmb3IgR2x1ZSBqb2IgcmVzb3VyY2UgZGVwZW5kZW5jaWVzIGVuYWJsaW5nIGV4dGVybmFsIGZpbGUgYWNjZXNzIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBQcm92aWRlcyByZWxhdGl2ZSBwYXRocyB0byBhZGRpdGlvbmFsIGZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlIEVUTCBzY3JpcHQgZm9yIGV4dGVybmFsIHJlc291cmNlIGFjY2VzcyBhbmQgZmlsZSBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogRmlsZSBkZXBlbmRlbmNpZXM7IEV4dGVybmFsIHJlc291cmNlczsgUmVzb3VyY2UgbWFuYWdlbWVudDsgRmlsZSBhY2Nlc3NcbiAgICpcbiAgICogQVdTOiBBZGRpdGlvbmFsIGZpbGVzIGZvciBHbHVlIGpvYiByZXNvdXJjZSBkZXBlbmRlbmNpZXMgYW5kIGV4dGVybmFsIGZpbGUgYWNjZXNzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgZmlsZSBwYXRocyBpZiBwcm92aWRlZDsgZW5hYmxlcyBleHRlcm5hbCBmaWxlIGFjY2VzcyBhbmQgcmVzb3VyY2UgZGVwZW5kZW5jaWVzXG4gICAqKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEZpbGVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGNvbnRpbnVvdXMgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZvciBHbHVlIGpvYiByZWFsLXRpbWUgbW9uaXRvcmluZyBlbmFibGluZyBsaXZlIGxvZyBzdHJlYW1pbmcgYW5kIHRyb3VibGVzaG9vdGluZyBzdXBwb3J0LiBXaGVuIGVuYWJsZWQsIHN0cmVhbXMgam9iIGxvZ3MgdG8gQ2xvdWRXYXRjaCBMb2dzIGluIHJlYWwtdGltZSBmb3IgbGl2ZSBtb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmcgZHVyaW5nIGpvYiBleGVjdXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUmVhbC10aW1lIG1vbml0b3Jpbmc7IExpdmUgbG9nIHN0cmVhbWluZzsgVHJvdWJsZXNob290aW5nIHN1cHBvcnQ7IE9wZXJhdGlvbmFsIHZpc2liaWxpdHlcbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBjb250aW51b3VzIGxvZ2dpbmcgZm9yIHJlYWwtdGltZSBtb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmdcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSB2YWxpZCBMb2dnaW5nQ29uZmlnIGlmIHByb3ZpZGVkOyBlbmFibGVzIHJlYWwtdGltZSBsb2cgc3RyZWFtaW5nIGFuZCBtb25pdG9yaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgY29udGludW91c0xvZ2dpbmc/OiBMb2dnaW5nQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsdWVKb2JMM0NvbnN0cnVjdFByb3BzIGV4dGVuZHMgTWRhYUwzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogUm9sZSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZGVwbG95IHRoZSBKb2IgY29kZS4gU2hvdWxkIGJlIG9idGFpbmVkIGZyb20gdGhlIERhdGFPcHMgUHJvamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudFJvbGVBcm4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRGF0YSBPcHMgcHJvamVjdCBidWNrZXQgd2hlcmUgam9iIHJlc291cmNlcyB3aWxsIGJlIGRlcGxveWVkIGFuZCB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSB0ZW1wb3Jhcnkgam9iIGxvY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0QnVja2V0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hcCBvZiBqb2IgbmFtZXMgdG8gam9iIGNvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSBqb2JDb25maWdzOiB7IFtrZXk6IHN0cmluZ106IEpvYkNvbmZpZyB9O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2x1ZSBTZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgZm9yIGFsbCBqb2JzLiBMaWtlbHkgc3VwcGxpZWQgYnkgdGhlIERhdGFPcHMgUHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkYXRhb3BzIHByb2plY3QgdG8gd2hpY2ggdGhlIGpvYiB3aWxsIGJlIGFzc29jaWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb3RpZmljYXRpb24gdG9waWMgQXJuXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Ub3BpY0Fybj86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YW9wcyBwcm9qZWN0IEtNUyBrZXkgQVJOLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdEtNU0Fybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdsdWVKb2JMM0NvbnN0cnVjdCBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdEttc0tleTogSUtleTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuZGVwbG95bWVudFJvbGVBcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVwbG95bWVudCByb2xlIEFSTiBpcyByZXF1aXJlZCBmb3Igam9iIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgY29uc3QgZGVwbG95bWVudFJvbGUgPSBNZGFhUm9sZS5mcm9tUm9sZUFybih0aGlzLnNjb3BlLCBgZGVwbG95bWVudC1yb2xlYCwgdGhpcy5wcm9wcy5kZXBsb3ltZW50Um9sZUFybik7XG4gICAgaWYgKCF0aGlzLnByb3BzLnByb2plY3RCdWNrZXROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3QgYnVja2V0IG5hbWUgaXMgcmVxdWlyZWQgZm9yIGpvYiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RCdWNrZXQgPSBNZGFhQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMuc2NvcGUsIGBwcm9qZWN0LWJ1Y2tldGAsIHRoaXMucHJvcHMucHJvamVjdEJ1Y2tldE5hbWUpO1xuICAgIGlmICghdGhpcy5wcm9wcy5wcm9qZWN0S01TQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3QgS01TIEtleSBpcyByZXF1aXJlZCBmb3Igam9iIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgdGhpcy5wcm9qZWN0S21zS2V5ID0gS2V5LmZyb21LZXlBcm4odGhpcywgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSwgdGhpcy5wcm9wcy5wcm9qZWN0S01TQXJuKTtcblxuICAgIC8vIEJ1aWxkIG91ciBqb2JzIVxuICAgIGNvbnN0IGFsbEpvYnMgPSB0aGlzLnByb3BzLmpvYkNvbmZpZ3M7XG4gICAgT2JqZWN0LmtleXMoYWxsSm9icykuZm9yRWFjaChqb2JOYW1lID0+IHtcbiAgICAgIGNvbnN0IGpvYkNvbmZpZyA9IGFsbEpvYnNbam9iTmFtZV07XG4gICAgICB0aGlzLmNyZWF0ZUpvYihqb2JOYW1lLCBqb2JDb25maWcsIGRlcGxveW1lbnRSb2xlLCBwcm9qZWN0QnVja2V0KTtcbiAgICB9KTtcbiAgICAvL0NESyBTMyBEZXBsb3ltZW50IGF1dG9tYXRpY2FsbHkgYWRkcyBpbmxpbmUgcG9saWN5IHRvIHByb2plY3QgZGVwbG95bWVudCByb2xlLlxuICAgIHRoaXMuc2NvcGUubm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGlmIChjaGlsZC5ub2RlLmlkLnN0YXJ0c1dpdGgoJ2RlcGxveW1lbnQtcm9sZScpKSB7XG4gICAgICAgIE1kYWFOYWdTdXBwcmVzc2lvbnMuYWRkQ29kZVJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgdXNlZCBvbmx5IGZvciBkZXBsb3ltZW50LicgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ1BvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnUG9saWN5IHVzZWQgb25seSBmb3IgZGVwbG95bWVudC4nIH0sXG4gICAgICAgICAgICB7IGlkOiAnUENJLkRTUy4zMjEtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdQb2xpY3kgdXNlZCBvbmx5IGZvciBkZXBsb3ltZW50LicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzOiBJU291cmNlW10sXG4gICAgcHJvamVjdEJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVwbG95bWVudElkOiBzdHJpbmcsXG4gICAgZGVwbG95bWVudFBhdGg6IHN0cmluZyxcbiAgICBleHRyYWN0OiBib29sZWFuLFxuICApOiBCdWNrZXREZXBsb3ltZW50IHtcbiAgICAvLyBEZXBsb3kgU291cmNlIGFzc2V0KHMpIHRvIC9kZXBsb3ltZW50L2xpYnMvPGpvYj4gbG9jYXRpb24uXG4gICAgcmV0dXJuIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMuc2NvcGUsIGRlcGxveW1lbnRJZCwge1xuICAgICAgc291cmNlczogYWRkaXRpb25hbEZpbGVzU291cmNlcyxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBwcm9qZWN0QnVja2V0LFxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IGRlcGxveW1lbnRQYXRoLFxuICAgICAgcm9sZTogZGVwbG95bWVudFJvbGUsXG4gICAgICBleHRyYWN0OiBleHRyYWN0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsU2NyaXB0cyhcbiAgICBqb2JOYW1lOiBzdHJpbmcsXG4gICAgam9iQ29uZmlnOiBKb2JDb25maWcsXG4gICAgcHJvamVjdEJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVmYXVsdEFyZ3VtZW50czogQ29uZmlndXJhdGlvbkVsZW1lbnQsXG4gICkge1xuICAgIGlmIChqb2JDb25maWcuYWRkaXRpb25hbFNjcmlwdHMpIHtcbiAgICAgIC8qKlxuICAgICAgICogR3JvdXAgYWxsIGZpbGVzIGF0IHBhcmVudCBkaXJlY3RvcnkgbGV2ZWwuIFRoaXMgd2lsbCBhbGxvdyBjcmVhdGluZyB6aXAgbGliIGFzc2VzdHMgYXQgdmFyaW91cyBkaXJlY3RvcnkgbGV2ZWxzXG4gICAgICAgKiBleC4gJy9tYWluL3NjcmlwdDEucHknICwgJy91dGlsL3NjcmlwdDIucHknICwgJy91dGlsL3NjcmlwdDMucHknIHdpbGwgY3JlYXRlIDIgemlwIGZpbGVzIHJlcHJlc2VudGluZyAnbWFpbicgYW5kICd1dGlscydcbiAgICAgICAqICAqL1xuICAgICAgY29uc3QgZGlyZWN0b3J5VG9GaWxlOiB7IFtmaWxlUGF0aDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICAgICAgam9iQ29uZmlnLmFkZGl0aW9uYWxTY3JpcHRzLmZvckVhY2goZmlsZUxvY2F0aW9uID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZmlsZUxvY2F0aW9uLnRyaW0oKSk7XG4gICAgICAgIGlmIChmaWxlUGF0aCBpbiBkaXJlY3RvcnlUb0ZpbGUpIHtcbiAgICAgICAgICBkaXJlY3RvcnlUb0ZpbGVbZmlsZVBhdGhdLnB1c2goYCEke3BhdGguYmFzZW5hbWUoZmlsZUxvY2F0aW9uLnRyaW0oKSl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlyZWN0b3J5VG9GaWxlW2ZpbGVQYXRoXSA9IFtgISR7cGF0aC5iYXNlbmFtZShmaWxlTG9jYXRpb24udHJpbSgpKX1gXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSBTb3VyY2UgYXNzZXQgZm9yIGVhY2ggZGlyZWN0b3J5XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMoZGlyZWN0b3J5VG9GaWxlKS5tYXAoKFtmaWxlUGF0aCwgZmlsZU5hbWVzXSkgPT4ge1xuICAgICAgICByZXR1cm4gU291cmNlLmFzc2V0KGZpbGVQYXRoLCB7IGV4Y2x1ZGU6IFsnKionLCAuLi5maWxlTmFtZXNdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZURlcGxveW1lbnQgPSB0aGlzLmRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICAgICAgYWRkaXRpb25hbEZpbGVzU291cmNlcyxcbiAgICAgICAgcHJvamVjdEJ1Y2tldCxcbiAgICAgICAgZGVwbG95bWVudFJvbGUsXG4gICAgICAgIGBqb2ItZGVwbG95bWVudC0ke2pvYk5hbWV9LWFkZGl0aW9uYWwtc2NyaXB0YCxcbiAgICAgICAgZGVwbG95bWVudFBhdGgsXG4gICAgICAgIGZhbHNlLCAvLyBHbHVlIGV4cGVjdHMgemlwIG9mIGFkZGl0aW9uYWwgc2NyaXB0cywgaGVuY2UgZGlzYWJsaW5nIHRoZSBleHRyYWN0aW9uXG4gICAgICApO1xuXG4gICAgICAvLyBFeHRyYWN0IHppcCBuYW1lKHMpIGZvciBlYWNoIHNvdXJjZSBhbmQgY3JlYXRlIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHMzIGxvY2F0aW9uc1xuICAgICAgY29uc3QgbGlicmFyeVppcE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGliTmFtZSA9IEZuLnNlbGVjdChpLCBhZGRpdGlvbmFsRmlsZURlcGxveW1lbnQub2JqZWN0S2V5cyk7IC8vIEV4dHJhY3QgZmlsZSBuYW1lIG9mIHppcCBjb250YWluaW5nIGFkZGl0aW9uYWwgc2NyaXB0c1xuICAgICAgICBsaWJyYXJ5WmlwTmFtZXMucHVzaChgczM6Ly8ke2FkZGl0aW9uYWxGaWxlRGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke2RlcGxveW1lbnRQYXRofS8ke2xpYk5hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB6aXAgZmlsZSBuYW1lcyB0byBkZWZhdWx0IGFyZ3VtZW50cy5cbiAgICAgIGlmIChkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLXB5LWZpbGVzJ10pIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddICs9ICcsJyArIGxpYnJhcnlaaXBOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLXB5LWZpbGVzJ10gPSBsaWJyYXJ5WmlwTmFtZXMuam9pbignLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQWRkaXRpb25hbEphcnMoXG4gICAgam9iTmFtZTogc3RyaW5nLFxuICAgIGpvYkNvbmZpZzogSm9iQ29uZmlnLFxuICAgIHByb2plY3RCdWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlZmF1bHRBcmd1bWVudHM6IENvbmZpZ3VyYXRpb25FbGVtZW50LFxuICApIHtcbiAgICBpZiAoam9iQ29uZmlnLmFkZGl0aW9uYWxKYXJzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIFNvdXJjZS5hc3NldChmaWxlUGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke2ZpbGVOYW1lfWBdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBwcm9qZWN0QnVja2V0LFxuICAgICAgICBkZXBsb3ltZW50Um9sZSxcbiAgICAgICAgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX0tYWRkaXRpb25hbC1qYXJgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV4dHJhSmFyTmFtZXMgPSBqb2JDb25maWcuYWRkaXRpb25hbEphcnMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1qYXJzJ10pIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1qYXJzJ10gKz0gJywnICsgZXh0cmFKYXJOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSA9IGV4dHJhSmFyTmFtZXMuam9pbignLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQWRkaXRpb25hbEZpbGVzKFxuICAgIGpvYk5hbWU6IHN0cmluZyxcbiAgICBqb2JDb25maWc6IEpvYkNvbmZpZyxcbiAgICBwcm9qZWN0QnVja2V0OiBJQnVja2V0LFxuICAgIGRlcGxveW1lbnRSb2xlOiBJUm9sZSxcbiAgICBkZWZhdWx0QXJndW1lbnRzOiBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgKSB7XG4gICAgaWYgKGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMpIHtcbiAgICAgIC8vIENyZWF0ZSBTb3VyY2UgYXNzZXQgZm9yIGVhY2ggZGlyZWN0b3J5XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzID0gam9iQ29uZmlnLmFkZGl0aW9uYWxGaWxlcy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIFNvdXJjZS5hc3NldChmaWxlUGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke2ZpbGVOYW1lfWBdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2ZpbGVzLyR7am9iTmFtZX1gO1xuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVEZXBsb3ltZW50ID0gdGhpcy5kZXBsb3lBZGRpdGlvbmFsRmlsZXMoXG4gICAgICAgIGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMsXG4gICAgICAgIHByb2plY3RCdWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWZpbGVgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBleHRyYUZpbGVOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtZmlsZXMnXSArPSAnLCcgKyBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWZpbGVzJ10gPSBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2Ioam9iTmFtZTogc3RyaW5nLCBqb2JDb25maWc6IEpvYkNvbmZpZywgZGVwbG95bWVudFJvbGU6IElSb2xlLCBwcm9qZWN0QnVja2V0OiBJQnVja2V0KSB7XG4gICAgY29uc3QgZGVmYXVsdEFyZ3VtZW50cyA9IGpvYkNvbmZpZy5kZWZhdWx0QXJndW1lbnRzID8gam9iQ29uZmlnLmRlZmF1bHRBcmd1bWVudHMgOiB7fTtcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5kaXJuYW1lKGpvYkNvbmZpZy5jb21tYW5kLnNjcmlwdExvY2F0aW9uLnRyaW0oKSk7XG4gICAgY29uc3Qgc2NyaXB0TmFtZSA9IHBhdGguYmFzZW5hbWUoam9iQ29uZmlnLmNvbW1hbmQuc2NyaXB0TG9jYXRpb24udHJpbSgpKTtcbiAgICBjb25zdCBzY3JpcHRTb3VyY2UgPSBTb3VyY2UuYXNzZXQoc2NyaXB0UGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke3NjcmlwdE5hbWV9YF0gfSk7XG5cbiAgICBjb25zdCBzY3JpcHREZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2pvYnMvJHtqb2JOYW1lfWA7XG4gICAgY29uc3Qgc2NyaXB0RGVwbG95bWVudCA9IG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMuc2NvcGUsIGBqb2ItZGVwbG95bWVudC0ke2pvYk5hbWV9YCwge1xuICAgICAgc291cmNlczogW3NjcmlwdFNvdXJjZV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogcHJvamVjdEJ1Y2tldCxcbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBzY3JpcHREZXBsb3ltZW50UGF0aCxcbiAgICAgIHJvbGU6IGRlcGxveW1lbnRSb2xlLFxuICAgICAgZXh0cmFjdDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQWRkaXRpb25hbFNjcmlwdHMoam9iTmFtZSwgam9iQ29uZmlnLCBwcm9qZWN0QnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgdGhpcy5hZGRBZGRpdGlvbmFsSmFycyhqb2JOYW1lLCBqb2JDb25maWcsIHByb2plY3RCdWNrZXQsIGRlcGxveW1lbnRSb2xlLCBkZWZhdWx0QXJndW1lbnRzKTtcbiAgICB0aGlzLmFkZEFkZGl0aW9uYWxGaWxlcyhqb2JOYW1lLCBqb2JDb25maWcsIHByb2plY3RCdWNrZXQsIGRlcGxveW1lbnRSb2xlLCBkZWZhdWx0QXJndW1lbnRzKTtcbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtTDEnLCByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ05JU1QuODAwLjUzLlI1LUxhbWJkYUNvbmN1cnJlbmN5JyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFJbnNpZGVWUEMnLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50IGFuZCBpbnRlcmFjdHMgb25seSB3aXRoIFMzLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ05JU1QuODAwLjUzLlI1LUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYUNvbmN1cnJlbmN5JyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnSElQQUEuU2VjdXJpdHktTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFJbnNpZGVWUEMnLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50IGFuZCBpbnRlcmFjdHMgb25seSB3aXRoIFMzLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ1BDSS5EU1MuMzIxLUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIC8vIENvbm5lY3Rpb25zIHdpbGwgcmVxdWlyZSBhbiBhcnJheSBvZiByZWZlcmVuY2VzIHdoZXJlIHRoZXkgYXJlIGRlZmluZWRcbiAgICBsZXQgY29ubmVjdGlvbnNDb25maWd1cmVkOiBDb25maWd1cmF0aW9uRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoam9iQ29uZmlnLmNvbm5lY3Rpb25zKSB7XG4gICAgICBjb25uZWN0aW9uc0NvbmZpZ3VyZWQgPSB7XG4gICAgICAgIGNvbm5lY3Rpb25zOiBqb2JDb25maWcuY29ubmVjdGlvbnMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tVGVtcERpciddID0gYHMzOi8vJHt0aGlzLnByb3BzLnByb2plY3RCdWNrZXROYW1lfS90ZW1wL2pvYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAvLyBhZGQgY29udGludW91cyBsb2dnaW5nIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYgKGpvYkNvbmZpZy5jb250aW51b3VzTG9nZ2luZykge1xuICAgICAgY29uc3QgbG9nR3JvdXBOYW1lID0gam9iTmFtZTtcbiAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXggPSAnL2F3cy9nbHVlJztcbiAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tY29udGludW91cy1sb2ctbG9nR3JvdXAnXSA9IHRoaXMuY3JlYXRlTG9nR3JvdXAoXG4gICAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgam9iQ29uZmlnLmNvbnRpbnVvdXNMb2dnaW5nLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYENvbnRpbnVvdXMgbG9nZ2luZyBub3QgZW5hYmxlZCBmb3Igam9iOiAke2pvYk5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBkZWZhdWx0QXJndW1lbnRzWyctLWlucHV0X3BhcmFtcyddO1xuICAgIGlmIChpbnB1dFBhcmFtcykge1xuICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1pbnB1dF9wYXJhbXMnXSA9IEpTT04uc3RyaW5naWZ5KGlucHV0UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJpdHkgY29uZmlndXJhdGlvbiBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgfVxuICAgIGNvbnN0IGpvYiA9IG5ldyBNZGFhQ2ZuSm9iKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LWpvYmAsIHtcbiAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgbmFtZTogam9iQ29uZmlnLmNvbW1hbmQubmFtZSxcbiAgICAgICAgcHl0aG9uVmVyc2lvbjogam9iQ29uZmlnLmNvbW1hbmQucHl0aG9uVmVyc2lvbixcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IGBzMzovLyR7c2NyaXB0RGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke3NjcmlwdERlcGxveW1lbnRQYXRofS8ke3NjcmlwdE5hbWV9YCxcbiAgICAgIH0sXG4gICAgICByb2xlOiBqb2JDb25maWcuZXhlY3V0aW9uUm9sZUFybixcbiAgICAgIGFsbG9jYXRlZENhcGFjaXR5OiBqb2JDb25maWcuYWxsb2NhdGVkQ2FwYWNpdHksXG4gICAgICBjb25uZWN0aW9uczogY29ubmVjdGlvbnNDb25maWd1cmVkLFxuICAgICAgZGVmYXVsdEFyZ3VtZW50czogZGVmYXVsdEFyZ3VtZW50cyxcbiAgICAgIGRlc2NyaXB0aW9uOiBqb2JDb25maWcuZGVzY3JpcHRpb24sXG4gICAgICBleGVjdXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLmV4ZWN1dGlvblByb3BlcnR5LFxuICAgICAgZ2x1ZVZlcnNpb246IGpvYkNvbmZpZy5nbHVlVmVyc2lvbixcbiAgICAgIG1heENhcGFjaXR5OiBqb2JDb25maWcubWF4Q2FwYWNpdHksXG4gICAgICBtYXhSZXRyaWVzOiBqb2JDb25maWcubWF4UmV0cmllcyxcbiAgICAgIG5hbWU6IGpvYk5hbWUsXG4gICAgICBub3RpZmljYXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLm5vdGlmaWNhdGlvblByb3BlcnR5LFxuICAgICAgbnVtYmVyT2ZXb3JrZXJzOiBqb2JDb25maWcubnVtYmVyT2ZXb3JrZXJzLFxuICAgICAgc2VjdXJpdHlDb25maWd1cmF0aW9uOiB0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB0aW1lb3V0OiBqb2JDb25maWcudGltZW91dCxcbiAgICAgIHdvcmtlclR5cGU6IGpvYkNvbmZpZy53b3JrZXJUeXBlLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICB9KTtcbiAgICBpZiAoam9iLm5hbWUpIHtcbiAgICAgIERhdGFPcHNQcm9qZWN0VXRpbHMuY3JlYXRlUHJvamVjdFNTTVBhcmFtKFxuICAgICAgICB0aGlzLnNjb3BlLFxuICAgICAgICB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgICAgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSxcbiAgICAgICAgYGpvYi9uYW1lLyR7am9iTmFtZX1gLFxuICAgICAgICBqb2IubmFtZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV2ZW50UnVsZSA9IHRoaXMuY3JlYXRlSm9iTW9uaXRvcmluZ0V2ZW50UnVsZShgJHtqb2JOYW1lfS1tb25pdG9yYCwgW2pvYi5uYW1lXSk7XG4gICAgICBpZiAoIXRoaXMucHJvcHMubm90aWZpY2F0aW9uVG9waWNBcm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3RpZmljYXRpb24gdG9waWMgQVJOIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgICB9XG4gICAgICBldmVudFJ1bGUuYWRkVGFyZ2V0KFxuICAgICAgICBuZXcgU25zVG9waWMoTWRhYVNuc1RvcGljLmZyb21Ub3BpY0Fybih0aGlzLnNjb3BlLCBgJHtqb2JOYW1lfS10b3BpY2AsIHRoaXMucHJvcHMubm90aWZpY2F0aW9uVG9waWNBcm4pKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2JNb25pdG9yaW5nRXZlbnRSdWxlKHJ1bGVOYW1lOiBzdHJpbmcsIGpvYk5hbWVzOiBzdHJpbmdbXSk6IFJ1bGUge1xuICAgIHJldHVybiBFdmVudEJyaWRnZUhlbHBlci5jcmVhdGVHbHVlTW9uaXRvcmluZ0V2ZW50UnVsZShcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIHJ1bGVOYW1lLFxuICAgICAgJ1dvcmtmbG93IEpvYiBmYWlsdXJlIGV2ZW50cycsXG4gICAgICB7XG4gICAgICAgIGpvYk5hbWU6IGpvYk5hbWVzLFxuICAgICAgICBzdGF0ZTogWydGQUlMRUQnLCAnVElNRU9VVCcsICdTVE9QUEVEJ10sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvZ0dyb3VwKGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXg6IHN0cmluZywgbG9nR3JvdXBOYW1lOiBzdHJpbmcsIGxvZ2dpbmdDb25maWc6IExvZ2dpbmdDb25maWcpOiBzdHJpbmcge1xuICAgIGxldCBsb2dHcm91cFJldGVudGlvbkRheXM6IFJldGVudGlvbkRheXM7XG5cbiAgICBpZiAobG9nZ2luZ0NvbmZpZy5sb2dHcm91cFJldGVudGlvbkRheXMgIT0gMCkge1xuICAgICAgbG9nR3JvdXBSZXRlbnRpb25EYXlzID0gbG9nZ2luZ0NvbmZpZy5sb2dHcm91cFJldGVudGlvbkRheXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ0dyb3VwUmV0ZW50aW9uRGF5cyA9IFJldGVudGlvbkRheXMuSU5GSU5JVEU7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nUHJvcHMgPSB7XG4gICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgbG9nR3JvdXBOYW1lOiBsb2dHcm91cE5hbWUsXG4gICAgICBsb2dHcm91cE5hbWVQYXRoUHJlZml4OiBsb2dHcm91cE5hbWVQYXRoUHJlZml4LFxuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5wcm9qZWN0S21zS2V5LFxuICAgICAgcmV0ZW50aW9uOiBsb2dHcm91cFJldGVudGlvbkRheXMsXG4gICAgfTtcbiAgICBuZXcgTWRhYUxvZ0dyb3VwKHRoaXMsIGxvZ0dyb3VwTmFtZSwgbG9nUHJvcHMpO1xuICAgIC8vIGB1cGRhdGVQcm9wc2AgYWx3YXlzIHJldHVybnMgYSBwcm9wIHdpdGggYSBsb2dHcm91cE5hbWVcbiAgICByZXR1cm4gdXBkYXRlUHJvcHMobG9nUHJvcHMpLmxvZ0dyb3VwTmFtZSE7XG4gIH1cbn1cbiJdfQ==
|
|
292
|
+
GlueJobL3Construct[_a] = { fqn: "@aws-mdaa/dataops-job-l3-construct.GlueJobL3Construct", version: "1.5.0" };
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztHQUdHO0FBRUgseUZBQTZFO0FBQzdFLHFFQUFpRTtBQUNqRSwrREFBdUQ7QUFDdkQsNkRBQW9EO0FBQ3BELDJEQUFxRDtBQUNyRCx5REFBK0U7QUFFL0UscUVBQWtGO0FBQ2xGLG1EQUEwRCxDQUFDLFNBQVM7QUFFcEUsNkJBQTZCO0FBQzdCLHVFQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNkNBQWlDO0FBRWpDLG1EQUFxRDtBQUNyRCwyRUFBK0Q7QUFDL0QsaURBQWdEO0FBQ2hELHVGQUFpRjtBQTRIakYsTUFBYSxrQkFBbUIsU0FBUSw4QkFBZTtJQUlyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyx5QkFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLDBCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsYUFBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFM0Ysa0JBQWtCO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUFDO1FBQ0gsZ0ZBQWdGO1FBQ2hGLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2dCQUNoRCwrQkFBbUIsQ0FBQywyQkFBMkIsQ0FDN0MsS0FBSyxFQUNMO29CQUNFLEVBQUUsRUFBRSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sRUFBRSx5Q0FBeUMsRUFBRTtvQkFDOUUsRUFBRSxFQUFFLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxFQUFFLGtDQUFrQyxFQUFFO29CQUN0RixFQUFFLEVBQUUsRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsa0NBQWtDLEVBQUU7b0JBQ3RGLEVBQUUsRUFBRSxFQUFFLCtCQUErQixFQUFFLE1BQU0sRUFBRSxrQ0FBa0MsRUFBRTtpQkFDcEYsRUFDRCxJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxxQkFBcUIsQ0FDM0Isc0JBQWlDLEVBQ2pDLE1BQWUsRUFDZixjQUFxQixFQUNyQixZQUFvQixFQUNwQixjQUFzQixFQUN0QixPQUFnQjtRQUVoQiw2REFBNkQ7UUFDN0QsT0FBTyxJQUFJLG9DQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ3BELE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsaUJBQWlCLEVBQUUsTUFBTTtZQUN6QixvQkFBb0IsRUFBRSxjQUFjO1lBQ3BDLElBQUksRUFBRSxjQUFjO1lBQ3BCLE9BQU8sRUFBRSxPQUFPO1NBQ2pCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsT0FBZSxFQUNmLFNBQW9CLEVBQ3BCLE1BQWUsRUFDZixjQUFxQixFQUNyQixnQkFBc0M7UUFFdEMsSUFBSSxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoQzs7O2tCQUdNO1lBQ04sTUFBTSxlQUFlLEdBQXFDLEVBQUUsQ0FBQztZQUM3RCxTQUFTLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLFFBQVEsSUFBSSxlQUFlLEVBQUUsQ0FBQztvQkFDaEMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekUsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgseUNBQXlDO1lBQ3pDLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsRUFBRSxFQUFFO2dCQUMzRixPQUFPLDBCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sY0FBYyxHQUFHLG1CQUFtQixPQUFPLEVBQUUsQ0FBQztZQUNwRCxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDekQsc0JBQXNCLEVBQ3RCLE1BQU0sRUFDTixjQUFjLEVBQ2Qsa0JBQWtCLE9BQU8sb0JBQW9CLEVBQzdDLGNBQWMsRUFDZCxLQUFLLENBQ04sQ0FBQztZQUVGLHNGQUFzRjtZQUN0RixNQUFNLGVBQWUsR0FBYSxFQUFFLENBQUM7WUFFckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN2RCxNQUFNLE9BQU8sR0FBRyxnQkFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyx5REFBeUQ7Z0JBQzVILGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsVUFBVSxJQUFJLGNBQWMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2xILENBQUM7WUFFRCxtRUFBbUU7WUFDbkUsSUFBSSxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLElBQUksR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdCQUFnQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNuRSxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FDdkIsT0FBZSxFQUNmLFNBQW9CLEVBQ3BCLE1BQWUsRUFDZixjQUFxQixFQUNyQixnQkFBc0M7UUFFdEMsSUFBSSxTQUFTLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDN0IseUNBQXlDO1lBQ3pDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ25ELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3BELE9BQU8sMEJBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLGNBQWMsR0FBRyxtQkFBbUIsT0FBTyxFQUFFLENBQUM7WUFFcEQsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ3pELHNCQUFzQixFQUN0QixNQUFNLEVBQ04sY0FBYyxFQUNkLGtCQUFrQixPQUFPLGlCQUFpQixFQUMxQyxjQUFjLEVBQ2QsSUFBSSxDQUNMLENBQUM7WUFFRixNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDcEQsT0FBTyxRQUFRLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxVQUFVLElBQUksY0FBYyxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ3BHLENBQUMsQ0FBQyxDQUFDO1lBRUgsbUVBQW1FO1lBQ25FLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztnQkFDckMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLElBQUksR0FBRyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQ3hCLE9BQWUsRUFDZixTQUFvQixFQUNwQixNQUFlLEVBQ2YsY0FBcUIsRUFDckIsZ0JBQXNDO1FBRXRDLElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzlCLHlDQUF5QztZQUN6QyxNQUFNLHNCQUFzQixHQUFHLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMxRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNuRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRCxPQUFPLDBCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLE9BQU8sRUFBRSxDQUFDO1lBQ3JELE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUN6RCxzQkFBc0IsRUFDdEIsTUFBTSxFQUNOLGNBQWMsRUFDZCxrQkFBa0IsT0FBTyxrQkFBa0IsRUFDM0MsY0FBYyxFQUNkLElBQUksQ0FDTCxDQUFDO1lBQ0YsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3BELE9BQU8sUUFBUSx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsVUFBVSxJQUFJLGNBQWMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNwRyxDQUFDLENBQUMsQ0FBQztZQUVILG1FQUFtRTtZQUNuRSxJQUFJLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLENBQUM7aUJBQU0sQ0FBQztnQkFDTixnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLFNBQVMsQ0FBQyxPQUFlLEVBQUUsU0FBb0IsRUFBRSxjQUFxQixFQUFFLE1BQWU7UUFDN0YsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3RGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUUsTUFBTSxZQUFZLEdBQUcsMEJBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsSUFBSSxFQUFFLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFckYsTUFBTSxvQkFBb0IsR0FBRyxtQkFBbUIsT0FBTyxFQUFFLENBQUM7UUFDMUQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLG9DQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLE9BQU8sRUFBRSxFQUFFO1lBQ3JGLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztZQUN2QixpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLG9CQUFvQixFQUFFLG9CQUFvQjtZQUMxQyxJQUFJLEVBQUUsY0FBYztZQUNwQixPQUFPLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDckYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RGLCtCQUFtQixDQUFDLDJCQUEyQixDQUM3QyxJQUFJLENBQUMsS0FBSyxFQUNWO1lBQ0UsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLGlFQUFpRSxFQUFFO1lBQ3BHO2dCQUNFLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLE1BQU0sRUFBRSxpRUFBaUU7YUFDMUU7WUFDRDtnQkFDRSxFQUFFLEVBQUUsZ0NBQWdDO2dCQUNwQyxNQUFNLEVBQUUsNEZBQTRGO2FBQ3JHO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLDBCQUEwQjtnQkFDOUIsTUFBTSxFQUNKLDJHQUEyRzthQUM5RztZQUNEO2dCQUNFLEVBQUUsRUFBRSxrQ0FBa0M7Z0JBQ3RDLE1BQU0sRUFBRSxpRUFBaUU7YUFDMUU7WUFDRDtnQkFDRSxFQUFFLEVBQUUsK0JBQStCO2dCQUNuQyxNQUFNLEVBQUUsaUVBQWlFO2FBQzFFO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLGdDQUFnQztnQkFDcEMsTUFBTSxFQUFFLDRGQUE0RjthQUNyRztZQUNEO2dCQUNFLEVBQUUsRUFBRSw2QkFBNkI7Z0JBQ2pDLE1BQU0sRUFBRSw0RkFBNEY7YUFDckc7WUFDRDtnQkFDRSxFQUFFLEVBQUUsMEJBQTBCO2dCQUM5QixNQUFNLEVBQ0osMkdBQTJHO2FBQzlHO1lBQ0Q7Z0JBQ0UsRUFBRSxFQUFFLHVCQUF1QjtnQkFDM0IsTUFBTSxFQUNKLDJHQUEyRzthQUM5RztTQUNGLEVBQ0QsSUFBSSxDQUNMLENBQUM7UUFDRix5RUFBeUU7UUFDekUsSUFBSSxxQkFBdUQsQ0FBQztRQUM1RCxJQUFJLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMxQixxQkFBcUIsR0FBRztnQkFDdEIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO2FBQ25DLENBQUM7UUFDSixDQUFDO1FBRUQsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLEdBQUcsUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsY0FBYyxPQUFPLEVBQUUsQ0FBQztRQUVyRixvREFBb0Q7UUFDcEQsSUFBSSxTQUFTLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUNoQyxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUM7WUFDN0IsTUFBTSxzQkFBc0IsR0FBRyxXQUFXLENBQUM7WUFDM0MsZ0JBQWdCLENBQUMsMkJBQTJCLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUNqRSxzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLFNBQVMsQ0FBQyxpQkFBaUIsQ0FDNUIsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN2RCxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQ2hCLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUMxQyxNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUM7UUFDM0YsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLElBQUksNEJBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsT0FBTyxNQUFNLEVBQUU7WUFDdkQsT0FBTyxFQUFFO2dCQUNQLElBQUksRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQzVCLGFBQWEsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLGFBQWE7Z0JBQzlDLGNBQWMsRUFBRSxRQUFRLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxVQUFVLElBQUksb0JBQW9CLElBQUksVUFBVSxFQUFFO2FBQzNHO1lBQ0QsSUFBSSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0I7WUFDaEMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLGlCQUFpQjtZQUM5QyxXQUFXLEVBQUUscUJBQXFCO1lBQ2xDLGdCQUFnQixFQUFFLGdCQUFnQjtZQUNsQyxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7WUFDbEMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLGlCQUFpQjtZQUM5QyxXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7WUFDbEMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO1lBQ2xDLFVBQVUsRUFBRSxTQUFTLENBQUMsVUFBVTtZQUNoQyxJQUFJLEVBQUUsT0FBTztZQUNiLG9CQUFvQixFQUFFLFNBQVMsQ0FBQyxvQkFBb0I7WUFDcEQsZUFBZSxFQUFFLFNBQVMsQ0FBQyxlQUFlO1lBQzFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMseUJBQXlCO1lBQzNELE9BQU8sRUFBRSxTQUFTLENBQUMsT0FBTztZQUMxQixVQUFVLEVBQUUsU0FBUyxDQUFDLFVBQVU7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtTQUMxQixDQUFDLENBQUM7UUFDSCxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QyxrREFBbUIsQ0FBQyxxQkFBcUIsQ0FDdkMsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFDakIsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQ3RCLFlBQVksT0FBTyxFQUFFLEVBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQ1QsQ0FBQztZQUVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxHQUFHLE9BQU8sVUFBVSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDckMsTUFBTSxJQUFJLEtBQUssQ0FBQyxrRUFBa0UsQ0FBQyxDQUFDO1lBQ3RGLENBQUM7WUFDRCxTQUFTLENBQUMsU0FBUyxDQUNqQixJQUFJLDZCQUFRLENBQUMsNkJBQVksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUN6RyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxRQUFnQixFQUFFLFFBQWtCO1FBQ3ZFLE9BQU8sc0NBQWlCLENBQUMsNkJBQTZCLENBQ3BELElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQ2pCLFFBQVEsRUFDUiw2QkFBNkIsRUFDN0I7WUFDRSxPQUFPLEVBQUUsUUFBUTtZQUNqQixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztTQUN4QyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLHNCQUE4QixFQUFFLFlBQW9CLEVBQUUsYUFBNEI7UUFDdkcsSUFBSSxxQkFBb0MsQ0FBQztRQUV6QyxJQUFJLGFBQWEsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxxQkFBcUIsR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUM7UUFDOUQsQ0FBQzthQUFNLENBQUM7WUFDTixxQkFBcUIsR0FBRyx3QkFBYSxDQUFDLFFBQVEsQ0FBQztRQUNqRCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUc7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3pCLFlBQVksRUFBRSxZQUFZO1lBQzFCLHNCQUFzQixFQUFFLHNCQUFzQjtZQUM5QyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDMUIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDO1FBQ0YsSUFBSSxvQ0FBWSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsMERBQTBEO1FBQzFELE9BQU8sSUFBQSw0QkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQWEsQ0FBQztJQUM3QyxDQUFDOztBQXZXSCxnREF3V0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBEYXRhT3BzUHJvamVjdFV0aWxzIH0gZnJvbSAnQGF3cy1tZGFhL2RhdGFvcHMtcHJvamVjdC1sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgRXZlbnRCcmlkZ2VIZWxwZXIgfSBmcm9tICdAYXdzLW1kYWEvZXZlbnRicmlkZ2UtaGVscGVyJztcbmltcG9ydCB7IE1kYWFDZm5Kb2IgfSBmcm9tICdAYXdzLW1kYWEvZ2x1ZS1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFSb2xlIH0gZnJvbSAnQGF3cy1tZGFhL2lhbS1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFCdWNrZXQgfSBmcm9tICdAYXdzLW1kYWEvczMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhTDNDb25zdHJ1Y3QsIE1kYWFMM0NvbnN0cnVjdFByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2wzLWNvbnN0cnVjdCc7XG5pbXBvcnQgeyBDZm5Kb2IgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50LCBJU291cmNlLCBTb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudCc7XG5pbXBvcnQgeyBNZGFhTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnQGF3cy1tZGFhL2NvbnN0cnVjdCc7IC8vTk9TT05BUlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU25zVG9waWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgTWRhYVNuc1RvcGljIH0gZnJvbSAnQGF3cy1tZGFhL3Nucy1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJ1bGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVsZW1lbnQgfSBmcm9tICdAYXdzLW1kYWEvY29uZmlnJztcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBNZGFhTG9nR3JvdXAgfSBmcm9tICdAYXdzLW1kYWEvY2xvdWR3YXRjaC1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IElLZXksIEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgdXBkYXRlUHJvcHMgfSBmcm9tICdAYXdzLW1kYWEvY2xvdWR3YXRjaC1jb25zdHJ1Y3RzL2xpYi9sb2dncm91cC11dGlscyc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5cbmV4cG9ydCB0eXBlIEpvYkNvbW1hbmRQeXRob25WZXJzaW9uID0gJzInIHwgJzMnIHwgdW5kZWZpbmVkO1xuZXhwb3J0IHR5cGUgSm9iQ29tbWFuZE5hbWUgPSAnZ2x1ZWV0bCcgfCAncHl0aG9uc2hlbGwnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEdsdWUgam9iIGxvZ2dpbmcgd2l0aCBDbG91ZFdhdGNoIGxvZyByZXRlbnRpb24gbWFuYWdlbWVudC5cbiAqXG4gKiBVc2UgY2FzZXM6IExvZyByZXRlbnRpb24gbWFuYWdlbWVudDsgQ29tcGxpYW5jZSByZXF1aXJlbWVudHM7IENvc3Qgb3B0aW1pemF0aW9uOyBBdWRpdCB0cmFpbCBtYW5hZ2VtZW50XG4gKlxuICogQVdTOiBDbG91ZFdhdGNoIGxvZyBncm91cCByZXRlbnRpb24gZm9yIEdsdWUgam9iIGV4ZWN1dGlvbiBsb2dzIGFuZCBtb25pdG9yaW5nXG4gKlxuICogVmFsaWRhdGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzIGlzIHJlcXVpcmVkIHdpdGggc3BlY2lmaWMgYWxsb3dlZCB2YWx1ZXMgZm9yIHJldGVudGlvbiBwZXJpb2RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nQ29uZmlnIHtcbiAgLyoqIENsb3VkV2F0Y2ggbG9nIGdyb3VwIHJldGVudGlvbiBpbiBkYXlzLiBBbGxvd2VkOiAxLDMsNSw3LDE0LDMwLDYwLDkwLDEyMCwxNTAsMTgwLDM2NSw0MDAsNTQ1LDczMSwxODI3LDM2NTMsIG9yIDAuICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwUmV0ZW50aW9uRGF5czogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBqb2IgY29tbWFuZCBzcGVjaWZ5aW5nIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogVXNlIGNhc2VzOiBKb2IgY29tbWFuZCBjb25maWd1cmF0aW9uOyBTY3JpcHQgZXhlY3V0aW9uOyBSdW50aW1lIGVudmlyb25tZW50OyBFVEwgam9iIHNldHVwXG4gKlxuICogQVdTOiBHbHVlIGpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnRcbiAqXG4gKiBWYWxpZGF0aW9uOiBuYW1lIGFuZCBzY3JpcHRMb2NhdGlvbiBhcmUgcmVxdWlyZWQ7IHB5dGhvblZlcnNpb24gaXMgb3B0aW9uYWwgd2l0aCBzcGVjaWZpYyBjb25zdHJhaW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYkNvbW1hbmQge1xuICAvKiogSm9iIHR5cGU6ICdnbHVlZXRsJyBmb3IgU3BhcmsgRVRMIG9yICdweXRob25zaGVsbCcgZm9yIFB5dGhvbiBzY3JpcHRzLiAqL1xuICByZWFkb25seSBuYW1lOiBKb2JDb21tYW5kTmFtZTtcbiAgLyoqIFB5dGhvbiB2ZXJzaW9uIGZvciBqb2IgcnVudGltZSAoJzInIG9yICczJykuICovXG4gIHJlYWRvbmx5IHB5dGhvblZlcnNpb24/OiBKb2JDb21tYW5kUHl0aG9uVmVyc2lvbjtcbiAgLyoqIFJlbGF0aXZlIHBhdGggdG8gdGhlIEdsdWUgc2NyaXB0IGZvciBqb2IgZXhlY3V0aW9uLiAqL1xuICByZWFkb25seSBzY3JpcHRMb2NhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JXb3JrZXJUeXBlID0gJ1N0YW5kYXJkJyB8ICdHLjFYJyB8ICdHLjJYJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIEdsdWUgam9iIGluY2x1ZGluZyBleGVjdXRpb24gcm9sZXMsIGNvbW1hbmRzLCBjYXBhY2l0eSwgYW5kIG1vbml0b3JpbmcuXG4gKlxuICogVXNlIGNhc2VzOiBFVEwgam9iIGNvbmZpZ3VyYXRpb247IERhdGEgdHJhbnNmb3JtYXRpb247IEpvYiByZXNvdXJjZSBtYW5hZ2VtZW50OyBEYXRhT3BzIHByb2Nlc3NpbmdcbiAqXG4gKiBBV1M6IEdsdWUgam9iIGNvbmZpZ3VyYXRpb24gZm9yIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uIHdvcmtmbG93c1xuICpcbiAqIFZhbGlkYXRpb246IGV4ZWN1dGlvblJvbGVBcm4sIGNvbW1hbmQsIGFuZCBkZXNjcmlwdGlvbiBhcmUgcmVxdWlyZWQ7IG90aGVyIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb25maWcge1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciBHbHVlIGpvYiBleGVjdXRpb24gcGVybWlzc2lvbnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVBcm46IHN0cmluZztcbiAgLyoqIEpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pbmcgc2NyaXB0IGFuZCBydW50aW1lIGVudmlyb25tZW50LiAqL1xuICByZWFkb25seSBjb21tYW5kOiBKb2JDb21tYW5kO1xuICAvKiogVGVtcGxhdGUgbmFtZSBmb3IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZS4gKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgYWxsb2NhdGVkIHRvIHRoZSBqb2IuICovXG4gIHJlYWRvbmx5IGFsbG9jYXRlZENhcGFjaXR5PzogbnVtYmVyO1xuICAvKiogQ29ubmVjdGlvbiBuYW1lcyBmb3IgZGF0YWJhc2UgYW5kIGV4dGVybmFsIHN5c3RlbSBhY2Nlc3MuICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25zPzogc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGpvYiBhdCBydW50aW1lLiAqL1xuICByZWFkb25seSBkZWZhdWx0QXJndW1lbnRzPzogQ29uZmlndXJhdGlvbkVsZW1lbnQ7XG4gIC8qKiBKb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG1hbmFnZW1lbnQuICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBFeGVjdXRpb24gcHJvcGVydGllcyBpbmNsdWRpbmcgbWF4aW11bSBjb25jdXJyZW50IHJ1bnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblByb3BlcnR5PzogQ2ZuSm9iLkV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHk7XG4gIC8qKiBHbHVlIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgZ2x1ZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIERQVSBjYXBhY2l0eSBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHJldHJ5IGNvdW50IGJlZm9yZSBqb2IgZmFpbHVyZS4gKi9cbiAgcmVhZG9ubHkgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIE5vdGlmaWNhdGlvbiBzZXR0aW5ncyBmb3Igam9iIG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nLiAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Qcm9wZXJ0eT86IENmbkpvYi5Ob3RpZmljYXRpb25Qcm9wZXJ0eVByb3BlcnR5O1xuICAvKiogTnVtYmVyIG9mIHdvcmtlcnMgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcuICovXG4gIHJlYWRvbmx5IG51bWJlck9mV29ya2Vycz86IG51bWJlcjtcbiAgLyoqIEpvYiB0aW1lb3V0IGluIG1pbnV0ZXMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBXb3JrZXIgdHlwZTogJ1N0YW5kYXJkJywgJ0cuMVgnLCBvciAnRy4yWCcuICovXG4gIHJlYWRvbmx5IHdvcmtlclR5cGU/OiBKb2JXb3JrZXJUeXBlO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBQeXRob24gc2NyaXB0cyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFNjcmlwdHM/OiBzdHJpbmdbXTtcbiAgLyoqIFJlbGF0aXZlIHBhdGhzIHRvIGFkZGl0aW9uYWwgSkFSIGZpbGVzIGZvciB0aGUgam9iLiAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSmFycz86IHN0cmluZ1tdO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBmaWxlcyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEZpbGVzPzogc3RyaW5nW107XG4gIC8qKiBDb250aW51b3VzIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmb3IgcmVhbC10aW1lIG1vbml0b3JpbmcuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVvdXNMb2dnaW5nPzogTG9nZ2luZ0NvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbHVlSm9iTDNDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFJvbGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRlcGxveSB0aGUgSm9iIGNvZGUuIFNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBEYXRhT3BzIFByb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRSb2xlQXJuPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIERhdGEgT3BzIHByb2plY3QgYnVja2V0IHdoZXJlIGpvYiByZXNvdXJjZXMgd2lsbCBiZSBkZXBsb3llZCBhbmQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgdGVtcG9yYXJ5IGpvYiBsb2NhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hcCBvZiBqb2IgbmFtZXMgdG8gam9iIGNvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSBqb2JDb25maWdzOiB7IFtrZXk6IHN0cmluZ106IEpvYkNvbmZpZyB9O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2x1ZSBTZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgZm9yIGFsbCBqb2JzLiBMaWtlbHkgc3VwcGxpZWQgYnkgdGhlIERhdGFPcHMgUHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkYXRhb3BzIHByb2plY3QgdG8gd2hpY2ggdGhlIGpvYiB3aWxsIGJlIGFzc29jaWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIHRvcGljIEFyblxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uVG9waWNBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGFvcHMgcHJvamVjdCBLTVMga2V5IEFSTi5cbiAgICovXG4gIHJlYWRvbmx5IGttc0Fybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdsdWVKb2JMM0NvbnN0cnVjdCBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkga21zS2V5OiBJS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHbHVlSm9iTDNDb25zdHJ1Y3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIGlmICghdGhpcy5wcm9wcy5kZXBsb3ltZW50Um9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXBsb3ltZW50IHJvbGUgQVJOIGlzIHJlcXVpcmVkIGZvciBqb2IgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZXBsb3ltZW50Um9sZSA9IE1kYWFSb2xlLmZyb21Sb2xlQXJuKHRoaXMuc2NvcGUsIGBkZXBsb3ltZW50LXJvbGVgLCB0aGlzLnByb3BzLmRlcGxveW1lbnRSb2xlQXJuKTtcbiAgICBpZiAoIXRoaXMucHJvcHMuYnVja2V0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0IGJ1Y2tldCBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBidWNrZXQgPSBNZGFhQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMuc2NvcGUsIGBwcm9qZWN0LWJ1Y2tldGAsIHRoaXMucHJvcHMuYnVja2V0TmFtZSk7XG4gICAgaWYgKCF0aGlzLnByb3BzLmttc0Fybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0IEtNUyBLZXkgaXMgcmVxdWlyZWQgZm9yIGpvYiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMua21zS2V5ID0gS2V5LmZyb21LZXlBcm4odGhpcywgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSA/PyAna21zLWtleScsIHRoaXMucHJvcHMua21zQXJuKTtcblxuICAgIC8vIEJ1aWxkIG91ciBqb2JzIVxuICAgIGNvbnN0IGFsbEpvYnMgPSB0aGlzLnByb3BzLmpvYkNvbmZpZ3M7XG4gICAgT2JqZWN0LmtleXMoYWxsSm9icykuZm9yRWFjaChqb2JOYW1lID0+IHtcbiAgICAgIGNvbnN0IGpvYkNvbmZpZyA9IGFsbEpvYnNbam9iTmFtZV07XG4gICAgICB0aGlzLmNyZWF0ZUpvYihqb2JOYW1lLCBqb2JDb25maWcsIGRlcGxveW1lbnRSb2xlLCBidWNrZXQpO1xuICAgIH0pO1xuICAgIC8vQ0RLIFMzIERlcGxveW1lbnQgYXV0b21hdGljYWxseSBhZGRzIGlubGluZSBwb2xpY3kgdG8gcHJvamVjdCBkZXBsb3ltZW50IHJvbGUuXG4gICAgdGhpcy5zY29wZS5ub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGUuaWQuc3RhcnRzV2l0aCgnZGVwbG95bWVudC1yb2xlJykpIHtcbiAgICAgICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgICAgeyBpZDogJ05JU1QuODAwLjUzLlI1LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnUG9saWN5IHVzZWQgb25seSBmb3IgZGVwbG95bWVudC4nIH0sXG4gICAgICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdQb2xpY3kgdXNlZCBvbmx5IGZvciBkZXBsb3ltZW50LicgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ1BvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgIGFkZGl0aW9uYWxGaWxlc1NvdXJjZXM6IElTb3VyY2VbXSxcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlcGxveW1lbnRJZDogc3RyaW5nLFxuICAgIGRlcGxveW1lbnRQYXRoOiBzdHJpbmcsXG4gICAgZXh0cmFjdDogYm9vbGVhbixcbiAgKTogQnVja2V0RGVwbG95bWVudCB7XG4gICAgLy8gRGVwbG95IFNvdXJjZSBhc3NldChzKSB0byAvZGVwbG95bWVudC9saWJzLzxqb2I+IGxvY2F0aW9uLlxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLnNjb3BlLCBkZXBsb3ltZW50SWQsIHtcbiAgICAgIHNvdXJjZXM6IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMsXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogYnVja2V0LFxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IGRlcGxveW1lbnRQYXRoLFxuICAgICAgcm9sZTogZGVwbG95bWVudFJvbGUsXG4gICAgICBleHRyYWN0OiBleHRyYWN0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsU2NyaXB0cyhcbiAgICBqb2JOYW1lOiBzdHJpbmcsXG4gICAgam9iQ29uZmlnOiBKb2JDb25maWcsXG4gICAgYnVja2V0OiBJQnVja2V0LFxuICAgIGRlcGxveW1lbnRSb2xlOiBJUm9sZSxcbiAgICBkZWZhdWx0QXJndW1lbnRzOiBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgKSB7XG4gICAgaWYgKGpvYkNvbmZpZy5hZGRpdGlvbmFsU2NyaXB0cykge1xuICAgICAgLyoqXG4gICAgICAgKiBHcm91cCBhbGwgZmlsZXMgYXQgcGFyZW50IGRpcmVjdG9yeSBsZXZlbC4gVGhpcyB3aWxsIGFsbG93IGNyZWF0aW5nIHppcCBsaWIgYXNzZXN0cyBhdCB2YXJpb3VzIGRpcmVjdG9yeSBsZXZlbHNcbiAgICAgICAqIGV4LiAnL21haW4vc2NyaXB0MS5weScgLCAnL3V0aWwvc2NyaXB0Mi5weScgLCAnL3V0aWwvc2NyaXB0My5weScgd2lsbCBjcmVhdGUgMiB6aXAgZmlsZXMgcmVwcmVzZW50aW5nICdtYWluJyBhbmQgJ3V0aWxzJ1xuICAgICAgICogICovXG4gICAgICBjb25zdCBkaXJlY3RvcnlUb0ZpbGU6IHsgW2ZpbGVQYXRoOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gICAgICBqb2JDb25maWcuYWRkaXRpb25hbFNjcmlwdHMuZm9yRWFjaChmaWxlTG9jYXRpb24gPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguZGlybmFtZShmaWxlTG9jYXRpb24udHJpbSgpKTtcbiAgICAgICAgaWYgKGZpbGVQYXRoIGluIGRpcmVjdG9yeVRvRmlsZSkge1xuICAgICAgICAgIGRpcmVjdG9yeVRvRmlsZVtmaWxlUGF0aF0ucHVzaChgISR7cGF0aC5iYXNlbmFtZShmaWxlTG9jYXRpb24udHJpbSgpKX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXJlY3RvcnlUb0ZpbGVbZmlsZVBhdGhdID0gW2AhJHtwYXRoLmJhc2VuYW1lKGZpbGVMb2NhdGlvbi50cmltKCkpfWBdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIFNvdXJjZSBhc3NldCBmb3IgZWFjaCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMgPSBPYmplY3QuZW50cmllcyhkaXJlY3RvcnlUb0ZpbGUpLm1hcCgoW2ZpbGVQYXRoLCBmaWxlTmFtZXNdKSA9PiB7XG4gICAgICAgIHJldHVybiBTb3VyY2UuYXNzZXQoZmlsZVBhdGgsIHsgZXhjbHVkZTogWycqKicsIC4uLmZpbGVOYW1lc10gfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveW1lbnRQYXRoID0gYGRlcGxveW1lbnQvbGlicy8ke2pvYk5hbWV9YDtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLXNjcmlwdGAsXG4gICAgICAgIGRlcGxveW1lbnRQYXRoLFxuICAgICAgICBmYWxzZSwgLy8gR2x1ZSBleHBlY3RzIHppcCBvZiBhZGRpdGlvbmFsIHNjcmlwdHMsIGhlbmNlIGRpc2FibGluZyB0aGUgZXh0cmFjdGlvblxuICAgICAgKTtcblxuICAgICAgLy8gRXh0cmFjdCB6aXAgbmFtZShzKSBmb3IgZWFjaCBzb3VyY2UgYW5kIGNyZWF0ZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzMyBsb2NhdGlvbnNcbiAgICAgIGNvbnN0IGxpYnJhcnlaaXBOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxpYk5hbWUgPSBGbi5zZWxlY3QoaSwgYWRkaXRpb25hbEZpbGVEZXBsb3ltZW50Lm9iamVjdEtleXMpOyAvLyBFeHRyYWN0IGZpbGUgbmFtZSBvZiB6aXAgY29udGFpbmluZyBhZGRpdGlvbmFsIHNjcmlwdHNcbiAgICAgICAgbGlicmFyeVppcE5hbWVzLnB1c2goYHMzOi8vJHthZGRpdGlvbmFsRmlsZURlcGxveW1lbnQuZGVwbG95ZWRCdWNrZXQuYnVja2V0TmFtZX0vJHtkZXBsb3ltZW50UGF0aH0vJHtsaWJOYW1lfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtcHktZmlsZXMnXSArPSAnLCcgKyBsaWJyYXJ5WmlwTmFtZXMuam9pbignLCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddID0gbGlicmFyeVppcE5hbWVzLmpvaW4oJywnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEFkZGl0aW9uYWxKYXJzKFxuICAgIGpvYk5hbWU6IHN0cmluZyxcbiAgICBqb2JDb25maWc6IEpvYkNvbmZpZyxcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlZmF1bHRBcmd1bWVudHM6IENvbmZpZ3VyYXRpb25FbGVtZW50LFxuICApIHtcbiAgICBpZiAoam9iQ29uZmlnLmFkZGl0aW9uYWxKYXJzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIFNvdXJjZS5hc3NldChmaWxlUGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke2ZpbGVOYW1lfWBdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWphcmAsXG4gICAgICAgIGRlcGxveW1lbnRQYXRoLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXh0cmFKYXJOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICByZXR1cm4gYHMzOi8vJHthZGRpdGlvbmFsRmlsZURlcGxveW1lbnQuZGVwbG95ZWRCdWNrZXQuYnVja2V0TmFtZX0vJHtkZXBsb3ltZW50UGF0aH0vJHtmaWxlTmFtZX1gO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFkZCBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB6aXAgZmlsZSBuYW1lcyB0byBkZWZhdWx0IGFyZ3VtZW50cy5cbiAgICAgIGlmIChkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSkge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSArPSAnLCcgKyBleHRyYUphck5hbWVzLmpvaW4oJywnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtamFycyddID0gZXh0cmFKYXJOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsRmlsZXMoXG4gICAgam9iTmFtZTogc3RyaW5nLFxuICAgIGpvYkNvbmZpZzogSm9iQ29uZmlnLFxuICAgIGJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVmYXVsdEFyZ3VtZW50czogQ29uZmlndXJhdGlvbkVsZW1lbnQsXG4gICkge1xuICAgIGlmIChqb2JDb25maWcuYWRkaXRpb25hbEZpbGVzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5kaXJuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIHJldHVybiBTb3VyY2UuYXNzZXQoZmlsZVBhdGgsIHsgZXhjbHVkZTogWycqKicsIGAhJHtmaWxlTmFtZX1gXSB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVwbG95bWVudFBhdGggPSBgZGVwbG95bWVudC9maWxlcy8ke2pvYk5hbWV9YDtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWZpbGVgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBleHRyYUZpbGVOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtZmlsZXMnXSArPSAnLCcgKyBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWZpbGVzJ10gPSBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2Ioam9iTmFtZTogc3RyaW5nLCBqb2JDb25maWc6IEpvYkNvbmZpZywgZGVwbG95bWVudFJvbGU6IElSb2xlLCBidWNrZXQ6IElCdWNrZXQpIHtcbiAgICBjb25zdCBkZWZhdWx0QXJndW1lbnRzID0gam9iQ29uZmlnLmRlZmF1bHRBcmd1bWVudHMgPyBqb2JDb25maWcuZGVmYXVsdEFyZ3VtZW50cyA6IHt9O1xuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmRpcm5hbWUoam9iQ29uZmlnLmNvbW1hbmQuc2NyaXB0TG9jYXRpb24udHJpbSgpKTtcbiAgICBjb25zdCBzY3JpcHROYW1lID0gcGF0aC5iYXNlbmFtZShqb2JDb25maWcuY29tbWFuZC5zY3JpcHRMb2NhdGlvbi50cmltKCkpO1xuICAgIGNvbnN0IHNjcmlwdFNvdXJjZSA9IFNvdXJjZS5hc3NldChzY3JpcHRQYXRoLCB7IGV4Y2x1ZGU6IFsnKionLCBgISR7c2NyaXB0TmFtZX1gXSB9KTtcblxuICAgIGNvbnN0IHNjcmlwdERlcGxveW1lbnRQYXRoID0gYGRlcGxveW1lbnQvam9icy8ke2pvYk5hbWV9YDtcbiAgICBjb25zdCBzY3JpcHREZXBsb3ltZW50ID0gbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcy5zY29wZSwgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX1gLCB7XG4gICAgICBzb3VyY2VzOiBbc2NyaXB0U291cmNlXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBidWNrZXQsXG4gICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogc2NyaXB0RGVwbG95bWVudFBhdGgsXG4gICAgICByb2xlOiBkZXBsb3ltZW50Um9sZSxcbiAgICAgIGV4dHJhY3Q6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEFkZGl0aW9uYWxTY3JpcHRzKGpvYk5hbWUsIGpvYkNvbmZpZywgYnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgdGhpcy5hZGRBZGRpdGlvbmFsSmFycyhqb2JOYW1lLCBqb2JDb25maWcsIGJ1Y2tldCwgZGVwbG95bWVudFJvbGUsIGRlZmF1bHRBcmd1bWVudHMpO1xuICAgIHRoaXMuYWRkQWRkaXRpb25hbEZpbGVzKGpvYk5hbWUsIGpvYkNvbmZpZywgYnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnQXdzU29sdXRpb25zLUwxJywgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnTklTVC44MDAuNTMuUjUtTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdISVBBQS5TZWN1cml0eS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnUENJLkRTUy4zMjEtTGFtYmRhQ29uY3VycmVuY3knLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYUluc2lkZVZQQycsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQgYW5kIGludGVyYWN0cyBvbmx5IHdpdGggUzMuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnUENJLkRTUy4zMjEtTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdISVBBQS5TZWN1cml0eS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICAvLyBDb25uZWN0aW9ucyB3aWxsIHJlcXVpcmUgYW4gYXJyYXkgb2YgcmVmZXJlbmNlcyB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkXG4gICAgbGV0IGNvbm5lY3Rpb25zQ29uZmlndXJlZDogQ29uZmlndXJhdGlvbkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGpvYkNvbmZpZy5jb25uZWN0aW9ucykge1xuICAgICAgY29ubmVjdGlvbnNDb25maWd1cmVkID0ge1xuICAgICAgICBjb25uZWN0aW9uczogam9iQ29uZmlnLmNvbm5lY3Rpb25zLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWZhdWx0QXJndW1lbnRzWyctLVRlbXBEaXInXSA9IGBzMzovLyR7dGhpcy5wcm9wcy5idWNrZXROYW1lfS90ZW1wL2pvYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAvLyBhZGQgY29udGludW91cyBsb2dnaW5nIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYgKGpvYkNvbmZpZy5jb250aW51b3VzTG9nZ2luZykge1xuICAgICAgY29uc3QgbG9nR3JvdXBOYW1lID0gam9iTmFtZTtcbiAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXggPSAnL2F3cy9nbHVlJztcbiAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tY29udGludW91cy1sb2ctbG9nR3JvdXAnXSA9IHRoaXMuY3JlYXRlTG9nR3JvdXAoXG4gICAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgam9iQ29uZmlnLmNvbnRpbnVvdXNMb2dnaW5nLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYENvbnRpbnVvdXMgbG9nZ2luZyBub3QgZW5hYmxlZCBmb3Igam9iOiAke2pvYk5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBkZWZhdWx0QXJndW1lbnRzWyctLWlucHV0X3BhcmFtcyddO1xuICAgIGlmIChpbnB1dFBhcmFtcykge1xuICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1pbnB1dF9wYXJhbXMnXSA9IEpTT04uc3RyaW5naWZ5KGlucHV0UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJpdHkgY29uZmlndXJhdGlvbiBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgfVxuICAgIGNvbnN0IGpvYiA9IG5ldyBNZGFhQ2ZuSm9iKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LWpvYmAsIHtcbiAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgbmFtZTogam9iQ29uZmlnLmNvbW1hbmQubmFtZSxcbiAgICAgICAgcHl0aG9uVmVyc2lvbjogam9iQ29uZmlnLmNvbW1hbmQucHl0aG9uVmVyc2lvbixcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IGBzMzovLyR7c2NyaXB0RGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke3NjcmlwdERlcGxveW1lbnRQYXRofS8ke3NjcmlwdE5hbWV9YCxcbiAgICAgIH0sXG4gICAgICByb2xlOiBqb2JDb25maWcuZXhlY3V0aW9uUm9sZUFybixcbiAgICAgIGFsbG9jYXRlZENhcGFjaXR5OiBqb2JDb25maWcuYWxsb2NhdGVkQ2FwYWNpdHksXG4gICAgICBjb25uZWN0aW9uczogY29ubmVjdGlvbnNDb25maWd1cmVkLFxuICAgICAgZGVmYXVsdEFyZ3VtZW50czogZGVmYXVsdEFyZ3VtZW50cyxcbiAgICAgIGRlc2NyaXB0aW9uOiBqb2JDb25maWcuZGVzY3JpcHRpb24sXG4gICAgICBleGVjdXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLmV4ZWN1dGlvblByb3BlcnR5LFxuICAgICAgZ2x1ZVZlcnNpb246IGpvYkNvbmZpZy5nbHVlVmVyc2lvbixcbiAgICAgIG1heENhcGFjaXR5OiBqb2JDb25maWcubWF4Q2FwYWNpdHksXG4gICAgICBtYXhSZXRyaWVzOiBqb2JDb25maWcubWF4UmV0cmllcyxcbiAgICAgIG5hbWU6IGpvYk5hbWUsXG4gICAgICBub3RpZmljYXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLm5vdGlmaWNhdGlvblByb3BlcnR5LFxuICAgICAgbnVtYmVyT2ZXb3JrZXJzOiBqb2JDb25maWcubnVtYmVyT2ZXb3JrZXJzLFxuICAgICAgc2VjdXJpdHlDb25maWd1cmF0aW9uOiB0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB0aW1lb3V0OiBqb2JDb25maWcudGltZW91dCxcbiAgICAgIHdvcmtlclR5cGU6IGpvYkNvbmZpZy53b3JrZXJUeXBlLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICB9KTtcbiAgICBpZiAoam9iLm5hbWUgJiYgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSkge1xuICAgICAgRGF0YU9wc1Byb2plY3RVdGlscy5jcmVhdGVQcm9qZWN0U1NNUGFyYW0oXG4gICAgICAgIHRoaXMuc2NvcGUsXG4gICAgICAgIHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgICB0aGlzLnByb3BzLnByb2plY3ROYW1lLFxuICAgICAgICBgam9iL25hbWUvJHtqb2JOYW1lfWAsXG4gICAgICAgIGpvYi5uYW1lLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXZlbnRSdWxlID0gdGhpcy5jcmVhdGVKb2JNb25pdG9yaW5nRXZlbnRSdWxlKGAke2pvYk5hbWV9LW1vbml0b3JgLCBbam9iLm5hbWVdKTtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5ub3RpZmljYXRpb25Ub3BpY0Fybikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdGlmaWNhdGlvbiB0b3BpYyBBUk4gaXMgcmVxdWlyZWQgZm9yIGpvYiBtb25pdG9yaW5nIGV2ZW50IHJ1bGUnKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50UnVsZS5hZGRUYXJnZXQoXG4gICAgICAgIG5ldyBTbnNUb3BpYyhNZGFhU25zVG9waWMuZnJvbVRvcGljQXJuKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LXRvcGljYCwgdGhpcy5wcm9wcy5ub3RpZmljYXRpb25Ub3BpY0FybikpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUpvYk1vbml0b3JpbmdFdmVudFJ1bGUocnVsZU5hbWU6IHN0cmluZywgam9iTmFtZXM6IHN0cmluZ1tdKTogUnVsZSB7XG4gICAgcmV0dXJuIEV2ZW50QnJpZGdlSGVscGVyLmNyZWF0ZUdsdWVNb25pdG9yaW5nRXZlbnRSdWxlKFxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgcnVsZU5hbWUsXG4gICAgICAnV29ya2Zsb3cgSm9iIGZhaWx1cmUgZXZlbnRzJyxcbiAgICAgIHtcbiAgICAgICAgam9iTmFtZTogam9iTmFtZXMsXG4gICAgICAgIHN0YXRlOiBbJ0ZBSUxFRCcsICdUSU1FT1VUJywgJ1NUT1BQRUQnXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9nR3JvdXAobG9nR3JvdXBOYW1lUGF0aFByZWZpeDogc3RyaW5nLCBsb2dHcm91cE5hbWU6IHN0cmluZywgbG9nZ2luZ0NvbmZpZzogTG9nZ2luZ0NvbmZpZyk6IHN0cmluZyB7XG4gICAgbGV0IGxvZ0dyb3VwUmV0ZW50aW9uRGF5czogUmV0ZW50aW9uRGF5cztcblxuICAgIGlmIChsb2dnaW5nQ29uZmlnLmxvZ0dyb3VwUmV0ZW50aW9uRGF5cyAhPSAwKSB7XG4gICAgICBsb2dHcm91cFJldGVudGlvbkRheXMgPSBsb2dnaW5nQ29uZmlnLmxvZ0dyb3VwUmV0ZW50aW9uRGF5cztcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nR3JvdXBSZXRlbnRpb25EYXlzID0gUmV0ZW50aW9uRGF5cy5JTkZJTklURTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dQcm9wcyA9IHtcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBsb2dHcm91cE5hbWU6IGxvZ0dyb3VwTmFtZSxcbiAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXg6IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmttc0tleSxcbiAgICAgIHJldGVudGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzLFxuICAgIH07XG4gICAgbmV3IE1kYWFMb2dHcm91cCh0aGlzLCBsb2dHcm91cE5hbWUsIGxvZ1Byb3BzKTtcbiAgICAvLyBgdXBkYXRlUHJvcHNgIGFsd2F5cyByZXR1cm5zIGEgcHJvcCB3aXRoIGEgbG9nR3JvdXBOYW1lXG4gICAgcmV0dXJuIHVwZGF0ZVByb3BzKGxvZ1Byb3BzKS5sb2dHcm91cE5hbWUhO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Don't include original .ts files when doing `npm pack`
|
|
2
|
+
*.ts
|
|
3
|
+
*.tsbuildinfo
|
|
4
|
+
.eslintrc.js
|
|
5
|
+
tsconfig.json
|
|
6
|
+
typedoc.json
|
|
7
|
+
|
|
8
|
+
# dev-related files
|
|
9
|
+
coverage
|
|
10
|
+
test/
|
|
11
|
+
|
|
12
|
+
# pack output
|
|
13
|
+
*.tgz
|
|
14
|
+
|
|
15
|
+
dist
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
#Exclude coverage reports for bundled deps
|
|
19
|
+
node_modules/**/coverage/*
|
|
20
|
+
# Exclude typescript source and config
|
|
21
|
+
#*.ts
|
|
22
|
+
#tsconfig.json
|
|
23
|
+
|
|
24
|
+
# Include javascript files and typescript declarations
|
|
25
|
+
!*.js
|
|
26
|
+
!*.d.ts
|
|
27
|
+
|
|
28
|
+
# Exclude jsii outdir
|
|
29
|
+
jsii-dist
|
|
30
|
+
|
|
31
|
+
# Include .jsii and .jsii.gz
|
|
32
|
+
!.jsii
|
|
33
|
+
!.jsii.gz
|
|
34
|
+
jest.config.js
|