@aws-cdk/aws-glue-alpha 2.262.2-alpha.0 → 2.264.0-alpha.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 +1331 -183
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +23 -1
- package/README.md +154 -0
- package/awslint.json +2 -1
- package/custom-resource-handlers/dist/aws-glue-alpha/partition-index-handler/index.js +1 -0
- package/custom-resource-handlers/dist/aws-glue-alpha/partition-index-provider.generated.d.ts +8 -0
- package/custom-resource-handlers/dist/aws-glue-alpha/partition-index-provider.generated.js +68 -0
- package/lib/catalog.d.ts +259 -0
- package/lib/catalog.js +424 -0
- package/lib/code.js +3 -3
- package/lib/connection.js +2 -2
- package/lib/data-format.js +5 -5
- package/lib/data-quality-ruleset.js +2 -2
- package/lib/database.d.ts +17 -14
- package/lib/database.js +43 -24
- package/lib/external-table.js +3 -3
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/jobs/job.js +2 -2
- package/lib/jobs/pyspark-etl-job.js +1 -1
- package/lib/jobs/pyspark-flex-etl-job.js +1 -1
- package/lib/jobs/pyspark-streaming-job.js +1 -1
- package/lib/jobs/python-shell-job.js +1 -1
- package/lib/jobs/ray-job.js +1 -1
- package/lib/jobs/scala-spark-etl-job.js +1 -1
- package/lib/jobs/scala-spark-flex-etl-job.js +1 -1
- package/lib/jobs/scala-spark-streaming-job.js +1 -1
- package/lib/jobs/spark-job.js +1 -1
- package/lib/partition-projection.js +1 -1
- package/lib/s3-table.js +11 -4
- package/lib/schema.js +1 -1
- package/lib/security-configuration.js +3 -3
- package/lib/storage-parameter.js +1 -1
- package/lib/table-base.d.ts +1 -1
- package/lib/table-base.js +126 -31
- package/lib/table-deprecated.js +1 -1
- package/lib/triggers/trigger-options.js +1 -1
- package/lib/triggers/workflow.js +2 -2
- package/package.json +11 -7
- package/scripts/airlift-custom-resource-handlers.sh +44 -0
|
@@ -149,7 +149,7 @@ let SecurityConfiguration = (() => {
|
|
|
149
149
|
SecurityConfiguration = _classThis = _classDescriptor.value;
|
|
150
150
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
151
151
|
}
|
|
152
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.SecurityConfiguration", version: "2.
|
|
152
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.SecurityConfiguration", version: "2.264.0-alpha.0" };
|
|
153
153
|
/** Uniquely identifies this class. */
|
|
154
154
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.SecurityConfiguration';
|
|
155
155
|
/**
|
|
@@ -202,7 +202,7 @@ let SecurityConfiguration = (() => {
|
|
|
202
202
|
const kmsKeyCreationRequired = (props.s3Encryption && props.s3Encryption.mode === S3EncryptionMode.KMS && !props.s3Encryption.kmsKey) ||
|
|
203
203
|
(props.cloudWatchEncryption && !props.cloudWatchEncryption.kmsKey) ||
|
|
204
204
|
(props.jobBookmarksEncryption && !props.jobBookmarksEncryption.kmsKey);
|
|
205
|
-
const autoCreatedKmsKey = kmsKeyCreationRequired ? new kms.Key(this, 'Key') : undefined;
|
|
205
|
+
const autoCreatedKmsKey = kmsKeyCreationRequired ? new kms.Key(this, 'Key', { enableKeyRotation: true }) : undefined;
|
|
206
206
|
let cloudWatchEncryption;
|
|
207
207
|
if (props.cloudWatchEncryption) {
|
|
208
208
|
this.cloudWatchEncryptionKey = props.cloudWatchEncryption.kmsKey || autoCreatedKmsKey;
|
|
@@ -250,4 +250,4 @@ let SecurityConfiguration = (() => {
|
|
|
250
250
|
return SecurityConfiguration = _classThis;
|
|
251
251
|
})();
|
|
252
252
|
exports.SecurityConfiguration = SecurityConfiguration;
|
|
253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWdFO0FBQ2hFLHlEQUEyQztBQUMzQyxzREFBd0M7QUFDeEMsMkNBQStDO0FBQy9DLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBYzFFOzs7R0FHRztBQUNILElBQVksZ0JBY1g7QUFkRCxXQUFZLGdCQUFnQjtJQUMxQjs7OztPQUlHO0lBQ0gseUNBQXFCLENBQUE7SUFFckI7Ozs7T0FJRztJQUNILG1DQUFlLENBQUE7QUFDakIsQ0FBQyxFQWRXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBYzNCO0FBRUQ7OztHQUdHO0FBQ0gsSUFBWSx3QkFPWDtBQVBELFdBQVksd0JBQXdCO0lBQ2xDOzs7O09BSUc7SUFDSCwyQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFQVyx3QkFBd0Isd0NBQXhCLHdCQUF3QixRQU9uQztBQUVEOzs7R0FHRztBQUNILElBQVksMEJBT1g7QUFQRCxXQUFZLDBCQUEwQjtJQUNwQzs7OztPQUlHO0lBQ0gseURBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQVBXLDBCQUEwQiwwQ0FBMUIsMEJBQTBCLFFBT3JDO0FBZ0ZEOzs7Ozs7OztHQVFHO0lBRVUscUJBQXFCOzRCQURqQyxvQ0FBa0I7Ozs7c0JBQ3dCLEdBQUcsQ0FBQyxRQUFROzs7cUNBQXBCLFNBQVEsV0FBWTs7Ozt5REFrR3BELGlDQUFjO1lBQ2Ysa09BQVcseUJBQXlCLDZEQUVuQztZQXJHSCw2S0FzR0M7Ozs7O1FBckdDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsK0NBQStDLENBQUM7UUFFdkc7Ozs7OztXQU1HO1FBQ0ksTUFB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LFlBQVksRUFBRSxDQUFDO2dCQUN2QixJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNyRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxJQUFJLGlCQUFpQixDQUFDO2dCQUN4RSxDQUFDO2dCQUNELHlHQUF5RztnQkFDekcsYUFBYSxHQUFHLENBQUM7d0JBQ2YsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJO3dCQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTTtxQkFDL0MsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE1BQU0sUUFBUSxHQUFHLElBQUksbUNBQXdCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDOUQsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN2Qix1QkFBdUIsRUFBRTtvQkFDdkIsb0JBQW9CO29CQUNwQixzQkFBc0I7b0JBQ3RCLGFBQWE7aUJBQ2Q7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztTQUMxQjtRQUdELElBQVcseUJBQXlCO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekQ7O1lBckdVLHVEQUFxQjs7Ozs7QUFBckIsc0RBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuU2VjdXJpdHlDb25maWd1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgTGF6eSwgTmFtZXMgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IG1lbW9pemVkR2V0dGVyLCBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcblxuLyoqXG4gKiBJbnRlcmZhY2UgcmVwcmVzZW50aW5nIGEgY3JlYXRlZCBvciBhbiBpbXBvcnRlZCBgU2VjdXJpdHlDb25maWd1cmF0aW9uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU2VjdXJpdHlDb25maWd1cmF0aW9uIGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VjdXJpdHkgY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gbW9kZSBmb3IgUzMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX1MzRW5jcnlwdGlvbi5odG1sI0dsdWUtVHlwZS1TM0VuY3J5cHRpb24tUzNFbmNyeXB0aW9uTW9kZVxuICovXG5leHBvcnQgZW51bSBTM0VuY3J5cHRpb25Nb2RlIHtcbiAgLyoqXG4gICAqIFNlcnZlciBzaWRlIGVuY3J5cHRpb24gKFNTRSkgd2l0aCBhbiBBbWF6b24gUzMtbWFuYWdlZCBrZXkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvVXNpbmdTZXJ2ZXJTaWRlRW5jcnlwdGlvbi5odG1sXG4gICAqL1xuICBTM19NQU5BR0VEID0gJ1NTRS1TMycsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRSkgd2l0aCBhbiBBV1MgS01TIGtleSBtYW5hZ2VkIGJ5IHRoZSBhY2NvdW50IG93bmVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1VzaW5nS01TRW5jcnlwdGlvbi5odG1sXG4gICAqL1xuICBLTVMgPSAnU1NFLUtNUycsXG59XG5cbi8qKlxuICogRW5jcnlwdGlvbiBtb2RlIGZvciBDbG91ZFdhdGNoIExvZ3MuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0Nsb3VkV2F0Y2hFbmNyeXB0aW9uLmh0bWwjR2x1ZS1UeXBlLUNsb3VkV2F0Y2hFbmNyeXB0aW9uLUNsb3VkV2F0Y2hFbmNyeXB0aW9uTW9kZVxuICovXG5leHBvcnQgZW51bSBDbG91ZFdhdGNoRW5jcnlwdGlvbk1vZGUge1xuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5IG1hbmFnZWQgYnkgdGhlIGFjY291bnQgb3duZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvVXNpbmdLTVNFbmNyeXB0aW9uLmh0bWxcbiAgICovXG4gIEtNUyA9ICdTU0UtS01TJyxcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIG1vZGUgZm9yIEpvYiBCb29rbWFya3MuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0pvYkJvb2ttYXJrc0VuY3J5cHRpb24uaHRtbCNHbHVlLVR5cGUtSm9iQm9va21hcmtzRW5jcnlwdGlvbi1Kb2JCb29rbWFya3NFbmNyeXB0aW9uTW9kZVxuICovXG5leHBvcnQgZW51bSBKb2JCb29rbWFya3NFbmNyeXB0aW9uTW9kZSB7XG4gIC8qKlxuICAgKiBDbGllbnQtc2lkZSBlbmNyeXB0aW9uIChDU0UpIHdpdGggYW4gQVdTIEtNUyBrZXkgbWFuYWdlZCBieSB0aGUgYWNjb3VudCBvd25lci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Vc2luZ0NsaWVudFNpZGVFbmNyeXB0aW9uLmh0bWxcbiAgICovXG4gIENMSUVOVF9TSURFX0tNUyA9ICdDU0UtS01TJyxcbn1cblxuLyoqXG4gKiBTMyBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUzNFbmNyeXB0aW9uIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGU6IFMzRW5jcnlwdGlvbk1vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHRvIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgZGF0YS5cbiAgICogQGRlZmF1bHQgbm8ga21zIGtleSBpZiBtb2RlID0gUzNfTUFOQUdFRC4gQSBrZXkgd2lsbCBiZSBjcmVhdGVkIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQgYW5kIG1vZGUgPSBLTVMuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcbn1cblxuLyoqXG4gKiBDbG91ZFdhdGNoIExvZ3MgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkV2F0Y2hFbmNyeXB0aW9uIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZTogQ2xvdWRXYXRjaEVuY3J5cHRpb25Nb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB0byBiZSB1c2VkIHRvIGVuY3J5cHQgdGhlIGRhdGEuXG4gICAqIEBkZWZhdWx0IEEga2V5IHdpbGwgYmUgY3JlYXRlZCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXlSZWY7XG59XG5cbi8qKlxuICogSm9iIGJvb2ttYXJrcyBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSm9iQm9va21hcmtzRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBFbmNyeXB0aW9uIG1vZGUuXG4gICAqL1xuICByZWFkb25seSBtb2RlOiBKb2JCb29rbWFya3NFbmNyeXB0aW9uTW9kZTtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdG8gYmUgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLlxuICAgKiBAZGVmYXVsdCBBIGtleSB3aWxsIGJlIGNyZWF0ZWQgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5UmVmO1xufVxuXG4vKipcbiAqIENvbnN0cnVjdGlvbnMgcHJvcGVydGllcyBvZiBgU2VjdXJpdHlDb25maWd1cmF0aW9uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWN1cml0eUNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2VjdXJpdHkgY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBnZW5lcmF0ZWQgYnkgQ0RLLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgQW1hem9uIENsb3VkV2F0Y2ggTG9ncy5cbiAgICogQGRlZmF1bHQgbm8gY2xvdWR3YXRjaCBsb2dzIGVuY3J5cHRpb24uXG4gICAqL1xuICByZWFkb25seSBjbG91ZFdhdGNoRW5jcnlwdGlvbj86IENsb3VkV2F0Y2hFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBHbHVlIEpvYiBCb29rbWFya3MuXG4gICAqIEBkZWZhdWx0IG5vIGpvYiBib29rbWFya3MgZW5jcnlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGpvYkJvb2ttYXJrc0VuY3J5cHRpb24/OiBKb2JCb29rbWFya3NFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBBbWF6b24gU2ltcGxlIFN0b3JhZ2UgU2VydmljZSAoQW1hem9uIFMzKSBkYXRhLlxuICAgKiBAZGVmYXVsdCBubyBzMyBlbmNyeXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgczNFbmNyeXB0aW9uPzogUzNFbmNyeXB0aW9uO1xufVxuXG4vKipcbiAqIEEgc2VjdXJpdHkgY29uZmlndXJhdGlvbiBpcyBhIHNldCBvZiBzZWN1cml0eSBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgQVdTIEdsdWUgdG8gZW5jcnlwdCBkYXRhIGF0IHJlc3QuXG4gKlxuICogVGhlIGZvbGxvd2luZyBzY2VuYXJpb3Mgc2hvdyBzb21lIG9mIHRoZSB3YXlzIHRoYXQgeW91IGNhbiB1c2UgYSBzZWN1cml0eSBjb25maWd1cmF0aW9uLlxuICogLSBBdHRhY2ggYSBzZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGFuIEFXUyBHbHVlIGNyYXdsZXIgdG8gd3JpdGUgZW5jcnlwdGVkIEFtYXpvbiBDbG91ZFdhdGNoIExvZ3MuXG4gKiAtIEF0dGFjaCBhIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gdG8gYW4gZXh0cmFjdCwgdHJhbnNmb3JtLCBhbmQgbG9hZCAoRVRMKSBqb2IgdG8gd3JpdGUgZW5jcnlwdGVkIEFtYXpvbiBTaW1wbGUgU3RvcmFnZSBTZXJ2aWNlIChBbWF6b24gUzMpIHRhcmdldHMgYW5kIGVuY3J5cHRlZCBDbG91ZFdhdGNoIExvZ3MuXG4gKiAtIEF0dGFjaCBhIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gdG8gYW4gRVRMIGpvYiB0byB3cml0ZSBpdHMgam9icyBib29rbWFya3MgYXMgZW5jcnlwdGVkIEFtYXpvbiBTMyBkYXRhLlxuICogLSBBdHRhY2ggYSBzZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGEgZGV2ZWxvcG1lbnQgZW5kcG9pbnQgdG8gd3JpdGUgZW5jcnlwdGVkIEFtYXpvbiBTMyB0YXJnZXRzLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlDb25maWd1cmF0aW9uIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSVNlY3VyaXR5Q29uZmlndXJhdGlvbiB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuU2VjdXJpdHlDb25maWd1cmF0aW9uJztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIENvbm5lY3Rpb24gY29uc3RydWN0IHRoYXQgcmVwcmVzZW50cyBhbiBleHRlcm5hbCBzZWN1cml0eSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGNyZWF0aW5nIGNvbnN0cnVjdCAodXN1YWxseSBgdGhpc2ApLlxuICAgKiBAcGFyYW0gaWQgVGhlIGNvbnN0cnVjdCdzIGlkLlxuICAgKiBAcGFyYW0gc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZSBuYW1lIG9mIGV4dGVybmFsIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgaWQ6IHN0cmluZyxcbiAgICBzZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmcpOiBJU2VjdXJpdHlDb25maWd1cmF0aW9uIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJU2VjdXJpdHlDb25maWd1cmF0aW9uIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lID0gc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIGluIENsb3VkV2F0Y2ggZW5jcnlwdGlvbiBpZiBpdCByZXF1aXJlcyBhIGttcyBrZXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xvdWRXYXRjaEVuY3J5cHRpb25LZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBpbiBqb2IgYm9va21hcmtzIGVuY3J5cHRpb24gaWYgaXQgcmVxdWlyZXMgYSBrbXMga2V5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGpvYkJvb2ttYXJrc0VuY3J5cHRpb25LZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBpbiBTMyBlbmNyeXB0aW9uIGlmIGl0IHJlcXVpcmVzIGEga21zIGtleS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzM0VuY3J5cHRpb25LZXk/OiBrbXMuSUtleVJlZjtcblxuICBwcml2YXRlIHJlc291cmNlOiBDZm5TZWN1cml0eUNvbmZpZ3VyYXRpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VjdXJpdHlDb25maWd1cmF0aW9uUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5zZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge30pLFxuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIGlmICghcHJvcHMuczNFbmNyeXB0aW9uICYmICFwcm9wcy5jbG91ZFdhdGNoRW5jcnlwdGlvbiAmJiAhcHJvcHMuam9iQm9va21hcmtzRW5jcnlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IobGl0YEVuY3J5cHRpb25SZXF1aXJlZGAsICdPbmUgb2YgY2xvdWRXYXRjaEVuY3J5cHRpb24sIGpvYkJvb2ttYXJrc0VuY3J5cHRpb24gb3IgczNFbmNyeXB0aW9uIG11c3QgYmUgZGVmaW5lZCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGttc0tleUNyZWF0aW9uUmVxdWlyZWQgPVxuICAgICAgKHByb3BzLnMzRW5jcnlwdGlvbiAmJiBwcm9wcy5zM0VuY3J5cHRpb24ubW9kZSA9PT0gUzNFbmNyeXB0aW9uTW9kZS5LTVMgJiYgIXByb3BzLnMzRW5jcnlwdGlvbi5rbXNLZXkpIHx8XG4gICAgICAocHJvcHMuY2xvdWRXYXRjaEVuY3J5cHRpb24gJiYgIXByb3BzLmNsb3VkV2F0Y2hFbmNyeXB0aW9uLmttc0tleSkgfHxcbiAgICAgIChwcm9wcy5qb2JCb29rbWFya3NFbmNyeXB0aW9uICYmICFwcm9wcy5qb2JCb29rbWFya3NFbmNyeXB0aW9uLmttc0tleSk7XG4gICAgY29uc3QgYXV0b0NyZWF0ZWRLbXNLZXkgPSBrbXNLZXlDcmVhdGlvblJlcXVpcmVkID8gbmV3IGttcy5LZXkodGhpcywgJ0tleScpIDogdW5kZWZpbmVkO1xuXG4gICAgbGV0IGNsb3VkV2F0Y2hFbmNyeXB0aW9uO1xuICAgIGlmIChwcm9wcy5jbG91ZFdhdGNoRW5jcnlwdGlvbikge1xuICAgICAgdGhpcy5jbG91ZFdhdGNoRW5jcnlwdGlvbktleSA9IHByb3BzLmNsb3VkV2F0Y2hFbmNyeXB0aW9uLmttc0tleSB8fCBhdXRvQ3JlYXRlZEttc0tleTtcbiAgICAgIGNsb3VkV2F0Y2hFbmNyeXB0aW9uID0ge1xuICAgICAgICBjbG91ZFdhdGNoRW5jcnlwdGlvbk1vZGU6IHByb3BzLmNsb3VkV2F0Y2hFbmNyeXB0aW9uLm1vZGUsXG4gICAgICAgIGttc0tleUFybjogdGhpcy5jbG91ZFdhdGNoRW5jcnlwdGlvbktleT8ua2V5UmVmLmtleUFybixcbiAgICAgIH07XG4gICAgfVxuXG4gICAgbGV0IGpvYkJvb2ttYXJrc0VuY3J5cHRpb247XG4gICAgaWYgKHByb3BzLmpvYkJvb2ttYXJrc0VuY3J5cHRpb24pIHtcbiAgICAgIHRoaXMuam9iQm9va21hcmtzRW5jcnlwdGlvbktleSA9IHByb3BzLmpvYkJvb2ttYXJrc0VuY3J5cHRpb24ua21zS2V5IHx8IGF1dG9DcmVhdGVkS21zS2V5O1xuICAgICAgam9iQm9va21hcmtzRW5jcnlwdGlvbiA9IHtcbiAgICAgICAgam9iQm9va21hcmtzRW5jcnlwdGlvbk1vZGU6IHByb3BzLmpvYkJvb2ttYXJrc0VuY3J5cHRpb24ubW9kZSxcbiAgICAgICAga21zS2V5QXJuOiB0aGlzLmpvYkJvb2ttYXJrc0VuY3J5cHRpb25LZXk/LmtleVJlZi5rZXlBcm4sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBzM0VuY3J5cHRpb25zO1xuICAgIGlmIChwcm9wcy5zM0VuY3J5cHRpb24pIHtcbiAgICAgIGlmIChwcm9wcy5zM0VuY3J5cHRpb24ubW9kZSA9PT0gUzNFbmNyeXB0aW9uTW9kZS5LTVMpIHtcbiAgICAgICAgdGhpcy5zM0VuY3J5cHRpb25LZXkgPSBwcm9wcy5zM0VuY3J5cHRpb24ua21zS2V5IHx8IGF1dG9DcmVhdGVkS21zS2V5O1xuICAgICAgfVxuICAgICAgLy8gTk9URTogQ2xvdWRGb3JtYXRpb25zIGVycm9ycyBvdXQgaWYgYXJyYXkgaXMgb2YgbGVuZ3RoID4gMS4gVGhhdCdzIHdoeSB0aGUgcHJvcHMgZG9uJ3QgZXhwb3NlIGFuIGFycmF5XG4gICAgICBzM0VuY3J5cHRpb25zID0gW3tcbiAgICAgICAgczNFbmNyeXB0aW9uTW9kZTogcHJvcHMuczNFbmNyeXB0aW9uLm1vZGUsXG4gICAgICAgIGttc0tleUFybjogdGhpcy5zM0VuY3J5cHRpb25LZXk/LmtleVJlZi5rZXlBcm4sXG4gICAgICB9XTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBDZm5TZWN1cml0eUNvbmZpZ3VyYXRpb24odGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBlbmNyeXB0aW9uQ29uZmlndXJhdGlvbjoge1xuICAgICAgICBjbG91ZFdhdGNoRW5jcnlwdGlvbixcbiAgICAgICAgam9iQm9va21hcmtzRW5jcnlwdGlvbixcbiAgICAgICAgczNFbmNyeXB0aW9ucyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gcmVzb3VyY2U7XG4gIH1cblxuICBAbWVtb2l6ZWRHZXR0ZXJcbiAgcHVibGljIGdldCBzZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UucmVmKTtcbiAgfVxufVxuIl19
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHktY29uZmlndXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNlY3VyaXR5LWNvbmZpZ3VyYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbURBQWdFO0FBQ2hFLHlEQUEyQztBQUMzQyxzREFBd0M7QUFDeEMsMkNBQStDO0FBQy9DLDRFQUE0RTtBQUM1RSw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBYzFFOzs7R0FHRztBQUNILElBQVksZ0JBY1g7QUFkRCxXQUFZLGdCQUFnQjtJQUMxQjs7OztPQUlHO0lBQ0gseUNBQXFCLENBQUE7SUFFckI7Ozs7T0FJRztJQUNILG1DQUFlLENBQUE7QUFDakIsQ0FBQyxFQWRXLGdCQUFnQixnQ0FBaEIsZ0JBQWdCLFFBYzNCO0FBRUQ7OztHQUdHO0FBQ0gsSUFBWSx3QkFPWDtBQVBELFdBQVksd0JBQXdCO0lBQ2xDOzs7O09BSUc7SUFDSCwyQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFQVyx3QkFBd0Isd0NBQXhCLHdCQUF3QixRQU9uQztBQUVEOzs7R0FHRztBQUNILElBQVksMEJBT1g7QUFQRCxXQUFZLDBCQUEwQjtJQUNwQzs7OztPQUlHO0lBQ0gseURBQTJCLENBQUE7QUFDN0IsQ0FBQyxFQVBXLDBCQUEwQiwwQ0FBMUIsMEJBQTBCLFFBT3JDO0FBZ0ZEOzs7Ozs7OztHQVFHO0lBRVUscUJBQXFCOzRCQURqQyxvQ0FBa0I7Ozs7c0JBQ3dCLEdBQUcsQ0FBQyxRQUFROzs7cUNBQXBCLFNBQVEsV0FBWTs7Ozt5REFrR3BELGlDQUFjO1lBQ2Ysa09BQVcseUJBQXlCLDZEQUVuQztZQXJHSCw2S0FzR0M7Ozs7O1FBckdDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQVcsK0NBQStDLENBQUM7UUFFdkc7Ozs7OztXQU1HO1FBQ0ksTUFB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SSxhQUFhLENBQUM7WUFDbEIsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLEtBQUssZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3JELElBQUksQ0FBQyxlQUFlLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxNQUFNLElBQUksaUJBQWlCLENBQUM7Z0JBQ3hFLENBQUM7Z0JBQ0QseUdBQXlHO2dCQUN6RyxhQUFhLEdBQUcsQ0FBQzt3QkFDZixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUk7d0JBQ3pDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNO3FCQUMvQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxtQ0FBd0IsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUM5RCxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3ZCLHVCQUF1QixFQUFFO29CQUN2QixvQkFBb0I7b0JBQ3BCLHNCQUFzQjtvQkFDdEIsYUFBYTtpQkFDZDthQUNGLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1NBQzFCO1FBR0QsSUFBVyx5QkFBeUI7WUFDbEMsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN6RDs7WUFyR1UsdURBQXFCOzs7OztBQUFyQixzREFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5TZWN1cml0eUNvbmZpZ3VyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBMYXp5LCBOYW1lcyB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIsIGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgKiBhcyBjb25zdHJ1Y3RzIGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgYSBjcmVhdGVkIG9yIGFuIGltcG9ydGVkIGBTZWN1cml0eUNvbmZpZ3VyYXRpb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTZWN1cml0eUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBjZGsuSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5jcnlwdGlvbiBtb2RlIGZvciBTMy5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L3dlYmFwaS9BUElfUzNFbmNyeXB0aW9uLmh0bWwjR2x1ZS1UeXBlLVMzRW5jcnlwdGlvbi1TM0VuY3J5cHRpb25Nb2RlXG4gKi9cbmV4cG9ydCBlbnVtIFMzRW5jcnlwdGlvbk1vZGUge1xuICAvKipcbiAgICogU2VydmVyIHNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFtYXpvbiBTMy1tYW5hZ2VkIGtleS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Vc2luZ1NlcnZlclNpZGVFbmNyeXB0aW9uLmh0bWxcbiAgICovXG4gIFMzX01BTkFHRUQgPSAnU1NFLVMzJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5IG1hbmFnZWQgYnkgdGhlIGFjY291bnQgb3duZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvVXNpbmdLTVNFbmNyeXB0aW9uLmh0bWxcbiAgICovXG4gIEtNUyA9ICdTU0UtS01TJyxcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIG1vZGUgZm9yIENsb3VkV2F0Y2ggTG9ncy5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L3dlYmFwaS9BUElfQ2xvdWRXYXRjaEVuY3J5cHRpb24uaHRtbCNHbHVlLVR5cGUtQ2xvdWRXYXRjaEVuY3J5cHRpb24tQ2xvdWRXYXRjaEVuY3J5cHRpb25Nb2RlXG4gKi9cbmV4cG9ydCBlbnVtIENsb3VkV2F0Y2hFbmNyeXB0aW9uTW9kZSB7XG4gIC8qKlxuICAgKiBTZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIChTU0UpIHdpdGggYW4gQVdTIEtNUyBrZXkgbWFuYWdlZCBieSB0aGUgYWNjb3VudCBvd25lci5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9Vc2luZ0tNU0VuY3J5cHRpb24uaHRtbFxuICAgKi9cbiAgS01TID0gJ1NTRS1LTVMnLFxufVxuXG4vKipcbiAqIEVuY3J5cHRpb24gbW9kZSBmb3IgSm9iIEJvb2ttYXJrcy5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L3dlYmFwaS9BUElfSm9iQm9va21hcmtzRW5jcnlwdGlvbi5odG1sI0dsdWUtVHlwZS1Kb2JCb29rbWFya3NFbmNyeXB0aW9uLUpvYkJvb2ttYXJrc0VuY3J5cHRpb25Nb2RlXG4gKi9cbmV4cG9ydCBlbnVtIEpvYkJvb2ttYXJrc0VuY3J5cHRpb25Nb2RlIHtcbiAgLyoqXG4gICAqIENsaWVudC1zaWRlIGVuY3J5cHRpb24gKENTRSkgd2l0aCBhbiBBV1MgS01TIGtleSBtYW5hZ2VkIGJ5IHRoZSBhY2NvdW50IG93bmVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1VzaW5nQ2xpZW50U2lkZUVuY3J5cHRpb24uaHRtbFxuICAgKi9cbiAgQ0xJRU5UX1NJREVfS01TID0gJ0NTRS1LTVMnLFxufVxuXG4vKipcbiAqIFMzIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTM0VuY3J5cHRpb24ge1xuICAvKipcbiAgICogRW5jcnlwdGlvbiBtb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZTogUzNFbmNyeXB0aW9uTW9kZTtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdG8gYmUgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLlxuICAgKiBAZGVmYXVsdCBubyBrbXMga2V5IGlmIG1vZGUgPSBTM19NQU5BR0VELiBBIGtleSB3aWxsIGJlIGNyZWF0ZWQgaWYgb25lIGlzIG5vdCBwcm92aWRlZCBhbmQgbW9kZSA9IEtNUy5cbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5UmVmO1xufVxuXG4vKipcbiAqIENsb3VkV2F0Y2ggTG9ncyBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRXYXRjaEVuY3J5cHRpb24ge1xuICAvKipcbiAgICogRW5jcnlwdGlvbiBtb2RlXG4gICAqL1xuICByZWFkb25seSBtb2RlOiBDbG91ZFdhdGNoRW5jcnlwdGlvbk1vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHRvIGJlIHVzZWQgdG8gZW5jcnlwdCB0aGUgZGF0YS5cbiAgICogQGRlZmF1bHQgQSBrZXkgd2lsbCBiZSBjcmVhdGVkIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcbn1cblxuLyoqXG4gKiBKb2IgYm9va21hcmtzIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JCb29rbWFya3NFbmNyeXB0aW9uIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gbW9kZS5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGU6IEpvYkJvb2ttYXJrc0VuY3J5cHRpb25Nb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB0byBiZSB1c2VkIHRvIGVuY3J5cHQgdGhlIGRhdGEuXG4gICAqIEBkZWZhdWx0IEEga2V5IHdpbGwgYmUgY3JlYXRlZCBpZiBvbmUgaXMgbm90IHByb3ZpZGVkLlxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXlSZWY7XG59XG5cbi8qKlxuICogQ29uc3RydWN0aW9ucyBwcm9wZXJ0aWVzIG9mIGBTZWN1cml0eUNvbmZpZ3VyYXRpb25gLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlY3VyaXR5Q29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGdlbmVyYXRlZCBieSBDREsuXG4gICAqL1xuICByZWFkb25seSBzZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZW5jcnlwdGlvbiBjb25maWd1cmF0aW9uIGZvciBBbWF6b24gQ2xvdWRXYXRjaCBMb2dzLlxuICAgKiBAZGVmYXVsdCBubyBjbG91ZHdhdGNoIGxvZ3MgZW5jcnlwdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkV2F0Y2hFbmNyeXB0aW9uPzogQ2xvdWRXYXRjaEVuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIEdsdWUgSm9iIEJvb2ttYXJrcy5cbiAgICogQGRlZmF1bHQgbm8gam9iIGJvb2ttYXJrcyBlbmNyeXB0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgam9iQm9va21hcmtzRW5jcnlwdGlvbj86IEpvYkJvb2ttYXJrc0VuY3J5cHRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIEFtYXpvbiBTaW1wbGUgU3RvcmFnZSBTZXJ2aWNlIChBbWF6b24gUzMpIGRhdGEuXG4gICAqIEBkZWZhdWx0IG5vIHMzIGVuY3J5cHRpb24uXG4gICAqL1xuICByZWFkb25seSBzM0VuY3J5cHRpb24/OiBTM0VuY3J5cHRpb247XG59XG5cbi8qKlxuICogQSBzZWN1cml0eSBjb25maWd1cmF0aW9uIGlzIGEgc2V0IG9mIHNlY3VyaXR5IHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgdXNlZCBieSBBV1MgR2x1ZSB0byBlbmNyeXB0IGRhdGEgYXQgcmVzdC5cbiAqXG4gKiBUaGUgZm9sbG93aW5nIHNjZW5hcmlvcyBzaG93IHNvbWUgb2YgdGhlIHdheXMgdGhhdCB5b3UgY2FuIHVzZSBhIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24uXG4gKiAtIEF0dGFjaCBhIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gdG8gYW4gQVdTIEdsdWUgY3Jhd2xlciB0byB3cml0ZSBlbmNyeXB0ZWQgQW1hem9uIENsb3VkV2F0Y2ggTG9ncy5cbiAqIC0gQXR0YWNoIGEgc2VjdXJpdHkgY29uZmlndXJhdGlvbiB0byBhbiBleHRyYWN0LCB0cmFuc2Zvcm0sIGFuZCBsb2FkIChFVEwpIGpvYiB0byB3cml0ZSBlbmNyeXB0ZWQgQW1hem9uIFNpbXBsZSBTdG9yYWdlIFNlcnZpY2UgKEFtYXpvbiBTMykgdGFyZ2V0cyBhbmQgZW5jcnlwdGVkIENsb3VkV2F0Y2ggTG9ncy5cbiAqIC0gQXR0YWNoIGEgc2VjdXJpdHkgY29uZmlndXJhdGlvbiB0byBhbiBFVEwgam9iIHRvIHdyaXRlIGl0cyBqb2JzIGJvb2ttYXJrcyBhcyBlbmNyeXB0ZWQgQW1hem9uIFMzIGRhdGEuXG4gKiAtIEF0dGFjaCBhIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24gdG8gYSBkZXZlbG9wbWVudCBlbmRwb2ludCB0byB3cml0ZSBlbmNyeXB0ZWQgQW1hem9uIFMzIHRhcmdldHMuXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBTZWN1cml0eUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJU2VjdXJpdHlDb25maWd1cmF0aW9uIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5TZWN1cml0eUNvbmZpZ3VyYXRpb24nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ29ubmVjdGlvbiBjb25zdHJ1Y3QgdGhhdCByZXByZXNlbnRzIGFuIGV4dGVybmFsIHNlY3VyaXR5IGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgaWQuXG4gICAqIEBwYXJhbSBzZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lIG5hbWUgb2YgZXh0ZXJuYWwgc2VjdXJpdHkgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLFxuICAgIHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWU6IHN0cmluZyk6IElTZWN1cml0eUNvbmZpZ3VyYXRpb24ge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElTZWN1cml0eUNvbmZpZ3VyYXRpb24ge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUgPSBzZWN1cml0eUNvbmZpZ3VyYXRpb25OYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgaW4gQ2xvdWRXYXRjaCBlbmNyeXB0aW9uIGlmIGl0IHJlcXVpcmVzIGEga21zIGtleS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjbG91ZFdhdGNoRW5jcnlwdGlvbktleT86IGttcy5JS2V5UmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIGluIGpvYiBib29rbWFya3MgZW5jcnlwdGlvbiBpZiBpdCByZXF1aXJlcyBhIGttcyBrZXkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgam9iQm9va21hcmtzRW5jcnlwdGlvbktleT86IGttcy5JS2V5UmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIGluIFMzIGVuY3J5cHRpb24gaWYgaXQgcmVxdWlyZXMgYSBrbXMga2V5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHMzRW5jcnlwdGlvbktleT86IGttcy5JS2V5UmVmO1xuXG4gIHByaXZhdGUgcmVzb3VyY2U6IENmblNlY3VyaXR5Q29uZmlndXJhdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTZWN1cml0eUNvbmZpZ3VyYXRpb25Qcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUgPz9cbiAgICAgICAgTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+IE5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7fSksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgaWYgKCFwcm9wcy5zM0VuY3J5cHRpb24gJiYgIXByb3BzLmNsb3VkV2F0Y2hFbmNyeXB0aW9uICYmICFwcm9wcy5qb2JCb29rbWFya3NFbmNyeXB0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihsaXRgRW5jcnlwdGlvblJlcXVpcmVkYCwgJ09uZSBvZiBjbG91ZFdhdGNoRW5jcnlwdGlvbiwgam9iQm9va21hcmtzRW5jcnlwdGlvbiBvciBzM0VuY3J5cHRpb24gbXVzdCBiZSBkZWZpbmVkJywgdGhpcyk7XG4gICAgfVxuXG4gICAgY29uc3Qga21zS2V5Q3JlYXRpb25SZXF1aXJlZCA9XG4gICAgICAocHJvcHMuczNFbmNyeXB0aW9uICYmIHByb3BzLnMzRW5jcnlwdGlvbi5tb2RlID09PSBTM0VuY3J5cHRpb25Nb2RlLktNUyAmJiAhcHJvcHMuczNFbmNyeXB0aW9uLmttc0tleSkgfHxcbiAgICAgIChwcm9wcy5jbG91ZFdhdGNoRW5jcnlwdGlvbiAmJiAhcHJvcHMuY2xvdWRXYXRjaEVuY3J5cHRpb24ua21zS2V5KSB8fFxuICAgICAgKHByb3BzLmpvYkJvb2ttYXJrc0VuY3J5cHRpb24gJiYgIXByb3BzLmpvYkJvb2ttYXJrc0VuY3J5cHRpb24ua21zS2V5KTtcbiAgICBjb25zdCBhdXRvQ3JlYXRlZEttc0tleSA9IGttc0tleUNyZWF0aW9uUmVxdWlyZWQgPyBuZXcga21zLktleSh0aGlzLCAnS2V5JywgeyBlbmFibGVLZXlSb3RhdGlvbjogdHJ1ZSB9KSA6IHVuZGVmaW5lZDtcblxuICAgIGxldCBjbG91ZFdhdGNoRW5jcnlwdGlvbjtcbiAgICBpZiAocHJvcHMuY2xvdWRXYXRjaEVuY3J5cHRpb24pIHtcbiAgICAgIHRoaXMuY2xvdWRXYXRjaEVuY3J5cHRpb25LZXkgPSBwcm9wcy5jbG91ZFdhdGNoRW5jcnlwdGlvbi5rbXNLZXkgfHwgYXV0b0NyZWF0ZWRLbXNLZXk7XG4gICAgICBjbG91ZFdhdGNoRW5jcnlwdGlvbiA9IHtcbiAgICAgICAgY2xvdWRXYXRjaEVuY3J5cHRpb25Nb2RlOiBwcm9wcy5jbG91ZFdhdGNoRW5jcnlwdGlvbi5tb2RlLFxuICAgICAgICBrbXNLZXlBcm46IHRoaXMuY2xvdWRXYXRjaEVuY3J5cHRpb25LZXk/LmtleVJlZi5rZXlBcm4sXG4gICAgICB9O1xuICAgIH1cblxuICAgIGxldCBqb2JCb29rbWFya3NFbmNyeXB0aW9uO1xuICAgIGlmIChwcm9wcy5qb2JCb29rbWFya3NFbmNyeXB0aW9uKSB7XG4gICAgICB0aGlzLmpvYkJvb2ttYXJrc0VuY3J5cHRpb25LZXkgPSBwcm9wcy5qb2JCb29rbWFya3NFbmNyeXB0aW9uLmttc0tleSB8fCBhdXRvQ3JlYXRlZEttc0tleTtcbiAgICAgIGpvYkJvb2ttYXJrc0VuY3J5cHRpb24gPSB7XG4gICAgICAgIGpvYkJvb2ttYXJrc0VuY3J5cHRpb25Nb2RlOiBwcm9wcy5qb2JCb29rbWFya3NFbmNyeXB0aW9uLm1vZGUsXG4gICAgICAgIGttc0tleUFybjogdGhpcy5qb2JCb29rbWFya3NFbmNyeXB0aW9uS2V5Py5rZXlSZWYua2V5QXJuLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBsZXQgczNFbmNyeXB0aW9ucztcbiAgICBpZiAocHJvcHMuczNFbmNyeXB0aW9uKSB7XG4gICAgICBpZiAocHJvcHMuczNFbmNyeXB0aW9uLm1vZGUgPT09IFMzRW5jcnlwdGlvbk1vZGUuS01TKSB7XG4gICAgICAgIHRoaXMuczNFbmNyeXB0aW9uS2V5ID0gcHJvcHMuczNFbmNyeXB0aW9uLmttc0tleSB8fCBhdXRvQ3JlYXRlZEttc0tleTtcbiAgICAgIH1cbiAgICAgIC8vIE5PVEU6IENsb3VkRm9ybWF0aW9ucyBlcnJvcnMgb3V0IGlmIGFycmF5IGlzIG9mIGxlbmd0aCA+IDEuIFRoYXQncyB3aHkgdGhlIHByb3BzIGRvbid0IGV4cG9zZSBhbiBhcnJheVxuICAgICAgczNFbmNyeXB0aW9ucyA9IFt7XG4gICAgICAgIHMzRW5jcnlwdGlvbk1vZGU6IHByb3BzLnMzRW5jcnlwdGlvbi5tb2RlLFxuICAgICAgICBrbXNLZXlBcm46IHRoaXMuczNFbmNyeXB0aW9uS2V5Py5rZXlSZWYua2V5QXJuLFxuICAgICAgfV07XG4gICAgfVxuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgQ2ZuU2VjdXJpdHlDb25maWd1cmF0aW9uKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgZW5jcnlwdGlvbkNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgY2xvdWRXYXRjaEVuY3J5cHRpb24sXG4gICAgICAgIGpvYkJvb2ttYXJrc0VuY3J5cHRpb24sXG4gICAgICAgIHMzRW5jcnlwdGlvbnMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IHJlc291cmNlO1xuICB9XG5cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgc2VjdXJpdHlDb25maWd1cmF0aW9uTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZSh0aGlzLnJlc291cmNlLnJlZik7XG4gIH1cbn1cbiJdfQ==
|
package/lib/storage-parameter.js
CHANGED
|
@@ -271,7 +271,7 @@ var StorageParameters;
|
|
|
271
271
|
class StorageParameter {
|
|
272
272
|
key;
|
|
273
273
|
value;
|
|
274
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.StorageParameter", version: "2.
|
|
274
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.StorageParameter", version: "2.264.0-alpha.0" };
|
|
275
275
|
/**
|
|
276
276
|
* The number of rows to skip at the top of a CSV file when the table is being created.
|
|
277
277
|
*/
|
package/lib/table-base.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { CfnTable } from 'aws-cdk-lib/aws-glue';
|
|
|
2
2
|
import * as iam from 'aws-cdk-lib/aws-iam';
|
|
3
3
|
import type { IResource } from 'aws-cdk-lib/core';
|
|
4
4
|
import { Resource } from 'aws-cdk-lib/core';
|
|
5
|
-
import
|
|
5
|
+
import { Construct } from 'constructs';
|
|
6
6
|
import type { DataFormat } from './data-format';
|
|
7
7
|
import type { IDatabase } from './database';
|
|
8
8
|
import { type PartitionProjection } from './partition-projection';
|
package/lib/table-base.js
CHANGED
|
@@ -37,15 +37,18 @@ exports.TableBase = void 0;
|
|
|
37
37
|
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
38
38
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
39
39
|
const iam = __importStar(require("aws-cdk-lib/aws-iam"));
|
|
40
|
+
const aws_kms_1 = require("aws-cdk-lib/aws-kms");
|
|
40
41
|
const core_1 = require("aws-cdk-lib/core");
|
|
41
42
|
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
42
43
|
const cr = __importStar(require("aws-cdk-lib/custom-resources"));
|
|
44
|
+
const constructs_1 = require("constructs");
|
|
43
45
|
const partition_projection_1 = require("./partition-projection");
|
|
46
|
+
const partition_index_provider_generated_1 = require("../custom-resource-handlers/dist/aws-glue-alpha/partition-index-provider.generated");
|
|
44
47
|
/**
|
|
45
48
|
* A Glue table.
|
|
46
49
|
*/
|
|
47
50
|
class TableBase extends core_1.Resource {
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableBase", version: "2.
|
|
51
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableBase", version: "2.264.0-alpha.0" };
|
|
49
52
|
static fromTableArn(scope, id, tableArn) {
|
|
50
53
|
const tableName = core_1.Fn.select(1, core_1.Fn.split('/', core_1.Stack.of(scope).splitArn(tableArn, core_1.ArnFormat.SLASH_RESOURCE_NAME).resourceName));
|
|
51
54
|
return TableBase.fromTableAttributes(scope, id, {
|
|
@@ -165,50 +168,93 @@ class TableBase extends core_1.Resource {
|
|
|
165
168
|
}
|
|
166
169
|
this.validatePartitionIndex(index);
|
|
167
170
|
const indexName = index.indexName ?? this.generateIndexName(index.keyNames);
|
|
168
|
-
const
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
171
|
+
const provider = PartitionIndexProvider.getOrCreate(this);
|
|
172
|
+
// The grants are identical for every index on this table, so only add them
|
|
173
|
+
// once.
|
|
174
|
+
if (numPartitions === 0) {
|
|
175
|
+
// Add scoped permissions for this table's Glue resources
|
|
176
|
+
// https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsglue.html
|
|
177
|
+
const resources = [this.tableArn, this.database.databaseArn, this.database.catalog.catalogArn];
|
|
178
|
+
// The catalog's encryption is fixed at construction, so the encryption key
|
|
179
|
+
// (if any) is known here. Grant the handlers access to it. No-op when the
|
|
180
|
+
// catalog uses an AWS-managed key or no encryption.
|
|
181
|
+
const key = this.database.catalog.encryptionKey;
|
|
182
|
+
if (key) {
|
|
183
|
+
const grants = aws_kms_1.KeyGrants.fromKey(key);
|
|
184
|
+
grants.decrypt(provider.onEventHandler);
|
|
185
|
+
grants.decrypt(provider.isCompleteHandler);
|
|
186
|
+
}
|
|
187
|
+
// Both handlers create, delete, and inspect indexes: onEvent creates/deletes on
|
|
188
|
+
// Create/Delete/Update, and isComplete recreates the index while driving a
|
|
189
|
+
// key-change update (delete -> recreate -> ACTIVE). UpdateTable/GetTable are
|
|
190
|
+
// required by the CreatePartitionIndex/DeletePartitionIndex APIs.
|
|
191
|
+
const actions = [
|
|
192
|
+
'glue:GetPartitionIndexes',
|
|
193
|
+
'glue:CreatePartitionIndex',
|
|
194
|
+
'glue:DeletePartitionIndex',
|
|
195
|
+
'glue:GetTable',
|
|
196
|
+
'glue:UpdateTable',
|
|
197
|
+
];
|
|
198
|
+
provider.onEventHandler.addToRolePolicy(new iam.PolicyStatement({ actions, resources }));
|
|
199
|
+
provider.isCompleteHandler.addToRolePolicy(new iam.PolicyStatement({ actions, resources }));
|
|
200
|
+
}
|
|
201
|
+
const partitionIndexCustomResource = new core_1.CustomResource(this, `partition-index-${indexName}`, {
|
|
202
|
+
resourceType: 'Custom::GluePartitionIndex',
|
|
203
|
+
serviceToken: provider.serviceToken,
|
|
204
|
+
properties: {
|
|
205
|
+
DatabaseName: this.database.databaseName,
|
|
206
|
+
TableName: this.tableName,
|
|
207
|
+
IndexName: indexName,
|
|
208
|
+
Keys: index.keyNames,
|
|
181
209
|
},
|
|
182
|
-
policy: cr.AwsCustomResourcePolicy.fromSdkCalls({
|
|
183
|
-
resources: cr.AwsCustomResourcePolicy.ANY_RESOURCE,
|
|
184
|
-
}),
|
|
185
|
-
// APIs are available in 2.1055.0
|
|
186
|
-
installLatestAwsSdk: false,
|
|
187
210
|
});
|
|
188
|
-
|
|
189
|
-
|
|
211
|
+
// Ensure IAM policies are created before the custom resource invokes the handlers
|
|
212
|
+
partitionIndexCustomResource.node.addDependency(provider.onEventHandler.role);
|
|
213
|
+
partitionIndexCustomResource.node.addDependency(provider.isCompleteHandler.role);
|
|
214
|
+
// Depend on previous partition index to avoid race condition
|
|
190
215
|
if (numPartitions > 0) {
|
|
191
|
-
this.partitionIndexCustomResources[numPartitions - 1]
|
|
216
|
+
partitionIndexCustomResource.node.addDependency(this.partitionIndexCustomResources[numPartitions - 1]);
|
|
192
217
|
}
|
|
193
218
|
this.partitionIndexCustomResources.push(partitionIndexCustomResource);
|
|
194
219
|
}
|
|
195
220
|
generateIndexName(keys) {
|
|
221
|
+
const maxIndexLength = 80;
|
|
222
|
+
if (core_1.Token.isUnresolved(keys) || keys.some(k => core_1.Token.isUnresolved(k))) {
|
|
223
|
+
// The index name is derived from the key names, so tokenized keys leave
|
|
224
|
+
// nothing stable to generate from: any auto-generated name would have to
|
|
225
|
+
// fall back to the index's position on the table, which shifts if indexes
|
|
226
|
+
// are added, removed, or reordered - silently replacing indexes that did
|
|
227
|
+
// not actually change. Require an explicit, stable name instead.
|
|
228
|
+
throw new core_1.ValidationError((0, helpers_internal_1.lit) `TokenizedIndexKeysRequireName`, 'cannot auto-generate a stable partition index name from tokenized key names; ' +
|
|
229
|
+
'specify `indexName` explicitly when index keys are not known at synthesis time', this);
|
|
230
|
+
}
|
|
196
231
|
const prefix = keys.join('-') + '-';
|
|
197
232
|
const uniqueId = core_1.Names.uniqueId(this);
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
233
|
+
if (prefix.length < maxIndexLength) {
|
|
234
|
+
// Common case: trim the uniqueId tail so the whole name fits under the cap.
|
|
235
|
+
const startIndex = Math.max(0, uniqueId.length - (maxIndexLength - prefix.length));
|
|
236
|
+
return prefix + uniqueId.substring(startIndex);
|
|
237
|
+
}
|
|
238
|
+
// The joined key names alone exceed the budget (long key names), so trimming
|
|
239
|
+
// the uniqueId is not enough. Truncate the prefix and append a hash of the
|
|
240
|
+
// table path plus the full key list, so two different (long) key sets cannot
|
|
241
|
+
// collide after truncation.
|
|
242
|
+
const hash = (0, helpers_internal_1.md5hash)(uniqueId + '-' + keys.join('-')).slice(0, 8);
|
|
243
|
+
return prefix.substring(0, maxIndexLength - hash.length - 1) + '-' + hash;
|
|
201
244
|
}
|
|
202
245
|
validatePartitionIndex(index) {
|
|
203
|
-
if (index.indexName !== undefined && (index.indexName.length < 1 || index.indexName.length > 255)) {
|
|
246
|
+
if (index.indexName !== undefined && !core_1.Token.isUnresolved(index.indexName) && (index.indexName.length < 1 || index.indexName.length > 255)) {
|
|
204
247
|
throw new core_1.ValidationError((0, helpers_internal_1.lit) `IndexNameLengthInvalid`, `Index name must be between 1 and 255 characters, but got ${index.indexName.length}`, this);
|
|
205
248
|
}
|
|
206
249
|
if (!this.partitionKeys || this.partitionKeys.length === 0) {
|
|
207
250
|
throw new core_1.ValidationError((0, helpers_internal_1.lit) `NoPartitionKeysForIndex`, 'The table must have partition keys to create a partition index', this);
|
|
208
251
|
}
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
252
|
+
if (!core_1.Token.isUnresolved(index.keyNames)) {
|
|
253
|
+
const keyNames = this.partitionKeys.map(pk => pk.name);
|
|
254
|
+
const concreteKeys = index.keyNames.filter(k => !core_1.Token.isUnresolved(k));
|
|
255
|
+
if (concreteKeys.length > 0 && !concreteKeys.every(k => keyNames.includes(k))) {
|
|
256
|
+
throw new core_1.ValidationError((0, helpers_internal_1.lit) `IndexKeysNotPartitionKeys`, `All index keys must also be partition keys. Got ${index.keyNames} but partition key names are ${keyNames}`, this);
|
|
257
|
+
}
|
|
212
258
|
}
|
|
213
259
|
}
|
|
214
260
|
/**
|
|
@@ -270,7 +316,7 @@ class TableBase extends core_1.Resource {
|
|
|
270
316
|
grantee,
|
|
271
317
|
resourceArns: [
|
|
272
318
|
this.tableArn,
|
|
273
|
-
this.database.catalogArn,
|
|
319
|
+
this.database.catalog.catalogArn,
|
|
274
320
|
this.database.databaseArn,
|
|
275
321
|
],
|
|
276
322
|
actions,
|
|
@@ -278,6 +324,55 @@ class TableBase extends core_1.Resource {
|
|
|
278
324
|
}
|
|
279
325
|
}
|
|
280
326
|
exports.TableBase = TableBase;
|
|
327
|
+
/**
|
|
328
|
+
* A stack-singleton custom resource provider that manages Glue partition indexes.
|
|
329
|
+
*
|
|
330
|
+
* All partition-indexed tables in a stack share a single provider (and its two
|
|
331
|
+
* Lambda handlers) to avoid provisioning a provider framework per table. The
|
|
332
|
+
* provider and handlers are grouped under this single construct so only one
|
|
333
|
+
* id is placed at stack scope.
|
|
334
|
+
*/
|
|
335
|
+
class PartitionIndexProvider extends constructs_1.Construct {
|
|
336
|
+
/**
|
|
337
|
+
* Returns the stack-singleton provider, creating it if it does not yet exist.
|
|
338
|
+
*/
|
|
339
|
+
static getOrCreate(scope) {
|
|
340
|
+
const stack = core_1.Stack.of(scope);
|
|
341
|
+
// A fixed, namespaced id makes this a stack singleton: every call within the
|
|
342
|
+
// same stack resolves to the same child via `tryFindChild`.
|
|
343
|
+
const id = '@aws-cdk/aws-glue-alpha.PartitionIndexProvider';
|
|
344
|
+
return stack.node.tryFindChild(id) ?? new PartitionIndexProvider(stack, id);
|
|
345
|
+
}
|
|
346
|
+
onEventHandler;
|
|
347
|
+
isCompleteHandler;
|
|
348
|
+
provider;
|
|
349
|
+
constructor(scope, id) {
|
|
350
|
+
super(scope, id);
|
|
351
|
+
// The handler source lives in `@aws-cdk/custom-resource-handlers` and is code
|
|
352
|
+
// generated + airlifted into this package at build time (see
|
|
353
|
+
// scripts/airlift-custom-resource-handlers.sh), following the pattern used by the
|
|
354
|
+
// other alpha modules (aws-amplify-alpha, aws-redshift-alpha). The @aws-sdk/client-glue
|
|
355
|
+
// module is provided by the Lambda runtime rather than bundled into the asset.
|
|
356
|
+
this.onEventHandler = new partition_index_provider_generated_1.PartitionIndexOnEventFunction(this, 'Handler', {
|
|
357
|
+
timeout: core_1.Duration.minutes(1),
|
|
358
|
+
});
|
|
359
|
+
this.isCompleteHandler = new partition_index_provider_generated_1.PartitionIndexIsCompleteFunction(this, 'IsComplete', {
|
|
360
|
+
timeout: core_1.Duration.minutes(1),
|
|
361
|
+
});
|
|
362
|
+
this.provider = new cr.Provider(this, 'Provider', {
|
|
363
|
+
onEventHandler: this.onEventHandler,
|
|
364
|
+
isCompleteHandler: this.isCompleteHandler,
|
|
365
|
+
queryInterval: core_1.Duration.seconds(10),
|
|
366
|
+
totalTimeout: core_1.Duration.minutes(15),
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
/**
|
|
370
|
+
* The service token to wire into partition index custom resources.
|
|
371
|
+
*/
|
|
372
|
+
get serviceToken() {
|
|
373
|
+
return this.provider.serviceToken;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
281
376
|
function validateSchema(columns, partitionKeys) {
|
|
282
377
|
if (columns.length === 0) {
|
|
283
378
|
throw new core_1.UnscopedValidationError((0, helpers_internal_1.lit) `NoColumnsSpecified`, 'you must specify at least one column for the table');
|
|
@@ -291,4 +386,4 @@ function validateSchema(columns, partitionKeys) {
|
|
|
291
386
|
names.add(column.name);
|
|
292
387
|
});
|
|
293
388
|
}
|
|
294
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRhYmxlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx5REFBMkM7QUFFM0MsMkNBQXlIO0FBQ3pILDRFQUE0RDtBQUM1RCxpRUFBbUQ7QUFLbkQsaUVBQXlHO0FBc0t6Rzs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxlQUFROztJQUN2QyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQWdCO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLFNBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQztRQUUvSCxPQUFPLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzlDLFFBQVE7WUFDUixTQUFTO1NBQ1YsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7Ozs7Ozs7Ozs7UUFDcEYsTUFBTSxNQUFPLFNBQVEsZUFBUTtZQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUI7SUFPRDs7T0FFRztJQUNhLFFBQVEsQ0FBWTtJQUVwQzs7T0FFRztJQUNhLFVBQVUsQ0FBVTtJQUVwQzs7T0FFRztJQUNhLFVBQVUsQ0FBYTtJQUV2Qzs7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T0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3JELElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLHFCQUFxQixFQUFFLHlEQUF5RCxNQUFNLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3RKLENBQUM7UUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENmblRhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IEFybkZvcm1hdCwgRm4sIExhenksIE5hbWVzLCBSZXNvdXJjZSwgU3RhY2ssIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0ICogYXMgY3IgZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgdHlwZSB7IEF3c0N1c3RvbVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhRm9ybWF0IH0gZnJvbSAnLi9kYXRhLWZvcm1hdCc7XG5pbXBvcnQgdHlwZSB7IElEYXRhYmFzZSB9IGZyb20gJy4vZGF0YWJhc2UnO1xuaW1wb3J0IHsgZ2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uUGFyYW1ldGVycywgdHlwZSBQYXJ0aXRpb25Qcm9qZWN0aW9uIH0gZnJvbSAnLi9wYXJ0aXRpb24tcHJvamVjdGlvbic7XG5pbXBvcnQgdHlwZSB7IENvbHVtbiB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgU3RvcmFnZVBhcmFtZXRlciB9IGZyb20gJy4vc3RvcmFnZS1wYXJhbWV0ZXInO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBQYXJ0aXRpb24gSW5kZXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGl0aW9uSW5kZXgge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBhcnRpdGlvbiBpbmRleC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHlvdS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnRpdGlvbiBrZXkgbmFtZXMgdGhhdCBjb21wcmlzZSB0aGUgcGFydGl0aW9uXG4gICAqIGluZGV4LiBUaGUgbmFtZXMgbXVzdCBjb3JyZXNwb25kIHRvIGEgbmFtZSBpbiB0aGVcbiAgICogdGFibGUncyBwYXJ0aXRpb24ga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGtleU5hbWVzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGdlbmVyYXRlZCBieSBDREsuXG4gICAqL1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWJhc2UgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U6IElEYXRhYmFzZTtcblxuICAvKipcbiAgICogQ29sdW1ucyBvZiB0aGUgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBjb2x1bW5zOiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGNvbHVtbnMgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0YWJsZSBpcyBub3QgcGFydGl0aW9uZWRcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbktleXM/OiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGluZGV4ZXMgb24gdGhlIHRhYmxlLiBBIG1heGltdW0gb2YgMyBpbmRleGVzXG4gICAqIGFyZSBhbGxvd2VkIG9uIGEgdGFibGUuIEtleXMgaW4gdGhlIGluZGV4IG11c3QgYmUgcGFydFxuICAgKiBvZiB0aGUgdGFibGUncyBwYXJ0aXRpb24ga2V5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGFibGUgaGFzIG5vIHBhcnRpdGlvbiBpbmRleGVzXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb25JbmRleGVzPzogUGFydGl0aW9uSW5kZXhbXTtcblxuICAvKipcbiAgICogU3RvcmFnZSB0eXBlIG9mIHRoZSB0YWJsZSdzIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBkYXRhRm9ybWF0OiBEYXRhRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUncyBkYXRhIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHJlc3NlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSBkYXRhIGlzIHN0b3JlZCBpbiBzdWJkaXJlY3Rvcmllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlZEFzU3ViRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnRpdGlvbiBmaWx0ZXJpbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvZ2x1ZS1iZXN0LXByYWN0aWNlcy5odG1sI2dsdWUtYmVzdC1wcmFjdGljZXMtcGFydGl0aW9uLWluZGV4XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHBhcmFtZXRlciBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUGFydGl0aW9uRmlsdGVyaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHVzZXItc3VwcGxpZWQgcHJvcGVydGllcyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwaHlzaWNhbCBzdG9yYWdlIG9mIHRoaXMgdGFibGUuIFRoZXNlIHByb3BlcnRpZXMgaGVscCBkZXNjcmliZSB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIHRoYXQgaXMgc3RvcmVkIHdpdGhpbiB0aGUgY3Jhd2xlZCBkYXRhIHNvdXJjZXMuXG4gICAqXG4gICAqIFRoZSBrZXkvdmFsdWUgcGFpcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBzdWJtaXR0ZWQgYXJlIG5vdCBsaW1pdGVkLCBob3dldmVyIHRoZWlyIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGd1YXJhbnRlZWQuXG4gICAqXG4gICAqIFNvbWUga2V5cyB3aWxsIGJlIGF1dG8tcG9wdWxhdGVkIGJ5IGdsdWUgY3Jhd2xlcnMsIGhvd2V2ZXIsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlbSBieSBzcGVjaWZ5aW5nIHRoZSBrZXkgYW5kIHZhbHVlIGluIHRoaXMgcHJvcGVydHkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL3RhYmxlLXByb3BlcnRpZXMtY3Jhd2xlci5odG1sXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX0NSRUFURV9FWFRFUk5BTF9UQUJMRS5odG1sI3JfQ1JFQVRFX0VYVEVSTkFMX1RBQkxFLXBhcmFtZXRlcnMgLSB1bmRlciBfXCJUQUJMRSBQUk9QRVJUSUVTXCJfXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIGRlY2xhcmUgY29uc3QgZ2x1ZURhdGFiYXNlOiBnbHVlLklEYXRhYmFzZTtcbiAgICogICAgY29uc3QgdGFibGUgPSBuZXcgZ2x1ZS5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAqICAgICAgc3RvcmFnZVBhcmFtZXRlcnM6IFtcbiAgICogICAgICAgICAgZ2x1ZS5TdG9yYWdlUGFyYW1ldGVyLnNraXBIZWFkZXJMaW5lQ291bnQoMSksXG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jb21wcmVzc2lvblR5cGUoZ2x1ZS5Db21wcmVzc2lvblR5cGUuR1pJUCksXG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jdXN0b20oJ2ZvbycsICdiYXInKSwgLy8gV2lsbCBoYXZlIG5vIGVmZmVjdFxuICAgKiAgICAgICAgICBnbHVlLlN0b3JhZ2VQYXJhbWV0ZXIuY3VzdG9tKCdzZXBhcmF0b3JDaGFyJywgJywnKSwgLy8gV2lsbCBkZXNjcmliZSB0aGUgc2VwYXJhdG9yIGNoYXIgdXNlZCBpbiB0aGUgZGF0YVxuICAgKiAgICAgICAgICBnbHVlLlN0b3JhZ2VQYXJhbWV0ZXIuY3VzdG9tKGdsdWUuU3RvcmFnZVBhcmFtZXRlcnMuV1JJVEVfUEFSQUxMRUwsICdvZmYnKSxcbiAgICogICAgICBdLFxuICAgKiAgICAgIC8vIC4uLlxuICAgKiAgICAgIGRhdGFiYXNlOiBnbHVlRGF0YWJhc2UsXG4gICAqICAgICAgY29sdW1uczogW3tcbiAgICogICAgICAgICAgbmFtZTogJ2NvbDEnLFxuICAgKiAgICAgICAgICB0eXBlOiBnbHVlLlNjaGVtYS5TVFJJTkcsXG4gICAqICAgICAgfV0sXG4gICAqICAgICAgZGF0YUZvcm1hdDogZ2x1ZS5EYXRhRm9ybWF0LkNTVixcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHBhcmFtZXRlciBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZVBhcmFtZXRlcnM/OiBTdG9yYWdlUGFyYW1ldGVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkvdmFsdWUgcGFpcnMgZGVmaW5lIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZS5cbiAgICogVGhlIGtleS92YWx1ZSBwYWlycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHN1Ym1pdHRlZCBhcmUgbm90IGxpbWl0ZWQsIGhvd2V2ZXIgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBub3QgZ3VhcmFudGVlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1nbHVlLXRhYmxlLXRhYmxlaW5wdXQuaHRtbCNjZm4tZ2x1ZS10YWJsZS10YWJsZWlucHV0LXBhcmFtZXRlcnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgcGFyYW1ldGVyIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBmb3IgdGhpcyB0YWJsZS5cbiAgICpcbiAgICogUGFydGl0aW9uIHByb2plY3Rpb24gYWxsb3dzIEF0aGVuYSB0byBhdXRvbWF0aWNhbGx5IGFkZCBuZXcgcGFydGl0aW9uc1xuICAgKiB3aXRob3V0IHJlcXVpcmluZyBgQUxURVIgVEFCTEUgQUREIFBBUlRJVElPTmAgc3RhdGVtZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9wYXJ0aXRpb24tcHJvamVjdGlvbi5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcGFydGl0aW9uIHByb2plY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvblByb2plY3Rpb24/OiBQYXJ0aXRpb25Qcm9qZWN0aW9uO1xufVxuXG4vKipcbiAqIEEgR2x1ZSB0YWJsZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhYmxlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRhYmxlIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgdGFibGVBcm46IHN0cmluZyk6IElUYWJsZSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gRm4uc2VsZWN0KDEsIEZuLnNwbGl0KCcvJywgU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKHRhYmxlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lISkpO1xuXG4gICAgcmV0dXJuIFRhYmxlQmFzZS5mcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgdGFibGVBcm4sXG4gICAgICB0YWJsZU5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRhYmxlIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgaWQuXG4gICAqIEBwYXJhbSBhdHRycyBJbXBvcnQgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBUYWJsZUF0dHJpYnV0ZXMpOiBJVGFibGUge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRhYmxlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB0YWJsZUFybiA9IGF0dHJzLnRhYmxlQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlTmFtZSA9IGF0dHJzLnRhYmxlTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IHRhYmxlUmVzb3VyY2U6IENmblRhYmxlO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcGFydGl0aW9uSW5kZXhlcz86IFBhcnRpdGlvbkluZGV4W107XG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHRoaXMgdGFibGUgYmVsb25ncyB0by5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZTogSURhdGFiYXNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUncyBkYXRhIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXByZXNzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBvZiB0aGlzIHRhYmxlJ3MgZGF0YSBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhRm9ybWF0OiBEYXRhRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBUaGlzIHRhYmxlJ3MgY29sdW1ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zOiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogVGhpcyB0YWJsZSdzIHBhcnRpdGlvbiBrZXlzIGlmIHRoZSB0YWJsZSBpcyBwYXJ0aXRpb25lZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXJ0aXRpb25LZXlzPzogQ29sdW1uW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZXMnIHN0b3JhZ2UgZGVzY3JpcHRvciBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2VQYXJhbWV0ZXJzPzogU3RvcmFnZVBhcmFtZXRlcltdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHRhYmxlJ3MgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBpZiBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvblByb2plY3Rpb24/OiBQYXJ0aXRpb25Qcm9qZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGVzJyBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZ2x1ZS10YWJsZS10YWJsZWlucHV0Lmh0bWwjY2ZuLWdsdWUtdGFibGUtdGFibGVpbnB1dC1wYXJhbWV0ZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGluZGV4ZXMgbXVzdCBiZSBjcmVhdGVkIG9uZSBhdCBhIHRpbWUuIFRvIGF2b2lkXG4gICAqIHJhY2UgY29uZGl0aW9ucywgd2Ugc3RvcmUgdGhlIHJlc291cmNlIGFuZCBhZGQgZGVwZW5kZW5jaWVzXG4gICAqIGVhY2ggdGltZSBhIG5ldyBwYXJ0aXRpb24gaW5kZXggaXMgY3JlYXRlZC5cbiAgICovXG4gIHByaXZhdGUgcGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZXM6IEF3c0N1c3RvbVJlc291cmNlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVGFibGVCYXNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMudGFibGVOYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge30pLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IHByb3BzLmRhdGFiYXNlO1xuICAgIHRoaXMuZGF0YUZvcm1hdCA9IHByb3BzLmRhdGFGb3JtYXQ7XG5cbiAgICB2YWxpZGF0ZVNjaGVtYShwcm9wcy5jb2x1bW5zLCBwcm9wcy5wYXJ0aXRpb25LZXlzKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBwcm9wcy5jb2x1bW5zO1xuICAgIHRoaXMucGFydGl0aW9uS2V5cyA9IHByb3BzLnBhcnRpdGlvbktleXM7XG4gICAgdGhpcy5zdG9yYWdlUGFyYW1ldGVycyA9IHByb3BzLnN0b3JhZ2VQYXJhbWV0ZXJzO1xuICAgIHRoaXMucGFydGl0aW9uUHJvamVjdGlvbiA9IHByb3BzLnBhcnRpdGlvblByb2plY3Rpb247XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcHJvcHMucGFyYW1ldGVycyA/PyB7fTtcblxuICAgIHRoaXMuY29tcHJlc3NlZCA9IHByb3BzLmNvbXByZXNzZWQgPz8gZmFsc2U7XG5cbiAgICB0aGlzLnZhbGlkYXRlQW5kR2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICBwdWJsaWMgYWJzdHJhY3QgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgcHVibGljIGFic3RyYWN0IGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwYXJ0aXRpb24gaW5kZXggdG8gdGhlIHRhYmxlLiBZb3UgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDMgcGFydGl0aW9uXG4gICAqIGluZGV4ZXMgdG8gYSB0YWJsZS4gUGFydGl0aW9uIGluZGV4IGtleXMgbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUgdGFibGUnc1xuICAgKiBwYXJ0aXRpb24ga2V5cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvcGFydGl0aW9uLWluZGV4ZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIGFkZFBhcnRpdGlvbkluZGV4KGluZGV4OiBQYXJ0aXRpb25JbmRleCkge1xuICAgIGNvbnN0IG51bVBhcnRpdGlvbnMgPSB0aGlzLnBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2VzLmxlbmd0aDtcbiAgICBpZiAobnVtUGFydGl0aW9ucyA+PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBNYXhQYXJ0aXRpb25JbmRleGVzRXhjZWVkZWRgLCAnTWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9uIGluZGV4ZXMgYWxsb3dlZCBpcyAzJywgdGhpcyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVQYXJ0aXRpb25JbmRleChpbmRleCk7XG5cbiAgICBjb25zdCBpbmRleE5hbWUgPSBpbmRleC5pbmRleE5hbWUgPz8gdGhpcy5nZW5lcmF0ZUluZGV4TmFtZShpbmRleC5rZXlOYW1lcyk7XG4gICAgY29uc3QgcGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZSA9IG5ldyBjci5Bd3NDdXN0b21SZXNvdXJjZSh0aGlzLCBgcGFydGl0aW9uLWluZGV4LSR7aW5kZXhOYW1lfWAsIHtcbiAgICAgIG9uQ3JlYXRlOiB7XG4gICAgICAgIHNlcnZpY2U6ICdHbHVlJyxcbiAgICAgICAgYWN0aW9uOiAnY3JlYXRlUGFydGl0aW9uSW5kZXgnLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgRGF0YWJhc2VOYW1lOiB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcbiAgICAgICAgICBUYWJsZU5hbWU6IHRoaXMudGFibGVOYW1lLFxuICAgICAgICAgIFBhcnRpdGlvbkluZGV4OiB7XG4gICAgICAgICAgICBJbmRleE5hbWU6IGluZGV4TmFtZSxcbiAgICAgICAgICAgIEtleXM6IGluZGV4LmtleU5hbWVzLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogY3IuUGh5c2ljYWxSZXNvdXJjZUlkLm9mKFxuICAgICAgICAgIGluZGV4TmFtZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICBwb2xpY3k6IGNyLkF3c0N1c3RvbVJlc291cmNlUG9saWN5LmZyb21TZGtDYWxscyh7XG4gICAgICAgIHJlc291cmNlczogY3IuQXdzQ3VzdG9tUmVzb3VyY2VQb2xpY3kuQU5ZX1JFU09VUkNFLFxuICAgICAgfSksXG4gICAgICAvLyBBUElzIGFyZSBhdmFpbGFibGUgaW4gMi4xMDU1LjBcbiAgICAgIGluc3RhbGxMYXRlc3RBd3NTZGs6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuZ3JhbnRUb1VuZGVybHlpbmdSZXNvdXJjZXMocGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZSwgWydnbHVlOlVwZGF0ZVRhYmxlJ10pO1xuXG4gICAgLy8gRGVwZW5kIG9uIHByZXZpb3VzIHBhcnRpdGlvbiBpbmRleCBpZiBwb3NzaWJsZSwgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25cbiAgICBpZiAobnVtUGFydGl0aW9ucyA+IDApIHtcbiAgICAgIHRoaXMucGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZXNbbnVtUGFydGl0aW9ucy0xXS5ub2RlLmFkZERlcGVuZGVuY3kocGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZSk7XG4gICAgfVxuICAgIHRoaXMucGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZXMucHVzaChwYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJbmRleE5hbWUoa2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHByZWZpeCA9IGtleXMuam9pbignLScpICsgJy0nO1xuICAgIGNvbnN0IHVuaXF1ZUlkID0gTmFtZXMudW5pcXVlSWQodGhpcyk7XG4gICAgY29uc3QgbWF4SW5kZXhMZW5ndGggPSA4MDsgLy8gYXJiaXRyYXJpbHkgc3BlY2lmaWVkXG4gICAgY29uc3Qgc3RhcnRJbmRleCA9IE1hdGgubWF4KDAsIHVuaXF1ZUlkLmxlbmd0aCAtIChtYXhJbmRleExlbmd0aCAtIHByZWZpeC5sZW5ndGgpKTtcbiAgICByZXR1cm4gcHJlZml4ICsgdW5pcXVlSWQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVBhcnRpdGlvbkluZGV4KGluZGV4OiBQYXJ0aXRpb25JbmRleCkge1xuICAgIGlmIChpbmRleC5pbmRleE5hbWUgIT09IHVuZGVmaW5lZCAmJiAoaW5kZXguaW5kZXhOYW1lLmxlbmd0aCA8IDEgfHwgaW5kZXguaW5kZXhOYW1lLmxlbmd0aCA+IDI1NSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEluZGV4TmFtZUxlbmd0aEludmFsaWRgLCBgSW5kZXggbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1IGNoYXJhY3RlcnMsIGJ1dCBnb3QgJHtpbmRleC5pbmRleE5hbWUubGVuZ3RofWAsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucGFydGl0aW9uS2V5cyB8fCB0aGlzLnBhcnRpdGlvbktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBOb1BhcnRpdGlvbktleXNGb3JJbmRleGAsICdUaGUgdGFibGUgbXVzdCBoYXZlIHBhcnRpdGlvbiBrZXlzIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBpbmRleCcsIHRoaXMpO1xuICAgIH1cbiAgICBjb25zdCBrZXlOYW1lcyA9IHRoaXMucGFydGl0aW9uS2V5cy5tYXAocGsgPT4gcGsubmFtZSk7XG4gICAgaWYgKCFpbmRleC5rZXlOYW1lcy5ldmVyeShrID0+IGtleU5hbWVzLmluY2x1ZGVzKGspKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW5kZXhLZXlzTm90UGFydGl0aW9uS2V5c2AsIGBBbGwgaW5kZXgga2V5cyBtdXN0IGFsc28gYmUgcGFydGl0aW9uIGtleXMuIEdvdCAke2luZGV4LmtleU5hbWVzfSBidXQgcGFydGl0aW9uIGtleSBuYW1lcyBhcmUgJHtrZXlOYW1lc31gLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBhbmQgbWVyZ2UgZ2VuZXJhdGVkIHBhcmFtZXRlcnMgaW50byB0aGlzLnBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQW5kR2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wYXJ0aXRpb25Qcm9qZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBwYXJ0aXRpb24ga2V5cyBleGlzdFxuICAgIGlmICghdGhpcy5wYXJ0aXRpb25LZXlzIHx8IHRoaXMucGFydGl0aW9uS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBOb1BhcnRpdGlvbktleXNGb3JQcm9qZWN0aW9uYCxcbiAgICAgICAgJ1RoZSB0YWJsZSBtdXN0IGhhdmUgcGFydGl0aW9uIGtleXMgdG8gdXNlIHBhcnRpdGlvbiBwcm9qZWN0aW9uJyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGl0aW9uS2V5TmFtZXMgPSB0aGlzLnBhcnRpdGlvbktleXMubWFwKHBrID0+IHBrLm5hbWUpO1xuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCBwYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uXG4gICAgZm9yIChjb25zdCBbY29sdW1uTmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnBhcnRpdGlvblByb2plY3Rpb24pKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGNvbHVtbiBpcyBhIHBhcnRpdGlvbiBrZXlcbiAgICAgIGlmICghcGFydGl0aW9uS2V5TmFtZXMuaW5jbHVkZXMoY29sdW1uTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUHJvamVjdGlvbkNvbHVtbk5vdFBhcnRpdGlvbktleWAsXG4gICAgICAgICAgYFBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbHVtbiBcIiR7Y29sdW1uTmFtZX1cIiBtdXN0IGJlIGEgcGFydGl0aW9uIGtleS4gYCArXG4gICAgICAgICAgYFBhcnRpdGlvbiBrZXlzIGFyZTogJHtwYXJ0aXRpb25LZXlOYW1lcy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gR2VuZXJhdGUgQ2xvdWRGb3JtYXRpb24gcGFyYW1ldGVyc1xuICAgICAgY29uc3QgZ2VuZXJhdGVkUGFyYW1zID0gZ2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uUGFyYW1ldGVycyhjb2x1bW5OYW1lLCBjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgY29uZmxpY3RzIHdpdGggbWFudWFsbHkgc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IGNvbmZsaWN0aW5nS2V5cyA9IE9iamVjdC5rZXlzKGdlbmVyYXRlZFBhcmFtcykuZmlsdGVyKGtleSA9PiBrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKTtcbiAgICAgIGlmIChjb25mbGljdGluZ0tleXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBQcm9qZWN0aW9uUGFyYW1ldGVyc0NvbmZsaWN0YCxcbiAgICAgICAgICBgUGFydGl0aW9uIHByb2plY3Rpb24gcGFyYW1ldGVycyBjb25mbGljdCB3aXRoIG1hbnVhbGx5IHNwZWNpZmllZCBwYXJhbWV0ZXJzOiAke2NvbmZsaWN0aW5nS2V5cy5qb2luKCcsICcpfS4gYCArXG4gICAgICAgICAgJ1VzZSB0aGUgcGFydGl0aW9uUHJvamVjdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIG1hbnVhbGx5IHNwZWNpZnlpbmcgcHJvamVjdGlvbiBwYXJhbWV0ZXJzLicsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWVyZ2UgaW50byB0aGlzLnBhcmFtZXRlcnNcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wYXJhbWV0ZXJzLCBnZW5lcmF0ZWRQYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjb25mbGljdCB3aXRoIHByb2plY3Rpb24uZW5hYmxlZFxuICAgIGlmICgncHJvamVjdGlvbi5lbmFibGVkJyBpbiB0aGlzLnBhcmFtZXRlcnMpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBQcm9qZWN0aW9uRW5hYmxlZENvbmZsaWN0YCxcbiAgICAgICAgJ1BhcmFtZXRlciBcInByb2plY3Rpb24uZW5hYmxlZFwiIGNvbmZsaWN0cyB3aXRoIHBhcnRpdGlvblByb2plY3Rpb24gY29uZmlndXJhdGlvbi4gJyArXG4gICAgICAgICdVc2UgdGhlIHBhcnRpdGlvblByb2plY3Rpb24gcHJvcGVydHkgaW5zdGVhZCBvZiBtYW51YWxseSBzcGVjaWZ5aW5nIHByb2plY3Rpb24uZW5hYmxlZC4nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFbmFibGUgcGFydGl0aW9uIHByb2plY3Rpb24gZ2xvYmFsbHlcbiAgICB0aGlzLnBhcmFtZXRlcnNbJ3Byb2plY3Rpb24uZW5hYmxlZCddID0gJ3RydWUnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBpZGVudGl0eSBjdXN0b20gcGVybWlzc2lvbnMuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCBhY3Rpb25zOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMudGFibGVBcm5dLFxuICAgICAgYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gaWRlbnRpdHkgY3VzdG9tIHBlcm1pc3Npb25zIHRvIEFMTCB1bmRlcmx5aW5nIHJlc291cmNlcyBvZiB0aGUgdGFibGUuXG4gICAqIFBlcm1pc3Npb25zIHdpbGwgYmUgZ3JhbnRlZCB0byB0aGUgY2F0YWxvZywgdGhlIGRhdGFiYXNlLCBhbmQgdGhlIHRhYmxlLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudFRvVW5kZXJseWluZ1Jlc291cmNlcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgYWN0aW9uczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFtcbiAgICAgICAgdGhpcy50YWJsZUFybixcbiAgICAgICAgdGhpcy5kYXRhYmFzZS5jYXRhbG9nQXJuLFxuICAgICAgICB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlQXJuLFxuICAgICAgXSxcbiAgICAgIGFjdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoY29sdW1uczogQ29sdW1uW10sIHBhcnRpdGlvbktleXM/OiBDb2x1bW5bXSk6IHZvaWQge1xuICBpZiAoY29sdW1ucy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YE5vQ29sdW1uc1NwZWNpZmllZGAsICd5b3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBjb2x1bW4gZm9yIHRoZSB0YWJsZScpO1xuICB9XG4gIC8vIENoZWNrIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gYW5kIG5vIGR1cGxpY2F0ZWQgY29sdW1uIG5hbWVzIG9yIHBhcnRpdGlvbiBrZXlzLlxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAoY29sdW1ucy5jb25jYXQocGFydGl0aW9uS2V5cyB8fCBbXSkpLmZvckVhY2goY29sdW1uID0+IHtcbiAgICBpZiAobmFtZXMuaGFzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKGxpdGBEdXBsaWNhdGVDb2x1bW5OYW1lYCwgYGNvbHVtbiBuYW1lcyBhbmQgcGFydGl0aW9uIGtleXMgbXVzdCBiZSB1bmlxdWUsIGJ1dCBcXCcke2NvbHVtbi5uYW1lfVxcJyBpcyBkdXBsaWNhdGVkYCk7XG4gICAgfVxuICAgIG5hbWVzLmFkZChjb2x1bW4ubmFtZSk7XG4gIH0pO1xufVxuIl19
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRhYmxlLWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx5REFBMkM7QUFDM0MsaURBQWdEO0FBR2hELDJDQUEwSjtBQUMxSiw0RUFBcUU7QUFDckUsaUVBQW1EO0FBQ25ELDJDQUF1QztBQUd2QyxpRUFBeUc7QUFHekcsMklBQXFLO0FBb0tySzs7R0FFRztBQUNILE1BQXNCLFNBQVUsU0FBUSxlQUFROztJQUN2QyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQWdCO1FBQ3ZFLE1BQU0sU0FBUyxHQUFHLFNBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFNBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLFlBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxnQkFBUyxDQUFDLG1CQUFtQixDQUFDLENBQUMsWUFBYSxDQUFDLENBQUMsQ0FBQztRQUUvSCxPQUFPLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzlDLFFBQVE7WUFDUixTQUFTO1NBQ1YsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBc0I7Ozs7Ozs7Ozs7UUFDcEYsTUFBTSxNQUFPLFNBQVEsZUFBUTtZQUNYLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzFCLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDOUI7SUFPRDs7T0FFRztJQUNhLFFBQVEsQ0FBWTtJQUVwQzs7T0FFRztJQUNhLFVBQVUsQ0FBVTtJQUVwQzs7T0FFRztJQUNhLFVBQVUsQ0FBYTtJQUV2Qzs7T0FFRztJQUNhLE9BQU8sQ0FBVztJQUVsQzs7T0FFRztJQUNhLGFBQWEsQ0FBWTtJQUV6Qzs7T0FFRztJQUNhLGlCQUFpQixDQUFzQjtJQUV2RDs7T0FFRztJQUNhLG1CQUFtQixDQUF1QjtJQUUxRDs7O09BR0c7SUFDZ0IsVUFBVSxDQUE0QjtJQUV6RDs7OztPQUlHO0lBQ0ssNkJBQTZCLEdBQXFCLEVBQUUsQ0FBQztJQUU3RCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQXFCO1FBQzdELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2YsWUFBWSxFQUFFLEtBQUssQ0FBQyxTQUFTO2dCQUMzQixXQUFJLENBQUMsTUFBTSxDQUFDO29CQUNWLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxZQUFLLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsRUFBRTtpQkFDaEUsQ0FBQztTQUNMLENBQUMsQ0FBQzs7Ozs7OytDQXJGZSxTQUFTOzs7O1FBdUYzQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDO1FBRW5DLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztRQUNyRCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO1FBRXpDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUM7UUFFNUMsSUFBSSxDQUFDLHNDQUFzQyxFQUFFLENBQUM7S0FDL0M7SUFNRDs7Ozs7O09BTUc7SUFDSSxpQkFBaUIsQ0FBQyxLQUFxQjs7Ozs7Ozs7OztRQUM1QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDO1FBQ2hFLElBQUksYUFBYSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxzQkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSw2QkFBNkIsRUFBRSxrREFBa0QsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN4SCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1RSxNQUFNLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUQsMkVBQTJFO1FBQzNFLFFBQVE7UUFDUixJQUFJLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4Qix5REFBeUQ7WUFDekQsdUZBQXVGO1lBQ3ZGLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUUvRiwyRUFBMkU7WUFDM0UsMEVBQTBFO1lBQzFFLG9EQUFvRDtZQUNwRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDaEQsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixNQUFNLE1BQU0sR0FBRyxtQkFBUyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDN0MsQ0FBQztZQUVELGdGQUFnRjtZQUNoRiwyRUFBMkU7WUFDM0UsNkVBQTZFO1lBQzdFLGtFQUFrRTtZQUNsRSxNQUFNLE9BQU8sR0FBRztnQkFDZCwwQkFBMEI7Z0JBQzFCLDJCQUEyQjtnQkFDM0IsMkJBQTJCO2dCQUMzQixlQUFlO2dCQUNmLGtCQUFrQjthQUNuQixDQUFDO1lBQ0YsUUFBUSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6RixRQUFRLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDOUYsQ0FBQztRQUVELE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxxQkFBYyxDQUFDLElBQUksRUFBRSxtQkFBbUIsU0FBUyxFQUFFLEVBQUU7WUFDNUYsWUFBWSxFQUFFLDRCQUE0QjtZQUMxQyxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVk7WUFDbkMsVUFBVSxFQUFFO2dCQUNWLFlBQVksRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVk7Z0JBQ3hDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDekIsU0FBUyxFQUFFLFNBQVM7Z0JBQ3BCLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUTthQUNyQjtTQUNGLENBQUMsQ0FBQztRQUVILGtGQUFrRjtRQUNsRiw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsSUFBSyxDQUFDLENBQUM7UUFDL0UsNEJBQTRCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsSUFBSyxDQUFDLENBQUM7UUFFbEYsNkRBQTZEO1FBQzdELElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLDRCQUE0QixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDZCQUE2QixDQUFDLGFBQWEsR0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFDRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7S0FDdkU7SUFFTyxpQkFBaUIsQ0FBQyxJQUFjO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLFlBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3RFLHdFQUF3RTtZQUN4RSx5RUFBeUU7WUFDekUsMEVBQTBFO1lBQzFFLHlFQUF5RTtZQUN6RSxpRUFBaUU7WUFDakUsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSwrQkFBK0IsRUFDbEMsK0VBQStFO2dCQUM3RSxnRkFBZ0YsRUFDbEYsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDcEMsTUFBTSxRQUFRLEdBQUcsWUFBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDbkMsNEVBQTRFO1lBQzVFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDbkYsT0FBTyxNQUFNLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBQ0QsNkVBQTZFO1FBQzdFLDJFQUEyRTtRQUMzRSw2RUFBNkU7UUFDN0UsNEJBQTRCO1FBQzVCLE1BQU0sSUFBSSxHQUFHLElBQUEsMEJBQU8sRUFBQyxRQUFRLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQztLQUMzRTtJQUVPLHNCQUFzQixDQUFDLEtBQXFCO1FBQ2xELElBQUksS0FBSyxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxZQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzFJLE1BQU0sSUFBSSxzQkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSx3QkFBd0IsRUFBRSw0REFBNEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNySixDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLHNCQUFlLENBQUMsSUFBQSxzQkFBRyxFQUFBLHlCQUF5QixFQUFFLGdFQUFnRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xJLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksWUFBWSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzlFLE1BQU0sSUFBSSxzQkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSwyQkFBMkIsRUFBRSxtREFBbUQsS0FBSyxDQUFDLFFBQVEsZ0NBQWdDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQy9LLENBQUM7UUFDSCxDQUFDO0tBQ0Y7SUFFRDs7T0FFRztJQUNLLHNDQUFzQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDOUIsT0FBTztRQUNULENBQUM7UUFFRCxxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDM0QsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSw4QkFBOEIsRUFDakMsZ0VBQWdFLEVBQ2hFLElBQUksQ0FDTCxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFaEUsbURBQW1EO1FBQ25ELEtBQUssTUFBTSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLENBQUM7WUFDNUUsMENBQTBDO1lBQzFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDNUMsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSxpQ0FBaUMsRUFDcEMsZ0NBQWdDLFVBQVUsNkJBQTZCO29CQUN2RSx1QkFBdUIsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQ3JELElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUVELHFDQUFxQztZQUNyQyxNQUFNLGVBQWUsR0FBRyxJQUFBLDREQUFxQyxFQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUVsRix5REFBeUQ7WUFDekQsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNGLElBQUksZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSw4QkFBOEIsRUFDakMsZ0ZBQWdGLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUk7b0JBQzlHLDRGQUE0RixFQUM1RixJQUFJLENBQ0wsQ0FBQztZQUNKLENBQUM7WUFFRCw2QkFBNkI7WUFDN0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ2xELENBQUM7UUFFRCw2Q0FBNkM7UUFDN0MsSUFBSSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLHNCQUFlLENBQ3ZCLElBQUEsc0JBQUcsRUFBQSwyQkFBMkIsRUFDOUIsbUZBQW1GO2dCQUNuRix5RkFBeUYsRUFDekYsSUFBSSxDQUNMLENBQUM7UUFDSixDQUFDO1FBRUQsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsR0FBRyxNQUFNLENBQUM7S0FDaEQ7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsT0FBdUIsRUFBRSxPQUFpQjtRQUNyRCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQzdCLE9BQU87U0FDUixDQUFDLENBQUM7S0FDSjtJQUVEOzs7O09BSUc7SUFDSSwwQkFBMEIsQ0FBQyxPQUF1QixFQUFFLE9BQWlCO1FBQzFFLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLFlBQVksRUFBRTtnQkFDWixJQUFJLENBQUMsUUFBUTtnQkFDYixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxVQUFVO2dCQUNoQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7YUFDMUI7WUFDRCxPQUFPO1NBQ1IsQ0FBQyxDQUFDO0tBQ0o7O0FBelRILDhCQTBUQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLHNCQUF1QixTQUFRLHNCQUFTO0lBQzVDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFnQjtRQUN4QyxNQUFNLEtBQUssR0FBRyxZQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLDZFQUE2RTtRQUM3RSw0REFBNEQ7UUFDNUQsTUFBTSxFQUFFLEdBQUcsZ0RBQWdELENBQUM7UUFDNUQsT0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQTRCLElBQUksSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDekc7SUFFZSxjQUFjLENBQWtCO0lBQ2hDLGlCQUFpQixDQUFrQjtJQUNsQyxRQUFRLENBQWM7SUFFdkMsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQiw4RUFBOEU7UUFDOUUsNkRBQTZEO1FBQzdELGtGQUFrRjtRQUNsRix3RkFBd0Y7UUFDeEYsK0VBQStFO1FBQy9FLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxrRUFBNkIsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFO1lBQ3ZFLE9BQU8sRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxxRUFBZ0MsQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFO1lBQ2hGLE9BQU8sRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ2hELGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztZQUNuQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLGFBQWEsRUFBRSxlQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxZQUFZLEVBQUUsZUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7U0FDbkMsQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0tBQ25DO0NBQ0Y7QUFFRCxTQUFTLGNBQWMsQ0FBQyxPQUFpQixFQUFFLGFBQXdCO0lBQ2pFLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksOEJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLG9CQUFvQixFQUFFLG9EQUFvRCxDQUFDLENBQUM7SUFDbkgsQ0FBQztJQUNELHVGQUF1RjtJQUN2RixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2hDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDckQsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sSUFBSSw4QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEscUJBQXFCLEVBQUUseURBQXlELE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLENBQUM7UUFDdEosQ0FBQztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2ZuVGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBLZXlHcmFudHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHR5cGUgeyBJUmVzb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IEFybkZvcm1hdCwgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uLCBGbiwgTGF6eSwgTmFtZXMsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlJztcbmltcG9ydCB7IGxpdCwgbWQ1aGFzaCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0ICogYXMgY3IgZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgRGF0YUZvcm1hdCB9IGZyb20gJy4vZGF0YS1mb3JtYXQnO1xuaW1wb3J0IHR5cGUgeyBJRGF0YWJhc2UgfSBmcm9tICcuL2RhdGFiYXNlJztcbmltcG9ydCB7IGdlbmVyYXRlUGFydGl0aW9uUHJvamVjdGlvblBhcmFtZXRlcnMsIHR5cGUgUGFydGl0aW9uUHJvamVjdGlvbiB9IGZyb20gJy4vcGFydGl0aW9uLXByb2plY3Rpb24nO1xuaW1wb3J0IHR5cGUgeyBDb2x1bW4gfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFN0b3JhZ2VQYXJhbWV0ZXIgfSBmcm9tICcuL3N0b3JhZ2UtcGFyYW1ldGVyJztcbmltcG9ydCB7IFBhcnRpdGlvbkluZGV4SXNDb21wbGV0ZUZ1bmN0aW9uLCBQYXJ0aXRpb25JbmRleE9uRXZlbnRGdW5jdGlvbiB9IGZyb20gJy4uL2N1c3RvbS1yZXNvdXJjZS1oYW5kbGVycy9kaXN0L2F3cy1nbHVlLWFscGhhL3BhcnRpdGlvbi1pbmRleC1wcm92aWRlci5nZW5lcmF0ZWQnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgb2YgYSBQYXJ0aXRpb24gSW5kZXguXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFydGl0aW9uSW5kZXgge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBhcnRpdGlvbiBpbmRleC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgZm9yIHlvdS5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnRpdGlvbiBrZXkgbmFtZXMgdGhhdCBjb21wcmlzZSB0aGUgcGFydGl0aW9uXG4gICAqIGluZGV4LiBUaGUgbmFtZXMgbXVzdCBjb3JyZXNwb25kIHRvIGEgbmFtZSBpbiB0aGVcbiAgICogdGFibGUncyBwYXJ0aXRpb24ga2V5cy5cbiAgICovXG4gIHJlYWRvbmx5IGtleU5hbWVzOiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSVRhYmxlIGV4dGVuZHMgSVJlc291cmNlIHtcbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQXR0cmlidXRlcyB7XG4gIHJlYWRvbmx5IHRhYmxlQXJuOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGdlbmVyYXRlZCBieSBDREsuXG4gICAqL1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIHRoZSB0YWJsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YWJhc2UgaW4gd2hpY2ggdG8gc3RvcmUgdGhlIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U6IElEYXRhYmFzZTtcblxuICAvKipcbiAgICogQ29sdW1ucyBvZiB0aGUgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBjb2x1bW5zOiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGNvbHVtbnMgb2YgdGhlIHRhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0YWJsZSBpcyBub3QgcGFydGl0aW9uZWRcbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbktleXM/OiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGluZGV4ZXMgb24gdGhlIHRhYmxlLiBBIG1heGltdW0gb2YgMyBpbmRleGVzXG4gICAqIGFyZSBhbGxvd2VkIG9uIGEgdGFibGUuIEtleXMgaW4gdGhlIGluZGV4IG11c3QgYmUgcGFydFxuICAgKiBvZiB0aGUgdGFibGUncyBwYXJ0aXRpb24ga2V5cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGFibGUgaGFzIG5vIHBhcnRpdGlvbiBpbmRleGVzXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb25JbmRleGVzPzogUGFydGl0aW9uSW5kZXhbXTtcblxuICAvKipcbiAgICogU3RvcmFnZSB0eXBlIG9mIHRoZSB0YWJsZSdzIGRhdGEuXG4gICAqL1xuICByZWFkb25seSBkYXRhRm9ybWF0OiBEYXRhRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUncyBkYXRhIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcHJlc3NlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRoZSB0YWJsZSBkYXRhIGlzIHN0b3JlZCBpbiBzdWJkaXJlY3Rvcmllcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHN0b3JlZEFzU3ViRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHBhcnRpdGlvbiBmaWx0ZXJpbmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvZ2x1ZS1iZXN0LXByYWN0aWNlcy5odG1sI2dsdWUtYmVzdC1wcmFjdGljZXMtcGFydGl0aW9uLWluZGV4XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHBhcmFtZXRlciBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlUGFydGl0aW9uRmlsdGVyaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHVzZXItc3VwcGxpZWQgcHJvcGVydGllcyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwaHlzaWNhbCBzdG9yYWdlIG9mIHRoaXMgdGFibGUuIFRoZXNlIHByb3BlcnRpZXMgaGVscCBkZXNjcmliZSB0aGUgZm9ybWF0IG9mIHRoZSBkYXRhIHRoYXQgaXMgc3RvcmVkIHdpdGhpbiB0aGUgY3Jhd2xlZCBkYXRhIHNvdXJjZXMuXG4gICAqXG4gICAqIFRoZSBrZXkvdmFsdWUgcGFpcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSBzdWJtaXR0ZWQgYXJlIG5vdCBsaW1pdGVkLCBob3dldmVyIHRoZWlyIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGd1YXJhbnRlZWQuXG4gICAqXG4gICAqIFNvbWUga2V5cyB3aWxsIGJlIGF1dG8tcG9wdWxhdGVkIGJ5IGdsdWUgY3Jhd2xlcnMsIGhvd2V2ZXIsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlbSBieSBzcGVjaWZ5aW5nIHRoZSBrZXkgYW5kIHZhbHVlIGluIHRoaXMgcHJvcGVydHkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L2RnL3RhYmxlLXByb3BlcnRpZXMtY3Jhd2xlci5odG1sXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3JlZHNoaWZ0L2xhdGVzdC9kZy9yX0NSRUFURV9FWFRFUk5BTF9UQUJMRS5odG1sI3JfQ1JFQVRFX0VYVEVSTkFMX1RBQkxFLXBhcmFtZXRlcnMgLSB1bmRlciBfXCJUQUJMRSBQUk9QRVJUSUVTXCJfXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqICAgIGRlY2xhcmUgY29uc3QgZ2x1ZURhdGFiYXNlOiBnbHVlLklEYXRhYmFzZTtcbiAgICogICAgY29uc3QgdGFibGUgPSBuZXcgZ2x1ZS5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAqICAgICAgc3RvcmFnZVBhcmFtZXRlcnM6IFtcbiAgICogICAgICAgICAgZ2x1ZS5TdG9yYWdlUGFyYW1ldGVyLnNraXBIZWFkZXJMaW5lQ291bnQoMSksXG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jb21wcmVzc2lvblR5cGUoZ2x1ZS5Db21wcmVzc2lvblR5cGUuR1pJUCksXG4gICAqICAgICAgICAgIGdsdWUuU3RvcmFnZVBhcmFtZXRlci5jdXN0b20oJ2ZvbycsICdiYXInKSwgLy8gV2lsbCBoYXZlIG5vIGVmZmVjdFxuICAgKiAgICAgICAgICBnbHVlLlN0b3JhZ2VQYXJhbWV0ZXIuY3VzdG9tKCdzZXBhcmF0b3JDaGFyJywgJywnKSwgLy8gV2lsbCBkZXNjcmliZSB0aGUgc2VwYXJhdG9yIGNoYXIgdXNlZCBpbiB0aGUgZGF0YVxuICAgKiAgICAgICAgICBnbHVlLlN0b3JhZ2VQYXJhbWV0ZXIuY3VzdG9tKGdsdWUuU3RvcmFnZVBhcmFtZXRlcnMuV1JJVEVfUEFSQUxMRUwsICdvZmYnKSxcbiAgICogICAgICBdLFxuICAgKiAgICAgIC8vIC4uLlxuICAgKiAgICAgIGRhdGFiYXNlOiBnbHVlRGF0YWJhc2UsXG4gICAqICAgICAgY29sdW1uczogW3tcbiAgICogICAgICAgICAgbmFtZTogJ2NvbDEnLFxuICAgKiAgICAgICAgICB0eXBlOiBnbHVlLlNjaGVtYS5TVFJJTkcsXG4gICAqICAgICAgfV0sXG4gICAqICAgICAgZGF0YUZvcm1hdDogZ2x1ZS5EYXRhRm9ybWF0LkNTVixcbiAgICogICAgfSk7XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gVGhlIHBhcmFtZXRlciBpcyBub3QgZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZVBhcmFtZXRlcnM/OiBTdG9yYWdlUGFyYW1ldGVyW107XG5cbiAgLyoqXG4gICAqIFRoZSBrZXkvdmFsdWUgcGFpcnMgZGVmaW5lIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB0YWJsZS5cbiAgICogVGhlIGtleS92YWx1ZSBwYWlycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHN1Ym1pdHRlZCBhcmUgbm90IGxpbWl0ZWQsIGhvd2V2ZXIgdGhlaXIgZnVuY3Rpb25hbGl0eSBpcyBub3QgZ3VhcmFudGVlZC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcHJvcGVydGllcy1nbHVlLXRhYmxlLXRhYmxlaW5wdXQuaHRtbCNjZm4tZ2x1ZS10YWJsZS10YWJsZWlucHV0LXBhcmFtZXRlcnNcbiAgICpcbiAgICogQGRlZmF1bHQgLSBUaGUgcGFyYW1ldGVyIGlzIG5vdCBkZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBmb3IgdGhpcyB0YWJsZS5cbiAgICpcbiAgICogUGFydGl0aW9uIHByb2plY3Rpb24gYWxsb3dzIEF0aGVuYSB0byBhdXRvbWF0aWNhbGx5IGFkZCBuZXcgcGFydGl0aW9uc1xuICAgKiB3aXRob3V0IHJlcXVpcmluZyBgQUxURVIgVEFCTEUgQUREIFBBUlRJVElPTmAgc3RhdGVtZW50cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9wYXJ0aXRpb24tcHJvamVjdGlvbi5odG1sXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcGFydGl0aW9uIHByb2plY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvblByb2plY3Rpb24/OiBQYXJ0aXRpb25Qcm9qZWN0aW9uO1xufVxuXG4vKipcbiAqIEEgR2x1ZSB0YWJsZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRhYmxlQmFzZSBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRhYmxlIHtcbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgdGFibGVBcm46IHN0cmluZyk6IElUYWJsZSB7XG4gICAgY29uc3QgdGFibGVOYW1lID0gRm4uc2VsZWN0KDEsIEZuLnNwbGl0KCcvJywgU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKHRhYmxlQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSkucmVzb3VyY2VOYW1lISkpO1xuXG4gICAgcmV0dXJuIFRhYmxlQmFzZS5mcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgdGFibGVBcm4sXG4gICAgICB0YWJsZU5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIFRhYmxlIGNvbnN0cnVjdCB0aGF0IHJlcHJlc2VudHMgYW4gZXh0ZXJuYWwgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgY3JlYXRpbmcgY29uc3RydWN0ICh1c3VhbGx5IGB0aGlzYCkuXG4gICAqIEBwYXJhbSBpZCBUaGUgY29uc3RydWN0J3MgaWQuXG4gICAqIEBwYXJhbSBhdHRycyBJbXBvcnQgYXR0cmlidXRlc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVGFibGVBdHRyaWJ1dGVzKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGF0dHJzOiBUYWJsZUF0dHJpYnV0ZXMpOiBJVGFibGUge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlc291cmNlIGltcGxlbWVudHMgSVRhYmxlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSB0YWJsZUFybiA9IGF0dHJzLnRhYmxlQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHRhYmxlTmFtZSA9IGF0dHJzLnRhYmxlTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IHRhYmxlUmVzb3VyY2U6IENmblRhYmxlO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgdGFibGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSB0YWJsZUFybjogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcGFydGl0aW9uSW5kZXhlcz86IFBhcnRpdGlvbkluZGV4W107XG5cbiAgLyoqXG4gICAqIERhdGFiYXNlIHRoaXMgdGFibGUgYmVsb25ncyB0by5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhYmFzZTogSURhdGFiYXNlO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgdGFibGUncyBkYXRhIGlzIGNvbXByZXNzZWQgb3Igbm90LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbXByZXNzZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBvZiB0aGlzIHRhYmxlJ3MgZGF0YSBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkYXRhRm9ybWF0OiBEYXRhRm9ybWF0O1xuXG4gIC8qKlxuICAgKiBUaGlzIHRhYmxlJ3MgY29sdW1ucy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zOiBDb2x1bW5bXTtcblxuICAvKipcbiAgICogVGhpcyB0YWJsZSdzIHBhcnRpdGlvbiBrZXlzIGlmIHRoZSB0YWJsZSBpcyBwYXJ0aXRpb25lZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYXJ0aXRpb25LZXlzPzogQ29sdW1uW107XG5cbiAgLyoqXG4gICAqIFRoZSB0YWJsZXMnIHN0b3JhZ2UgZGVzY3JpcHRvciBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHN0b3JhZ2VQYXJhbWV0ZXJzPzogU3RvcmFnZVBhcmFtZXRlcltdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHRhYmxlJ3MgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBpZiBlbmFibGVkLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvblByb2plY3Rpb24/OiBQYXJ0aXRpb25Qcm9qZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFibGVzJyBwcm9wZXJ0aWVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFibGUuXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9Vc2VyR3VpZGUvYXdzLXByb3BlcnRpZXMtZ2x1ZS10YWJsZS10YWJsZWlucHV0Lmh0bWwjY2ZuLWdsdWUtdGFibGUtdGFibGVpbnB1dC1wYXJhbWV0ZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1ldGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogUGFydGl0aW9uIGluZGV4ZXMgbXVzdCBiZSBjcmVhdGVkIG9uZSBhdCBhIHRpbWUuIFRvIGF2b2lkXG4gICAqIHJhY2UgY29uZGl0aW9ucywgd2Ugc3RvcmUgdGhlIHJlc291cmNlIGFuZCBhZGQgZGVwZW5kZW5jaWVzXG4gICAqIGVhY2ggdGltZSBhIG5ldyBwYXJ0aXRpb24gaW5kZXggaXMgY3JlYXRlZC5cbiAgICovXG4gIHByaXZhdGUgcGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZXM6IEN1c3RvbVJlc291cmNlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogVGFibGVCYXNlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMudGFibGVOYW1lID8/XG4gICAgICAgIExhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PiBOYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge30pLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIH0pLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kYXRhYmFzZSA9IHByb3BzLmRhdGFiYXNlO1xuICAgIHRoaXMuZGF0YUZvcm1hdCA9IHByb3BzLmRhdGFGb3JtYXQ7XG5cbiAgICB2YWxpZGF0ZVNjaGVtYShwcm9wcy5jb2x1bW5zLCBwcm9wcy5wYXJ0aXRpb25LZXlzKTtcbiAgICB0aGlzLmNvbHVtbnMgPSBwcm9wcy5jb2x1bW5zO1xuICAgIHRoaXMucGFydGl0aW9uS2V5cyA9IHByb3BzLnBhcnRpdGlvbktleXM7XG4gICAgdGhpcy5zdG9yYWdlUGFyYW1ldGVycyA9IHByb3BzLnN0b3JhZ2VQYXJhbWV0ZXJzO1xuICAgIHRoaXMucGFydGl0aW9uUHJvamVjdGlvbiA9IHByb3BzLnBhcnRpdGlvblByb2plY3Rpb247XG4gICAgdGhpcy5wYXJhbWV0ZXJzID0gcHJvcHMucGFyYW1ldGVycyA/PyB7fTtcblxuICAgIHRoaXMuY29tcHJlc3NlZCA9IHByb3BzLmNvbXByZXNzZWQgPz8gZmFsc2U7XG5cbiAgICB0aGlzLnZhbGlkYXRlQW5kR2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuICBwdWJsaWMgYWJzdHJhY3QgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbiAgcHVibGljIGFic3RyYWN0IGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBBZGQgYSBwYXJ0aXRpb24gaW5kZXggdG8gdGhlIHRhYmxlLiBZb3UgY2FuIGhhdmUgYSBtYXhpbXVtIG9mIDMgcGFydGl0aW9uXG4gICAqIGluZGV4ZXMgdG8gYSB0YWJsZS4gUGFydGl0aW9uIGluZGV4IGtleXMgbXVzdCBiZSBhIHN1YnNldCBvZiB0aGUgdGFibGUnc1xuICAgKiBwYXJ0aXRpb24ga2V5cy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZ2x1ZS9sYXRlc3QvZGcvcGFydGl0aW9uLWluZGV4ZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIGFkZFBhcnRpdGlvbkluZGV4KGluZGV4OiBQYXJ0aXRpb25JbmRleCkge1xuICAgIGNvbnN0IG51bVBhcnRpdGlvbnMgPSB0aGlzLnBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2VzLmxlbmd0aDtcbiAgICBpZiAobnVtUGFydGl0aW9ucyA+PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBNYXhQYXJ0aXRpb25JbmRleGVzRXhjZWVkZWRgLCAnTWF4aW11bSBudW1iZXIgb2YgcGFydGl0aW9uIGluZGV4ZXMgYWxsb3dlZCBpcyAzJywgdGhpcyk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVQYXJ0aXRpb25JbmRleChpbmRleCk7XG5cbiAgICBjb25zdCBpbmRleE5hbWUgPSBpbmRleC5pbmRleE5hbWUgPz8gdGhpcy5nZW5lcmF0ZUluZGV4TmFtZShpbmRleC5rZXlOYW1lcyk7XG4gICAgY29uc3QgcHJvdmlkZXIgPSBQYXJ0aXRpb25JbmRleFByb3ZpZGVyLmdldE9yQ3JlYXRlKHRoaXMpO1xuXG4gICAgLy8gVGhlIGdyYW50cyBhcmUgaWRlbnRpY2FsIGZvciBldmVyeSBpbmRleCBvbiB0aGlzIHRhYmxlLCBzbyBvbmx5IGFkZCB0aGVtXG4gICAgLy8gb25jZS5cbiAgICBpZiAobnVtUGFydGl0aW9ucyA9PT0gMCkge1xuICAgICAgLy8gQWRkIHNjb3BlZCBwZXJtaXNzaW9ucyBmb3IgdGhpcyB0YWJsZSdzIEdsdWUgcmVzb3VyY2VzXG4gICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hd3NnbHVlLmh0bWxcbiAgICAgIGNvbnN0IHJlc291cmNlcyA9IFt0aGlzLnRhYmxlQXJuLCB0aGlzLmRhdGFiYXNlLmRhdGFiYXNlQXJuLCB0aGlzLmRhdGFiYXNlLmNhdGFsb2cuY2F0YWxvZ0Fybl07XG5cbiAgICAgIC8vIFRoZSBjYXRhbG9nJ3MgZW5jcnlwdGlvbiBpcyBmaXhlZCBhdCBjb25zdHJ1Y3Rpb24sIHNvIHRoZSBlbmNyeXB0aW9uIGtleVxuICAgICAgLy8gKGlmIGFueSkgaXMga25vd24gaGVyZS4gR3JhbnQgdGhlIGhhbmRsZXJzIGFjY2VzcyB0byBpdC4gTm8tb3Agd2hlbiB0aGVcbiAgICAgIC8vIGNhdGFsb2cgdXNlcyBhbiBBV1MtbWFuYWdlZCBrZXkgb3Igbm8gZW5jcnlwdGlvbi5cbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuZGF0YWJhc2UuY2F0YWxvZy5lbmNyeXB0aW9uS2V5O1xuICAgICAgaWYgKGtleSkge1xuICAgICAgICBjb25zdCBncmFudHMgPSBLZXlHcmFudHMuZnJvbUtleShrZXkpO1xuICAgICAgICBncmFudHMuZGVjcnlwdChwcm92aWRlci5vbkV2ZW50SGFuZGxlcik7XG4gICAgICAgIGdyYW50cy5kZWNyeXB0KHByb3ZpZGVyLmlzQ29tcGxldGVIYW5kbGVyKTtcbiAgICAgIH1cblxuICAgICAgLy8gQm90aCBoYW5kbGVycyBjcmVhdGUsIGRlbGV0ZSwgYW5kIGluc3BlY3QgaW5kZXhlczogb25FdmVudCBjcmVhdGVzL2RlbGV0ZXMgb25cbiAgICAgIC8vIENyZWF0ZS9EZWxldGUvVXBkYXRlLCBhbmQgaXNDb21wbGV0ZSByZWNyZWF0ZXMgdGhlIGluZGV4IHdoaWxlIGRyaXZpbmcgYVxuICAgICAgLy8ga2V5LWNoYW5nZSB1cGRhdGUgKGRlbGV0ZSAtPiByZWNyZWF0ZSAtPiBBQ1RJVkUpLiBVcGRhdGVUYWJsZS9HZXRUYWJsZSBhcmVcbiAgICAgIC8vIHJlcXVpcmVkIGJ5IHRoZSBDcmVhdGVQYXJ0aXRpb25JbmRleC9EZWxldGVQYXJ0aXRpb25JbmRleCBBUElzLlxuICAgICAgY29uc3QgYWN0aW9ucyA9IFtcbiAgICAgICAgJ2dsdWU6R2V0UGFydGl0aW9uSW5kZXhlcycsXG4gICAgICAgICdnbHVlOkNyZWF0ZVBhcnRpdGlvbkluZGV4JyxcbiAgICAgICAgJ2dsdWU6RGVsZXRlUGFydGl0aW9uSW5kZXgnLFxuICAgICAgICAnZ2x1ZTpHZXRUYWJsZScsXG4gICAgICAgICdnbHVlOlVwZGF0ZVRhYmxlJyxcbiAgICAgIF07XG4gICAgICBwcm92aWRlci5vbkV2ZW50SGFuZGxlci5hZGRUb1JvbGVQb2xpY3kobmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoeyBhY3Rpb25zLCByZXNvdXJjZXMgfSkpO1xuICAgICAgcHJvdmlkZXIuaXNDb21wbGV0ZUhhbmRsZXIuYWRkVG9Sb2xlUG9saWN5KG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHsgYWN0aW9ucywgcmVzb3VyY2VzIH0pKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlID0gbmV3IEN1c3RvbVJlc291cmNlKHRoaXMsIGBwYXJ0aXRpb24taW5kZXgtJHtpbmRleE5hbWV9YCwge1xuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpHbHVlUGFydGl0aW9uSW5kZXgnLFxuICAgICAgc2VydmljZVRva2VuOiBwcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIERhdGFiYXNlTmFtZTogdGhpcy5kYXRhYmFzZS5kYXRhYmFzZU5hbWUsXG4gICAgICAgIFRhYmxlTmFtZTogdGhpcy50YWJsZU5hbWUsXG4gICAgICAgIEluZGV4TmFtZTogaW5kZXhOYW1lLFxuICAgICAgICBLZXlzOiBpbmRleC5rZXlOYW1lcyxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgSUFNIHBvbGljaWVzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgY3VzdG9tIHJlc291cmNlIGludm9rZXMgdGhlIGhhbmRsZXJzXG4gICAgcGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kocHJvdmlkZXIub25FdmVudEhhbmRsZXIucm9sZSEpO1xuICAgIHBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHByb3ZpZGVyLmlzQ29tcGxldGVIYW5kbGVyLnJvbGUhKTtcblxuICAgIC8vIERlcGVuZCBvbiBwcmV2aW91cyBwYXJ0aXRpb24gaW5kZXggdG8gYXZvaWQgcmFjZSBjb25kaXRpb25cbiAgICBpZiAobnVtUGFydGl0aW9ucyA+IDApIHtcbiAgICAgIHBhcnRpdGlvbkluZGV4Q3VzdG9tUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMucGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZXNbbnVtUGFydGl0aW9ucy0xXSk7XG4gICAgfVxuICAgIHRoaXMucGFydGl0aW9uSW5kZXhDdXN0b21SZXNvdXJjZXMucHVzaChwYXJ0aXRpb25JbmRleEN1c3RvbVJlc291cmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJbmRleE5hbWUoa2V5czogc3RyaW5nW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1heEluZGV4TGVuZ3RoID0gODA7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChrZXlzKSB8fCBrZXlzLnNvbWUoayA9PiBUb2tlbi5pc1VucmVzb2x2ZWQoaykpKSB7XG4gICAgICAvLyBUaGUgaW5kZXggbmFtZSBpcyBkZXJpdmVkIGZyb20gdGhlIGtleSBuYW1lcywgc28gdG9rZW5pemVkIGtleXMgbGVhdmVcbiAgICAgIC8vIG5vdGhpbmcgc3RhYmxlIHRvIGdlbmVyYXRlIGZyb206IGFueSBhdXRvLWdlbmVyYXRlZCBuYW1lIHdvdWxkIGhhdmUgdG9cbiAgICAgIC8vIGZhbGwgYmFjayB0byB0aGUgaW5kZXgncyBwb3NpdGlvbiBvbiB0aGUgdGFibGUsIHdoaWNoIHNoaWZ0cyBpZiBpbmRleGVzXG4gICAgICAvLyBhcmUgYWRkZWQsIHJlbW92ZWQsIG9yIHJlb3JkZXJlZCAtIHNpbGVudGx5IHJlcGxhY2luZyBpbmRleGVzIHRoYXQgZGlkXG4gICAgICAvLyBub3QgYWN0dWFsbHkgY2hhbmdlLiBSZXF1aXJlIGFuIGV4cGxpY2l0LCBzdGFibGUgbmFtZSBpbnN0ZWFkLlxuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YFRva2VuaXplZEluZGV4S2V5c1JlcXVpcmVOYW1lYCxcbiAgICAgICAgJ2Nhbm5vdCBhdXRvLWdlbmVyYXRlIGEgc3RhYmxlIHBhcnRpdGlvbiBpbmRleCBuYW1lIGZyb20gdG9rZW5pemVkIGtleSBuYW1lczsgJyArXG4gICAgICAgICAgJ3NwZWNpZnkgYGluZGV4TmFtZWAgZXhwbGljaXRseSB3aGVuIGluZGV4IGtleXMgYXJlIG5vdCBrbm93biBhdCBzeW50aGVzaXMgdGltZScsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBwcmVmaXggPSBrZXlzLmpvaW4oJy0nKSArICctJztcbiAgICBjb25zdCB1bmlxdWVJZCA9IE5hbWVzLnVuaXF1ZUlkKHRoaXMpO1xuICAgIGlmIChwcmVmaXgubGVuZ3RoIDwgbWF4SW5kZXhMZW5ndGgpIHtcbiAgICAgIC8vIENvbW1vbiBjYXNlOiB0cmltIHRoZSB1bmlxdWVJZCB0YWlsIHNvIHRoZSB3aG9sZSBuYW1lIGZpdHMgdW5kZXIgdGhlIGNhcC5cbiAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBNYXRoLm1heCgwLCB1bmlxdWVJZC5sZW5ndGggLSAobWF4SW5kZXhMZW5ndGggLSBwcmVmaXgubGVuZ3RoKSk7XG4gICAgICByZXR1cm4gcHJlZml4ICsgdW5pcXVlSWQuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpO1xuICAgIH1cbiAgICAvLyBUaGUgam9pbmVkIGtleSBuYW1lcyBhbG9uZSBleGNlZWQgdGhlIGJ1ZGdldCAobG9uZyBrZXkgbmFtZXMpLCBzbyB0cmltbWluZ1xuICAgIC8vIHRoZSB1bmlxdWVJZCBpcyBub3QgZW5vdWdoLiBUcnVuY2F0ZSB0aGUgcHJlZml4IGFuZCBhcHBlbmQgYSBoYXNoIG9mIHRoZVxuICAgIC8vIHRhYmxlIHBhdGggcGx1cyB0aGUgZnVsbCBrZXkgbGlzdCwgc28gdHdvIGRpZmZlcmVudCAobG9uZykga2V5IHNldHMgY2Fubm90XG4gICAgLy8gY29sbGlkZSBhZnRlciB0cnVuY2F0aW9uLlxuICAgIGNvbnN0IGhhc2ggPSBtZDVoYXNoKHVuaXF1ZUlkICsgJy0nICsga2V5cy5qb2luKCctJykpLnNsaWNlKDAsIDgpO1xuICAgIHJldHVybiBwcmVmaXguc3Vic3RyaW5nKDAsIG1heEluZGV4TGVuZ3RoIC0gaGFzaC5sZW5ndGggLSAxKSArICctJyArIGhhc2g7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlUGFydGl0aW9uSW5kZXgoaW5kZXg6IFBhcnRpdGlvbkluZGV4KSB7XG4gICAgaWYgKGluZGV4LmluZGV4TmFtZSAhPT0gdW5kZWZpbmVkICYmICFUb2tlbi5pc1VucmVzb2x2ZWQoaW5kZXguaW5kZXhOYW1lKSAmJiAoaW5kZXguaW5kZXhOYW1lLmxlbmd0aCA8IDEgfHwgaW5kZXguaW5kZXhOYW1lLmxlbmd0aCA+IDI1NSkpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IobGl0YEluZGV4TmFtZUxlbmd0aEludmFsaWRgLCBgSW5kZXggbmFtZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1IGNoYXJhY3RlcnMsIGJ1dCBnb3QgJHtpbmRleC5pbmRleE5hbWUubGVuZ3RofWAsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMucGFydGl0aW9uS2V5cyB8fCB0aGlzLnBhcnRpdGlvbktleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBOb1BhcnRpdGlvbktleXNGb3JJbmRleGAsICdUaGUgdGFibGUgbXVzdCBoYXZlIHBhcnRpdGlvbiBrZXlzIHRvIGNyZWF0ZSBhIHBhcnRpdGlvbiBpbmRleCcsIHRoaXMpO1xuICAgIH1cbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChpbmRleC5rZXlOYW1lcykpIHtcbiAgICAgIGNvbnN0IGtleU5hbWVzID0gdGhpcy5wYXJ0aXRpb25LZXlzLm1hcChwayA9PiBway5uYW1lKTtcbiAgICAgIGNvbnN0IGNvbmNyZXRlS2V5cyA9IGluZGV4LmtleU5hbWVzLmZpbHRlcihrID0+ICFUb2tlbi5pc1VucmVzb2x2ZWQoaykpO1xuICAgICAgaWYgKGNvbmNyZXRlS2V5cy5sZW5ndGggPiAwICYmICFjb25jcmV0ZUtleXMuZXZlcnkoayA9PiBrZXlOYW1lcy5pbmNsdWRlcyhrKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihsaXRgSW5kZXhLZXlzTm90UGFydGl0aW9uS2V5c2AsIGBBbGwgaW5kZXgga2V5cyBtdXN0IGFsc28gYmUgcGFydGl0aW9uIGtleXMuIEdvdCAke2luZGV4LmtleU5hbWVzfSBidXQgcGFydGl0aW9uIGtleSBuYW1lcyBhcmUgJHtrZXlOYW1lc31gLCB0aGlzKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgcGFydGl0aW9uIHByb2plY3Rpb24gY29uZmlndXJhdGlvbiBhbmQgbWVyZ2UgZ2VuZXJhdGVkIHBhcmFtZXRlcnMgaW50byB0aGlzLnBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlQW5kR2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wYXJ0aXRpb25Qcm9qZWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgdGhhdCBwYXJ0aXRpb24ga2V5cyBleGlzdFxuICAgIGlmICghdGhpcy5wYXJ0aXRpb25LZXlzIHx8IHRoaXMucGFydGl0aW9uS2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBOb1BhcnRpdGlvbktleXNGb3JQcm9qZWN0aW9uYCxcbiAgICAgICAgJ1RoZSB0YWJsZSBtdXN0IGhhdmUgcGFydGl0aW9uIGtleXMgdG8gdXNlIHBhcnRpdGlvbiBwcm9qZWN0aW9uJyxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydGl0aW9uS2V5TmFtZXMgPSB0aGlzLnBhcnRpdGlvbktleXMubWFwKHBrID0+IHBrLm5hbWUpO1xuXG4gICAgLy8gVmFsaWRhdGUgZWFjaCBwYXJ0aXRpb24gcHJvamVjdGlvbiBjb25maWd1cmF0aW9uXG4gICAgZm9yIChjb25zdCBbY29sdW1uTmFtZSwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnBhcnRpdGlvblByb2plY3Rpb24pKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IGNvbHVtbiBpcyBhIHBhcnRpdGlvbiBrZXlcbiAgICAgIGlmICghcGFydGl0aW9uS2V5TmFtZXMuaW5jbHVkZXMoY29sdW1uTmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBsaXRgUHJvamVjdGlvbkNvbHVtbk5vdFBhcnRpdGlvbktleWAsXG4gICAgICAgICAgYFBhcnRpdGlvbiBwcm9qZWN0aW9uIGNvbHVtbiBcIiR7Y29sdW1uTmFtZX1cIiBtdXN0IGJlIGEgcGFydGl0aW9uIGtleS4gYCArXG4gICAgICAgICAgYFBhcnRpdGlvbiBrZXlzIGFyZTogJHtwYXJ0aXRpb25LZXlOYW1lcy5qb2luKCcsICcpfWAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gR2VuZXJhdGUgQ2xvdWRGb3JtYXRpb24gcGFyYW1ldGVyc1xuICAgICAgY29uc3QgZ2VuZXJhdGVkUGFyYW1zID0gZ2VuZXJhdGVQYXJ0aXRpb25Qcm9qZWN0aW9uUGFyYW1ldGVycyhjb2x1bW5OYW1lLCBjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgY29uZmxpY3RzIHdpdGggbWFudWFsbHkgc3BlY2lmaWVkIHBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IGNvbmZsaWN0aW5nS2V5cyA9IE9iamVjdC5rZXlzKGdlbmVyYXRlZFBhcmFtcykuZmlsdGVyKGtleSA9PiBrZXkgaW4gdGhpcy5wYXJhbWV0ZXJzKTtcbiAgICAgIGlmIChjb25mbGljdGluZ0tleXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGxpdGBQcm9qZWN0aW9uUGFyYW1ldGVyc0NvbmZsaWN0YCxcbiAgICAgICAgICBgUGFydGl0aW9uIHByb2plY3Rpb24gcGFyYW1ldGVycyBjb25mbGljdCB3aXRoIG1hbnVhbGx5IHNwZWNpZmllZCBwYXJhbWV0ZXJzOiAke2NvbmZsaWN0aW5nS2V5cy5qb2luKCcsICcpfS4gYCArXG4gICAgICAgICAgJ1VzZSB0aGUgcGFydGl0aW9uUHJvamVjdGlvbiBwcm9wZXJ0eSBpbnN0ZWFkIG9mIG1hbnVhbGx5IHNwZWNpZnlpbmcgcHJvamVjdGlvbiBwYXJhbWV0ZXJzLicsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgLy8gTWVyZ2UgaW50byB0aGlzLnBhcmFtZXRlcnNcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5wYXJhbWV0ZXJzLCBnZW5lcmF0ZWRQYXJhbXMpO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBjb25mbGljdCB3aXRoIHByb2plY3Rpb24uZW5hYmxlZFxuICAgIGlmICgncHJvamVjdGlvbi5lbmFibGVkJyBpbiB0aGlzLnBhcmFtZXRlcnMpIHtcbiAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgIGxpdGBQcm9qZWN0aW9uRW5hYmxlZENvbmZsaWN0YCxcbiAgICAgICAgJ1BhcmFtZXRlciBcInByb2plY3Rpb24uZW5hYmxlZFwiIGNvbmZsaWN0cyB3aXRoIHBhcnRpdGlvblByb2plY3Rpb24gY29uZmlndXJhdGlvbi4gJyArXG4gICAgICAgICdVc2UgdGhlIHBhcnRpdGlvblByb2plY3Rpb24gcHJvcGVydHkgaW5zdGVhZCBvZiBtYW51YWxseSBzcGVjaWZ5aW5nIHByb2plY3Rpb24uZW5hYmxlZC4nLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBFbmFibGUgcGFydGl0aW9uIHByb2plY3Rpb24gZ2xvYmFsbHlcbiAgICB0aGlzLnBhcmFtZXRlcnNbJ3Byb2plY3Rpb24uZW5hYmxlZCddID0gJ3RydWUnO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHRoZSBnaXZlbiBpZGVudGl0eSBjdXN0b20gcGVybWlzc2lvbnMuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCBhY3Rpb25zOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMudGFibGVBcm5dLFxuICAgICAgYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB0aGUgZ2l2ZW4gaWRlbnRpdHkgY3VzdG9tIHBlcm1pc3Npb25zIHRvIEFMTCB1bmRlcmx5aW5nIHJlc291cmNlcyBvZiB0aGUgdGFibGUuXG4gICAqIFBlcm1pc3Npb25zIHdpbGwgYmUgZ3JhbnRlZCB0byB0aGUgY2F0YWxvZywgdGhlIGRhdGFiYXNlLCBhbmQgdGhlIHRhYmxlLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICovXG4gIHB1YmxpYyBncmFudFRvVW5kZXJseWluZ1Jlc291cmNlcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgYWN0aW9uczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICByZXNvdXJjZUFybnM6IFtcbiAgICAgICAgdGhpcy50YWJsZUFybixcbiAgICAgICAgdGhpcy5kYXRhYmFzZS5jYXRhbG9nLmNhdGFsb2dBcm4sXG4gICAgICAgIHRoaXMuZGF0YWJhc2UuZGF0YWJhc2VBcm4sXG4gICAgICBdLFxuICAgICAgYWN0aW9ucyxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc3RhY2stc2luZ2xldG9uIGN1c3RvbSByZXNvdXJjZSBwcm92aWRlciB0aGF0IG1hbmFnZXMgR2x1ZSBwYXJ0aXRpb24gaW5kZXhlcy5cbiAqXG4gKiBBbGwgcGFydGl0aW9uLWluZGV4ZWQgdGFibGVzIGluIGEgc3RhY2sgc2hhcmUgYSBzaW5nbGUgcHJvdmlkZXIgKGFuZCBpdHMgdHdvXG4gKiBMYW1iZGEgaGFuZGxlcnMpIHRvIGF2b2lkIHByb3Zpc2lvbmluZyBhIHByb3ZpZGVyIGZyYW1ld29yayBwZXIgdGFibGUuIFRoZVxuICogcHJvdmlkZXIgYW5kIGhhbmRsZXJzIGFyZSBncm91cGVkIHVuZGVyIHRoaXMgc2luZ2xlIGNvbnN0cnVjdCBzbyBvbmx5IG9uZVxuICogaWQgaXMgcGxhY2VkIGF0IHN0YWNrIHNjb3BlLlxuICovXG5jbGFzcyBQYXJ0aXRpb25JbmRleFByb3ZpZGVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0YWNrLXNpbmdsZXRvbiBwcm92aWRlciwgY3JlYXRpbmcgaXQgaWYgaXQgZG9lcyBub3QgeWV0IGV4aXN0LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRPckNyZWF0ZShzY29wZTogQ29uc3RydWN0KTogUGFydGl0aW9uSW5kZXhQcm92aWRlciB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgLy8gQSBmaXhlZCwgbmFtZXNwYWNlZCBpZCBtYWtlcyB0aGlzIGEgc3RhY2sgc2luZ2xldG9uOiBldmVyeSBjYWxsIHdpdGhpbiB0aGVcbiAgICAvLyBzYW1lIHN0YWNrIHJlc29sdmVzIHRvIHRoZSBzYW1lIGNoaWxkIHZpYSBgdHJ5RmluZENoaWxkYC5cbiAgICBjb25zdCBpZCA9ICdAYXdzLWNkay9hd3MtZ2x1ZS1hbHBoYS5QYXJ0aXRpb25JbmRleFByb3ZpZGVyJztcbiAgICByZXR1cm4gKHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKSBhcyBQYXJ0aXRpb25JbmRleFByb3ZpZGVyKSA/PyBuZXcgUGFydGl0aW9uSW5kZXhQcm92aWRlcihzdGFjaywgaWQpO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IG9uRXZlbnRIYW5kbGVyOiBsYW1iZGEuRnVuY3Rpb247XG4gIHB1YmxpYyByZWFkb25seSBpc0NvbXBsZXRlSGFuZGxlcjogbGFtYmRhLkZ1bmN0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3ZpZGVyOiBjci5Qcm92aWRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIFRoZSBoYW5kbGVyIHNvdXJjZSBsaXZlcyBpbiBgQGF3cy1jZGsvY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzYCBhbmQgaXMgY29kZVxuICAgIC8vIGdlbmVyYXRlZCArIGFpcmxpZnRlZCBpbnRvIHRoaXMgcGFja2FnZSBhdCBidWlsZCB0aW1lIChzZWVcbiAgICAvLyBzY3JpcHRzL2FpcmxpZnQtY3VzdG9tLXJlc291cmNlLWhhbmRsZXJzLnNoKSwgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIHVzZWQgYnkgdGhlXG4gICAgLy8gb3RoZXIgYWxwaGEgbW9kdWxlcyAoYXdzLWFtcGxpZnktYWxwaGEsIGF3cy1yZWRzaGlmdC1hbHBoYSkuIFRoZSBAYXdzLXNkay9jbGllbnQtZ2x1ZVxuICAgIC8vIG1vZHVsZSBpcyBwcm92aWRlZCBieSB0aGUgTGFtYmRhIHJ1bnRpbWUgcmF0aGVyIHRoYW4gYnVuZGxlZCBpbnRvIHRoZSBhc3NldC5cbiAgICB0aGlzLm9uRXZlbnRIYW5kbGVyID0gbmV3IFBhcnRpdGlvbkluZGV4T25FdmVudEZ1bmN0aW9uKHRoaXMsICdIYW5kbGVyJywge1xuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICB9KTtcbiAgICB0aGlzLmlzQ29tcGxldGVIYW5kbGVyID0gbmV3IFBhcnRpdGlvbkluZGV4SXNDb21wbGV0ZUZ1bmN0aW9uKHRoaXMsICdJc0NvbXBsZXRlJywge1xuICAgICAgdGltZW91dDogRHVyYXRpb24ubWludXRlcygxKSxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvdmlkZXIgPSBuZXcgY3IuUHJvdmlkZXIodGhpcywgJ1Byb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IHRoaXMub25FdmVudEhhbmRsZXIsXG4gICAgICBpc0NvbXBsZXRlSGFuZGxlcjogdGhpcy5pc0NvbXBsZXRlSGFuZGxlcixcbiAgICAgIHF1ZXJ5SW50ZXJ2YWw6IER1cmF0aW9uLnNlY29uZHMoMTApLFxuICAgICAgdG90YWxUaW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDE1KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgc2VydmljZSB0b2tlbiB0byB3aXJlIGludG8gcGFydGl0aW9uIGluZGV4IGN1c3RvbSByZXNvdXJjZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHNlcnZpY2VUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLnNlcnZpY2VUb2tlbjtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYShjb2x1bW5zOiBDb2x1bW5bXSwgcGFydGl0aW9uS2V5cz86IENvbHVtbltdKTogdm9pZCB7XG4gIGlmIChjb2x1bW5zLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBVbnNjb3BlZFZhbGlkYXRpb25FcnJvcihsaXRgTm9Db2x1bW5zU3BlY2lmaWVkYCwgJ3lvdSBtdXN0IHNwZWNpZnkgYXQgbGVhc3Qgb25lIGNvbHVtbiBmb3IgdGhlIHRhYmxlJyk7XG4gIH1cbiAgLy8gQ2hlY2sgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbHVtbiBhbmQgbm8gZHVwbGljYXRlZCBjb2x1bW4gbmFtZXMgb3IgcGFydGl0aW9uIGtleXMuXG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIChjb2x1bW5zLmNvbmNhdChwYXJ0aXRpb25LZXlzIHx8IFtdKSkuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgIGlmIChuYW1lcy5oYXMoY29sdW1uLm5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YER1cGxpY2F0ZUNvbHVtbk5hbWVgLCBgY29sdW1uIG5hbWVzIGFuZCBwYXJ0aXRpb24ga2V5cyBtdXN0IGJlIHVuaXF1ZSwgYnV0IFxcJyR7Y29sdW1uLm5hbWV9XFwnIGlzIGR1cGxpY2F0ZWRgKTtcbiAgICB9XG4gICAgbmFtZXMuYWRkKGNvbHVtbi5uYW1lKTtcbiAgfSk7XG59XG4iXX0=
|
package/lib/table-deprecated.js
CHANGED
|
@@ -57,7 +57,7 @@ let Table = (() => {
|
|
|
57
57
|
Table = _classThis = _classDescriptor.value;
|
|
58
58
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
59
59
|
}
|
|
60
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Table", version: "2.
|
|
60
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Table", version: "2.264.0-alpha.0" };
|
|
61
61
|
/** Uniquely identifies this class. */
|
|
62
62
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Table';
|
|
63
63
|
static {
|
|
@@ -41,7 +41,7 @@ const events = __importStar(require("aws-cdk-lib/aws-events"));
|
|
|
41
41
|
*/
|
|
42
42
|
class TriggerSchedule {
|
|
43
43
|
expressionString;
|
|
44
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TriggerSchedule", version: "2.
|
|
44
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TriggerSchedule", version: "2.264.0-alpha.0" };
|
|
45
45
|
/**
|
|
46
46
|
* Creates a new TriggerSchedule instance with a cron expression.
|
|
47
47
|
*
|
package/lib/triggers/workflow.js
CHANGED
|
@@ -83,7 +83,7 @@ const trigger_options_1 = require("./trigger-options");
|
|
|
83
83
|
* @see https://docs.aws.amazon.com/glue/latest/dg/about-triggers.html
|
|
84
84
|
*/
|
|
85
85
|
class WorkflowBase extends cdk.Resource {
|
|
86
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.WorkflowBase", version: "2.
|
|
86
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.WorkflowBase", version: "2.264.0-alpha.0" };
|
|
87
87
|
/**
|
|
88
88
|
* Extract workflowName from arn
|
|
89
89
|
*/
|
|
@@ -388,7 +388,7 @@ let Workflow = (() => {
|
|
|
388
388
|
Workflow = _classThis = _classDescriptor.value;
|
|
389
389
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
390
390
|
}
|
|
391
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Workflow", version: "2.
|
|
391
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Workflow", version: "2.264.0-alpha.0" };
|
|
392
392
|
/** Uniquely identifies this class. */
|
|
393
393
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Workflow';
|
|
394
394
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aws-cdk/aws-glue-alpha",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.264.0-alpha.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The CDK Construct Library for AWS::Glue",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -67,7 +67,10 @@
|
|
|
67
67
|
"cdk-build": {
|
|
68
68
|
"env": {
|
|
69
69
|
"AWSLINT_BASE_CONSTRUCT": "true"
|
|
70
|
-
}
|
|
70
|
+
},
|
|
71
|
+
"pre": [
|
|
72
|
+
"./scripts/airlift-custom-resource-handlers.sh"
|
|
73
|
+
]
|
|
71
74
|
},
|
|
72
75
|
"keywords": [
|
|
73
76
|
"aws",
|
|
@@ -82,18 +85,19 @@
|
|
|
82
85
|
},
|
|
83
86
|
"license": "Apache-2.0",
|
|
84
87
|
"devDependencies": {
|
|
85
|
-
"@aws-cdk/cdk-build-tools": "2.
|
|
88
|
+
"@aws-cdk/cdk-build-tools": "2.264.0-alpha.0",
|
|
86
89
|
"@aws-cdk/integ-runner": "^2.202.3",
|
|
87
|
-
"@aws-cdk/integ-tests-alpha": "2.
|
|
88
|
-
"@aws-cdk/
|
|
90
|
+
"@aws-cdk/integ-tests-alpha": "2.264.0-alpha.0",
|
|
91
|
+
"@aws-cdk/custom-resource-handlers": "2.264.0-alpha.0",
|
|
92
|
+
"@aws-cdk/pkglint": "2.264.0-alpha.0",
|
|
89
93
|
"@types/jest": "^29.5.14",
|
|
90
|
-
"aws-cdk-lib": "2.
|
|
94
|
+
"aws-cdk-lib": "2.264.0",
|
|
91
95
|
"constructs": "^10.5.0",
|
|
92
96
|
"jest": "^29.7.0"
|
|
93
97
|
},
|
|
94
98
|
"homepage": "https://github.com/aws/aws-cdk",
|
|
95
99
|
"peerDependencies": {
|
|
96
|
-
"aws-cdk-lib": "^2.
|
|
100
|
+
"aws-cdk-lib": "^2.264.0",
|
|
97
101
|
"constructs": "^10.5.0"
|
|
98
102
|
},
|
|
99
103
|
"engines": {
|