terraconstructs 0.2.4 → 0.2.5
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 +2984 -2812
- package/CLAUDE.md +6 -6
- package/README.md +1 -1
- package/lib/asset-staging.js +3 -3
- package/lib/aws/arn.js +5 -5
- package/lib/aws/aws-asset-manager.js +9 -9
- package/lib/aws/aws-construct.js +1 -1
- package/lib/aws/aws-stack.d.ts +2 -2
- package/lib/aws/aws-stack.js +9 -9
- package/lib/aws/aws-tags.d.ts +1 -1
- package/lib/aws/aws-tags.js +5 -5
- 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 +2 -2
- 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.d.ts +1 -1
- package/lib/aws/cloudwatch/alarm.js +10 -10
- package/lib/aws/cloudwatch/composite-alarm.d.ts +1 -1
- package/lib/aws/cloudwatch/composite-alarm.js +7 -7
- package/lib/aws/cloudwatch/dashboard.d.ts +1 -1
- package/lib/aws/cloudwatch/dashboard.js +7 -7
- package/lib/aws/cloudwatch/data-protection-policy.d.ts +1 -1
- package/lib/aws/cloudwatch/data-protection-policy.js +5 -5
- 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.d.ts +1 -1
- package/lib/aws/cloudwatch/log-group.js +7 -7
- package/lib/aws/cloudwatch/log-query.js +1 -1
- package/lib/aws/cloudwatch/log-stream.d.ts +1 -1
- package/lib/aws/cloudwatch/log-stream.js +3 -3
- package/lib/aws/cloudwatch/metric-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/metric-filter.js +3 -3
- package/lib/aws/cloudwatch/metric.js +6 -6
- package/lib/aws/cloudwatch/pattern.js +3 -3
- package/lib/aws/cloudwatch/policy.d.ts +1 -1
- package/lib/aws/cloudwatch/policy.js +3 -3
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.d.ts +1 -1
- package/lib/aws/cloudwatch/private/drop-empty-object-at-the-end-of-an-array-token.js +1 -1
- package/lib/aws/cloudwatch/private/env-tokens.js +6 -6
- package/lib/aws/cloudwatch/query-definition.d.ts +1 -1
- package/lib/aws/cloudwatch/query-definition.js +4 -4
- package/lib/aws/cloudwatch/stats.js +1 -1
- package/lib/aws/cloudwatch/subscription-filter.d.ts +1 -1
- package/lib/aws/cloudwatch/subscription-filter.js +6 -6
- 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.d.ts +1 -1
- package/lib/aws/compute/access-log.js +5 -5
- package/lib/aws/compute/activity.d.ts +1 -1
- package/lib/aws/compute/activity.js +5 -5
- package/lib/aws/compute/alb/application-listener-action.d.ts +1 -1
- package/lib/aws/compute/alb/application-listener-action.js +5 -5
- package/lib/aws/compute/alb/application-listener-certificate.js +3 -3
- package/lib/aws/compute/alb/application-listener-rule.js +9 -9
- package/lib/aws/compute/alb/application-listener.js +5 -5
- package/lib/aws/compute/alb/application-load-balancer.js +8 -8
- package/lib/aws/compute/alb/application-target-group.js +7 -7
- package/lib/aws/compute/alb/conditions.js +3 -3
- package/lib/aws/compute/alb/trust-store-revocation.js +3 -3
- package/lib/aws/compute/alb/trust-store.js +7 -7
- package/lib/aws/compute/api-definition.js +9 -9
- package/lib/aws/compute/api-key.js +6 -6
- package/lib/aws/compute/architecture.js +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.d.ts +1 -1
- package/lib/aws/compute/aspects/require-imdsv2-aspect.js +6 -6
- package/lib/aws/compute/authorizer.js +1 -1
- package/lib/aws/compute/authorizers/identity-source.js +1 -1
- package/lib/aws/compute/authorizers/lambda.d.ts +1 -1
- package/lib/aws/compute/authorizers/lambda.js +6 -6
- package/lib/aws/compute/base-path-mapping.js +5 -5
- package/lib/aws/compute/base-scalable-attribute.js +1 -1
- package/lib/aws/compute/bastion-host.js +4 -4
- package/lib/aws/compute/chain.js +1 -1
- package/lib/aws/compute/client-vpn-authorization-rule.js +3 -3
- package/lib/aws/compute/client-vpn-endpoint.d.ts +1 -1
- package/lib/aws/compute/client-vpn-endpoint.js +9 -9
- package/lib/aws/compute/client-vpn-route.d.ts +1 -1
- package/lib/aws/compute/client-vpn-route.js +4 -4
- package/lib/aws/compute/code.d.ts +3 -3
- package/lib/aws/compute/code.js +15 -15
- 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 +5 -5
- package/lib/aws/compute/domain-name.js +5 -5
- package/lib/aws/compute/event-invoke-config.d.ts +1 -1
- package/lib/aws/compute/event-invoke-config.js +3 -3
- package/lib/aws/compute/event-source-filter.js +2 -2
- package/lib/aws/compute/event-source-mapping.js +7 -7
- 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 +5 -5
- package/lib/aws/compute/fields.d.ts +1 -1
- package/lib/aws/compute/fields.js +12 -12
- package/lib/aws/compute/function-alias.d.ts +1 -1
- package/lib/aws/compute/function-alias.js +3 -3
- package/lib/aws/compute/function-base.d.ts +1 -1
- package/lib/aws/compute/function-base.js +10 -9
- 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/bundling.js +6 -6
- package/lib/aws/compute/function-nodejs/function.js +4 -4
- package/lib/aws/compute/function-url.d.ts +1 -1
- package/lib/aws/compute/function-url.js +3 -3
- package/lib/aws/compute/function-vpc-config.generated.d.ts +5 -5
- package/lib/aws/compute/function-vpc-config.generated.js +1 -1
- package/lib/aws/compute/function.d.ts +2 -2
- package/lib/aws/compute/function.js +9 -9
- package/lib/aws/compute/gateway-response.d.ts +1 -1
- package/lib/aws/compute/gateway-response.js +4 -4
- package/lib/aws/compute/handler.js +1 -1
- package/lib/aws/compute/instance-types.js +1 -1
- package/lib/aws/compute/instance.d.ts +1 -1
- package/lib/aws/compute/instance.js +9 -9
- package/lib/aws/compute/integration.js +4 -4
- package/lib/aws/compute/integrations/aws.js +3 -3
- package/lib/aws/compute/integrations/http.js +1 -1
- package/lib/aws/compute/integrations/lambda.js +5 -5
- package/lib/aws/compute/integrations/mock.js +1 -1
- package/lib/aws/compute/integrations/stepfunctions.js +4 -4
- package/lib/aws/compute/ip-addresses.d.ts +1 -1
- package/lib/aws/compute/ip-addresses.js +10 -10
- package/lib/aws/compute/ipam.d.ts +1 -1
- package/lib/aws/compute/ipam.js +5 -5
- package/lib/aws/compute/key-pair.d.ts +1 -1
- package/lib/aws/compute/key-pair.js +6 -6
- package/lib/aws/compute/lambda-api.js +1 -1
- package/lib/aws/compute/launch-template.d.ts +1 -1
- package/lib/aws/compute/launch-template.js +12 -12
- package/lib/aws/compute/lb-shared/base-listener.js +9 -9
- package/lib/aws/compute/lb-shared/base-load-balancer.d.ts +2 -2
- package/lib/aws/compute/lb-shared/base-load-balancer.js +12 -12
- package/lib/aws/compute/lb-shared/base-target-group.d.ts +1 -1
- package/lib/aws/compute/lb-shared/base-target-group.js +15 -15
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.d.ts +34 -34
- package/lib/aws/compute/lb-shared/lb-listener-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.d.ts +11 -6
- package/lib/aws/compute/lb-shared/lb-target-group-attachment-config.generated.js +1 -1
- package/lib/aws/compute/lb-shared/listener-action.d.ts +1 -1
- package/lib/aws/compute/lb-shared/listener-action.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-shared/util.js +5 -5
- 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.d.ts +1 -1
- package/lib/aws/compute/load-balancer.js +8 -8
- 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 +10 -10
- package/lib/aws/compute/method.js +6 -6
- package/lib/aws/compute/model.js +5 -5
- package/lib/aws/compute/nat.js +10 -10
- package/lib/aws/compute/network-acl-types.js +2 -2
- package/lib/aws/compute/network-acl.d.ts +1 -1
- package/lib/aws/compute/network-acl.js +5 -5
- package/lib/aws/compute/nlb/network-listener-action.d.ts +1 -1
- package/lib/aws/compute/nlb/network-listener-action.js +2 -2
- package/lib/aws/compute/nlb/network-listener-certificate.js +2 -2
- package/lib/aws/compute/nlb/network-listener.js +5 -5
- package/lib/aws/compute/nlb/network-load-balancer.js +6 -6
- package/lib/aws/compute/nlb/network-target-group.js +4 -4
- package/lib/aws/compute/peer.js +7 -7
- package/lib/aws/compute/placement-group.d.ts +1 -1
- package/lib/aws/compute/placement-group.js +3 -3
- package/lib/aws/compute/port.js +5 -5
- package/lib/aws/compute/prefix-list.d.ts +1 -1
- package/lib/aws/compute/prefix-list.js +5 -5
- package/lib/aws/compute/private/context-stub.js +7 -7
- package/lib/aws/compute/private/ebs-util.d.ts +1 -1
- package/lib/aws/compute/private/ebs-util.js +3 -3
- package/lib/aws/compute/private/json-path.d.ts +1 -1
- package/lib/aws/compute/private/json-path.js +8 -8
- package/lib/aws/compute/requestvalidator.js +3 -3
- package/lib/aws/compute/resource.js +5 -5
- package/lib/aws/compute/restapi.d.ts +1 -1
- package/lib/aws/compute/restapi.js +11 -11
- package/lib/aws/compute/route.d.ts +1 -1
- package/lib/aws/compute/route.js +12 -12
- package/lib/aws/compute/runtime.js +3 -3
- package/lib/aws/compute/scalable-target.d.ts +1 -1
- package/lib/aws/compute/scalable-target.js +3 -3
- package/lib/aws/compute/schedule.js +4 -4
- package/lib/aws/compute/security-group.js +12 -12
- package/lib/aws/compute/stage.d.ts +1 -1
- package/lib/aws/compute/stage.js +6 -6
- 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.d.ts +2 -2
- package/lib/aws/compute/state-machine.js +8 -8
- package/lib/aws/compute/states/choice.js +1 -1
- package/lib/aws/compute/states/custom-state.js +5 -5
- 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 +4 -4
- package/lib/aws/compute/states/fail.js +4 -4
- package/lib/aws/compute/states/map-base.js +4 -4
- 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 +4 -4
- 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 +5 -5
- package/lib/aws/compute/step-scaling-policy.js +7 -7
- package/lib/aws/compute/stepfunctions-api.js +2 -2
- package/lib/aws/compute/subnet-v2.d.ts +1 -1
- package/lib/aws/compute/subnet-v2.js +5 -5
- package/lib/aws/compute/subnet.js +4 -4
- package/lib/aws/compute/target-tracking-scaling-policy.js +3 -3
- 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 +5 -5
- 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 +5 -5
- package/lib/aws/compute/user-data.d.ts +2 -2
- package/lib/aws/compute/user-data.js +10 -10
- package/lib/aws/compute/volume.d.ts +1 -1
- package/lib/aws/compute/volume.js +7 -7
- package/lib/aws/compute/vpc-endpoint-service.js +3 -3
- package/lib/aws/compute/vpc-endpoint.d.ts +1 -1
- package/lib/aws/compute/vpc-endpoint.js +13 -13
- package/lib/aws/compute/vpc-flow-logs.d.ts +1 -1
- package/lib/aws/compute/vpc-flow-logs.js +8 -8
- package/lib/aws/compute/vpc-link.js +5 -5
- package/lib/aws/compute/vpc-v2-base.js +6 -6
- package/lib/aws/compute/vpc-v2.d.ts +2 -2
- package/lib/aws/compute/vpc-v2.js +4 -4
- package/lib/aws/compute/vpc.d.ts +1 -1
- package/lib/aws/compute/vpc.js +21 -21
- package/lib/aws/compute/vpn.js +8 -8
- package/lib/aws/context-provider.js +4 -4
- package/lib/aws/edge/certificate.d.ts +1 -1
- package/lib/aws/edge/certificate.js +6 -6
- package/lib/aws/edge/distribution.d.ts +1 -1
- package/lib/aws/edge/distribution.js +9 -9
- package/lib/aws/edge/dns-alias-record-targets.d.ts +1 -1
- package/lib/aws/edge/dns-alias-record-targets.js +7 -7
- package/lib/aws/edge/dns-record.d.ts +1 -1
- package/lib/aws/edge/dns-record.js +19 -19
- package/lib/aws/edge/dns-zone.d.ts +2 -2
- package/lib/aws/edge/dns-zone.js +5 -5
- package/lib/aws/edge/function.d.ts +1 -1
- package/lib/aws/edge/function.js +4 -4
- package/lib/aws/edge/key-value-store.d.ts +1 -1
- package/lib/aws/edge/key-value-store.js +6 -6
- package/lib/aws/edge/origin.d.ts +1 -1
- package/lib/aws/edge/origin.js +6 -6
- package/lib/aws/edge/response-headers-policy.d.ts +1 -1
- package/lib/aws/edge/response-headers-policy.js +6 -6
- package/lib/aws/encryption/alias.d.ts +1 -1
- package/lib/aws/encryption/alias.js +8 -8
- package/lib/aws/encryption/key.d.ts +1 -1
- package/lib/aws/encryption/key.js +6 -6
- package/lib/aws/encryption/via-service-principal.js +1 -1
- package/lib/aws/iam/grant.js +3 -3
- package/lib/aws/iam/group.js +5 -5
- package/lib/aws/iam/instance-profile.d.ts +1 -1
- package/lib/aws/iam/instance-profile.js +3 -3
- package/lib/aws/iam/managed-policy.d.ts +1 -1
- package/lib/aws/iam/managed-policy.js +3 -3
- package/lib/aws/iam/oidc-provider.d.ts +1 -1
- package/lib/aws/iam/oidc-provider.js +3 -3
- package/lib/aws/iam/policy-document-config.generated.d.ts +9 -9
- package/lib/aws/iam/policy-document-config.generated.js +1 -1
- package/lib/aws/iam/policy-document.d.ts +1 -1
- package/lib/aws/iam/policy-document.js +5 -5
- package/lib/aws/iam/policy-statement-props.generated.d.ts +8 -8
- package/lib/aws/iam/policy-statement-props.generated.js +1 -1
- package/lib/aws/iam/policy-statement.d.ts +1 -1
- package/lib/aws/iam/policy-statement.js +8 -8
- package/lib/aws/iam/policy.js +3 -3
- package/lib/aws/iam/principals.js +25 -25
- package/lib/aws/iam/private/imported-role.js +3 -3
- package/lib/aws/iam/private/postprocess-policy-document.d.ts +1 -1
- package/lib/aws/iam/private/postprocess-policy-document.js +1 -1
- package/lib/aws/iam/private/util.d.ts +1 -1
- package/lib/aws/iam/private/util.js +5 -5
- package/lib/aws/iam/role.d.ts +1 -1
- package/lib/aws/iam/role.js +6 -6
- package/lib/aws/iam/saml-provider.d.ts +1 -1
- package/lib/aws/iam/saml-provider.js +6 -6
- package/lib/aws/iam/unknown-principal.js +4 -4
- package/lib/aws/iam/user.js +3 -3
- package/lib/aws/network/network.d.ts +1 -1
- package/lib/aws/network/network.js +1 -1
- package/lib/aws/network/simple-ipv4-vpc.js +12 -12
- package/lib/aws/network/subnet-group.d.ts +1 -1
- package/lib/aws/network/subnet-group.js +5 -5
- package/lib/aws/network/subnet.d.ts +1 -1
- package/lib/aws/network/subnet.js +6 -6
- package/lib/aws/notify/archive.d.ts +1 -1
- package/lib/aws/notify/archive.js +3 -3
- package/lib/aws/notify/connection.d.ts +1 -1
- package/lib/aws/notify/connection.js +5 -5
- package/lib/aws/notify/event-bus.d.ts +1 -1
- package/lib/aws/notify/event-bus.js +10 -10
- package/lib/aws/notify/event-pattern.d.ts +1 -1
- package/lib/aws/notify/event-pattern.js +5 -5
- package/lib/aws/notify/input.d.ts +1 -1
- package/lib/aws/notify/input.js +12 -12
- package/lib/aws/notify/kinesis-stream.d.ts +1 -1
- package/lib/aws/notify/kinesis-stream.js +7 -7
- package/lib/aws/notify/notification-rule.js +8 -8
- package/lib/aws/notify/policy.js +3 -3
- package/lib/aws/notify/queue-base.js +1 -1
- package/lib/aws/notify/queue-policy.js +3 -3
- package/lib/aws/notify/queue.d.ts +1 -1
- package/lib/aws/notify/queue.js +8 -8
- package/lib/aws/notify/resource-policy.js +3 -3
- package/lib/aws/notify/rule.d.ts +1 -1
- package/lib/aws/notify/rule.js +6 -6
- package/lib/aws/notify/schedule.js +4 -4
- package/lib/aws/notify/sns-grants.generated.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 +6 -6
- package/lib/aws/notify/subscriptions/email.js +1 -1
- package/lib/aws/notify/subscriptions/lambda.js +4 -4
- package/lib/aws/notify/subscriptions/sms.js +1 -1
- package/lib/aws/notify/subscriptions/sqs.js +4 -4
- package/lib/aws/notify/subscriptions/url.js +4 -4
- package/lib/aws/notify/target.d.ts +1 -1
- package/lib/aws/notify/target.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/targets/util.js +3 -3
- package/lib/aws/notify/topic-base.js +4 -4
- package/lib/aws/notify/topic.js +7 -7
- package/lib/aws/provider-config.generated.d.ts +42 -36
- package/lib/aws/provider-config.generated.js +1 -1
- package/lib/aws/region-lookup.js +4 -4
- package/lib/aws/storage/assets/image-asset.js +8 -8
- 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.d.ts +1 -1
- package/lib/aws/storage/bucket-notifications.js +8 -8
- package/lib/aws/storage/bucket-policy.d.ts +1 -1
- package/lib/aws/storage/bucket-policy.js +3 -3
- package/lib/aws/storage/bucket-source.d.ts +1 -1
- package/lib/aws/storage/bucket-source.js +7 -7
- package/lib/aws/storage/bucket.d.ts +1 -1
- package/lib/aws/storage/bucket.js +8 -8
- package/lib/aws/storage/capacity.js +1 -1
- package/lib/aws/storage/cors-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-config.generated.js +1 -1
- package/lib/aws/storage/cors-rule-config.generated.d.ts +5 -5
- package/lib/aws/storage/cors-rule-config.generated.js +1 -1
- package/lib/aws/storage/ecr-repository.js +11 -11
- package/lib/aws/storage/encryption.d.ts +1 -1
- package/lib/aws/storage/encryption.js +5 -5
- package/lib/aws/storage/lifecycle-config.generated.d.ts +9 -9
- package/lib/aws/storage/lifecycle-config.generated.js +1 -1
- package/lib/aws/storage/notification-targets/function.js +2 -2
- package/lib/aws/storage/notification-targets/queue.js +4 -4
- package/lib/aws/storage/origin-access-identity.d.ts +2 -2
- package/lib/aws/storage/origin-access-identity.js +3 -3
- package/lib/aws/storage/parameter-util.js +5 -5
- package/lib/aws/storage/parameter.d.ts +2 -2
- package/lib/aws/storage/parameter.js +16 -16
- package/lib/aws/storage/stream-grants.js +1 -1
- package/lib/aws/storage/table-grants.js +1 -1
- package/lib/aws/storage/table.d.ts +1 -1
- package/lib/aws/storage/table.js +10 -10
- package/lib/aws/storage/website-config.generated.d.ts +8 -8
- package/lib/aws/storage/website-config.generated.js +1 -1
- package/lib/bundling.js +5 -5
- package/lib/construct-base.d.ts +1 -1
- package/lib/construct-base.js +10 -10
- package/lib/duration.js +9 -9
- 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/private/terraform-dependables-aspect.d.ts +1 -1
- package/lib/private/terraform-dependables-aspect.js +6 -6
- package/lib/private/unique-resource-name.js +3 -3
- package/lib/size.js +6 -6
- package/lib/stack-base.d.ts +2 -2
- package/lib/stack-base.js +16 -16
- package/lib/terra-func.d.ts +1 -1
- package/lib/terra-func.js +18 -18
- package/lib/time-zone.js +1 -1
- package/lib/token.js +5 -5
- package/package.json +17 -17
- package/setup.js +2 -2
|
@@ -4,8 +4,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
4
4
|
exports.StringListParameter = exports.StringParameter = exports.ParameterTier = exports.ParameterDataType = exports.ParameterType = exports.ParameterValueType = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
// https://github.com/aws/aws-cdk/blob/v2.175.1/packages/aws-cdk-lib/aws-ssm/lib/parameter.ts
|
|
7
|
-
const provider_aws_1 = require("@
|
|
8
|
-
const
|
|
7
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
8
|
+
const cdktn_1 = require("cdktn");
|
|
9
9
|
const parameter_util_1 = require("./parameter-util");
|
|
10
10
|
const terra_func_1 = require("../../terra-func");
|
|
11
11
|
const aws_construct_1 = require("../aws-construct");
|
|
@@ -195,7 +195,7 @@ class StringParameter extends ParameterBase {
|
|
|
195
195
|
* [Read more about sensitive data in state](https://www.terraform.io/docs/state/sensitive-data.html).
|
|
196
196
|
*/
|
|
197
197
|
static fromStringParameterArn(scope, id, stringParameterArn) {
|
|
198
|
-
if (
|
|
198
|
+
if (cdktn_1.Token.isUnresolved(stringParameterArn)) {
|
|
199
199
|
throw new Error("stringParameterArn cannot be an unresolved token");
|
|
200
200
|
}
|
|
201
201
|
// has to be the same region
|
|
@@ -206,12 +206,12 @@ class StringParameter extends ParameterBase {
|
|
|
206
206
|
if (arnParts.length !== 6) {
|
|
207
207
|
throw new Error("unexpected StringParameterArn format");
|
|
208
208
|
}
|
|
209
|
-
else if (
|
|
209
|
+
else if (cdktn_1.Token.isUnresolved(stackRegion)) {
|
|
210
210
|
// Region is unknown during synthesis, emit a warning for visibility
|
|
211
211
|
// "aws-cdk-lib/aws-ssm:crossAccountReferenceSameRegion",
|
|
212
|
-
|
|
212
|
+
cdktn_1.Annotations.of(scope).addWarning("Cross-account references will only work within the same region");
|
|
213
213
|
}
|
|
214
|
-
else if (!
|
|
214
|
+
else if (!cdktn_1.Token.isUnresolved(stackRegion) &&
|
|
215
215
|
arnParts[3] !== stackRegion) {
|
|
216
216
|
// If the region is known, it must match the region specified in the ARN string
|
|
217
217
|
throw new Error("stringParameterArn must be in the same region as the stack");
|
|
@@ -255,7 +255,7 @@ class StringParameter extends ParameterBase {
|
|
|
255
255
|
if (attrs.version) {
|
|
256
256
|
// To query by parameter version, use "Name": "name:version".
|
|
257
257
|
// https://docs.aws.amazon.com/systems-manager/latest/APIReference/API_GetParameter.html#systemsmanager-GetParameter-request-Name
|
|
258
|
-
name = `${attrs.parameterName}:${
|
|
258
|
+
name = `${attrs.parameterName}:${cdktn_1.Tokenization.stringifyNumber(attrs.version)}`;
|
|
259
259
|
}
|
|
260
260
|
else {
|
|
261
261
|
name = attrs.parameterName;
|
|
@@ -285,7 +285,7 @@ class StringParameter extends ParameterBase {
|
|
|
285
285
|
}
|
|
286
286
|
let name;
|
|
287
287
|
if (attrs.version) {
|
|
288
|
-
name = `${attrs.parameterName}:${
|
|
288
|
+
name = `${attrs.parameterName}:${cdktn_1.Tokenization.stringifyNumber(attrs.version)}`;
|
|
289
289
|
}
|
|
290
290
|
else {
|
|
291
291
|
name = attrs.parameterName;
|
|
@@ -452,7 +452,7 @@ class StringParameter extends ParameterBase {
|
|
|
452
452
|
}
|
|
453
453
|
exports.StringParameter = StringParameter;
|
|
454
454
|
_a = JSII_RTTI_SYMBOL_1;
|
|
455
|
-
StringParameter[_a] = { fqn: "terraconstructs.aws.storage.StringParameter", version: "0.2.
|
|
455
|
+
StringParameter[_a] = { fqn: "terraconstructs.aws.storage.StringParameter", version: "0.2.5" };
|
|
456
456
|
/**
|
|
457
457
|
* Creates a new StringList SSM Parameter.
|
|
458
458
|
* @resource AWS::SSM::Parameter
|
|
@@ -478,7 +478,7 @@ class StringListParameter extends ParameterBase {
|
|
|
478
478
|
}
|
|
479
479
|
let name;
|
|
480
480
|
if (attrs.version) {
|
|
481
|
-
name = `${attrs.parameterName}:${
|
|
481
|
+
name = `${attrs.parameterName}:${cdktn_1.Tokenization.stringifyNumber(attrs.version)}`;
|
|
482
482
|
}
|
|
483
483
|
else {
|
|
484
484
|
name = attrs.parameterName;
|
|
@@ -534,10 +534,10 @@ class StringListParameter extends ParameterBase {
|
|
|
534
534
|
if (!stringListValue) {
|
|
535
535
|
throw new Error("Either 'stringListValue' or 'sensitiveStringListValue' must be specified");
|
|
536
536
|
}
|
|
537
|
-
if (stringListValue.find((str) => !
|
|
537
|
+
if (stringListValue.find((str) => !cdktn_1.Token.isUnresolved(str) && str.indexOf(",") !== -1)) {
|
|
538
538
|
throw new Error("Values of a StringList SSM Parameter cannot contain the ',' character. Use a string parameter instead.");
|
|
539
539
|
}
|
|
540
|
-
if (props.allowedPattern && !
|
|
540
|
+
if (props.allowedPattern && !cdktn_1.Token.isUnresolved(stringListValue)) {
|
|
541
541
|
stringListValue.forEach((str) => _assertValidValue(str, props.allowedPattern));
|
|
542
542
|
}
|
|
543
543
|
validateParameterName(parameterName);
|
|
@@ -570,7 +570,7 @@ class StringListParameter extends ParameterBase {
|
|
|
570
570
|
}
|
|
571
571
|
exports.StringListParameter = StringListParameter;
|
|
572
572
|
_b = JSII_RTTI_SYMBOL_1;
|
|
573
|
-
StringListParameter[_b] = { fqn: "terraconstructs.aws.storage.StringListParameter", version: "0.2.
|
|
573
|
+
StringListParameter[_b] = { fqn: "terraconstructs.aws.storage.StringListParameter", version: "0.2.5" };
|
|
574
574
|
/**
|
|
575
575
|
* Validates whether a supplied value conforms to the allowedPattern, granted neither is an unresolved token.
|
|
576
576
|
*
|
|
@@ -581,7 +581,7 @@ StringListParameter[_b] = { fqn: "terraconstructs.aws.storage.StringListParamete
|
|
|
581
581
|
* ``cdk.unresolved``).
|
|
582
582
|
*/
|
|
583
583
|
function _assertValidValue(value, allowedPattern) {
|
|
584
|
-
if (
|
|
584
|
+
if (cdktn_1.Token.isUnresolved(value) || cdktn_1.Token.isUnresolved(allowedPattern)) {
|
|
585
585
|
// Unable to perform validations against unresolved tokens
|
|
586
586
|
return;
|
|
587
587
|
}
|
|
@@ -593,7 +593,7 @@ function makeIdentityForImportedValue(parameterName) {
|
|
|
593
593
|
return `SsmParameterValue:${parameterName}:C96584B6-F00A-464E-AD19-53AFF4B05118`;
|
|
594
594
|
}
|
|
595
595
|
function validateParameterName(parameterName) {
|
|
596
|
-
if (
|
|
596
|
+
if (cdktn_1.Token.isUnresolved(parameterName)) {
|
|
597
597
|
return;
|
|
598
598
|
}
|
|
599
599
|
if (parameterName.length > 2048) {
|
|
@@ -603,4 +603,4 @@ function validateParameterName(parameterName) {
|
|
|
603
603
|
throw new Error(`name must only contain letters, numbers, and the following 4 symbols .-_/; got ${parameterName}`);
|
|
604
604
|
}
|
|
605
605
|
}
|
|
606
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9zdG9yYWdlL3BhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZGQUE2RjtBQUU3RixzREFBd0U7QUFDeEUsaUNBVWU7QUFFZixxREFBdUQ7QUFDdkQsaURBQXNDO0FBQ3RDLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFFeEMsOEJBQThCO0FBdU05Qjs7R0FFRztBQUNILE1BQWUsYUFBYyxTQUFRLGdDQUFnQjtJQUluRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPO1lBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbEMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQVNNLFNBQVMsQ0FBQyxPQUF1QjtRQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTyxFQUFFO2dCQUNQLHdCQUF3QjtnQkFDeEIsbUJBQW1CO2dCQUNuQixrQkFBa0I7Z0JBQ2xCLHlCQUF5QjthQUMxQjtZQUNELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUF1QjtRQUN2QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxD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QUFHLElBQUksRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN4QyxNQUFNLElBQUksS0FBSyxDQUNiLGtGQUFrRixhQUFhLEVBQUUsQ0FDbEcsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXNzbS9saWIvcGFyYW1ldGVyLnRzXG5cbmltcG9ydCB7IHNzbVBhcmFtZXRlciwgZGF0YUF3c1NzbVBhcmFtZXRlciB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvLyBDZm5EeW5hbWljUmVmZXJlbmNlLFxuICAvLyBDZm5EeW5hbWljUmVmZXJlbmNlU2VydmljZSxcbiAgLy8gVE9ETzogVXNlIEdyaWQgYXMgY29udGV4dFByb3ZpZGVyXG4gIC8vIENvbnRleHRQcm92aWRlcixcbiAgQW5ub3RhdGlvbnMsXG4gIC8vIEZuLFxuICBUb2tlbixcbiAgVG9rZW5pemF0aW9uLFxuICBJUmVzb2x2YWJsZSxcbn0gZnJvbSBcImNka3RmXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgYXJuRm9yUGFyYW1ldGVyTmFtZSB9IGZyb20gXCIuL3BhcmFtZXRlci11dGlsXCI7XG5pbXBvcnQgeyBGbiB9IGZyb20gXCIuLi8uLi90ZXJyYS1mdW5jXCI7XG5pbXBvcnQge1xuICBJQXdzQ29uc3RydWN0LFxuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0ICogYXMgZW5jcnlwdGlvbiBmcm9tIFwiLi4vZW5jcnlwdGlvblwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCIuLi9pYW1cIjtcblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlck91dHB1dHMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgU1NNIFBhcmFtZXRlciByZXNvdXJjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBTU00gUGFyYW1ldGVyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBTU00gUGFyYW1ldGVyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJUeXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gU1NNIFBhcmFtZXRlciByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcmFtZXRlciBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogU3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJPdXRwdXRzOiBQYXJhbWV0ZXJPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBTU00gUGFyYW1ldGVyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFNTTSBQYXJhbWV0ZXIgcmVzb3VyY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIFNTTSBQYXJhbWV0ZXIgcmVzb3VyY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlclR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnRzIHJlYWQgKERlc2NyaWJlUGFyYW1ldGVyLCBHZXRQYXJhbWV0ZXJzLCBHZXRQYXJhbWV0ZXIsIEdldFBhcmFtZXRlckhpc3RvcnkpIHBlcm1pc3Npb25zIG9uIHRoZSBTU00gUGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSB0aGUgcm9sZSB0byBiZSBncmFudGVkIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIHBhcmFtZXRlci5cbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHdyaXRlIChQdXRQYXJhbWV0ZXIpIHBlcm1pc3Npb25zIG9uIHRoZSBTU00gUGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSB0aGUgcm9sZSB0byBiZSBncmFudGVkIHdyaXRlIGFjY2VzcyB0byB0aGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBBIFN0cmluZyBTU00gUGFyYW1ldGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdHJpbmdQYXJhbWV0ZXIgZXh0ZW5kcyBJUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgdmFsdWUuIFZhbHVlIG11c3Qgbm90IG5lc3QgYW5vdGhlciBwYXJhbWV0ZXIuIERvIG5vdCB1c2Uge3t9fSBpbiB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgVmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHN0cmluZ1ZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBTdHJpbmdMaXN0IFNTTSBQYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmluZ0xpc3RQYXJhbWV0ZXIgZXh0ZW5kcyBJUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgdmFsdWUuIFZhbHVlIG11c3Qgbm90IG5lc3QgYW5vdGhlciBwYXJhbWV0ZXIuIERvIG5vdCB1c2Uge3t9fSBpbiB0aGUgdmFsdWUuIFZhbHVlcyBpbiB0aGUgYXJyYXlcbiAgICogY2Fubm90IGNvbnRhaW4gY29tbWFzIChgYCxgYCkuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgVmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHN0cmluZ0xpc3RWYWx1ZTogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBuZWVkZWQgdG8gY3JlYXRlIGEgbmV3IFNTTSBQYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyT3B0aW9ucyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBhcmFtZXRlciB2YWx1ZS4gRm9yIGV4YW1wbGUsIGZvciBTdHJpbmcgdHlwZXMgd2l0aCB2YWx1ZXMgcmVzdHJpY3RlZCB0b1xuICAgKiBudW1iZXJzLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZzogYGBeXFxkKyRgYFxuICAgKlxuICAgKiBAZGVmYXVsdCBubyB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFBhdHRlcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdGhhdCB5b3Ugd2FudCB0byBhZGQgdG8gdGhlIHN5c3RlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyYW1ldGVyIG5hbWUgaXMgYSBzaW1wbGUgbmFtZS4gQSBwYXJhbWV0ZXIgbmFtZVxuICAgKiB3aXRob3V0IGFueSBcIi9cIiBpcyBjb25zaWRlcmVkIGEgc2ltcGxlIG5hbWUuIElmIHRoZSBwYXJhbWV0ZXIgbmFtZSBpbmNsdWRlc1xuICAgKiBcIi9cIiwgc2V0dGluZyBzaW1wbGVOYW1lIHRvIHRydWUgbWlnaHQgY2F1c2UgdW5pbnRlbmRlZCBpc3N1ZXMgc3VjaFxuICAgKiBhcyBkdXBsaWNhdGUgXCIvXCIgaW4gdGhlIHJlc3VsdGluZyBBUk4uXG4gICAqXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgb25seSBpZiBgcGFyYW1ldGVyTmFtZWAgaXMgYSB0b2tlbiwgd2hpY2ggbWVhbnMgd2VcbiAgICogYXJlIHVuYWJsZSB0byBkZXRlY3QgaWYgdGhlIG5hbWUgaXMgc2ltcGxlIG9yIFwicGF0aC1saWtlXCIgZm9yIHRoZSBwdXJwb3NlXG4gICAqIG9mIHJlbmRlcmluZyBTU00gcGFyYW1ldGVyIEFSTnMuXG4gICAqXG4gICAqIElmIGBwYXJhbWV0ZXJOYW1lYCBpcyBub3Qgc3BlY2lmaWVkLCBgc2ltcGxlTmFtZWAgbXVzdCBiZSBgdHJ1ZWAgKG9yXG4gICAqIHVuZGVmaW5lZCkgc2luY2UgdGhlIG5hbWUgZ2VuZXJhdGVkIGJ5IEFXUyBDbG91ZEZvcm1hdGlvbiBpcyBhbHdheXMgYVxuICAgKiBzaW1wbGUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWRldGVjdCBiYXNlZCBvbiBgcGFyYW1ldGVyTmFtZWBcbiAgICovXG4gIHJlYWRvbmx5IHNpbXBsZU5hbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGllciBvZiB0aGUgc3RyaW5nIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdGllcj86IFBhcmFtZXRlclRpZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBuZWVkZWQgdG8gY3JlYXRlIGEgU3RyaW5nIFNTTSBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nUGFyYW1ldGVyUHJvcHMgZXh0ZW5kcyBQYXJhbWV0ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLiBJdCBtYXkgbm90IHJlZmVyZW5jZSBhbm90aGVyIHBhcmFtZXRlciBhbmQgYGB7e319YGAgY2Fubm90IGJlIHVzZWQgaW4gdGhlIHZhbHVlLlxuICAgKlxuICAgKiBUaGlzIGlzIG5ldmVyIG1hcmtlZCBhcyBzZW5zaXRpdmUuXG4gICAqXG4gICAqIGNvbmZsaWN0cyB3aXRoIGBzZW5zaXRpdmVTdHJpbmdWYWx1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHN0cmluZ1ZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBhbHdheXMgbWFya2VkIGFzIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogSXQgbWF5IG5vdCByZWZlcmVuY2UgYW5vdGhlciBwYXJhbWV0ZXIgYW5kIGBge3t9fWBgIGNhbm5vdCBiZSB1c2VkIGluIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogY29uZmxpY3RzIHdpdGggYHN0cmluZ1ZhbHVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2Vuc2l0aXZlU3RyaW5nVmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBzdHJpbmcgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IFBhcmFtZXRlclR5cGUuU1RSSU5HXG4gICAqIEBkZXByZWNhdGVkIC0gdHlwZSB3aWxsIGFsd2F5cyBiZSAnU3RyaW5nJ1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IFBhcmFtZXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgc3VjaCBhcyBgdGV4dGAgb3IgYGF3czplYzI6aW1hZ2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBQYXJhbWV0ZXJEYXRhVHlwZS5URVhUXG4gICAqL1xuICByZWFkb25seSBkYXRhVHlwZT86IFBhcmFtZXRlckRhdGFUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgbmVlZGVkIHRvIGNyZWF0ZSBhIFN0cmluZ0xpc3QgU1NNIFBhcmFtZXRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0xpc3RQYXJhbWV0ZXJQcm9wcyBleHRlbmRzIFBhcmFtZXRlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVyLiBJdCBtYXkgbm90IHJlZmVyZW5jZSBhbm90aGVyIHBhcmFtZXRlciBhbmQgYGB7e319YGAgY2Fubm90IGJlIHVzZWQgaW4gdGhlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaW5nTGlzdFZhbHVlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgb2YgdGhlIHBhcmFtZXRlciBhbHdheXMgbWFya2VkIGFzIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogSXQgbWF5IG5vdCByZWZlcmVuY2UgYW5vdGhlciBwYXJhbWV0ZXIgYW5kIGBge3t9fWBgIGNhbm5vdCBiZSB1c2VkIGluIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogY29uZmxpY3RzIHdpdGggYHN0cmluZ0xpc3RWYWx1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEJhc2ljIGZlYXR1cmVzIHNoYXJlZCBhY3Jvc3MgYWxsIHR5cGVzIG9mIFNTTSBQYXJhbWV0ZXJzLlxuICovXG5hYnN0cmFjdCBjbGFzcyBQYXJhbWV0ZXJCYXNlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElQYXJhbWV0ZXIge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcGFyYW1ldGVyQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwYXJhbWV0ZXJUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVyT3V0cHV0cygpOiBQYXJhbWV0ZXJPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1ldGVyQXJuOiB0aGlzLnBhcmFtZXRlckFybixcbiAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucGFyYW1ldGVyTmFtZSxcbiAgICAgIHBhcmFtZXRlclR5cGU6IHRoaXMucGFyYW1ldGVyVHlwZSxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJPdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0aW9uIGtleSB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGlzIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG1hc3RlciBrZXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogZW5jcnlwdGlvbi5JS2V5O1xuXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGlmICh0aGlzLmVuY3J5cHRpb25LZXkpIHtcbiAgICAgIHRoaXMuZW5jcnlwdGlvbktleS5ncmFudERlY3J5cHQoZ3JhbnRlZSk7XG4gICAgfVxuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgXCJzc206RGVzY3JpYmVQYXJhbWV0ZXJzXCIsXG4gICAgICAgIFwic3NtOkdldFBhcmFtZXRlcnNcIixcbiAgICAgICAgXCJzc206R2V0UGFyYW1ldGVyXCIsXG4gICAgICAgIFwic3NtOkdldFBhcmFtZXRlckhpc3RvcnlcIixcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLnBhcmFtZXRlckFybl0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgaWYgKHRoaXMuZW5jcnlwdGlvbktleSkge1xuICAgICAgdGhpcy5lbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdChncmFudGVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogW1wic3NtOlB1dFBhcmFtZXRlclwiXSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMucGFyYW1ldGVyQXJuXSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIENGTiBTU00gUGFyYW1ldGVyXG4gKlxuICogVXNpbmcgc3BlY2lmaWMgdHlwZXMgY2FuIGJlIGhlbHBmdWwgaW4gY2F0Y2hpbmcgaW52YWxpZCB2YWx1ZXNcbiAqIGF0IHRoZSBzdGFydCBvZiBjcmVhdGluZyBvciB1cGRhdGluZyBhIHN0YWNrLiBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0ZXNcbiAqIHRoZSB2YWx1ZXMgYWdhaW5zdCBleGlzdGluZyB2YWx1ZXMgaW4gdGhlIGFjY291bnQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9wYXJhbWV0ZXJzLXNlY3Rpb24tc3RydWN0dXJlLmh0bWwjYXdzLXNzbS1wYXJhbWV0ZXItdHlwZXNcbiAqL1xuZXhwb3J0IGVudW0gUGFyYW1ldGVyVmFsdWVUeXBlIHtcbiAgLyoqXG4gICAqIFN0cmluZ1xuICAgKi9cbiAgU1RSSU5HID0gXCJTdHJpbmdcIixcblxuICAvKipcbiAgICogQW4gQXZhaWxhYmlsaXR5IFpvbmUsIHN1Y2ggYXMgdXMtd2VzdC0yYS5cbiAgICovXG4gIEFXU19FQzJfQVZBSUxBQklMSVRZWk9ORV9OQU1FID0gXCJBV1M6OkVDMjo6QXZhaWxhYmlsaXR5Wm9uZTo6TmFtZVwiLFxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gRUMyIGltYWdlIElELCBzdWNoIGFzIGFtaS0wZmY4YTkxNTA3Zjc3Zjg2Ny5cbiAgICovXG4gIEFXU19FQzJfSU1BR0VfSUQgPSBcIkFXUzo6RUMyOjpJbWFnZTo6SWRcIixcblxuICAvKipcbiAgICogQW4gQW1hem9uIEVDMiBpbnN0YW5jZSBJRCwgc3VjaCBhcyBpLTFlNzMxYTMyLlxuICAgKi9cbiAgQVdTX0VDMl9JTlNUQU5DRV9JRCA9IFwiQVdTOjpFQzI6Okluc3RhbmNlOjpJZFwiLFxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gRUMyIGtleSBwYWlyIG5hbWUuXG4gICAqL1xuICBBV1NfRUMyX0tFWVBBSVJfS0VZTkFNRSA9IFwiQVdTOjpFQzI6OktleVBhaXI6OktleU5hbWVcIixcblxuICAvKipcbiAgICogQW4gRUMyLUNsYXNzaWMgb3IgZGVmYXVsdCBWUEMgc2VjdXJpdHkgZ3JvdXAgbmFtZSwgc3VjaCBhcyBteS1zZy1hYmMuXG4gICAqL1xuICBBV1NfRUMyX1NFQ1VSSVRZR1JPVVBfR1JPVVBOQU1FID0gXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cDo6R3JvdXBOYW1lXCIsXG5cbiAgLyoqXG4gICAqIEEgc2VjdXJpdHkgZ3JvdXAgSUQsIHN1Y2ggYXMgc2ctYTEyM2ZkODUuXG4gICAqL1xuICBBV1NfRUMyX1NFQ1VSSVRZR1JPVVBfSUQgPSBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwOjpJZFwiLFxuXG4gIC8qKlxuICAgKiBBIHN1Ym5ldCBJRCwgc3VjaCBhcyBzdWJuZXQtMTIzYTM1MWUuXG4gICAqL1xuICBBV1NfRUMyX1NVQk5FVF9JRCA9IFwiQVdTOjpFQzI6OlN1Ym5ldDo6SWRcIixcblxuICAvKipcbiAgICogQW4gQW1hem9uIEVCUyB2b2x1bWUgSUQsIHN1Y2ggYXMgdm9sLTNjZGQzZjU2LlxuICAgKi9cbiAgQVdTX0VDMl9WT0xVTUVfSUQgPSBcIkFXUzo6RUMyOjpWb2x1bWU6OklkXCIsXG5cbiAgLyoqXG4gICAqIEEgVlBDIElELCBzdWNoIGFzIHZwYy1hMTIzYmFhMy5cbiAgICovXG4gIEFXU19FQzJfVlBDX0lEID0gXCJBV1M6OkVDMjo6VlBDOjpJZFwiLFxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQsIHN1Y2ggYXMgWjIzWVhWNE9WUEwwNEEuXG4gICAqL1xuICBBV1NfUk9VVEU1M19IT1NURURaT05FX0lEID0gXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmU6OklkXCIsXG59XG5cbi8vIERlcHJlY2F0ZWQgLSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy82MDM5XG5cbi8qKlxuICogU1NNIHBhcmFtZXRlciB0eXBlXG4gKiBAZGVwcmVjYXRlZCB0aGVzZSB0eXBlcyBhcmUgbm8gbG9uZ2VyIHVzZWRcbiAqL1xuZXhwb3J0IGVudW0gUGFyYW1ldGVyVHlwZSB7XG4gIC8qKlxuICAgKiBTdHJpbmdcbiAgICovXG4gIFNUUklORyA9IFwiU3RyaW5nXCIsXG4gIC8qKlxuICAgKiBTZWN1cmUgU3RyaW5nXG4gICAqXG4gICAqIFBhcmFtZXRlciBTdG9yZSB1c2VzIGFuIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGN1c3RvbWVyIG1hc3RlciBrZXkgKENNSykgdG8gZW5jcnlwdCB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuICAgKiBQYXJhbWV0ZXJzIG9mIHR5cGUgU2VjdXJlU3RyaW5nIGNhbm5vdCBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBDREsgYXBwbGljYXRpb24gZHVlIHRvIENGTiBsaW1pdGF0aW9ucy5cbiAgICpcbiAgICogTk9URTogVGVycmFmb3JtIGRvZXMgbm90IHByZXZlbnQgY3JlYXRpbmcgU2VjdXJlU3RyaW5nIHBhcmFtZXRlcnMsIGJ1dCBpdCBpcyBub3QgcmVjb21tZW5kZWRcbiAgICogYmVjYXVzZSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gcGxhaW4gdGV4dCBpbiB0aGUgc3RhdGUgZmlsZS5cbiAgICovXG4gIFNFQ1VSRV9TVFJJTkcgPSBcIlNlY3VyZVN0cmluZ1wiLFxuICAvKipcbiAgICogU3RyaW5nIExpc3RcbiAgICovXG4gIFNUUklOR19MSVNUID0gXCJTdHJpbmdMaXN0XCIsXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gRUMyIGltYWdlIElELCBzdWNoIGFzIGFtaS0wZmY4YTkxNTA3Zjc3Zjg2N1xuICAgKi9cbiAgQVdTX0VDMl9JTUFHRV9JRCA9IFwiQVdTOjpFQzI6OkltYWdlOjpJZFwiLFxufVxuXG4vKipcbiAqIFNTTSBwYXJhbWV0ZXIgZGF0YSB0eXBlXG4gKi9cbmV4cG9ydCBlbnVtIFBhcmFtZXRlckRhdGFUeXBlIHtcbiAgLyoqXG4gICAqIFRleHRcbiAgICovXG4gIFRFWFQgPSBcInRleHRcIixcbiAgLyoqXG4gICAqIEF3cyBFYzIgSW1hZ2VcbiAgICovXG4gIEFXU19FQzJfSU1BR0UgPSBcImF3czplYzI6aW1hZ2VcIixcbn1cblxuLyoqXG4gKiBTU00gcGFyYW1ldGVyIHRpZXJcbiAqL1xuZXhwb3J0IGVudW0gUGFyYW1ldGVyVGllciB7XG4gIC8qKlxuICAgKiBTdHJpbmdcbiAgICovXG4gIEFEVkFOQ0VEID0gXCJBZHZhbmNlZFwiLFxuICAvKipcbiAgICogU3RyaW5nXG4gICAqL1xuICBJTlRFTExJR0VOVF9USUVSSU5HID0gXCJJbnRlbGxpZ2VudC1UaWVyaW5nXCIsXG4gIC8qKlxuICAgKiBTdHJpbmdcbiAgICovXG4gIFNUQU5EQVJEID0gXCJTdGFuZGFyZFwiLFxufVxuXG4vKipcbiAqIENvbW1vbiBhdHRyaWJ1dGVzIGZvciBzdHJpbmcgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tb25TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgc3RvcmUgdmFsdWUuXG4gICAqXG4gICAqIFRoaXMgdmFsdWUgY2FuIGJlIGEgdG9rZW4gb3IgYSBjb25jcmV0ZSBzdHJpbmcuIElmIGl0IGlzIGEgY29uY3JldGUgc3RyaW5nXG4gICAqIGFuZCBpbmNsdWRlcyBcIi9cIiBpdCBtdXN0IGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhIFwiL1wiIChmdWxseS1xdWFsaWZpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyYW1ldGVyIG5hbWUgaXMgYSBzaW1wbGUgbmFtZS4gQSBwYXJhbWV0ZXIgbmFtZVxuICAgKiB3aXRob3V0IGFueSBcIi9cIiBpcyBjb25zaWRlcmVkIGEgc2ltcGxlIG5hbWUuIElmIHRoZSBwYXJhbWV0ZXIgbmFtZSBpbmNsdWRlc1xuICAgKiBcIi9cIiwgc2V0dGluZyBzaW1wbGVOYW1lIHRvIHRydWUgbWlnaHQgY2F1c2UgdW5pbnRlbmRlZCBpc3N1ZXMgc3VjaFxuICAgKiBhcyBkdXBsaWNhdGUgXCIvXCIgaW4gdGhlIHJlc3VsdGluZyBBUk4uXG4gICAqXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgb25seSBpZiBgcGFyYW1ldGVyTmFtZWAgaXMgYSB0b2tlbiwgd2hpY2ggbWVhbnMgd2VcbiAgICogYXJlIHVuYWJsZSB0byBkZXRlY3QgaWYgdGhlIG5hbWUgaXMgc2ltcGxlIG9yIFwicGF0aC1saWtlXCIgZm9yIHRoZSBwdXJwb3NlXG4gICAqIG9mIHJlbmRlcmluZyBTU00gcGFyYW1ldGVyIEFSTnMuXG4gICAqXG4gICAqIElmIGBwYXJhbWV0ZXJOYW1lYCBpcyBub3Qgc3BlY2lmaWVkLCBgc2ltcGxlTmFtZWAgbXVzdCBiZSBgdHJ1ZWAgKG9yXG4gICAqIHVuZGVmaW5lZCkgc2luY2UgdGhlIG5hbWUgZ2VuZXJhdGVkIGJ5IEFXUyBDbG91ZEZvcm1hdGlvbiBpcyBhbHdheXMgYVxuICAgKiBzaW1wbGUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWRldGVjdCBiYXNlZCBvbiBgcGFyYW1ldGVyTmFtZWBcbiAgICovXG4gIHJlYWRvbmx5IHNpbXBsZU5hbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNDkuMC9kb2NzL2RhdGEtc291cmNlcy9zc21fcGFyYW1ldGVyI3dpdGhfZGVjcnlwdGlvbiBEYXRhQXdzU3NtUGFyYW1ldGVyI3dpdGhfZGVjcnlwdGlvbn1cbiAgICpcbiAgICogQGRlZmF1bHQ6IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHdpdGhEZWNyeXB0aW9uPzogYm9vbGVhbiB8IElSZXNvbHZhYmxlO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIHBhcmFtZXRlcnMgb2YgdmFyaW91cyB0eXBlcyBvZiBzdHJpbmcuXG4gKlxuICogQHNlZSBQYXJhbWV0ZXJUeXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlc1xuICBleHRlbmRzIENvbW1vblN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB2YWx1ZSB5b3Ugd2lzaCB0byByZXRyaWV2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGxhdGVzdCB2ZXJzaW9uIHdpbGwgYmUgcmV0cmlldmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHN0cmluZyBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgUGFyYW1ldGVyVHlwZS5TVFJJTkdcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgdmFsdWVUeXBlIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBQYXJhbWV0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgc3RyaW5nIHBhcmFtZXRlciB2YWx1ZVxuICAgKlxuICAgKiBVc2luZyBzcGVjaWZpYyB0eXBlcyBjYW4gYmUgaGVscGZ1bCBpbiBjYXRjaGluZyBpbnZhbGlkIHZhbHVlc1xuICAgKiBhdCB0aGUgc3RhcnQgb2YgY3JlYXRpbmcgb3IgdXBkYXRpbmcgYSBzdGFjay4gQ2xvdWRGb3JtYXRpb24gdmFsaWRhdGVzXG4gICAqIHRoZSB2YWx1ZXMgYWdhaW5zdCBleGlzdGluZyB2YWx1ZXMgaW4gdGhlIGFjY291bnQuXG4gICAqXG4gICAqIE5vdGUgLSBpZiB5b3Ugd2FudCB0byBhbGxvdyB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgQVdTIGFjY291bnRzLCB1c2VcbiAgICogUGFyYW1ldGVyVmFsdWVUeXBlLlNUUklOR1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3BhcmFtZXRlcnMtc2VjdGlvbi1zdHJ1Y3R1cmUuaHRtbCNhd3Mtc3NtLXBhcmFtZXRlci10eXBlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBQYXJhbWV0ZXJWYWx1ZVR5cGUuU1RSSU5HXG4gICAqL1xuICByZWFkb25seSB2YWx1ZVR5cGU/OiBQYXJhbWV0ZXJWYWx1ZVR5cGU7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgcGFyYW1ldGVycyBvZiBzdHJpbmcgbGlzdCB0eXBlLlxuICpcbiAqIEBzZWUgUGFyYW1ldGVyVHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzXG4gIGV4dGVuZHMgQ29tbW9uU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIHZhbHVlIHlvdSB3aXNoIHRvIHJldHJpZXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgbGF0ZXN0IHZlcnNpb24gd2lsbCBiZSByZXRyaWV2ZWQuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgc3RyaW5nIGxpc3QgcGFyYW1ldGVyIHZhbHVlLlxuICAgKlxuICAgKiBVc2luZyBzcGVjaWZpYyB0eXBlcyBjYW4gYmUgaGVscGZ1bCBpbiBjYXRjaGluZyBpbnZhbGlkIHZhbHVlc1xuICAgKiBhdCB0aGUgc3RhcnQgb2YgY3JlYXRpbmcgb3IgdXBkYXRpbmcgYSBzdGFjay4gQ2xvdWRGb3JtYXRpb24gdmFsaWRhdGVzXG4gICAqIHRoZSB2YWx1ZXMgYWdhaW5zdCBleGlzdGluZyB2YWx1ZXMgaW4gdGhlIGFjY291bnQuXG4gICAqXG4gICAqIE5vdGUgLSBpZiB5b3Ugd2FudCB0byBhbGxvdyB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgQVdTIGFjY291bnRzLCB1c2VcbiAgICogUGFyYW1ldGVyVmFsdWVUeXBlLlNUUklOR1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3BhcmFtZXRlcnMtc2VjdGlvbi1zdHJ1Y3R1cmUuaHRtbCNhd3Mtc3NtLXBhcmFtZXRlci10eXBlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBQYXJhbWV0ZXJWYWx1ZVR5cGUuU1RSSU5HXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50VHlwZT86IFBhcmFtZXRlclZhbHVlVHlwZTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBzZWN1cmUgc3RyaW5nIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlc1xuICBleHRlbmRzIENvbW1vblN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB2YWx1ZSB5b3Ugd2lzaCB0byByZXRyaWV2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBV1MgQ2xvdWRGb3JtYXRpb24gdXNlcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHBhcmFtZXRlclxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24ga2V5IHRoYXQgaXMgdXNlZCB0byBlbmNyeXB0IHRoaXMgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBtYXN0ZXIga2V5XG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogZW5jcnlwdGlvbi5JS2V5O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU3RyaW5nIFNTTSBQYXJhbWV0ZXIuXG4gKiBAcmVzb3VyY2UgYXdzX3NzbV9wYXJhbWV0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc3NtUGFyYW1ldGVyID0gbmV3IHN0b3JhZ2UuU3RyaW5nUGFyYW1ldGVyKHRoaXMsICdteVNzbVBhcmFtZXRlcicsIHtcbiAqICAgIHBhcmFtZXRlck5hbWU6ICdteVNzbVBhcmFtZXRlcicsXG4gKiAgICBzdHJpbmdWYWx1ZTogJ215U3NtUGFyYW1ldGVyVmFsdWUnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdQYXJhbWV0ZXIgZXh0ZW5kcyBQYXJhbWV0ZXJCYXNlIGltcGxlbWVudHMgSVN0cmluZ1BhcmFtZXRlciB7XG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHN0cmluZyBwYXJhbWV0ZXIgYnkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHN0cmluZ1BhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgKTogSVN0cmluZ1BhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdQYXJhbWV0ZXJOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gZXh0ZXJuYWwgc3RyaW5nIHBhcmFtZXRlciBieSBBUk4uXG4gICAqXG4gICAqIFRoZSB1bmVuY3J5cHRlZCB2YWx1ZSBvZiBhIFNlY3VyZVN0cmluZyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmF3IHN0YXRlIGFzIHBsYWluLXRleHQuXG4gICAqIFtSZWFkIG1vcmUgYWJvdXQgc2Vuc2l0aXZlIGRhdGEgaW4gc3RhdGVdKGh0dHBzOi8vd3d3LnRlcnJhZm9ybS5pby9kb2NzL3N0YXRlL3NlbnNpdGl2ZS1kYXRhLmh0bWwpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nUGFyYW1ldGVyQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdHJpbmdQYXJhbWV0ZXJBcm46IHN0cmluZyxcbiAgKTogSVN0cmluZ1BhcmFtZXRlciB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzdHJpbmdQYXJhbWV0ZXJBcm4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdQYXJhbWV0ZXJBcm4gY2Fubm90IGJlIGFuIHVucmVzb2x2ZWQgdG9rZW5cIik7XG4gICAgfVxuXG4gICAgLy8gaGFzIHRvIGJlIHRoZSBzYW1lIHJlZ2lvblxuICAgIC8vIHNwbGl0IHRoZSBhcm4gc3RyaW5nIHRvIGdldCB0aGUgcmVnaW9uIHN0cmluZ1xuICAgIC8vIGFybiBzYW1wbGU6IGFybjphd3M6c3NtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6cGFyYW1ldGVyL2R1bW15TmFtZVxuICAgIGNvbnN0IGFyblBhcnRzID0gc3RyaW5nUGFyYW1ldGVyQXJuLnNwbGl0KFwiOlwiKTtcbiAgICBjb25zdCBzdGFja1JlZ2lvbiA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKS5yZWdpb247XG4gICAgaWYgKGFyblBhcnRzLmxlbmd0aCAhPT0gNikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCBTdHJpbmdQYXJhbWV0ZXJBcm4gZm9ybWF0XCIpO1xuICAgIH0gZWxzZSBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrUmVnaW9uKSkge1xuICAgICAgLy8gUmVnaW9uIGlzIHVua25vd24gZHVyaW5nIHN5bnRoZXNpcywgZW1pdCBhIHdhcm5pbmcgZm9yIHZpc2liaWxpdHlcbiAgICAgIC8vIFwiYXdzLWNkay1saWIvYXdzLXNzbTpjcm9zc0FjY291bnRSZWZlcmVuY2VTYW1lUmVnaW9uXCIsXG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZyhcbiAgICAgICAgXCJDcm9zcy1hY2NvdW50IHJlZmVyZW5jZXMgd2lsbCBvbmx5IHdvcmsgd2l0aGluIHRoZSBzYW1lIHJlZ2lvblwiLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChzdGFja1JlZ2lvbikgJiZcbiAgICAgIGFyblBhcnRzWzNdICE9PSBzdGFja1JlZ2lvblxuICAgICkge1xuICAgICAgLy8gSWYgdGhlIHJlZ2lvbiBpcyBrbm93biwgaXQgbXVzdCBtYXRjaCB0aGUgcmVnaW9uIHNwZWNpZmllZCBpbiB0aGUgQVJOIHN0cmluZ1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInN0cmluZ1BhcmFtZXRlckFybiBtdXN0IGJlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGUgc3RhY2tcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkc7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID1cbiAgICAgIHN0cmluZ1BhcmFtZXRlckFyblxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5wb3AoKVxuICAgICAgICA/LnJlcGxhY2UoL3BhcmFtZXRlclxcLyQvLCBcIlwiKSA/PyBcIlwiO1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgZGF0YUF3c1NzbVBhcmFtZXRlci5EYXRhQXdzU3NtUGFyYW1ldGVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0uUGFyYW1ldGVyYCxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgLy8gd2l0aERlY3J5cHRpb24gZGVmYXVsdHMgdG8gdHJ1ZVxuICAgICAgfSxcbiAgICApO1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFBhcmFtZXRlckJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlckFybiA9IHN0cmluZ1BhcmFtZXRlckFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyVHlwZTtcbiAgICAgIC8vIFVzZSBjYXV0aW9uOiBUaGlzIHZhbHVlIGlzIG5ldmVyIG1hcmtlZCBhcyBzZW5zaXRpdmUuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RyaW5nVmFsdWUgPSBkYXRhU291cmNlLmluc2VjdXJlVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHN0cmluZyBwYXJhbWV0ZXIgd2l0aCBuYW1lIGFuZCBvcHRpb25hbCB2ZXJzaW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IFN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMsXG4gICk6IElTdHJpbmdQYXJhbWV0ZXIge1xuICAgIGlmICghYXR0cnMucGFyYW1ldGVyTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGFyYW1ldGVyTmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nXCIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhdHRycy50eXBlICYmXG4gICAgICAhW1BhcmFtZXRlclR5cGUuU1RSSU5HLCBQYXJhbWV0ZXJUeXBlLkFXU19FQzJfSU1BR0VfSURdLmluY2x1ZGVzKFxuICAgICAgICBhdHRycy50eXBlLFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMgZG9lcyBub3Qgc3VwcG9ydCAke2F0dHJzLnR5cGV9LiBQbGVhc2UgdXNlIFBhcmFtZXRlclR5cGUuU1RSSU5HIG9yIFBhcmFtZXRlclR5cGUuQVdTX0VDMl9JTUFHRV9JRGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGZvcmNlRHluYW1pY1JlZmVyZW5jZSA9IGF0dHJzLmZvcmNlRHluYW1pY1JlZmVyZW5jZSA/PyBmYWxzZTtcbiAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE0My4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1zc20vbGliL3BhcmFtZXRlci50cyNMNDgzXG4gICAgLy8gY29uc3QgdHlwZSA9IGF0dHJzLnR5cGUgPz8gYXR0cnMudmFsdWVUeXBlID8/IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkc7XG5cbiAgICBsZXQgbmFtZTogc3RyaW5nO1xuICAgIGlmIChhdHRycy52ZXJzaW9uKSB7XG4gICAgICAvLyBUbyBxdWVyeSBieSBwYXJhbWV0ZXIgdmVyc2lvbiwgdXNlIFwiTmFtZVwiOiBcIm5hbWU6dmVyc2lvblwiLlxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRQYXJhbWV0ZXIuaHRtbCNzeXN0ZW1zbWFuYWdlci1HZXRQYXJhbWV0ZXItcmVxdWVzdC1OYW1lXG4gICAgICBuYW1lID0gYCR7YXR0cnMucGFyYW1ldGVyTmFtZX06JHtUb2tlbml6YXRpb24uc3RyaW5naWZ5TnVtYmVyKGF0dHJzLnZlcnNpb24pfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBhdHRycy5wYXJhbWV0ZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IGRhdGFBd3NTc21QYXJhbWV0ZXIuRGF0YUF3c1NzbVBhcmFtZXRlcihcbiAgICAgIHNjb3BlLFxuICAgICAgYCR7aWR9LlBhcmFtZXRlcmAsXG4gICAgICB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHdpdGhEZWNyeXB0aW9uOiBhdHRycy53aXRoRGVjcnlwdGlvbiwgLy8gZGVmYXVsdHMgdG8gdHJ1ZVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUGFyYW1ldGVyQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZSA9IGF0dHJzLnBhcmFtZXRlck5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyQXJuID0gYXJuRm9yUGFyYW1ldGVyTmFtZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYXR0cnMucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgeyBzaW1wbGVOYW1lOiBhdHRycy5zaW1wbGVOYW1lIH0sXG4gICAgICApO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlclR5cGUgPSBQYXJhbWV0ZXJUeXBlLlNUUklORzsgLy8gZGF0YVNvdXJjZS50eXBlIC0gaW5zdGVhZCBvZiB0b2tlbiB1c2UgY29uY3JldGVcbiAgICAgIC8vIFVzZSBjYXV0aW9uOiBUaGlzIHZhbHVlIGlzIG5ldmVyIG1hcmtlZCBhcyBzZW5zaXRpdmUuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RyaW5nVmFsdWUgPSBkYXRhU291cmNlLmluc2VjdXJlVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgc2VjdXJlIHN0cmluZyBwYXJhbWV0ZXIgZnJvbSB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBTZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzLFxuICApOiBJU3RyaW5nUGFyYW1ldGVyIHtcbiAgICBpZiAoIWF0dHJzLnBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBhcmFtZXRlck5hbWUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZ1wiKTtcbiAgICB9XG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBpZiAoYXR0cnMudmVyc2lvbikge1xuICAgICAgbmFtZSA9IGAke2F0dHJzLnBhcmFtZXRlck5hbWV9OiR7VG9rZW5pemF0aW9uLnN0cmluZ2lmeU51bWJlcihhdHRycy52ZXJzaW9uKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgZGF0YUF3c1NzbVBhcmFtZXRlci5EYXRhQXdzU3NtUGFyYW1ldGVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0uUGFyYW1ldGVyYCxcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgd2l0aERlY3J5cHRpb246IGF0dHJzLndpdGhEZWNyeXB0aW9uLCAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBQYXJhbWV0ZXJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJOYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm4gPSBhcm5Gb3JQYXJhbWV0ZXJOYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBhdHRycy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICB7IHNpbXBsZU5hbWU6IGF0dHJzLnNpbXBsZU5hbWUgfSxcbiAgICAgICk7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyVHlwZSA9IFBhcmFtZXRlclR5cGUuU0VDVVJFX1NUUklORzsgLy8gcmVzb3VyY2UudHlwZSAtIGluc3RlYWQgb2YgdG9rZW4gdXNlIGNvbmNyZXRlXG4gICAgICAvLyB2YWx1ZSBpcyBhbHdheXMgbWFya2VkIGFzIHNlbnNpdGl2ZVxuICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmluZ1ZhbHVlID0gcmVzb3VyY2UudmFsdWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleSA9IGF0dHJzLmVuY3J5cHRpb25LZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IFVzZSBHcmlkIGFzIGNvbnRleHRQcm92aWRlclxuICAvLyAvKipcbiAgLy8gICogUmVhZHMgdGhlIHZhbHVlIG9mIGFuIFNTTSBwYXJhbWV0ZXIgZHVyaW5nIHN5bnRoZXNpcyB0aHJvdWdoIGFuXG4gIC8vICAqIGVudmlyb25tZW50YWwgY29udGV4dCBwcm92aWRlci5cbiAgLy8gICpcbiAgLy8gICogUmVxdWlyZXMgdGhhdCB0aGUgc3RhY2sgdGhpcyBzY29wZSBpcyBkZWZpbmVkIGluIHdpbGwgaGF2ZSBleHBsaWNpdFxuICAvLyAgKiBhY2NvdW50L3JlZ2lvbiBpbmZvcm1hdGlvbi4gT3RoZXJ3aXNlLCBpdCB3aWxsIGZhaWwgZHVyaW5nIHN5bnRoZXNpcy5cbiAgLy8gICpcbiAgLy8gICogSWYgZGVmYXVsdFZhbHVlIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGR1bW15VmFsdWVcbiAgLy8gICogYW5kIHRoZSBDb250ZXh0UHJvdmlkZXIgd2lsbCBiZSB0b2xkIE5PVCB0byByYWlzZSBhbiBlcnJvciBvbiBzeW50aGVzaXNcbiAgLy8gICogaWYgdGhlIFNTTSBQYXJhbWV0ZXIgaXMgbm90IGZvdW5kIGluIHRoZSBhY2NvdW50IGF0IHN5bnRoIHRpbWUuXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgc3RhdGljIHZhbHVlRnJvbUxvb2t1cChcbiAgLy8gICBzY29wZTogQ29uc3RydWN0LFxuICAvLyAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgLy8gICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcsXG4gIC8vICk6IHN0cmluZyB7XG4gIC8vICAgY29uc3QgdmFsdWUgPSBDb250ZXh0UHJvdmlkZXIuZ2V0VmFsdWUoc2NvcGUsIHtcbiAgLy8gICAgIHByb3ZpZGVyOiBjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuU1NNX1BBUkFNRVRFUl9QUk9WSURFUixcbiAgLy8gICAgIHByb3BzOiB7IHBhcmFtZXRlck5hbWUgfSxcbiAgLy8gICAgIGR1bW15VmFsdWU6IGRlZmF1bHRWYWx1ZSB8fCBgZHVtbXktdmFsdWUtZm9yLSR7cGFyYW1ldGVyTmFtZX1gLFxuICAvLyAgICAgaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0OiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgLy8gICB9KS52YWx1ZTtcblxuICAvLyAgIHJldHVybiB2YWx1ZTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KSB0byB0aGUgc3RyaW5nIHZhbHVlIG9mIGFuIFNTTSBzdHJpbmcgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gc2NvcGUgU29tZSBzY29wZSB3aXRoaW4gYSBzdGFja1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHBhcmFtZXRlciB2ZXJzaW9uIChyZWNvbW1lbmRlZCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgd29uJ3QgY2hhbmdlIGR1cmluZyBkZXBsb3ltZW50KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uPzogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JUeXBlZFN0cmluZ1BhcmFtZXRlclYyKFxuICAgICAgc2NvcGUsXG4gICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgUGFyYW1ldGVyVmFsdWVUeXBlLlNUUklORyxcbiAgICAgIHZlcnNpb24sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KSB0byB0aGUgc3RyaW5nIHZhbHVlIG9mIGFuIFNTTSBzdHJpbmcgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gc2NvcGUgU29tZSBzY29wZSB3aXRoaW4gYSBzdGFja1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIFNTTSBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBwYXJhbWV0ZXIgdmVyc2lvbiAocmVjb21tZW5kZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHZhbHVlIHdvbid0IGNoYW5nZSBkdXJpbmcgZGVwbG95bWVudClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsdWVGb3JUeXBlZFN0cmluZ1BhcmFtZXRlclYyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nLFxuICAgIHR5cGUgPSBQYXJhbWV0ZXJWYWx1ZVR5cGUuU1RSSU5HLFxuICAgIHZlcnNpb24/OiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgaWQgPSBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWUpO1xuICAgIGNvbnN0IGV4aXN0cyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKSBhcyBJU3RyaW5nUGFyYW1ldGVyO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIGV4aXN0cy5zdHJpbmdWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhzdGFjaywgaWQsIHtcbiAgICAgIHBhcmFtZXRlck5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdmFsdWVUeXBlOiB0eXBlLFxuICAgIH0pLnN0cmluZ1ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB0b2tlbiB0aGF0IHdpbGwgcmVzb2x2ZSAoZHVyaW5nIGRlcGxveW1lbnQpIHRvIHRoZSBzdHJpbmcgdmFsdWUgb2YgYW4gU1NNIHN0cmluZyBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSBzY29wZSBTb21lIHNjb3BlIHdpdGhpbiBhIHN0YWNrXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBuYW1lIG9mIHRoZSBTU00gcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHBhcmFtZXRlciB2ZXJzaW9uIChyZWNvbW1lbmRlZCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgd29uJ3QgY2hhbmdlIGR1cmluZyBkZXBsb3ltZW50KVxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB2YWx1ZUZvclR5cGVkU3RyaW5nUGFyYW1ldGVyVjIgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZUZvclR5cGVkU3RyaW5nUGFyYW1ldGVyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nLFxuICAgIHR5cGUgPSBQYXJhbWV0ZXJUeXBlLlNUUklORyxcbiAgICB2ZXJzaW9uPzogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGlmICh0eXBlID09PSBQYXJhbWV0ZXJUeXBlLlNUUklOR19MSVNUKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwidmFsdWVGb3JUeXBlZFN0cmluZ1BhcmFtZXRlciBkb2VzIG5vdCBzdXBwb3J0IFNUUklOR19MSVNULCBcIiArXG4gICAgICAgICAgXCJ1c2UgdmFsdWVGb3JUeXBlZExpc3RQYXJhbWV0ZXIgaW5zdGVhZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgaWQgPSBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWUpO1xuICAgIGNvbnN0IGV4aXN0cyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKSBhcyBJU3RyaW5nUGFyYW1ldGVyO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIGV4aXN0cy5zdHJpbmdWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhzdGFjaywgaWQsIHtcbiAgICAgIHBhcmFtZXRlck5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdHlwZSxcbiAgICB9KS5zdHJpbmdWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KVxuICAgKiBAcGFyYW0gc2NvcGUgU29tZSBzY29wZSB3aXRoaW4gYSBzdGFja1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgcGFyYW1ldGVyIHZlcnNpb24gKHJlcXVpcmVkIGZvciBzZWN1cmUgc3RyaW5ncylcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZWNyZXRWYWx1ZS5zc21TZWN1cmUoKWAgaW5zdGVhZCwgaXQgd2lsbCBjb3JyZWN0bHkgdHlwZSB0aGUgaW1wb3J0ZWQgdmFsdWUgYXMgYSBgU2VjcmV0VmFsdWVgIGFuZCBhbGxvdyBpbXBvcnRpbmcgd2l0aG91dCB2ZXJzaW9uLiBgU2VjcmV0VmFsdWVgIGxpdmVzIGluIHRoZSBjb3JlIGBhd3MtY2RrLWxpYmAgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZUZvclNlY3VyZVN0cmluZ1BhcmFtZXRlcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgaWQgPSBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWUpO1xuICAgIGNvbnN0IGV4aXN0cyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKSBhcyBJU3RyaW5nUGFyYW1ldGVyO1xuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiBleGlzdHMuc3RyaW5nVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoc3RhY2ssIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICB9KS5zdHJpbmdWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlclR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cmluZ1ZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogc3NtUGFyYW1ldGVyLlNzbVBhcmFtZXRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RyaW5nUGFyYW1ldGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID1cbiAgICAgIHByb3BzLnBhcmFtZXRlck5hbWUgfHxcbiAgICAgIHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgcHJlZml4OiB0aGlzLmdyaWRVVUlELFxuICAgICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc3RyaW5nVmFsdWUgJiYgcHJvcHMuc2Vuc2l0aXZlU3RyaW5nVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBib3RoICdzdHJpbmdWYWx1ZScgYW5kICdzZW5zaXRpdmVTdHJpbmdWYWx1ZSdcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gcHJvcHMuc3RyaW5nVmFsdWUgPz8gcHJvcHMuc2Vuc2l0aXZlU3RyaW5nVmFsdWU7XG4gICAgY29uc3QgaXNTZW5zaXRpdmUgPSAhIXByb3BzLnNlbnNpdGl2ZVN0cmluZ1ZhbHVlO1xuICAgIGlmICghc3RyaW5nVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFaXRoZXIgJ3N0cmluZ1ZhbHVlJyBvciAnc2Vuc2l0aXZlU3RyaW5nVmFsdWUnIG11c3QgYmUgc3BlY2lmaWVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hbGxvd2VkUGF0dGVybikge1xuICAgICAgX2Fzc2VydFZhbGlkVmFsdWUoc3RyaW5nVmFsdWUsIHByb3BzLmFsbG93ZWRQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVBhcmFtZXRlck5hbWUocGFyYW1ldGVyTmFtZSk7XG5cbiAgICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcHJvcHMuZGVzY3JpcHRpb24/Lmxlbmd0aCA+IDEwMjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlc2NyaXB0aW9uIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMuXCIpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50eXBlICYmIHByb3BzLnR5cGUgPT09IFBhcmFtZXRlclR5cGUuQVdTX0VDMl9JTUFHRV9JRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSB0eXBlIG11c3QgZWl0aGVyIGJlIFBhcmFtZXRlclR5cGUuU1RSSU5HIG9yIFBhcmFtZXRlclR5cGUuU1RSSU5HX0xJU1QuIERpZCB5b3UgbWVhbiB0byBzZXQgZGF0YVR5cGU6IFBhcmFtZXRlckRhdGFUeXBlLkFXU19FQzJfSU1BR0UgaW5zdGVhZD9cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBzc21QYXJhbWV0ZXIuU3NtUGFyYW1ldGVyKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgYWxsb3dlZFBhdHRlcm46IHByb3BzLmFsbG93ZWRQYXR0ZXJuLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHRpZXI6IHByb3BzLnRpZXIsXG4gICAgICB0eXBlOiBwcm9wcy50eXBlID8/IFBhcmFtZXRlclR5cGUuU1RSSU5HLFxuICAgICAgZGF0YVR5cGU6IHByb3BzLmRhdGFUeXBlLFxuICAgICAgaW5zZWN1cmVWYWx1ZTogcHJvcHMuc3RyaW5nVmFsdWUsXG4gICAgICB2YWx1ZTogcHJvcHMuc2Vuc2l0aXZlU3RyaW5nVmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlck5hbWUgPSB0aGlzLnJlc291cmNlLm5hbWU7XG4gICAgdGhpcy5wYXJhbWV0ZXJBcm4gPSBhcm5Gb3JQYXJhbWV0ZXJOYW1lKHRoaXMsIHRoaXMucGFyYW1ldGVyTmFtZSwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgc2ltcGxlTmFtZTogcHJvcHMuc2ltcGxlTmFtZSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFyYW1ldGVyVHlwZSA9IHRoaXMucmVzb3VyY2UudHlwZTtcbiAgICB0aGlzLnN0cmluZ1ZhbHVlID0gaXNTZW5zaXRpdmVcbiAgICAgID8gdGhpcy5yZXNvdXJjZS52YWx1ZVxuICAgICAgOiB0aGlzLnJlc291cmNlLmluc2VjdXJlVmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFN0cmluZ0xpc3QgU1NNIFBhcmFtZXRlci5cbiAqIEByZXNvdXJjZSBBV1M6OlNTTTo6UGFyYW1ldGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdMaXN0UGFyYW1ldGVyXG4gIGV4dGVuZHMgUGFyYW1ldGVyQmFzZVxuICBpbXBsZW1lbnRzIElTdHJpbmdMaXN0UGFyYW1ldGVyXG57XG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHBhcmFtZXRlciBvZiB0eXBlIHN0cmluZyBsaXN0LlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gYW5kIHNob3VsZCBub3QgYmUgcGFyc2VkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nTGlzdFBhcmFtZXRlck5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHN0cmluZ0xpc3RQYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICk6IElTdHJpbmdMaXN0UGFyYW1ldGVyIHtcbiAgICAvLyByZWY6IGR5bmFtaWMgcmVmXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTQzLjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXNzbS9saWIvcGFyYW1ldGVyLnRzI0w2NzBcbiAgICByZXR1cm4gU3RyaW5nTGlzdFBhcmFtZXRlci5mcm9tTGlzdFBhcmFtZXRlckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdMaXN0UGFyYW1ldGVyTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHN0cmluZyBsaXN0IHBhcmFtZXRlciB3aXRoIG5hbWUgYW5kIG9wdGlvbmFsIHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21MaXN0UGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IExpc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzLFxuICApOiBJU3RyaW5nTGlzdFBhcmFtZXRlciB7XG4gICAgaWYgKCFhdHRycy5wYXJhbWV0ZXJOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXJOYW1lIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmdcIik7XG4gICAgfVxuXG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBpZiAoYXR0cnMudmVyc2lvbikge1xuICAgICAgbmFtZSA9IGAke2F0dHJzLnBhcmFtZXRlck5hbWV9OiR7VG9rZW5pemF0aW9uLnN0cmluZ2lmeU51bWJlcihhdHRycy52ZXJzaW9uKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGF0dHJzLmVsZW1lbnRUeXBlID8/IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkc7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gYExpc3Q8JHt0eXBlfT5gO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgZGF0YUF3c1NzbVBhcmFtZXRlci5EYXRhQXdzU3NtUGFyYW1ldGVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0uUGFyYW1ldGVyYCxcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgd2l0aERlY3J5cHRpb246IGF0dHJzLndpdGhEZWNyeXB0aW9uLCAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBQYXJhbWV0ZXJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJOYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm4gPSBhcm5Gb3JQYXJhbWV0ZXJOYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBhdHRycy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICB7IHNpbXBsZU5hbWU6IGF0dHJzLnNpbXBsZU5hbWUgfSxcbiAgICAgICk7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyVHlwZSA9IHZhbHVlVHlwZTsgLy8gaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoYXQgdGhpcyBpcyBzaW5jZSBhIENmblBhcmFtZXRlciBjYW4gb25seSBiZSBgU3RyaW5nIHwgU3RyaW5nTGlzdGBcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdHJpbmdMaXN0VmFsdWUgPSBGbi5zcGxpdChcIixcIiwgcmVzb3VyY2UuaW5zZWN1cmVWYWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KSB0byB0aGUgbGlzdCB2YWx1ZSBvZiBhbiBTU00gU3RyaW5nTGlzdCBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSBzY29wZSBTb21lIHNjb3BlIHdpdGhpbiBhIHN0YWNrXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBuYW1lIG9mIHRoZSBTU00gcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiB0aGUgU1NNIGxpc3QgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBwYXJhbWV0ZXIgdmVyc2lvbiAocmVjb21tZW5kZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHZhbHVlIHdvbid0IGNoYW5nZSBkdXJpbmcgZGVwbG95bWVudClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsdWVGb3JUeXBlZExpc3RQYXJhbWV0ZXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICAgdHlwZSA9IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkcsXG4gICAgdmVyc2lvbj86IG51bWJlcixcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0YWNrID0gQXdzU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGlkID0gbWFrZUlkZW50aXR5Rm9ySW1wb3J0ZWRWYWx1ZShwYXJhbWV0ZXJOYW1lKTtcbiAgICBjb25zdCBleGlzdHMgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgSVN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZXhpc3RzLnN0cmluZ0xpc3RWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tTGlzdFBhcmFtZXRlckF0dHJpYnV0ZXMoc3RhY2ssIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgZWxlbWVudFR5cGU6IHR5cGUsXG4gICAgICB2ZXJzaW9uLFxuICAgIH0pLnN0cmluZ0xpc3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlclR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cmluZ0xpc3RWYWx1ZTogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogc3NtUGFyYW1ldGVyLlNzbVBhcmFtZXRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RyaW5nTGlzdFBhcmFtZXRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9XG4gICAgICBwcm9wcy5wYXJhbWV0ZXJOYW1lIHx8XG4gICAgICB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgIHByZWZpeDogdGhpcy5ncmlkVVVJRCxcbiAgICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnN0cmluZ0xpc3RWYWx1ZSAmJiBwcm9wcy5zZW5zaXRpdmVTdHJpbmdMaXN0VmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBib3RoICdzdHJpbmdMaXN0VmFsdWUnIGFuZCAnc2Vuc2l0aXZlU3RyaW5nTGlzdFZhbHVlJ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaW5nTGlzdFZhbHVlID1cbiAgICAgIHByb3BzLnN0cmluZ0xpc3RWYWx1ZSA/PyBwcm9wcy5zZW5zaXRpdmVTdHJpbmdMaXN0VmFsdWU7XG4gICAgY29uc3QgaXNTZW5zaXRpdmUgPSAhIXByb3BzLnNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZTtcbiAgICBpZiAoIXN0cmluZ0xpc3RWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVpdGhlciAnc3RyaW5nTGlzdFZhbHVlJyBvciAnc2Vuc2l0aXZlU3RyaW5nTGlzdFZhbHVlJyBtdXN0IGJlIHNwZWNpZmllZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzdHJpbmdMaXN0VmFsdWUuZmluZChcbiAgICAgICAgKHN0cikgPT4gIVRva2VuLmlzVW5yZXNvbHZlZChzdHIpICYmIHN0ci5pbmRleE9mKFwiLFwiKSAhPT0gLTEsXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVmFsdWVzIG9mIGEgU3RyaW5nTGlzdCBTU00gUGFyYW1ldGVyIGNhbm5vdCBjb250YWluIHRoZSAnLCcgY2hhcmFjdGVyLiBVc2UgYSBzdHJpbmcgcGFyYW1ldGVyIGluc3RlYWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hbGxvd2VkUGF0dGVybiAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHN0cmluZ0xpc3RWYWx1ZSkpIHtcbiAgICAgIHN0cmluZ0xpc3RWYWx1ZS5mb3JFYWNoKChzdHIpID0+XG4gICAgICAgIF9hc3NlcnRWYWxpZFZhbHVlKHN0ciwgcHJvcHMuYWxsb3dlZFBhdHRlcm4hKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXJOYW1lKHBhcmFtZXRlck5hbWUpO1xuXG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHByb3BzLmRlc2NyaXB0aW9uPy5sZW5ndGggPiAxMDI0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZXNjcmlwdGlvbiBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHNzbVBhcmFtZXRlci5Tc21QYXJhbWV0ZXIodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBhbGxvd2VkUGF0dGVybjogcHJvcHMuYWxsb3dlZFBhdHRlcm4sXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdGllcjogcHJvcHMudGllcixcbiAgICAgIHR5cGU6IFBhcmFtZXRlclR5cGUuU1RSSU5HX0xJU1QsXG4gICAgICBpbnNlY3VyZVZhbHVlOiBwcm9wcy5zdHJpbmdMaXN0VmFsdWVcbiAgICAgICAgPyBGbi5qb2luKFwiLFwiLCBwcm9wcy5zdHJpbmdMaXN0VmFsdWUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgdmFsdWU6IHByb3BzLnNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZVxuICAgICAgICA/IEZuLmpvaW4oXCIsXCIsIHByb3BzLnNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJOYW1lID0gdGhpcy5yZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMucGFyYW1ldGVyQXJuID0gYXJuRm9yUGFyYW1ldGVyTmFtZSh0aGlzLCB0aGlzLnBhcmFtZXRlck5hbWUsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHNpbXBsZU5hbWU6IHByb3BzLnNpbXBsZU5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlclR5cGUgPSB0aGlzLnJlc291cmNlLnR5cGU7XG4gICAgdGhpcy5zdHJpbmdMaXN0VmFsdWUgPSBpc1NlbnNpdGl2ZVxuICAgICAgPyBGbi5zcGxpdChcIixcIiwgdGhpcy5yZXNvdXJjZS52YWx1ZSlcbiAgICAgIDogRm4uc3BsaXQoXCIsXCIsIHRoaXMucmVzb3VyY2UuaW5zZWN1cmVWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN1cHBsaWVkIHZhbHVlIGNvbmZvcm1zIHRvIHRoZSBhbGxvd2VkUGF0dGVybiwgZ3JhbnRlZCBuZWl0aGVyIGlzIGFuIHVucmVzb2x2ZWQgdG9rZW4uXG4gKlxuICogQHBhcmFtIHZhbHVlICAgICAgICAgIHRoZSB2YWx1ZSB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcGFyYW0gYWxsb3dlZFBhdHRlcm4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2UgZm9yIHZhbGlkYXRpb24uXG4gKlxuICogQHRocm93cyBpZiB0aGUgYGB2YWx1ZWBgIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIGBgYWxsb3dlZFBhdHRlcm5gYCBhbmQgbmVpdGhlciBpcyBhbiB1bnJlc29sdmVkIHRva2VuIChwZXJcbiAqICAgICAgICAgYGBjZGsudW5yZXNvbHZlZGBgKS5cbiAqL1xuZnVuY3Rpb24gX2Fzc2VydFZhbGlkVmFsdWUodmFsdWU6IHN0cmluZywgYWxsb3dlZFBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQoYWxsb3dlZFBhdHRlcm4pKSB7XG4gICAgLy8gVW5hYmxlIHRvIHBlcmZvcm0gdmFsaWRhdGlvbnMgYWdhaW5zdCB1bnJlc29sdmVkIHRva2Vuc1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIW5ldyBSZWdFeHAoYWxsb3dlZFBhdHRlcm4pLnRlc3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBzdXBwbGllZCB2YWx1ZSAoJHt2YWx1ZX0pIGRvZXMgbm90IG1hdGNoIHRoZSBzcGVjaWZpZWQgYWxsb3dlZFBhdHRlcm4gKCR7YWxsb3dlZFBhdHRlcm59KWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYFNzbVBhcmFtZXRlclZhbHVlOiR7cGFyYW1ldGVyTmFtZX06Qzk2NTg0QjYtRjAwQS00NjRFLUFEMTktNTNBRkY0QjA1MTE4YDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXJOYW1lKHBhcmFtZXRlck5hbWU6IHN0cmluZykge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHBhcmFtZXRlck5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYXJhbWV0ZXJOYW1lLmxlbmd0aCA+IDIwNDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAyMDQ4IGNoYXJhY3RlcnMuXCIpO1xuICB9XG4gIGlmICghcGFyYW1ldGVyTmFtZS5tYXRjaCgvXltcXC9cXHcuLV0rJC8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYG5hbWUgbXVzdCBvbmx5IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycywgYW5kIHRoZSBmb2xsb3dpbmcgNCBzeW1ib2xzIC4tXy87IGdvdCAke3BhcmFtZXRlck5hbWV9YCxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
606
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYW1ldGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9zdG9yYWdlL3BhcmFtZXRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZGQUE2RjtBQUU3RixzREFBd0U7QUFDeEUsaUNBVWU7QUFFZixxREFBdUQ7QUFDdkQsaURBQXNDO0FBQ3RDLG9EQUkwQjtBQUMxQiw0Q0FBd0M7QUFFeEMsOEJBQThCO0FBdU05Qjs7R0FFRztBQUNILE1BQWUsYUFBYyxTQUFRLGdDQUFnQjtJQUluRCxJQUFXLGdCQUFnQjtRQUN6QixPQUFPO1lBQ0wsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYTtZQUNqQyxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7U0FDbEMsQ0FBQztJQUNKLENBQUM7SUFDRCxJQUFXLE9BQU87UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQVNNLFNBQVMsQ0FBQyxPQUF1QjtRQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTyxFQUFFO2dCQUNQLHdCQUF3QjtnQkFDeEIsbUJBQW1CO2dCQUNuQixrQkFBa0I7Z0JBQ2xCLHlCQUF5QjthQUMxQjtZQUNELFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7U0FDbEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUF1QjtRQUN2QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxD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QUFHLElBQUksRUFBRSxDQUFDO1FBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztRQUN4QyxNQUFNLElBQUksS0FBSyxDQUNiLGtGQUFrRixhQUFhLEVBQUUsQ0FDbEcsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTc1LjEvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXNzbS9saWIvcGFyYW1ldGVyLnRzXG5cbmltcG9ydCB7IHNzbVBhcmFtZXRlciwgZGF0YUF3c1NzbVBhcmFtZXRlciB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQge1xuICAvLyBDZm5EeW5hbWljUmVmZXJlbmNlLFxuICAvLyBDZm5EeW5hbWljUmVmZXJlbmNlU2VydmljZSxcbiAgLy8gVE9ETzogVXNlIEdyaWQgYXMgY29udGV4dFByb3ZpZGVyXG4gIC8vIENvbnRleHRQcm92aWRlcixcbiAgQW5ub3RhdGlvbnMsXG4gIC8vIEZuLFxuICBUb2tlbixcbiAgVG9rZW5pemF0aW9uLFxuICBJUmVzb2x2YWJsZSxcbn0gZnJvbSBcImNka3RuXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgYXJuRm9yUGFyYW1ldGVyTmFtZSB9IGZyb20gXCIuL3BhcmFtZXRlci11dGlsXCI7XG5pbXBvcnQgeyBGbiB9IGZyb20gXCIuLi8uLi90ZXJyYS1mdW5jXCI7XG5pbXBvcnQge1xuICBJQXdzQ29uc3RydWN0LFxuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0ICogYXMgZW5jcnlwdGlvbiBmcm9tIFwiLi4vZW5jcnlwdGlvblwiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCIuLi9pYW1cIjtcblxuLyoqXG4gKiBPdXRwdXRzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGZvciBvdXRwdXQgdmlhIHRoZSBHcmlkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlck91dHB1dHMge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgU1NNIFBhcmFtZXRlciByZXNvdXJjZS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBTU00gUGFyYW1ldGVyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBTU00gUGFyYW1ldGVyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJUeXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gU1NNIFBhcmFtZXRlciByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVBhcmFtZXRlciBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge1xuICAvKiogU3Ryb25nbHkgdHlwZWQgb3V0cHV0cyAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJPdXRwdXRzOiBQYXJhbWV0ZXJPdXRwdXRzO1xuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBTU00gUGFyYW1ldGVyIHJlc291cmNlLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIFNTTSBQYXJhbWV0ZXIgcmVzb3VyY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIFNTTSBQYXJhbWV0ZXIgcmVzb3VyY2UuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlclR5cGU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnRzIHJlYWQgKERlc2NyaWJlUGFyYW1ldGVyLCBHZXRQYXJhbWV0ZXJzLCBHZXRQYXJhbWV0ZXIsIEdldFBhcmFtZXRlckhpc3RvcnkpIHBlcm1pc3Npb25zIG9uIHRoZSBTU00gUGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSB0aGUgcm9sZSB0byBiZSBncmFudGVkIHJlYWQtb25seSBhY2Nlc3MgdG8gdGhlIHBhcmFtZXRlci5cbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnRzIHdyaXRlIChQdXRQYXJhbWV0ZXIpIHBlcm1pc3Npb25zIG9uIHRoZSBTU00gUGFyYW1ldGVyLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSB0aGUgcm9sZSB0byBiZSBncmFudGVkIHdyaXRlIGFjY2VzcyB0byB0aGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBBIFN0cmluZyBTU00gUGFyYW1ldGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdHJpbmdQYXJhbWV0ZXIgZXh0ZW5kcyBJUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgdmFsdWUuIFZhbHVlIG11c3Qgbm90IG5lc3QgYW5vdGhlciBwYXJhbWV0ZXIuIERvIG5vdCB1c2Uge3t9fSBpbiB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgVmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHN0cmluZ1ZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBTdHJpbmdMaXN0IFNTTSBQYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmluZ0xpc3RQYXJhbWV0ZXIgZXh0ZW5kcyBJUGFyYW1ldGVyIHtcbiAgLyoqXG4gICAqIFRoZSBwYXJhbWV0ZXIgdmFsdWUuIFZhbHVlIG11c3Qgbm90IG5lc3QgYW5vdGhlciBwYXJhbWV0ZXIuIERvIG5vdCB1c2Uge3t9fSBpbiB0aGUgdmFsdWUuIFZhbHVlcyBpbiB0aGUgYXJyYXlcbiAgICogY2Fubm90IGNvbnRhaW4gY29tbWFzIChgYCxgYCkuXG4gICAqXG4gICAqIEBhdHRyaWJ1dGUgVmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IHN0cmluZ0xpc3RWYWx1ZTogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBuZWVkZWQgdG8gY3JlYXRlIGEgbmV3IFNTTSBQYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyT3B0aW9ucyBleHRlbmRzIEF3c0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIEEgcmVndWxhciBleHByZXNzaW9uIHVzZWQgdG8gdmFsaWRhdGUgdGhlIHBhcmFtZXRlciB2YWx1ZS4gRm9yIGV4YW1wbGUsIGZvciBTdHJpbmcgdHlwZXMgd2l0aCB2YWx1ZXMgcmVzdHJpY3RlZCB0b1xuICAgKiBudW1iZXJzLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGZvbGxvd2luZzogYGBeXFxkKyRgYFxuICAgKlxuICAgKiBAZGVmYXVsdCBubyB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dlZFBhdHRlcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJhbWV0ZXIgdGhhdCB5b3Ugd2FudCB0byBhZGQgdG8gdGhlIHN5c3RlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgbm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBuYW1lIHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXJOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyYW1ldGVyIG5hbWUgaXMgYSBzaW1wbGUgbmFtZS4gQSBwYXJhbWV0ZXIgbmFtZVxuICAgKiB3aXRob3V0IGFueSBcIi9cIiBpcyBjb25zaWRlcmVkIGEgc2ltcGxlIG5hbWUuIElmIHRoZSBwYXJhbWV0ZXIgbmFtZSBpbmNsdWRlc1xuICAgKiBcIi9cIiwgc2V0dGluZyBzaW1wbGVOYW1lIHRvIHRydWUgbWlnaHQgY2F1c2UgdW5pbnRlbmRlZCBpc3N1ZXMgc3VjaFxuICAgKiBhcyBkdXBsaWNhdGUgXCIvXCIgaW4gdGhlIHJlc3VsdGluZyBBUk4uXG4gICAqXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgb25seSBpZiBgcGFyYW1ldGVyTmFtZWAgaXMgYSB0b2tlbiwgd2hpY2ggbWVhbnMgd2VcbiAgICogYXJlIHVuYWJsZSB0byBkZXRlY3QgaWYgdGhlIG5hbWUgaXMgc2ltcGxlIG9yIFwicGF0aC1saWtlXCIgZm9yIHRoZSBwdXJwb3NlXG4gICAqIG9mIHJlbmRlcmluZyBTU00gcGFyYW1ldGVyIEFSTnMuXG4gICAqXG4gICAqIElmIGBwYXJhbWV0ZXJOYW1lYCBpcyBub3Qgc3BlY2lmaWVkLCBgc2ltcGxlTmFtZWAgbXVzdCBiZSBgdHJ1ZWAgKG9yXG4gICAqIHVuZGVmaW5lZCkgc2luY2UgdGhlIG5hbWUgZ2VuZXJhdGVkIGJ5IEFXUyBDbG91ZEZvcm1hdGlvbiBpcyBhbHdheXMgYVxuICAgKiBzaW1wbGUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWRldGVjdCBiYXNlZCBvbiBgcGFyYW1ldGVyTmFtZWBcbiAgICovXG4gIHJlYWRvbmx5IHNpbXBsZU5hbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgdGllciBvZiB0aGUgc3RyaW5nIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgdGllcj86IFBhcmFtZXRlclRpZXI7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBuZWVkZWQgdG8gY3JlYXRlIGEgU3RyaW5nIFNTTSBwYXJhbWV0ZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nUGFyYW1ldGVyUHJvcHMgZXh0ZW5kcyBQYXJhbWV0ZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgcGFyYW1ldGVyLiBJdCBtYXkgbm90IHJlZmVyZW5jZSBhbm90aGVyIHBhcmFtZXRlciBhbmQgYGB7e319YGAgY2Fubm90IGJlIHVzZWQgaW4gdGhlIHZhbHVlLlxuICAgKlxuICAgKiBUaGlzIGlzIG5ldmVyIG1hcmtlZCBhcyBzZW5zaXRpdmUuXG4gICAqXG4gICAqIGNvbmZsaWN0cyB3aXRoIGBzZW5zaXRpdmVTdHJpbmdWYWx1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHN0cmluZ1ZhbHVlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciBhbHdheXMgbWFya2VkIGFzIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogSXQgbWF5IG5vdCByZWZlcmVuY2UgYW5vdGhlciBwYXJhbWV0ZXIgYW5kIGBge3t9fWBgIGNhbm5vdCBiZSB1c2VkIGluIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogY29uZmxpY3RzIHdpdGggYHN0cmluZ1ZhbHVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2Vuc2l0aXZlU3RyaW5nVmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHRoZSBzdHJpbmcgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IFBhcmFtZXRlclR5cGUuU1RSSU5HXG4gICAqIEBkZXByZWNhdGVkIC0gdHlwZSB3aWxsIGFsd2F5cyBiZSAnU3RyaW5nJ1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IFBhcmFtZXRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgc3VjaCBhcyBgdGV4dGAgb3IgYGF3czplYzI6aW1hZ2VgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBQYXJhbWV0ZXJEYXRhVHlwZS5URVhUXG4gICAqL1xuICByZWFkb25seSBkYXRhVHlwZT86IFBhcmFtZXRlckRhdGFUeXBlO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgbmVlZGVkIHRvIGNyZWF0ZSBhIFN0cmluZ0xpc3QgU1NNIFBhcmFtZXRlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmluZ0xpc3RQYXJhbWV0ZXJQcm9wcyBleHRlbmRzIFBhcmFtZXRlck9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVyLiBJdCBtYXkgbm90IHJlZmVyZW5jZSBhbm90aGVyIHBhcmFtZXRlciBhbmQgYGB7e319YGAgY2Fubm90IGJlIHVzZWQgaW4gdGhlIHZhbHVlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaW5nTGlzdFZhbHVlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSB2YWx1ZXMgb2YgdGhlIHBhcmFtZXRlciBhbHdheXMgbWFya2VkIGFzIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogSXQgbWF5IG5vdCByZWZlcmVuY2UgYW5vdGhlciBwYXJhbWV0ZXIgYW5kIGBge3t9fWBgIGNhbm5vdCBiZSB1c2VkIGluIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogY29uZmxpY3RzIHdpdGggYHN0cmluZ0xpc3RWYWx1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEJhc2ljIGZlYXR1cmVzIHNoYXJlZCBhY3Jvc3MgYWxsIHR5cGVzIG9mIFNTTSBQYXJhbWV0ZXJzLlxuICovXG5hYnN0cmFjdCBjbGFzcyBQYXJhbWV0ZXJCYXNlIGV4dGVuZHMgQXdzQ29uc3RydWN0QmFzZSBpbXBsZW1lbnRzIElQYXJhbWV0ZXIge1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgcGFyYW1ldGVyQXJuOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwYXJhbWV0ZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBhYnN0cmFjdCByZWFkb25seSBwYXJhbWV0ZXJUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBnZXQgcGFyYW1ldGVyT3V0cHV0cygpOiBQYXJhbWV0ZXJPdXRwdXRzIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFyYW1ldGVyQXJuOiB0aGlzLnBhcmFtZXRlckFybixcbiAgICAgIHBhcmFtZXRlck5hbWU6IHRoaXMucGFyYW1ldGVyTmFtZSxcbiAgICAgIHBhcmFtZXRlclR5cGU6IHRoaXMucGFyYW1ldGVyVHlwZSxcbiAgICB9O1xuICB9XG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wYXJhbWV0ZXJPdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0aW9uIGtleSB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCB0aGlzIHBhcmFtZXRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG1hc3RlciBrZXlcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogZW5jcnlwdGlvbi5JS2V5O1xuXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGlmICh0aGlzLmVuY3J5cHRpb25LZXkpIHtcbiAgICAgIHRoaXMuZW5jcnlwdGlvbktleS5ncmFudERlY3J5cHQoZ3JhbnRlZSk7XG4gICAgfVxuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgXCJzc206RGVzY3JpYmVQYXJhbWV0ZXJzXCIsXG4gICAgICAgIFwic3NtOkdldFBhcmFtZXRlcnNcIixcbiAgICAgICAgXCJzc206R2V0UGFyYW1ldGVyXCIsXG4gICAgICAgIFwic3NtOkdldFBhcmFtZXRlckhpc3RvcnlcIixcbiAgICAgIF0sXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLnBhcmFtZXRlckFybl0sXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgaWYgKHRoaXMuZW5jcnlwdGlvbktleSkge1xuICAgICAgdGhpcy5lbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdChncmFudGVlKTtcbiAgICB9XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogW1wic3NtOlB1dFBhcmFtZXRlclwiXSxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMucGFyYW1ldGVyQXJuXSxcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIENGTiBTU00gUGFyYW1ldGVyXG4gKlxuICogVXNpbmcgc3BlY2lmaWMgdHlwZXMgY2FuIGJlIGhlbHBmdWwgaW4gY2F0Y2hpbmcgaW52YWxpZCB2YWx1ZXNcbiAqIGF0IHRoZSBzdGFydCBvZiBjcmVhdGluZyBvciB1cGRhdGluZyBhIHN0YWNrLiBDbG91ZEZvcm1hdGlvbiB2YWxpZGF0ZXNcbiAqIHRoZSB2YWx1ZXMgYWdhaW5zdCBleGlzdGluZyB2YWx1ZXMgaW4gdGhlIGFjY291bnQuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9wYXJhbWV0ZXJzLXNlY3Rpb24tc3RydWN0dXJlLmh0bWwjYXdzLXNzbS1wYXJhbWV0ZXItdHlwZXNcbiAqL1xuZXhwb3J0IGVudW0gUGFyYW1ldGVyVmFsdWVUeXBlIHtcbiAgLyoqXG4gICAqIFN0cmluZ1xuICAgKi9cbiAgU1RSSU5HID0gXCJTdHJpbmdcIixcblxuICAvKipcbiAgICogQW4gQXZhaWxhYmlsaXR5IFpvbmUsIHN1Y2ggYXMgdXMtd2VzdC0yYS5cbiAgICovXG4gIEFXU19FQzJfQVZBSUxBQklMSVRZWk9ORV9OQU1FID0gXCJBV1M6OkVDMjo6QXZhaWxhYmlsaXR5Wm9uZTo6TmFtZVwiLFxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gRUMyIGltYWdlIElELCBzdWNoIGFzIGFtaS0wZmY4YTkxNTA3Zjc3Zjg2Ny5cbiAgICovXG4gIEFXU19FQzJfSU1BR0VfSUQgPSBcIkFXUzo6RUMyOjpJbWFnZTo6SWRcIixcblxuICAvKipcbiAgICogQW4gQW1hem9uIEVDMiBpbnN0YW5jZSBJRCwgc3VjaCBhcyBpLTFlNzMxYTMyLlxuICAgKi9cbiAgQVdTX0VDMl9JTlNUQU5DRV9JRCA9IFwiQVdTOjpFQzI6Okluc3RhbmNlOjpJZFwiLFxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gRUMyIGtleSBwYWlyIG5hbWUuXG4gICAqL1xuICBBV1NfRUMyX0tFWVBBSVJfS0VZTkFNRSA9IFwiQVdTOjpFQzI6OktleVBhaXI6OktleU5hbWVcIixcblxuICAvKipcbiAgICogQW4gRUMyLUNsYXNzaWMgb3IgZGVmYXVsdCBWUEMgc2VjdXJpdHkgZ3JvdXAgbmFtZSwgc3VjaCBhcyBteS1zZy1hYmMuXG4gICAqL1xuICBBV1NfRUMyX1NFQ1VSSVRZR1JPVVBfR1JPVVBOQU1FID0gXCJBV1M6OkVDMjo6U2VjdXJpdHlHcm91cDo6R3JvdXBOYW1lXCIsXG5cbiAgLyoqXG4gICAqIEEgc2VjdXJpdHkgZ3JvdXAgSUQsIHN1Y2ggYXMgc2ctYTEyM2ZkODUuXG4gICAqL1xuICBBV1NfRUMyX1NFQ1VSSVRZR1JPVVBfSUQgPSBcIkFXUzo6RUMyOjpTZWN1cml0eUdyb3VwOjpJZFwiLFxuXG4gIC8qKlxuICAgKiBBIHN1Ym5ldCBJRCwgc3VjaCBhcyBzdWJuZXQtMTIzYTM1MWUuXG4gICAqL1xuICBBV1NfRUMyX1NVQk5FVF9JRCA9IFwiQVdTOjpFQzI6OlN1Ym5ldDo6SWRcIixcblxuICAvKipcbiAgICogQW4gQW1hem9uIEVCUyB2b2x1bWUgSUQsIHN1Y2ggYXMgdm9sLTNjZGQzZjU2LlxuICAgKi9cbiAgQVdTX0VDMl9WT0xVTUVfSUQgPSBcIkFXUzo6RUMyOjpWb2x1bWU6OklkXCIsXG5cbiAgLyoqXG4gICAqIEEgVlBDIElELCBzdWNoIGFzIHZwYy1hMTIzYmFhMy5cbiAgICovXG4gIEFXU19FQzJfVlBDX0lEID0gXCJBV1M6OkVDMjo6VlBDOjpJZFwiLFxuXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gUm91dGUgNTMgaG9zdGVkIHpvbmUgSUQsIHN1Y2ggYXMgWjIzWVhWNE9WUEwwNEEuXG4gICAqL1xuICBBV1NfUk9VVEU1M19IT1NURURaT05FX0lEID0gXCJBV1M6OlJvdXRlNTM6Okhvc3RlZFpvbmU6OklkXCIsXG59XG5cbi8vIERlcHJlY2F0ZWQgLSBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy82MDM5XG5cbi8qKlxuICogU1NNIHBhcmFtZXRlciB0eXBlXG4gKiBAZGVwcmVjYXRlZCB0aGVzZSB0eXBlcyBhcmUgbm8gbG9uZ2VyIHVzZWRcbiAqL1xuZXhwb3J0IGVudW0gUGFyYW1ldGVyVHlwZSB7XG4gIC8qKlxuICAgKiBTdHJpbmdcbiAgICovXG4gIFNUUklORyA9IFwiU3RyaW5nXCIsXG4gIC8qKlxuICAgKiBTZWN1cmUgU3RyaW5nXG4gICAqXG4gICAqIFBhcmFtZXRlciBTdG9yZSB1c2VzIGFuIEFXUyBLZXkgTWFuYWdlbWVudCBTZXJ2aWNlIChLTVMpIGN1c3RvbWVyIG1hc3RlciBrZXkgKENNSykgdG8gZW5jcnlwdCB0aGUgcGFyYW1ldGVyIHZhbHVlLlxuICAgKiBQYXJhbWV0ZXJzIG9mIHR5cGUgU2VjdXJlU3RyaW5nIGNhbm5vdCBiZSBjcmVhdGVkIGRpcmVjdGx5IGZyb20gYSBDREsgYXBwbGljYXRpb24gZHVlIHRvIENGTiBsaW1pdGF0aW9ucy5cbiAgICpcbiAgICogTk9URTogVGVycmFmb3JtIGRvZXMgbm90IHByZXZlbnQgY3JlYXRpbmcgU2VjdXJlU3RyaW5nIHBhcmFtZXRlcnMsIGJ1dCBpdCBpcyBub3QgcmVjb21tZW5kZWRcbiAgICogYmVjYXVzZSB0aGUgdmFsdWUgd2lsbCBiZSBzdG9yZWQgaW4gcGxhaW4gdGV4dCBpbiB0aGUgc3RhdGUgZmlsZS5cbiAgICovXG4gIFNFQ1VSRV9TVFJJTkcgPSBcIlNlY3VyZVN0cmluZ1wiLFxuICAvKipcbiAgICogU3RyaW5nIExpc3RcbiAgICovXG4gIFNUUklOR19MSVNUID0gXCJTdHJpbmdMaXN0XCIsXG4gIC8qKlxuICAgKiBBbiBBbWF6b24gRUMyIGltYWdlIElELCBzdWNoIGFzIGFtaS0wZmY4YTkxNTA3Zjc3Zjg2N1xuICAgKi9cbiAgQVdTX0VDMl9JTUFHRV9JRCA9IFwiQVdTOjpFQzI6OkltYWdlOjpJZFwiLFxufVxuXG4vKipcbiAqIFNTTSBwYXJhbWV0ZXIgZGF0YSB0eXBlXG4gKi9cbmV4cG9ydCBlbnVtIFBhcmFtZXRlckRhdGFUeXBlIHtcbiAgLyoqXG4gICAqIFRleHRcbiAgICovXG4gIFRFWFQgPSBcInRleHRcIixcbiAgLyoqXG4gICAqIEF3cyBFYzIgSW1hZ2VcbiAgICovXG4gIEFXU19FQzJfSU1BR0UgPSBcImF3czplYzI6aW1hZ2VcIixcbn1cblxuLyoqXG4gKiBTU00gcGFyYW1ldGVyIHRpZXJcbiAqL1xuZXhwb3J0IGVudW0gUGFyYW1ldGVyVGllciB7XG4gIC8qKlxuICAgKiBTdHJpbmdcbiAgICovXG4gIEFEVkFOQ0VEID0gXCJBZHZhbmNlZFwiLFxuICAvKipcbiAgICogU3RyaW5nXG4gICAqL1xuICBJTlRFTExJR0VOVF9USUVSSU5HID0gXCJJbnRlbGxpZ2VudC1UaWVyaW5nXCIsXG4gIC8qKlxuICAgKiBTdHJpbmdcbiAgICovXG4gIFNUQU5EQVJEID0gXCJTdGFuZGFyZFwiLFxufVxuXG4vKipcbiAqIENvbW1vbiBhdHRyaWJ1dGVzIGZvciBzdHJpbmcgcGFyYW1ldGVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21tb25TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgc3RvcmUgdmFsdWUuXG4gICAqXG4gICAqIFRoaXMgdmFsdWUgY2FuIGJlIGEgdG9rZW4gb3IgYSBjb25jcmV0ZSBzdHJpbmcuIElmIGl0IGlzIGEgY29uY3JldGUgc3RyaW5nXG4gICAqIGFuZCBpbmNsdWRlcyBcIi9cIiBpdCBtdXN0IGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhIFwiL1wiIChmdWxseS1xdWFsaWZpZWQpLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcGFyYW1ldGVyIG5hbWUgaXMgYSBzaW1wbGUgbmFtZS4gQSBwYXJhbWV0ZXIgbmFtZVxuICAgKiB3aXRob3V0IGFueSBcIi9cIiBpcyBjb25zaWRlcmVkIGEgc2ltcGxlIG5hbWUuIElmIHRoZSBwYXJhbWV0ZXIgbmFtZSBpbmNsdWRlc1xuICAgKiBcIi9cIiwgc2V0dGluZyBzaW1wbGVOYW1lIHRvIHRydWUgbWlnaHQgY2F1c2UgdW5pbnRlbmRlZCBpc3N1ZXMgc3VjaFxuICAgKiBhcyBkdXBsaWNhdGUgXCIvXCIgaW4gdGhlIHJlc3VsdGluZyBBUk4uXG4gICAqXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgb25seSBpZiBgcGFyYW1ldGVyTmFtZWAgaXMgYSB0b2tlbiwgd2hpY2ggbWVhbnMgd2VcbiAgICogYXJlIHVuYWJsZSB0byBkZXRlY3QgaWYgdGhlIG5hbWUgaXMgc2ltcGxlIG9yIFwicGF0aC1saWtlXCIgZm9yIHRoZSBwdXJwb3NlXG4gICAqIG9mIHJlbmRlcmluZyBTU00gcGFyYW1ldGVyIEFSTnMuXG4gICAqXG4gICAqIElmIGBwYXJhbWV0ZXJOYW1lYCBpcyBub3Qgc3BlY2lmaWVkLCBgc2ltcGxlTmFtZWAgbXVzdCBiZSBgdHJ1ZWAgKG9yXG4gICAqIHVuZGVmaW5lZCkgc2luY2UgdGhlIG5hbWUgZ2VuZXJhdGVkIGJ5IEFXUyBDbG91ZEZvcm1hdGlvbiBpcyBhbHdheXMgYVxuICAgKiBzaW1wbGUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWRldGVjdCBiYXNlZCBvbiBgcGFyYW1ldGVyTmFtZWBcbiAgICovXG4gIHJlYWRvbmx5IHNpbXBsZU5hbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNDkuMC9kb2NzL2RhdGEtc291cmNlcy9zc21fcGFyYW1ldGVyI3dpdGhfZGVjcnlwdGlvbiBEYXRhQXdzU3NtUGFyYW1ldGVyI3dpdGhfZGVjcnlwdGlvbn1cbiAgICpcbiAgICogQGRlZmF1bHQ6IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHdpdGhEZWNyeXB0aW9uPzogYm9vbGVhbiB8IElSZXNvbHZhYmxlO1xufVxuXG4vKipcbiAqIEF0dHJpYnV0ZXMgZm9yIHBhcmFtZXRlcnMgb2YgdmFyaW91cyB0eXBlcyBvZiBzdHJpbmcuXG4gKlxuICogQHNlZSBQYXJhbWV0ZXJUeXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlc1xuICBleHRlbmRzIENvbW1vblN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB2YWx1ZSB5b3Ugd2lzaCB0byByZXRyaWV2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGxhdGVzdCB2ZXJzaW9uIHdpbGwgYmUgcmV0cmlldmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIHN0cmluZyBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgUGFyYW1ldGVyVHlwZS5TVFJJTkdcbiAgICogQGRlcHJlY2F0ZWQgLSB1c2UgdmFsdWVUeXBlIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IHR5cGU/OiBQYXJhbWV0ZXJUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgc3RyaW5nIHBhcmFtZXRlciB2YWx1ZVxuICAgKlxuICAgKiBVc2luZyBzcGVjaWZpYyB0eXBlcyBjYW4gYmUgaGVscGZ1bCBpbiBjYXRjaGluZyBpbnZhbGlkIHZhbHVlc1xuICAgKiBhdCB0aGUgc3RhcnQgb2YgY3JlYXRpbmcgb3IgdXBkYXRpbmcgYSBzdGFjay4gQ2xvdWRGb3JtYXRpb24gdmFsaWRhdGVzXG4gICAqIHRoZSB2YWx1ZXMgYWdhaW5zdCBleGlzdGluZyB2YWx1ZXMgaW4gdGhlIGFjY291bnQuXG4gICAqXG4gICAqIE5vdGUgLSBpZiB5b3Ugd2FudCB0byBhbGxvdyB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgQVdTIGFjY291bnRzLCB1c2VcbiAgICogUGFyYW1ldGVyVmFsdWVUeXBlLlNUUklOR1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3BhcmFtZXRlcnMtc2VjdGlvbi1zdHJ1Y3R1cmUuaHRtbCNhd3Mtc3NtLXBhcmFtZXRlci10eXBlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBQYXJhbWV0ZXJWYWx1ZVR5cGUuU1RSSU5HXG4gICAqL1xuICByZWFkb25seSB2YWx1ZVR5cGU/OiBQYXJhbWV0ZXJWYWx1ZVR5cGU7XG59XG5cbi8qKlxuICogQXR0cmlidXRlcyBmb3IgcGFyYW1ldGVycyBvZiBzdHJpbmcgbGlzdCB0eXBlLlxuICpcbiAqIEBzZWUgUGFyYW1ldGVyVHlwZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzXG4gIGV4dGVuZHMgQ29tbW9uU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBudW1iZXIgb2YgdGhlIHZhbHVlIHlvdSB3aXNoIHRvIHJldHJpZXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgbGF0ZXN0IHZlcnNpb24gd2lsbCBiZSByZXRyaWV2ZWQuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgc3RyaW5nIGxpc3QgcGFyYW1ldGVyIHZhbHVlLlxuICAgKlxuICAgKiBVc2luZyBzcGVjaWZpYyB0eXBlcyBjYW4gYmUgaGVscGZ1bCBpbiBjYXRjaGluZyBpbnZhbGlkIHZhbHVlc1xuICAgKiBhdCB0aGUgc3RhcnQgb2YgY3JlYXRpbmcgb3IgdXBkYXRpbmcgYSBzdGFjay4gQ2xvdWRGb3JtYXRpb24gdmFsaWRhdGVzXG4gICAqIHRoZSB2YWx1ZXMgYWdhaW5zdCBleGlzdGluZyB2YWx1ZXMgaW4gdGhlIGFjY291bnQuXG4gICAqXG4gICAqIE5vdGUgLSBpZiB5b3Ugd2FudCB0byBhbGxvdyB2YWx1ZXMgZnJvbSBkaWZmZXJlbnQgQVdTIGFjY291bnRzLCB1c2VcbiAgICogUGFyYW1ldGVyVmFsdWVUeXBlLlNUUklOR1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NDbG91ZEZvcm1hdGlvbi9sYXRlc3QvVXNlckd1aWRlL3BhcmFtZXRlcnMtc2VjdGlvbi1zdHJ1Y3R1cmUuaHRtbCNhd3Mtc3NtLXBhcmFtZXRlci10eXBlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBQYXJhbWV0ZXJWYWx1ZVR5cGUuU1RSSU5HXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50VHlwZT86IFBhcmFtZXRlclZhbHVlVHlwZTtcbn1cblxuLyoqXG4gKiBBdHRyaWJ1dGVzIGZvciBzZWN1cmUgc3RyaW5nIHBhcmFtZXRlcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VjdXJlU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlc1xuICBleHRlbmRzIENvbW1vblN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMge1xuICAvKipcbiAgICogVGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSB2YWx1ZSB5b3Ugd2lzaCB0byByZXRyaWV2ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBBV1MgQ2xvdWRGb3JtYXRpb24gdXNlcyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHBhcmFtZXRlclxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24ga2V5IHRoYXQgaXMgdXNlZCB0byBlbmNyeXB0IHRoaXMgcGFyYW1ldGVyXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBtYXN0ZXIga2V5XG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5PzogZW5jcnlwdGlvbi5JS2V5O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgU3RyaW5nIFNTTSBQYXJhbWV0ZXIuXG4gKiBAcmVzb3VyY2UgYXdzX3NzbV9wYXJhbWV0ZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc3NtUGFyYW1ldGVyID0gbmV3IHN0b3JhZ2UuU3RyaW5nUGFyYW1ldGVyKHRoaXMsICdteVNzbVBhcmFtZXRlcicsIHtcbiAqICAgIHBhcmFtZXRlck5hbWU6ICdteVNzbVBhcmFtZXRlcicsXG4gKiAgICBzdHJpbmdWYWx1ZTogJ215U3NtUGFyYW1ldGVyVmFsdWUnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdQYXJhbWV0ZXIgZXh0ZW5kcyBQYXJhbWV0ZXJCYXNlIGltcGxlbWVudHMgSVN0cmluZ1BhcmFtZXRlciB7XG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHN0cmluZyBwYXJhbWV0ZXIgYnkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHN0cmluZ1BhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgKTogSVN0cmluZ1BhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdQYXJhbWV0ZXJOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYW4gZXh0ZXJuYWwgc3RyaW5nIHBhcmFtZXRlciBieSBBUk4uXG4gICAqXG4gICAqIFRoZSB1bmVuY3J5cHRlZCB2YWx1ZSBvZiBhIFNlY3VyZVN0cmluZyB3aWxsIGJlIHN0b3JlZCBpbiB0aGUgcmF3IHN0YXRlIGFzIHBsYWluLXRleHQuXG4gICAqIFtSZWFkIG1vcmUgYWJvdXQgc2Vuc2l0aXZlIGRhdGEgaW4gc3RhdGVdKGh0dHBzOi8vd3d3LnRlcnJhZm9ybS5pby9kb2NzL3N0YXRlL3NlbnNpdGl2ZS1kYXRhLmh0bWwpLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nUGFyYW1ldGVyQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdHJpbmdQYXJhbWV0ZXJBcm46IHN0cmluZyxcbiAgKTogSVN0cmluZ1BhcmFtZXRlciB7XG4gICAgaWYgKFRva2VuLmlzVW5yZXNvbHZlZChzdHJpbmdQYXJhbWV0ZXJBcm4pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzdHJpbmdQYXJhbWV0ZXJBcm4gY2Fubm90IGJlIGFuIHVucmVzb2x2ZWQgdG9rZW5cIik7XG4gICAgfVxuXG4gICAgLy8gaGFzIHRvIGJlIHRoZSBzYW1lIHJlZ2lvblxuICAgIC8vIHNwbGl0IHRoZSBhcm4gc3RyaW5nIHRvIGdldCB0aGUgcmVnaW9uIHN0cmluZ1xuICAgIC8vIGFybiBzYW1wbGU6IGFybjphd3M6c3NtOnVzLWVhc3QtMToxMjM0NTY3ODkwMTI6cGFyYW1ldGVyL2R1bW15TmFtZVxuICAgIGNvbnN0IGFyblBhcnRzID0gc3RyaW5nUGFyYW1ldGVyQXJuLnNwbGl0KFwiOlwiKTtcbiAgICBjb25zdCBzdGFja1JlZ2lvbiA9IEF3c1N0YWNrLm9mQXdzQ29uc3RydWN0KHNjb3BlKS5yZWdpb247XG4gICAgaWYgKGFyblBhcnRzLmxlbmd0aCAhPT0gNikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5leHBlY3RlZCBTdHJpbmdQYXJhbWV0ZXJBcm4gZm9ybWF0XCIpO1xuICAgIH0gZWxzZSBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHN0YWNrUmVnaW9uKSkge1xuICAgICAgLy8gUmVnaW9uIGlzIHVua25vd24gZHVyaW5nIHN5bnRoZXNpcywgZW1pdCBhIHdhcm5pbmcgZm9yIHZpc2liaWxpdHlcbiAgICAgIC8vIFwiYXdzLWNkay1saWIvYXdzLXNzbTpjcm9zc0FjY291bnRSZWZlcmVuY2VTYW1lUmVnaW9uXCIsXG4gICAgICBBbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkV2FybmluZyhcbiAgICAgICAgXCJDcm9zcy1hY2NvdW50IHJlZmVyZW5jZXMgd2lsbCBvbmx5IHdvcmsgd2l0aGluIHRoZSBzYW1lIHJlZ2lvblwiLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgIVRva2VuLmlzVW5yZXNvbHZlZChzdGFja1JlZ2lvbikgJiZcbiAgICAgIGFyblBhcnRzWzNdICE9PSBzdGFja1JlZ2lvblxuICAgICkge1xuICAgICAgLy8gSWYgdGhlIHJlZ2lvbiBpcyBrbm93biwgaXQgbXVzdCBtYXRjaCB0aGUgcmVnaW9uIHNwZWNpZmllZCBpbiB0aGUgQVJOIHN0cmluZ1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInN0cmluZ1BhcmFtZXRlckFybiBtdXN0IGJlIGluIHRoZSBzYW1lIHJlZ2lvbiBhcyB0aGUgc3RhY2tcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyVHlwZSA9IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkc7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID1cbiAgICAgIHN0cmluZ1BhcmFtZXRlckFyblxuICAgICAgICAuc3BsaXQoXCIvXCIpXG4gICAgICAgIC5wb3AoKVxuICAgICAgICA/LnJlcGxhY2UoL3BhcmFtZXRlclxcLyQvLCBcIlwiKSA/PyBcIlwiO1xuICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBuZXcgZGF0YUF3c1NzbVBhcmFtZXRlci5EYXRhQXdzU3NtUGFyYW1ldGVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0uUGFyYW1ldGVyYCxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgICAgLy8gd2l0aERlY3J5cHRpb24gZGVmYXVsdHMgdG8gdHJ1ZVxuICAgICAgfSxcbiAgICApO1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFBhcmFtZXRlckJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWUgPSBwYXJhbWV0ZXJOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlckFybiA9IHN0cmluZ1BhcmFtZXRlckFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJUeXBlID0gcGFyYW1ldGVyVHlwZTtcbiAgICAgIC8vIFVzZSBjYXV0aW9uOiBUaGlzIHZhbHVlIGlzIG5ldmVyIG1hcmtlZCBhcyBzZW5zaXRpdmUuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RyaW5nVmFsdWUgPSBkYXRhU291cmNlLmluc2VjdXJlVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHN0cmluZyBwYXJhbWV0ZXIgd2l0aCBuYW1lIGFuZCBvcHRpb25hbCB2ZXJzaW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IFN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMsXG4gICk6IElTdHJpbmdQYXJhbWV0ZXIge1xuICAgIGlmICghYXR0cnMucGFyYW1ldGVyTmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwicGFyYW1ldGVyTmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nXCIpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBhdHRycy50eXBlICYmXG4gICAgICAhW1BhcmFtZXRlclR5cGUuU1RSSU5HLCBQYXJhbWV0ZXJUeXBlLkFXU19FQzJfSU1BR0VfSURdLmluY2x1ZGVzKFxuICAgICAgICBhdHRycy50eXBlLFxuICAgICAgKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgZnJvbVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMgZG9lcyBub3Qgc3VwcG9ydCAke2F0dHJzLnR5cGV9LiBQbGVhc2UgdXNlIFBhcmFtZXRlclR5cGUuU1RSSU5HIG9yIFBhcmFtZXRlclR5cGUuQVdTX0VDMl9JTUFHRV9JRGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IGZvcmNlRHluYW1pY1JlZmVyZW5jZSA9IGF0dHJzLmZvcmNlRHluYW1pY1JlZmVyZW5jZSA/PyBmYWxzZTtcbiAgICAvLyByZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE0My4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1zc20vbGliL3BhcmFtZXRlci50cyNMNDgzXG4gICAgLy8gY29uc3QgdHlwZSA9IGF0dHJzLnR5cGUgPz8gYXR0cnMudmFsdWVUeXBlID8/IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkc7XG5cbiAgICBsZXQgbmFtZTogc3RyaW5nO1xuICAgIGlmIChhdHRycy52ZXJzaW9uKSB7XG4gICAgICAvLyBUbyBxdWVyeSBieSBwYXJhbWV0ZXIgdmVyc2lvbiwgdXNlIFwiTmFtZVwiOiBcIm5hbWU6dmVyc2lvblwiLlxuICAgICAgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3N5c3RlbXMtbWFuYWdlci9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRQYXJhbWV0ZXIuaHRtbCNzeXN0ZW1zbWFuYWdlci1HZXRQYXJhbWV0ZXItcmVxdWVzdC1OYW1lXG4gICAgICBuYW1lID0gYCR7YXR0cnMucGFyYW1ldGVyTmFtZX06JHtUb2tlbml6YXRpb24uc3RyaW5naWZ5TnVtYmVyKGF0dHJzLnZlcnNpb24pfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWUgPSBhdHRycy5wYXJhbWV0ZXJOYW1lO1xuICAgIH1cbiAgICBjb25zdCBkYXRhU291cmNlID0gbmV3IGRhdGFBd3NTc21QYXJhbWV0ZXIuRGF0YUF3c1NzbVBhcmFtZXRlcihcbiAgICAgIHNjb3BlLFxuICAgICAgYCR7aWR9LlBhcmFtZXRlcmAsXG4gICAgICB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHdpdGhEZWNyeXB0aW9uOiBhdHRycy53aXRoRGVjcnlwdGlvbiwgLy8gZGVmYXVsdHMgdG8gdHJ1ZVxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgUGFyYW1ldGVyQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyTmFtZSA9IGF0dHJzLnBhcmFtZXRlck5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyQXJuID0gYXJuRm9yUGFyYW1ldGVyTmFtZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgYXR0cnMucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgeyBzaW1wbGVOYW1lOiBhdHRycy5zaW1wbGVOYW1lIH0sXG4gICAgICApO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlclR5cGUgPSBQYXJhbWV0ZXJUeXBlLlNUUklORzsgLy8gZGF0YVNvdXJjZS50eXBlIC0gaW5zdGVhZCBvZiB0b2tlbiB1c2UgY29uY3JldGVcbiAgICAgIC8vIFVzZSBjYXV0aW9uOiBUaGlzIHZhbHVlIGlzIG5ldmVyIG1hcmtlZCBhcyBzZW5zaXRpdmUuXG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RyaW5nVmFsdWUgPSBkYXRhU291cmNlLmluc2VjdXJlVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGEgc2VjdXJlIHN0cmluZyBwYXJhbWV0ZXIgZnJvbSB0aGUgU1NNIHBhcmFtZXRlciBzdG9yZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBTZWN1cmVTdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzLFxuICApOiBJU3RyaW5nUGFyYW1ldGVyIHtcbiAgICBpZiAoIWF0dHJzLnBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInBhcmFtZXRlck5hbWUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZ1wiKTtcbiAgICB9XG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBpZiAoYXR0cnMudmVyc2lvbikge1xuICAgICAgbmFtZSA9IGAke2F0dHJzLnBhcmFtZXRlck5hbWV9OiR7VG9rZW5pemF0aW9uLnN0cmluZ2lmeU51bWJlcihhdHRycy52ZXJzaW9uKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICB9XG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgZGF0YUF3c1NzbVBhcmFtZXRlci5EYXRhQXdzU3NtUGFyYW1ldGVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0uUGFyYW1ldGVyYCxcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgd2l0aERlY3J5cHRpb246IGF0dHJzLndpdGhEZWNyeXB0aW9uLCAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBQYXJhbWV0ZXJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJOYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm4gPSBhcm5Gb3JQYXJhbWV0ZXJOYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBhdHRycy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICB7IHNpbXBsZU5hbWU6IGF0dHJzLnNpbXBsZU5hbWUgfSxcbiAgICAgICk7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyVHlwZSA9IFBhcmFtZXRlclR5cGUuU0VDVVJFX1NUUklORzsgLy8gcmVzb3VyY2UudHlwZSAtIGluc3RlYWQgb2YgdG9rZW4gdXNlIGNvbmNyZXRlXG4gICAgICAvLyB2YWx1ZSBpcyBhbHdheXMgbWFya2VkIGFzIHNlbnNpdGl2ZVxuICAgICAgcHVibGljIHJlYWRvbmx5IHN0cmluZ1ZhbHVlID0gcmVzb3VyY2UudmFsdWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZW5jcnlwdGlvbktleSA9IGF0dHJzLmVuY3J5cHRpb25LZXk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8vIC8vIFRPRE86IFVzZSBHcmlkIGFzIGNvbnRleHRQcm92aWRlclxuICAvLyAvKipcbiAgLy8gICogUmVhZHMgdGhlIHZhbHVlIG9mIGFuIFNTTSBwYXJhbWV0ZXIgZHVyaW5nIHN5bnRoZXNpcyB0aHJvdWdoIGFuXG4gIC8vICAqIGVudmlyb25tZW50YWwgY29udGV4dCBwcm92aWRlci5cbiAgLy8gICpcbiAgLy8gICogUmVxdWlyZXMgdGhhdCB0aGUgc3RhY2sgdGhpcyBzY29wZSBpcyBkZWZpbmVkIGluIHdpbGwgaGF2ZSBleHBsaWNpdFxuICAvLyAgKiBhY2NvdW50L3JlZ2lvbiBpbmZvcm1hdGlvbi4gT3RoZXJ3aXNlLCBpdCB3aWxsIGZhaWwgZHVyaW5nIHN5bnRoZXNpcy5cbiAgLy8gICpcbiAgLy8gICogSWYgZGVmYXVsdFZhbHVlIGlzIHByb3ZpZGVkLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGR1bW15VmFsdWVcbiAgLy8gICogYW5kIHRoZSBDb250ZXh0UHJvdmlkZXIgd2lsbCBiZSB0b2xkIE5PVCB0byByYWlzZSBhbiBlcnJvciBvbiBzeW50aGVzaXNcbiAgLy8gICogaWYgdGhlIFNTTSBQYXJhbWV0ZXIgaXMgbm90IGZvdW5kIGluIHRoZSBhY2NvdW50IGF0IHN5bnRoIHRpbWUuXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgc3RhdGljIHZhbHVlRnJvbUxvb2t1cChcbiAgLy8gICBzY29wZTogQ29uc3RydWN0LFxuICAvLyAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgLy8gICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcsXG4gIC8vICk6IHN0cmluZyB7XG4gIC8vICAgY29uc3QgdmFsdWUgPSBDb250ZXh0UHJvdmlkZXIuZ2V0VmFsdWUoc2NvcGUsIHtcbiAgLy8gICAgIHByb3ZpZGVyOiBjeHNjaGVtYS5Db250ZXh0UHJvdmlkZXIuU1NNX1BBUkFNRVRFUl9QUk9WSURFUixcbiAgLy8gICAgIHByb3BzOiB7IHBhcmFtZXRlck5hbWUgfSxcbiAgLy8gICAgIGR1bW15VmFsdWU6IGRlZmF1bHRWYWx1ZSB8fCBgZHVtbXktdmFsdWUtZm9yLSR7cGFyYW1ldGVyTmFtZX1gLFxuICAvLyAgICAgaWdub3JlRXJyb3JPbk1pc3NpbmdDb250ZXh0OiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCxcbiAgLy8gICB9KS52YWx1ZTtcblxuICAvLyAgIHJldHVybiB2YWx1ZTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KSB0byB0aGUgc3RyaW5nIHZhbHVlIG9mIGFuIFNTTSBzdHJpbmcgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gc2NvcGUgU29tZSBzY29wZSB3aXRoaW4gYSBzdGFja1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHBhcmFtZXRlciB2ZXJzaW9uIChyZWNvbW1lbmRlZCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgd29uJ3QgY2hhbmdlIGR1cmluZyBkZXBsb3ltZW50KVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZUZvclN0cmluZ1BhcmFtZXRlcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uPzogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIHJldHVybiBTdHJpbmdQYXJhbWV0ZXIudmFsdWVGb3JUeXBlZFN0cmluZ1BhcmFtZXRlclYyKFxuICAgICAgc2NvcGUsXG4gICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgUGFyYW1ldGVyVmFsdWVUeXBlLlNUUklORyxcbiAgICAgIHZlcnNpb24sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KSB0byB0aGUgc3RyaW5nIHZhbHVlIG9mIGFuIFNTTSBzdHJpbmcgcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gc2NvcGUgU29tZSBzY29wZSB3aXRoaW4gYSBzdGFja1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIFNTTSBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBwYXJhbWV0ZXIgdmVyc2lvbiAocmVjb21tZW5kZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHZhbHVlIHdvbid0IGNoYW5nZSBkdXJpbmcgZGVwbG95bWVudClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsdWVGb3JUeXBlZFN0cmluZ1BhcmFtZXRlclYyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nLFxuICAgIHR5cGUgPSBQYXJhbWV0ZXJWYWx1ZVR5cGUuU1RSSU5HLFxuICAgIHZlcnNpb24/OiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgaWQgPSBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWUpO1xuICAgIGNvbnN0IGV4aXN0cyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKSBhcyBJU3RyaW5nUGFyYW1ldGVyO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIGV4aXN0cy5zdHJpbmdWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhzdGFjaywgaWQsIHtcbiAgICAgIHBhcmFtZXRlck5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdmFsdWVUeXBlOiB0eXBlLFxuICAgIH0pLnN0cmluZ1ZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSB0b2tlbiB0aGF0IHdpbGwgcmVzb2x2ZSAoZHVyaW5nIGRlcGxveW1lbnQpIHRvIHRoZSBzdHJpbmcgdmFsdWUgb2YgYW4gU1NNIHN0cmluZyBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSBzY29wZSBTb21lIHNjb3BlIHdpdGhpbiBhIHN0YWNrXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBuYW1lIG9mIHRoZSBTU00gcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgU1NNIHBhcmFtZXRlci5cbiAgICogQHBhcmFtIHZlcnNpb24gVGhlIHBhcmFtZXRlciB2ZXJzaW9uIChyZWNvbW1lbmRlZCBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCB0aGUgdmFsdWUgd29uJ3QgY2hhbmdlIGR1cmluZyBkZXBsb3ltZW50KVxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSB2YWx1ZUZvclR5cGVkU3RyaW5nUGFyYW1ldGVyVjIgaW5zdGVhZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZUZvclR5cGVkU3RyaW5nUGFyYW1ldGVyKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgcGFyYW1ldGVyTmFtZTogc3RyaW5nLFxuICAgIHR5cGUgPSBQYXJhbWV0ZXJUeXBlLlNUUklORyxcbiAgICB2ZXJzaW9uPzogbnVtYmVyLFxuICApOiBzdHJpbmcge1xuICAgIGlmICh0eXBlID09PSBQYXJhbWV0ZXJUeXBlLlNUUklOR19MSVNUKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwidmFsdWVGb3JUeXBlZFN0cmluZ1BhcmFtZXRlciBkb2VzIG5vdCBzdXBwb3J0IFNUUklOR19MSVNULCBcIiArXG4gICAgICAgICAgXCJ1c2UgdmFsdWVGb3JUeXBlZExpc3RQYXJhbWV0ZXIgaW5zdGVhZFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgaWQgPSBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWUpO1xuICAgIGNvbnN0IGV4aXN0cyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKSBhcyBJU3RyaW5nUGFyYW1ldGVyO1xuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgcmV0dXJuIGV4aXN0cy5zdHJpbmdWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhzdGFjaywgaWQsIHtcbiAgICAgIHBhcmFtZXRlck5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgdHlwZSxcbiAgICB9KS5zdHJpbmdWYWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KVxuICAgKiBAcGFyYW0gc2NvcGUgU29tZSBzY29wZSB3aXRoaW4gYSBzdGFja1xuICAgKiBAcGFyYW0gcGFyYW1ldGVyTmFtZSBUaGUgbmFtZSBvZiB0aGUgU1NNIHBhcmFtZXRlclxuICAgKiBAcGFyYW0gdmVyc2lvbiBUaGUgcGFyYW1ldGVyIHZlcnNpb24gKHJlcXVpcmVkIGZvciBzZWN1cmUgc3RyaW5ncylcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBTZWNyZXRWYWx1ZS5zc21TZWN1cmUoKWAgaW5zdGVhZCwgaXQgd2lsbCBjb3JyZWN0bHkgdHlwZSB0aGUgaW1wb3J0ZWQgdmFsdWUgYXMgYSBgU2VjcmV0VmFsdWVgIGFuZCBhbGxvdyBpbXBvcnRpbmcgd2l0aG91dCB2ZXJzaW9uLiBgU2VjcmV0VmFsdWVgIGxpdmVzIGluIHRoZSBjb3JlIGBhd3MtY2RrLWxpYmAgbW9kdWxlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyB2YWx1ZUZvclNlY3VyZVN0cmluZ1BhcmFtZXRlcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIHBhcmFtZXRlck5hbWU6IHN0cmluZyxcbiAgICB2ZXJzaW9uOiBudW1iZXIsXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBBd3NTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgaWQgPSBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWUpO1xuICAgIGNvbnN0IGV4aXN0cyA9IHN0YWNrLm5vZGUudHJ5RmluZENoaWxkKGlkKSBhcyBJU3RyaW5nUGFyYW1ldGVyO1xuICAgIGlmIChleGlzdHMpIHtcbiAgICAgIHJldHVybiBleGlzdHMuc3RyaW5nVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZnJvbVNlY3VyZVN0cmluZ1BhcmFtZXRlckF0dHJpYnV0ZXMoc3RhY2ssIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdmVyc2lvbixcbiAgICB9KS5zdHJpbmdWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlclR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cmluZ1ZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogc3NtUGFyYW1ldGVyLlNzbVBhcmFtZXRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RyaW5nUGFyYW1ldGVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID1cbiAgICAgIHByb3BzLnBhcmFtZXRlck5hbWUgfHxcbiAgICAgIHRoaXMuc3RhY2sudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgcHJlZml4OiB0aGlzLmdyaWRVVUlELFxuICAgICAgfSk7XG5cbiAgICBpZiAocHJvcHMuc3RyaW5nVmFsdWUgJiYgcHJvcHMuc2Vuc2l0aXZlU3RyaW5nVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBib3RoICdzdHJpbmdWYWx1ZScgYW5kICdzZW5zaXRpdmVTdHJpbmdWYWx1ZSdcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gcHJvcHMuc3RyaW5nVmFsdWUgPz8gcHJvcHMuc2Vuc2l0aXZlU3RyaW5nVmFsdWU7XG4gICAgY29uc3QgaXNTZW5zaXRpdmUgPSAhIXByb3BzLnNlbnNpdGl2ZVN0cmluZ1ZhbHVlO1xuICAgIGlmICghc3RyaW5nVmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFaXRoZXIgJ3N0cmluZ1ZhbHVlJyBvciAnc2Vuc2l0aXZlU3RyaW5nVmFsdWUnIG11c3QgYmUgc3BlY2lmaWVkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hbGxvd2VkUGF0dGVybikge1xuICAgICAgX2Fzc2VydFZhbGlkVmFsdWUoc3RyaW5nVmFsdWUsIHByb3BzLmFsbG93ZWRQYXR0ZXJuKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVBhcmFtZXRlck5hbWUocGFyYW1ldGVyTmFtZSk7XG5cbiAgICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcHJvcHMuZGVzY3JpcHRpb24/Lmxlbmd0aCA+IDEwMjQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkRlc2NyaXB0aW9uIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMuXCIpO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy50eXBlICYmIHByb3BzLnR5cGUgPT09IFBhcmFtZXRlclR5cGUuQVdTX0VDMl9JTUFHRV9JRCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlRoZSB0eXBlIG11c3QgZWl0aGVyIGJlIFBhcmFtZXRlclR5cGUuU1RSSU5HIG9yIFBhcmFtZXRlclR5cGUuU1RSSU5HX0xJU1QuIERpZCB5b3UgbWVhbiB0byBzZXQgZGF0YVR5cGU6IFBhcmFtZXRlckRhdGFUeXBlLkFXU19FQzJfSU1BR0UgaW5zdGVhZD9cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBzc21QYXJhbWV0ZXIuU3NtUGFyYW1ldGVyKHRoaXMsIFwiUmVzb3VyY2VcIiwge1xuICAgICAgYWxsb3dlZFBhdHRlcm46IHByb3BzLmFsbG93ZWRQYXR0ZXJuLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgbmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHRpZXI6IHByb3BzLnRpZXIsXG4gICAgICB0eXBlOiBwcm9wcy50eXBlID8/IFBhcmFtZXRlclR5cGUuU1RSSU5HLFxuICAgICAgZGF0YVR5cGU6IHByb3BzLmRhdGFUeXBlLFxuICAgICAgaW5zZWN1cmVWYWx1ZTogcHJvcHMuc3RyaW5nVmFsdWUsXG4gICAgICB2YWx1ZTogcHJvcHMuc2Vuc2l0aXZlU3RyaW5nVmFsdWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlck5hbWUgPSB0aGlzLnJlc291cmNlLm5hbWU7XG4gICAgdGhpcy5wYXJhbWV0ZXJBcm4gPSBhcm5Gb3JQYXJhbWV0ZXJOYW1lKHRoaXMsIHRoaXMucGFyYW1ldGVyTmFtZSwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgc2ltcGxlTmFtZTogcHJvcHMuc2ltcGxlTmFtZSxcbiAgICB9KTtcblxuICAgIHRoaXMucGFyYW1ldGVyVHlwZSA9IHRoaXMucmVzb3VyY2UudHlwZTtcbiAgICB0aGlzLnN0cmluZ1ZhbHVlID0gaXNTZW5zaXRpdmVcbiAgICAgID8gdGhpcy5yZXNvdXJjZS52YWx1ZVxuICAgICAgOiB0aGlzLnJlc291cmNlLmluc2VjdXJlVmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFN0cmluZ0xpc3QgU1NNIFBhcmFtZXRlci5cbiAqIEByZXNvdXJjZSBBV1M6OlNTTTo6UGFyYW1ldGVyXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHJpbmdMaXN0UGFyYW1ldGVyXG4gIGV4dGVuZHMgUGFyYW1ldGVyQmFzZVxuICBpbXBsZW1lbnRzIElTdHJpbmdMaXN0UGFyYW1ldGVyXG57XG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHBhcmFtZXRlciBvZiB0eXBlIHN0cmluZyBsaXN0LlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gYW5kIHNob3VsZCBub3QgYmUgcGFyc2VkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nTGlzdFBhcmFtZXRlck5hbWUoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHN0cmluZ0xpc3RQYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICk6IElTdHJpbmdMaXN0UGFyYW1ldGVyIHtcbiAgICAvLyByZWY6IGR5bmFtaWMgcmVmXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMTQzLjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLXNzbS9saWIvcGFyYW1ldGVyLnRzI0w2NzBcbiAgICByZXR1cm4gU3RyaW5nTGlzdFBhcmFtZXRlci5mcm9tTGlzdFBhcmFtZXRlckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmdMaXN0UGFyYW1ldGVyTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnRzIGFuIGV4dGVybmFsIHN0cmluZyBsaXN0IHBhcmFtZXRlciB3aXRoIG5hbWUgYW5kIG9wdGlvbmFsIHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21MaXN0UGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IExpc3RQYXJhbWV0ZXJBdHRyaWJ1dGVzLFxuICApOiBJU3RyaW5nTGlzdFBhcmFtZXRlciB7XG4gICAgaWYgKCFhdHRycy5wYXJhbWV0ZXJOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJwYXJhbWV0ZXJOYW1lIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmdcIik7XG4gICAgfVxuXG4gICAgbGV0IG5hbWU6IHN0cmluZztcbiAgICBpZiAoYXR0cnMudmVyc2lvbikge1xuICAgICAgbmFtZSA9IGAke2F0dHJzLnBhcmFtZXRlck5hbWV9OiR7VG9rZW5pemF0aW9uLnN0cmluZ2lmeU51bWJlcihhdHRycy52ZXJzaW9uKX1gO1xuICAgIH0gZWxzZSB7XG4gICAgICBuYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGF0dHJzLmVsZW1lbnRUeXBlID8/IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkc7XG4gICAgY29uc3QgdmFsdWVUeXBlID0gYExpc3Q8JHt0eXBlfT5gO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgZGF0YUF3c1NzbVBhcmFtZXRlci5EYXRhQXdzU3NtUGFyYW1ldGVyKFxuICAgICAgc2NvcGUsXG4gICAgICBgJHtpZH0uUGFyYW1ldGVyYCxcbiAgICAgIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgd2l0aERlY3J5cHRpb246IGF0dHJzLndpdGhEZWNyeXB0aW9uLCAvLyBkZWZhdWx0cyB0byB0cnVlXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBQYXJhbWV0ZXJCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJOYW1lID0gYXR0cnMucGFyYW1ldGVyTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm4gPSBhcm5Gb3JQYXJhbWV0ZXJOYW1lKFxuICAgICAgICB0aGlzLFxuICAgICAgICBhdHRycy5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICB7IHNpbXBsZU5hbWU6IGF0dHJzLnNpbXBsZU5hbWUgfSxcbiAgICAgICk7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGFyYW1ldGVyVHlwZSA9IHZhbHVlVHlwZTsgLy8gaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIHdoYXQgdGhpcyBpcyBzaW5jZSBhIENmblBhcmFtZXRlciBjYW4gb25seSBiZSBgU3RyaW5nIHwgU3RyaW5nTGlzdGBcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdHJpbmdMaXN0VmFsdWUgPSBGbi5zcGxpdChcIixcIiwgcmVzb3VyY2UuaW5zZWN1cmVWYWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgdG9rZW4gdGhhdCB3aWxsIHJlc29sdmUgKGR1cmluZyBkZXBsb3ltZW50KSB0byB0aGUgbGlzdCB2YWx1ZSBvZiBhbiBTU00gU3RyaW5nTGlzdCBwYXJhbWV0ZXIuXG4gICAqIEBwYXJhbSBzY29wZSBTb21lIHNjb3BlIHdpdGhpbiBhIHN0YWNrXG4gICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lIFRoZSBuYW1lIG9mIHRoZSBTU00gcGFyYW1ldGVyLlxuICAgKiBAcGFyYW0gdHlwZSB0aGUgdHlwZSBvZiB0aGUgU1NNIGxpc3QgcGFyYW1ldGVyXG4gICAqIEBwYXJhbSB2ZXJzaW9uIFRoZSBwYXJhbWV0ZXIgdmVyc2lvbiAocmVjb21tZW5kZWQgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIHZhbHVlIHdvbid0IGNoYW5nZSBkdXJpbmcgZGVwbG95bWVudClcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgdmFsdWVGb3JUeXBlZExpc3RQYXJhbWV0ZXIoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsXG4gICAgdHlwZSA9IFBhcmFtZXRlclZhbHVlVHlwZS5TVFJJTkcsXG4gICAgdmVyc2lvbj86IG51bWJlcixcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0YWNrID0gQXdzU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGlkID0gbWFrZUlkZW50aXR5Rm9ySW1wb3J0ZWRWYWx1ZShwYXJhbWV0ZXJOYW1lKTtcbiAgICBjb25zdCBleGlzdHMgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChpZCkgYXMgSVN0cmluZ0xpc3RQYXJhbWV0ZXI7XG5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICByZXR1cm4gZXhpc3RzLnN0cmluZ0xpc3RWYWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5mcm9tTGlzdFBhcmFtZXRlckF0dHJpYnV0ZXMoc3RhY2ssIGlkLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgZWxlbWVudFR5cGU6IHR5cGUsXG4gICAgICB2ZXJzaW9uLFxuICAgIH0pLnN0cmluZ0xpc3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkb25seSBwYXJhbWV0ZXJBcm46IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlck5hbWU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHBhcmFtZXRlclR5cGU6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IHN0cmluZ0xpc3RWYWx1ZTogc3RyaW5nW107XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogc3NtUGFyYW1ldGVyLlNzbVBhcmFtZXRlcjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU3RyaW5nTGlzdFBhcmFtZXRlclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9XG4gICAgICBwcm9wcy5wYXJhbWV0ZXJOYW1lIHx8XG4gICAgICB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgIHByZWZpeDogdGhpcy5ncmlkVVVJRCxcbiAgICAgIH0pO1xuXG4gICAgaWYgKHByb3BzLnN0cmluZ0xpc3RWYWx1ZSAmJiBwcm9wcy5zZW5zaXRpdmVTdHJpbmdMaXN0VmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJDYW5ub3Qgc3BlY2lmeSBib3RoICdzdHJpbmdMaXN0VmFsdWUnIGFuZCAnc2Vuc2l0aXZlU3RyaW5nTGlzdFZhbHVlJ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3Qgc3RyaW5nTGlzdFZhbHVlID1cbiAgICAgIHByb3BzLnN0cmluZ0xpc3RWYWx1ZSA/PyBwcm9wcy5zZW5zaXRpdmVTdHJpbmdMaXN0VmFsdWU7XG4gICAgY29uc3QgaXNTZW5zaXRpdmUgPSAhIXByb3BzLnNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZTtcbiAgICBpZiAoIXN0cmluZ0xpc3RWYWx1ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkVpdGhlciAnc3RyaW5nTGlzdFZhbHVlJyBvciAnc2Vuc2l0aXZlU3RyaW5nTGlzdFZhbHVlJyBtdXN0IGJlIHNwZWNpZmllZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBzdHJpbmdMaXN0VmFsdWUuZmluZChcbiAgICAgICAgKHN0cikgPT4gIVRva2VuLmlzVW5yZXNvbHZlZChzdHIpICYmIHN0ci5pbmRleE9mKFwiLFwiKSAhPT0gLTEsXG4gICAgICApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiVmFsdWVzIG9mIGEgU3RyaW5nTGlzdCBTU00gUGFyYW1ldGVyIGNhbm5vdCBjb250YWluIHRoZSAnLCcgY2hhcmFjdGVyLiBVc2UgYSBzdHJpbmcgcGFyYW1ldGVyIGluc3RlYWQuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5hbGxvd2VkUGF0dGVybiAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKHN0cmluZ0xpc3RWYWx1ZSkpIHtcbiAgICAgIHN0cmluZ0xpc3RWYWx1ZS5mb3JFYWNoKChzdHIpID0+XG4gICAgICAgIF9hc3NlcnRWYWxpZFZhbHVlKHN0ciwgcHJvcHMuYWxsb3dlZFBhdHRlcm4hKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVQYXJhbWV0ZXJOYW1lKHBhcmFtZXRlck5hbWUpO1xuXG4gICAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHByb3BzLmRlc2NyaXB0aW9uPy5sZW5ndGggPiAxMDI0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJEZXNjcmlwdGlvbiBjYW5ub3QgYmUgbG9uZ2VyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzLlwiKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IHNzbVBhcmFtZXRlci5Tc21QYXJhbWV0ZXIodGhpcywgXCJSZXNvdXJjZVwiLCB7XG4gICAgICBhbGxvd2VkUGF0dGVybjogcHJvcHMuYWxsb3dlZFBhdHRlcm4sXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBuYW1lOiBwYXJhbWV0ZXJOYW1lLFxuICAgICAgdGllcjogcHJvcHMudGllcixcbiAgICAgIHR5cGU6IFBhcmFtZXRlclR5cGUuU1RSSU5HX0xJU1QsXG4gICAgICBpbnNlY3VyZVZhbHVlOiBwcm9wcy5zdHJpbmdMaXN0VmFsdWVcbiAgICAgICAgPyBGbi5qb2luKFwiLFwiLCBwcm9wcy5zdHJpbmdMaXN0VmFsdWUpXG4gICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgdmFsdWU6IHByb3BzLnNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZVxuICAgICAgICA/IEZuLmpvaW4oXCIsXCIsIHByb3BzLnNlbnNpdGl2ZVN0cmluZ0xpc3RWYWx1ZSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG4gICAgdGhpcy5wYXJhbWV0ZXJOYW1lID0gdGhpcy5yZXNvdXJjZS5uYW1lO1xuICAgIHRoaXMucGFyYW1ldGVyQXJuID0gYXJuRm9yUGFyYW1ldGVyTmFtZSh0aGlzLCB0aGlzLnBhcmFtZXRlck5hbWUsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcGFyYW1ldGVyTmFtZSxcbiAgICAgIHNpbXBsZU5hbWU6IHByb3BzLnNpbXBsZU5hbWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLnBhcmFtZXRlclR5cGUgPSB0aGlzLnJlc291cmNlLnR5cGU7XG4gICAgdGhpcy5zdHJpbmdMaXN0VmFsdWUgPSBpc1NlbnNpdGl2ZVxuICAgICAgPyBGbi5zcGxpdChcIixcIiwgdGhpcy5yZXNvdXJjZS52YWx1ZSlcbiAgICAgIDogRm4uc3BsaXQoXCIsXCIsIHRoaXMucmVzb3VyY2UuaW5zZWN1cmVWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgd2hldGhlciBhIHN1cHBsaWVkIHZhbHVlIGNvbmZvcm1zIHRvIHRoZSBhbGxvd2VkUGF0dGVybiwgZ3JhbnRlZCBuZWl0aGVyIGlzIGFuIHVucmVzb2x2ZWQgdG9rZW4uXG4gKlxuICogQHBhcmFtIHZhbHVlICAgICAgICAgIHRoZSB2YWx1ZSB0byBiZSB2YWxpZGF0ZWQuXG4gKiBAcGFyYW0gYWxsb3dlZFBhdHRlcm4gdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2UgZm9yIHZhbGlkYXRpb24uXG4gKlxuICogQHRocm93cyBpZiB0aGUgYGB2YWx1ZWBgIGRvZXMgbm90IGNvbmZvcm0gdG8gdGhlIGBgYWxsb3dlZFBhdHRlcm5gYCBhbmQgbmVpdGhlciBpcyBhbiB1bnJlc29sdmVkIHRva2VuIChwZXJcbiAqICAgICAgICAgYGBjZGsudW5yZXNvbHZlZGBgKS5cbiAqL1xuZnVuY3Rpb24gX2Fzc2VydFZhbGlkVmFsdWUodmFsdWU6IHN0cmluZywgYWxsb3dlZFBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHZhbHVlKSB8fCBUb2tlbi5pc1VucmVzb2x2ZWQoYWxsb3dlZFBhdHRlcm4pKSB7XG4gICAgLy8gVW5hYmxlIHRvIHBlcmZvcm0gdmFsaWRhdGlvbnMgYWdhaW5zdCB1bnJlc29sdmVkIHRva2Vuc1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIW5ldyBSZWdFeHAoYWxsb3dlZFBhdHRlcm4pLnRlc3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFRoZSBzdXBwbGllZCB2YWx1ZSAoJHt2YWx1ZX0pIGRvZXMgbm90IG1hdGNoIHRoZSBzcGVjaWZpZWQgYWxsb3dlZFBhdHRlcm4gKCR7YWxsb3dlZFBhdHRlcm59KWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlSWRlbnRpdHlGb3JJbXBvcnRlZFZhbHVlKHBhcmFtZXRlck5hbWU6IHN0cmluZykge1xuICByZXR1cm4gYFNzbVBhcmFtZXRlclZhbHVlOiR7cGFyYW1ldGVyTmFtZX06Qzk2NTg0QjYtRjAwQS00NjRFLUFEMTktNTNBRkY0QjA1MTE4YDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQYXJhbWV0ZXJOYW1lKHBhcmFtZXRlck5hbWU6IHN0cmluZykge1xuICBpZiAoVG9rZW4uaXNVbnJlc29sdmVkKHBhcmFtZXRlck5hbWUpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwYXJhbWV0ZXJOYW1lLmxlbmd0aCA+IDIwNDgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJuYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAyMDQ4IGNoYXJhY3RlcnMuXCIpO1xuICB9XG4gIGlmICghcGFyYW1ldGVyTmFtZS5tYXRjaCgvXltcXC9cXHcuLV0rJC8pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYG5hbWUgbXVzdCBvbmx5IGNvbnRhaW4gbGV0dGVycywgbnVtYmVycywgYW5kIHRoZSBmb2xsb3dpbmcgNCBzeW1ib2xzIC4tXy87IGdvdCAke3BhcmFtZXRlck5hbWV9YCxcbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -68,5 +68,5 @@ class StreamGrants {
|
|
|
68
68
|
}
|
|
69
69
|
exports.StreamGrants = StreamGrants;
|
|
70
70
|
_a = JSII_RTTI_SYMBOL_1;
|
|
71
|
-
StreamGrants[_a] = { fqn: "terraconstructs.aws.storage.StreamGrants", version: "0.2.
|
|
71
|
+
StreamGrants[_a] = { fqn: "terraconstructs.aws.storage.StreamGrants", version: "0.2.5" };
|
|
72
72
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLWdyYW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3Mvc3RvcmFnZS9zdHJlYW0tZ3JhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsdUdBQXVHO0FBRXZHLDBDQUEwQztBQUUxQyw4QkFBOEI7QUEyQjlCOztHQUVHO0FBQ0gsTUFBYSxZQUFZO0lBS3ZCLFlBQVksS0FBd0I7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssRUFBRSxhQUFhLENBQUM7SUFDNUMsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLE9BQU8sQ0FBQyxPQUF1QixFQUFFLEdBQUcsT0FBaUI7UUFDMUQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTztZQUNQLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDbkMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksSUFBSSxDQUFDLE9BQXVCO1FBQ2pDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUM7WUFDOUIsT0FBTztZQUNQLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO1lBQ2pDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNwQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksSUFBSSxDQUFDLE9BQXVCO1FBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTyxFQUFFLEtBQUssQ0FBQyx3QkFBd0I7WUFDdkMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE5REgsb0NBK0RDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2Jsb2IvdjIuMjMzLjAvcGFja2FnZXMvYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiL2xpYi9zdHJlYW1zLWdyYW50cy50c1xuXG5pbXBvcnQgKiBhcyBwZXJtcyBmcm9tIFwiLi9keW5hbW9kYi1wZXJtc1wiO1xuaW1wb3J0ICogYXMga21zIGZyb20gXCIuLi9lbmNyeXB0aW9uXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcIi4uL2lhbVwiO1xuaW1wb3J0IHsgSVRhYmxlIH0gZnJvbSBcIi4vc2hhcmVkXCI7XG5cbi8qKlxuICogQ29uc3RydWN0aW9uIHByb3BlcnRpZXMgZm9yIFN0cmVhbUdyYW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUdyYW50c1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0aGlzIHN0cmVhbSBpcyBmb3JcbiAgICovXG4gIHJlYWRvbmx5IHRhYmxlOiBJVGFibGU7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIFN0cmVhbVxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGVTdHJlYW1Bcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGVuY3J5cHRpb24ga2V5IG9mIHRoZSB0YWJsZVxuICAgKlxuICAgKiBSZXF1aXJlZCBwZXJtaXNzaW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBrZXkgYXMgd2VsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBrZXlcbiAgICovXG4gIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcbn1cblxuLyoqXG4gKiBBIHNldCBvZiBwZXJtaXNzaW9ucyB0byBncmFudCBvbiBhIFRhYmxlIFN0cmVhbVxuICovXG5leHBvcnQgY2xhc3MgU3RyZWFtR3JhbnRzIHtcbiAgcHJpdmF0ZSByZWFkb25seSB0YWJsZTogSVRhYmxlO1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlU3RyZWFtQXJuOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IGttcy5JS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBTdHJlYW1HcmFudHNQcm9wcykge1xuICAgIHRoaXMudGFibGUgPSBwcm9wcy50YWJsZTtcbiAgICB0aGlzLnRhYmxlU3RyZWFtQXJuID0gcHJvcHMudGFibGVTdHJlYW1Bcm47XG4gICAgdGhpcy5lbmNyeXB0aW9uS2V5ID0gcHJvcHM/LmVuY3J5cHRpb25LZXk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBJQU0gcG9saWN5IHN0YXRlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyB0YWJsZSdzIHN0cmVhbSB0byBhblxuICAgKiBJQU0gcHJpbmNpcGFsJ3MgcG9saWN5LlxuICAgKlxuICAgKiBJZiBgZW5jcnlwdGlvbktleWAgaXMgcHJlc2VudCwgYXBwcm9wcmlhdGUgZ3JhbnRzIHRvIHRoZSBrZXkgbmVlZHMgdG8gYmUgYWRkZWRcbiAgICogc2VwYXJhdGVseSB1c2luZyB0aGUgYHRhYmxlLmVuY3J5cHRpb25LZXkuZ3JhbnQqYCBtZXRob2RzLlxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsIChuby1vcCBpZiB1bmRlZmluZWQpXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBzZXQgb2YgYWN0aW9ucyB0byBhbGxvdyAoaS5lLiBcImR5bmFtb2RiOkRlc2NyaWJlU3RyZWFtXCIsIFwiZHluYW1vZGI6R2V0UmVjb3Jkc1wiLCAuLi4pXG4gICAqL1xuICBwdWJsaWMgYWN0aW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLnRhYmxlU3RyZWFtQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLnRhYmxlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIFByaW5jaXBhbCB0byBsaXN0IHN0cmVhbXMgYXR0YWNoZWQgdG8gY3VycmVudCBkeW5hbW9kYiB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKi9cbiAgcHVibGljIGxpc3QoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnM6IFtcImR5bmFtb2RiOkxpc3RTdHJlYW1zXCJdLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbXCIqXCJdLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcm1pdHMgYW4gSUFNIHByaW5jaXBhbCBhbGwgc3RyZWFtIGRhdGEgcmVhZCBvcGVyYXRpb25zIGZvciB0aGlzXG4gICAqIHRhYmxlJ3Mgc3RyZWFtOlxuICAgKiBEZXNjcmliZVN0cmVhbSwgR2V0UmVjb3JkcywgR2V0U2hhcmRJdGVyYXRvciwgTGlzdFN0cmVhbXMuXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgdGhpcy5saXN0KGdyYW50ZWUpO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleT8uZ3JhbnQoZ3JhbnRlZSwgLi4ucGVybXMuS0VZX1JFQURfQUNUSU9OUyk7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9uczogcGVybXMuUkVBRF9TVFJFQU1fREFUQV9BQ1RJT05TLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy50YWJsZVN0cmVhbUFybl0sXG4gICAgICBzY29wZTogdGhpcy50YWJsZSxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -133,5 +133,5 @@ class TableGrants {
|
|
|
133
133
|
}
|
|
134
134
|
exports.TableGrants = TableGrants;
|
|
135
135
|
_a = JSII_RTTI_SYMBOL_1;
|
|
136
|
-
TableGrants[_a] = { fqn: "terraconstructs.aws.storage.TableGrants", version: "0.2.
|
|
136
|
+
TableGrants[_a] = { fqn: "terraconstructs.aws.storage.TableGrants", version: "0.2.5" };
|
|
137
137
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZ3JhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2F3cy9zdG9yYWdlL3RhYmxlLWdyYW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFHQUFxRztBQUVyRywwQ0FBMEM7QUFDMUMsNENBQXdDO0FBQ3hDLDhCQUE4QjtBQTJDOUI7O0dBRUc7QUFDSCxNQUFhLFdBQVc7SUFNdEIsWUFBWSxLQUF1QjtRQUpsQixTQUFJLEdBQWEsRUFBRSxDQUFDO1FBS25DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLGNBQWMsQ0FBQztRQUUzQyxNQUFNLEtBQUssR0FBRyxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLElBQUksR0FBRztZQUNWLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUTtZQUNuQixHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUN0QyxLQUFLLENBQUMsU0FBUyxDQUFDO2dCQUNkLE1BQU07Z0JBQ04sT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTO2FBQ25DLENBQUMsQ0FDSDtTQUNGLENBQUM7UUFFRixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsVUFBVSxD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LE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDakQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFVBQVUsQ0FDaEMsT0FBTyxFQUNQLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixFQUN6QixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FDM0IsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O0FBdkpILGtDQXdKQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjIzMy4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1keW5hbW9kYi9saWIvdGFibGUtZ3JhbnRzLnRzXG5cbmltcG9ydCAqIGFzIHBlcm1zIGZyb20gXCIuL2R5bmFtb2RiLXBlcm1zXCI7XG5pbXBvcnQgeyBBd3NTdGFjayB9IGZyb20gXCIuLi9hd3Mtc3RhY2tcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgeyBJVGFibGUgfSBmcm9tIFwiLi9zaGFyZWRcIjtcblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgVGFibGVHcmFudHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUYWJsZUdyYW50c1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSB0YWJsZSB0byBncmFudCBwZXJtaXNzaW9ucyBvblxuICAgKi9cbiAgcmVhZG9ubHkgdGFibGU6IElUYWJsZTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCByZWdpb25zIG90aGVyIHRoYW4gdGhlIG1haW4gb25lIHRoYXQgdGhpcyB0YWJsZSBpcyByZXBsaWNhdGVkIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcmVnaW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgdGFibGUgaGFzIGluZGV4ZXNcbiAgICpcbiAgICogSWYgc28sIHBlcm1pc3Npb25zIGFyZSBncmFudGVkIG9uIGFsbCB0YWJsZSBpbmRleGVzIGFzIHdlbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBoYXNJbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBlbmNyeXB0ZWQgcmVzb3VyY2Ugb24gd2hpY2ggYWN0aW9ucyB3aWxsIGJlIGFsbG93ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwZXJtaXNzaW9uIGlzIGFkZGVkIHRvIHRoZSBLTVMga2V5LCBldmVuIGlmIGl0IGV4aXN0c1xuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGVkUmVzb3VyY2U/OiBpYW0uSUVuY3J5cHRlZFJlc291cmNlO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb3VyY2Ugd2l0aCBwb2xpY3kgb24gd2hpY2ggYWN0aW9ucyB3aWxsIGJlIGFsbG93ZWRcbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyByZXNvdXJjZSBwb2xpY3kgaXMgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5UmVzb3VyY2U/OiBpYW0uSUF3c0NvbnN0cnVjdFdpdGhQb2xpY3k7XG59XG5cbi8qKlxuICogQSBzZXQgb2YgcGVybWlzc2lvbnMgdG8gZ3JhbnQgb24gYSBUYWJsZVxuICovXG5leHBvcnQgY2xhc3MgVGFibGVHcmFudHMge1xuICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlOiBJVGFibGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXJuczogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlbmNyeXB0ZWRSZXNvdXJjZT86IGlhbS5JRW5jcnlwdGVkUmVzb3VyY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgcG9saWN5UmVzb3VyY2U/OiBpYW0uSUF3c0NvbnN0cnVjdFdpdGhQb2xpY3k7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IFRhYmxlR3JhbnRzUHJvcHMpIHtcbiAgICB0aGlzLnRhYmxlID0gcHJvcHMudGFibGU7XG4gICAgdGhpcy5lbmNyeXB0ZWRSZXNvdXJjZSA9IHByb3BzLmVuY3J5cHRlZFJlc291cmNlO1xuICAgIHRoaXMucG9saWN5UmVzb3VyY2UgPSBwcm9wcy5wb2xpY3lSZXNvdXJjZTtcblxuICAgIGNvbnN0IHN0YWNrID0gQXdzU3RhY2sub2ZBd3NDb25zdHJ1Y3QodGhpcy50YWJsZSk7XG5cbiAgICB0aGlzLmFybnMgPSBbXG4gICAgICB0aGlzLnRhYmxlLnRhYmxlQXJuLFxuICAgICAgLi4uKHByb3BzLnJlZ2lvbnMgPz8gW10pLm1hcCgocmVnaW9uKSA9PlxuICAgICAgICBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICBzZXJ2aWNlOiBcImR5bmFtb2RiXCIsXG4gICAgICAgICAgcmVzb3VyY2U6IFwidGFibGVcIixcbiAgICAgICAgICByZXNvdXJjZU5hbWU6IHRoaXMudGFibGUudGFibGVOYW1lLFxuICAgICAgICB9KSxcbiAgICAgICksXG4gICAgXTtcblxuICAgIGlmIChwcm9wcy5oYXNJbmRleCkge1xuICAgICAgdGhpcy5hcm5zLnB1c2goLi4udGhpcy5hcm5zLm1hcCgoYXJuKSA9PiBgJHthcm59L2luZGV4LypgKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gSUFNIHBvbGljeSBzdGF0ZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdGFibGUgdG8gYW4gSUFNXG4gICAqIHByaW5jaXBhbCdzIHBvbGljeS5cbiAgICpcbiAgICogSWYgYGVuY3J5cHRpb25LZXlgIGlzIHByZXNlbnQsIGFwcHJvcHJpYXRlIGdyYW50cyB0byB0aGUga2V5IG5lZWRzIHRvIGJlIGFkZGVkXG4gICAqIHNlcGFyYXRlbHkgdXNpbmcgdGhlIGB0YWJsZS5lbmNyeXB0aW9uS2V5LmdyYW50KmAgbWV0aG9kcy5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCAobm8tb3AgaWYgdW5kZWZpbmVkKVxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgc2V0IG9mIGFjdGlvbnMgdG8gYWxsb3cgKGkuZS4gXCJkeW5hbW9kYjpQdXRJdGVtXCIsIFwiZHluYW1vZGI6R2V0SXRlbVwiLCAuLi4pXG4gICAqL1xuICBwdWJsaWMgYWN0aW9ucyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLnBvbGljeVJlc291cmNlXG4gICAgICA/IGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbE9yUmVzb3VyY2Uoe1xuICAgICAgICAgIGdyYW50ZWUsXG4gICAgICAgICAgYWN0aW9ucyxcbiAgICAgICAgICByZXNvdXJjZUFybnM6IHRoaXMuYXJucyxcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5wb2xpY3lSZXNvdXJjZSxcbiAgICAgICAgICAvLyBVc2Ugd2lsZGNhcmQgZm9yIHJlc291cmNlIHBvbGljeSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IHdoZW4gZ3JhbnRlZSBpcyBhIHJlc291cmNlIHByaW5jaXBhbFxuICAgICAgICAgIC8vIChlLmcuLCBBY2NvdW50Um9vdFByaW5jaXBhbCkuIFRoaXMgZm9sbG93cyB0aGUgc2FtZSBwYXR0ZXJuIGFzIEtNUyAoYXdzLWttcy9saWIva2V5LnRzKS5cbiAgICAgICAgICAvLyByZXNvdXJjZUFybnMgaXMgdXNlZCBmb3IgcHJpbmNpcGFsIHBvbGljaWVzLCByZXNvdXJjZVNlbGZBcm5zIGlzIHVzZWQgZm9yIHJlc291cmNlIHBvbGljaWVzLlxuICAgICAgICAgIHJlc291cmNlU2VsZkFybnM6IFtcIipcIl0sXG4gICAgICAgIH0pXG4gICAgICA6IGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgICAgZ3JhbnRlZSxcbiAgICAgICAgICBhY3Rpb25zLFxuICAgICAgICAgIHJlc291cmNlQXJuczogdGhpcy5hcm5zLFxuICAgICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgcmVhZCBvcGVyYXRpb25zIGZyb20gdGhpcyB0YWJsZTpcbiAgICogQmF0Y2hHZXRJdGVtLCBHZXRSZWNvcmRzLCBHZXRTaGFyZEl0ZXJhdG9yLCBRdWVyeSwgR2V0SXRlbSwgU2NhbiwgRGVzY3JpYmVUYWJsZS5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIHB1YmxpYyByZWFkRGF0YShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgYWN0aW9ucyA9IFsuLi5wZXJtcy5SRVNPVVJDRV9SRUFEX0RBVEFfQUNUSU9OUywgcGVybXMuREVTQ1JJQkVfVEFCTEVdO1xuICAgIHRoaXMuZW5jcnlwdGVkUmVzb3VyY2U/LmdyYW50T25LZXkoZ3JhbnRlZSwgLi4ucGVybXMuS0VZX1JFQURfQUNUSU9OUyk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hY3Rpb25zKGdyYW50ZWUsIC4uLmFjdGlvbnMpO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5jb21iaW5lKFxuICAgICAgaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgICAgZ3JhbnRlZSxcbiAgICAgICAgYWN0aW9uczogcGVybXMuUFJJTkNJUEFMX09OTFlfUkVBRF9EQVRBX0FDVElPTlMsXG4gICAgICAgIHJlc291cmNlQXJuczogdGhpcy5hcm5zLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgYWxsIGRhdGEgd3JpdGUgb3BlcmF0aW9ucyB0byB0aGlzIHRhYmxlOlxuICAgKiBCYXRjaFdyaXRlSXRlbSwgUHV0SXRlbSwgVXBkYXRlSXRlbSwgRGVsZXRlSXRlbSwgRGVzY3JpYmVUYWJsZS5cbiAgICpcbiAgICogQXBwcm9wcmlhdGUgZ3JhbnRzIHdpbGwgYWxzbyBiZSBhZGRlZCB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBLTVMga2V5XG4gICAqIGlmIG9uZSB3YXMgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbCB0byBncmFudCBhY2Nlc3MgdG9cbiAgICovXG4gIHB1YmxpYyB3cml0ZURhdGEoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBbLi4ucGVybXMuV1JJVEVfREFUQV9BQ1RJT05TLCBwZXJtcy5ERVNDUklCRV9UQUJMRV07XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5hY3Rpb25zKGdyYW50ZWUsIC4uLmFjdGlvbnMpO1xuICAgIHRoaXMuZW5jcnlwdGVkUmVzb3VyY2U/LmdyYW50T25LZXkoXG4gICAgICBncmFudGVlLFxuICAgICAgLi4ucGVybXMuS0VZX1JFQURfQUNUSU9OUyxcbiAgICAgIC4uLnBlcm1zLktFWV9XUklURV9BQ1RJT05TLFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtaXRzIGFuIElBTSBwcmluY2lwYWwgdG8gYWxsIGRhdGEgcmVhZC93cml0ZSBvcGVyYXRpb25zIHRvIHRoaXMgdGFibGUuXG4gICAqIEJhdGNoR2V0SXRlbSwgR2V0UmVjb3JkcywgR2V0U2hhcmRJdGVyYXRvciwgUXVlcnksIEdldEl0ZW0sIFNjYW4sXG4gICAqIEJhdGNoV3JpdGVJdGVtLCBQdXRJdGVtLCBVcGRhdGVJdGVtLCBEZWxldGVJdGVtLCBEZXNjcmliZVRhYmxlXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgcmVhZFdyaXRlRGF0YShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgYWN0aW9ucyA9IFtcbiAgICAgIC4uLnBlcm1zLlJFU09VUkNFX1JFQURfREFUQV9BQ1RJT05TLFxuICAgICAgLi4ucGVybXMuV1JJVEVfREFUQV9BQ1RJT05TLFxuICAgICAgcGVybXMuREVTQ1JJQkVfVEFCTEUsXG4gICAgXTtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmFjdGlvbnMoZ3JhbnRlZSwgLi4uYWN0aW9ucyk7XG4gICAgdGhpcy5lbmNyeXB0ZWRSZXNvdXJjZT8uZ3JhbnRPbktleShcbiAgICAgIGdyYW50ZWUsXG4gICAgICAuLi5wZXJtcy5LRVlfUkVBRF9BQ1RJT05TLFxuICAgICAgLi4ucGVybXMuS0VZX1dSSVRFX0FDVElPTlMsXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQuY29tYmluZShcbiAgICAgIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICAgIGdyYW50ZWUsXG4gICAgICAgIGFjdGlvbnM6IHBlcm1zLlBSSU5DSVBBTF9PTkxZX1JFQURfREFUQV9BQ1RJT05TLFxuICAgICAgICByZXNvdXJjZUFybnM6IHRoaXMuYXJucyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUGVybWl0cyBhbGwgRHluYW1vREIgb3BlcmF0aW9ucyAoXCJkeW5hbW9kYjoqXCIpIHRvIGFuIElBTSBwcmluY2lwYWwuXG4gICAqXG4gICAqIEFwcHJvcHJpYXRlIGdyYW50cyB3aWxsIGFsc28gYmUgYWRkZWQgdG8gdGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleVxuICAgKiBpZiBvbmUgd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgYWNjZXNzIHRvXG4gICAqL1xuICBwdWJsaWMgZnVsbEFjY2VzcyhncmFudGVlOiBpYW0uSUdyYW50YWJsZSkge1xuICAgIGNvbnN0IGFjdGlvbnMgPSBbXCJkeW5hbW9kYjoqXCJdO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuYWN0aW9ucyhncmFudGVlLCAuLi5hY3Rpb25zKTtcbiAgICB0aGlzLmVuY3J5cHRlZFJlc291cmNlPy5ncmFudE9uS2V5KFxuICAgICAgZ3JhbnRlZSxcbiAgICAgIC4uLnBlcm1zLktFWV9SRUFEX0FDVElPTlMsXG4gICAgICAuLi5wZXJtcy5LRVlfV1JJVEVfQUNUSU9OUyxcbiAgICApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|