terraconstructs 0.2.0 → 0.2.2
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 +1087 -235
- package/lib/asset-staging.js +1 -1
- package/lib/aws/arn.js +1 -1
- package/lib/aws/aws-asset-manager.js +1 -1
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.js +1 -1
- package/lib/aws/aws-tags.js +2 -2
- package/lib/aws/cloudwatch/actions/appscaling.js +1 -1
- package/lib/aws/cloudwatch/actions/ec2.js +1 -1
- package/lib/aws/cloudwatch/actions/lambda.js +1 -1
- package/lib/aws/cloudwatch/actions/sns.js +1 -1
- package/lib/aws/cloudwatch/actions/ssm.js +2 -2
- package/lib/aws/cloudwatch/alarm-base.js +1 -1
- package/lib/aws/cloudwatch/alarm-rule.js +1 -1
- package/lib/aws/cloudwatch/alarm-status-widget.js +1 -1
- package/lib/aws/cloudwatch/alarm.js +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +1 -1
- package/lib/aws/cloudwatch/dashboard.js +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +3 -3
- package/lib/aws/cloudwatch/graph.js +8 -8
- package/lib/aws/cloudwatch/layout.js +3 -3
- package/lib/aws/cloudwatch/log-destinations/kinesis.js +1 -1
- package/lib/aws/cloudwatch/log-destinations/lambda.js +1 -1
- package/lib/aws/cloudwatch/log-group.js +1 -1
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.js +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +1 -1
- package/lib/aws/cloudwatch/metric.js +2 -2
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.js +1 -1
- package/lib/aws/cloudwatch/query-definition.js +2 -2
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +1 -1
- package/lib/aws/cloudwatch/text.js +1 -1
- package/lib/aws/cloudwatch/variable.js +3 -3
- package/lib/aws/cloudwatch/widget.js +1 -1
- package/lib/aws/compute/access-log.js +4 -4
- package/lib/aws/compute/activity.js +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +1 -1
- package/lib/aws/compute/alb/application-listener-certificate.js +1 -1
- package/lib/aws/compute/alb/application-listener-rule.js +1 -1
- package/lib/aws/compute/alb/application-listener.js +1 -1
- package/lib/aws/compute/alb/application-load-balancer.js +1 -1
- package/lib/aws/compute/alb/application-target-group.js +1 -1
- package/lib/aws/compute/alb/conditions.js +1 -1
- package/lib/aws/compute/alb/trust-store-revocation.js +1 -1
- package/lib/aws/compute/alb/trust-store.js +1 -1
- package/lib/aws/compute/api-definition.js +3 -3
- package/lib/aws/compute/api-key.js +2 -2
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +2 -2
- package/lib/aws/compute/authorizer.js +1 -1
- package/lib/aws/compute/authorizers/identity-source.js +1 -1
- package/lib/aws/compute/authorizers/lambda.js +2 -2
- package/lib/aws/compute/base-path-mapping.js +1 -1
- package/lib/aws/compute/base-scalable-attribute.js +1 -1
- package/lib/aws/compute/bastion-host.js +1 -1
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +2 -2
- package/lib/aws/compute/client-vpn-route.js +2 -2
- package/lib/aws/compute/code.js +8 -8
- package/lib/aws/compute/condition.js +1 -1
- package/lib/aws/compute/connections.js +1 -1
- package/lib/aws/compute/cors.js +1 -1
- package/lib/aws/compute/deployment.js +1 -1
- package/lib/aws/compute/domain-name.js +1 -1
- package/lib/aws/compute/event-invoke-config.js +1 -1
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +1 -1
- package/lib/aws/compute/event-sources/s3-onfailure-destination.js +1 -1
- package/lib/aws/compute/event-sources/s3.js +1 -1
- package/lib/aws/compute/event-sources/sqs-dlq.js +1 -1
- package/lib/aws/compute/event-sources/sqs.js +1 -1
- package/lib/aws/compute/fields.js +4 -4
- package/lib/aws/compute/function-alias.js +1 -1
- package/lib/aws/compute/function-base.js +2 -2
- package/lib/aws/compute/function-destinations/event-bridge.js +1 -1
- package/lib/aws/compute/function-destinations/function.js +1 -1
- package/lib/aws/compute/function-destinations/sqs.js +1 -1
- package/lib/aws/compute/function-nodejs/function.js +1 -1
- package/lib/aws/compute/function-url.js +1 -1
- package/lib/aws/compute/function.js +1 -1
- package/lib/aws/compute/gateway-response.js +2 -2
- package/lib/aws/compute/handler.js +1 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.js +1 -1
- package/lib/aws/compute/integration.js +1 -1
- package/lib/aws/compute/integrations/aws.js +1 -1
- package/lib/aws/compute/integrations/http.js +1 -1
- package/lib/aws/compute/integrations/lambda.js +1 -1
- package/lib/aws/compute/integrations/mock.js +1 -1
- package/lib/aws/compute/integrations/stepfunctions.js +1 -1
- package/lib/aws/compute/ip-addresses.js +2 -2
- package/lib/aws/compute/ipam.js +1 -1
- package/lib/aws/compute/key-pair.js +1 -1
- package/lib/aws/compute/lambda-api.js +1 -1
- package/lib/aws/compute/launch-template.js +2 -2
- package/lib/aws/compute/lb-shared/base-listener.js +1 -1
- package/lib/aws/compute/lb-shared/base-load-balancer.js +2 -2
- package/lib/aws/compute/lb-shared/base-target-group.js +1 -1
- package/lib/aws/compute/lb-shared/listener-certificate.js +1 -1
- package/lib/aws/compute/lb-shared/load-balancer-targets.js +2 -2
- package/lib/aws/compute/lb-targets/alb-target.js +3 -3
- package/lib/aws/compute/lb-targets/instance-target.js +2 -2
- package/lib/aws/compute/lb-targets/ip-target.js +1 -1
- package/lib/aws/compute/lb-targets/lambda-target.js +1 -1
- package/lib/aws/compute/load-balancer.js +3 -3
- package/lib/aws/compute/machine-image/amazon-linux-2022.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux-2023.js +2 -2
- package/lib/aws/compute/machine-image/amazon-linux2.js +2 -2
- package/lib/aws/compute/machine-image/common.js +1 -1
- package/lib/aws/compute/machine-image/machine-image.js +8 -8
- package/lib/aws/compute/method.js +1 -1
- package/lib/aws/compute/model.js +3 -3
- package/lib/aws/compute/nat.js +5 -5
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.js +3 -3
- package/lib/aws/compute/nlb/network-listener-action.js +1 -1
- package/lib/aws/compute/nlb/network-listener.js +1 -1
- package/lib/aws/compute/nlb/network-load-balancer.js +1 -1
- package/lib/aws/compute/nlb/network-target-group.js +1 -1
- package/lib/aws/compute/peer.js +1 -1
- package/lib/aws/compute/placement-group.js +1 -1
- package/lib/aws/compute/port.js +1 -1
- package/lib/aws/compute/prefix-list.js +1 -1
- package/lib/aws/compute/requestvalidator.js +1 -1
- package/lib/aws/compute/resource.js +3 -3
- package/lib/aws/compute/restapi.js +3 -3
- package/lib/aws/compute/route.js +8 -8
- package/lib/aws/compute/runtime.js +1 -1
- package/lib/aws/compute/scalable-target.js +1 -1
- package/lib/aws/compute/schedule.js +1 -1
- package/lib/aws/compute/security-group.js +1 -1
- package/lib/aws/compute/stage.js +2 -2
- package/lib/aws/compute/state-graph.js +1 -1
- package/lib/aws/compute/state-machine-fragment.js +1 -1
- package/lib/aws/compute/state-machine.js +4 -4
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-batcher.js +1 -1
- package/lib/aws/compute/states/distributed-map/item-reader.js +5 -5
- package/lib/aws/compute/states/distributed-map/result-writer.js +1 -1
- package/lib/aws/compute/states/distributed-map.js +1 -1
- package/lib/aws/compute/states/fail.js +1 -1
- package/lib/aws/compute/states/map-base.js +1 -1
- package/lib/aws/compute/states/map.js +1 -1
- package/lib/aws/compute/states/parallel.js +1 -1
- package/lib/aws/compute/states/pass.js +2 -2
- package/lib/aws/compute/states/state.js +1 -1
- package/lib/aws/compute/states/succeed.js +1 -1
- package/lib/aws/compute/states/task-base.js +2 -2
- package/lib/aws/compute/states/task.js +1 -1
- package/lib/aws/compute/states/wait.js +2 -2
- package/lib/aws/compute/step-scaling-action.js +1 -1
- package/lib/aws/compute/step-scaling-policy.js +1 -1
- package/lib/aws/compute/stepfunctions-api.js +1 -1
- package/lib/aws/compute/subnet-v2.js +2 -2
- package/lib/aws/compute/subnet.js +1 -1
- package/lib/aws/compute/target-tracking-scaling-policy.js +1 -1
- package/lib/aws/compute/task-credentials.js +1 -1
- package/lib/aws/compute/task-input.js +1 -1
- package/lib/aws/compute/tasks/aws-sdk/call-aws-service.js +1 -1
- package/lib/aws/compute/tasks/eventbridge/put-events.js +1 -1
- package/lib/aws/compute/tasks/http/invoke.js +1 -1
- package/lib/aws/compute/tasks/lambda/invoke.js +1 -1
- package/lib/aws/compute/tasks/sqs/send-message.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/invoke-activity.js +1 -1
- package/lib/aws/compute/tasks/stepfunctions/start-execution.js +1 -1
- package/lib/aws/compute/types.js +1 -1
- package/lib/aws/compute/usage-plan.js +1 -1
- package/lib/aws/compute/user-data.js +3 -3
- package/lib/aws/compute/volume.js +2 -2
- package/lib/aws/compute/vpc-endpoint-service.js +1 -1
- package/lib/aws/compute/vpc-endpoint.js +6 -6
- package/lib/aws/compute/vpc-flow-logs.js +4 -4
- package/lib/aws/compute/vpc-link.js +1 -1
- package/lib/aws/compute/vpc-v2-base.js +1 -1
- package/lib/aws/compute/vpc-v2.js +2 -2
- package/lib/aws/compute/vpc.js +4 -4
- package/lib/aws/compute/vpn.js +3 -3
- package/lib/aws/edge/certificate.js +1 -1
- package/lib/aws/edge/distribution.js +3 -3
- package/lib/aws/edge/dns-alias-record-targets.js +6 -6
- package/lib/aws/edge/dns-record.js +13 -13
- package/lib/aws/edge/dns-zone.js +1 -1
- package/lib/aws/edge/function.js +2 -2
- package/lib/aws/edge/key-value-store.js +4 -4
- package/lib/aws/edge/origin.js +3 -3
- package/lib/aws/edge/response-headers-policy.js +1 -1
- package/lib/aws/encryption/alias.js +1 -1
- package/lib/aws/encryption/key.js +1 -1
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +3 -3
- package/lib/aws/iam/group.js +1 -1
- package/lib/aws/iam/instance-profile.js +1 -1
- package/lib/aws/iam/managed-policy.js +1 -1
- package/lib/aws/iam/oidc-provider.js +1 -1
- package/lib/aws/iam/policy-document.js +1 -1
- package/lib/aws/iam/policy-statement.js +1 -1
- package/lib/aws/iam/policy.js +1 -1
- package/lib/aws/iam/principals.js +20 -20
- package/lib/aws/iam/role.js +14 -5
- package/lib/aws/iam/saml-provider.js +2 -2
- package/lib/aws/iam/unknown-principal.js +1 -1
- package/lib/aws/iam/user.js +1 -1
- package/lib/aws/network/simple-ipv4-vpc.js +1 -1
- package/lib/aws/network/subnet-group.js +3 -3
- package/lib/aws/network/subnet.js +4 -4
- package/lib/aws/notify/archive.js +1 -1
- package/lib/aws/notify/connection.js +3 -3
- package/lib/aws/notify/event-bus.js +3 -3
- package/lib/aws/notify/event-pattern.js +1 -1
- package/lib/aws/notify/input.js +2 -2
- package/lib/aws/notify/kinesis-stream.js +1 -1
- package/lib/aws/notify/notification-rule.js +1 -1
- package/lib/aws/notify/policy.js +1 -1
- package/lib/aws/notify/queue-base.js +1 -1
- package/lib/aws/notify/queue-policy.js +1 -1
- package/lib/aws/notify/queue.js +1 -1
- package/lib/aws/notify/resource-policy.js +1 -1
- package/lib/aws/notify/rule.d.ts +1 -0
- package/lib/aws/notify/rule.js +5 -3
- package/lib/aws/notify/schedule.js +1 -1
- package/lib/aws/notify/sqs-grants.generated.js +1 -1
- package/lib/aws/notify/subscription-filter.js +1 -1
- package/lib/aws/notify/subscription.js +4 -4
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +1 -1
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +1 -1
- package/lib/aws/notify/subscriptions/url.js +1 -1
- package/lib/aws/notify/targets/event-bus.js +1 -1
- package/lib/aws/notify/targets/function.js +1 -1
- package/lib/aws/notify/targets/log-group.js +2 -2
- package/lib/aws/notify/targets/sqs.js +1 -1
- package/lib/aws/notify/targets/state-machine.js +1 -1
- package/lib/aws/notify/topic-base.js +1 -1
- package/lib/aws/notify/topic.js +1 -1
- package/lib/aws/storage/assets/image-asset.js +3 -3
- package/lib/aws/storage/assets/s3.js +1 -1
- package/lib/aws/storage/auth-token.js +2 -2
- package/lib/aws/storage/billing.js +1 -1
- package/lib/aws/storage/bucket-notifications.js +1 -1
- package/lib/aws/storage/bucket-policy.js +1 -1
- package/lib/aws/storage/bucket-source.js +1 -1
- package/lib/aws/storage/bucket.js +2 -2
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/dynamodb-perms.d.ts +2 -2
- package/lib/aws/storage/dynamodb-perms.js +9 -16
- package/lib/aws/storage/ecr-repository.js +3 -3
- package/lib/aws/storage/encryption.js +1 -1
- package/lib/aws/storage/index.d.ts +2 -0
- package/lib/aws/storage/index.js +3 -1
- package/lib/aws/storage/notification-targets/function.js +1 -1
- package/lib/aws/storage/notification-targets/queue.js +1 -1
- package/lib/aws/storage/origin-access-identity.js +1 -1
- package/lib/aws/storage/parameter.js +2 -2
- package/lib/aws/storage/shared.d.ts +31 -2
- package/lib/aws/storage/shared.js +29 -2
- package/lib/aws/storage/stream-grants.d.ts +61 -0
- package/lib/aws/storage/stream-grants.js +72 -0
- package/lib/aws/storage/table-grants.d.ts +98 -0
- package/lib/aws/storage/table-grants.js +137 -0
- package/lib/aws/storage/table.d.ts +280 -8
- package/lib/aws/storage/table.js +350 -148
- package/lib/bundling.js +3 -3
- package/lib/construct-base.js +2 -2
- package/lib/duration.js +1 -1
- package/lib/errors.js +1 -1
- package/lib/expiration.js +1 -1
- package/lib/fs/ignore.js +4 -4
- package/lib/fs/index.js +1 -1
- package/lib/size.js +1 -1
- package/lib/stack-base.js +1 -1
- package/lib/terra-func.js +1 -1
- package/lib/time-zone.js +1 -1
- package/package.json +4 -4
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
1
2
|
import { IAwsConstruct } from "../aws-construct";
|
|
2
3
|
import * as cloudwatch from "../cloudwatch";
|
|
3
4
|
import * as kms from "../encryption";
|
|
@@ -95,8 +96,6 @@ export interface PointInTimeRecoverySpecification {
|
|
|
95
96
|
* Your table data is only recoverable to any point-in-time from within the configured recovery period.
|
|
96
97
|
* If no value is provided, the value will default to 35.
|
|
97
98
|
*
|
|
98
|
-
* NOTE: Unused pending upgrade to v5.98.0 of the AWS Provider for Terraform.
|
|
99
|
-
*
|
|
100
99
|
* @default 35
|
|
101
100
|
*/
|
|
102
101
|
readonly recoveryPeriodInDays?: number;
|
|
@@ -133,6 +132,35 @@ export declare enum BillingMode {
|
|
|
133
132
|
*/
|
|
134
133
|
PROVISIONED = "PROVISIONED"
|
|
135
134
|
}
|
|
135
|
+
/**
|
|
136
|
+
* DynamoDB's Contributor Insights Mode
|
|
137
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-dynamodb-table-contributorinsightsspecification.html
|
|
138
|
+
*/
|
|
139
|
+
export declare enum ContributorInsightsMode {
|
|
140
|
+
/**
|
|
141
|
+
* Emits metrics for all read and write requests, whether successful or throttled.
|
|
142
|
+
*/
|
|
143
|
+
ACCESSED_AND_THROTTLED_KEYS = "ACCESSED_AND_THROTTLED_KEYS",
|
|
144
|
+
/**
|
|
145
|
+
* Emits metrics for read and write requests that were throttled.
|
|
146
|
+
*/
|
|
147
|
+
THROTTLED_KEYS = "THROTTLED_KEYS"
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Reference to ContributorInsightsSpecification
|
|
151
|
+
*/
|
|
152
|
+
export interface ContributorInsightsSpecification {
|
|
153
|
+
/**
|
|
154
|
+
* Indicates whether contributor insights is enabled.
|
|
155
|
+
* @default false
|
|
156
|
+
*/
|
|
157
|
+
readonly enabled: boolean;
|
|
158
|
+
/**
|
|
159
|
+
* Indicates the type of metrics captured by contributor insights.
|
|
160
|
+
* @default ACCESSED_AND_THROTTLED_KEYS
|
|
161
|
+
*/
|
|
162
|
+
readonly mode?: ContributorInsightsMode;
|
|
163
|
+
}
|
|
136
164
|
/**
|
|
137
165
|
* The set of attributes that are projected into the index
|
|
138
166
|
*
|
|
@@ -417,3 +445,4 @@ export interface ITable extends IAwsConstruct {
|
|
|
417
445
|
*/
|
|
418
446
|
metricSuccessfulRequestLatency(props?: cloudwatch.MetricOptions): cloudwatch.Metric;
|
|
419
447
|
}
|
|
448
|
+
export declare function validateContributorInsights(contributorInsights: boolean | undefined, contributorInsightsSpecification: ContributorInsightsSpecification | undefined, deprecatedPropertyName: string, construct: Construct): ContributorInsightsSpecification | undefined;
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// https://github.com/aws/aws-cdk/blob/v2.186.0/packages/aws-cdk-lib/aws-dynamodb/lib/shared.ts
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.StreamViewType = exports.TableEncryption = exports.TableClass = exports.ProjectionType = exports.BillingMode = exports.AttributeType = exports.Operation = void 0;
|
|
4
|
+
exports.StreamViewType = exports.TableEncryption = exports.TableClass = exports.ProjectionType = exports.ContributorInsightsMode = exports.BillingMode = exports.AttributeType = exports.Operation = void 0;
|
|
5
|
+
exports.validateContributorInsights = validateContributorInsights;
|
|
6
|
+
const errors_1 = require("../../errors");
|
|
5
7
|
/**
|
|
6
8
|
* Supported DynamoDB table operations.
|
|
7
9
|
*/
|
|
@@ -70,6 +72,21 @@ var BillingMode;
|
|
|
70
72
|
*/
|
|
71
73
|
BillingMode["PROVISIONED"] = "PROVISIONED";
|
|
72
74
|
})(BillingMode || (exports.BillingMode = BillingMode = {}));
|
|
75
|
+
/**
|
|
76
|
+
* DynamoDB's Contributor Insights Mode
|
|
77
|
+
* @see https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-properties-dynamodb-table-contributorinsightsspecification.html
|
|
78
|
+
*/
|
|
79
|
+
var ContributorInsightsMode;
|
|
80
|
+
(function (ContributorInsightsMode) {
|
|
81
|
+
/**
|
|
82
|
+
* Emits metrics for all read and write requests, whether successful or throttled.
|
|
83
|
+
*/
|
|
84
|
+
ContributorInsightsMode["ACCESSED_AND_THROTTLED_KEYS"] = "ACCESSED_AND_THROTTLED_KEYS";
|
|
85
|
+
/**
|
|
86
|
+
* Emits metrics for read and write requests that were throttled.
|
|
87
|
+
*/
|
|
88
|
+
ContributorInsightsMode["THROTTLED_KEYS"] = "THROTTLED_KEYS";
|
|
89
|
+
})(ContributorInsightsMode || (exports.ContributorInsightsMode = ContributorInsightsMode = {}));
|
|
73
90
|
/**
|
|
74
91
|
* The set of attributes that are projected into the index
|
|
75
92
|
*
|
|
@@ -158,4 +175,14 @@ var StreamViewType;
|
|
|
158
175
|
*/
|
|
159
176
|
StreamViewType["KEYS_ONLY"] = "KEYS_ONLY";
|
|
160
177
|
})(StreamViewType || (exports.StreamViewType = StreamViewType = {}));
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9zdG9yYWdlL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0ZBQStGOzs7QUFPL0Y7O0dBRUc7QUFDSCxJQUFZLFNBMENYO0FBMUNELFdBQVksU0FBUztJQUNuQixjQUFjO0lBQ2QsaUNBQW9CLENBQUE7SUFFcEIsbUJBQW1CO0lBQ25CLDRDQUErQixDQUFBO0lBRS9CLFdBQVc7SUFDWCwwQkFBYSxDQUFBO0lBRWIsWUFBWTtJQUNaLDRCQUFlLENBQUE7SUFFZixpQkFBaUI7SUFDakIsdUNBQTBCLENBQUE7SUFFMUIsY0FBYztJQUNkLGlDQUFvQixDQUFBO0lBRXBCLGlCQUFpQjtJQUNqQix1Q0FBMEIsQ0FBQTtJQUUxQixpQkFBaUI7SUFDakIsdUNBQTBCLENBQUE7SUFFMUIscUJBQXFCO0lBQ3JCLGdEQUFtQyxDQUFBO0lBRW5DLHlCQUF5QjtJQUN6Qix3REFBMkMsQ0FBQTtJQUUzQyx1QkFBdUI7SUFDdkIsb0RBQXVDLENBQUE7SUFFdkMseUJBQXlCO0lBQ3pCLHVEQUEwQyxDQUFBO0lBRTFDLDRCQUE0QjtJQUM1Qiw4REFBaUQsQ0FBQTtJQUVqRCx1QkFBdUI7SUFDdkIsbURBQXNDLENBQUE7QUFDeEMsQ0FBQyxFQTFDVyxTQUFTLHlCQUFULFNBQVMsUUEwQ3BCO0FBMkVEOzs7O0dBSUc7QUFDSCxJQUFZLGFBZVg7QUFmRCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCw2QkFBWSxDQUFBO0lBRVo7O09BRUc7SUFDSCw2QkFBWSxDQUFBO0lBRVo7O09BRUc7SUFDSCw2QkFBWSxDQUFBO0FBQ2QsQ0FBQyxFQWZXLGFBQWEsNkJBQWIsYUFBYSxRQWV4QjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxXQVVYO0FBVkQsV0FBWSxXQUFXO0lBQ3JCOztPQUVHO0lBQ0gsa0RBQW1DLENBQUE7SUFFbkM7O09BRUc7SUFDSCwwQ0FBMkIsQ0FBQTtBQUM3QixDQUFDLEVBVlcsV0FBVywyQkFBWCxXQUFXLFFBVXRCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksY0FnQlg7QUFoQkQsV0FBWSxjQUFjO0lBQ3hCOztPQUVHO0lBQ0gseUNBQXVCLENBQUE7SUFFdkI7OztPQUdHO0lBQ0gscUNBQW1CLENBQUE7SUFFbkI7O09BRUc7SUFDSCw2QkFBVyxDQUFBO0FBQ2IsQ0FBQyxFQWhCVyxjQUFjLDhCQUFkLGNBQWMsUUFnQnpCO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksVUFXWDtBQVhELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILG1DQUFxQixDQUFBO0lBRXJCOzs7T0FHRztJQUNILHVFQUF5RCxDQUFBO0FBQzNELENBQUMsRUFYVyxVQUFVLDBCQUFWLFVBQVUsUUFXckI7QUFFRDs7R0FFRztBQUNILElBQVksZUFzQlg7QUF0QkQsV0FBWSxlQUFlO0lBQ3pCOztPQUVHO0lBQ0gsd0NBQXFCLENBQUE7SUFFckI7Ozs7Ozs7OztPQVNHO0lBQ0gsd0RBQXFDLENBQUE7SUFFckM7O09BRUc7SUFDSCw4Q0FBMkIsQ0FBQTtBQUM3QixDQUFDLEVBdEJXLGVBQWUsK0JBQWYsZUFBZSxRQXNCMUI7QUFFRDs7Ozs7R0FLRztBQUNILElBQVksY0FvQlg7QUFwQkQsV0FBWSxjQUFjO0lBQ3hCOztPQUVHO0lBQ0gseUNBQXVCLENBQUE7SUFFdkI7O09BRUc7SUFDSCx5Q0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILDJEQUF5QyxDQUFBO0lBRXpDOztPQUVHO0lBQ0gseUNBQXVCLENBQUE7QUFDekIsQ0FBQyxFQXBCVyxjQUFjLDhCQUFkLGNBQWMsUUFvQnpCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTg2LjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiL2xpYi9zaGFyZWQudHNcblxuaW1wb3J0IHsgSUF3c0NvbnN0cnVjdCB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSBcIi4uL2VuY3J5cHRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5cbi8qKlxuICogU3VwcG9ydGVkIER5bmFtb0RCIHRhYmxlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIE9wZXJhdGlvbiB7XG4gIC8qKiBHZXRJdGVtICovXG4gIEdFVF9JVEVNID0gXCJHZXRJdGVtXCIsXG5cbiAgLyoqIEJhdGNoR2V0SXRlbSAqL1xuICBCQVRDSF9HRVRfSVRFTSA9IFwiQmF0Y2hHZXRJdGVtXCIsXG5cbiAgLyoqIFNjYW4gKi9cbiAgU0NBTiA9IFwiU2NhblwiLFxuXG4gIC8qKiBRdWVyeSAqL1xuICBRVUVSWSA9IFwiUXVlcnlcIixcblxuICAvKiogR2V0UmVjb3JkcyAqL1xuICBHRVRfUkVDT1JEUyA9IFwiR2V0UmVjb3Jkc1wiLFxuXG4gIC8qKiBQdXRJdGVtICovXG4gIFBVVF9JVEVNID0gXCJQdXRJdGVtXCIsXG5cbiAgLyoqIERlbGV0ZUl0ZW0gKi9cbiAgREVMRVRFX0lURU0gPSBcIkRlbGV0ZUl0ZW1cIixcblxuICAvKiogVXBkYXRlSXRlbSAqL1xuICBVUERBVEVfSVRFTSA9IFwiVXBkYXRlSXRlbVwiLFxuXG4gIC8qKiBCYXRjaFdyaXRlSXRlbSAqL1xuICBCQVRDSF9XUklURV9JVEVNID0gXCJCYXRjaFdyaXRlSXRlbVwiLFxuXG4gIC8qKiBUcmFuc2FjdFdyaXRlSXRlbXMgKi9cbiAgVFJBTlNBQ1RfV1JJVEVfSVRFTVMgPSBcIlRyYW5zYWN0V3JpdGVJdGVtc1wiLFxuXG4gIC8qKiBUcmFuc2FjdEdldEl0ZW1zICovXG4gIFRSQU5TQUNUX0dFVF9JVEVNUyA9IFwiVHJhbnNhY3RHZXRJdGVtc1wiLFxuXG4gIC8qKiBFeGVjdXRlVHJhbnNhY3Rpb24gKi9cbiAgRVhFQ1VURV9UUkFOU0FDVElPTiA9IFwiRXhlY3V0ZVRyYW5zYWN0aW9uXCIsXG5cbiAgLyoqIEJhdGNoRXhlY3V0ZVN0YXRlbWVudCAqL1xuICBCQVRDSF9FWEVDVVRFX1NUQVRFTUVOVCA9IFwiQmF0Y2hFeGVjdXRlU3RhdGVtZW50XCIsXG5cbiAgLyoqIEV4ZWN1dGVTdGF0ZW1lbnQgKi9cbiAgRVhFQ1VURV9TVEFURU1FTlQgPSBcIkV4ZWN1dGVTdGF0ZW1lbnRcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIHN5c3RlbSBlcnJvcnMgbWV0cmljIHRoYXQgY29uc2lkZXJzIG11bHRpcGxlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtRXJyb3JzRm9yT3BlcmF0aW9uc01ldHJpY09wdGlvbnNcbiAgZXh0ZW5kcyBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9wZXJhdGlvbnMgdG8gYXBwbHkgdGhlIG1ldHJpYyB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgb3BlcmF0aW9ucyBhdmFpbGFibGUgYnkgRHluYW1vREIgdGFibGVzIHdpbGwgYmUgY29uc2lkZXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbnM/OiBPcGVyYXRpb25bXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBtZXRyaWNzIHRoYXQgY29uc2lkZXJzIG11bHRpcGxlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uc01ldHJpY09wdGlvbnNcbiAgZXh0ZW5kcyBTeXN0ZW1FcnJvcnNGb3JPcGVyYXRpb25zTWV0cmljT3B0aW9ucyB7fVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gYXR0cmlidXRlIGZvciBkZXNjcmliaW5nIHRoZSBrZXkgc2NoZW1hIGZvciB0aGUgdGFibGVcbiAqIGFuZCBpbmRleGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgYW4gYXR0cmlidXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQXR0cmlidXRlVHlwZTtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gV2FybVRocm91Z2hwdXQgZm9yIGEgRHluYW1vREIgdGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXJtVGhyb3VnaHB1dCB7XG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBudW1iZXIgb2YgcmVhZCB1bml0cyBwZXIgc2Vjb25kIGEgdGFibGUgd2lsbCBiZSBhYmxlIHRvIGhhbmRsZSBpbnN0YW50bHlcbiAgICogQGRlZmF1bHQgLSBubyByZWFkVW5pdHNQZXJTZWNvbmQgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZFVuaXRzUGVyU2Vjb25kPzogbnVtYmVyO1xuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUgbnVtYmVyIG9mIHdyaXRlIHVuaXRzIHBlciBzZWNvbmQgYSB0YWJsZSB3aWxsIGJlIGFibGUgdG8gaGFuZGxlIGluc3RhbnRseVxuICAgKiBAZGVmYXVsdCAtIG5vIHdyaXRlVW5pdHNQZXJTZWNvbmQgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVVbml0c1BlclNlY29uZD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gUG9pbnRJblRpbWVSZWNvdmV5IFNwZWNpZmljYXRpb25cbiAqIGZvciBjb250aW51b3VzIGJhY2t1cHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBwb2ludCBpbiB0aW1lIHJlY292ZXJ5IGlzIGVuYWJsZWQgKHRydWUpIG9yIGRpc2FibGVkIChmYWxzZSkgb24gdGhlIHRhYmxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHByZWNlZGluZyBkYXlzIGZvciB3aGljaCBjb250aW51b3VzIGJhY2t1cHMgYXJlIHRha2VuIGFuZCBtYWludGFpbmVkLlxuICAgKiBZb3VyIHRhYmxlIGRhdGEgaXMgb25seSByZWNvdmVyYWJsZSB0byBhbnkgcG9pbnQtaW4tdGltZSBmcm9tIHdpdGhpbiB0aGUgY29uZmlndXJlZCByZWNvdmVyeSBwZXJpb2QuXG4gICAqIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgdmFsdWUgd2lsbCBkZWZhdWx0IHRvIDM1LlxuICAgKlxuICAgKiBOT1RFOiBVbnVzZWQgcGVuZGluZyB1cGdyYWRlIHRvIHY1Ljk4LjAgb2YgdGhlIEFXUyBQcm92aWRlciBmb3IgVGVycmFmb3JtLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzNVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3ZlcnlQZXJpb2RJbkRheXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRGF0YSB0eXBlcyBmb3IgYXR0cmlidXRlcyB3aXRoaW4gYSB0YWJsZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLk5hbWluZ1J1bGVzRGF0YVR5cGVzLmh0bWwjSG93SXRXb3Jrcy5EYXRhVHlwZXNcbiAqL1xuZXhwb3J0IGVudW0gQXR0cmlidXRlVHlwZSB7XG4gIC8qKlxuICAgKiBVcCB0byA0MDBLaUIgb2YgYmluYXJ5IGRhdGEgKHdoaWNoIG11c3QgYmUgZW5jb2RlZCBhcyBiYXNlNjQgYmVmb3JlIHNlbmRpbmcgdG8gRHluYW1vREIpXG4gICAqL1xuICBCSU5BUlkgPSBcIkJcIixcblxuICAvKipcbiAgICogTnVtZXJpYyB2YWx1ZXMgbWFkZSBvZiB1cCB0byAzOCBkaWdpdHMgKHBvc2l0aXZlLCBuZWdhdGl2ZSBvciB6ZXJvKVxuICAgKi9cbiAgTlVNQkVSID0gXCJOXCIsXG5cbiAgLyoqXG4gICAqIFVwIHRvIDQwMEtpQiBvZiBVVEYtOCBlbmNvZGVkIHRleHRcbiAgICovXG4gIFNUUklORyA9IFwiU1wiLFxufVxuXG4vKipcbiAqIER5bmFtb0RCJ3MgUmVhZC9Xcml0ZSBjYXBhY2l0eSBtb2Rlcy5cbiAqL1xuZXhwb3J0IGVudW0gQmlsbGluZ01vZGUge1xuICAvKipcbiAgICogUGF5IG9ubHkgZm9yIHdoYXQgeW91IHVzZS4gWW91IGRvbid0IGNvbmZpZ3VyZSBSZWFkL1dyaXRlIGNhcGFjaXR5IHVuaXRzLlxuICAgKi9cbiAgUEFZX1BFUl9SRVFVRVNUID0gXCJQQVlfUEVSX1JFUVVFU1RcIixcblxuICAvKipcbiAgICogRXhwbGljaXRseSBzcGVjaWZpZWQgUmVhZC9Xcml0ZSBjYXBhY2l0eSB1bml0cy5cbiAgICovXG4gIFBST1ZJU0lPTkVEID0gXCJQUk9WSVNJT05FRFwiLFxufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgaW5kZXhcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Qcm9qZWN0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gUHJvamVjdGlvblR5cGUge1xuICAvKipcbiAgICogT25seSB0aGUgaW5kZXggYW5kIHByaW1hcnkga2V5cyBhcmUgcHJvamVjdGVkIGludG8gdGhlIGluZGV4LlxuICAgKi9cbiAgS0VZU19PTkxZID0gXCJLRVlTX09OTFlcIixcblxuICAvKipcbiAgICogT25seSB0aGUgc3BlY2lmaWVkIHRhYmxlIGF0dHJpYnV0ZXMgYXJlIHByb2plY3RlZCBpbnRvIHRoZSBpbmRleC4gVGhlIGxpc3RcbiAgICogb2YgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaXMgaW4gYG5vbktleUF0dHJpYnV0ZXNgLlxuICAgKi9cbiAgSU5DTFVERSA9IFwiSU5DTFVERVwiLFxuXG4gIC8qKlxuICAgKiBBbGwgb2YgdGhlIHRhYmxlIGF0dHJpYnV0ZXMgYXJlIHByb2plY3RlZCBpbnRvIHRoZSBpbmRleC5cbiAgICovXG4gIEFMTCA9IFwiQUxMXCIsXG59XG5cbi8qKlxuICogRHluYW1vREIncyB0YWJsZSBjbGFzcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5UYWJsZUNsYXNzZXMuaHRtbFxuICovXG5leHBvcnQgZW51bSBUYWJsZUNsYXNzIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgdGFibGUgY2xhc3MgZm9yIER5bmFtb0RCLlxuICAgKi9cbiAgU1RBTkRBUkQgPSBcIlNUQU5EQVJEXCIsXG5cbiAgLyoqXG4gICAqIFRhYmxlIGNsYXNzIGZvciBEeW5hbW9EQiB0aGF0IHJlZHVjZXMgc3RvcmFnZSBjb3N0cyBjb21wYXJlZCB0byBleGlzdGluZyBEeW5hbW9EQlxuICAgKiBzdGFuZGFyZCB0YWJsZXMuXG4gICAqL1xuICBTVEFOREFSRF9JTkZSRVFVRU5UX0FDQ0VTUyA9IFwiU1RBTkRBUkRfSU5GUkVRVUVOVF9BQ0NFU1NcIixcbn1cblxuLyoqXG4gKiBXaGF0IGtpbmQgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0byBhcHBseSB0byB0aGlzIHRhYmxlLlxuICovXG5leHBvcnQgZW51bSBUYWJsZUVuY3J5cHRpb24ge1xuICAvKipcbiAgICogU2VydmVyLXNpZGUgS01TIGVuY3J5cHRpb24gd2l0aCBhIG1hc3RlciBrZXkgb3duZWQgYnkgQVdTLlxuICAgKi9cbiAgREVGQVVMVCA9IFwiQVdTX09XTkVEXCIsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIEtNUyBlbmNyeXB0aW9uIHdpdGggYSBjdXN0b21lciBtYXN0ZXIga2V5IG1hbmFnZWQgYnkgY3VzdG9tZXIuXG4gICAqIElmIGBlbmNyeXB0aW9uS2V5YCBpcyBzcGVjaWZpZWQsIHRoaXMga2V5IHdpbGwgYmUgdXNlZCwgb3RoZXJ3aXNlLCBvbmUgd2lsbCBiZSBkZWZpbmVkLlxuICAgKlxuICAgKiA+ICoqTk9URSoqOiBpZiBgZW5jcnlwdGlvbktleWAgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIGBUYWJsZWAgY29uc3RydWN0IGNyZWF0ZXNcbiAgICogPiBhIEtNUyBrZXkgZm9yIHlvdSwgdGhlIGtleSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IHBlcm1pc3Npb25zLiBJZiB5b3UgYXJlIHVzaW5nXG4gICAqID4gQ0RLdjIsIHRoZXNlIHBlcm1pc3Npb25zIHdpbGwgYmUgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIGtleSBmb3IgdXNlIHdpdGggRHluYW1vREIgdGFibGVzLlxuICAgKiA+IElmIHlvdSBhcmUgdXNpbmcgQ0RLdjEsIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBmbGFnIGBAYXdzLWNkay9hd3Mta21zOmRlZmF1bHRLZXlQb2xpY2llc2BcbiAgICogPiBpcyBzZXQgdG8gYHRydWVgIGluIHlvdXIgYGNkay5qc29uYC5cbiAgICovXG4gIENVU1RPTUVSX01BTkFHRUQgPSBcIkNVU1RPTUVSX01BTkFHRURcIixcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgS01TIGVuY3J5cHRpb24gd2l0aCBhIG1hc3RlciBrZXkgbWFuYWdlZCBieSBBV1MuXG4gICAqL1xuICBBV1NfTUFOQUdFRCA9IFwiQVdTX01BTkFHRURcIixcbn1cblxuLyoqXG4gKiBXaGVuIGFuIGl0ZW0gaW4gdGhlIHRhYmxlIGlzIG1vZGlmaWVkLCBTdHJlYW1WaWV3VHlwZSBkZXRlcm1pbmVzIHdoYXQgaW5mb3JtYXRpb25cbiAqIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSBmb3IgdGhpcyB0YWJsZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdHJlYW1TcGVjaWZpY2F0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gU3RyZWFtVmlld1R5cGUge1xuICAvKipcbiAgICogVGhlIGVudGlyZSBpdGVtLCBhcyBpdCBhcHBlYXJzIGFmdGVyIGl0IHdhcyBtb2RpZmllZCwgaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtLlxuICAgKi9cbiAgTkVXX0lNQUdFID0gXCJORVdfSU1BR0VcIixcblxuICAvKipcbiAgICogVGhlIGVudGlyZSBpdGVtLCBhcyBpdCBhcHBlYXJlZCBiZWZvcmUgaXQgd2FzIG1vZGlmaWVkLCBpcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gICAqL1xuICBPTERfSU1BR0UgPSBcIk9MRF9JTUFHRVwiLFxuXG4gIC8qKlxuICAgKiBCb3RoIHRoZSBuZXcgYW5kIHRoZSBvbGQgaXRlbSBpbWFnZXMgb2YgdGhlIGl0ZW0gYXJlIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS5cbiAgICovXG4gIE5FV19BTkRfT0xEX0lNQUdFUyA9IFwiTkVXX0FORF9PTERfSU1BR0VTXCIsXG5cbiAgLyoqXG4gICAqIE9ubHkgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RpZmllZCBpdGVtIGFyZSB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gICAqL1xuICBLRVlTX09OTFkgPSBcIktFWVNfT05MWVwiLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgc2Vjb25kYXJ5IGluZGV4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vjb25kYXJ5SW5kZXhQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2Vjb25kYXJ5IGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgc2Vjb25kYXJ5IGluZGV4LlxuICAgKiBAZGVmYXVsdCBBTExcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3Rpb25UeXBlPzogUHJvamVjdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBub24ta2V5IGF0dHJpYnV0ZXMgdGhhdCBhcmUgcHJvamVjdGVkIGludG8gdGhlIHNlY29uZGFyeSBpbmRleC5cbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG5vbktleUF0dHJpYnV0ZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIGxvY2FsIHNlY29uZGFyeSBpbmRleFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU2Vjb25kYXJ5SW5kZXhQcm9wcyBleHRlbmRzIFNlY29uZGFyeUluZGV4UHJvcHMge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBvZiBhIHNvcnQga2V5IGZvciB0aGUgbG9jYWwgc2Vjb25kYXJ5IGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgc29ydEtleTogQXR0cmlidXRlO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSB0aGF0IHJlcHJlc2VudHMgYSBEeW5hbW9EQiBUYWJsZSAtIGVpdGhlciBjcmVhdGVkIHdpdGggdGhlIENESywgb3IgYW4gZXhpc3Rpbmcgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZSBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogQXJuIG9mIHRoZSBkeW5hbW9kYiB0YWJsZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGFibGUgbmFtZSBvZiB0aGUgZHluYW1vZGIgdGFibGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIHRhYmxlJ3Mgc3RyZWFtLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlU3RyZWFtQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKlxuICAgKiBPcHRpb25hbCBLTVMgZW5jcnlwdGlvbiBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSUFNIHBvbGljeSBzdGF0ZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUgdG8gYW4gSUFNXG4gICAqIHByaW5jaXBhbCdzIHBvbGljeS5cbiAgICpcbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHByZXNlbnQsIGFwcHJvcHJpYXRlIGdyYW50cyB0byB0aGUga2V5IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGB0YWJsZS5lbmNyeXB0aW9uS2V5LmdyYW50KmAgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgc2V0IG9mIGFjdGlvbnMgdG8gYWxsb3cgKGkuZS4gXCJkeW5hbW9kYjpQdXRJdGVtXCIsIFwiZHluYW1vZGI6R2V0SXRlbVwiLCAuLi4pXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSUFNIHBvbGljeSBzdGF0ZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUncyBzdHJlYW0gdG8gYW5cbiAgICogSUFNIHByaW5jaXBhbCdzIHBvbGljeS5cbiAgICpcbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHByZXNlbnQsIGFwcHJvcHJpYXRlIGdyYW50cyB0byB0aGUga2V5IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGB0YWJsZS5lbmNyeXB0aW9uS2V5LmdyYW50KmAgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgc2V0IG9mIGFjdGlvbnMgdG8gYWxsb3cgKGkuZS4gXCJkeW5hbW9kYjpEZXNjcmliZVN0cmVhbVwiLCBcImR5bmFtb2RiOkdldFJlY29yZHNcIiwgLi4uKVxuICAgKi9cbiAgZ3JhbnRTdHJlYW0oZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgcmVhZCBvcGVyYXRpb25zIGZyb20gdGhpcyB0YWJsZTpcbiAgICogQmF0Y2hHZXRJdGVtLCBHZXRSZWNvcmRzLCBHZXRTaGFyZEl0ZXJhdG9yLCBRdWVyeSwgR2V0SXRlbSwgU2Nhbi5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50UmVhZERhdGEoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIFByaW5jaXBhbCB0byBsaXN0IHN0cmVhbXMgYXR0YWNoZWQgdG8gY3VycmVudCBkeW5hbW9kYiB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKi9cbiAgZ3JhbnRUYWJsZUxpc3RTdHJlYW1zKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIHN0cmVhbSBkYXRhIHJlYWQgb3BlcmF0aW9ucyBmb3IgdGhpc1xuICAgKiB0YWJsZSdzIHN0cmVhbTpcbiAgICogRGVzY3JpYmVTdHJlYW0sIEdldFJlY29yZHMsIEdldFNoYXJkSXRlcmF0b3IsIExpc3RTdHJlYW1zLlxuICAgKlxuICAgKiBBcHByb3ByaWF0ZSBncmFudHMgd2lsbCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXlcbiAgICogaWYgb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGFjY2VzcyB0b1xuICAgKi9cbiAgZ3JhbnRTdHJlYW1SZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGlzIHRhYmxlOlxuICAgKiBCYXRjaFdyaXRlSXRlbSwgUHV0SXRlbSwgVXBkYXRlSXRlbSwgRGVsZXRlSXRlbS5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50V3JpdGVEYXRhKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgdG8gYWxsIGRhdGEgcmVhZC93cml0ZSBvcGVyYXRpb25zIHRvIHRoaXMgdGFibGUuXG4gICAqIEJhdGNoR2V0SXRlbSwgR2V0UmVjb3JkcywgR2V0U2hhcmRJdGVyYXRvciwgUXVlcnksIEdldEl0ZW0sIFNjYW4sXG4gICAqIEJhdGNoV3JpdGVJdGVtLCBQdXRJdGVtLCBVcGRhdGVJdGVtLCBEZWxldGVJdGVtXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYWxsIER5bmFtb0RCIG9wZXJhdGlvbnMgKFwiZHluYW1vZGI6KlwiKSB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKlxuICAgKiBBcHByb3ByaWF0ZSBncmFudHMgd2lsbCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXlcbiAgICogaWYgb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGFjY2VzcyB0b1xuICAgKi9cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgRXJyb3JzIGV4ZWN1dGluZyBhbGwgTGFtYmRhc1xuICAgKi9cbiAgbWV0cmljKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGNvbnN1bWVkIHJlYWQgY2FwYWNpdHkgdW5pdHNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICovXG4gIG1ldHJpY0NvbnN1bWVkUmVhZENhcGFjaXR5VW5pdHMoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBjb25zdW1lZCB3cml0ZSBjYXBhY2l0eSB1bml0c1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBvZiBhIG1ldHJpY1xuICAgKi9cbiAgbWV0cmljQ29uc3VtZWRXcml0ZUNhcGFjaXR5VW5pdHMoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBzeXN0ZW0gZXJyb3JzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBwcm9wZXJ0aWVzIG9mIGEgbWV0cmljXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgbWV0cmljU3lzdGVtRXJyb3JzRm9yT3BlcmF0aW9uc2BcbiAgICovXG4gIG1ldHJpY1N5c3RlbUVycm9ycyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBzeXN0ZW0gZXJyb3JzIHRoaXMgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICpcbiAgICovXG4gIG1ldHJpY1N5c3RlbUVycm9yc0Zvck9wZXJhdGlvbnMoXG4gICAgcHJvcHM/OiBTeXN0ZW1FcnJvcnNGb3JPcGVyYXRpb25zTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5JTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB1c2VyIGVycm9yc1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBvZiBhIG1ldHJpY1xuICAgKi9cbiAgbWV0cmljVXNlckVycm9ycyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBjb25kaXRpb25hbCBjaGVjayBmYWlsZWQgcmVxdWVzdHNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICovXG4gIG1ldHJpY0NvbmRpdGlvbmFsQ2hlY2tGYWlsZWRSZXF1ZXN0cyhcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhyb3R0bGVkIHJlcXVlc3RzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBwcm9wZXJ0aWVzIG9mIGEgbWV0cmljXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgbWV0cmljVGhyb3R0bGVkUmVxdWVzdHNGb3JPcGVyYXRpb25zYFxuICAgKi9cbiAgbWV0cmljVGhyb3R0bGVkUmVxdWVzdHMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aHJvdHRsZWQgcmVxdWVzdHNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICpcbiAgICovXG4gIG1ldHJpY1Rocm90dGxlZFJlcXVlc3RzRm9yT3BlcmF0aW9ucyhcbiAgICBwcm9wcz86IE9wZXJhdGlvbnNNZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLklNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHN1Y2Nlc3NmdWwgcmVxdWVzdCBsYXRlbmN5XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBwcm9wZXJ0aWVzIG9mIGEgbWV0cmljXG4gICAqXG4gICAqL1xuICBtZXRyaWNTdWNjZXNzZnVsUmVxdWVzdExhdGVuY3koXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xufVxuIl19
|
|
178
|
+
function validateContributorInsights(contributorInsights, contributorInsightsSpecification, deprecatedPropertyName, construct) {
|
|
179
|
+
if (contributorInsightsSpecification !== undefined &&
|
|
180
|
+
contributorInsights !== undefined) {
|
|
181
|
+
throw new errors_1.ValidationError(`\`contributorInsightsSpecification\` and \`${deprecatedPropertyName}\` are set. Use \`contributorInsightsSpecification\` only.`, construct);
|
|
182
|
+
}
|
|
183
|
+
return (contributorInsightsSpecification ??
|
|
184
|
+
(contributorInsights !== undefined
|
|
185
|
+
? { enabled: contributorInsights }
|
|
186
|
+
: undefined));
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9zdG9yYWdlL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0ZBQStGOzs7QUFxaEIvRixrRUF3QkM7QUExaUJELHlDQUErQztBQU0vQzs7R0FFRztBQUNILElBQVksU0EwQ1g7QUExQ0QsV0FBWSxTQUFTO0lBQ25CLGNBQWM7SUFDZCxpQ0FBb0IsQ0FBQTtJQUVwQixtQkFBbUI7SUFDbkIsNENBQStCLENBQUE7SUFFL0IsV0FBVztJQUNYLDBCQUFhLENBQUE7SUFFYixZQUFZO0lBQ1osNEJBQWUsQ0FBQTtJQUVmLGlCQUFpQjtJQUNqQix1Q0FBMEIsQ0FBQTtJQUUxQixjQUFjO0lBQ2QsaUNBQW9CLENBQUE7SUFFcEIsaUJBQWlCO0lBQ2pCLHVDQUEwQixDQUFBO0lBRTFCLGlCQUFpQjtJQUNqQix1Q0FBMEIsQ0FBQTtJQUUxQixxQkFBcUI7SUFDckIsZ0RBQW1DLENBQUE7SUFFbkMseUJBQXlCO0lBQ3pCLHdEQUEyQyxDQUFBO0lBRTNDLHVCQUF1QjtJQUN2QixvREFBdUMsQ0FBQTtJQUV2Qyx5QkFBeUI7SUFDekIsdURBQTBDLENBQUE7SUFFMUMsNEJBQTRCO0lBQzVCLDhEQUFpRCxDQUFBO0lBRWpELHVCQUF1QjtJQUN2QixtREFBc0MsQ0FBQTtBQUN4QyxDQUFDLEVBMUNXLFNBQVMseUJBQVQsU0FBUyxRQTBDcEI7QUF5RUQ7Ozs7R0FJRztBQUNILElBQVksYUFlWDtBQWZELFdBQVksYUFBYTtJQUN2Qjs7T0FFRztJQUNILDZCQUFZLENBQUE7SUFFWjs7T0FFRztJQUNILDZCQUFZLENBQUE7SUFFWjs7T0FFRztJQUNILDZCQUFZLENBQUE7QUFDZCxDQUFDLEVBZlcsYUFBYSw2QkFBYixhQUFhLFFBZXhCO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLFdBVVg7QUFWRCxXQUFZLFdBQVc7SUFDckI7O09BRUc7SUFDSCxrREFBbUMsQ0FBQTtJQUVuQzs7T0FFRztJQUNILDBDQUEyQixDQUFBO0FBQzdCLENBQUMsRUFWVyxXQUFXLDJCQUFYLFdBQVcsUUFVdEI7QUFFRDs7O0dBR0c7QUFDSCxJQUFZLHVCQVVYO0FBVkQsV0FBWSx1QkFBdUI7SUFDakM7O09BRUc7SUFDSCxzRkFBMkQsQ0FBQTtJQUUzRDs7T0FFRztJQUNILDREQUFpQyxDQUFBO0FBQ25DLENBQUMsRUFWVyx1QkFBdUIsdUNBQXZCLHVCQUF1QixRQVVsQztBQWtCRDs7OztHQUlHO0FBQ0gsSUFBWSxjQWdCWDtBQWhCRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCx5Q0FBdUIsQ0FBQTtJQUV2Qjs7O09BR0c7SUFDSCxxQ0FBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILDZCQUFXLENBQUE7QUFDYixDQUFDLEVBaEJXLGNBQWMsOEJBQWQsY0FBYyxRQWdCekI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxVQVdYO0FBWEQsV0FBWSxVQUFVO0lBQ3BCOztPQUVHO0lBQ0gsbUNBQXFCLENBQUE7SUFFckI7OztPQUdHO0lBQ0gsdUVBQXlELENBQUE7QUFDM0QsQ0FBQyxFQVhXLFVBQVUsMEJBQVYsVUFBVSxRQVdyQjtBQUVEOztHQUVHO0FBQ0gsSUFBWSxlQXNCWDtBQXRCRCxXQUFZLGVBQWU7SUFDekI7O09BRUc7SUFDSCx3Q0FBcUIsQ0FBQTtJQUVyQjs7Ozs7Ozs7O09BU0c7SUFDSCx3REFBcUMsQ0FBQTtJQUVyQzs7T0FFRztJQUNILDhDQUEyQixDQUFBO0FBQzdCLENBQUMsRUF0QlcsZUFBZSwrQkFBZixlQUFlLFFBc0IxQjtBQUVEOzs7OztHQUtHO0FBQ0gsSUFBWSxjQW9CWDtBQXBCRCxXQUFZLGNBQWM7SUFDeEI7O09BRUc7SUFDSCx5Q0FBdUIsQ0FBQTtJQUV2Qjs7T0FFRztJQUNILHlDQUF1QixDQUFBO0lBRXZCOztPQUVHO0lBQ0gsMkRBQXlDLENBQUE7SUFFekM7O09BRUc7SUFDSCx5Q0FBdUIsQ0FBQTtBQUN6QixDQUFDLEVBcEJXLGNBQWMsOEJBQWQsY0FBYyxRQW9CekI7QUFtUEQsU0FBZ0IsMkJBQTJCLENBQ3pDLG1CQUF3QyxFQUN4QyxnQ0FFYSxFQUNiLHNCQUE4QixFQUM5QixTQUFvQjtJQUVwQixJQUNFLGdDQUFnQyxLQUFLLFNBQVM7UUFDOUMsbUJBQW1CLEtBQUssU0FBUyxFQUNqQyxDQUFDO1FBQ0QsTUFBTSxJQUFJLHdCQUFlLENBQ3ZCLDhDQUE4QyxzQkFBc0IsNERBQTRELEVBQ2hJLFNBQVMsQ0FDVixDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU8sQ0FDTCxnQ0FBZ0M7UUFDaEMsQ0FBQyxtQkFBbUIsS0FBSyxTQUFTO1lBQ2hDLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRTtZQUNsQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQ2YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xODYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtZHluYW1vZGIvbGliL3NoYXJlZC50c1xuXG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSBcIi4uLy4uL2Vycm9yc1wiO1xuaW1wb3J0IHsgSUF3c0NvbnN0cnVjdCB9IGZyb20gXCIuLi9hd3MtY29uc3RydWN0XCI7XG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCIuLi9jbG91ZHdhdGNoXCI7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSBcIi4uL2VuY3J5cHRpb25cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5cbi8qKlxuICogU3VwcG9ydGVkIER5bmFtb0RCIHRhYmxlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBlbnVtIE9wZXJhdGlvbiB7XG4gIC8qKiBHZXRJdGVtICovXG4gIEdFVF9JVEVNID0gXCJHZXRJdGVtXCIsXG5cbiAgLyoqIEJhdGNoR2V0SXRlbSAqL1xuICBCQVRDSF9HRVRfSVRFTSA9IFwiQmF0Y2hHZXRJdGVtXCIsXG5cbiAgLyoqIFNjYW4gKi9cbiAgU0NBTiA9IFwiU2NhblwiLFxuXG4gIC8qKiBRdWVyeSAqL1xuICBRVUVSWSA9IFwiUXVlcnlcIixcblxuICAvKiogR2V0UmVjb3JkcyAqL1xuICBHRVRfUkVDT1JEUyA9IFwiR2V0UmVjb3Jkc1wiLFxuXG4gIC8qKiBQdXRJdGVtICovXG4gIFBVVF9JVEVNID0gXCJQdXRJdGVtXCIsXG5cbiAgLyoqIERlbGV0ZUl0ZW0gKi9cbiAgREVMRVRFX0lURU0gPSBcIkRlbGV0ZUl0ZW1cIixcblxuICAvKiogVXBkYXRlSXRlbSAqL1xuICBVUERBVEVfSVRFTSA9IFwiVXBkYXRlSXRlbVwiLFxuXG4gIC8qKiBCYXRjaFdyaXRlSXRlbSAqL1xuICBCQVRDSF9XUklURV9JVEVNID0gXCJCYXRjaFdyaXRlSXRlbVwiLFxuXG4gIC8qKiBUcmFuc2FjdFdyaXRlSXRlbXMgKi9cbiAgVFJBTlNBQ1RfV1JJVEVfSVRFTVMgPSBcIlRyYW5zYWN0V3JpdGVJdGVtc1wiLFxuXG4gIC8qKiBUcmFuc2FjdEdldEl0ZW1zICovXG4gIFRSQU5TQUNUX0dFVF9JVEVNUyA9IFwiVHJhbnNhY3RHZXRJdGVtc1wiLFxuXG4gIC8qKiBFeGVjdXRlVHJhbnNhY3Rpb24gKi9cbiAgRVhFQ1VURV9UUkFOU0FDVElPTiA9IFwiRXhlY3V0ZVRyYW5zYWN0aW9uXCIsXG5cbiAgLyoqIEJhdGNoRXhlY3V0ZVN0YXRlbWVudCAqL1xuICBCQVRDSF9FWEVDVVRFX1NUQVRFTUVOVCA9IFwiQmF0Y2hFeGVjdXRlU3RhdGVtZW50XCIsXG5cbiAgLyoqIEV4ZWN1dGVTdGF0ZW1lbnQgKi9cbiAgRVhFQ1VURV9TVEFURU1FTlQgPSBcIkV4ZWN1dGVTdGF0ZW1lbnRcIixcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBhIHN5c3RlbSBlcnJvcnMgbWV0cmljIHRoYXQgY29uc2lkZXJzIG11bHRpcGxlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3lzdGVtRXJyb3JzRm9yT3BlcmF0aW9uc01ldHJpY09wdGlvbnNcbiAgZXh0ZW5kcyBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG9wZXJhdGlvbnMgdG8gYXBwbHkgdGhlIG1ldHJpYyB0by5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBbGwgb3BlcmF0aW9ucyBhdmFpbGFibGUgYnkgRHluYW1vREIgdGFibGVzIHdpbGwgYmUgY29uc2lkZXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9wZXJhdGlvbnM/OiBPcGVyYXRpb25bXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb25maWd1cmluZyBtZXRyaWNzIHRoYXQgY29uc2lkZXJzIG11bHRpcGxlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3BlcmF0aW9uc01ldHJpY09wdGlvbnNcbiAgZXh0ZW5kcyBTeXN0ZW1FcnJvcnNGb3JPcGVyYXRpb25zTWV0cmljT3B0aW9ucyB7fVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gYXR0cmlidXRlIGZvciBkZXNjcmliaW5nIHRoZSBrZXkgc2NoZW1hIGZvciB0aGUgdGFibGVcbiAqIGFuZCBpbmRleGVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dHJpYnV0ZSB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhbiBhdHRyaWJ1dGUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgYW4gYXR0cmlidXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZTogQXR0cmlidXRlVHlwZTtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gV2FybVRocm91Z2hwdXQgZm9yIGEgRHluYW1vREIgdGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYXJtVGhyb3VnaHB1dCB7XG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBudW1iZXIgb2YgcmVhZCB1bml0cyBwZXIgc2Vjb25kIGEgdGFibGUgd2lsbCBiZSBhYmxlIHRvIGhhbmRsZSBpbnN0YW50bHlcbiAgICogQGRlZmF1bHQgLSBubyByZWFkVW5pdHNQZXJTZWNvbmQgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZFVuaXRzUGVyU2Vjb25kPzogbnVtYmVyO1xuICAvKipcbiAgICogQ29uZmlndXJlcyB0aGUgbnVtYmVyIG9mIHdyaXRlIHVuaXRzIHBlciBzZWNvbmQgYSB0YWJsZSB3aWxsIGJlIGFibGUgdG8gaGFuZGxlIGluc3RhbnRseVxuICAgKiBAZGVmYXVsdCAtIG5vIHdyaXRlVW5pdHNQZXJTZWNvbmQgY29uZmlndXJlZFxuICAgKi9cbiAgcmVhZG9ubHkgd3JpdGVVbml0c1BlclNlY29uZD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBSZWZlcmVuY2UgdG8gUG9pbnRJblRpbWVSZWNvdmV5IFNwZWNpZmljYXRpb25cbiAqIGZvciBjb250aW51b3VzIGJhY2t1cHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb2ludEluVGltZVJlY292ZXJ5U3BlY2lmaWNhdGlvbiB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciBwb2ludCBpbiB0aW1lIHJlY292ZXJ5IGlzIGVuYWJsZWQgKHRydWUpIG9yIGRpc2FibGVkIChmYWxzZSkgb24gdGhlIHRhYmxlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHByZWNlZGluZyBkYXlzIGZvciB3aGljaCBjb250aW51b3VzIGJhY2t1cHMgYXJlIHRha2VuIGFuZCBtYWludGFpbmVkLlxuICAgKiBZb3VyIHRhYmxlIGRhdGEgaXMgb25seSByZWNvdmVyYWJsZSB0byBhbnkgcG9pbnQtaW4tdGltZSBmcm9tIHdpdGhpbiB0aGUgY29uZmlndXJlZCByZWNvdmVyeSBwZXJpb2QuXG4gICAqIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB0aGUgdmFsdWUgd2lsbCBkZWZhdWx0IHRvIDM1LlxuICAgKlxuICAgKiBAZGVmYXVsdCAzNVxuICAgKi9cbiAgcmVhZG9ubHkgcmVjb3ZlcnlQZXJpb2RJbkRheXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRGF0YSB0eXBlcyBmb3IgYXR0cmlidXRlcyB3aXRoaW4gYSB0YWJsZVxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2FtYXpvbmR5bmFtb2RiL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9Ib3dJdFdvcmtzLk5hbWluZ1J1bGVzRGF0YVR5cGVzLmh0bWwjSG93SXRXb3Jrcy5EYXRhVHlwZXNcbiAqL1xuZXhwb3J0IGVudW0gQXR0cmlidXRlVHlwZSB7XG4gIC8qKlxuICAgKiBVcCB0byA0MDBLaUIgb2YgYmluYXJ5IGRhdGEgKHdoaWNoIG11c3QgYmUgZW5jb2RlZCBhcyBiYXNlNjQgYmVmb3JlIHNlbmRpbmcgdG8gRHluYW1vREIpXG4gICAqL1xuICBCSU5BUlkgPSBcIkJcIixcblxuICAvKipcbiAgICogTnVtZXJpYyB2YWx1ZXMgbWFkZSBvZiB1cCB0byAzOCBkaWdpdHMgKHBvc2l0aXZlLCBuZWdhdGl2ZSBvciB6ZXJvKVxuICAgKi9cbiAgTlVNQkVSID0gXCJOXCIsXG5cbiAgLyoqXG4gICAqIFVwIHRvIDQwMEtpQiBvZiBVVEYtOCBlbmNvZGVkIHRleHRcbiAgICovXG4gIFNUUklORyA9IFwiU1wiLFxufVxuXG4vKipcbiAqIER5bmFtb0RCJ3MgUmVhZC9Xcml0ZSBjYXBhY2l0eSBtb2Rlcy5cbiAqL1xuZXhwb3J0IGVudW0gQmlsbGluZ01vZGUge1xuICAvKipcbiAgICogUGF5IG9ubHkgZm9yIHdoYXQgeW91IHVzZS4gWW91IGRvbid0IGNvbmZpZ3VyZSBSZWFkL1dyaXRlIGNhcGFjaXR5IHVuaXRzLlxuICAgKi9cbiAgUEFZX1BFUl9SRVFVRVNUID0gXCJQQVlfUEVSX1JFUVVFU1RcIixcblxuICAvKipcbiAgICogRXhwbGljaXRseSBzcGVjaWZpZWQgUmVhZC9Xcml0ZSBjYXBhY2l0eSB1bml0cy5cbiAgICovXG4gIFBST1ZJU0lPTkVEID0gXCJQUk9WSVNJT05FRFwiLFxufVxuXG4vKipcbiAqIER5bmFtb0RCJ3MgQ29udHJpYnV0b3IgSW5zaWdodHMgTW9kZVxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1RlbXBsYXRlUmVmZXJlbmNlL2F3cy1wcm9wZXJ0aWVzLWR5bmFtb2RiLXRhYmxlLWNvbnRyaWJ1dG9yaW5zaWdodHNzcGVjaWZpY2F0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gQ29udHJpYnV0b3JJbnNpZ2h0c01vZGUge1xuICAvKipcbiAgICogRW1pdHMgbWV0cmljcyBmb3IgYWxsIHJlYWQgYW5kIHdyaXRlIHJlcXVlc3RzLCB3aGV0aGVyIHN1Y2Nlc3NmdWwgb3IgdGhyb3R0bGVkLlxuICAgKi9cbiAgQUNDRVNTRURfQU5EX1RIUk9UVExFRF9LRVlTID0gXCJBQ0NFU1NFRF9BTkRfVEhST1RUTEVEX0tFWVNcIixcblxuICAvKipcbiAgICogRW1pdHMgbWV0cmljcyBmb3IgcmVhZCBhbmQgd3JpdGUgcmVxdWVzdHMgdGhhdCB3ZXJlIHRocm90dGxlZC5cbiAgICovXG4gIFRIUk9UVExFRF9LRVlTID0gXCJUSFJPVFRMRURfS0VZU1wiLFxufVxuXG4vKipcbiAqIFJlZmVyZW5jZSB0byBDb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIGNvbnRyaWJ1dG9yIGluc2lnaHRzIGlzIGVuYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkOiBib29sZWFuO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSB0eXBlIG9mIG1ldHJpY3MgY2FwdHVyZWQgYnkgY29udHJpYnV0b3IgaW5zaWdodHMuXG4gICAqIEBkZWZhdWx0IEFDQ0VTU0VEX0FORF9USFJPVFRMRURfS0VZU1xuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IENvbnRyaWJ1dG9ySW5zaWdodHNNb2RlO1xufVxuXG4vKipcbiAqIFRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgaW5kZXhcbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Qcm9qZWN0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gUHJvamVjdGlvblR5cGUge1xuICAvKipcbiAgICogT25seSB0aGUgaW5kZXggYW5kIHByaW1hcnkga2V5cyBhcmUgcHJvamVjdGVkIGludG8gdGhlIGluZGV4LlxuICAgKi9cbiAgS0VZU19PTkxZID0gXCJLRVlTX09OTFlcIixcblxuICAvKipcbiAgICogT25seSB0aGUgc3BlY2lmaWVkIHRhYmxlIGF0dHJpYnV0ZXMgYXJlIHByb2plY3RlZCBpbnRvIHRoZSBpbmRleC4gVGhlIGxpc3RcbiAgICogb2YgcHJvamVjdGVkIGF0dHJpYnV0ZXMgaXMgaW4gYG5vbktleUF0dHJpYnV0ZXNgLlxuICAgKi9cbiAgSU5DTFVERSA9IFwiSU5DTFVERVwiLFxuXG4gIC8qKlxuICAgKiBBbGwgb2YgdGhlIHRhYmxlIGF0dHJpYnV0ZXMgYXJlIHByb2plY3RlZCBpbnRvIHRoZSBpbmRleC5cbiAgICovXG4gIEFMTCA9IFwiQUxMXCIsXG59XG5cbi8qKlxuICogRHluYW1vREIncyB0YWJsZSBjbGFzcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvSG93SXRXb3Jrcy5UYWJsZUNsYXNzZXMuaHRtbFxuICovXG5leHBvcnQgZW51bSBUYWJsZUNsYXNzIHtcbiAgLyoqXG4gICAqIERlZmF1bHQgdGFibGUgY2xhc3MgZm9yIER5bmFtb0RCLlxuICAgKi9cbiAgU1RBTkRBUkQgPSBcIlNUQU5EQVJEXCIsXG5cbiAgLyoqXG4gICAqIFRhYmxlIGNsYXNzIGZvciBEeW5hbW9EQiB0aGF0IHJlZHVjZXMgc3RvcmFnZSBjb3N0cyBjb21wYXJlZCB0byBleGlzdGluZyBEeW5hbW9EQlxuICAgKiBzdGFuZGFyZCB0YWJsZXMuXG4gICAqL1xuICBTVEFOREFSRF9JTkZSRVFVRU5UX0FDQ0VTUyA9IFwiU1RBTkRBUkRfSU5GUkVRVUVOVF9BQ0NFU1NcIixcbn1cblxuLyoqXG4gKiBXaGF0IGtpbmQgb2Ygc2VydmVyLXNpZGUgZW5jcnlwdGlvbiB0byBhcHBseSB0byB0aGlzIHRhYmxlLlxuICovXG5leHBvcnQgZW51bSBUYWJsZUVuY3J5cHRpb24ge1xuICAvKipcbiAgICogU2VydmVyLXNpZGUgS01TIGVuY3J5cHRpb24gd2l0aCBhIG1hc3RlciBrZXkgb3duZWQgYnkgQVdTLlxuICAgKi9cbiAgREVGQVVMVCA9IFwiQVdTX09XTkVEXCIsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIEtNUyBlbmNyeXB0aW9uIHdpdGggYSBjdXN0b21lciBtYXN0ZXIga2V5IG1hbmFnZWQgYnkgY3VzdG9tZXIuXG4gICAqIElmIGBlbmNyeXB0aW9uS2V5YCBpcyBzcGVjaWZpZWQsIHRoaXMga2V5IHdpbGwgYmUgdXNlZCwgb3RoZXJ3aXNlLCBvbmUgd2lsbCBiZSBkZWZpbmVkLlxuICAgKlxuICAgKiA+ICoqTk9URSoqOiBpZiBgZW5jcnlwdGlvbktleWAgaXMgbm90IHNwZWNpZmllZCBhbmQgdGhlIGBUYWJsZWAgY29uc3RydWN0IGNyZWF0ZXNcbiAgICogPiBhIEtNUyBrZXkgZm9yIHlvdSwgdGhlIGtleSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBkZWZhdWx0IHBlcm1pc3Npb25zLiBJZiB5b3UgYXJlIHVzaW5nXG4gICAqID4gQ0RLdjIsIHRoZXNlIHBlcm1pc3Npb25zIHdpbGwgYmUgc3VmZmljaWVudCB0byBlbmFibGUgdGhlIGtleSBmb3IgdXNlIHdpdGggRHluYW1vREIgdGFibGVzLlxuICAgKiA+IElmIHlvdSBhcmUgdXNpbmcgQ0RLdjEsIG1ha2Ugc3VyZSB0aGUgZmVhdHVyZSBmbGFnIGBAYXdzLWNkay9hd3Mta21zOmRlZmF1bHRLZXlQb2xpY2llc2BcbiAgICogPiBpcyBzZXQgdG8gYHRydWVgIGluIHlvdXIgYGNkay5qc29uYC5cbiAgICovXG4gIENVU1RPTUVSX01BTkFHRUQgPSBcIkNVU1RPTUVSX01BTkFHRURcIixcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgS01TIGVuY3J5cHRpb24gd2l0aCBhIG1hc3RlciBrZXkgbWFuYWdlZCBieSBBV1MuXG4gICAqL1xuICBBV1NfTUFOQUdFRCA9IFwiQVdTX01BTkFHRURcIixcbn1cblxuLyoqXG4gKiBXaGVuIGFuIGl0ZW0gaW4gdGhlIHRhYmxlIGlzIG1vZGlmaWVkLCBTdHJlYW1WaWV3VHlwZSBkZXRlcm1pbmVzIHdoYXQgaW5mb3JtYXRpb25cbiAqIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSBmb3IgdGhpcyB0YWJsZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hbWF6b25keW5hbW9kYi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9TdHJlYW1TcGVjaWZpY2F0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gU3RyZWFtVmlld1R5cGUge1xuICAvKipcbiAgICogVGhlIGVudGlyZSBpdGVtLCBhcyBpdCBhcHBlYXJzIGFmdGVyIGl0IHdhcyBtb2RpZmllZCwgaXMgd3JpdHRlbiB0byB0aGUgc3RyZWFtLlxuICAgKi9cbiAgTkVXX0lNQUdFID0gXCJORVdfSU1BR0VcIixcblxuICAvKipcbiAgICogVGhlIGVudGlyZSBpdGVtLCBhcyBpdCBhcHBlYXJlZCBiZWZvcmUgaXQgd2FzIG1vZGlmaWVkLCBpcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gICAqL1xuICBPTERfSU1BR0UgPSBcIk9MRF9JTUFHRVwiLFxuXG4gIC8qKlxuICAgKiBCb3RoIHRoZSBuZXcgYW5kIHRoZSBvbGQgaXRlbSBpbWFnZXMgb2YgdGhlIGl0ZW0gYXJlIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbS5cbiAgICovXG4gIE5FV19BTkRfT0xEX0lNQUdFUyA9IFwiTkVXX0FORF9PTERfSU1BR0VTXCIsXG5cbiAgLyoqXG4gICAqIE9ubHkgdGhlIGtleSBhdHRyaWJ1dGVzIG9mIHRoZSBtb2RpZmllZCBpdGVtIGFyZSB3cml0dGVuIHRvIHRoZSBzdHJlYW0uXG4gICAqL1xuICBLRVlTX09OTFkgPSBcIktFWVNfT05MWVwiLFxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGEgc2Vjb25kYXJ5IGluZGV4XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2Vjb25kYXJ5SW5kZXhQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgc2Vjb25kYXJ5IGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgYXR0cmlidXRlcyB0aGF0IGFyZSBwcm9qZWN0ZWQgaW50byB0aGUgc2Vjb25kYXJ5IGluZGV4LlxuICAgKiBAZGVmYXVsdCBBTExcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3Rpb25UeXBlPzogUHJvamVjdGlvblR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBub24ta2V5IGF0dHJpYnV0ZXMgdGhhdCBhcmUgcHJvamVjdGVkIGludG8gdGhlIHNlY29uZGFyeSBpbmRleC5cbiAgICogQGRlZmF1bHQgLSBObyBhZGRpdGlvbmFsIGF0dHJpYnV0ZXNcbiAgICovXG4gIHJlYWRvbmx5IG5vbktleUF0dHJpYnV0ZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIGxvY2FsIHNlY29uZGFyeSBpbmRleFxuICovXG5leHBvcnQgaW50ZXJmYWNlIExvY2FsU2Vjb25kYXJ5SW5kZXhQcm9wcyBleHRlbmRzIFNlY29uZGFyeUluZGV4UHJvcHMge1xuICAvKipcbiAgICogVGhlIGF0dHJpYnV0ZSBvZiBhIHNvcnQga2V5IGZvciB0aGUgbG9jYWwgc2Vjb25kYXJ5IGluZGV4LlxuICAgKi9cbiAgcmVhZG9ubHkgc29ydEtleTogQXR0cmlidXRlO1xufVxuXG4vKipcbiAqIEFuIGludGVyZmFjZSB0aGF0IHJlcHJlc2VudHMgYSBEeW5hbW9EQiBUYWJsZSAtIGVpdGhlciBjcmVhdGVkIHdpdGggdGhlIENESywgb3IgYW4gZXhpc3Rpbmcgb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElUYWJsZSBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogQXJuIG9mIHRoZSBkeW5hbW9kYiB0YWJsZS5cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGFibGUgbmFtZSBvZiB0aGUgZHluYW1vZGIgdGFibGUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhlIHRhYmxlJ3Mgc3RyZWFtLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlU3RyZWFtQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKlxuICAgKiBPcHRpb25hbCBLTVMgZW5jcnlwdGlvbiBrZXkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSUFNIHBvbGljeSBzdGF0ZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUgdG8gYW4gSUFNXG4gICAqIHByaW5jaXBhbCdzIHBvbGljeS5cbiAgICpcbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHByZXNlbnQsIGFwcHJvcHJpYXRlIGdyYW50cyB0byB0aGUga2V5IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGB0YWJsZS5lbmNyeXB0aW9uS2V5LmdyYW50KmAgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgc2V0IG9mIGFjdGlvbnMgdG8gYWxsb3cgKGkuZS4gXCJkeW5hbW9kYjpQdXRJdGVtXCIsIFwiZHluYW1vZGI6R2V0SXRlbVwiLCAuLi4pXG4gICAqL1xuICBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSUFNIHBvbGljeSBzdGF0ZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUncyBzdHJlYW0gdG8gYW5cbiAgICogSUFNIHByaW5jaXBhbCdzIHBvbGljeS5cbiAgICpcbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHByZXNlbnQsIGFwcHJvcHJpYXRlIGdyYW50cyB0byB0aGUga2V5IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGB0YWJsZS5lbmNyeXB0aW9uS2V5LmdyYW50KmAgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgc2V0IG9mIGFjdGlvbnMgdG8gYWxsb3cgKGkuZS4gXCJkeW5hbW9kYjpEZXNjcmliZVN0cmVhbVwiLCBcImR5bmFtb2RiOkdldFJlY29yZHNcIiwgLi4uKVxuICAgKi9cbiAgZ3JhbnRTdHJlYW0oZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgcmVhZCBvcGVyYXRpb25zIGZyb20gdGhpcyB0YWJsZTpcbiAgICogQmF0Y2hHZXRJdGVtLCBHZXRSZWNvcmRzLCBHZXRTaGFyZEl0ZXJhdG9yLCBRdWVyeSwgR2V0SXRlbSwgU2Nhbi5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50UmVhZERhdGEoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIFByaW5jaXBhbCB0byBsaXN0IHN0cmVhbXMgYXR0YWNoZWQgdG8gY3VycmVudCBkeW5hbW9kYiB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKi9cbiAgZ3JhbnRUYWJsZUxpc3RTdHJlYW1zKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIHN0cmVhbSBkYXRhIHJlYWQgb3BlcmF0aW9ucyBmb3IgdGhpc1xuICAgKiB0YWJsZSdzIHN0cmVhbTpcbiAgICogRGVzY3JpYmVTdHJlYW0sIEdldFJlY29yZHMsIEdldFNoYXJkSXRlcmF0b3IsIExpc3RTdHJlYW1zLlxuICAgKlxuICAgKiBBcHByb3ByaWF0ZSBncmFudHMgd2lsbCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXlcbiAgICogaWYgb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGFjY2VzcyB0b1xuICAgKi9cbiAgZ3JhbnRTdHJlYW1SZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGlzIHRhYmxlOlxuICAgKiBCYXRjaFdyaXRlSXRlbSwgUHV0SXRlbSwgVXBkYXRlSXRlbSwgRGVsZXRlSXRlbS5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIGdyYW50V3JpdGVEYXRhKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgdG8gYWxsIGRhdGEgcmVhZC93cml0ZSBvcGVyYXRpb25zIHRvIHRoaXMgdGFibGUuXG4gICAqIEJhdGNoR2V0SXRlbSwgR2V0UmVjb3JkcywgR2V0U2hhcmRJdGVyYXRvciwgUXVlcnksIEdldEl0ZW0sIFNjYW4sXG4gICAqIEJhdGNoV3JpdGVJdGVtLCBQdXRJdGVtLCBVcGRhdGVJdGVtLCBEZWxldGVJdGVtXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBncmFudFJlYWRXcml0ZURhdGEoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQ7XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYWxsIER5bmFtb0RCIG9wZXJhdGlvbnMgKFwiZHluYW1vZGI6KlwiKSB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKlxuICAgKiBBcHByb3ByaWF0ZSBncmFudHMgd2lsbCBhbHNvIGJlIGFkZGVkIHRvIHRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXlcbiAgICogaWYgb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IGFjY2VzcyB0b1xuICAgKi9cbiAgZ3JhbnRGdWxsQWNjZXNzKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBudW1iZXIgb2YgRXJyb3JzIGV4ZWN1dGluZyBhbGwgTGFtYmRhc1xuICAgKi9cbiAgbWV0cmljKFxuICAgIG1ldHJpY05hbWU6IHN0cmluZyxcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIGNvbnN1bWVkIHJlYWQgY2FwYWNpdHkgdW5pdHNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICovXG4gIG1ldHJpY0NvbnN1bWVkUmVhZENhcGFjaXR5VW5pdHMoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBjb25zdW1lZCB3cml0ZSBjYXBhY2l0eSB1bml0c1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBvZiBhIG1ldHJpY1xuICAgKi9cbiAgbWV0cmljQ29uc3VtZWRXcml0ZUNhcGFjaXR5VW5pdHMoXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBzeXN0ZW0gZXJyb3JzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBwcm9wZXJ0aWVzIG9mIGEgbWV0cmljXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgbWV0cmljU3lzdGVtRXJyb3JzRm9yT3BlcmF0aW9uc2BcbiAgICovXG4gIG1ldHJpY1N5c3RlbUVycm9ycyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBzeXN0ZW0gZXJyb3JzIHRoaXMgdGFibGVcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICpcbiAgICovXG4gIG1ldHJpY1N5c3RlbUVycm9yc0Zvck9wZXJhdGlvbnMoXG4gICAgcHJvcHM/OiBTeXN0ZW1FcnJvcnNGb3JPcGVyYXRpb25zTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5JTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSB1c2VyIGVycm9yc1xuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgcHJvcGVydGllcyBvZiBhIG1ldHJpY1xuICAgKi9cbiAgbWV0cmljVXNlckVycm9ycyhwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyk6IGNsb3Vkd2F0Y2guTWV0cmljO1xuXG4gIC8qKlxuICAgKiBNZXRyaWMgZm9yIHRoZSBjb25kaXRpb25hbCBjaGVjayBmYWlsZWQgcmVxdWVzdHNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICovXG4gIG1ldHJpY0NvbmRpdGlvbmFsQ2hlY2tGYWlsZWRSZXF1ZXN0cyhcbiAgICBwcm9wcz86IGNsb3Vkd2F0Y2guTWV0cmljT3B0aW9ucyxcbiAgKTogY2xvdWR3YXRjaC5NZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhyb3R0bGVkIHJlcXVlc3RzXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBwcm9wZXJ0aWVzIG9mIGEgbWV0cmljXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgbWV0cmljVGhyb3R0bGVkUmVxdWVzdHNGb3JPcGVyYXRpb25zYFxuICAgKi9cbiAgbWV0cmljVGhyb3R0bGVkUmVxdWVzdHMocHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMpOiBjbG91ZHdhdGNoLk1ldHJpYztcblxuICAvKipcbiAgICogTWV0cmljIGZvciB0aHJvdHRsZWQgcmVxdWVzdHNcbiAgICpcbiAgICogQHBhcmFtIHByb3BzIHByb3BlcnRpZXMgb2YgYSBtZXRyaWNcbiAgICpcbiAgICovXG4gIG1ldHJpY1Rocm90dGxlZFJlcXVlc3RzRm9yT3BlcmF0aW9ucyhcbiAgICBwcm9wcz86IE9wZXJhdGlvbnNNZXRyaWNPcHRpb25zLFxuICApOiBjbG91ZHdhdGNoLklNZXRyaWM7XG5cbiAgLyoqXG4gICAqIE1ldHJpYyBmb3IgdGhlIHN1Y2Nlc3NmdWwgcmVxdWVzdCBsYXRlbmN5XG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBwcm9wZXJ0aWVzIG9mIGEgbWV0cmljXG4gICAqXG4gICAqL1xuICBtZXRyaWNTdWNjZXNzZnVsUmVxdWVzdExhdGVuY3koXG4gICAgcHJvcHM/OiBjbG91ZHdhdGNoLk1ldHJpY09wdGlvbnMsXG4gICk6IGNsb3Vkd2F0Y2guTWV0cmljO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVDb250cmlidXRvckluc2lnaHRzKFxuICBjb250cmlidXRvckluc2lnaHRzOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbjpcbiAgICB8IENvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uXG4gICAgfCB1bmRlZmluZWQsXG4gIGRlcHJlY2F0ZWRQcm9wZXJ0eU5hbWU6IHN0cmluZyxcbiAgY29uc3RydWN0OiBDb25zdHJ1Y3QsXG4pOiBDb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbiB8IHVuZGVmaW5lZCB7XG4gIGlmIChcbiAgICBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgY29udHJpYnV0b3JJbnNpZ2h0cyAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgXFxgY29udHJpYnV0b3JJbnNpZ2h0c1NwZWNpZmljYXRpb25cXGAgYW5kIFxcYCR7ZGVwcmVjYXRlZFByb3BlcnR5TmFtZX1cXGAgYXJlIHNldC4gVXNlIFxcYGNvbnRyaWJ1dG9ySW5zaWdodHNTcGVjaWZpY2F0aW9uXFxgIG9ubHkuYCxcbiAgICAgIGNvbnN0cnVjdCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBjb250cmlidXRvckluc2lnaHRzU3BlY2lmaWNhdGlvbiA/P1xuICAgIChjb250cmlidXRvckluc2lnaHRzICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBlbmFibGVkOiBjb250cmlidXRvckluc2lnaHRzIH1cbiAgICAgIDogdW5kZWZpbmVkKVxuICApO1xufVxuIl19
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as kms from "../encryption";
|
|
2
|
+
import * as iam from "../iam";
|
|
3
|
+
import { ITable } from "./shared";
|
|
4
|
+
/**
|
|
5
|
+
* Construction properties for StreamGrants
|
|
6
|
+
*/
|
|
7
|
+
export interface StreamGrantsProps {
|
|
8
|
+
/**
|
|
9
|
+
* The table this stream is for
|
|
10
|
+
*/
|
|
11
|
+
readonly table: ITable;
|
|
12
|
+
/**
|
|
13
|
+
* The ARN of the Stream
|
|
14
|
+
*/
|
|
15
|
+
readonly tableStreamArn: string;
|
|
16
|
+
/**
|
|
17
|
+
* The encryption key of the table
|
|
18
|
+
*
|
|
19
|
+
* Required permissions will be added to the key as well.
|
|
20
|
+
*
|
|
21
|
+
* @default - No key
|
|
22
|
+
*/
|
|
23
|
+
readonly encryptionKey?: kms.IKey;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A set of permissions to grant on a Table Stream
|
|
27
|
+
*/
|
|
28
|
+
export declare class StreamGrants {
|
|
29
|
+
private readonly table;
|
|
30
|
+
private readonly tableStreamArn;
|
|
31
|
+
private readonly encryptionKey?;
|
|
32
|
+
constructor(props: StreamGrantsProps);
|
|
33
|
+
/**
|
|
34
|
+
* Adds an IAM policy statement associated with this table's stream to an
|
|
35
|
+
* IAM principal's policy.
|
|
36
|
+
*
|
|
37
|
+
* If `encryptionKey` is present, appropriate grants to the key needs to be added
|
|
38
|
+
* separately using the `table.encryptionKey.grant*` methods.
|
|
39
|
+
*
|
|
40
|
+
* @param grantee The principal (no-op if undefined)
|
|
41
|
+
* @param actions The set of actions to allow (i.e. "dynamodb:DescribeStream", "dynamodb:GetRecords", ...)
|
|
42
|
+
*/
|
|
43
|
+
actions(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
|
|
44
|
+
/**
|
|
45
|
+
* Permits an IAM Principal to list streams attached to current dynamodb table.
|
|
46
|
+
*
|
|
47
|
+
* @param grantee The principal (no-op if undefined)
|
|
48
|
+
*/
|
|
49
|
+
list(grantee: iam.IGrantable): iam.Grant;
|
|
50
|
+
/**
|
|
51
|
+
* Permits an IAM principal all stream data read operations for this
|
|
52
|
+
* table's stream:
|
|
53
|
+
* DescribeStream, GetRecords, GetShardIterator, ListStreams.
|
|
54
|
+
*
|
|
55
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
56
|
+
* if one was configured.
|
|
57
|
+
*
|
|
58
|
+
* @param grantee The principal to grant access to
|
|
59
|
+
*/
|
|
60
|
+
read(grantee: iam.IGrantable): iam.Grant;
|
|
61
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.StreamGrants = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.233.0/packages/aws-cdk-lib/aws-dynamodb/lib/streams-grants.ts
|
|
7
|
+
const perms = require("./dynamodb-perms");
|
|
8
|
+
const iam = require("../iam");
|
|
9
|
+
/**
|
|
10
|
+
* A set of permissions to grant on a Table Stream
|
|
11
|
+
*/
|
|
12
|
+
class StreamGrants {
|
|
13
|
+
constructor(props) {
|
|
14
|
+
this.table = props.table;
|
|
15
|
+
this.tableStreamArn = props.tableStreamArn;
|
|
16
|
+
this.encryptionKey = props?.encryptionKey;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Adds an IAM policy statement associated with this table's stream to an
|
|
20
|
+
* IAM principal's policy.
|
|
21
|
+
*
|
|
22
|
+
* If `encryptionKey` is present, appropriate grants to the key needs to be added
|
|
23
|
+
* separately using the `table.encryptionKey.grant*` methods.
|
|
24
|
+
*
|
|
25
|
+
* @param grantee The principal (no-op if undefined)
|
|
26
|
+
* @param actions The set of actions to allow (i.e. "dynamodb:DescribeStream", "dynamodb:GetRecords", ...)
|
|
27
|
+
*/
|
|
28
|
+
actions(grantee, ...actions) {
|
|
29
|
+
return iam.Grant.addToPrincipal({
|
|
30
|
+
grantee,
|
|
31
|
+
actions,
|
|
32
|
+
resourceArns: [this.tableStreamArn],
|
|
33
|
+
scope: this.table,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Permits an IAM Principal to list streams attached to current dynamodb table.
|
|
38
|
+
*
|
|
39
|
+
* @param grantee The principal (no-op if undefined)
|
|
40
|
+
*/
|
|
41
|
+
list(grantee) {
|
|
42
|
+
return iam.Grant.addToPrincipal({
|
|
43
|
+
grantee,
|
|
44
|
+
actions: ["dynamodb:ListStreams"],
|
|
45
|
+
resourceArns: ["*"],
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Permits an IAM principal all stream data read operations for this
|
|
50
|
+
* table's stream:
|
|
51
|
+
* DescribeStream, GetRecords, GetShardIterator, ListStreams.
|
|
52
|
+
*
|
|
53
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
54
|
+
* if one was configured.
|
|
55
|
+
*
|
|
56
|
+
* @param grantee The principal to grant access to
|
|
57
|
+
*/
|
|
58
|
+
read(grantee) {
|
|
59
|
+
this.list(grantee);
|
|
60
|
+
this.encryptionKey?.grant(grantee, ...perms.KEY_READ_ACTIONS);
|
|
61
|
+
return iam.Grant.addToPrincipal({
|
|
62
|
+
grantee,
|
|
63
|
+
actions: perms.READ_STREAM_DATA_ACTIONS,
|
|
64
|
+
resourceArns: [this.tableStreamArn],
|
|
65
|
+
scope: this.table,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.StreamGrants = StreamGrants;
|
|
70
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
71
|
+
StreamGrants[_a] = { fqn: "terraconstructs.aws.storage.StreamGrants", version: "0.2.2" };
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWdyYW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvc3RvcmFnZS9zdHJlYW0tZ3JhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdUdBQXVHO0FBRXZHLDBDQUEwQztBQUUxQyw4QkFBOEI7QUEyQjlCOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBS3ZCLFlBQVksS0FBd0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssRUFBRSxhQUFhLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxPQUF1QixFQUFFLEdBQUcsT0FBaUI7UUFDMUQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTztZQUNQLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksSUFBSSxDQUFDLE9BQXVCO1FBQ2pDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO1lBQ2pDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksSUFBSSxDQUFDLE9BQXVCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyx3QkFBd0I7WUFDdkMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE5REgsb0NBK0RDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMjMzLjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiL2xpYi9zdHJlYW1zLWdyYW50cy50c1xuXG5pbXBvcnQgKiBhcyBwZXJtcyBmcm9tIFwiLi9keW5hbW9kYi1wZXJtc1wiO1xuaW1wb3J0ICogYXMga21zIGZyb20gXCIuLi9lbmNyeXB0aW9uXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuaW1wb3J0IHsgSVRhYmxlIH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIFN0cmVhbUdyYW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUdyYW50c1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0aGlzIHN0cmVhbSBpcyBmb3JcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlOiBJVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIFN0cmVhbVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVTdHJlYW1Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24ga2V5IG9mIHRoZSB0YWJsZVxuICAgKlxuICAgKiBSZXF1aXJlZCBwZXJtaXNzaW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBrZXkgYXMgd2VsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBrZXlcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcbn1cblxuLyoqXG4gKiBBIHNldCBvZiBwZXJtaXNzaW9ucyB0byBncmFudCBvbiBhIFRhYmxlIFN0cmVhbVxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtR3JhbnRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZTogSVRhYmxlO1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlU3RyZWFtQXJuOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdHJlYW1HcmFudHNQcm9wcykge1xuICAgIHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcbiAgICB0aGlzLnRhYmxlU3RyZWFtQXJuID0gcHJvcHMudGFibGVTdHJlYW1Bcm47XG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gcHJvcHM/LmVuY3J5cHRpb25LZXk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBJQU0gcG9saWN5IHN0YXRlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0YWJsZSdzIHN0cmVhbSB0byBhblxuICAgKiBJQU0gcHJpbmNpcGFsJ3MgcG9saWN5LlxuICAgKlxuICAgKiBJZiBgZW5jcnlwdGlvbktleWAgaXMgcHJlc2VudCwgYXBwcm9wcmlhdGUgZ3JhbnRzIHRvIHRoZSBrZXkgbmVlZHMgdG8gYmUgYWRkZWRcbiAgICogc2VwYXJhdGVseSB1c2luZyB0aGUgYHRhYmxlLmVuY3J5cHRpb25LZXkuZ3JhbnQqYCBtZXRob2RzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIChuby1vcCBpZiB1bmRlZmluZWQpXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBzZXQgb2YgYWN0aW9ucyB0byBhbGxvdyAoaS5lLiBcImR5bmFtb2RiOkRlc2NyaWJlU3RyZWFtXCIsIFwiZHluYW1vZGI6R2V0UmVjb3Jkc1wiLCAuLi4pXG4gICAqL1xuICBwdWJsaWMgYWN0aW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLnRhYmxlU3RyZWFtQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLnRhYmxlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIFByaW5jaXBhbCB0byBsaXN0IHN0cmVhbXMgYXR0YWNoZWQgdG8gY3VycmVudCBkeW5hbW9kYiB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKi9cbiAgcHVibGljIGxpc3QoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcImR5bmFtb2RiOkxpc3RTdHJlYW1zXCJdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbXCIqXCJdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIHByaW5jaXBhbCBhbGwgc3RyZWFtIGRhdGEgcmVhZCBvcGVyYXRpb25zIGZvciB0aGlzXG4gICAqIHRhYmxlJ3Mgc3RyZWFtOlxuICAgKiBEZXNjcmliZVN0cmVhbSwgR2V0UmVjb3JkcywgR2V0U2hhcmRJdGVyYXRvciwgTGlzdFN0cmVhbXMuXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgdGhpcy5saXN0KGdyYW50ZWUpO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleT8uZ3JhbnQoZ3JhbnRlZSwgLi4ucGVybXMuS0VZX1JFQURfQUNUSU9OUyk7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogcGVybXMuUkVBRF9TVFJFQU1fREFUQV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy50YWJsZVN0cmVhbUFybl0sXG4gICAgICBzY29wZTogdGhpcy50YWJsZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import * as iam from "../iam";
|
|
2
|
+
import { ITable } from "./shared";
|
|
3
|
+
/**
|
|
4
|
+
* Construction properties for TableGrants
|
|
5
|
+
*/
|
|
6
|
+
export interface TableGrantsProps {
|
|
7
|
+
/**
|
|
8
|
+
* The table to grant permissions on
|
|
9
|
+
*/
|
|
10
|
+
readonly table: ITable;
|
|
11
|
+
/**
|
|
12
|
+
* Additional regions other than the main one that this table is replicated to
|
|
13
|
+
*
|
|
14
|
+
* @default - No regions
|
|
15
|
+
*/
|
|
16
|
+
readonly regions?: string[];
|
|
17
|
+
/**
|
|
18
|
+
* Whether this table has indexes
|
|
19
|
+
*
|
|
20
|
+
* If so, permissions are granted on all table indexes as well.
|
|
21
|
+
*
|
|
22
|
+
* @default false
|
|
23
|
+
*/
|
|
24
|
+
readonly hasIndex?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* The encrypted resource on which actions will be allowed
|
|
27
|
+
*
|
|
28
|
+
* @default - No permission is added to the KMS key, even if it exists
|
|
29
|
+
*/
|
|
30
|
+
readonly encryptedResource?: iam.IEncryptedResource;
|
|
31
|
+
/**
|
|
32
|
+
* The resource with policy on which actions will be allowed
|
|
33
|
+
*
|
|
34
|
+
* @default - No resource policy is created
|
|
35
|
+
*/
|
|
36
|
+
readonly policyResource?: iam.IAwsConstructWithPolicy;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A set of permissions to grant on a Table
|
|
40
|
+
*/
|
|
41
|
+
export declare class TableGrants {
|
|
42
|
+
private readonly table;
|
|
43
|
+
private readonly arns;
|
|
44
|
+
private readonly encryptedResource?;
|
|
45
|
+
private readonly policyResource?;
|
|
46
|
+
constructor(props: TableGrantsProps);
|
|
47
|
+
/**
|
|
48
|
+
* Adds an IAM policy statement associated with this table to an IAM
|
|
49
|
+
* principal's policy.
|
|
50
|
+
*
|
|
51
|
+
* If `encryptionKey` is present, appropriate grants to the key needs to be added
|
|
52
|
+
* separately using the `table.encryptionKey.grant*` methods.
|
|
53
|
+
*
|
|
54
|
+
* @param grantee The principal (no-op if undefined)
|
|
55
|
+
* @param actions The set of actions to allow (i.e. "dynamodb:PutItem", "dynamodb:GetItem", ...)
|
|
56
|
+
*/
|
|
57
|
+
actions(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
|
|
58
|
+
/**
|
|
59
|
+
* Permits an IAM principal all data read operations from this table:
|
|
60
|
+
* BatchGetItem, GetRecords, GetShardIterator, Query, GetItem, Scan, DescribeTable.
|
|
61
|
+
*
|
|
62
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
63
|
+
* if one was configured.
|
|
64
|
+
*
|
|
65
|
+
* @param grantee The principal to grant access to
|
|
66
|
+
*/
|
|
67
|
+
readData(grantee: iam.IGrantable): iam.Grant;
|
|
68
|
+
/**
|
|
69
|
+
* Permits an IAM principal all data write operations to this table:
|
|
70
|
+
* BatchWriteItem, PutItem, UpdateItem, DeleteItem, DescribeTable.
|
|
71
|
+
*
|
|
72
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
73
|
+
* if one was configured.
|
|
74
|
+
*
|
|
75
|
+
* @param grantee The principal to grant access to
|
|
76
|
+
*/
|
|
77
|
+
writeData(grantee: iam.IGrantable): iam.Grant;
|
|
78
|
+
/**
|
|
79
|
+
* Permits an IAM principal to all data read/write operations to this table.
|
|
80
|
+
* BatchGetItem, GetRecords, GetShardIterator, Query, GetItem, Scan,
|
|
81
|
+
* BatchWriteItem, PutItem, UpdateItem, DeleteItem, DescribeTable
|
|
82
|
+
*
|
|
83
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
84
|
+
* if one was configured.
|
|
85
|
+
*
|
|
86
|
+
* @param grantee The principal to grant access to
|
|
87
|
+
*/
|
|
88
|
+
readWriteData(grantee: iam.IGrantable): iam.Grant;
|
|
89
|
+
/**
|
|
90
|
+
* Permits all DynamoDB operations ("dynamodb:*") to an IAM principal.
|
|
91
|
+
*
|
|
92
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
93
|
+
* if one was configured.
|
|
94
|
+
*
|
|
95
|
+
* @param grantee The principal to grant access to
|
|
96
|
+
*/
|
|
97
|
+
fullAccess(grantee: iam.IGrantable): iam.Grant;
|
|
98
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.TableGrants = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
// https://github.com/aws/aws-cdk/blob/v2.233.0/packages/aws-cdk-lib/aws-dynamodb/lib/table-grants.ts
|
|
7
|
+
const perms = require("./dynamodb-perms");
|
|
8
|
+
const aws_stack_1 = require("../aws-stack");
|
|
9
|
+
const iam = require("../iam");
|
|
10
|
+
/**
|
|
11
|
+
* A set of permissions to grant on a Table
|
|
12
|
+
*/
|
|
13
|
+
class TableGrants {
|
|
14
|
+
constructor(props) {
|
|
15
|
+
this.arns = [];
|
|
16
|
+
this.table = props.table;
|
|
17
|
+
this.encryptedResource = props.encryptedResource;
|
|
18
|
+
this.policyResource = props.policyResource;
|
|
19
|
+
const stack = aws_stack_1.AwsStack.ofAwsConstruct(this.table);
|
|
20
|
+
this.arns = [
|
|
21
|
+
this.table.tableArn,
|
|
22
|
+
...(props.regions ?? []).map((region) => stack.formatArn({
|
|
23
|
+
region,
|
|
24
|
+
service: "dynamodb",
|
|
25
|
+
resource: "table",
|
|
26
|
+
resourceName: this.table.tableName,
|
|
27
|
+
})),
|
|
28
|
+
];
|
|
29
|
+
if (props.hasIndex) {
|
|
30
|
+
this.arns.push(...this.arns.map((arn) => `${arn}/index/*`));
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Adds an IAM policy statement associated with this table to an IAM
|
|
35
|
+
* principal's policy.
|
|
36
|
+
*
|
|
37
|
+
* If `encryptionKey` is present, appropriate grants to the key needs to be added
|
|
38
|
+
* separately using the `table.encryptionKey.grant*` methods.
|
|
39
|
+
*
|
|
40
|
+
* @param grantee The principal (no-op if undefined)
|
|
41
|
+
* @param actions The set of actions to allow (i.e. "dynamodb:PutItem", "dynamodb:GetItem", ...)
|
|
42
|
+
*/
|
|
43
|
+
actions(grantee, ...actions) {
|
|
44
|
+
return this.policyResource
|
|
45
|
+
? iam.Grant.addToPrincipalOrResource({
|
|
46
|
+
grantee,
|
|
47
|
+
actions,
|
|
48
|
+
resourceArns: this.arns,
|
|
49
|
+
resource: this.policyResource,
|
|
50
|
+
// Use wildcard for resource policy to avoid circular dependency when grantee is a resource principal
|
|
51
|
+
// (e.g., AccountRootPrincipal). This follows the same pattern as KMS (aws-kms/lib/key.ts).
|
|
52
|
+
// resourceArns is used for principal policies, resourceSelfArns is used for resource policies.
|
|
53
|
+
resourceSelfArns: ["*"],
|
|
54
|
+
})
|
|
55
|
+
: iam.Grant.addToPrincipal({
|
|
56
|
+
grantee,
|
|
57
|
+
actions,
|
|
58
|
+
resourceArns: this.arns,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Permits an IAM principal all data read operations from this table:
|
|
63
|
+
* BatchGetItem, GetRecords, GetShardIterator, Query, GetItem, Scan, DescribeTable.
|
|
64
|
+
*
|
|
65
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
66
|
+
* if one was configured.
|
|
67
|
+
*
|
|
68
|
+
* @param grantee The principal to grant access to
|
|
69
|
+
*/
|
|
70
|
+
readData(grantee) {
|
|
71
|
+
const actions = [...perms.RESOURCE_READ_DATA_ACTIONS, perms.DESCRIBE_TABLE];
|
|
72
|
+
this.encryptedResource?.grantOnKey(grantee, ...perms.KEY_READ_ACTIONS);
|
|
73
|
+
const result = this.actions(grantee, ...actions);
|
|
74
|
+
return result.combine(iam.Grant.addToPrincipal({
|
|
75
|
+
grantee,
|
|
76
|
+
actions: perms.PRINCIPAL_ONLY_READ_DATA_ACTIONS,
|
|
77
|
+
resourceArns: this.arns,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Permits an IAM principal all data write operations to this table:
|
|
82
|
+
* BatchWriteItem, PutItem, UpdateItem, DeleteItem, DescribeTable.
|
|
83
|
+
*
|
|
84
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
85
|
+
* if one was configured.
|
|
86
|
+
*
|
|
87
|
+
* @param grantee The principal to grant access to
|
|
88
|
+
*/
|
|
89
|
+
writeData(grantee) {
|
|
90
|
+
const actions = [...perms.WRITE_DATA_ACTIONS, perms.DESCRIBE_TABLE];
|
|
91
|
+
const result = this.actions(grantee, ...actions);
|
|
92
|
+
this.encryptedResource?.grantOnKey(grantee, ...perms.KEY_READ_ACTIONS, ...perms.KEY_WRITE_ACTIONS);
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Permits an IAM principal to all data read/write operations to this table.
|
|
97
|
+
* BatchGetItem, GetRecords, GetShardIterator, Query, GetItem, Scan,
|
|
98
|
+
* BatchWriteItem, PutItem, UpdateItem, DeleteItem, DescribeTable
|
|
99
|
+
*
|
|
100
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
101
|
+
* if one was configured.
|
|
102
|
+
*
|
|
103
|
+
* @param grantee The principal to grant access to
|
|
104
|
+
*/
|
|
105
|
+
readWriteData(grantee) {
|
|
106
|
+
const actions = [
|
|
107
|
+
...perms.RESOURCE_READ_DATA_ACTIONS,
|
|
108
|
+
...perms.WRITE_DATA_ACTIONS,
|
|
109
|
+
perms.DESCRIBE_TABLE,
|
|
110
|
+
];
|
|
111
|
+
const result = this.actions(grantee, ...actions);
|
|
112
|
+
this.encryptedResource?.grantOnKey(grantee, ...perms.KEY_READ_ACTIONS, ...perms.KEY_WRITE_ACTIONS);
|
|
113
|
+
return result.combine(iam.Grant.addToPrincipal({
|
|
114
|
+
grantee,
|
|
115
|
+
actions: perms.PRINCIPAL_ONLY_READ_DATA_ACTIONS,
|
|
116
|
+
resourceArns: this.arns,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Permits all DynamoDB operations ("dynamodb:*") to an IAM principal.
|
|
121
|
+
*
|
|
122
|
+
* Appropriate grants will also be added to the customer-managed KMS key
|
|
123
|
+
* if one was configured.
|
|
124
|
+
*
|
|
125
|
+
* @param grantee The principal to grant access to
|
|
126
|
+
*/
|
|
127
|
+
fullAccess(grantee) {
|
|
128
|
+
const actions = ["dynamodb:*"];
|
|
129
|
+
const result = this.actions(grantee, ...actions);
|
|
130
|
+
this.encryptedResource?.grantOnKey(grantee, ...perms.KEY_READ_ACTIONS, ...perms.KEY_WRITE_ACTIONS);
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
exports.TableGrants = TableGrants;
|
|
135
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
136
|
+
TableGrants[_a] = { fqn: "terraconstructs.aws.storage.TableGrants", version: "0.2.2" };
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZ3JhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9zdG9yYWdlL3RhYmxlLWdyYW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFHQUFxRztBQUVyRywwQ0FBMEM7QUFDMUMsNENBQXdDO0FBQ3hDLDhCQUE4QjtBQTJDOUI7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFNdEIsWUFBWSxLQUF1QjtRQUpsQixTQUFJLEdBQWEsRUFBRSxDQUFDO1FBS25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUUzQyxNQUFNLEtBQUssR0FBRyxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUN0QyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNkLE1BQU07Z0JBQ04sT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO2FBQ25DLENBQUMsQ0FDSDtTQUNGLENBQUM7UUFFRixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUM5RCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxPQUF1QixFQUFFLEdBQUcsT0FBaUI7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYztZQUN4QixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztnQkFDakMsT0FBTztnQkFDUCxPQUFPO2dCQUNQLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUM3QixxR0FBcUc7Z0JBQ3JHLDJGQUEyRjtnQkFDM0YsK0ZBQStGO2dCQUMvRixnQkFBZ0IsRUFBRSxDQUFDLEdBQUcsQ0FBQzthQUN4QixDQUFDO1lBQ0osQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO2dCQUN2QixPQUFPO2dCQUNQLE9BQU87Z0JBQ1AsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJO2FBQ3hCLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLFFBQVEsQ0FBQyxPQUF1QjtRQUNyQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFFakQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUN2QixPQUFPO1lBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyxnQ0FBZ0M7WUFDL0MsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJO1NBQ3hCLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksU0FBUyxDQUFDLE9BQXVCO1FBQ3RDLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FDaEMsT0FBTyxFQUNQLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUN6QixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FDM0IsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSSxhQUFhLENBQUMsT0FBdUI7UUFDMUMsTUFBTSxPQUFPLEdBQUc7WUFDZCxHQUFHLEtBQUssQ0FBQywwQkFBMEI7WUFDbkMsR0FBRyxLQUFLLENBQUMsa0JBQWtCO1lBQzNCLEtBQUssQ0FBQyxjQUFjO1NBQ3JCLENBQUM7UUFDRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQ2hDLE9BQU8sRUFDUCxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsRUFDekIsR0FBRyxLQUFLLENBQUMsaUJBQWlCLENBQzNCLENBQUM7UUFFRixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQ25CLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQ3ZCLE9BQU87WUFDUCxPQUFPLEVBQUUsS0FBSyxDQUFDLGdDQUFnQztZQUMvQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDeEIsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFVBQVUsQ0FBQyxPQUF1QjtRQUN2QyxNQUFNLE9BQU8sR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FDaEMsT0FBTyxFQUNQLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUN6QixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FDM0IsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBdkpILGtDQXdKQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjIzMy4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1keW5hbW9kYi9saWIvdGFibGUtZ3JhbnRzLnRzXG5cbmltcG9ydCAqIGFzIHBlcm1zIGZyb20gXCIuL2R5bmFtb2RiLXBlcm1zXCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tIFwiLi9zaGFyZWRcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgVGFibGVHcmFudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZUdyYW50c1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBncmFudCBwZXJtaXNzaW9ucyBvblxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGU6IElUYWJsZTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCByZWdpb25zIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIHRoYXQgdGhpcyB0YWJsZSBpcyByZXBsaWNhdGVkIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVnaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgdGFibGUgaGFzIGluZGV4ZXNcbiAgICpcbiAgICogSWYgc28sIHBlcm1pc3Npb25zIGFyZSBncmFudGVkIG9uIGFsbCB0YWJsZSBpbmRleGVzIGFzIHdlbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBoYXNJbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0ZWQgcmVzb3VyY2Ugb24gd2hpY2ggYWN0aW9ucyB3aWxsIGJlIGFsbG93ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwZXJtaXNzaW9uIGlzIGFkZGVkIHRvIHRoZSBLTVMga2V5LCBldmVuIGlmIGl0IGV4aXN0c1xuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGVkUmVzb3VyY2U/OiBpYW0uSUVuY3J5cHRlZFJlc291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2Ugd2l0aCBwb2xpY3kgb24gd2hpY2ggYWN0aW9ucyB3aWxsIGJlIGFsbG93ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyByZXNvdXJjZSBwb2xpY3kgaXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UmVzb3VyY2U/OiBpYW0uSUF3c0NvbnN0cnVjdFdpdGhQb2xpY3k7XG59XG5cbi8qKlxuICogQSBzZXQgb2YgcGVybWlzc2lvbnMgdG8gZ3JhbnQgb24gYSBUYWJsZVxuICovXG5leHBvcnQgY2xhc3MgVGFibGVHcmFudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlOiBJVGFibGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJuczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmNyeXB0ZWRSZXNvdXJjZT86IGlhbS5JRW5jcnlwdGVkUmVzb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcG9saWN5UmVzb3VyY2U/OiBpYW0uSUF3c0NvbnN0cnVjdFdpdGhQb2xpY3k7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFRhYmxlR3JhbnRzUHJvcHMpIHtcbiAgICB0aGlzLnRhYmxlID0gcHJvcHMudGFibGU7XG4gICAgdGhpcy5lbmNyeXB0ZWRSZXNvdXJjZSA9IHByb3BzLmVuY3J5cHRlZFJlc291cmNlO1xuICAgIHRoaXMucG9saWN5UmVzb3VyY2UgPSBwcm9wcy5wb2xpY3lSZXNvdXJjZTtcblxuICAgIGNvbnN0IHN0YWNrID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcy50YWJsZSk7XG5cbiAgICB0aGlzLmFybnMgPSBbXG4gICAgICB0aGlzLnRhYmxlLnRhYmxlQXJuLFxuICAgICAgLi4uKHByb3BzLnJlZ2lvbnMgPz8gW10pLm1hcCgocmVnaW9uKSA9PlxuICAgICAgICBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICBzZXJ2aWNlOiBcImR5bmFtb2RiXCIsXG4gICAgICAgICAgcmVzb3VyY2U6IFwidGFibGVcIixcbiAgICAgICAgICByZXNvdXJjZU5hbWU6IHRoaXMudGFibGUudGFibGVOYW1lLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgXTtcblxuICAgIGlmIChwcm9wcy5oYXNJbmRleCkge1xuICAgICAgdGhpcy5hcm5zLnB1c2goLi4udGhpcy5hcm5zLm1hcCgoYXJuKSA9PiBgJHthcm59L2luZGV4LypgKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSUFNIHBvbGljeSBzdGF0ZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUgdG8gYW4gSUFNXG4gICAqIHByaW5jaXBhbCdzIHBvbGljeS5cbiAgICpcbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHByZXNlbnQsIGFwcHJvcHJpYXRlIGdyYW50cyB0byB0aGUga2V5IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGB0YWJsZS5lbmNyeXB0aW9uS2V5LmdyYW50KmAgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgc2V0IG9mIGFjdGlvbnMgdG8gYWxsb3cgKGkuZS4gXCJkeW5hbW9kYjpQdXRJdGVtXCIsIFwiZHluYW1vZGI6R2V0SXRlbVwiLCAuLi4pXG4gICAqL1xuICBwdWJsaWMgYWN0aW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnBvbGljeVJlc291cmNlXG4gICAgICA/IGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbE9yUmVzb3VyY2Uoe1xuICAgICAgICAgIGdyYW50ZWUsXG4gICAgICAgICAgYWN0aW9ucyxcbiAgICAgICAgICByZXNvdXJjZUFybnM6IHRoaXMuYXJucyxcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5wb2xpY3lSZXNvdXJjZSxcbiAgICAgICAgICAvLyBVc2Ugd2lsZGNhcmQgZm9yIHJlc291cmNlIHBvbGljeSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IHdoZW4gZ3JhbnRlZSBpcyBhIHJlc291cmNlIHByaW5jaXBhbFxuICAgICAgICAgIC8vIChlLmcuLCBBY2NvdW50Um9vdFByaW5jaXBhbCkuIFRoaXMgZm9sbG93cyB0aGUgc2FtZSBwYXR0ZXJuIGFzIEtNUyAoYXdzLWttcy9saWIva2V5LnRzKS5cbiAgICAgICAgICAvLyByZXNvdXJjZUFybnMgaXMgdXNlZCBmb3IgcHJpbmNpcGFsIHBvbGljaWVzLCByZXNvdXJjZVNlbGZBcm5zIGlzIHVzZWQgZm9yIHJlc291cmNlIHBvbGljaWVzLlxuICAgICAgICAgIHJlc291cmNlU2VsZkFybnM6IFtcIipcIl0sXG4gICAgICAgIH0pXG4gICAgICA6IGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgICAgZ3JhbnRlZSxcbiAgICAgICAgICBhY3Rpb25zLFxuICAgICAgICAgIHJlc291cmNlQXJuczogdGhpcy5hcm5zLFxuICAgICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgcmVhZCBvcGVyYXRpb25zIGZyb20gdGhpcyB0YWJsZTpcbiAgICogQmF0Y2hHZXRJdGVtLCBHZXRSZWNvcmRzLCBHZXRTaGFyZEl0ZXJhdG9yLCBRdWVyeSwgR2V0SXRlbSwgU2NhbiwgRGVzY3JpYmVUYWJsZS5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkRGF0YShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgYWN0aW9ucyA9IFsuLi5wZXJtcy5SRVNPVVJDRV9SRUFEX0RBVEFfQUNUSU9OUywgcGVybXMuREVTQ1JJQkVfVEFCTEVdO1xuICAgIHRoaXMuZW5jcnlwdGVkUmVzb3VyY2U/LmdyYW50T25LZXkoZ3JhbnRlZSwgLi4ucGVybXMuS0VZX1JFQURfQUNUSU9OUyk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hY3Rpb25zKGdyYW50ZWUsIC4uLmFjdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5jb21iaW5lKFxuICAgICAgaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgICAgZ3JhbnRlZSxcbiAgICAgICAgYWN0aW9uczogcGVybXMuUFJJTkNJUEFMX09OTFlfUkVBRF9EQVRBX0FDVElPTlMsXG4gICAgICAgIHJlc291cmNlQXJuczogdGhpcy5hcm5zLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGlzIHRhYmxlOlxuICAgKiBCYXRjaFdyaXRlSXRlbSwgUHV0SXRlbSwgVXBkYXRlSXRlbSwgRGVsZXRlSXRlbSwgRGVzY3JpYmVUYWJsZS5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIHB1YmxpYyB3cml0ZURhdGEoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBbLi4ucGVybXMuV1JJVEVfREFUQV9BQ1RJT05TLCBwZXJtcy5ERVNDUklCRV9UQUJMRV07XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hY3Rpb25zKGdyYW50ZWUsIC4uLmFjdGlvbnMpO1xuICAgIHRoaXMuZW5jcnlwdGVkUmVzb3VyY2U/LmdyYW50T25LZXkoXG4gICAgICBncmFudGVlLFxuICAgICAgLi4ucGVybXMuS0VZX1JFQURfQUNUSU9OUyxcbiAgICAgIC4uLnBlcm1zLktFWV9XUklURV9BQ1RJT05TLFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgdG8gYWxsIGRhdGEgcmVhZC93cml0ZSBvcGVyYXRpb25zIHRvIHRoaXMgdGFibGUuXG4gICAqIEJhdGNoR2V0SXRlbSwgR2V0UmVjb3JkcywgR2V0U2hhcmRJdGVyYXRvciwgUXVlcnksIEdldEl0ZW0sIFNjYW4sXG4gICAqIEJhdGNoV3JpdGVJdGVtLCBQdXRJdGVtLCBVcGRhdGVJdGVtLCBEZWxldGVJdGVtLCBEZXNjcmliZVRhYmxlXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZFdyaXRlRGF0YShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgYWN0aW9ucyA9IFtcbiAgICAgIC4uLnBlcm1zLlJFU09VUkNFX1JFQURfREFUQV9BQ1RJT05TLFxuICAgICAgLi4ucGVybXMuV1JJVEVfREFUQV9BQ1RJT05TLFxuICAgICAgcGVybXMuREVTQ1JJQkVfVEFCTEUsXG4gICAgXTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFjdGlvbnMoZ3JhbnRlZSwgLi4uYWN0aW9ucyk7XG4gICAgdGhpcy5lbmNyeXB0ZWRSZXNvdXJjZT8uZ3JhbnRPbktleShcbiAgICAgIGdyYW50ZWUsXG4gICAgICAuLi5wZXJtcy5LRVlfUkVBRF9BQ1RJT05TLFxuICAgICAgLi4ucGVybXMuS0VZX1dSSVRFX0FDVElPTlMsXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQuY29tYmluZShcbiAgICAgIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgIGdyYW50ZWUsXG4gICAgICAgIGFjdGlvbnM6IHBlcm1zLlBSSU5DSVBBTF9PTkxZX1JFQURfREFUQV9BQ1RJT05TLFxuICAgICAgICByZXNvdXJjZUFybnM6IHRoaXMuYXJucyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUGVybWl0cyBhbGwgRHluYW1vREIgb3BlcmF0aW9ucyAoXCJkeW5hbW9kYjoqXCIpIHRvIGFuIElBTSBwcmluY2lwYWwuXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgZnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBbXCJkeW5hbW9kYjoqXCJdO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYWN0aW9ucyhncmFudGVlLCAuLi5hY3Rpb25zKTtcbiAgICB0aGlzLmVuY3J5cHRlZFJlc291cmNlPy5ncmFudE9uS2V5KFxuICAgICAgZ3JhbnRlZSxcbiAgICAgIC4uLnBlcm1zLktFWV9SRUFEX0FDVElPTlMsXG4gICAgICAuLi5wZXJtcy5LRVlfV1JJVEVfQUNUSU9OUyxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|