terraconstructs 0.2.3 → 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 +3475 -3110
- 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 +18 -2
- package/lib/aws/aws-stack.js +21 -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 +13 -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 +47 -21
- 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 +48 -5
- package/lib/aws/compute/vpc.js +316 -160
- package/lib/aws/compute/vpn.js +8 -8
- package/lib/aws/context-provider.d.ts +117 -0
- package/lib/aws/context-provider.js +141 -0
- package/lib/aws/cx-api.d.ts +171 -0
- package/lib/aws/cx-api.js +23 -3
- 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 +19 -17
- package/setup.js +2 -2
|
@@ -6,8 +6,8 @@ exports.verifyCodeConfig = verifyCodeConfig;
|
|
|
6
6
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
7
7
|
// source: https://github.com/cdktf-plus/cdktf-plus/blob/586aabad3ab2fb2a2e93e05ed33f94474ebe9397/packages/%40cdktf-plus/aws/lib/aws-lambda-function/index.ts
|
|
8
8
|
// update to align closer with https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-lambda/lib/function.ts
|
|
9
|
-
const provider_aws_1 = require("@
|
|
10
|
-
const
|
|
9
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
10
|
+
const cdktn_1 = require("cdktn");
|
|
11
11
|
const errors_1 = require("../../errors");
|
|
12
12
|
const arn_1 = require("../arn");
|
|
13
13
|
const aws_stack_1 = require("../aws-stack");
|
|
@@ -287,7 +287,7 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
287
287
|
allowedSpecialCharacters: "+",
|
|
288
288
|
maxLength: 64,
|
|
289
289
|
});
|
|
290
|
-
if (functionName && !
|
|
290
|
+
if (functionName && !cdktn_1.Token.isUnresolved(functionName)) {
|
|
291
291
|
if (functionName.length > 64) {
|
|
292
292
|
throw new errors_1.ValidationError(`Function name can not be longer than 64 characters but has ${functionName.length} characters.`, this);
|
|
293
293
|
}
|
|
@@ -295,7 +295,7 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
295
295
|
throw new errors_1.ValidationError(`Function name ${functionName} can contain only letters, numbers, hyphens, or underscores with no spaces.`, this);
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
|
-
if (description && !
|
|
298
|
+
if (description && !cdktn_1.Token.isUnresolved(description)) {
|
|
299
299
|
if (description.length > 256) {
|
|
300
300
|
throw new errors_1.ValidationError(`Function description can not be longer than 256 characters but has ${description.length} characters.`, this);
|
|
301
301
|
}
|
|
@@ -377,7 +377,7 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
377
377
|
// TODO: Do not set this at all if no environment variables are set (ComplexList can't be IResolvable)
|
|
378
378
|
// ref: https://github.com/aws/aws-cdk/blob/v2.156.0/packages/aws-cdk-lib/aws-lambda/lib/function.ts#L1467
|
|
379
379
|
environment: {
|
|
380
|
-
variables:
|
|
380
|
+
variables: cdktn_1.Lazy.anyValue({
|
|
381
381
|
produce: (_context) => {
|
|
382
382
|
return this.environment;
|
|
383
383
|
},
|
|
@@ -441,10 +441,10 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
441
441
|
roleArn: this.role.roleArn,
|
|
442
442
|
// only known at synth time
|
|
443
443
|
// explicit `null` required to avoid syntax errors when using stringValue && "undefined"
|
|
444
|
-
url:
|
|
444
|
+
url: cdktn_1.Lazy.anyValue({
|
|
445
445
|
produce: () => this._url ?? null,
|
|
446
446
|
}),
|
|
447
|
-
defaultSecurityGroup:
|
|
447
|
+
defaultSecurityGroup: cdktn_1.Lazy.anyValue({
|
|
448
448
|
produce: () => this._securityGroup?.id ?? null,
|
|
449
449
|
}),
|
|
450
450
|
};
|
|
@@ -732,7 +732,7 @@ class LambdaFunction extends function_base_1.LambdaFunctionBase {
|
|
|
732
732
|
}
|
|
733
733
|
exports.LambdaFunction = LambdaFunction;
|
|
734
734
|
_a = JSII_RTTI_SYMBOL_1;
|
|
735
|
-
LambdaFunction[_a] = { fqn: "terraconstructs.aws.compute.LambdaFunction", version: "0.2.
|
|
735
|
+
LambdaFunction[_a] = { fqn: "terraconstructs.aws.compute.LambdaFunction", version: "0.2.5" };
|
|
736
736
|
/**
|
|
737
737
|
* Given an opaque (token) ARN, returns a TF expression that extracts the function
|
|
738
738
|
* name from the ARN.
|
|
@@ -868,4 +868,4 @@ function undefinedIfNoKeys(struct) {
|
|
|
868
868
|
const allUndefined = Object.values(struct).every((val) => val === undefined);
|
|
869
869
|
return allUndefined ? undefined : struct;
|
|
870
870
|
}
|
|
871
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXc3Q0EsNENBNEJDOztBQXA5Q0QsNkpBQTZKO0FBQzdKLDJIQUEySDtBQUMzSCxzREFNNkI7QUFDN0IsaUNBQWtFO0FBRWxFLHlDQUF3RTtBQUN4RSxnQ0FBd0M7QUFDeEMsNENBQXdDO0FBQ3hDLG9EQUFpRDtBQUNqRCxpREFBOEM7QUFLOUMsbURBS3lCO0FBR3pCLHVDQUFvQztBQUNwQyx1Q0FBb0M7QUFDcEMscURBQWlFO0FBQ2pFLGlDQUFrQztBQUVsQyw2Q0FBMEM7QUFDMUMseUNBQXlDO0FBQ3pDLDhCQUE4QjtBQUM5QixzQ0FBMEM7QUFDMUMsK0NBQTRDO0FBbVY1QywyQkFBMkI7QUFFM0IsTUFBTTtBQUNOLHdCQUF3QjtBQUN4QixNQUFNO0FBQ04scUVBQXFFO0FBRXJFLFFBQVE7QUFDUixxREFBcUQ7QUFDckQsUUFBUTtBQUNSLDJEQUEyRDtBQUMzRCxJQUFJO0FBRUo7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsa0NBQWtCO0lBQ3BELDZEQUE2RDtJQUU3RDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNoQiwyQ0FBMkM7UUFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQzVCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixZQUFvQjtRQUVwQixPQUFPLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3RELFdBQVcsRUFBRSxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BELE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsWUFBWSxF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O1FBQzVELE1BQU0sSUFBSSxnQ0FBdUIsQ0FDL0IsaUZBQWlGLENBQ2xGLENBQUM7SUFDSixDQUFDO0lBRUQsMERBQTBEO0lBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUksZ0NBQXVCLENBQy9CLGlDQUFpQyxLQUFLLENBQUMsT0FBUSxDQUFDLElBQUksRUFBRSxDQUN2RCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixNQUFTO0lBRVQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUM3RSxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2Nka3RmLXBsdXMvY2RrdGYtcGx1cy9ibG9iLzU4NmFhYmFkM2FiMmZiMmEyZTkzZTA1ZWQzM2Y5NDQ3NGViZTkzOTcvcGFja2FnZXMvJTQwY2RrdGYtcGx1cy9hd3MvbGliL2F3cy1sYW1iZGEtZnVuY3Rpb24vaW5kZXgudHNcbi8vIHVwZGF0ZSB0byBhbGlnbiBjbG9zZXIgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9mdW5jdGlvbi50c1xuaW1wb3J0IHtcbiAgbGFtYmRhRnVuY3Rpb24sXG4gIGNsb3Vkd2F0Y2hMb2dHcm91cCxcbiAgc2VjdXJpdHlHcm91cCxcbiAgbGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nLFxuICBkYXRhQXdzTGFtYmRhRnVuY3Rpb24sXG59IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBJUmVzb2x2ZUNvbnRleHQsIExhenksIElSZXNvbHZhYmxlLCBUb2tlbiB9IGZyb20gXCJjZGt0ZlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIEFybiB9IGZyb20gXCIuLi9hcm5cIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCIuLi9sb2ctcmV0ZW50aW9uXCI7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUgfSBmcm9tIFwiLi9hcmNoaXRlY3R1cmVcIjtcbmltcG9ydCB7IENvZGUsIENvZGVDb25maWcgfSBmcm9tIFwiLi9jb2RlXCI7XG5pbXBvcnQgeyBFdmVudEludm9rZUNvbmZpZ09wdGlvbnMgfSBmcm9tIFwiLi9ldmVudC1pbnZva2UtY29uZmlnXCI7XG5pbXBvcnQgeyBJRXZlbnRTb3VyY2VNYXBwaW5nIH0gZnJvbSBcIi4vZXZlbnQtc291cmNlLW1hcHBpbmdcIjtcbmltcG9ydCB7IEFsaWFzT3B0aW9ucywgQWxpYXMgfSBmcm9tIFwiLi9mdW5jdGlvbi1hbGlhc1wiO1xuaW1wb3J0IHtcbiAgTGFtYmRhRnVuY3Rpb25CYXNlLFxuICBJRnVuY3Rpb24sXG4gIEZ1bmN0aW9uQXR0cmlidXRlcyxcbiAgSUV2ZW50U291cmNlLFxufSBmcm9tIFwiLi9mdW5jdGlvbi1iYXNlXCI7XG5pbXBvcnQgeyBGdW5jdGlvblVybCwgRnVuY3Rpb25VcmxPcHRpb25zIH0gZnJvbSBcIi4vZnVuY3Rpb24tdXJsXCI7XG5pbXBvcnQgeyBWcGNDb25maWcgfSBmcm9tIFwiLi9mdW5jdGlvbi12cGMtY29uZmlnLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJcIjtcbmltcG9ydCB7IFJ1bnRpbWUgfSBmcm9tIFwiLi9ydW50aW1lXCI7XG5pbXBvcnQgeyBJU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwXCI7XG5pbXBvcnQgeyBhZGRBbGlhcyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IElWcGMsIFN1Ym5ldFNlbGVjdGlvbiB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbi8vIGltcG9ydCB7IEZuIH0gZnJvbSBcIi4uLy4uL3RlcnJhLWZ1bmNcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgeyBJUXVldWUsIFF1ZXVlIH0gZnJvbSBcIi4uL25vdGlmeVwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBBV1MgTGFtYmRhIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIExhbWJkYSBhcm4gb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSBSb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBpZiBlbmFibGVkXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBzdHJpbmcgfCBJUmVzb2x2YWJsZTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgb2YgdGhlIGZ1bmN0aW9uIGlmIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRTZWN1cml0eUdyb3VwPzogc3RyaW5nIHwgSVJlc29sdmFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25PcHRpb25zIGV4dGVuZHMgRXZlbnRJbnZva2VDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZvcmNlIGZ1bmN0aW9uIG5hbWUgKGZvciBhZG9wdGlvbiBvZiBleGlzdGluZyByZXNvdXJjZXMpLlxuICAgKlxuICAgKiBQcmVmZXIgdG8gdXNlIGZ1bmN0aW9uTmFtZVByZWZpeC5cbiAgICpcbiAgICogVXNlIFtUZXJyYWZvcm0gUmVzb3VyY2UgTWV0YSBBcmd1bWVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL3Jlc291cmNlcy9zeW50YXgjbWV0YS1hcmd1bWVudHMpXG4gICAqIHRvIGNvbnRyb2wgbGlmZWN5Y2xlIHdoZW4gcmVwbGFjaW5nIHRoZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiBvbWl0dGVkLCBSZWZlciB0byBgZnVuY3Rpb25OYW1lUHJlZml4YC5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIHByZWZpeCBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEdyaWQgZ2VuZXJhdGVzIGEgdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXRcbiAgICogSUQgZm9yIHRoZSBmdW5jdGlvbidzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWVQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEtleS12YWx1ZSBwYWlycyB0aGF0IExhbWJkYSBjYWNoZXMgYW5kIG1ha2VzIGF2YWlsYWJsZSBmb3IgeW91ciBMYW1iZGFcbiAgICogZnVuY3Rpb25zLiBVc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGFwcGx5IGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgc3VjaFxuICAgKiBhcyB0ZXN0IGFuZCBwcm9kdWN0aW9uIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25zLCB3aXRob3V0IGNoYW5naW5nIHlvdXJcbiAgICogTGFtYmRhIGZ1bmN0aW9uIHNvdXJjZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB3aGF0IHlvdXIgTGFtYmRhIEZ1bmN0aW9uIGRvZXMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGlzIGxhbWJkYSBmdW5jdGlvbi5cbiAgICogQGRlZmF1bHQgQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJhY2luZyBtb2RlIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGlhbSByb2xlIHdpbGwgcmVjZWl2ZSBwZXJtaXNzaW9uIHRvXG4gICAqIHdyaXRlIHRvIEFXUyBYLVJheS5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJhY2luZy5BQ1RJVkVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNpbmc/OiBUcmFjaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIHJldGVudGlvbiBwZXJpb2QgaW4gZGF5cy4gRGVmYXVsdHMgdG8gNy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ1JldGVudGlvbkluRGF5cz86IFJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW1vcnkgbGltaXQgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEyOC5cbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBleGVjdXRpb24gdGltZSAoaW4gc2Vjb25kcykgYWZ0ZXIgd2hpY2ggTGFtYmRhIHRlcm1pbmF0ZXNcbiAgICogdGhlIGZ1bmN0aW9uLiBCZWNhdXNlIHRoZSBleGVjdXRpb24gdGltZSBhZmZlY3RzIGNvc3QsIHNldCB0aGlzIHZhbHVlXG4gICAqIGJhc2VkIG9uIHRoZSBmdW5jdGlvbidzIGV4cGVjdGVkIGV4ZWN1dGlvbiB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIExheWVycyBmb3IgdGhlIExhbWJkYS5cbiAgICovXG4gIHJlYWRvbmx5IGxheWVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHBvbGljeSBzdGF0ZW1lbnRzIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBMYW1iZGEgUm9sZS5cbiAgICpcbiAgICogWW91IGNhbiBjYWxsIGBhZGRUb1JvbGVQb2xpY3lgIHRvIHRoZSBjcmVhdGVkIGxhbWJkYSB0byBhZGQgc3RhdGVtZW50cyBwb3N0IGNyZWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHBvbGljeSBzdGF0ZW1lbnRzIGFyZSBhZGRlZCB0byB0aGUgY3JlYXRlZCBMYW1iZGEgcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxQb2xpY3k/OiBpYW0uUG9saWN5U3RhdGVtZW50W107XG5cbiAgLyoqXG4gICAqIExhbWJkYSBleGVjdXRpb24gcm9sZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgcm9sZSB0aGF0IHdpbGwgYmUgYXNzdW1lZCBieSB0aGUgZnVuY3Rpb24gdXBvbiBleGVjdXRpb24uXG4gICAqIEl0IGNvbnRyb2xzIHRoZSBwZXJtaXNzaW9ucyB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGhhdmUuIFRoZSBSb2xlIG11c3RcbiAgICogYmUgYXNzdW1hYmxlIGJ5IHRoZSAnbGFtYmRhLmFtYXpvbmF3cy5jb20nIHNlcnZpY2UgcHJpbmNpcGFsLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBSb2xlIGF1dG9tYXRpY2FsbHkgaGFzIHBlcm1pc3Npb25zIGdyYW50ZWQgZm9yIExhbWJkYSBleGVjdXRpb24uIElmIHlvdVxuICAgKiBwcm92aWRlIGEgUm9sZSwgeW91IG11c3QgYWRkIHRoZSByZWxldmFudCBBV1MgbWFuYWdlZCBwb2xpY2llcyB5b3Vyc2VsZi5cbiAgICpcbiAgICogVGhlIHJlbGV2YW50IG1hbmFnZWQgcG9saWNpZXMgYXJlIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiIGFuZFxuICAgKiBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSB1bmlxdWUgcm9sZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhpcyBsYW1iZGEgZnVuY3Rpb24uXG4gICAqIEJvdGggc3VwcGxpZWQgYW5kIGdlbmVyYXRlZCByb2xlcyBjYW4gYWx3YXlzIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBgYWRkVG9Sb2xlUG9saWN5YC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIExhbWJkYSBGdW5jdGlvbnMgaW4gYSBwdWJsaWMgc3VibmV0IGNhbiBOT1QgYWNjZXNzIHRoZSBpbnRlcm5ldC5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gYWNrbm93bGVkZ2UgdGhpcyBsaW1pdGF0aW9uIGFuZCBzdGlsbCBwbGFjZSB0aGUgZnVuY3Rpb24gaW4gYSBwdWJsaWMgc3VibmV0LlxuICAgKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUyOTkyMDg1L3doeS1jYW50LWFuLWF3cy1sYW1iZGEtZnVuY3Rpb24taW5zaWRlLWEtcHVibGljLXN1Ym5ldC1pbi1hLXZwYy1jb25uZWN0LXRvLXRoZS81Mjk5NDg0MSM1Mjk5NDg0MVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dQdWJsaWNTdWJuZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWcgZm9yIG5ldHdvcmsgY29ubmVjdGl2aXR5IHRvIEFXUyByZXNvdXJjZXMgaW4gYSBWUEMsIHNwZWNpZnkgYSBsaXN0XG4gICAqIG9mIHN1Ym5ldCwgYW5kIG9wdGlvbmFsbHkgc2VjdXJpdHkgZ3JvdXBzLCBpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGlhbSByb2xlIHdpbGwgcmVjZWl2ZSBwZXJtaXNzaW9uIHRvXG4gICAqIG1hbmFnZSBFTklzIHdpdGhpbiB0aGUgcHJvdmlkZWQgbmV0d29yay5cbiAgICpcbiAgICogV2hlbiB5b3UgY29ubmVjdCBhIGZ1bmN0aW9uIHRvIGEgVlBDLCBpdCBjYW4gb25seSBhY2Nlc3MgcmVzb3VyY2VzIGFuZCB0aGUgaW50ZXJuZXQgdGhyb3VnaCB0aGF0IFZQQy5cbiAgICpcbiAgICogU2VlIFtWUEMgU2V0dGluZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2NvbmZpZ3VyYXRpb24tdnBjLmh0bWwpLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCwgdXNlIHZwYyBhbmQgb3RoZXIgcmVsYXRlZCBwcm9wZXJ0aWVzIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtDb25maWc/OiBWcGNDb25maWc7XG5cbiAgLyoqXG4gICAqIFZQQyBuZXR3b3JrIHRvIHBsYWNlIExhbWJkYSBuZXR3b3JrIGludGVyZmFjZXNcbiAgICpcbiAgICogU3BlY2lmeSB0aGlzIGlmIHRoZSBMYW1iZGEgZnVuY3Rpb24gbmVlZHMgdG8gYWNjZXNzIHJlc291cmNlcyBpbiBhIFZQQy5cbiAgICogVGhpcyBpcyByZXF1aXJlZCB3aGVuIGB2cGNTdWJuZXRzYCBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRnVuY3Rpb24gaXMgbm90IHBsYWNlZCB3aXRoaW4gYSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xuXG4gIC8qKlxuICAgKiBBbGxvd3Mgb3V0Ym91bmQgSVB2NiB0cmFmZmljIG9uIFZQQyBmdW5jdGlvbnMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIGR1YWwtc3RhY2sgc3VibmV0cy5cbiAgICpcbiAgICogT25seSB1c2VkIGlmICd2cGMnIGlzIHN1cHBsaWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byBwbGFjZSB0aGUgbmV0d29yayBpbnRlcmZhY2VzIHdpdGhpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBUaGlzIHJlcXVpcmVzIGB2cGNgIHRvIGJlIHNwZWNpZmllZCBpbiBvcmRlciBmb3IgaW50ZXJmYWNlcyB0byBhY3R1YWxseSBiZVxuICAgKiBwbGFjZWQgaW4gdGhlIHN1Ym5ldHMuIElmIGB2cGNgIGlzIG5vdCBzcGVjaWZ5LCB0aGlzIHdpbGwgcmFpc2UgYW4gZXJyb3IuXG4gICAqXG4gICAqIE5vdGU6IEludGVybmV0IGFjY2VzcyBmb3IgTGFtYmRhIEZ1bmN0aW9ucyByZXF1aXJlcyBhIE5BVCBHYXRld2F5LCBzbyBwaWNraW5nXG4gICAqIHB1YmxpYyBzdWJuZXRzIGlzIG5vdCBhbGxvd2VkICh1bmxlc3MgYGFsbG93UHVibGljU3VibmV0YCBpcyBzZXQgdG8gYHRydWVgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgVnBjIGRlZmF1bHQgc3RyYXRlZ3kgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc2VjdXJpdHkgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBMYW1iZGEncyBuZXR3b3JrIGludGVyZmFjZXMuXG4gICAqXG4gICAqIE9ubHkgdXNlZCBpZiAndnBjJyBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB0aGUgZnVuY3Rpb24gaXMgcGxhY2VkIHdpdGhpbiBhIFZQQyBhbmQgYSBzZWN1cml0eSBncm91cCBpc1xuICAgKiBub3Qgc3BlY2lmaWVkLCBlaXRoZXIgYnkgdGhpcyBvciBzZWN1cml0eUdyb3VwIHByb3AsIGEgZGVkaWNhdGVkIHNlY3VyaXR5XG4gICAqIGdyb3VwIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyB0aGUgTGFtYmRhIHRvIHNlbmQgYWxsIG5ldHdvcmsgdHJhZmZpYyAoZXhjZXB0IGlwdjYpXG4gICAqXG4gICAqIElmIHNldCB0byBmYWxzZSwgeW91IG11c3QgaW5kaXZpZHVhbGx5IGFkZCB0cmFmZmljIHJ1bGVzIHRvIGFsbG93IHRoZVxuICAgKiBMYW1iZGEgdG8gY29ubmVjdCB0byBuZXR3b3JrIHRhcmdldHMuXG4gICAqXG4gICAqIERvIG5vdCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkgaWYgdGhlIGBzZWN1cml0eUdyb3Vwc2Agb3IgYHNlY3VyaXR5R3JvdXBgIHByb3BlcnR5IGlzIHNldC5cbiAgICogSW5zdGVhZCwgY29uZmlndXJlIGBhbGxvd0FsbE91dGJvdW5kYCBkaXJlY3RseSBvbiB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IHRoZSBMYW1iZGEgdG8gc2VuZCBhbGwgaXB2NiBuZXR3b3JrIHRyYWZmaWNcbiAgICpcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZXJlIHdpbGwgb25seSBiZSBhIHNpbmdsZSBlZ3Jlc3MgcnVsZSB3aGljaCBhbGxvd3MgYWxsXG4gICAqIG91dGJvdW5kIGlwdjYgdHJhZmZpYy4gSWYgc2V0IHRvIGZhbHNlLCB5b3UgbXVzdCBpbmRpdmlkdWFsbHkgYWRkIHRyYWZmaWMgcnVsZXMgdG8gYWxsb3cgdGhlXG4gICAqIExhbWJkYSB0byBjb25uZWN0IHRvIG5ldHdvcmsgdGFyZ2V0cyB1c2luZyBpcHY2LlxuICAgKlxuICAgKiBEbyBub3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5IGlmIHRoZSBgc2VjdXJpdHlHcm91cHNgIG9yIGBzZWN1cml0eUdyb3VwYCBwcm9wZXJ0eSBpcyBzZXQuXG4gICAqIEluc3RlYWQsIGNvbmZpZ3VyZSBgYWxsb3dBbGxJcHY2T3V0Ym91bmRgIGRpcmVjdGx5IG9uIHRoZSBzZWN1cml0eSBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsSXB2Nk91dGJvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIFNRUyBETFEuXG4gICAqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gaWFtIHJvbGUgd2lsbCByZWNlaXZlIHBlcm1pc3Npb24gdG9cbiAgICogc2VuZCBtZXNzYWdlcyBvbiB0aGlzIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlYWRsZXR0ZXIgcXVldWVcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IElRdWV1ZTtcblxuICAvKipcbiAgICogRW5hYmxlZCBETFEuIElmIGBkZWFkTGV0dGVyUXVldWVgIGlzIHVuZGVmaW5lZCxcbiAgICogYW4gU1FTIHF1ZXVlIHdpdGggZGVmYXVsdCBvcHRpb25zIHdpbGwgYmUgZGVmaW5lZCBmb3IgeW91ciBGdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZSB1bmxlc3MgYGRlYWRMZXR0ZXJRdWV1ZWAgaXMgc2V0LCB3aGljaCBpbXBsaWVzIERMUSBpcyBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLy8gVE9ETzogcmUtYWRkIFNOUyBkZWFkTGV0dGVyVG9waWNcblxuICAvKipcbiAgICogRXZlbnQgc291cmNlcyBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIGFkZCBldmVudCBzb3VyY2VzIHVzaW5nIGBhZGRFdmVudFNvdXJjZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZXZlbnQgc291cmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50cz86IElFdmVudFNvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL3Jlc291cmNlcy9sYW1iZGFfZnVuY3Rpb24jcmVzZXJ2ZWRfY29uY3VycmVudF9leGVjdXRpb25zIExhbWJkYUZ1bmN0aW9uI3Jlc2VydmVkX2NvbmN1cnJlbnRfZXhlY3V0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRhZ3MgdG8gYXBwbHkgdG8gdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgaW5mb3JtcyB0aGUgQ0RLIHRoYXQgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIEFMUkVBRFkgSEFTIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnNcbiAgICogZm9yIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gZG8uIFdoZW4gbm90IGNvbmZpZ3VyZWQsIHRoZSBDREsgYXR0ZW1wdHMgdG8gYXV0by1kZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcmUgbmVjZXNzYXJ5IG9uIHRoZSBmdW5jdGlvbiB3aGVuIGdyYW50IEFQSXMgYXJlIHVzZWQuIElmIHRoZSBDREsgdHJpZWQgdG8gYWRkXG4gICAqIHBlcm1pc3Npb25zIG9uIGFuIGltcG9ydGVkIGxhbWJkYSwgaXQgd2lsbCBmYWlsLlxuICAgKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSAqT05MWSBJRiogeW91IGFyZSBjb21taXR0aW5nIHRvIG1hbmFnZSB0aGUgaW1wb3J0ZWQgZnVuY3Rpb24ncyBwZXJtaXNzaW9ucyBvdXRzaWRlIG9mXG4gICAqIENESy4gWW91IGFyZSBhY2tub3dsZWRnaW5nIHRoYXQgeW91ciBDREsgY29kZSBhbG9uZSB3aWxsIGhhdmUgaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGVcbiAgICogaW1wb3J0ZWQgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwUGVybWlzc2lvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsb2dnaW5nRm9ybWF0IGZvciB0aGUgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IExvZ2dpbmdGb3JtYXQuVEVYVFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ0Zvcm1hdD86IExvZ2dpbmdGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFwcGxpY2F0aW9uIGxvZyBsZXZlbCBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKiBAZGVmYXVsdCBBcHBsaWNhdGlvbkxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IGFwcGxpY2F0aW9uTG9nTGV2ZWw/OiBBcHBsaWNhdGlvbkxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzeXN0ZW0gbG9nIGxldmVsIGZvciB0aGUgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IFN5c3RlbUxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbUxvZ0xldmVsPzogU3lzdGVtTG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHB1Ymxpc2ggY3JlYXRpb24vY2hhbmdlIGFzIG5ldyBMYW1iZGEgRnVuY3Rpb24gVmVyc2lvbi5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy9sYXRlc3QvZG9jcy9yZXNvdXJjZXMvbGFtYmRhX2Z1bmN0aW9uI3B1Ymxpc2ggTGFtYmRhRnVuY3Rpb24jcHVibGlzaH1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2g/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25Qcm9wcyBleHRlbmRzIEZ1bmN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHlvdSBhcmUgdXBsb2FkaW5nLlxuICAgKiBGb3IgdmFsaWQgdmFsdWVzLCBzZWUgdGhlIFJ1bnRpbWUgcHJvcGVydHkgaW4gdGhlIEFXUyBMYW1iZGEgRGV2ZWxvcGVyXG4gICAqIEd1aWRlLlxuICAgKlxuICAgKiBVc2UgYFJ1bnRpbWUuRlJPTV9JTUFHRWAgd2hlbiBkZWZpbmluZyBhIGZ1bmN0aW9uIGZyb20gYSBEb2NrZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBydW50aW1lOiBSdW50aW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGNvZGUgb2YgeW91ciBMYW1iZGEgZnVuY3Rpb24uIFlvdSBjYW4gcG9pbnQgdG8gYSBmaWxlIGluIGFuXG4gICAqIEFtYXpvbiBTaW1wbGUgU3RvcmFnZSBTZXJ2aWNlIChBbWF6b24gUzMpIGJ1Y2tldCBvciBzcGVjaWZ5IHlvdXIgc291cmNlXG4gICAqIGNvZGUgYXMgaW5saW5lIHRleHQuXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBDb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdpdGhpbiB5b3VyIGNvZGUgdGhhdCBMYW1iZGEgY2FsbHMgdG8gZXhlY3V0ZVxuICAgKiB5b3VyIGZ1bmN0aW9uLiBUaGUgZm9ybWF0IGluY2x1ZGVzIHRoZSBmaWxlIG5hbWUuIEl0IGNhbiBhbHNvIGluY2x1ZGVcbiAgICogbmFtZXNwYWNlcyBhbmQgb3RoZXIgcXVhbGlmaWVycywgZGVwZW5kaW5nIG9uIHRoZSBydW50aW1lLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2ZvdW5kYXRpb24tcHJvZ21vZGVsLmh0bWwuXG4gICAqXG4gICAqIFVzZSBgSGFuZGxlci5GUk9NX0lNQUdFYCB3aGVuIGRlZmluaW5nIGEgZnVuY3Rpb24gZnJvbSBhIERvY2tlciBpbWFnZS5cbiAgICpcbiAgICogTk9URTogSWYgeW91IHNwZWNpZnkgeW91ciBzb3VyY2UgY29kZSBhcyBpbmxpbmUgdGV4dCBieSBzcGVjaWZ5aW5nIHRoZVxuICAgKiBaaXBGaWxlIHByb3BlcnR5IHdpdGhpbiB0aGUgQ29kZSBwcm9wZXJ0eSwgc3BlY2lmeSBpbmRleC5mdW5jdGlvbl9uYW1lIGFzXG4gICAqIHRoZSBoYW5kbGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xufVxuXG4vLyByZS1hZGQgZWMyLklDb25uZWN0YWJsZT9cblxuLy8gLyoqXG4vLyAgKiBBIExhbWJkYSBmdW5jdGlvbi5cbi8vICAqL1xuLy8gZXhwb3J0IGludGVyZmFjZSBJRnVuY3Rpb24gZXh0ZW5kcyBJQXdzQ29uc3RydWN0LCBpYW0uSUdyYW50YWJsZSB7XG5cbi8vICAgLyoqXG4vLyAgICAqIEFkZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGlzIGZ1bmN0aW9uLlxuLy8gICAgKi9cbi8vICAgYWRkRW52aXJvbm1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBJRnVuY3Rpb247XG4vLyB9XG5cbi8qKlxuICogUHJvdmlkZXMgYSBMYW1iZGEgRnVuY3Rpb24gcmVzb3VyY2UuIExhbWJkYSBhbGxvd3MgeW91IHRvIHRyaWdnZXIgZXhlY3V0aW9uXG4gKiBvZiBjb2RlIGluIHJlc3BvbnNlIHRvIGV2ZW50cyBpbiBBV1MsIGVuYWJsaW5nIHNlcnZlcmxlc3MgYmFja2VuZCBzb2x1dGlvbnMuXG4gKlxuICogVGhlIExhbWJkYSBGdW5jdGlvbiBpdHNlbGYgaW5jbHVkZXMgc291cmNlIGNvZGUgYW5kIHJ1bnRpbWUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGlzIENvbnN0cnVjdCBtYW5hZ2VzIHBlcm1pc3Npb25zIGFzIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIFByaW5jaXBhbCBpYW0gcG9saWN5LlxuICogVGhpcyB3b3JrcyBmb3Igc2FtZSBhY2NvdW50IHJlc291cmNlcywgYnV0IGZvciBjcm9zcy1hY2NvdW50IHJlc291cmNlcyxcbiAqIHlvdSBtYXkgbmVlZCB0byBtYW5hZ2UgYWNjZXNzIGFzIHBhcnQgb2YgdGhlIFJlc291cmNlIGlhbSBwb2xpY3kuXG4gKlxuICogQHJlc291cmNlIGF3c19sYW1iZGFfZnVuY3Rpb25cbiAqIEBiZWFjb24tY2xhc3MgY29tcHV0ZS5JRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgTGFtYmRhRnVuY3Rpb25CYXNlIGltcGxlbWVudHMgSUZ1bmN0aW9uIHtcbiAgLy8gVE9ETzogVGVycmFmb3JtIGF3c19sYW1iZGFfZnVuY3Rpb24gPT0gQ0RLIEZ1bmN0aW9uVmVyc2lvblxuXG4gIC8qKlxuICAgKiBMYXRlc3QgcHVibGlzaGVkIHZlcnNpb24gb2YgeW91ciBMYW1iZGEgRnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlzIHRoaXMgaWYgcHVibGlzaCBpcyBmYWxzZT8/XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UudmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBsYW1iZGEgZnVuY3Rpb24gaW50byB0aGUgVGVycmFDb25zdHJ1Y3Qgc3BlYyB1c2luZyBpdHMgbmFtZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRnVuY3Rpb25OYW1lKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgKTogSUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gTGFtYmRhRnVuY3Rpb24uZnJvbUZ1bmN0aW9uQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIGZ1bmN0aW9uQXJuOiBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogXCJsYW1iZGFcIixcbiAgICAgICAgcmVzb3VyY2U6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICB9KSxcbiAgICAgIHNhbWVFbnZpcm9ubWVudDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBsYW1iZGEgZnVuY3Rpb24gaW50byB0aGUgVGVycmFDb25zdHJ1Y3Qgc3BlYyB1c2luZyBpdHMgQVJOLlxuICAgKlxuICAgKiBGb3IgYEZ1bmN0aW9uLmFkZFBlcm1pc3Npb25zKClgIHRvIHdvcmsgb24gdGhpcyBpbXBvcnRlZCBsYW1iZGEsIG1ha2Ugc3VyZSB0aGF0IGlzXG4gICAqIGluIHRoZSBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBhcyB0aGUgc3RhY2sgeW91IGFyZSBpbXBvcnRpbmcgaXQgaW50by5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZ1bmN0aW9uQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvbkFybjogc3RyaW5nLFxuICApOiBJRnVuY3Rpb24ge1xuICAgIHJldHVybiBMYW1iZGFGdW5jdGlvbi5mcm9tRnVuY3Rpb25BdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBmdW5jdGlvbkFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTGFtYmRhIGZ1bmN0aW9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIGEgZnVuY3Rpb24gbm90IGRlZmluZWRcbiAgICogd2l0aGluIHRoaXMgc3RhY2suXG4gICAqXG4gICAqIEZvciBgRnVuY3Rpb24uYWRkUGVybWlzc2lvbnMoKWAgdG8gd29yayBvbiB0aGlzIGltcG9ydGVkIGxhbWJkYSwgc2V0IHRoZSBzYW1lRW52aXJvbm1lbnQgcHJvcGVydHkgdG8gdHJ1ZVxuICAgKiBpZiB0aGlzIGltcG9ydGVkIGxhbWJkYSBpcyBpbiB0aGUgc2FtZSBhY2NvdW50IGFuZCByZWdpb24gYXMgdGhlIHN0YWNrIHlvdSBhcmUgaW1wb3J0aW5nIGl0IGludG8uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIG5hbWUgb2YgdGhlIGxhbWJkYSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBmdW5jdGlvbiB0byBpbXBvcnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZ1bmN0aW9uQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEZ1bmN0aW9uQXR0cmlidXRlcyxcbiAgKTogSUZ1bmN0aW9uIHtcbiAgICBjb25zdCBmdW5jdGlvbkFybiA9IGF0dHJzLmZ1bmN0aW9uQXJuO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGV4dHJhY3ROYW1lRnJvbUFybihhdHRycy5mdW5jdGlvbkFybik7XG4gICAgY29uc3Qgcm9sZSA9IGF0dHJzLnJvbGU7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBMYW1iZGFGdW5jdGlvbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBkYXRhQXdzTGFtYmRhRnVuY3Rpb24uRGF0YUF3c0xhbWJkYUZ1bmN0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbkFybiA9IGZ1bmN0aW9uQXJuO1xuICAgICAgcHVibGljIGdldCBmdW5jdGlvblF1YWxpZmllZEludm9rZUFybigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB7IHJlZ2lvbiwgcGFydGl0aW9uIH0gPSBBcm4uc3BsaXQoXG4gICAgICAgICAgZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgYXJuOiR7cGFydGl0aW9ufTphcGlnYXRld2F5OiR7cmVnaW9ufTpsYW1iZGE6cGF0aC8yMDE1LTAzLTMxL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uQXJufS9pbnZvY2F0aW9uc2A7XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IGZ1bmN0aW9uSW52b2tlQXJuKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHsgcmVnaW9uLCBwYXJ0aXRpb24gfSA9IEFybi5zcGxpdChcbiAgICAgICAgICBmdW5jdGlvbkFybixcbiAgICAgICAgICBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGBhcm46JHtwYXJ0aXRpb259OmFwaWdhdGV3YXk6JHtyZWdpb259OmxhbWJkYTpwYXRoLzIwMTUtMDMtMzEvZnVuY3Rpb25zLyR7ZnVuY3Rpb25Bcm59L2ludm9jYXRpb25zYDtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IFJlc29sdmUgcm9sZSBhbmQgcHJpbmNpcGFsIHJlc29sdmUgZnJvbSBURiBkYXRhIHNvdXJjZT9cbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZSA9IHJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbnNOb2RlID0gdGhpcy5ub2RlO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIHJldHVybmVkLlxuICAgICAgICpcbiAgICAgICAqIElmIHF1YWxpZmllciBpcyBub3Qgc2V0LCB0aGlzIHdpbGwgcmVzb2x2ZSB0byB0aGUgbW9zdCByZWNlbnQgcHVibGlzaGVkIHZlcnNpb24uXG4gICAgICAgKiBJZiBubyBwdWJsaXNoZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gZXhpc3RzLCB2ZXJzaW9uIHdpbGwgcmVzb2x2ZSB0byBgJExBVEVTVGAuXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS52ZXJzaW9uO1xuICAgICAgfVxuICAgICAgLy8gRm9yY2UgdXNlciB0byBwcm92aWRlIGFyY2ggb3IgYXNzdW1lIFg4Nl82NFxuICAgICAgcHVibGljIHJlYWRvbmx5IGFyY2hpdGVjdHVyZSA9IGF0dHJzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0O1xuICAgICAgLy8gcHVibGljIGdldCBhcmNoaXRlY3R1cmUoKTogc3RyaW5nIHtcbiAgICAgIC8vICAgcmV0dXJuIEZuLmVsZW1lbnQodGhpcy5yZXNvdXJjZS5hcmNoaXRlY3R1cmVzLCAwKSBhcyBzdHJpbmc7XG4gICAgICAvLyB9XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VBcm5zRm9yR3JhbnRJbnZva2UgPSBbXG4gICAgICAgIHRoaXMuZnVuY3Rpb25Bcm4sXG4gICAgICAgIGAke3RoaXMuZnVuY3Rpb25Bcm59OipgLFxuICAgICAgXTtcbiAgICAgIHB1YmxpYyBnZXQgZnVuY3Rpb25PdXRwdXRzKCk6IEZ1bmN0aW9uT3V0cHV0cyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgYXJuOiB0aGlzLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIHJvbGVBcm46IHRoaXMucm9sZT8ucm9sZUFybiA/PyBcIlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbk91dHB1dHM7XG4gICAgICB9XG4gICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuQ3JlYXRlUGVybWlzc2lvbnMgPVxuICAgICAgICBhdHRycy5zYW1lRW52aXJvbm1lbnQgPz8gdGhpcy5faXNTdGFja0FjY291bnQoKTtcbiAgICAgIHByb3RlY3RlZCByZWFkb25seSBfc2tpcFBlcm1pc3Npb25zID0gYXR0cnMuc2tpcFBlcm1pc3Npb25zID8/IGZhbHNlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiBmdW5jdGlvbkFybixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9XG4gICAgICAgICAgcm9sZSB8fCBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBkYXRhQXdzTGFtYmRhRnVuY3Rpb24uRGF0YUF3c0xhbWJkYUZ1bmN0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyAvLyBUT0RPOiByZS1hZGQgc3VwcG9ydCBmb3IgRUMyIGNvbm5lY3Rpb25zXG4gICAgICAgIC8vIGlmIChhdHRycy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICAgIC8vICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgLy8gICAgIHNlY3VyaXR5R3JvdXBzOiBbYXR0cnMuc2VjdXJpdHlHcm91cF0sXG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc291cmNlOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBGdW5jdGlvbk91dHB1dHM7XG5cbiAgLyoqIFN0cm9uZ2x5IFR5cGVkIEZ1bmN0aW9uIE91dHB1dHMgKi9cbiAgcHVibGljIGdldCBmdW5jdGlvbk91dHB1dHMoKTogRnVuY3Rpb25PdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25PdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBmbyB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZ1bmN0aW9uQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UuYXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gZm8gdGhlIGZ1bmN0aW9uLlxuICAgKiAoaWYgdmVyc2lvbmluZyBpcyBlbmFibGVkIHZpYSBwdWJsaXNoID0gdHJ1ZSlcbiAgICovXG4gIHB1YmxpYyBnZXQgZnVuY3Rpb25RdWFsaWZpZWRBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5xdWFsaWZpZWRBcm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIEZ1bGx5IFF1YWxpZmllZCBJbnZva2UgQVJOIGZvIHRoZSBmdW5jdGlvbiB0byBiZSB1c2VkIGZyb20gQVBJIEdhdGV3YXkuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIHdpdGggQXV0aG9yaXplcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZnVuY3Rpb25RdWFsaWZpZWRJbnZva2VBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5xdWFsaWZpZWRJbnZva2VBcm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIEludm9rZSBBUk4gZm8gdGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZnJvbSBBUEkgR2F0ZXdheS5cbiAgICpcbiAgICogTk9URTogVXNlIHRoaXMgZm9yIEF1dGhvcml6ZXJzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZ1bmN0aW9uSW52b2tlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UuaW52b2tlQXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBMYW1iZGEgRnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgcnVubmluZyBhc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBVbmRlZmluZWQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBpbXBvcnRlZCB3aXRob3V0IGEgcm9sZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBjb25maWd1cmVkIGZvciB0aGlzIGxhbWJkYS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydW50aW1lOiBSdW50aW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgRExRIChhcyBxdWV1ZSkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgTGFtYmRhIEZ1bmN0aW9uICh0aGlzIGlzIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlPzogSVF1ZXVlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBjb25maWd1cmVkIGZvciB0aGlzIGxhbWJkYS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3Qgbm9kZSB3aGVyZSBwZXJtaXNzaW9ucyBhcmUgYXR0YWNoZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbnNOb2RlID0gdGhpcy5ub2RlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5DcmVhdGVQZXJtaXNzaW9ucyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgb2YgaW52b2NhdGlvbiBwcmluY2lwYWxzIHRvIGdyYW50cy4gVXNlZCB0byBkZS1kdXBlIGBncmFudEludm9rZSgpYCBjYWxscy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2ludm9jYXRpb25HcmFudHM6IFJlY29yZDxzdHJpbmcsIGlhbS5HcmFudD4gPSB7fTtcblxuICAvKipcbiAgICogTWFwcGluZyBvZiBmdWNudGlvbiBVUkwgaW52b2NhdGlvbiBwcmluY2lwYWxzIHRvIGdyYW50cy4gVXNlZCB0byBkZS1kdXBlIGBncmFudEludm9rZVVybCgpYCBjYWxscy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2Z1bmN0aW9uVXJsSW52b2NhdGlvbkdyYW50czogUmVjb3JkPHN0cmluZywgaWFtLkdyYW50PiA9IHt9O1xuXG4gIC8vIC8vIFRlcmFmb3JtIHByb3ZpZGVyIGZvciBBV1MgQXV0b21hdGljYWxseSBtYW5hZ2VzIEZ1bmN0aW9uIFZlcnNpb25pbmcgdGhyb3VnaCBjb2RlIGhhc2guLlxuICAvLyAvLyBuZWVkIHRvIGRyb3AgbW9zdCBvZiB0aGlzIHZlcnNpb24gbG9naWMuLlxuXG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFZlcnNpb25PcHRpb25zPzogVmVyc2lvbk9wdGlvbnM7XG4gIC8vIHByaXZhdGUgX2N1cnJlbnRWZXJzaW9uPzogVmVyc2lvbjtcbiAgLy8gLyoqXG4gIC8vICAqIFJldHVybnMgYSBgbGFtYmRhLlZlcnNpb25gIHdoaWNoIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzXG4gIC8vICAqIExhbWJkYSBmdW5jdGlvbi4gQSBuZXcgdmVyc2lvbiB3aWxsIGJlIGNyZWF0ZWQgZXZlcnkgdGltZSB0aGUgZnVuY3Rpb24nc1xuICAvLyAgKiBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG4gIC8vICAqXG4gIC8vICAqIFlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGZvciB0aGlzIHZlcnNpb24gdXNpbmcgdGhlIGBjdXJyZW50VmVyc2lvbk9wdGlvbnNgXG4gIC8vICAqIHByb3Agd2hlbiBpbml0aWFsaXppbmcgdGhlIGBsYW1iZGEuRnVuY3Rpb25gLlxuICAvLyAgKi9cbiAgLy8gcHVibGljIGdldCBjdXJyZW50VmVyc2lvbigpOiBWZXJzaW9uIHtcbiAgLy8gICBpZiAodGhpcy5fY3VycmVudFZlcnNpb24pIHtcbiAgLy8gICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmVyc2lvbjtcbiAgLy8gICB9XG5cbiAgLy8gICAvLyBpZiAodGhpcy5fd2FybklmQ3VycmVudFZlcnNpb25DYWxsZWQpIHtcbiAgLy8gICAvLyAgIHRoaXMud2Fybkludm9rZUZ1bmN0aW9uUGVybWlzc2lvbnModGhpcyk7XG4gIC8vICAgLy8gfVxuXG4gIC8vICAgdGhpcy5fY3VycmVudFZlcnNpb24gPSBuZXcgVmVyc2lvbih0aGlzLCBcIkN1cnJlbnRWZXJzaW9uXCIsIHtcbiAgLy8gICAgIGxhbWJkYTogdGhpcyxcbiAgLy8gICAgIC4uLnRoaXMuY3VycmVudFZlcnNpb25PcHRpb25zLFxuICAvLyAgIH0pO1xuXG4gIC8vICAgLy8gb3ZlcnJpZGUgdGhlIHZlcnNpb24ncyBsb2dpY2FsIElEIHdpdGggYSBsYXp5IHN0cmluZyB3aGljaCBpbmNsdWRlcyB0aGVcbiAgLy8gICAvLyBoYXNoIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYsIHNvIGEgbmV3IHZlcnNpb24gcmVzb3VyY2UgaXMgY3JlYXRlZCB3aGVuXG4gIC8vICAgLy8gdGhlIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cbiAgLy8gICBjb25zdCBjZm4gPSB0aGlzLl9jdXJyZW50VmVyc2lvbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBUZXJyYWZvcm1SZXNvdXJjZTtcbiAgLy8gICBjb25zdCBvcmlnaW5hbExvZ2ljYWxJZCA9IHRoaXMuc3RhY2sucmVzb2x2ZShjZm4ubG9naWNhbElkKSBhcyBzdHJpbmc7XG5cbiAgLy8gICBjZm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gIC8vICAgICBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgLy8gICAgICAgcHJvZHVjZTogKCkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGhhc2ggPSBjYWxjdWxhdGVGdW5jdGlvbkhhc2godGhpcywgdGhpcy5oYXNoTWl4aW5zLmpvaW4oXCJcIikpO1xuICAvLyAgICAgICAgIGNvbnN0IGxvZ2ljYWxJZCA9IHRyaW1Gcm9tU3RhcnQob3JpZ2luYWxMb2dpY2FsSWQsIDI1NSAtIDMyKTtcbiAgLy8gICAgICAgICByZXR1cm4gYCR7bG9naWNhbElkfSR7aGFzaH1gO1xuICAvLyAgICAgICB9LFxuICAvLyAgICAgfSksXG4gIC8vICAgKTtcblxuICAvLyAgIHJldHVybiB0aGlzLl9jdXJyZW50VmVyc2lvbjtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOKHMpIHRvIHB1dCBpbnRvIHRoZSByZXNvdXJjZSBmaWVsZCBvZiB0aGUgZ2VuZXJhdGVkIElBTSBwb2xpY3kgZm9yIGdyYW50SW52b2tlKClcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VBcm5zRm9yR3JhbnRJbnZva2UoKSB7XG4gICAgLy8gVE9ETzogc2hvdWxkIHRoaXMgYmUgcXVhbGlmaWVkQXJuIG9yIHF1YWxpZmllZEludm9rZUFybj9cbiAgICAvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvbGFtYmRhX2Z1bmN0aW9uI3F1YWxpZmllZF9hcm5cbiAgICByZXR1cm4gW3RoaXMuZnVuY3Rpb25Bcm4sIHRoaXMuZnVuY3Rpb25RdWFsaWZpZWRJbnZva2VBcm5dO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX2xvZ0dyb3VwOiBjbG91ZHdhdGNoTG9nR3JvdXAuQ2xvdWR3YXRjaExvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoaXMgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbnZpcm9ubWVudDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gIHByaXZhdGUgX3VybD86IHN0cmluZztcbiAgLyoqXG4gICAqIEhUVFAgRW5kcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb24gaWYgZGVmaW5lZC5cbiAgICpcbiAgICogdXNlIGBhZGRGdW5jdGlvblVybGAgdG8gZW5hYmxlIEVuZHBvaW50LlxuICAgKi9cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXZlbnRTb3VyY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiBsYW1iZGFFdmVudFNvdXJjZU1hcHBpbmcuTGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nO1xuICB9ID0ge307XG4gIHB1YmxpYyBnZXQgZXZlbnRTb3VyY2VzKCk6IGxhbWJkYUV2ZW50U291cmNlTWFwcGluZy5MYW1iZGFFdmVudFNvdXJjZU1hcHBpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fZXZlbnRTb3VyY2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlY3VyaXR5R3JvdXA/OiBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXA7XG4gIHB1YmxpYyBnZXQgc2VjdXJpdHlHcm91cCgpOiBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZWN1cml0eUdyb3VwO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBuYW1lLCBwcm9wcyk7XG5cbiAgICBjb25zdCB7XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGVudmlyb25tZW50OiB2YXJpYWJsZXMsXG4gICAgICBsb2dSZXRlbnRpb25JbkRheXMgPSBSZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgbWVtb3J5U2l6ZSA9IDEyOCxcbiAgICAgIHRpbWVvdXQgPSBEdXJhdGlvbi5zZWNvbmRzKDMpLFxuICAgICAgbGF5ZXJzLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvciBBUk4gb2YgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICAgKiBpcyBsaW1pdGVkIHRvIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLlxuICAgICAqXG4gICAgICogQVJOIFBhdHRlcm46IChbYS16QS1aMC05LV9dKykoOihcXCRMQVRFU1R8W2EtekEtWjAtOS1fXSspKT9cbiAgICAgKi9cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPVxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lID8/XG4gICAgICB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZVByZWZpeCh0aGlzLCB7XG4gICAgICAgIHByZWZpeDogcHJvcHMuZnVuY3Rpb25OYW1lUHJlZml4ID8/IHRoaXMuZ3JpZFVVSUQgKyBcIi1cIixcbiAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiBcIitcIixcbiAgICAgICAgbWF4TGVuZ3RoOiA2NCxcbiAgICAgIH0pO1xuXG4gICAgaWYgKGZ1bmN0aW9uTmFtZSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGZ1bmN0aW9uTmFtZSkpIHtcbiAgICAgIGlmIChmdW5jdGlvbk5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgRnVuY3Rpb24gbmFtZSBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMgYnV0IGhhcyAke2Z1bmN0aW9uTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlthLXpBLVowLTktX10rJC8udGVzdChmdW5jdGlvbk5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYEZ1bmN0aW9uIG5hbWUgJHtmdW5jdGlvbk5hbWV9IGNhbiBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVucywgb3IgdW5kZXJzY29yZXMgd2l0aCBubyBzcGFjZXMuYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdGlvbiAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGRlc2NyaXB0aW9uKSkge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBGdW5jdGlvbiBkZXNjcmlwdGlvbiBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzIGJ1dCBoYXMgJHtkZXNjcmlwdGlvbi5sZW5ndGh9IGNoYXJhY3RlcnMuYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbmFnZWRQb2xpY2llcyA9IG5ldyBBcnJheTxpYW0uSU1hbmFnZWRQb2xpY3k+KCk7XG4gICAgLy8gdGhlIGFybiBpcyBpbiB0aGUgZm9ybSBvZiAtIGFybjphd3M6aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcbiAgICBtYW5hZ2VkUG9saWNpZXMucHVzaChcbiAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlXCIsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKHByb3BzLnZwYyB8fCBwcm9wcy5uZXR3b3JrQ29uZmlnKSB7XG4gICAgICAvLyBQb2xpY3kgdGhhdCB3aWxsIGhhdmUgRU5JIGNyZWF0aW9uIHBlcm1pc3Npb25zXG4gICAgICAvLyBub3Qgc3VyZSBpZiB0aW1lLnNsZWVwIGlzIG5lY2Vzc2FyeT9cbiAgICAgIC8vIHJlZjpcbiAgICAgIC8vICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9wdWx1bWkvcHVsdW1pLWF3cy9pc3N1ZXMvMjI2MCNpc3N1ZWNvbW1lbnQtMTk3NzYwNjUwOVxuICAgICAgLy8gIC0gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2lzc3Vlcy8yOTgyOCNpc3N1ZWNvbW1lbnQtMTY5MzMwNzUwMFxuICAgICAgbWFuYWdlZFBvbGljaWVzLnB1c2goXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFwiQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZVwiLFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQW55IGNvbmNlcm4gbm90IHNjb3BpbmcgdGhlIGxvZ0dyb3VwIElBTSBQZXJtaXNzaW9ucz9cbiAgICAvLyAuYWxsb3coKVxuICAgIC8vIC50b0NyZWF0ZUxvZ1N0cmVhbSgpXG4gICAgLy8gLnRvUHV0TG9nRXZlbnRzKClcbiAgICAvLyAub24obG9nR3JvdXAuYXJuLCBgJHtsb2dHcm91cC5hcm59OmxvZy1zdHJlYW06KmApLFxuXG4gICAgdGhpcy5yb2xlID1cbiAgICAgIHByb3BzLnJvbGUgfHxcbiAgICAgIG5ldyBpYW0uUm9sZSh0aGlzLCBcIlNlcnZpY2VSb2xlXCIsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzLFxuICAgICAgfSk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICAvLyBUT0RPOiBSZS1hZGQgZmlsZXN5c3RlbSAvIGxvY2FsTW91bnRQYXRoIHN1cHBvcnRcbiAgICAvLyByZWY6IGZpbGVzeXN0ZW0uY29uZmlnLnBvbGljaWVzIHRvIGJlIGFkZGVkIHRvIHByaW5jaXBhbFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE2MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEvbGliL2Z1bmN0aW9uLnRzI0w5NDktTDk2NVxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgcHJvcHMuaW5pdGlhbFBvbGljeSB8fCBbXSkge1xuICAgICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gTXVzdCBzZXQgcnVudGltZSBwcm9wZXJ0eSB1c2VkIGJ5IGJpbmRcbiAgICB0aGlzLnJ1bnRpbWUgPSBwcm9wcy5ydW50aW1lO1xuICAgIGNvbnN0IGNvZGUgPSBwcm9wcy5jb2RlLmJpbmQodGhpcyk7XG4gICAgdmVyaWZ5Q29kZUNvbmZpZyhjb2RlLCBwcm9wcyk7XG5cbiAgICAvLyBhZGQgc3VwcG9ydCBmb3IgQVdTX0NPREVHVVJVIFByb2ZpbGUgZW52IHZhcmlhYmxlcy4uLlxuICAgIGNvbnN0IGVudiA9IHZhcmlhYmxlcyB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYpKSB7XG4gICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIERMUSBjYW4gYmUgZWl0aGVyIHNucy5JVG9waWMgb3Igc3FzLklRdWV1ZVxuICAgIGNvbnN0IGRscVRvcGljT3JRdWV1ZSA9IHRoaXMuYnVpbGREZWFkTGV0dGVyUXVldWUocHJvcHMpO1xuICAgIGlmIChkbHFUb3BpY09yUXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuaXNRdWV1ZShkbHFUb3BpY09yUXVldWUpKSB7XG4gICAgICAgIHRoaXMuZGVhZExldHRlclF1ZXVlID0gZGxxVG9waWNPclF1ZXVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVhZExldHRlclRvcGljIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgICAgICAvLyB0aGlzLmRlYWRMZXR0ZXJUb3BpYyA9IGRscVRvcGljT3JRdWV1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2dHcm91cCA9IG5ldyBjbG91ZHdhdGNoTG9nR3JvdXAuQ2xvdWR3YXRjaExvZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiTG9nR3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogYC9hd3MvbGFtYmRhLyR7ZnVuY3Rpb25OYW1lfWAsXG4gICAgICAgIHJldGVudGlvbkluRGF5czogbG9nUmV0ZW50aW9uSW5EYXlzLFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuX2xvZ0dyb3VwID0gbG9nR3JvdXA7XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbih0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgLy8gTk9URTogZm9yIHRoZSB1bmRlcmxheWluZyByZXNvdXJjZSwgRXhhY3RseSBvbmUgb2YgZmlsZW5hbWUsIGltYWdlX3VyaSwgb3IgczNfYnVja2V0IG11c3QgYmUgc3BlY2lmaWVkXG4gICAgICBzM0J1Y2tldDogY29kZS5zM0xvY2F0aW9uICYmIGNvZGUuczNMb2NhdGlvbi5idWNrZXROYW1lLFxuICAgICAgczNLZXk6IGNvZGUuczNMb2NhdGlvbiAmJiBjb2RlLnMzTG9jYXRpb24ub2JqZWN0S2V5LFxuICAgICAgczNPYmplY3RWZXJzaW9uOiBjb2RlLnMzTG9jYXRpb24gJiYgY29kZS5zM0xvY2F0aW9uLm9iamVjdFZlcnNpb24sXG4gICAgICBmaWxlbmFtZTogY29kZS5pbmxpbmVDb2RlLFxuICAgICAgc291cmNlQ29kZUhhc2g6IGNvZGUuc291cmNlQ29kZUhhc2gsXG4gICAgICBpbWFnZVVyaTogY29kZS5pbWFnZT8uaW1hZ2VVcmksXG4gICAgICBsYXllcnMsIC8vIFRPRE86IFN1cHBvcnQgSUxheWVyIHdpdGggTGF6eSBsaXN0IG9mIGFybnNcbiAgICAgIGhhbmRsZXI6IHByb3BzLmhhbmRsZXIgPT09IEhhbmRsZXIuRlJPTV9JTUFHRSA/IHVuZGVmaW5lZCA6IHByb3BzLmhhbmRsZXIsXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0LnRvU2Vjb25kcygpLFxuICAgICAgcGFja2FnZVR5cGU6IHByb3BzLnJ1bnRpbWUgPT09IFJ1bnRpbWUuRlJPTV9JTUFHRSA/IFwiSW1hZ2VcIiA6IHVuZGVmaW5lZCxcbiAgICAgIHJ1bnRpbWU6XG4gICAgICAgIHByb3BzLnJ1bnRpbWUgPT09IFJ1bnRpbWUuRlJPTV9JTUFHRSA/IHVuZGVmaW5lZCA6IHByb3BzLnJ1bnRpbWUubmFtZSxcbiAgICAgIC8vIC8vIFNvdXJjZSBDb2RlIEtNUyBub3Qgc3VwcG9ydGVkIGJ5IFRlcnJhZm9ybSBwcm92aWRlcj9cbiAgICAgIC8vIC8vIHNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sI2Nmbi1sYW1iZGEtZnVuY3Rpb24tY29kZS1zb3VyY2VrbXNrZXlhcm5cbiAgICAgIC8vIHNvdXJjZUttc0tleUFybjogY29kZS5zb3VyY2VLTVNLZXlBcm4sXG4gICAgICByb2xlOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIC8vIFRPRE86IENESyBTb3J0cyBlbnZpcm9ubWVudCB0byBtYXRjaCBMYW1iZGEgSGFzaCBiZWhhdmlvdXJcbiAgICAgIC8vIFRPRE86IERvIG5vdCBzZXQgdGhpcyBhdCBhbGwgaWYgbm8gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzZXQgKENvbXBsZXhMaXN0IGNhbid0IGJlIElSZXNvbHZhYmxlKVxuICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9mdW5jdGlvbi50cyNMMTQ2N1xuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgdmFyaWFibGVzOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgICBwcm9kdWNlOiAoX2NvbnRleHQ6IElSZXNvbHZlQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSkgYXMgYW55LFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICAvLyBUT0RPOiByZS1hZGQgZXBoZW1lcmFsU3RvcmFnZVxuICAgICAgdnBjQ29uZmlnOlxuICAgICAgICB0aGlzLnBhcnNlVnBjQ29uZmlnKHByb3BzLm5ldHdvcmtDb25maWcpID8/IHRoaXMuY29uZmlndXJlVnBjKHByb3BzKSxcbiAgICAgIGRlYWRMZXR0ZXJDb25maWc6IHRoaXMucGFyc2VEZWFkTGV0dGVyQ29uZmlnKGRscVRvcGljT3JRdWV1ZSksXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgaW1hZ2VDb25maWc6IHVuZGVmaW5lZElmTm9LZXlzKHtcbiAgICAgICAgY29tbWFuZDogY29kZS5pbWFnZT8uY21kLFxuICAgICAgICBlbnRyeVBvaW50OiBjb2RlLmltYWdlPy5lbnRyeXBvaW50LFxuICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiBjb2RlLmltYWdlPy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgfSksXG4gICAgICAvLyBUT0RPOiByZS1hZGQga21zS2V5QXJuIGZvciBlbnZpcm9ubWVudCBlbmNyeXB0aW9uXG4gICAgICAvLyBUT0RPOiByZS1hZGQgZmlsZVN5c3RlbUNvbmZpZ3MgZm9yIEVGUyBzdXBwb3J0LFxuICAgICAgLy8gVE9ETzogcmUtYWRkIGNvZGVTaWduaW5nQ29uZmlnQXJuXG4gICAgICBhcmNoaXRlY3R1cmVzOiBbXG4gICAgICAgIC8vIFRoaXMgaXMgYW4gYXJyYXksIGJ1dCBtYXhpbXVtIGxlbmd0aCBpcyAxIVxuICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWZ1bmN0aW9uLmh0bWwjY2ZuLWxhbWJkYS1mdW5jdGlvbi1hcmNoaXRlY3R1cmVzXG4gICAgICAgIHByb3BzLmFyY2hpdGVjdHVyZT8udG9TdHJpbmcoKSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0LnRvU3RyaW5nKCksXG4gICAgICBdLFxuICAgICAgLy8gVE9ETzogcmUtYWRkIHJ1bnRpbWVNYW5hZ2VtZW50Q29uZmlnXG4gICAgICAvLyBUT0RPOiByZS1hZGQgc25hcFN0YXJ0XG4gICAgICBsb2dnaW5nQ29uZmlnOiB0aGlzLmdldExvZ2dpbmdDb25maWcodGhpcy5fbG9nR3JvdXAubmFtZSwgcHJvcHMpLFxuICAgICAgLy8gVE9ETzogcmUtYWRkIHJlY3Vyc2l2ZUxvb3AgZGV0ZWN0aW9uXG4gICAgICB0cmFjaW5nQ29uZmlnOiB0aGlzLnBhcnNlVHJhY2luZ0NvbmZpZyhwcm9wcy50cmFjaW5nID8/IFRyYWNpbmcuQUNUSVZFKSxcbiAgICAgIHB1Ymxpc2g6IHByb3BzLnB1Ymxpc2gsXG4gICAgICAvLyBUT0RPOiB1c2UgbG9nR3JvdXAubm9kZS5hZGREZXBlbmRlbmN5IHdoZW4gbG9nR3JvdXAgaXMgaW1wbGVtZW50ZWRcbiAgICAgIGRlcGVuZHNPbjogW2xvZ0dyb3VwXSxcbiAgICB9KTtcbiAgICAvLyBOT1RFOiBTaG91bGQgdGhpcyBiZSBmdW5jdGlvbk5hbWUgaW5wdXQgaW5zdGVhZCBvZiBUT0tFTj9cbiAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IHRoaXMucmVzb3VyY2UuZnVuY3Rpb25OYW1lO1xuXG4gICAgLy8gbWFrZSBzdXJlIGFueSByb2xlIGF0dGFjaG1lbnRzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgbGFtYmRhXG4gICAgLy8gdGhpcyBhY2hpZXZlZCBieSB0aGUgQ0RLVEYgQXNwZWN0IG9uIHRoZSBwYXJlbnQgU3RhY2tCYXNlXG4gICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcblxuICAgIHRoaXMudGltZW91dCA9IHByb3BzLnRpbWVvdXQ7XG5cbiAgICB0aGlzLmFyY2hpdGVjdHVyZSA9IHByb3BzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0O1xuXG4gICAgLy8gVE9ETzogQWRkIGF3c19sYW1iZGFfcHJvdmlzaW9uZWRfY29uY3VycmVuY3lfY29uZmlnXG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHByb3BzLmV2ZW50cyB8fCBbXSkge1xuICAgICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudCk7XG4gICAgfVxuXG4gICAgLy8gLy8gVE9ETzogcGVuZGluZyBjdXN0b20gQ0xJIHRvIG1vY2sgTGFtYmRhIGZ1bmN0aW9uIGludm9jYXRpb25zIGxvY2FsbHlcbiAgICAvLyBwcm9wcy5jb2RlLmJpbmRUb1Jlc291cmNlKHRoaXMpO1xuXG4gICAgLy8gRXZlbnQgSW52b2tlIENvbmZpZ1xuICAgIGlmIChcbiAgICAgIHByb3BzLm9uRmFpbHVyZSB8fFxuICAgICAgcHJvcHMub25TdWNjZXNzIHx8XG4gICAgICBwcm9wcy5tYXhFdmVudEFnZSB8fFxuICAgICAgcHJvcHMucmV0cnlBdHRlbXB0cyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUFzeW5jSW52b2tlKHtcbiAgICAgICAgb25GYWlsdXJlOiBwcm9wcy5vbkZhaWx1cmUsXG4gICAgICAgIG9uU3VjY2VzczogcHJvcHMub25TdWNjZXNzLFxuICAgICAgICBtYXhFdmVudEFnZTogcHJvcHMubWF4RXZlbnRBZ2UsXG4gICAgICAgIHJldHJ5QXR0ZW1wdHM6IHByb3BzLnJldHJ5QXR0ZW1wdHMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRzID0ge1xuICAgICAgbmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICBhcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgcm9sZUFybjogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICAvLyBvbmx5IGtub3duIGF0IHN5bnRoIHRpbWVcbiAgICAgIC8vIGV4cGxpY2l0IGBudWxsYCByZXF1aXJlZCB0byBhdm9pZCBzeW50YXggZXJyb3JzIHdoZW4gdXNpbmcgc3RyaW5nVmFsdWUgJiYgXCJ1bmRlZmluZWRcIlxuICAgICAgdXJsOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5fdXJsID8/IG51bGwsXG4gICAgICB9KSxcbiAgICAgIGRlZmF1bHRTZWN1cml0eUdyb3VwOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5fc2VjdXJpdHlHcm91cD8uaWQgPz8gbnVsbCxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGlzIExhbWJkYSBmdW5jdGlvbi5cbiAgICogSWYgdGhpcyBpcyBhIHJlZiB0byBhIExhbWJkYSBmdW5jdGlvbiwgdGhpcyBvcGVyYXRpb24gcmVzdWx0cyBpbiBhIG5vLW9wLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUncyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFbnZpcm9ubWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IElGdW5jdGlvbiB7XG4gICAgLy8gUmVzZXJ2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgZmFpbCBkdXJpbmcgY2xvdWRmb3JtYXRpb24gZGVwbG95IGlmIHRoZXkncmUgc2V0LlxuICAgIC8vIFRoaXMgY2hlY2sgaXMganVzdCB0byBhbGxvdyBDREsgdG8gZmFpbCBmYXN0ZXIgd2hlbiB0aGVzZSBhcmUgc3BlY2lmaWVkLlxuICAgIGNvbnN0IHJlc2VydmVkRW52aXJvbm1lbnRWYXJpYWJsZXMgPSBbXG4gICAgICBcIl9IQU5ETEVSXCIsXG4gICAgICBcIl9YX0FNWk5fVFJBQ0VfSURcIixcbiAgICAgIFwiQVdTX0RFRkFVTFRfUkVHSU9OXCIsXG4gICAgICBcIkFXU19SRUdJT05cIixcbiAgICAgIFwiQVdTX0VYRUNVVElPTl9FTlZcIixcbiAgICAgIFwiQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FXCIsXG4gICAgICBcIkFXU19MQU1CREFfRlVOQ1RJT05fTUVNT1JZX1NJWkVcIixcbiAgICAgIFwiQVdTX0xBTUJEQV9GVU5DVElPTl9WRVJTSU9OXCIsXG4gICAgICBcIkFXU19MQU1CREFfSU5JVElBTElaQVRJT05fVFlQRVwiLFxuICAgICAgXCJBV1NfTEFNQkRBX0xPR19HUk9VUF9OQU1FXCIsXG4gICAgICBcIkFXU19MQU1CREFfTE9HX1NUUkVBTV9OQU1FXCIsXG4gICAgICBcIkFXU19BQ0NFU1NfS0VZXCIsXG4gICAgICBcIkFXU19BQ0NFU1NfS0VZX0lEXCIsXG4gICAgICBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgXCJBV1NfU0VTU0lPTl9UT0tFTlwiLFxuICAgICAgXCJBV1NfTEFNQkRBX1JVTlRJTUVfQVBJXCIsXG4gICAgICBcIkxBTUJEQV9UQVNLX1JPT1RcIixcbiAgICAgIFwiTEFNQkRBX1JVTlRJTUVfRElSXCIsXG4gICAgXTtcbiAgICBpZiAocmVzZXJ2ZWRFbnZpcm9ubWVudFZhcmlhYmxlcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgJHtrZXl9IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlc2VydmVkIGJ5IHRoZSBsYW1iZGEgcnVudGltZSBhbmQgY2FuIG5vdCBiZSBzZXQgbWFudWFsbHkuIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9jb25maWd1cmF0aW9uLWVudnZhcnMuaHRtbGAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRGdW5jdGlvblVybChvcHRpb25zPzogRnVuY3Rpb25VcmxPcHRpb25zKTogRnVuY3Rpb25Vcmwge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gc3VwZXIuYWRkRnVuY3Rpb25Vcmwob3B0aW9ucyk7XG4gICAgdGhpcy5fdXJsID0gZW5kcG9pbnQudXJsO1xuICAgIHJldHVybiBlbmRwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgTG9nZ2luZyBDb25maWcgcHJvcGV0eSBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmdW5jdGlvbiBMb2dnaW5nQ29uZmlnIFByb3BlcnR5IGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24gdGhlXG4gICAqIGZ1bmN0aW9uIGFuZCB1bmRlZmluZWQgaWYgbm90LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMb2dnaW5nQ29uZmlnKFxuICAgIGxvZ0dyb3VwTmFtZTogc3RyaW5nLFxuICAgIHByb3BzOiBGdW5jdGlvblByb3BzLFxuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbkxvZ2dpbmdDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5hcHBsaWNhdGlvbkxvZ0xldmVsIHx8IHByb3BzLnN5c3RlbUxvZ0xldmVsKSB7XG4gICAgICBpZiAocHJvcHMubG9nZ2luZ0Zvcm1hdCAhPT0gTG9nZ2luZ0Zvcm1hdC5KU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYFRvIHVzZSBBcHBsaWNhdGlvbkxvZ0xldmVsIGFuZC9vciBTeXN0ZW1Mb2dMZXZlbCB5b3UgbXVzdCBzZXQgTG9nZ2luZ0Zvcm1hdCB0byAnJHtMb2dnaW5nRm9ybWF0LkpTT059JywgZ290ICcke3Byb3BzLmxvZ2dpbmdGb3JtYXR9Jy5gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvZ2dpbmdDb25maWc6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uTG9nZ2luZ0NvbmZpZztcbiAgICBpZiAocHJvcHMubG9nZ2luZ0Zvcm1hdCkge1xuICAgICAgbG9nZ2luZ0NvbmZpZyA9IHtcbiAgICAgICAgbG9nRm9ybWF0OiBwcm9wcy5sb2dnaW5nRm9ybWF0LFxuICAgICAgICBzeXN0ZW1Mb2dMZXZlbDogcHJvcHMuc3lzdGVtTG9nTGV2ZWwsXG4gICAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWw6IHByb3BzLmFwcGxpY2F0aW9uTG9nTGV2ZWwsXG4gICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cE5hbWUsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxvZ2dpbmdDb25maWc7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBhbGlhcyBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhlIGFsaWFzIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuICAgKiB0aGUgZnVuY3Rpb24gYXMgaXQgaXMgYmVpbmcgdXBkYXRlZCBkdXJpbmcgYSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBkZWNsYXJlIGNvbnN0IGZuOiBjb21wdXRlLkxhbWJkYUZ1bmN0aW9uO1xuICAgKlxuICAgKiBmbi5hZGRBbGlhcygnTGl2ZScpO1xuICAgKlxuICAgKiAvLyBJcyBlcXVpdmFsZW50IHRvXG4gICAqXG4gICAqIG5ldyBjb21wdXRlLkFsaWFzKHRoaXMsICdBbGlhc0xpdmUnLCB7XG4gICAqICAgYWxpYXNOYW1lOiAnTGl2ZScsXG4gICAqICAgdmVyc2lvbjogZm4udmVyc2lvbixcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gYWxpYXNOYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBBbGlhcyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQWxpYXMoYWxpYXNOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBBbGlhc09wdGlvbnMpOiBBbGlhcyB7XG4gICAgcmV0dXJuIGFkZEFsaWFzKHRoaXMsIHRoaXMsIHRoaXMudmVyc2lvbiwgYWxpYXNOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGNyZWF0ZSBMYW1iZGFGdW5jdGlvblZwY0NvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVZwY0NvbmZpZyhcbiAgICBjb25maWc/OiBWcGNDb25maWcsXG4gICk6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uVnBjQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHNlY3VyaXR5R3JvdXBJZHMgPSBjb25maWcuc2VjdXJpdHlHcm91cElkcztcbiAgICBpZiAoIXNlY3VyaXR5R3JvdXBJZHMpIHtcbiAgICAgIHRoaXMuX3NlY3VyaXR5R3JvdXAgPSBuZXcgc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICB2cGNJZDogY29uZmlnLnZwY0lkLFxuXG4gICAgICAgICAgZWdyZXNzOiBjb25maWcuZWdyZXNzID8/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZnJvbVBvcnQ6IDAsXG4gICAgICAgICAgICAgIHRvUG9ydDogMCxcbiAgICAgICAgICAgICAgcHJvdG9jb2w6IFwiLTFcIixcbiAgICAgICAgICAgICAgY2lkckJsb2NrczogW1wiMC4wLjAuMC8wXCJdLFxuICAgICAgICAgICAgICBpcHY2Q2lkckJsb2NrczogW1wiOjovMFwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBzZWN1cml0eUdyb3VwSWRzID0gW3RoaXMuX3NlY3VyaXR5R3JvdXAuaWRdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3VibmV0SWRzOiBjb25maWcuc3VibmV0SWRzLFxuICAgICAgaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2s6IGNvbmZpZy5pcHY2QWxsb3dlZEZvckR1YWxTdGFjayxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBjb25maWd1cmVkLCBzZXQgdXAgdGhlIFZQQy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgICpcbiAgICogUmV0dXJucyB0aGUgVnBjQ29uZmlnIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZVxuICAgKiBMYW1iZGEgY3JlYXRpb24gcHJvcGVydGllcy5cbiAgICovXG4gIHByaXZhdGUgY29uZmlndXJlVnBjKFxuICAgIHByb3BzOiBGdW5jdGlvblByb3BzLFxuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvblZwY0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaGFzU2VjdXJpdHlHcm91cHMgPVxuICAgICAgcHJvcHMuc2VjdXJpdHlHcm91cHMgJiYgcHJvcHMuc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gMDtcbiAgICBpZiAoIXByb3BzLnZwYykge1xuICAgICAgaWYgKHByb3BzLmFsbG93QWxsT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGNvbmZpZ3VyZSAnYWxsb3dBbGxPdXRib3VuZCcgd2l0aG91dCBjb25maWd1cmluZyBhIFZQQ1wiLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaGFzU2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBjb25maWd1cmUgJ3NlY3VyaXR5R3JvdXBzJyB3aXRob3V0IGNvbmZpZ3VyaW5nIGEgVlBDXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy52cGNTdWJuZXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgY29uZmlndXJlICd2cGNTdWJuZXRzJyB3aXRob3V0IGNvbmZpZ3VyaW5nIGEgVlBDXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5pcHY2QWxsb3dlZEZvckR1YWxTdGFjaykge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGNvbmZpZ3VyZSAnaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2snIHdpdGhvdXQgY29uZmlndXJpbmcgYSBWUENcIixcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmFsbG93QWxsSXB2Nk91dGJvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBjb25maWd1cmUgJ2FsbG93QWxsSXB2Nk91dGJvdW5kJyB3aXRob3V0IGNvbmZpZ3VyaW5nIGEgVlBDXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmFsbG93QWxsT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGhhc1NlY3VyaXR5R3JvdXBzKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJDb25maWd1cmUgJ2FsbG93QWxsT3V0Ym91bmQnIGRpcmVjdGx5IG9uIHRoZSBzdXBwbGllZCBTZWN1cml0eUdyb3Vwcy5cIixcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaGFzU2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNvbmZpZ3VyZSAnYWxsb3dBbGxJcHY2T3V0Ym91bmQnIGRpcmVjdGx5IG9uIHRoZSBzdXBwbGllZCBTZWN1cml0eUdyb3Vwcy5cIixcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAgIGlmIChoYXNTZWN1cml0eUdyb3Vwcykge1xuICAgICAgc2VjdXJpdHlHcm91cHMgPSBwcm9wcy5zZWN1cml0eUdyb3VwcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VjR3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBcIlNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJBdXRvbWF0aWMgc2VjdXJpdHkgZ3JvdXAgZm9yIExhbWJkYSBGdW5jdGlvbiBcIiArXG4gICAgICAgICAgQXdzU3RhY2sudW5pcXVlSWQodGhpcyksXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHByb3BzLmFsbG93QWxsT3V0Ym91bmQsXG4gICAgICAgIGFsbG93QWxsSXB2Nk91dGJvdW5kOiBwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCxcbiAgICAgIH0pO1xuICAgICAgc2VjdXJpdHlHcm91cHMgPSBbc2VjR3JvdXBdO1xuICAgIH1cblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHMgfSk7XG5cbiAgICAvLyBUT0RPOiBhZGQgd2hlbiBmaWxlc3lzdGVtIGNvbmZpZyBpcyBiYWNrXG4gICAgLy8gaWYgKHByb3BzLmZpbGVzeXN0ZW0pIHtcbiAgICAvLyAgIGlmIChwcm9wcy5maWxlc3lzdGVtLmNvbmZpZy5jb25uZWN0aW9ucykge1xuICAgIC8vICAgICB0aGlzLmNvbm5lY3Rpb25zLmFsbG93VG8oXG4gICAgLy8gICAgICAgcHJvcHMuZmlsZXN5c3RlbS5jb25maWcuY29ubmVjdGlvbnMsXG4gICAgLy8gICAgICAgcHJvcHMuZmlsZXN5c3RlbS5jb25maWcuY29ubmVjdGlvbnMuZGVmYXVsdFBvcnQgPz9cbiAgICAvLyAgICAgICAgIFBvcnQudGNwKEZpbGVTeXN0ZW0uREVGQVVMVF9QT1JUKSxcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBjb25zdCBpcHY2QWxsb3dlZEZvckR1YWxTdGFjayA9IHByb3BzLmlwdjZBbGxvd2VkRm9yRHVhbFN0YWNrO1xuICAgIGNvbnN0IGFsbG93UHVibGljU3VibmV0ID0gcHJvcHMuYWxsb3dQdWJsaWNTdWJuZXQgPz8gZmFsc2U7XG4gICAgY29uc3Qgc2VsZWN0ZWRTdWJuZXRzID0gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocHJvcHMudnBjU3VibmV0cyk7XG4gICAgY29uc3QgcHVibGljU3VibmV0SWRzID0gbmV3IFNldChcbiAgICAgIHByb3BzLnZwYy5wdWJsaWNTdWJuZXRzLm1hcCgocykgPT4gcy5zdWJuZXRJZCksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHN1Ym5ldElkIG9mIHNlbGVjdGVkU3VibmV0cy5zdWJuZXRJZHMpIHtcbiAgICAgIGlmIChwdWJsaWNTdWJuZXRJZHMuaGFzKHN1Ym5ldElkKSAmJiAhYWxsb3dQdWJsaWNTdWJuZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkxhbWJkYSBGdW5jdGlvbnMgaW4gYSBwdWJsaWMgc3VibmV0IGNhbiBOT1QgYWNjZXNzIHRoZSBpbnRlcm5ldC4gXCIgK1xuICAgICAgICAgICAgXCJJZiB5b3UgYXJlIGF3YXJlIG9mIHRoaXMgbGltaXRhdGlvbiBhbmQgd291bGQgc3RpbGwgbGlrZSB0byBwbGFjZSB0aGUgZnVuY3Rpb24gaW4gYSBwdWJsaWMgc3VibmV0LCBzZXQgYGFsbG93UHVibGljU3VibmV0YCB0byB0cnVlXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3koc2VsZWN0ZWRTdWJuZXRzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpO1xuXG4gICAgLy8gTGlzdCBjYW4ndCBiZSBlbXB0eSBoZXJlLCBpZiB3ZSBnb3QgdGhpcyBmYXIgeW91IGludGVuZGVkIHRvIHB1dCB5b3VyIExhbWJkYVxuICAgIC8vIGluIHN1Ym5ldHMuIFdlJ3JlIGdvaW5nIHRvIGd1YXJhbnRlZSB0aGF0IHdlIGdldCB0aGUgbmljZSBlcnJvciBtZXNzYWdlIGJ5XG4gICAgLy8gbWFraW5nIFZwY05ldHdvcmsgZG8gdGhlIHNlbGVjdGlvbiBhZ2Fpbi5cbiAgICBpZiAocHJvcHMuaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2s6IGlwdjZBbGxvd2VkRm9yRHVhbFN0YWNrLFxuICAgICAgICBzdWJuZXRJZHM6IHNlbGVjdGVkU3VibmV0cy5zdWJuZXRJZHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBzLm1hcCgoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWJuZXRJZHM6IHNlbGVjdGVkU3VibmV0cy5zdWJuZXRJZHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBzLm1hcCgoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNRdWV1ZShkZWFkTGV0dGVyUXVldWU6IElRdWV1ZSk6IGRlYWRMZXR0ZXJRdWV1ZSBpcyBJUXVldWUge1xuICAgIHJldHVybiAoPElRdWV1ZT5kZWFkTGV0dGVyUXVldWUpLnF1ZXVlQXJuICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVhZExldHRlclF1ZXVlKHByb3BzOiBGdW5jdGlvblByb3BzKTogSVF1ZXVlIHwgdW5kZWZpbmVkIHtcbiAgICAvLyB8IHNucy5JVG9waWNcbiAgICBpZiAoXG4gICAgICAhcHJvcHMuZGVhZExldHRlclF1ZXVlICYmXG4gICAgICAhcHJvcHMuZGVhZExldHRlclF1ZXVlRW5hYmxlZFxuICAgICAgLy8gJiYgIXByb3BzLmRlYWRMZXR0ZXJUb3BpY1xuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSAmJiBwcm9wcy5kZWFkTGV0dGVyUXVldWVFbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiZGVhZExldHRlclF1ZXVlIGRlZmluZWQgYnV0IGRlYWRMZXR0ZXJRdWV1ZUVuYWJsZWQgZXhwbGljaXRseSBzZXQgdG8gZmFsc2VcIixcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGlmIChcbiAgICAvLyAgIHByb3BzLmRlYWRMZXR0ZXJUb3BpYyAmJlxuICAgIC8vICAgKHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSB8fCBwcm9wcy5kZWFkTGV0dGVyUXVldWVFbmFibGVkICE9PSB1bmRlZmluZWQpXG4gICAgLy8gKSB7XG4gICAgLy8gICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgIC8vICAgICBcImRlYWRMZXR0ZXJRdWV1ZSBhbmQgZGVhZExldHRlclRvcGljIGNhbm5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgYXQgdGhlIHNhbWUgdGltZVwiLFxuICAgIC8vICAgICB0aGlzLFxuICAgIC8vICAgKTtcbiAgICAvLyB9XG5cbiAgICBsZXQgZGVhZExldHRlclF1ZXVlOiBJUXVldWU7IC8vIHwgSVRvcGljO1xuICAgIC8vIGlmIChwcm9wcy5kZWFkTGV0dGVyVG9waWMpIHtcbiAgICAvLyAgIGRlYWRMZXR0ZXJRdWV1ZSA9IHByb3BzLmRlYWRMZXR0ZXJUb3BpYztcbiAgICAvLyAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgIC8vICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgLy8gICAgICAgYWN0aW9uczogW1wic25zOlB1Ymxpc2hcIl0sXG4gICAgLy8gICAgICAgcmVzb3VyY2VzOiBbZGVhZExldHRlclF1ZXVlLnRvcGljQXJuXSxcbiAgICAvLyAgICAgfSksXG4gICAgLy8gICApO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgZGVhZExldHRlclF1ZXVlID1cbiAgICAgIHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSB8fFxuICAgICAgbmV3IFF1ZXVlKHRoaXMsIFwiRGVhZExldHRlclF1ZXVlXCIsIHtcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDE0KSxcbiAgICAgIH0pO1xuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzcXM6U2VuZE1lc3NhZ2VcIl0sXG4gICAgICAgIHJlc291cmNlczogW2RlYWRMZXR0ZXJRdWV1ZS5xdWV1ZUFybl0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIC8vIH1cblxuICAgIHJldHVybiBkZWFkTGV0dGVyUXVldWU7XG4gIH1cblxuICAvLyBUT0RPOiBTdXBwb3J0IHNucy5JVG9waWMgKyBzbnM6UHVibGlzaCB0b3BpY0FyblxuICAvKipcbiAgICogT3B0aW9uYWxseSBjcmVhdGUgTGFtYmRhRnVuY3Rpb25EZWFkTGV0dGVyQ29uZmlnXG4gICAqL1xuICBwcml2YXRlIHBhcnNlRGVhZExldHRlckNvbmZpZyhcbiAgICBkZWFkTGV0dGVyUXVldWU/OiBJUXVldWUsIC8vIHwgc25zLklUb3BpY1xuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbkRlYWRMZXR0ZXJDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmIChkZWFkTGV0dGVyUXVldWUpIHtcbiAgICAgIC8vIHRoaXMuaXNRdWV1ZShkZWFkTGV0dGVyUXVldWUpID8gZGVhZExldHRlclF1ZXVlLnF1ZXVlQXJuIDogLi4uXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXJnZXRBcm46IGRlYWRMZXR0ZXJRdWV1ZS5xdWV1ZUFybixcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRyYWNpbmdDb25maWcoXG4gICAgdHJhY2luZzogVHJhY2luZyxcbiAgKTogbGFtYmRhRnVuY3Rpb24uTGFtYmRhRnVuY3Rpb25UcmFjaW5nQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHJhY2luZyA9PT0gdW5kZWZpbmVkIHx8IHRyYWNpbmcgPT09IFRyYWNpbmcuRElTQUJMRUQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInhyYXk6UHV0VHJhY2VTZWdtZW50c1wiLCBcInhyYXk6UHV0VGVsZW1ldHJ5UmVjb3Jkc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiB0cmFjaW5nLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBvcGFxdWUgKHRva2VuKSBBUk4sIHJldHVybnMgYSBURiBleHByZXNzaW9uIHRoYXQgZXh0cmFjdHMgdGhlIGZ1bmN0aW9uXG4gKiBuYW1lIGZyb20gdGhlIEFSTi5cbiAqXG4gKiBGdW5jdGlvbiBBUk5zIGxvb2sgbGlrZSB0aGlzOlxuICpcbiAqICAgYXJuOmF3czpsYW1iZGE6cmVnaW9uOmFjY291bnQtaWQ6ZnVuY3Rpb246ZnVuY3Rpb24tbmFtZVxuICpcbiAqIC4ud2hpY2ggbWVhbnMgdGhhdCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBgZnVuY3Rpb24tbmFtZWAgY29tcG9uZW50IGZyb20gdGhlIEFSTiwgd2UgY2FuXG4gKiBzcGxpdCB0aGUgQVJOIHVzaW5nIFwiOlwiIGFuZCBzZWxlY3QgdGhlIGNvbXBvbmVudCBpbiBpbmRleCA2LlxuICpcbiAqIEByZXR1cm5zIGBlbGVtZW50KHNwbGl0KCc6JywgYXJuKSwgNilgXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbUFybihhcm46IHN0cmluZykge1xuICBjb25zdCB7IHJlc291cmNlTmFtZSB9ID0gQXJuLnNwbGl0KGFybiwgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUpO1xuICBpZiAoIXJlc291cmNlTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBMYW1iZGEgZnVuY3Rpb24gQVJOOiAke2Fybn1gKTtcbiAgfVxuICAvLyBpZiAocmVzb3VyY2VOYW1lLmluY2x1ZGVzKFwiOlwiKSkgc3BsaXQgb2ZmIHRoZSB2ZXJzaW9uXG4gIGlmIChyZXNvdXJjZU5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgcmV0dXJuIHJlc291cmNlTmFtZS5zcGxpdChcIjpcIilbMF07XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlTmFtZTtcbn1cblxuLyoqXG4gKiBYLVJheSBUcmFjaW5nIE1vZGVzIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9BUElfVHJhY2luZ0NvbmZpZy5odG1sKVxuICovXG5leHBvcnQgZW51bSBUcmFjaW5nIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIHJlc3BlY3QgYW55IHRyYWNpbmcgaGVhZGVyIGl0IHJlY2VpdmVzIGZyb20gYW4gdXBzdHJlYW0gc2VydmljZS5cbiAgICogSWYgbm8gdHJhY2luZyBoZWFkZXIgaXMgcmVjZWl2ZWQsIExhbWJkYSB3aWxsIHNhbXBsZSB0aGUgcmVxdWVzdCBiYXNlZCBvbiBhIGZpeGVkIHJhdGUuIFBsZWFzZSBzZWUgdGhlIFtVc2luZyBBV1MgTGFtYmRhIHdpdGggQVdTIFgtUmF5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9zZXJ2aWNlcy14cmF5Lmh0bWwpIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb24gdGhpcyBzYW1wbGluZyBiZWhhdmlvci5cbiAgICovXG4gIEFDVElWRSA9IFwiQWN0aXZlXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBvbmx5IHRyYWNlIHRoZSByZXF1ZXN0IGZyb20gYW4gdXBzdHJlYW0gc2VydmljZVxuICAgKiBpZiBpdCBjb250YWlucyBhIHRyYWNpbmcgaGVhZGVyIHdpdGggXCJzYW1wbGVkPTFcIlxuICAgKi9cbiAgUEFTU19USFJPVUdIID0gXCJQYXNzVGhyb3VnaFwiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgbm90IHRyYWNlIGFueSByZXF1ZXN0LlxuICAgKi9cbiAgRElTQUJMRUQgPSBcIkRpc2FibGVkXCIsXG59XG5cbi8qKlxuICogTGFtYmRhIHNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGNhcHR1cmVzIHN5c3RlbSBsb2dzIGFib3V0IGZ1bmN0aW9uIGludm9jYXRpb25cbiAqIGdlbmVyYXRlZCBieSB0aGUgTGFtYmRhIHNlcnZpY2UgKGtub3duIGFzIHN5c3RlbSBsb2dzKSBhbmQgc2VuZHMgdGhlc2UgbG9ncyB0byBhXG4gKiBkZWZhdWx0IENsb3VkV2F0Y2ggbG9nIGdyb3VwIG5hbWVkIGFmdGVyIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFN5c3RlbUxvZ0xldmVsIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGluZm8gbGV2ZWwuXG4gICAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBkZWJ1ZyBsZXZlbC5cbiAgICovXG4gIERFQlVHID0gXCJERUJVR1wiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgd2FybiBsZXZlbC5cbiAgICovXG4gIFdBUk4gPSBcIldBUk5cIixcbn1cblxuLyoqXG4gKiBMYW1iZGEgc2VydmljZSBhdXRvbWF0aWNhbGx5IGNhcHR1cmVzIGxvZ3MgZ2VuZXJhdGVkIGJ5IHRoZSBmdW5jdGlvbiBjb2RlXG4gKiAoa25vd24gYXMgYXBwbGljYXRpb24gbG9ncykgYW5kIHNlbmRzIHRoZXNlIGxvZ3MgdG8gYSBkZWZhdWx0IENsb3VkV2F0Y2hcbiAqIGxvZyBncm91cCBuYW1lZCBhZnRlciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvbkxvZ0xldmVsIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGluZm8gbGV2ZWwuXG4gICAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBkZWJ1ZyBsZXZlbC5cbiAgICovXG4gIERFQlVHID0gXCJERUJVR1wiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgd2FybiBsZXZlbC5cbiAgICovXG4gIFdBUk4gPSBcIldBUk5cIixcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IHRyYWNlIGxldmVsLlxuICAgKi9cbiAgVFJBQ0UgPSBcIlRSQUNFXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBlcnJvciBsZXZlbC5cbiAgICovXG4gIEVSUk9SID0gXCJFUlJPUlwiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgZmF0YWwgbGV2ZWwuXG4gICAqL1xuICBGQVRBTCA9IFwiRkFUQUxcIixcbn1cblxuLyoqXG4gKiBUaGlzIGZpZWxkIHRha2VzIGluIDIgdmFsdWVzIGVpdGhlciBUZXh0IG9yIEpTT04uIEJ5IHNldHRpbmcgdGhpcyB2YWx1ZSB0byBUZXh0LFxuICogd2lsbCByZXN1bHQgaW4gdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIGxvZ3MgZm9ybWF0LCB3aGVyZWFzLCBieSBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gSlNPTixcbiAqIExhbWJkYSB3aWxsIHByaW50IHRoZSBsb2dzIGFzIFN0cnVjdHVyZWQgSlNPTiBMb2dzLCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCBhbmQgbG9nIGxldmVsXG4gKiBvZiBlYWNoIGV2ZW50LiBTZWxlY3Rpbmcg4oCYSlNPTuKAmSBmb3JtYXQgd2lsbCBvbmx5IGFsbG93IGN1c3RvbWVy4oCZcyB0byBoYXZlIGRpZmZlcmVudCBsb2cgbGV2ZWxcbiAqIEFwcGxpY2F0aW9uIGxvZyBsZXZlbCBhbmQgdGhlIFN5c3RlbSBsb2cgbGV2ZWwuXG4gKi9cbmV4cG9ydCBlbnVtIExvZ2dpbmdGb3JtYXQge1xuICAvKipcbiAgICogTGFtYmRhIExvZ3MgdGV4dCBmb3JtYXQuXG4gICAqL1xuICBURVhUID0gXCJUZXh0XCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgc3RydWN0dXJlZCBsb2dnaW5nIGluIEpzb24gZm9ybWF0LlxuICAgKi9cbiAgSlNPTiA9IFwiSlNPTlwiLFxufVxuXG4vKipcbiAqIEEgZGVzdGluYXRpb24gY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERscURlc3RpbmF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgZGVzdGluYXRpb24gcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBETFEgZm9yIGFuIGV2ZW50IHNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudFNvdXJjZURscSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBETFEgZGVzdGluYXRpb24gY29uZmlnIG9mIHRoZSBETFFcbiAgICovXG4gIGJpbmQoXG4gICAgdGFyZ2V0OiBJRXZlbnRTb3VyY2VNYXBwaW5nLFxuICAgIHRhcmdldEhhbmRsZXI6IElGdW5jdGlvbixcbiAgKTogRGxxRGVzdGluYXRpb25Db25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlDb2RlQ29uZmlnKGNvZGU6IENvZGVDb25maWcsIHByb3BzOiBGdW5jdGlvblByb3BzKSB7XG4gIC8vIG11dHVhbGx5IGV4Y2x1c2l2ZVxuICBjb25zdCBjb2RlVHlwZSA9IFtjb2RlLmlubGluZUNvZGUsIGNvZGUuczNMb2NhdGlvbiwgY29kZS5pbWFnZV07XG5cbiAgaWYgKGNvZGVUeXBlLmZpbHRlcigoeCkgPT4gISF4KS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAnbGFtYmRhLkNvZGUgbXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIG9mOiBcImlubGluZUNvZGVcIiwgXCJzM0xvY2F0aW9uXCIsIG9yIFwiaW1hZ2VcIicsXG4gICAgKTtcbiAgfVxuXG4gIGlmICghIWNvZGUuaW1hZ2UgPT09IChwcm9wcy5oYW5kbGVyICE9PSBIYW5kbGVyLkZST01fSU1BR0UpKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgXCJoYW5kbGVyIG11c3QgYmUgYEhhbmRsZXIuRlJPTV9JTUFHRWAgd2hlbiB1c2luZyBpbWFnZSBhc3NldCBmb3IgTGFtYmRhIGZ1bmN0aW9uXCIsXG4gICAgKTtcbiAgfVxuXG4gIGlmICghIWNvZGUuaW1hZ2UgPT09IChwcm9wcy5ydW50aW1lICE9PSBSdW50aW1lLkZST01fSU1BR0UpKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgXCJydW50aW1lIG11c3QgYmUgYFJ1bnRpbWUuRlJPTV9JTUFHRWAgd2hlbiB1c2luZyBpbWFnZSBhc3NldCBmb3IgTGFtYmRhIGZ1bmN0aW9uXCIsXG4gICAgKTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgaW5saW5lIGNvZGUsIGNoZWNrIHRoYXQgdGhlIHJ1bnRpbWUgc3VwcG9ydHNcbiAgaWYgKGNvZGUuaW5saW5lQ29kZSAmJiAhcHJvcHMucnVudGltZS5zdXBwb3J0c0lubGluZUNvZGUpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgSW5saW5lIHNvdXJjZSBub3QgYWxsb3dlZCBmb3IgJHtwcm9wcy5ydW50aW1lIS5uYW1lfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmRlZmluZWRJZk5vS2V5czxBIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0+KFxuICBzdHJ1Y3Q6IEEsXG4pOiBBIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWxsVW5kZWZpbmVkID0gT2JqZWN0LnZhbHVlcyhzdHJ1Y3QpLmV2ZXJ5KCh2YWwpID0+IHZhbCA9PT0gdW5kZWZpbmVkKTtcbiAgcmV0dXJuIGFsbFVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHN0cnVjdDtcbn1cbiJdfQ==
|
|
871
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXdzL2NvbXB1dGUvZnVuY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQXc3Q0EsNENBNEJDOztBQXA5Q0QsNkpBQTZKO0FBQzdKLDJIQUEySDtBQUMzSCxzREFNNkI7QUFDN0IsaUNBQWtFO0FBRWxFLHlDQUF3RTtBQUN4RSxnQ0FBd0M7QUFDeEMsNENBQXdDO0FBQ3hDLG9EQUFpRDtBQUNqRCxpREFBOEM7QUFLOUMsbURBS3lCO0FBR3pCLHVDQUFvQztBQUNwQyx1Q0FBb0M7QUFDcEMscURBQWlFO0FBQ2pFLGlDQUFrQztBQUVsQyw2Q0FBMEM7QUFDMUMseUNBQXlDO0FBQ3pDLDhCQUE4QjtBQUM5QixzQ0FBMEM7QUFDMUMsK0NBQTRDO0FBbVY1QywyQkFBMkI7QUFFM0IsTUFBTTtBQUNOLHdCQUF3QjtBQUN4QixNQUFNO0FBQ04scUVBQXFFO0FBRXJFLFFBQVE7QUFDUixxREFBcUQ7QUFDckQsUUFBUTtBQUNSLDJEQUEyRDtBQUMzRCxJQUFJO0FBRUo7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsa0NBQWtCO0lBQ3BELDZEQUE2RDtJQUU3RDs7T0FFRztJQUNILElBQVcsT0FBTztRQUNoQiwyQ0FBMkM7UUFDM0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsZ0JBQWdCLENBQzVCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixZQUFvQjtRQUVwQixPQUFPLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ3RELFdBQVcsRUFBRSxvQkFBUSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUM7Z0JBQ3BELE9BQU8sRUFBRSxRQUFRO2dCQUNqQixRQUFRLEVBQUUsVUFBVTtnQkFDcEIsWUFBWSxF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O1FBQzVELE1BQU0sSUFBSSxnQ0FBdUIsQ0FDL0IsaUZBQWlGLENBQ2xGLENBQUM7SUFDSixDQUFDO0lBRUQsMERBQTBEO0lBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUksZ0NBQXVCLENBQy9CLGlDQUFpQyxLQUFLLENBQUMsT0FBUSxDQUFDLElBQUksRUFBRSxDQUN2RCxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUN4QixNQUFTO0lBRVQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUM3RSxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDM0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHNvdXJjZTogaHR0cHM6Ly9naXRodWIuY29tL2Nka3RmLXBsdXMvY2RrdGYtcGx1cy9ibG9iLzU4NmFhYmFkM2FiMmZiMmEyZTkzZTA1ZWQzM2Y5NDQ3NGViZTkzOTcvcGFja2FnZXMvJTQwY2RrdGYtcGx1cy9hd3MvbGliL2F3cy1sYW1iZGEtZnVuY3Rpb24vaW5kZXgudHNcbi8vIHVwZGF0ZSB0byBhbGlnbiBjbG9zZXIgd2l0aCBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9mdW5jdGlvbi50c1xuaW1wb3J0IHtcbiAgbGFtYmRhRnVuY3Rpb24sXG4gIGNsb3Vkd2F0Y2hMb2dHcm91cCxcbiAgc2VjdXJpdHlHcm91cCxcbiAgbGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nLFxuICBkYXRhQXdzTGFtYmRhRnVuY3Rpb24sXG59IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBJUmVzb2x2ZUNvbnRleHQsIExhenksIElSZXNvbHZhYmxlLCBUb2tlbiB9IGZyb20gXCJjZGt0blwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tIFwiLi4vLi4vZXJyb3JzXCI7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIEFybiB9IGZyb20gXCIuLi9hcm5cIjtcbmltcG9ydCB7IEF3c1N0YWNrIH0gZnJvbSBcIi4uL2F3cy1zdGFja1wiO1xuaW1wb3J0IHsgUmV0ZW50aW9uRGF5cyB9IGZyb20gXCIuLi9sb2ctcmV0ZW50aW9uXCI7XG5pbXBvcnQgeyBBcmNoaXRlY3R1cmUgfSBmcm9tIFwiLi9hcmNoaXRlY3R1cmVcIjtcbmltcG9ydCB7IENvZGUsIENvZGVDb25maWcgfSBmcm9tIFwiLi9jb2RlXCI7XG5pbXBvcnQgeyBFdmVudEludm9rZUNvbmZpZ09wdGlvbnMgfSBmcm9tIFwiLi9ldmVudC1pbnZva2UtY29uZmlnXCI7XG5pbXBvcnQgeyBJRXZlbnRTb3VyY2VNYXBwaW5nIH0gZnJvbSBcIi4vZXZlbnQtc291cmNlLW1hcHBpbmdcIjtcbmltcG9ydCB7IEFsaWFzT3B0aW9ucywgQWxpYXMgfSBmcm9tIFwiLi9mdW5jdGlvbi1hbGlhc1wiO1xuaW1wb3J0IHtcbiAgTGFtYmRhRnVuY3Rpb25CYXNlLFxuICBJRnVuY3Rpb24sXG4gIEZ1bmN0aW9uQXR0cmlidXRlcyxcbiAgSUV2ZW50U291cmNlLFxufSBmcm9tIFwiLi9mdW5jdGlvbi1iYXNlXCI7XG5pbXBvcnQgeyBGdW5jdGlvblVybCwgRnVuY3Rpb25VcmxPcHRpb25zIH0gZnJvbSBcIi4vZnVuY3Rpb24tdXJsXCI7XG5pbXBvcnQgeyBWcGNDb25maWcgfSBmcm9tIFwiLi9mdW5jdGlvbi12cGMtY29uZmlnLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgSGFuZGxlciB9IGZyb20gXCIuL2hhbmRsZXJcIjtcbmltcG9ydCB7IFJ1bnRpbWUgfSBmcm9tIFwiLi9ydW50aW1lXCI7XG5pbXBvcnQgeyBJU2VjdXJpdHlHcm91cCwgU2VjdXJpdHlHcm91cCB9IGZyb20gXCIuL3NlY3VyaXR5LWdyb3VwXCI7XG5pbXBvcnQgeyBhZGRBbGlhcyB9IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IElWcGMsIFN1Ym5ldFNlbGVjdGlvbiB9IGZyb20gXCIuL3ZwY1wiO1xuaW1wb3J0IHsgRHVyYXRpb24gfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIjtcbi8vIGltcG9ydCB7IEZuIH0gZnJvbSBcIi4uLy4uL3RlcnJhLWZ1bmNcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiLi4vaWFtXCI7XG5pbXBvcnQgeyBJUXVldWUsIFF1ZXVlIH0gZnJvbSBcIi4uL25vdGlmeVwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvbnMgfSBmcm9tIFwiLi9jb25uZWN0aW9uc1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uT3V0cHV0cyB7XG4gIC8qKlxuICAgKiBBV1MgTGFtYmRhIGZ1bmN0aW9uIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQVdTIExhbWJkYSBhcm4gb2YgdGhlIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSBhcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSBSb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGUgTGFtYmRhIGZ1bmN0aW9uXG4gICAqL1xuICByZWFkb25seSByb2xlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIFVSTCBpZiBlbmFibGVkXG4gICAqL1xuICByZWFkb25seSB1cmw/OiBzdHJpbmcgfCBJUmVzb2x2YWJsZTtcblxuICAvKipcbiAgICogU2VjdXJpdHkgZ3JvdXAgb2YgdGhlIGZ1bmN0aW9uIGlmIGNyZWF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRTZWN1cml0eUdyb3VwPzogc3RyaW5nIHwgSVJlc29sdmFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25PcHRpb25zIGV4dGVuZHMgRXZlbnRJbnZva2VDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZvcmNlIGZ1bmN0aW9uIG5hbWUgKGZvciBhZG9wdGlvbiBvZiBleGlzdGluZyByZXNvdXJjZXMpLlxuICAgKlxuICAgKiBQcmVmZXIgdG8gdXNlIGZ1bmN0aW9uTmFtZVByZWZpeC5cbiAgICpcbiAgICogVXNlIFtUZXJyYWZvcm0gUmVzb3VyY2UgTWV0YSBBcmd1bWVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL3Jlc291cmNlcy9zeW50YXgjbWV0YS1hcmd1bWVudHMpXG4gICAqIHRvIGNvbnRyb2wgbGlmZWN5Y2xlIHdoZW4gcmVwbGFjaW5nIHRoZSBmdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiBvbWl0dGVkLCBSZWZlciB0byBgZnVuY3Rpb25OYW1lUHJlZml4YC5cbiAgICovXG4gIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBuYW1lIHByZWZpeCBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEdyaWQgZ2VuZXJhdGVzIGEgdW5pcXVlIHBoeXNpY2FsIElEIGFuZCB1c2VzIHRoYXRcbiAgICogSUQgZm9yIHRoZSBmdW5jdGlvbidzIG5hbWUuXG4gICAqL1xuICByZWFkb25seSBmdW5jdGlvbk5hbWVQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gYmUgcGFzc2VkIHRvIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gICAqXG4gICAqIEtleS12YWx1ZSBwYWlycyB0aGF0IExhbWJkYSBjYWNoZXMgYW5kIG1ha2VzIGF2YWlsYWJsZSBmb3IgeW91ciBMYW1iZGFcbiAgICogZnVuY3Rpb25zLiBVc2UgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIGFwcGx5IGNvbmZpZ3VyYXRpb24gY2hhbmdlcywgc3VjaFxuICAgKiBhcyB0ZXN0IGFuZCBwcm9kdWN0aW9uIGVudmlyb25tZW50IGNvbmZpZ3VyYXRpb25zLCB3aXRob3V0IGNoYW5naW5nIHlvdXJcbiAgICogTGFtYmRhIGZ1bmN0aW9uIHNvdXJjZSBjb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBEZXNjcmlwdGlvbiBvZiB3aGF0IHlvdXIgTGFtYmRhIEZ1bmN0aW9uIGRvZXMuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN5c3RlbSBhcmNoaXRlY3R1cmVzIGNvbXBhdGlibGUgd2l0aCB0aGlzIGxhbWJkYSBmdW5jdGlvbi5cbiAgICogQGRlZmF1bHQgQXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlPzogQXJjaGl0ZWN0dXJlO1xuXG4gIC8qKlxuICAgKiBUaGUgdHJhY2luZyBtb2RlIGZvciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGlhbSByb2xlIHdpbGwgcmVjZWl2ZSBwZXJtaXNzaW9uIHRvXG4gICAqIHdyaXRlIHRvIEFXUyBYLVJheS5cbiAgICpcbiAgICogQGRlZmF1bHQgVHJhY2luZy5BQ1RJVkVcbiAgICovXG4gIHJlYWRvbmx5IHRyYWNpbmc/OiBUcmFjaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nIHJldGVudGlvbiBwZXJpb2QgaW4gZGF5cy4gRGVmYXVsdHMgdG8gNy5cbiAgICovXG4gIHJlYWRvbmx5IGxvZ1JldGVudGlvbkluRGF5cz86IFJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIFRoZSBtZW1vcnkgbGltaXQgaW4gTUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEyOC5cbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiBleGVjdXRpb24gdGltZSAoaW4gc2Vjb25kcykgYWZ0ZXIgd2hpY2ggTGFtYmRhIHRlcm1pbmF0ZXNcbiAgICogdGhlIGZ1bmN0aW9uLiBCZWNhdXNlIHRoZSBleGVjdXRpb24gdGltZSBhZmZlY3RzIGNvc3QsIHNldCB0aGlzIHZhbHVlXG4gICAqIGJhc2VkIG9uIHRoZSBmdW5jdGlvbidzIGV4cGVjdGVkIGV4ZWN1dGlvbiB0aW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBEdXJhdGlvbi5zZWNvbmRzKDMpXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIExheWVycyBmb3IgdGhlIExhbWJkYS5cbiAgICovXG4gIHJlYWRvbmx5IGxheWVycz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsIHBvbGljeSBzdGF0ZW1lbnRzIHRvIGFkZCB0byB0aGUgY3JlYXRlZCBMYW1iZGEgUm9sZS5cbiAgICpcbiAgICogWW91IGNhbiBjYWxsIGBhZGRUb1JvbGVQb2xpY3lgIHRvIHRoZSBjcmVhdGVkIGxhbWJkYSB0byBhZGQgc3RhdGVtZW50cyBwb3N0IGNyZWF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHBvbGljeSBzdGF0ZW1lbnRzIGFyZSBhZGRlZCB0byB0aGUgY3JlYXRlZCBMYW1iZGEgcm9sZS5cbiAgICovXG4gIHJlYWRvbmx5IGluaXRpYWxQb2xpY3k/OiBpYW0uUG9saWN5U3RhdGVtZW50W107XG5cbiAgLyoqXG4gICAqIExhbWJkYSBleGVjdXRpb24gcm9sZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgcm9sZSB0aGF0IHdpbGwgYmUgYXNzdW1lZCBieSB0aGUgZnVuY3Rpb24gdXBvbiBleGVjdXRpb24uXG4gICAqIEl0IGNvbnRyb2xzIHRoZSBwZXJtaXNzaW9ucyB0aGF0IHRoZSBmdW5jdGlvbiB3aWxsIGhhdmUuIFRoZSBSb2xlIG11c3RcbiAgICogYmUgYXNzdW1hYmxlIGJ5IHRoZSAnbGFtYmRhLmFtYXpvbmF3cy5jb20nIHNlcnZpY2UgcHJpbmNpcGFsLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBSb2xlIGF1dG9tYXRpY2FsbHkgaGFzIHBlcm1pc3Npb25zIGdyYW50ZWQgZm9yIExhbWJkYSBleGVjdXRpb24uIElmIHlvdVxuICAgKiBwcm92aWRlIGEgUm9sZSwgeW91IG11c3QgYWRkIHRoZSByZWxldmFudCBBV1MgbWFuYWdlZCBwb2xpY2llcyB5b3Vyc2VsZi5cbiAgICpcbiAgICogVGhlIHJlbGV2YW50IG1hbmFnZWQgcG9saWNpZXMgYXJlIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZVwiIGFuZFxuICAgKiBcInNlcnZpY2Utcm9sZS9BV1NMYW1iZGFWUENBY2Nlc3NFeGVjdXRpb25Sb2xlXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gQSB1bmlxdWUgcm9sZSB3aWxsIGJlIGdlbmVyYXRlZCBmb3IgdGhpcyBsYW1iZGEgZnVuY3Rpb24uXG4gICAqIEJvdGggc3VwcGxpZWQgYW5kIGdlbmVyYXRlZCByb2xlcyBjYW4gYWx3YXlzIGJlIGNoYW5nZWQgYnkgY2FsbGluZyBgYWRkVG9Sb2xlUG9saWN5YC5cbiAgICovXG4gIHJlYWRvbmx5IHJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIExhbWJkYSBGdW5jdGlvbnMgaW4gYSBwdWJsaWMgc3VibmV0IGNhbiBOT1QgYWNjZXNzIHRoZSBpbnRlcm5ldC5cbiAgICogVXNlIHRoaXMgcHJvcGVydHkgdG8gYWNrbm93bGVkZ2UgdGhpcyBsaW1pdGF0aW9uIGFuZCBzdGlsbCBwbGFjZSB0aGUgZnVuY3Rpb24gaW4gYSBwdWJsaWMgc3VibmV0LlxuICAgKiBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzUyOTkyMDg1L3doeS1jYW50LWFuLWF3cy1sYW1iZGEtZnVuY3Rpb24taW5zaWRlLWEtcHVibGljLXN1Ym5ldC1pbi1hLXZwYy1jb25uZWN0LXRvLXRoZS81Mjk5NDg0MSM1Mjk5NDg0MVxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dQdWJsaWNTdWJuZXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWcgZm9yIG5ldHdvcmsgY29ubmVjdGl2aXR5IHRvIEFXUyByZXNvdXJjZXMgaW4gYSBWUEMsIHNwZWNpZnkgYSBsaXN0XG4gICAqIG9mIHN1Ym5ldCwgYW5kIG9wdGlvbmFsbHkgc2VjdXJpdHkgZ3JvdXBzLCBpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBUaGUgTGFtYmRhIGZ1bmN0aW9uIGlhbSByb2xlIHdpbGwgcmVjZWl2ZSBwZXJtaXNzaW9uIHRvXG4gICAqIG1hbmFnZSBFTklzIHdpdGhpbiB0aGUgcHJvdmlkZWQgbmV0d29yay5cbiAgICpcbiAgICogV2hlbiB5b3UgY29ubmVjdCBhIGZ1bmN0aW9uIHRvIGEgVlBDLCBpdCBjYW4gb25seSBhY2Nlc3MgcmVzb3VyY2VzIGFuZCB0aGUgaW50ZXJuZXQgdGhyb3VnaCB0aGF0IFZQQy5cbiAgICpcbiAgICogU2VlIFtWUEMgU2V0dGluZ3NdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2NvbmZpZ3VyYXRpb24tdnBjLmh0bWwpLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCAtIFRoaXMgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCwgdXNlIHZwYyBhbmQgb3RoZXIgcmVsYXRlZCBwcm9wZXJ0aWVzIGluc3RlYWRcbiAgICovXG4gIHJlYWRvbmx5IG5ldHdvcmtDb25maWc/OiBWcGNDb25maWc7XG5cbiAgLyoqXG4gICAqIFZQQyBuZXR3b3JrIHRvIHBsYWNlIExhbWJkYSBuZXR3b3JrIGludGVyZmFjZXNcbiAgICpcbiAgICogU3BlY2lmeSB0aGlzIGlmIHRoZSBMYW1iZGEgZnVuY3Rpb24gbmVlZHMgdG8gYWNjZXNzIHJlc291cmNlcyBpbiBhIFZQQy5cbiAgICogVGhpcyBpcyByZXF1aXJlZCB3aGVuIGB2cGNTdWJuZXRzYCBpcyBzcGVjaWZpZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRnVuY3Rpb24gaXMgbm90IHBsYWNlZCB3aXRoaW4gYSBWUEMuXG4gICAqL1xuICByZWFkb25seSB2cGM/OiBJVnBjO1xuXG4gIC8qKlxuICAgKiBBbGxvd3Mgb3V0Ym91bmQgSVB2NiB0cmFmZmljIG9uIFZQQyBmdW5jdGlvbnMgdGhhdCBhcmUgY29ubmVjdGVkIHRvIGR1YWwtc3RhY2sgc3VibmV0cy5cbiAgICpcbiAgICogT25seSB1c2VkIGlmICd2cGMnIGlzIHN1cHBsaWVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVyZSB0byBwbGFjZSB0aGUgbmV0d29yayBpbnRlcmZhY2VzIHdpdGhpbiB0aGUgVlBDLlxuICAgKlxuICAgKiBUaGlzIHJlcXVpcmVzIGB2cGNgIHRvIGJlIHNwZWNpZmllZCBpbiBvcmRlciBmb3IgaW50ZXJmYWNlcyB0byBhY3R1YWxseSBiZVxuICAgKiBwbGFjZWQgaW4gdGhlIHN1Ym5ldHMuIElmIGB2cGNgIGlzIG5vdCBzcGVjaWZ5LCB0aGlzIHdpbGwgcmFpc2UgYW4gZXJyb3IuXG4gICAqXG4gICAqIE5vdGU6IEludGVybmV0IGFjY2VzcyBmb3IgTGFtYmRhIEZ1bmN0aW9ucyByZXF1aXJlcyBhIE5BVCBHYXRld2F5LCBzbyBwaWNraW5nXG4gICAqIHB1YmxpYyBzdWJuZXRzIGlzIG5vdCBhbGxvd2VkICh1bmxlc3MgYGFsbG93UHVibGljU3VibmV0YCBpcyBzZXQgdG8gYHRydWVgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgVnBjIGRlZmF1bHQgc3RyYXRlZ3kgaWYgbm90IHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgdnBjU3VibmV0cz86IFN1Ym5ldFNlbGVjdGlvbjtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2Ygc2VjdXJpdHkgZ3JvdXBzIHRvIGFzc29jaWF0ZSB3aXRoIHRoZSBMYW1iZGEncyBuZXR3b3JrIGludGVyZmFjZXMuXG4gICAqXG4gICAqIE9ubHkgdXNlZCBpZiAndnBjJyBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBJZiB0aGUgZnVuY3Rpb24gaXMgcGxhY2VkIHdpdGhpbiBhIFZQQyBhbmQgYSBzZWN1cml0eSBncm91cCBpc1xuICAgKiBub3Qgc3BlY2lmaWVkLCBlaXRoZXIgYnkgdGhpcyBvciBzZWN1cml0eUdyb3VwIHByb3AsIGEgZGVkaWNhdGVkIHNlY3VyaXR5XG4gICAqIGdyb3VwIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5R3JvdXBzPzogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBhbGxvdyB0aGUgTGFtYmRhIHRvIHNlbmQgYWxsIG5ldHdvcmsgdHJhZmZpYyAoZXhjZXB0IGlwdjYpXG4gICAqXG4gICAqIElmIHNldCB0byBmYWxzZSwgeW91IG11c3QgaW5kaXZpZHVhbGx5IGFkZCB0cmFmZmljIHJ1bGVzIHRvIGFsbG93IHRoZVxuICAgKiBMYW1iZGEgdG8gY29ubmVjdCB0byBuZXR3b3JrIHRhcmdldHMuXG4gICAqXG4gICAqIERvIG5vdCBzcGVjaWZ5IHRoaXMgcHJvcGVydHkgaWYgdGhlIGBzZWN1cml0eUdyb3Vwc2Agb3IgYHNlY3VyaXR5R3JvdXBgIHByb3BlcnR5IGlzIHNldC5cbiAgICogSW5zdGVhZCwgY29uZmlndXJlIGBhbGxvd0FsbE91dGJvdW5kYCBkaXJlY3RseSBvbiB0aGUgc2VjdXJpdHkgZ3JvdXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsT3V0Ym91bmQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGFsbG93IHRoZSBMYW1iZGEgdG8gc2VuZCBhbGwgaXB2NiBuZXR3b3JrIHRyYWZmaWNcbiAgICpcbiAgICogSWYgc2V0IHRvIHRydWUsIHRoZXJlIHdpbGwgb25seSBiZSBhIHNpbmdsZSBlZ3Jlc3MgcnVsZSB3aGljaCBhbGxvd3MgYWxsXG4gICAqIG91dGJvdW5kIGlwdjYgdHJhZmZpYy4gSWYgc2V0IHRvIGZhbHNlLCB5b3UgbXVzdCBpbmRpdmlkdWFsbHkgYWRkIHRyYWZmaWMgcnVsZXMgdG8gYWxsb3cgdGhlXG4gICAqIExhbWJkYSB0byBjb25uZWN0IHRvIG5ldHdvcmsgdGFyZ2V0cyB1c2luZyBpcHY2LlxuICAgKlxuICAgKiBEbyBub3Qgc3BlY2lmeSB0aGlzIHByb3BlcnR5IGlmIHRoZSBgc2VjdXJpdHlHcm91cHNgIG9yIGBzZWN1cml0eUdyb3VwYCBwcm9wZXJ0eSBpcyBzZXQuXG4gICAqIEluc3RlYWQsIGNvbmZpZ3VyZSBgYWxsb3dBbGxJcHY2T3V0Ym91bmRgIGRpcmVjdGx5IG9uIHRoZSBzZWN1cml0eSBncm91cC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93QWxsSXB2Nk91dGJvdW5kPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIFNRUyBETFEuXG4gICAqXG4gICAqIFRoZSBMYW1iZGEgZnVuY3Rpb24gaWFtIHJvbGUgd2lsbCByZWNlaXZlIHBlcm1pc3Npb24gdG9cbiAgICogc2VuZCBtZXNzYWdlcyBvbiB0aGlzIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGRlYWRsZXR0ZXIgcXVldWVcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRMZXR0ZXJRdWV1ZT86IElRdWV1ZTtcblxuICAvKipcbiAgICogRW5hYmxlZCBETFEuIElmIGBkZWFkTGV0dGVyUXVldWVgIGlzIHVuZGVmaW5lZCxcbiAgICogYW4gU1FTIHF1ZXVlIHdpdGggZGVmYXVsdCBvcHRpb25zIHdpbGwgYmUgZGVmaW5lZCBmb3IgeW91ciBGdW5jdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZSB1bmxlc3MgYGRlYWRMZXR0ZXJRdWV1ZWAgaXMgc2V0LCB3aGljaCBpbXBsaWVzIERMUSBpcyBlbmFibGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLy8gVE9ETzogcmUtYWRkIFNOUyBkZWFkTGV0dGVyVG9waWNcblxuICAvKipcbiAgICogRXZlbnQgc291cmNlcyBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogWW91IGNhbiBhbHNvIGFkZCBldmVudCBzb3VyY2VzIHVzaW5nIGBhZGRFdmVudFNvdXJjZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gZXZlbnQgc291cmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGV2ZW50cz86IElFdmVudFNvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9oYXNoaWNvcnAvYXdzLzUuNjAuMC9kb2NzL3Jlc291cmNlcy9sYW1iZGFfZnVuY3Rpb24jcmVzZXJ2ZWRfY29uY3VycmVudF9leGVjdXRpb25zIExhbWJkYUZ1bmN0aW9uI3Jlc2VydmVkX2NvbmN1cnJlbnRfZXhlY3V0aW9uc31cbiAgICovXG4gIHJlYWRvbmx5IHJlc2VydmVkQ29uY3VycmVudEV4ZWN1dGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRhZ3MgdG8gYXBwbHkgdG8gdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBTZXR0aW5nIHRoaXMgcHJvcGVydHkgaW5mb3JtcyB0aGUgQ0RLIHRoYXQgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIEFMUkVBRFkgSEFTIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnNcbiAgICogZm9yIHdoYXQgeW91IGFyZSB0cnlpbmcgdG8gZG8uIFdoZW4gbm90IGNvbmZpZ3VyZWQsIHRoZSBDREsgYXR0ZW1wdHMgdG8gYXV0by1kZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBhcmUgbmVjZXNzYXJ5IG9uIHRoZSBmdW5jdGlvbiB3aGVuIGdyYW50IEFQSXMgYXJlIHVzZWQuIElmIHRoZSBDREsgdHJpZWQgdG8gYWRkXG4gICAqIHBlcm1pc3Npb25zIG9uIGFuIGltcG9ydGVkIGxhbWJkYSwgaXQgd2lsbCBmYWlsLlxuICAgKlxuICAgKiBTZXQgdGhpcyBwcm9wZXJ0eSAqT05MWSBJRiogeW91IGFyZSBjb21taXR0aW5nIHRvIG1hbmFnZSB0aGUgaW1wb3J0ZWQgZnVuY3Rpb24ncyBwZXJtaXNzaW9ucyBvdXRzaWRlIG9mXG4gICAqIENESy4gWW91IGFyZSBhY2tub3dsZWRnaW5nIHRoYXQgeW91ciBDREsgY29kZSBhbG9uZSB3aWxsIGhhdmUgaW5zdWZmaWNpZW50IHBlcm1pc3Npb25zIHRvIGFjY2VzcyB0aGVcbiAgICogaW1wb3J0ZWQgZnVuY3Rpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBza2lwUGVybWlzc2lvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBsb2dnaW5nRm9ybWF0IGZvciB0aGUgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IExvZ2dpbmdGb3JtYXQuVEVYVFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ0Zvcm1hdD86IExvZ2dpbmdGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGFwcGxpY2F0aW9uIGxvZyBsZXZlbCBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKiBAZGVmYXVsdCBBcHBsaWNhdGlvbkxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IGFwcGxpY2F0aW9uTG9nTGV2ZWw/OiBBcHBsaWNhdGlvbkxvZ0xldmVsO1xuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBzeXN0ZW0gbG9nIGxldmVsIGZvciB0aGUgZnVuY3Rpb24uXG4gICAqIEBkZWZhdWx0IFN5c3RlbUxvZ0xldmVsLklORk9cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbUxvZ0xldmVsPzogU3lzdGVtTG9nTGV2ZWw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHB1Ymxpc2ggY3JlYXRpb24vY2hhbmdlIGFzIG5ldyBMYW1iZGEgRnVuY3Rpb24gVmVyc2lvbi5cbiAgICpcbiAgICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy9sYXRlc3QvZG9jcy9yZXNvdXJjZXMvbGFtYmRhX2Z1bmN0aW9uI3B1Ymxpc2ggTGFtYmRhRnVuY3Rpb24jcHVibGlzaH1cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHB1Ymxpc2g/OiBib29sZWFuIHwgSVJlc29sdmFibGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25Qcm9wcyBleHRlbmRzIEZ1bmN0aW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3IgdGhlIExhbWJkYSBmdW5jdGlvbiB0aGF0IHlvdSBhcmUgdXBsb2FkaW5nLlxuICAgKiBGb3IgdmFsaWQgdmFsdWVzLCBzZWUgdGhlIFJ1bnRpbWUgcHJvcGVydHkgaW4gdGhlIEFXUyBMYW1iZGEgRGV2ZWxvcGVyXG4gICAqIEd1aWRlLlxuICAgKlxuICAgKiBVc2UgYFJ1bnRpbWUuRlJPTV9JTUFHRWAgd2hlbiBkZWZpbmluZyBhIGZ1bmN0aW9uIGZyb20gYSBEb2NrZXIgaW1hZ2UuXG4gICAqL1xuICByZWFkb25seSBydW50aW1lOiBSdW50aW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIGNvZGUgb2YgeW91ciBMYW1iZGEgZnVuY3Rpb24uIFlvdSBjYW4gcG9pbnQgdG8gYSBmaWxlIGluIGFuXG4gICAqIEFtYXpvbiBTaW1wbGUgU3RvcmFnZSBTZXJ2aWNlIChBbWF6b24gUzMpIGJ1Y2tldCBvciBzcGVjaWZ5IHlvdXIgc291cmNlXG4gICAqIGNvZGUgYXMgaW5saW5lIHRleHQuXG4gICAqL1xuICByZWFkb25seSBjb2RlOiBDb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kIHdpdGhpbiB5b3VyIGNvZGUgdGhhdCBMYW1iZGEgY2FsbHMgdG8gZXhlY3V0ZVxuICAgKiB5b3VyIGZ1bmN0aW9uLiBUaGUgZm9ybWF0IGluY2x1ZGVzIHRoZSBmaWxlIG5hbWUuIEl0IGNhbiBhbHNvIGluY2x1ZGVcbiAgICogbmFtZXNwYWNlcyBhbmQgb3RoZXIgcXVhbGlmaWVycywgZGVwZW5kaW5nIG9uIHRoZSBydW50aW1lLlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9sYW1iZGEvbGF0ZXN0L2RnL2ZvdW5kYXRpb24tcHJvZ21vZGVsLmh0bWwuXG4gICAqXG4gICAqIFVzZSBgSGFuZGxlci5GUk9NX0lNQUdFYCB3aGVuIGRlZmluaW5nIGEgZnVuY3Rpb24gZnJvbSBhIERvY2tlciBpbWFnZS5cbiAgICpcbiAgICogTk9URTogSWYgeW91IHNwZWNpZnkgeW91ciBzb3VyY2UgY29kZSBhcyBpbmxpbmUgdGV4dCBieSBzcGVjaWZ5aW5nIHRoZVxuICAgKiBaaXBGaWxlIHByb3BlcnR5IHdpdGhpbiB0aGUgQ29kZSBwcm9wZXJ0eSwgc3BlY2lmeSBpbmRleC5mdW5jdGlvbl9uYW1lIGFzXG4gICAqIHRoZSBoYW5kbGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xufVxuXG4vLyByZS1hZGQgZWMyLklDb25uZWN0YWJsZT9cblxuLy8gLyoqXG4vLyAgKiBBIExhbWJkYSBmdW5jdGlvbi5cbi8vICAqL1xuLy8gZXhwb3J0IGludGVyZmFjZSBJRnVuY3Rpb24gZXh0ZW5kcyBJQXdzQ29uc3RydWN0LCBpYW0uSUdyYW50YWJsZSB7XG5cbi8vICAgLyoqXG4vLyAgICAqIEFkZCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGlzIGZ1bmN0aW9uLlxuLy8gICAgKi9cbi8vICAgYWRkRW52aXJvbm1lbnQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBJRnVuY3Rpb247XG4vLyB9XG5cbi8qKlxuICogUHJvdmlkZXMgYSBMYW1iZGEgRnVuY3Rpb24gcmVzb3VyY2UuIExhbWJkYSBhbGxvd3MgeW91IHRvIHRyaWdnZXIgZXhlY3V0aW9uXG4gKiBvZiBjb2RlIGluIHJlc3BvbnNlIHRvIGV2ZW50cyBpbiBBV1MsIGVuYWJsaW5nIHNlcnZlcmxlc3MgYmFja2VuZCBzb2x1dGlvbnMuXG4gKlxuICogVGhlIExhbWJkYSBGdW5jdGlvbiBpdHNlbGYgaW5jbHVkZXMgc291cmNlIGNvZGUgYW5kIHJ1bnRpbWUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBUaGlzIENvbnN0cnVjdCBtYW5hZ2VzIHBlcm1pc3Npb25zIGFzIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIFByaW5jaXBhbCBpYW0gcG9saWN5LlxuICogVGhpcyB3b3JrcyBmb3Igc2FtZSBhY2NvdW50IHJlc291cmNlcywgYnV0IGZvciBjcm9zcy1hY2NvdW50IHJlc291cmNlcyxcbiAqIHlvdSBtYXkgbmVlZCB0byBtYW5hZ2UgYWNjZXNzIGFzIHBhcnQgb2YgdGhlIFJlc291cmNlIGlhbSBwb2xpY3kuXG4gKlxuICogQHJlc291cmNlIGF3c19sYW1iZGFfZnVuY3Rpb25cbiAqIEBiZWFjb24tY2xhc3MgY29tcHV0ZS5JRnVuY3Rpb25cbiAqL1xuZXhwb3J0IGNsYXNzIExhbWJkYUZ1bmN0aW9uIGV4dGVuZHMgTGFtYmRhRnVuY3Rpb25CYXNlIGltcGxlbWVudHMgSUZ1bmN0aW9uIHtcbiAgLy8gVE9ETzogVGVycmFmb3JtIGF3c19sYW1iZGFfZnVuY3Rpb24gPT0gQ0RLIEZ1bmN0aW9uVmVyc2lvblxuXG4gIC8qKlxuICAgKiBMYXRlc3QgcHVibGlzaGVkIHZlcnNpb24gb2YgeW91ciBMYW1iZGEgRnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlzIHRoaXMgaWYgcHVibGlzaCBpcyBmYWxzZT8/XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UudmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBsYW1iZGEgZnVuY3Rpb24gaW50byB0aGUgVGVycmFDb25zdHJ1Y3Qgc3BlYyB1c2luZyBpdHMgbmFtZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRnVuY3Rpb25OYW1lKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvbk5hbWU6IHN0cmluZyxcbiAgKTogSUZ1bmN0aW9uIHtcbiAgICByZXR1cm4gTGFtYmRhRnVuY3Rpb24uZnJvbUZ1bmN0aW9uQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIGZ1bmN0aW9uQXJuOiBBd3NTdGFjay5vZkF3c0NvbnN0cnVjdChzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogXCJsYW1iZGFcIixcbiAgICAgICAgcmVzb3VyY2U6IFwiZnVuY3Rpb25cIixcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBmdW5jdGlvbk5hbWUsXG4gICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICB9KSxcbiAgICAgIHNhbWVFbnZpcm9ubWVudDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYSBsYW1iZGEgZnVuY3Rpb24gaW50byB0aGUgVGVycmFDb25zdHJ1Y3Qgc3BlYyB1c2luZyBpdHMgQVJOLlxuICAgKlxuICAgKiBGb3IgYEZ1bmN0aW9uLmFkZFBlcm1pc3Npb25zKClgIHRvIHdvcmsgb24gdGhpcyBpbXBvcnRlZCBsYW1iZGEsIG1ha2Ugc3VyZSB0aGF0IGlzXG4gICAqIGluIHRoZSBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBhcyB0aGUgc3RhY2sgeW91IGFyZSBpbXBvcnRpbmcgaXQgaW50by5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZ1bmN0aW9uQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBmdW5jdGlvbkFybjogc3RyaW5nLFxuICApOiBJRnVuY3Rpb24ge1xuICAgIHJldHVybiBMYW1iZGFGdW5jdGlvbi5mcm9tRnVuY3Rpb25BdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBmdW5jdGlvbkFybiB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgTGFtYmRhIGZ1bmN0aW9uIG9iamVjdCB3aGljaCByZXByZXNlbnRzIGEgZnVuY3Rpb24gbm90IGRlZmluZWRcbiAgICogd2l0aGluIHRoaXMgc3RhY2suXG4gICAqXG4gICAqIEZvciBgRnVuY3Rpb24uYWRkUGVybWlzc2lvbnMoKWAgdG8gd29yayBvbiB0aGlzIGltcG9ydGVkIGxhbWJkYSwgc2V0IHRoZSBzYW1lRW52aXJvbm1lbnQgcHJvcGVydHkgdG8gdHJ1ZVxuICAgKiBpZiB0aGlzIGltcG9ydGVkIGxhbWJkYSBpcyBpbiB0aGUgc2FtZSBhY2NvdW50IGFuZCByZWdpb24gYXMgdGhlIHN0YWNrIHlvdSBhcmUgaW1wb3J0aW5nIGl0IGludG8uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgcGFyZW50IGNvbnN0cnVjdFxuICAgKiBAcGFyYW0gaWQgVGhlIG5hbWUgb2YgdGhlIGxhbWJkYSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIGF0dHJzIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBmdW5jdGlvbiB0byBpbXBvcnRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUZ1bmN0aW9uQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IEZ1bmN0aW9uQXR0cmlidXRlcyxcbiAgKTogSUZ1bmN0aW9uIHtcbiAgICBjb25zdCBmdW5jdGlvbkFybiA9IGF0dHJzLmZ1bmN0aW9uQXJuO1xuICAgIGNvbnN0IGZ1bmN0aW9uTmFtZSA9IGV4dHJhY3ROYW1lRnJvbUFybihhdHRycy5mdW5jdGlvbkFybik7XG4gICAgY29uc3Qgcm9sZSA9IGF0dHJzLnJvbGU7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBMYW1iZGFGdW5jdGlvbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlOiBkYXRhQXdzTGFtYmRhRnVuY3Rpb24uRGF0YUF3c0xhbWJkYUZ1bmN0aW9uO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGZ1bmN0aW9uTmFtZSA9IGZ1bmN0aW9uTmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbkFybiA9IGZ1bmN0aW9uQXJuO1xuICAgICAgcHVibGljIGdldCBmdW5jdGlvblF1YWxpZmllZEludm9rZUFybigpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB7IHJlZ2lvbiwgcGFydGl0aW9uIH0gPSBBcm4uc3BsaXQoXG4gICAgICAgICAgZnVuY3Rpb25Bcm4sXG4gICAgICAgICAgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBgYXJuOiR7cGFydGl0aW9ufTphcGlnYXRld2F5OiR7cmVnaW9ufTpsYW1iZGE6cGF0aC8yMDE1LTAzLTMxL2Z1bmN0aW9ucy8ke2Z1bmN0aW9uQXJufS9pbnZvY2F0aW9uc2A7XG4gICAgICB9XG4gICAgICBwdWJsaWMgZ2V0IGZ1bmN0aW9uSW52b2tlQXJuKCk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHsgcmVnaW9uLCBwYXJ0aXRpb24gfSA9IEFybi5zcGxpdChcbiAgICAgICAgICBmdW5jdGlvbkFybixcbiAgICAgICAgICBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGBhcm46JHtwYXJ0aXRpb259OmFwaWdhdGV3YXk6JHtyZWdpb259OmxhbWJkYTpwYXRoLzIwMTUtMDMtMzEvZnVuY3Rpb25zLyR7ZnVuY3Rpb25Bcm59L2ludm9jYXRpb25zYDtcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IFJlc29sdmUgcm9sZSBhbmQgcHJpbmNpcGFsIHJlc29sdmUgZnJvbSBURiBkYXRhIHNvdXJjZT9cbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcm9sZSA9IHJvbGU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbnNOb2RlID0gdGhpcy5ub2RlO1xuICAgICAgLyoqXG4gICAgICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgTGFtYmRhIGZ1bmN0aW9uIHJldHVybmVkLlxuICAgICAgICpcbiAgICAgICAqIElmIHF1YWxpZmllciBpcyBub3Qgc2V0LCB0aGlzIHdpbGwgcmVzb2x2ZSB0byB0aGUgbW9zdCByZWNlbnQgcHVibGlzaGVkIHZlcnNpb24uXG4gICAgICAgKiBJZiBubyBwdWJsaXNoZWQgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gZXhpc3RzLCB2ZXJzaW9uIHdpbGwgcmVzb2x2ZSB0byBgJExBVEVTVGAuXG4gICAgICAgKi9cbiAgICAgIHB1YmxpYyBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS52ZXJzaW9uO1xuICAgICAgfVxuICAgICAgLy8gRm9yY2UgdXNlciB0byBwcm92aWRlIGFyY2ggb3IgYXNzdW1lIFg4Nl82NFxuICAgICAgcHVibGljIHJlYWRvbmx5IGFyY2hpdGVjdHVyZSA9IGF0dHJzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0O1xuICAgICAgLy8gcHVibGljIGdldCBhcmNoaXRlY3R1cmUoKTogc3RyaW5nIHtcbiAgICAgIC8vICAgcmV0dXJuIEZuLmVsZW1lbnQodGhpcy5yZXNvdXJjZS5hcmNoaXRlY3R1cmVzLCAwKSBhcyBzdHJpbmc7XG4gICAgICAvLyB9XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VBcm5zRm9yR3JhbnRJbnZva2UgPSBbXG4gICAgICAgIHRoaXMuZnVuY3Rpb25Bcm4sXG4gICAgICAgIGAke3RoaXMuZnVuY3Rpb25Bcm59OipgLFxuICAgICAgXTtcbiAgICAgIHB1YmxpYyBnZXQgZnVuY3Rpb25PdXRwdXRzKCk6IEZ1bmN0aW9uT3V0cHV0cyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgYXJuOiB0aGlzLmZ1bmN0aW9uQXJuLFxuICAgICAgICAgIHJvbGVBcm46IHRoaXMucm9sZT8ucm9sZUFybiA/PyBcIlwiLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcHVibGljIGdldCBvdXRwdXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mdW5jdGlvbk91dHB1dHM7XG4gICAgICB9XG4gICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuQ3JlYXRlUGVybWlzc2lvbnMgPVxuICAgICAgICBhdHRycy5zYW1lRW52aXJvbm1lbnQgPz8gdGhpcy5faXNTdGFja0FjY291bnQoKTtcbiAgICAgIHByb3RlY3RlZCByZWFkb25seSBfc2tpcFBlcm1pc3Npb25zID0gYXR0cnMuc2tpcFBlcm1pc3Npb25zID8/IGZhbHNlO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpLCB7XG4gICAgICAgICAgZW52aXJvbm1lbnRGcm9tQXJuOiBmdW5jdGlvbkFybixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9XG4gICAgICAgICAgcm9sZSB8fCBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBkYXRhQXdzTGFtYmRhRnVuY3Rpb24uRGF0YUF3c0xhbWJkYUZ1bmN0aW9uKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgXCJSZXNvdXJjZVwiLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyAvLyBUT0RPOiByZS1hZGQgc3VwcG9ydCBmb3IgRUMyIGNvbm5lY3Rpb25zXG4gICAgICAgIC8vIGlmIChhdHRycy5zZWN1cml0eUdyb3VwKSB7XG4gICAgICAgIC8vICAgdGhpcy5fY29ubmVjdGlvbnMgPSBuZXcgZWMyLkNvbm5lY3Rpb25zKHtcbiAgICAgICAgLy8gICAgIHNlY3VyaXR5R3JvdXBzOiBbYXR0cnMuc2VjdXJpdHlHcm91cF0sXG4gICAgICAgIC8vICAgfSk7XG4gICAgICAgIC8vIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHJlc291cmNlOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vdXRwdXRzOiBGdW5jdGlvbk91dHB1dHM7XG5cbiAgLyoqIFN0cm9uZ2x5IFR5cGVkIEZ1bmN0aW9uIE91dHB1dHMgKi9cbiAgcHVibGljIGdldCBmdW5jdGlvbk91dHB1dHMoKTogRnVuY3Rpb25PdXRwdXRzIHtcbiAgICByZXR1cm4gdGhpcy5fb3V0cHV0cztcbiAgfVxuICBwdWJsaWMgZ2V0IG91dHB1dHMoKTogUmVjb3JkPHN0cmluZywgYW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25PdXRwdXRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBmdW5jdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFSTiBmbyB0aGUgZnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZ1bmN0aW9uQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UuYXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gZm8gdGhlIGZ1bmN0aW9uLlxuICAgKiAoaWYgdmVyc2lvbmluZyBpcyBlbmFibGVkIHZpYSBwdWJsaXNoID0gdHJ1ZSlcbiAgICovXG4gIHB1YmxpYyBnZXQgZnVuY3Rpb25RdWFsaWZpZWRBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5xdWFsaWZpZWRBcm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIEZ1bGx5IFF1YWxpZmllZCBJbnZva2UgQVJOIGZvIHRoZSBmdW5jdGlvbiB0byBiZSB1c2VkIGZyb20gQVBJIEdhdGV3YXkuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgZG9lcyBub3Qgc2VlbSB0byB3b3JrIHdpdGggQXV0aG9yaXplcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZnVuY3Rpb25RdWFsaWZpZWRJbnZva2VBcm4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvdXJjZS5xdWFsaWZpZWRJbnZva2VBcm47XG4gIH1cblxuICAvKipcbiAgICogVGhlIEludm9rZSBBUk4gZm8gdGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgZnJvbSBBUEkgR2F0ZXdheS5cbiAgICpcbiAgICogTk9URTogVXNlIHRoaXMgZm9yIEF1dGhvcml6ZXJzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZ1bmN0aW9uSW52b2tlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2UuaW52b2tlQXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBMYW1iZGEgRnVuY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXJjaGl0ZWN0dXJlOiBBcmNoaXRlY3R1cmU7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdGhpcyBMYW1iZGEgRnVuY3Rpb24gaXMgcnVubmluZyBhc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICAvKipcbiAgICogVGhlIElBTSByb2xlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBVbmRlZmluZWQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBpbXBvcnRlZCB3aXRob3V0IGEgcm9sZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb2xlPzogaWFtLklSb2xlO1xuXG4gIC8qKlxuICAgKiBUaGUgcnVudGltZSBjb25maWd1cmVkIGZvciB0aGlzIGxhbWJkYS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBydW50aW1lOiBSdW50aW1lO1xuXG4gIC8qKlxuICAgKiBUaGUgRExRIChhcyBxdWV1ZSkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgTGFtYmRhIEZ1bmN0aW9uICh0aGlzIGlzIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVhZExldHRlclF1ZXVlPzogSVF1ZXVlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZW91dCBjb25maWd1cmVkIGZvciB0aGlzIGxhbWJkYS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0aW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBjb25zdHJ1Y3Qgbm9kZSB3aGVyZSBwZXJtaXNzaW9ucyBhcmUgYXR0YWNoZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGVybWlzc2lvbnNOb2RlID0gdGhpcy5ub2RlO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBjYW5DcmVhdGVQZXJtaXNzaW9ucyA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE1hcHBpbmcgb2YgaW52b2NhdGlvbiBwcmluY2lwYWxzIHRvIGdyYW50cy4gVXNlZCB0byBkZS1kdXBlIGBncmFudEludm9rZSgpYCBjYWxscy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2ludm9jYXRpb25HcmFudHM6IFJlY29yZDxzdHJpbmcsIGlhbS5HcmFudD4gPSB7fTtcblxuICAvKipcbiAgICogTWFwcGluZyBvZiBmdWNudGlvbiBVUkwgaW52b2NhdGlvbiBwcmluY2lwYWxzIHRvIGdyYW50cy4gVXNlZCB0byBkZS1kdXBlIGBncmFudEludm9rZVVybCgpYCBjYWxscy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcm90ZWN0ZWQgX2Z1bmN0aW9uVXJsSW52b2NhdGlvbkdyYW50czogUmVjb3JkPHN0cmluZywgaWFtLkdyYW50PiA9IHt9O1xuXG4gIC8vIC8vIFRlcmFmb3JtIHByb3ZpZGVyIGZvciBBV1MgQXV0b21hdGljYWxseSBtYW5hZ2VzIEZ1bmN0aW9uIFZlcnNpb25pbmcgdGhyb3VnaCBjb2RlIGhhc2guLlxuICAvLyAvLyBuZWVkIHRvIGRyb3AgbW9zdCBvZiB0aGlzIHZlcnNpb24gbG9naWMuLlxuXG4gIC8vIHByaXZhdGUgcmVhZG9ubHkgY3VycmVudFZlcnNpb25PcHRpb25zPzogVmVyc2lvbk9wdGlvbnM7XG4gIC8vIHByaXZhdGUgX2N1cnJlbnRWZXJzaW9uPzogVmVyc2lvbjtcbiAgLy8gLyoqXG4gIC8vICAqIFJldHVybnMgYSBgbGFtYmRhLlZlcnNpb25gIHdoaWNoIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzXG4gIC8vICAqIExhbWJkYSBmdW5jdGlvbi4gQSBuZXcgdmVyc2lvbiB3aWxsIGJlIGNyZWF0ZWQgZXZlcnkgdGltZSB0aGUgZnVuY3Rpb24nc1xuICAvLyAgKiBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG4gIC8vICAqXG4gIC8vICAqIFlvdSBjYW4gc3BlY2lmeSBvcHRpb25zIGZvciB0aGlzIHZlcnNpb24gdXNpbmcgdGhlIGBjdXJyZW50VmVyc2lvbk9wdGlvbnNgXG4gIC8vICAqIHByb3Agd2hlbiBpbml0aWFsaXppbmcgdGhlIGBsYW1iZGEuRnVuY3Rpb25gLlxuICAvLyAgKi9cbiAgLy8gcHVibGljIGdldCBjdXJyZW50VmVyc2lvbigpOiBWZXJzaW9uIHtcbiAgLy8gICBpZiAodGhpcy5fY3VycmVudFZlcnNpb24pIHtcbiAgLy8gICAgIHJldHVybiB0aGlzLl9jdXJyZW50VmVyc2lvbjtcbiAgLy8gICB9XG5cbiAgLy8gICAvLyBpZiAodGhpcy5fd2FybklmQ3VycmVudFZlcnNpb25DYWxsZWQpIHtcbiAgLy8gICAvLyAgIHRoaXMud2Fybkludm9rZUZ1bmN0aW9uUGVybWlzc2lvbnModGhpcyk7XG4gIC8vICAgLy8gfVxuXG4gIC8vICAgdGhpcy5fY3VycmVudFZlcnNpb24gPSBuZXcgVmVyc2lvbih0aGlzLCBcIkN1cnJlbnRWZXJzaW9uXCIsIHtcbiAgLy8gICAgIGxhbWJkYTogdGhpcyxcbiAgLy8gICAgIC4uLnRoaXMuY3VycmVudFZlcnNpb25PcHRpb25zLFxuICAvLyAgIH0pO1xuXG4gIC8vICAgLy8gb3ZlcnJpZGUgdGhlIHZlcnNpb24ncyBsb2dpY2FsIElEIHdpdGggYSBsYXp5IHN0cmluZyB3aGljaCBpbmNsdWRlcyB0aGVcbiAgLy8gICAvLyBoYXNoIG9mIHRoZSBmdW5jdGlvbiBpdHNlbGYsIHNvIGEgbmV3IHZlcnNpb24gcmVzb3VyY2UgaXMgY3JlYXRlZCB3aGVuXG4gIC8vICAgLy8gdGhlIGZ1bmN0aW9uIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cbiAgLy8gICBjb25zdCBjZm4gPSB0aGlzLl9jdXJyZW50VmVyc2lvbi5ub2RlLmRlZmF1bHRDaGlsZCBhcyBUZXJyYWZvcm1SZXNvdXJjZTtcbiAgLy8gICBjb25zdCBvcmlnaW5hbExvZ2ljYWxJZCA9IHRoaXMuc3RhY2sucmVzb2x2ZShjZm4ubG9naWNhbElkKSBhcyBzdHJpbmc7XG5cbiAgLy8gICBjZm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gIC8vICAgICBMYXp5LnN0cmluZ1ZhbHVlKHtcbiAgLy8gICAgICAgcHJvZHVjZTogKCkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGhhc2ggPSBjYWxjdWxhdGVGdW5jdGlvbkhhc2godGhpcywgdGhpcy5oYXNoTWl4aW5zLmpvaW4oXCJcIikpO1xuICAvLyAgICAgICAgIGNvbnN0IGxvZ2ljYWxJZCA9IHRyaW1Gcm9tU3RhcnQob3JpZ2luYWxMb2dpY2FsSWQsIDI1NSAtIDMyKTtcbiAgLy8gICAgICAgICByZXR1cm4gYCR7bG9naWNhbElkfSR7aGFzaH1gO1xuICAvLyAgICAgICB9LFxuICAvLyAgICAgfSksXG4gIC8vICAgKTtcblxuICAvLyAgIHJldHVybiB0aGlzLl9jdXJyZW50VmVyc2lvbjtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOKHMpIHRvIHB1dCBpbnRvIHRoZSByZXNvdXJjZSBmaWVsZCBvZiB0aGUgZ2VuZXJhdGVkIElBTSBwb2xpY3kgZm9yIGdyYW50SW52b2tlKClcbiAgICovXG4gIHB1YmxpYyBnZXQgcmVzb3VyY2VBcm5zRm9yR3JhbnRJbnZva2UoKSB7XG4gICAgLy8gVE9ETzogc2hvdWxkIHRoaXMgYmUgcXVhbGlmaWVkQXJuIG9yIHF1YWxpZmllZEludm9rZUFybj9cbiAgICAvLyBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvaGFzaGljb3JwL2F3cy81LjY4LjAvZG9jcy9yZXNvdXJjZXMvbGFtYmRhX2Z1bmN0aW9uI3F1YWxpZmllZF9hcm5cbiAgICByZXR1cm4gW3RoaXMuZnVuY3Rpb25Bcm4sIHRoaXMuZnVuY3Rpb25RdWFsaWZpZWRJbnZva2VBcm5dO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX2xvZ0dyb3VwOiBjbG91ZHdhdGNoTG9nR3JvdXAuQ2xvdWR3YXRjaExvZ0dyb3VwO1xuXG4gIC8qKlxuICAgKiBFbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoaXMgZnVuY3Rpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBlbnZpcm9ubWVudDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xuXG4gIHByaXZhdGUgX3VybD86IHN0cmluZztcbiAgLyoqXG4gICAqIEhUVFAgRW5kcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb24gaWYgZGVmaW5lZC5cbiAgICpcbiAgICogdXNlIGBhZGRGdW5jdGlvblVybGAgdG8gZW5hYmxlIEVuZHBvaW50LlxuICAgKi9cbiAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZXZlbnRTb3VyY2VzOiB7XG4gICAgW2lkOiBzdHJpbmddOiBsYW1iZGFFdmVudFNvdXJjZU1hcHBpbmcuTGFtYmRhRXZlbnRTb3VyY2VNYXBwaW5nO1xuICB9ID0ge307XG4gIHB1YmxpYyBnZXQgZXZlbnRTb3VyY2VzKCk6IGxhbWJkYUV2ZW50U291cmNlTWFwcGluZy5MYW1iZGFFdmVudFNvdXJjZU1hcHBpbmdbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fZXZlbnRTb3VyY2VzKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlY3VyaXR5R3JvdXA/OiBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXA7XG4gIHB1YmxpYyBnZXQgc2VjdXJpdHlHcm91cCgpOiBzZWN1cml0eUdyb3VwLlNlY3VyaXR5R3JvdXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZWN1cml0eUdyb3VwO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgbmFtZTogc3RyaW5nLCBwcm9wczogRnVuY3Rpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBuYW1lLCBwcm9wcyk7XG5cbiAgICBjb25zdCB7XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGVudmlyb25tZW50OiB2YXJpYWJsZXMsXG4gICAgICBsb2dSZXRlbnRpb25JbkRheXMgPSBSZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgbWVtb3J5U2l6ZSA9IDEyOCxcbiAgICAgIHRpbWVvdXQgPSBEdXJhdGlvbi5zZWNvbmRzKDMpLFxuICAgICAgbGF5ZXJzLFxuICAgICAgcmVzZXJ2ZWRDb25jdXJyZW50RXhlY3V0aW9ucyxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmFtZSBvciBBUk4gb2YgdGhlIExhbWJkYSBmdW5jdGlvbi5cbiAgICAgKiBpcyBsaW1pdGVkIHRvIDY0IGNoYXJhY3RlcnMgaW4gbGVuZ3RoLlxuICAgICAqXG4gICAgICogQVJOIFBhdHRlcm46IChbYS16QS1aMC05LV9dKykoOihcXCRMQVRFU1R8W2EtekEtWjAtOS1fXSspKT9cbiAgICAgKi9cbiAgICBjb25zdCBmdW5jdGlvbk5hbWUgPVxuICAgICAgcHJvcHMuZnVuY3Rpb25OYW1lID8/XG4gICAgICB0aGlzLnN0YWNrLnVuaXF1ZVJlc291cmNlTmFtZVByZWZpeCh0aGlzLCB7XG4gICAgICAgIHByZWZpeDogcHJvcHMuZnVuY3Rpb25OYW1lUHJlZml4ID8/IHRoaXMuZ3JpZFVVSUQgKyBcIi1cIixcbiAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiBcIitcIixcbiAgICAgICAgbWF4TGVuZ3RoOiA2NCxcbiAgICAgIH0pO1xuXG4gICAgaWYgKGZ1bmN0aW9uTmFtZSAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGZ1bmN0aW9uTmFtZSkpIHtcbiAgICAgIGlmIChmdW5jdGlvbk5hbWUubGVuZ3RoID4gNjQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgRnVuY3Rpb24gbmFtZSBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDY0IGNoYXJhY3RlcnMgYnV0IGhhcyAke2Z1bmN0aW9uTmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMuYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKCEvXlthLXpBLVowLTktX10rJC8udGVzdChmdW5jdGlvbk5hbWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYEZ1bmN0aW9uIG5hbWUgJHtmdW5jdGlvbk5hbWV9IGNhbiBjb250YWluIG9ubHkgbGV0dGVycywgbnVtYmVycywgaHlwaGVucywgb3IgdW5kZXJzY29yZXMgd2l0aCBubyBzcGFjZXMuYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZXNjcmlwdGlvbiAmJiAhVG9rZW4uaXNVbnJlc29sdmVkKGRlc2NyaXB0aW9uKSkge1xuICAgICAgaWYgKGRlc2NyaXB0aW9uLmxlbmd0aCA+IDI1Nikge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBGdW5jdGlvbiBkZXNjcmlwdGlvbiBjYW4gbm90IGJlIGxvbmdlciB0aGFuIDI1NiBjaGFyYWN0ZXJzIGJ1dCBoYXMgJHtkZXNjcmlwdGlvbi5sZW5ndGh9IGNoYXJhY3RlcnMuYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbmFnZWRQb2xpY2llcyA9IG5ldyBBcnJheTxpYW0uSU1hbmFnZWRQb2xpY3k+KCk7XG4gICAgLy8gdGhlIGFybiBpcyBpbiB0aGUgZm9ybSBvZiAtIGFybjphd3M6aWFtOjphd3M6cG9saWN5L3NlcnZpY2Utcm9sZS9BV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcbiAgICBtYW5hZ2VkUG9saWNpZXMucHVzaChcbiAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCJBV1NMYW1iZGFCYXNpY0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICAgXCJzZXJ2aWNlLXJvbGUvQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlXCIsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKHByb3BzLnZwYyB8fCBwcm9wcy5uZXR3b3JrQ29uZmlnKSB7XG4gICAgICAvLyBQb2xpY3kgdGhhdCB3aWxsIGhhdmUgRU5JIGNyZWF0aW9uIHBlcm1pc3Npb25zXG4gICAgICAvLyBub3Qgc3VyZSBpZiB0aW1lLnNsZWVwIGlzIG5lY2Vzc2FyeT9cbiAgICAgIC8vIHJlZjpcbiAgICAgIC8vICAtIGh0dHBzOi8vZ2l0aHViLmNvbS9wdWx1bWkvcHVsdW1pLWF3cy9pc3N1ZXMvMjI2MCNpc3N1ZWNvbW1lbnQtMTk3NzYwNjUwOVxuICAgICAgLy8gIC0gaHR0cHM6Ly9naXRodWIuY29tL2hhc2hpY29ycC90ZXJyYWZvcm0tcHJvdmlkZXItYXdzL2lzc3Vlcy8yOTgyOCNpc3N1ZWNvbW1lbnQtMTY5MzMwNzUwMFxuICAgICAgbWFuYWdlZFBvbGljaWVzLnB1c2goXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZShcbiAgICAgICAgICB0aGlzLFxuICAgICAgICAgIFwiQVdTTGFtYmRhVlBDQWNjZXNzRXhlY3V0aW9uUm9sZVwiLFxuICAgICAgICAgIFwic2VydmljZS1yb2xlL0FXU0xhbWJkYVZQQ0FjY2Vzc0V4ZWN1dGlvblJvbGVcIixcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogQW55IGNvbmNlcm4gbm90IHNjb3BpbmcgdGhlIGxvZ0dyb3VwIElBTSBQZXJtaXNzaW9ucz9cbiAgICAvLyAuYWxsb3coKVxuICAgIC8vIC50b0NyZWF0ZUxvZ1N0cmVhbSgpXG4gICAgLy8gLnRvUHV0TG9nRXZlbnRzKClcbiAgICAvLyAub24obG9nR3JvdXAuYXJuLCBgJHtsb2dHcm91cC5hcm59OmxvZy1zdHJlYW06KmApLFxuXG4gICAgdGhpcy5yb2xlID1cbiAgICAgIHByb3BzLnJvbGUgfHxcbiAgICAgIG5ldyBpYW0uUm9sZSh0aGlzLCBcIlNlcnZpY2VSb2xlXCIsIHtcbiAgICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoXCJsYW1iZGEuYW1hem9uYXdzLmNvbVwiKSxcbiAgICAgICAgbWFuYWdlZFBvbGljaWVzLFxuICAgICAgfSk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMucm9sZTtcbiAgICAvLyBUT0RPOiBSZS1hZGQgZmlsZXN5c3RlbSAvIGxvY2FsTW91bnRQYXRoIHN1cHBvcnRcbiAgICAvLyByZWY6IGZpbGVzeXN0ZW0uY29uZmlnLnBvbGljaWVzIHRvIGJlIGFkZGVkIHRvIHByaW5jaXBhbFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9ibG9iL3YyLjE2MC4wL3BhY2thZ2VzL2F3cy1jZGstbGliL2F3cy1sYW1iZGEvbGliL2Z1bmN0aW9uLnRzI0w5NDktTDk2NVxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgcHJvcHMuaW5pdGlhbFBvbGljeSB8fCBbXSkge1xuICAgICAgdGhpcy5yb2xlLmFkZFRvUHJpbmNpcGFsUG9saWN5KHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gTXVzdCBzZXQgcnVudGltZSBwcm9wZXJ0eSB1c2VkIGJ5IGJpbmRcbiAgICB0aGlzLnJ1bnRpbWUgPSBwcm9wcy5ydW50aW1lO1xuICAgIGNvbnN0IGNvZGUgPSBwcm9wcy5jb2RlLmJpbmQodGhpcyk7XG4gICAgdmVyaWZ5Q29kZUNvbmZpZyhjb2RlLCBwcm9wcyk7XG5cbiAgICAvLyBhZGQgc3VwcG9ydCBmb3IgQVdTX0NPREVHVVJVIFByb2ZpbGUgZW52IHZhcmlhYmxlcy4uLlxuICAgIGNvbnN0IGVudiA9IHZhcmlhYmxlcyB8fCB7fTtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYpKSB7XG4gICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8vIERMUSBjYW4gYmUgZWl0aGVyIHNucy5JVG9waWMgb3Igc3FzLklRdWV1ZVxuICAgIGNvbnN0IGRscVRvcGljT3JRdWV1ZSA9IHRoaXMuYnVpbGREZWFkTGV0dGVyUXVldWUocHJvcHMpO1xuICAgIGlmIChkbHFUb3BpY09yUXVldWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuaXNRdWV1ZShkbHFUb3BpY09yUXVldWUpKSB7XG4gICAgICAgIHRoaXMuZGVhZExldHRlclF1ZXVlID0gZGxxVG9waWNPclF1ZXVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGVhZExldHRlclRvcGljIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO1xuICAgICAgICAvLyB0aGlzLmRlYWRMZXR0ZXJUb3BpYyA9IGRscVRvcGljT3JRdWV1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2dHcm91cCA9IG5ldyBjbG91ZHdhdGNoTG9nR3JvdXAuQ2xvdWR3YXRjaExvZ0dyb3VwKFxuICAgICAgdGhpcyxcbiAgICAgIFwiTG9nR3JvdXBcIixcbiAgICAgIHtcbiAgICAgICAgbmFtZTogYC9hd3MvbGFtYmRhLyR7ZnVuY3Rpb25OYW1lfWAsXG4gICAgICAgIHJldGVudGlvbkluRGF5czogbG9nUmV0ZW50aW9uSW5EYXlzLFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMuX2xvZ0dyb3VwID0gbG9nR3JvdXA7XG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbih0aGlzLCBcIlJlc291cmNlXCIsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgLy8gTk9URTogZm9yIHRoZSB1bmRlcmxheWluZyByZXNvdXJjZSwgRXhhY3RseSBvbmUgb2YgZmlsZW5hbWUsIGltYWdlX3VyaSwgb3IgczNfYnVja2V0IG11c3QgYmUgc3BlY2lmaWVkXG4gICAgICBzM0J1Y2tldDogY29kZS5zM0xvY2F0aW9uICYmIGNvZGUuczNMb2NhdGlvbi5idWNrZXROYW1lLFxuICAgICAgczNLZXk6IGNvZGUuczNMb2NhdGlvbiAmJiBjb2RlLnMzTG9jYXRpb24ub2JqZWN0S2V5LFxuICAgICAgczNPYmplY3RWZXJzaW9uOiBjb2RlLnMzTG9jYXRpb24gJiYgY29kZS5zM0xvY2F0aW9uLm9iamVjdFZlcnNpb24sXG4gICAgICBmaWxlbmFtZTogY29kZS5pbmxpbmVDb2RlLFxuICAgICAgc291cmNlQ29kZUhhc2g6IGNvZGUuc291cmNlQ29kZUhhc2gsXG4gICAgICBpbWFnZVVyaTogY29kZS5pbWFnZT8uaW1hZ2VVcmksXG4gICAgICBsYXllcnMsIC8vIFRPRE86IFN1cHBvcnQgSUxheWVyIHdpdGggTGF6eSBsaXN0IG9mIGFybnNcbiAgICAgIGhhbmRsZXI6IHByb3BzLmhhbmRsZXIgPT09IEhhbmRsZXIuRlJPTV9JTUFHRSA/IHVuZGVmaW5lZCA6IHByb3BzLmhhbmRsZXIsXG4gICAgICB0aW1lb3V0OiB0aW1lb3V0LnRvU2Vjb25kcygpLFxuICAgICAgcGFja2FnZVR5cGU6IHByb3BzLnJ1bnRpbWUgPT09IFJ1bnRpbWUuRlJPTV9JTUFHRSA/IFwiSW1hZ2VcIiA6IHVuZGVmaW5lZCxcbiAgICAgIHJ1bnRpbWU6XG4gICAgICAgIHByb3BzLnJ1bnRpbWUgPT09IFJ1bnRpbWUuRlJPTV9JTUFHRSA/IHVuZGVmaW5lZCA6IHByb3BzLnJ1bnRpbWUubmFtZSxcbiAgICAgIC8vIC8vIFNvdXJjZSBDb2RlIEtNUyBub3Qgc3VwcG9ydGVkIGJ5IFRlcnJhZm9ybSBwcm92aWRlcj9cbiAgICAgIC8vIC8vIHNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0Nsb3VkRm9ybWF0aW9uL2xhdGVzdC9UZW1wbGF0ZVJlZmVyZW5jZS9hd3MtcHJvcGVydGllcy1sYW1iZGEtZnVuY3Rpb24tY29kZS5odG1sI2Nmbi1sYW1iZGEtZnVuY3Rpb24tY29kZS1zb3VyY2VrbXNrZXlhcm5cbiAgICAgIC8vIHNvdXJjZUttc0tleUFybjogY29kZS5zb3VyY2VLTVNLZXlBcm4sXG4gICAgICByb2xlOiB0aGlzLnJvbGUucm9sZUFybixcbiAgICAgIC8vIFRPRE86IENESyBTb3J0cyBlbnZpcm9ubWVudCB0byBtYXRjaCBMYW1iZGEgSGFzaCBiZWhhdmlvdXJcbiAgICAgIC8vIFRPRE86IERvIG5vdCBzZXQgdGhpcyBhdCBhbGwgaWYgbm8gZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBzZXQgKENvbXBsZXhMaXN0IGNhbid0IGJlIElSZXNvbHZhYmxlKVxuICAgICAgLy8gcmVmOiBodHRwczovL2dpdGh1Yi5jb20vYXdzL2F3cy1jZGsvYmxvYi92Mi4xNTYuMC9wYWNrYWdlcy9hd3MtY2RrLWxpYi9hd3MtbGFtYmRhL2xpYi9mdW5jdGlvbi50cyNMMTQ2N1xuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgdmFyaWFibGVzOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgICBwcm9kdWNlOiAoX2NvbnRleHQ6IElSZXNvbHZlQ29udGV4dCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW52aXJvbm1lbnQ7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSkgYXMgYW55LFxuICAgICAgfSxcbiAgICAgIG1lbW9yeVNpemUsXG4gICAgICAvLyBUT0RPOiByZS1hZGQgZXBoZW1lcmFsU3RvcmFnZVxuICAgICAgdnBjQ29uZmlnOlxuICAgICAgICB0aGlzLnBhcnNlVnBjQ29uZmlnKHByb3BzLm5ldHdvcmtDb25maWcpID8/IHRoaXMuY29uZmlndXJlVnBjKHByb3BzKSxcbiAgICAgIGRlYWRMZXR0ZXJDb25maWc6IHRoaXMucGFyc2VEZWFkTGV0dGVyQ29uZmlnKGRscVRvcGljT3JRdWV1ZSksXG4gICAgICByZXNlcnZlZENvbmN1cnJlbnRFeGVjdXRpb25zLFxuICAgICAgaW1hZ2VDb25maWc6IHVuZGVmaW5lZElmTm9LZXlzKHtcbiAgICAgICAgY29tbWFuZDogY29kZS5pbWFnZT8uY21kLFxuICAgICAgICBlbnRyeVBvaW50OiBjb2RlLmltYWdlPy5lbnRyeXBvaW50LFxuICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiBjb2RlLmltYWdlPy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgfSksXG4gICAgICAvLyBUT0RPOiByZS1hZGQga21zS2V5QXJuIGZvciBlbnZpcm9ubWVudCBlbmNyeXB0aW9uXG4gICAgICAvLyBUT0RPOiByZS1hZGQgZmlsZVN5c3RlbUNvbmZpZ3MgZm9yIEVGUyBzdXBwb3J0LFxuICAgICAgLy8gVE9ETzogcmUtYWRkIGNvZGVTaWduaW5nQ29uZmlnQXJuXG4gICAgICBhcmNoaXRlY3R1cmVzOiBbXG4gICAgICAgIC8vIFRoaXMgaXMgYW4gYXJyYXksIGJ1dCBtYXhpbXVtIGxlbmd0aCBpcyAxIVxuICAgICAgICAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9hd3MtcmVzb3VyY2UtbGFtYmRhLWZ1bmN0aW9uLmh0bWwjY2ZuLWxhbWJkYS1mdW5jdGlvbi1hcmNoaXRlY3R1cmVzXG4gICAgICAgIHByb3BzLmFyY2hpdGVjdHVyZT8udG9TdHJpbmcoKSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0LnRvU3RyaW5nKCksXG4gICAgICBdLFxuICAgICAgLy8gVE9ETzogcmUtYWRkIHJ1bnRpbWVNYW5hZ2VtZW50Q29uZmlnXG4gICAgICAvLyBUT0RPOiByZS1hZGQgc25hcFN0YXJ0XG4gICAgICBsb2dnaW5nQ29uZmlnOiB0aGlzLmdldExvZ2dpbmdDb25maWcodGhpcy5fbG9nR3JvdXAubmFtZSwgcHJvcHMpLFxuICAgICAgLy8gVE9ETzogcmUtYWRkIHJlY3Vyc2l2ZUxvb3AgZGV0ZWN0aW9uXG4gICAgICB0cmFjaW5nQ29uZmlnOiB0aGlzLnBhcnNlVHJhY2luZ0NvbmZpZyhwcm9wcy50cmFjaW5nID8/IFRyYWNpbmcuQUNUSVZFKSxcbiAgICAgIHB1Ymxpc2g6IHByb3BzLnB1Ymxpc2gsXG4gICAgICAvLyBUT0RPOiB1c2UgbG9nR3JvdXAubm9kZS5hZGREZXBlbmRlbmN5IHdoZW4gbG9nR3JvdXAgaXMgaW1wbGVtZW50ZWRcbiAgICAgIGRlcGVuZHNPbjogW2xvZ0dyb3VwXSxcbiAgICB9KTtcbiAgICAvLyBOT1RFOiBTaG91bGQgdGhpcyBiZSBmdW5jdGlvbk5hbWUgaW5wdXQgaW5zdGVhZCBvZiBUT0tFTj9cbiAgICB0aGlzLmZ1bmN0aW9uTmFtZSA9IHRoaXMucmVzb3VyY2UuZnVuY3Rpb25OYW1lO1xuXG4gICAgLy8gbWFrZSBzdXJlIGFueSByb2xlIGF0dGFjaG1lbnRzIGFyZSBhZGRlZCBhcyBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgbGFtYmRhXG4gICAgLy8gdGhpcyBhY2hpZXZlZCBieSB0aGUgQ0RLVEYgQXNwZWN0IG9uIHRoZSBwYXJlbnQgU3RhY2tCYXNlXG4gICAgdGhpcy5yZXNvdXJjZS5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yb2xlKTtcblxuICAgIHRoaXMudGltZW91dCA9IHByb3BzLnRpbWVvdXQ7XG5cbiAgICB0aGlzLmFyY2hpdGVjdHVyZSA9IHByb3BzLmFyY2hpdGVjdHVyZSA/PyBBcmNoaXRlY3R1cmUuWDg2XzY0O1xuXG4gICAgLy8gVE9ETzogQWRkIGF3c19sYW1iZGFfcHJvdmlzaW9uZWRfY29uY3VycmVuY3lfY29uZmlnXG5cbiAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHByb3BzLmV2ZW50cyB8fCBbXSkge1xuICAgICAgdGhpcy5hZGRFdmVudFNvdXJjZShldmVudCk7XG4gICAgfVxuXG4gICAgLy8gLy8gVE9ETzogcGVuZGluZyBjdXN0b20gQ0xJIHRvIG1vY2sgTGFtYmRhIGZ1bmN0aW9uIGludm9jYXRpb25zIGxvY2FsbHlcbiAgICAvLyBwcm9wcy5jb2RlLmJpbmRUb1Jlc291cmNlKHRoaXMpO1xuXG4gICAgLy8gRXZlbnQgSW52b2tlIENvbmZpZ1xuICAgIGlmIChcbiAgICAgIHByb3BzLm9uRmFpbHVyZSB8fFxuICAgICAgcHJvcHMub25TdWNjZXNzIHx8XG4gICAgICBwcm9wcy5tYXhFdmVudEFnZSB8fFxuICAgICAgcHJvcHMucmV0cnlBdHRlbXB0cyAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyZUFzeW5jSW52b2tlKHtcbiAgICAgICAgb25GYWlsdXJlOiBwcm9wcy5vbkZhaWx1cmUsXG4gICAgICAgIG9uU3VjY2VzczogcHJvcHMub25TdWNjZXNzLFxuICAgICAgICBtYXhFdmVudEFnZTogcHJvcHMubWF4RXZlbnRBZ2UsXG4gICAgICAgIHJldHJ5QXR0ZW1wdHM6IHByb3BzLnJldHJ5QXR0ZW1wdHMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9vdXRwdXRzID0ge1xuICAgICAgbmFtZTogdGhpcy5mdW5jdGlvbk5hbWUsXG4gICAgICBhcm46IHRoaXMucmVzb3VyY2UuYXJuLFxuICAgICAgcm9sZUFybjogdGhpcy5yb2xlLnJvbGVBcm4sXG4gICAgICAvLyBvbmx5IGtub3duIGF0IHN5bnRoIHRpbWVcbiAgICAgIC8vIGV4cGxpY2l0IGBudWxsYCByZXF1aXJlZCB0byBhdm9pZCBzeW50YXggZXJyb3JzIHdoZW4gdXNpbmcgc3RyaW5nVmFsdWUgJiYgXCJ1bmRlZmluZWRcIlxuICAgICAgdXJsOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5fdXJsID8/IG51bGwsXG4gICAgICB9KSxcbiAgICAgIGRlZmF1bHRTZWN1cml0eUdyb3VwOiBMYXp5LmFueVZhbHVlKHtcbiAgICAgICAgcHJvZHVjZTogKCkgPT4gdGhpcy5fc2VjdXJpdHlHcm91cD8uaWQgPz8gbnVsbCxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGlzIExhbWJkYSBmdW5jdGlvbi5cbiAgICogSWYgdGhpcyBpcyBhIHJlZiB0byBhIExhbWJkYSBmdW5jdGlvbiwgdGhpcyBvcGVyYXRpb24gcmVzdWx0cyBpbiBhIG5vLW9wLlxuICAgKiBAcGFyYW0ga2V5IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUncyB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFbnZpcm9ubWVudChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IElGdW5jdGlvbiB7XG4gICAgLy8gUmVzZXJ2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgZmFpbCBkdXJpbmcgY2xvdWRmb3JtYXRpb24gZGVwbG95IGlmIHRoZXkncmUgc2V0LlxuICAgIC8vIFRoaXMgY2hlY2sgaXMganVzdCB0byBhbGxvdyBDREsgdG8gZmFpbCBmYXN0ZXIgd2hlbiB0aGVzZSBhcmUgc3BlY2lmaWVkLlxuICAgIGNvbnN0IHJlc2VydmVkRW52aXJvbm1lbnRWYXJpYWJsZXMgPSBbXG4gICAgICBcIl9IQU5ETEVSXCIsXG4gICAgICBcIl9YX0FNWk5fVFJBQ0VfSURcIixcbiAgICAgIFwiQVdTX0RFRkFVTFRfUkVHSU9OXCIsXG4gICAgICBcIkFXU19SRUdJT05cIixcbiAgICAgIFwiQVdTX0VYRUNVVElPTl9FTlZcIixcbiAgICAgIFwiQVdTX0xBTUJEQV9GVU5DVElPTl9OQU1FXCIsXG4gICAgICBcIkFXU19MQU1CREFfRlVOQ1RJT05fTUVNT1JZX1NJWkVcIixcbiAgICAgIFwiQVdTX0xBTUJEQV9GVU5DVElPTl9WRVJTSU9OXCIsXG4gICAgICBcIkFXU19MQU1CREFfSU5JVElBTElaQVRJT05fVFlQRVwiLFxuICAgICAgXCJBV1NfTEFNQkRBX0xPR19HUk9VUF9OQU1FXCIsXG4gICAgICBcIkFXU19MQU1CREFfTE9HX1NUUkVBTV9OQU1FXCIsXG4gICAgICBcIkFXU19BQ0NFU1NfS0VZXCIsXG4gICAgICBcIkFXU19BQ0NFU1NfS0VZX0lEXCIsXG4gICAgICBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgXCJBV1NfU0VTU0lPTl9UT0tFTlwiLFxuICAgICAgXCJBV1NfTEFNQkRBX1JVTlRJTUVfQVBJXCIsXG4gICAgICBcIkxBTUJEQV9UQVNLX1JPT1RcIixcbiAgICAgIFwiTEFNQkRBX1JVTlRJTUVfRElSXCIsXG4gICAgXTtcbiAgICBpZiAocmVzZXJ2ZWRFbnZpcm9ubWVudFZhcmlhYmxlcy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgJHtrZXl9IGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHJlc2VydmVkIGJ5IHRoZSBsYW1iZGEgcnVudGltZSBhbmQgY2FuIG5vdCBiZSBzZXQgbWFudWFsbHkuIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9jb25maWd1cmF0aW9uLWVudnZhcnMuaHRtbGAsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50W2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhZGRGdW5jdGlvblVybChvcHRpb25zPzogRnVuY3Rpb25VcmxPcHRpb25zKTogRnVuY3Rpb25Vcmwge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gc3VwZXIuYWRkRnVuY3Rpb25Vcmwob3B0aW9ucyk7XG4gICAgdGhpcy5fdXJsID0gZW5kcG9pbnQudXJsO1xuICAgIHJldHVybiBlbmRwb2ludDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgTG9nZ2luZyBDb25maWcgcHJvcGV0eSBmb3IgdGhlIGZ1bmN0aW9uLlxuICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBmdW5jdGlvbiBMb2dnaW5nQ29uZmlnIFByb3BlcnR5IGlmIHRoZSBwcm9wZXJ0eSBpcyBzZXQgb24gdGhlXG4gICAqIGZ1bmN0aW9uIGFuZCB1bmRlZmluZWQgaWYgbm90LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRMb2dnaW5nQ29uZmlnKFxuICAgIGxvZ0dyb3VwTmFtZTogc3RyaW5nLFxuICAgIHByb3BzOiBGdW5jdGlvblByb3BzLFxuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbkxvZ2dpbmdDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmIChwcm9wcy5hcHBsaWNhdGlvbkxvZ0xldmVsIHx8IHByb3BzLnN5c3RlbUxvZ0xldmVsKSB7XG4gICAgICBpZiAocHJvcHMubG9nZ2luZ0Zvcm1hdCAhPT0gTG9nZ2luZ0Zvcm1hdC5KU09OKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYFRvIHVzZSBBcHBsaWNhdGlvbkxvZ0xldmVsIGFuZC9vciBTeXN0ZW1Mb2dMZXZlbCB5b3UgbXVzdCBzZXQgTG9nZ2luZ0Zvcm1hdCB0byAnJHtMb2dnaW5nRm9ybWF0LkpTT059JywgZ290ICcke3Byb3BzLmxvZ2dpbmdGb3JtYXR9Jy5gLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvZ2dpbmdDb25maWc6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uTG9nZ2luZ0NvbmZpZztcbiAgICBpZiAocHJvcHMubG9nZ2luZ0Zvcm1hdCkge1xuICAgICAgbG9nZ2luZ0NvbmZpZyA9IHtcbiAgICAgICAgbG9nRm9ybWF0OiBwcm9wcy5sb2dnaW5nRm9ybWF0LFxuICAgICAgICBzeXN0ZW1Mb2dMZXZlbDogcHJvcHMuc3lzdGVtTG9nTGV2ZWwsXG4gICAgICAgIGFwcGxpY2F0aW9uTG9nTGV2ZWw6IHByb3BzLmFwcGxpY2F0aW9uTG9nTGV2ZWwsXG4gICAgICAgIGxvZ0dyb3VwOiBsb2dHcm91cE5hbWUsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGxvZ2dpbmdDb25maWc7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBhbiBhbGlhcyBmb3IgdGhpcyBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhlIGFsaWFzIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkIHRvIHBvaW50IHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZlxuICAgKiB0aGUgZnVuY3Rpb24gYXMgaXQgaXMgYmVpbmcgdXBkYXRlZCBkdXJpbmcgYSBkZXBsb3ltZW50LlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiBkZWNsYXJlIGNvbnN0IGZuOiBjb21wdXRlLkxhbWJkYUZ1bmN0aW9uO1xuICAgKlxuICAgKiBmbi5hZGRBbGlhcygnTGl2ZScpO1xuICAgKlxuICAgKiAvLyBJcyBlcXVpdmFsZW50IHRvXG4gICAqXG4gICAqIG5ldyBjb21wdXRlLkFsaWFzKHRoaXMsICdBbGlhc0xpdmUnLCB7XG4gICAqICAgYWxpYXNOYW1lOiAnTGl2ZScsXG4gICAqICAgdmVyc2lvbjogZm4udmVyc2lvbixcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gYWxpYXNOYW1lIFRoZSBuYW1lIG9mIHRoZSBhbGlhc1xuICAgKiBAcGFyYW0gb3B0aW9ucyBBbGlhcyBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkQWxpYXMoYWxpYXNOYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBBbGlhc09wdGlvbnMpOiBBbGlhcyB7XG4gICAgcmV0dXJuIGFkZEFsaWFzKHRoaXMsIHRoaXMsIHRoaXMudmVyc2lvbiwgYWxpYXNOYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcHRpb25hbGx5IGNyZWF0ZSBMYW1iZGFGdW5jdGlvblZwY0NvbmZpZ1xuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVZwY0NvbmZpZyhcbiAgICBjb25maWc/OiBWcGNDb25maWcsXG4gICk6IGxhbWJkYUZ1bmN0aW9uLkxhbWJkYUZ1bmN0aW9uVnBjQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWNvbmZpZykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgbGV0IHNlY3VyaXR5R3JvdXBJZHMgPSBjb25maWcuc2VjdXJpdHlHcm91cElkcztcbiAgICBpZiAoIXNlY3VyaXR5R3JvdXBJZHMpIHtcbiAgICAgIHRoaXMuX3NlY3VyaXR5R3JvdXAgPSBuZXcgc2VjdXJpdHlHcm91cC5TZWN1cml0eUdyb3VwKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIlNlY3VyaXR5R3JvdXBcIixcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZnVuY3Rpb25OYW1lLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICB2cGNJZDogY29uZmlnLnZwY0lkLFxuXG4gICAgICAgICAgZWdyZXNzOiBjb25maWcuZWdyZXNzID8/IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZnJvbVBvcnQ6IDAsXG4gICAgICAgICAgICAgIHRvUG9ydDogMCxcbiAgICAgICAgICAgICAgcHJvdG9jb2w6IFwiLTFcIixcbiAgICAgICAgICAgICAgY2lkckJsb2NrczogW1wiMC4wLjAuMC8wXCJdLFxuICAgICAgICAgICAgICBpcHY2Q2lkckJsb2NrczogW1wiOjovMFwiXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICBzZWN1cml0eUdyb3VwSWRzID0gW3RoaXMuX3NlY3VyaXR5R3JvdXAuaWRdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgc3VibmV0SWRzOiBjb25maWcuc3VibmV0SWRzLFxuICAgICAgaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2s6IGNvbmZpZy5pcHY2QWxsb3dlZEZvckR1YWxTdGFjayxcbiAgICAgIHNlY3VyaXR5R3JvdXBJZHMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZiBjb25maWd1cmVkLCBzZXQgdXAgdGhlIFZQQy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgICpcbiAgICogUmV0dXJucyB0aGUgVnBjQ29uZmlnIHRoYXQgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZVxuICAgKiBMYW1iZGEgY3JlYXRpb24gcHJvcGVydGllcy5cbiAgICovXG4gIHByaXZhdGUgY29uZmlndXJlVnBjKFxuICAgIHByb3BzOiBGdW5jdGlvblByb3BzLFxuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvblZwY0NvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaGFzU2VjdXJpdHlHcm91cHMgPVxuICAgICAgcHJvcHMuc2VjdXJpdHlHcm91cHMgJiYgcHJvcHMuc2VjdXJpdHlHcm91cHMubGVuZ3RoID4gMDtcbiAgICBpZiAoIXByb3BzLnZwYykge1xuICAgICAgaWYgKHByb3BzLmFsbG93QWxsT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGNvbmZpZ3VyZSAnYWxsb3dBbGxPdXRib3VuZCcgd2l0aG91dCBjb25maWd1cmluZyBhIFZQQ1wiLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaGFzU2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBjb25maWd1cmUgJ3NlY3VyaXR5R3JvdXBzJyB3aXRob3V0IGNvbmZpZ3VyaW5nIGEgVlBDXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy52cGNTdWJuZXRzKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJDYW5ub3QgY29uZmlndXJlICd2cGNTdWJuZXRzJyB3aXRob3V0IGNvbmZpZ3VyaW5nIGEgVlBDXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcm9wcy5pcHY2QWxsb3dlZEZvckR1YWxTdGFjaykge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIFwiQ2Fubm90IGNvbmZpZ3VyZSAnaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2snIHdpdGhvdXQgY29uZmlndXJpbmcgYSBWUENcIixcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHByb3BzLmFsbG93QWxsSXB2Nk91dGJvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNhbm5vdCBjb25maWd1cmUgJ2FsbG93QWxsSXB2Nk91dGJvdW5kJyB3aXRob3V0IGNvbmZpZ3VyaW5nIGEgVlBDXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLmFsbG93QWxsT3V0Ym91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGhhc1NlY3VyaXR5R3JvdXBzKSB7XG4gICAgICAgIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgXCJDb25maWd1cmUgJ2FsbG93QWxsT3V0Ym91bmQnIGRpcmVjdGx5IG9uIHRoZSBzdXBwbGllZCBTZWN1cml0eUdyb3Vwcy5cIixcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoaGFzU2VjdXJpdHlHcm91cHMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkNvbmZpZ3VyZSAnYWxsb3dBbGxJcHY2T3V0Ym91bmQnIGRpcmVjdGx5IG9uIHRoZSBzdXBwbGllZCBTZWN1cml0eUdyb3Vwcy5cIixcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBzZWN1cml0eUdyb3VwczogSVNlY3VyaXR5R3JvdXBbXTtcblxuICAgIGlmIChoYXNTZWN1cml0eUdyb3Vwcykge1xuICAgICAgc2VjdXJpdHlHcm91cHMgPSBwcm9wcy5zZWN1cml0eUdyb3VwcztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2VjR3JvdXAgPSBuZXcgU2VjdXJpdHlHcm91cCh0aGlzLCBcIlNlY3VyaXR5R3JvdXBcIiwge1xuICAgICAgICB2cGM6IHByb3BzLnZwYyxcbiAgICAgICAgZGVzY3JpcHRpb246XG4gICAgICAgICAgXCJBdXRvbWF0aWMgc2VjdXJpdHkgZ3JvdXAgZm9yIExhbWJkYSBGdW5jdGlvbiBcIiArXG4gICAgICAgICAgQXdzU3RhY2sudW5pcXVlSWQodGhpcyksXG4gICAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHByb3BzLmFsbG93QWxsT3V0Ym91bmQsXG4gICAgICAgIGFsbG93QWxsSXB2Nk91dGJvdW5kOiBwcm9wcy5hbGxvd0FsbElwdjZPdXRib3VuZCxcbiAgICAgIH0pO1xuICAgICAgc2VjdXJpdHlHcm91cHMgPSBbc2VjR3JvdXBdO1xuICAgIH1cblxuICAgIHRoaXMuX2Nvbm5lY3Rpb25zID0gbmV3IENvbm5lY3Rpb25zKHsgc2VjdXJpdHlHcm91cHMgfSk7XG5cbiAgICAvLyBUT0RPOiBhZGQgd2hlbiBmaWxlc3lzdGVtIGNvbmZpZyBpcyBiYWNrXG4gICAgLy8gaWYgKHByb3BzLmZpbGVzeXN0ZW0pIHtcbiAgICAvLyAgIGlmIChwcm9wcy5maWxlc3lzdGVtLmNvbmZpZy5jb25uZWN0aW9ucykge1xuICAgIC8vICAgICB0aGlzLmNvbm5lY3Rpb25zLmFsbG93VG8oXG4gICAgLy8gICAgICAgcHJvcHMuZmlsZXN5c3RlbS5jb25maWcuY29ubmVjdGlvbnMsXG4gICAgLy8gICAgICAgcHJvcHMuZmlsZXN5c3RlbS5jb25maWcuY29ubmVjdGlvbnMuZGVmYXVsdFBvcnQgPz9cbiAgICAvLyAgICAgICAgIFBvcnQudGNwKEZpbGVTeXN0ZW0uREVGQVVMVF9QT1JUKSxcbiAgICAvLyAgICAgKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBjb25zdCBpcHY2QWxsb3dlZEZvckR1YWxTdGFjayA9IHByb3BzLmlwdjZBbGxvd2VkRm9yRHVhbFN0YWNrO1xuICAgIGNvbnN0IGFsbG93UHVibGljU3VibmV0ID0gcHJvcHMuYWxsb3dQdWJsaWNTdWJuZXQgPz8gZmFsc2U7XG4gICAgY29uc3Qgc2VsZWN0ZWRTdWJuZXRzID0gcHJvcHMudnBjLnNlbGVjdFN1Ym5ldHMocHJvcHMudnBjU3VibmV0cyk7XG4gICAgY29uc3QgcHVibGljU3VibmV0SWRzID0gbmV3IFNldChcbiAgICAgIHByb3BzLnZwYy5wdWJsaWNTdWJuZXRzLm1hcCgocykgPT4gcy5zdWJuZXRJZCksXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IHN1Ym5ldElkIG9mIHNlbGVjdGVkU3VibmV0cy5zdWJuZXRJZHMpIHtcbiAgICAgIGlmIChwdWJsaWNTdWJuZXRJZHMuaGFzKHN1Ym5ldElkKSAmJiAhYWxsb3dQdWJsaWNTdWJuZXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBcIkxhbWJkYSBGdW5jdGlvbnMgaW4gYSBwdWJsaWMgc3VibmV0IGNhbiBOT1QgYWNjZXNzIHRoZSBpbnRlcm5ldC4gXCIgK1xuICAgICAgICAgICAgXCJJZiB5b3UgYXJlIGF3YXJlIG9mIHRoaXMgbGltaXRhdGlvbiBhbmQgd291bGQgc3RpbGwgbGlrZSB0byBwbGFjZSB0aGUgZnVuY3Rpb24gaW4gYSBwdWJsaWMgc3VibmV0LCBzZXQgYGFsbG93UHVibGljU3VibmV0YCB0byB0cnVlXCIsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5ub2RlLmFkZERlcGVuZGVuY3koc2VsZWN0ZWRTdWJuZXRzLmludGVybmV0Q29ubmVjdGl2aXR5RXN0YWJsaXNoZWQpO1xuXG4gICAgLy8gTGlzdCBjYW4ndCBiZSBlbXB0eSBoZXJlLCBpZiB3ZSBnb3QgdGhpcyBmYXIgeW91IGludGVuZGVkIHRvIHB1dCB5b3VyIExhbWJkYVxuICAgIC8vIGluIHN1Ym5ldHMuIFdlJ3JlIGdvaW5nIHRvIGd1YXJhbnRlZSB0aGF0IHdlIGdldCB0aGUgbmljZSBlcnJvciBtZXNzYWdlIGJ5XG4gICAgLy8gbWFraW5nIFZwY05ldHdvcmsgZG8gdGhlIHNlbGVjdGlvbiBhZ2Fpbi5cbiAgICBpZiAocHJvcHMuaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXB2NkFsbG93ZWRGb3JEdWFsU3RhY2s6IGlwdjZBbGxvd2VkRm9yRHVhbFN0YWNrLFxuICAgICAgICBzdWJuZXRJZHM6IHNlbGVjdGVkU3VibmV0cy5zdWJuZXRJZHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBzLm1hcCgoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdWJuZXRJZHM6IHNlbGVjdGVkU3VibmV0cy5zdWJuZXRJZHMsXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IHNlY3VyaXR5R3JvdXBzLm1hcCgoc2cpID0+IHNnLnNlY3VyaXR5R3JvdXBJZCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNRdWV1ZShkZWFkTGV0dGVyUXVldWU6IElRdWV1ZSk6IGRlYWRMZXR0ZXJRdWV1ZSBpcyBJUXVldWUge1xuICAgIHJldHVybiAoPElRdWV1ZT5kZWFkTGV0dGVyUXVldWUpLnF1ZXVlQXJuICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRGVhZExldHRlclF1ZXVlKHByb3BzOiBGdW5jdGlvblByb3BzKTogSVF1ZXVlIHwgdW5kZWZpbmVkIHtcbiAgICAvLyB8IHNucy5JVG9waWNcbiAgICBpZiAoXG4gICAgICAhcHJvcHMuZGVhZExldHRlclF1ZXVlICYmXG4gICAgICAhcHJvcHMuZGVhZExldHRlclF1ZXVlRW5hYmxlZFxuICAgICAgLy8gJiYgIXByb3BzLmRlYWRMZXR0ZXJUb3BpY1xuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSAmJiBwcm9wcy5kZWFkTGV0dGVyUXVldWVFbmFibGVkID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgRXJyb3IoXG4gICAgICAgIFwiZGVhZExldHRlclF1ZXVlIGRlZmluZWQgYnV0IGRlYWRMZXR0ZXJRdWV1ZUVuYWJsZWQgZXhwbGljaXRseSBzZXQgdG8gZmFsc2VcIixcbiAgICAgICk7XG4gICAgfVxuICAgIC8vIGlmIChcbiAgICAvLyAgIHByb3BzLmRlYWRMZXR0ZXJUb3BpYyAmJlxuICAgIC8vICAgKHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSB8fCBwcm9wcy5kZWFkTGV0dGVyUXVldWVFbmFibGVkICE9PSB1bmRlZmluZWQpXG4gICAgLy8gKSB7XG4gICAgLy8gICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFxuICAgIC8vICAgICBcImRlYWRMZXR0ZXJRdWV1ZSBhbmQgZGVhZExldHRlclRvcGljIGNhbm5vdCBiZSBzcGVjaWZpZWQgdG9nZXRoZXIgYXQgdGhlIHNhbWUgdGltZVwiLFxuICAgIC8vICAgICB0aGlzLFxuICAgIC8vICAgKTtcbiAgICAvLyB9XG5cbiAgICBsZXQgZGVhZExldHRlclF1ZXVlOiBJUXVldWU7IC8vIHwgSVRvcGljO1xuICAgIC8vIGlmIChwcm9wcy5kZWFkTGV0dGVyVG9waWMpIHtcbiAgICAvLyAgIGRlYWRMZXR0ZXJRdWV1ZSA9IHByb3BzLmRlYWRMZXR0ZXJUb3BpYztcbiAgICAvLyAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgIC8vICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgLy8gICAgICAgYWN0aW9uczogW1wic25zOlB1Ymxpc2hcIl0sXG4gICAgLy8gICAgICAgcmVzb3VyY2VzOiBbZGVhZExldHRlclF1ZXVlLnRvcGljQXJuXSxcbiAgICAvLyAgICAgfSksXG4gICAgLy8gICApO1xuICAgIC8vIH0gZWxzZSB7XG4gICAgZGVhZExldHRlclF1ZXVlID1cbiAgICAgIHByb3BzLmRlYWRMZXR0ZXJRdWV1ZSB8fFxuICAgICAgbmV3IFF1ZXVlKHRoaXMsIFwiRGVhZExldHRlclF1ZXVlXCIsIHtcbiAgICAgICAgcmV0ZW50aW9uUGVyaW9kOiBEdXJhdGlvbi5kYXlzKDE0KSxcbiAgICAgIH0pO1xuICAgIHRoaXMuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzcXM6U2VuZE1lc3NhZ2VcIl0sXG4gICAgICAgIHJlc291cmNlczogW2RlYWRMZXR0ZXJRdWV1ZS5xdWV1ZUFybl0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIC8vIH1cblxuICAgIHJldHVybiBkZWFkTGV0dGVyUXVldWU7XG4gIH1cblxuICAvLyBUT0RPOiBTdXBwb3J0IHNucy5JVG9waWMgKyBzbnM6UHVibGlzaCB0b3BpY0FyblxuICAvKipcbiAgICogT3B0aW9uYWxseSBjcmVhdGUgTGFtYmRhRnVuY3Rpb25EZWFkTGV0dGVyQ29uZmlnXG4gICAqL1xuICBwcml2YXRlIHBhcnNlRGVhZExldHRlckNvbmZpZyhcbiAgICBkZWFkTGV0dGVyUXVldWU/OiBJUXVldWUsIC8vIHwgc25zLklUb3BpY1xuICApOiBsYW1iZGFGdW5jdGlvbi5MYW1iZGFGdW5jdGlvbkRlYWRMZXR0ZXJDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmIChkZWFkTGV0dGVyUXVldWUpIHtcbiAgICAgIC8vIHRoaXMuaXNRdWV1ZShkZWFkTGV0dGVyUXVldWUpID8gZGVhZExldHRlclF1ZXVlLnF1ZXVlQXJuIDogLi4uXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0YXJnZXRBcm46IGRlYWRMZXR0ZXJRdWV1ZS5xdWV1ZUFybixcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwYXJzZVRyYWNpbmdDb25maWcoXG4gICAgdHJhY2luZzogVHJhY2luZyxcbiAgKTogbGFtYmRhRnVuY3Rpb24uTGFtYmRhRnVuY3Rpb25UcmFjaW5nQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodHJhY2luZyA9PT0gdW5kZWZpbmVkIHx8IHRyYWNpbmcgPT09IFRyYWNpbmcuRElTQUJMRUQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hZGRUb1JvbGVQb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInhyYXk6UHV0VHJhY2VTZWdtZW50c1wiLCBcInhyYXk6UHV0VGVsZW1ldHJ5UmVjb3Jkc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXCIqXCJdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiB0cmFjaW5nLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBvcGFxdWUgKHRva2VuKSBBUk4sIHJldHVybnMgYSBURiBleHByZXNzaW9uIHRoYXQgZXh0cmFjdHMgdGhlIGZ1bmN0aW9uXG4gKiBuYW1lIGZyb20gdGhlIEFSTi5cbiAqXG4gKiBGdW5jdGlvbiBBUk5zIGxvb2sgbGlrZSB0aGlzOlxuICpcbiAqICAgYXJuOmF3czpsYW1iZGE6cmVnaW9uOmFjY291bnQtaWQ6ZnVuY3Rpb246ZnVuY3Rpb24tbmFtZVxuICpcbiAqIC4ud2hpY2ggbWVhbnMgdGhhdCBpbiBvcmRlciB0byBleHRyYWN0IHRoZSBgZnVuY3Rpb24tbmFtZWAgY29tcG9uZW50IGZyb20gdGhlIEFSTiwgd2UgY2FuXG4gKiBzcGxpdCB0aGUgQVJOIHVzaW5nIFwiOlwiIGFuZCBzZWxlY3QgdGhlIGNvbXBvbmVudCBpbiBpbmRleCA2LlxuICpcbiAqIEByZXR1cm5zIGBlbGVtZW50KHNwbGl0KCc6JywgYXJuKSwgNilgXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3ROYW1lRnJvbUFybihhcm46IHN0cmluZykge1xuICBjb25zdCB7IHJlc291cmNlTmFtZSB9ID0gQXJuLnNwbGl0KGFybiwgQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUpO1xuICBpZiAoIXJlc291cmNlTmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBMYW1iZGEgZnVuY3Rpb24gQVJOOiAke2Fybn1gKTtcbiAgfVxuICAvLyBpZiAocmVzb3VyY2VOYW1lLmluY2x1ZGVzKFwiOlwiKSkgc3BsaXQgb2ZmIHRoZSB2ZXJzaW9uXG4gIGlmIChyZXNvdXJjZU5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgcmV0dXJuIHJlc291cmNlTmFtZS5zcGxpdChcIjpcIilbMF07XG4gIH1cbiAgcmV0dXJuIHJlc291cmNlTmFtZTtcbn1cblxuLyoqXG4gKiBYLVJheSBUcmFjaW5nIE1vZGVzIChodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9BUElfVHJhY2luZ0NvbmZpZy5odG1sKVxuICovXG5leHBvcnQgZW51bSBUcmFjaW5nIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIHJlc3BlY3QgYW55IHRyYWNpbmcgaGVhZGVyIGl0IHJlY2VpdmVzIGZyb20gYW4gdXBzdHJlYW0gc2VydmljZS5cbiAgICogSWYgbm8gdHJhY2luZyBoZWFkZXIgaXMgcmVjZWl2ZWQsIExhbWJkYSB3aWxsIHNhbXBsZSB0aGUgcmVxdWVzdCBiYXNlZCBvbiBhIGZpeGVkIHJhdGUuIFBsZWFzZSBzZWUgdGhlIFtVc2luZyBBV1MgTGFtYmRhIHdpdGggQVdTIFgtUmF5XShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy9zZXJ2aWNlcy14cmF5Lmh0bWwpIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgb24gdGhpcyBzYW1wbGluZyBiZWhhdmlvci5cbiAgICovXG4gIEFDVElWRSA9IFwiQWN0aXZlXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBvbmx5IHRyYWNlIHRoZSByZXF1ZXN0IGZyb20gYW4gdXBzdHJlYW0gc2VydmljZVxuICAgKiBpZiBpdCBjb250YWlucyBhIHRyYWNpbmcgaGVhZGVyIHdpdGggXCJzYW1wbGVkPTFcIlxuICAgKi9cbiAgUEFTU19USFJPVUdIID0gXCJQYXNzVGhyb3VnaFwiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgbm90IHRyYWNlIGFueSByZXF1ZXN0LlxuICAgKi9cbiAgRElTQUJMRUQgPSBcIkRpc2FibGVkXCIsXG59XG5cbi8qKlxuICogTGFtYmRhIHNlcnZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGNhcHR1cmVzIHN5c3RlbSBsb2dzIGFib3V0IGZ1bmN0aW9uIGludm9jYXRpb25cbiAqIGdlbmVyYXRlZCBieSB0aGUgTGFtYmRhIHNlcnZpY2UgKGtub3duIGFzIHN5c3RlbSBsb2dzKSBhbmQgc2VuZHMgdGhlc2UgbG9ncyB0byBhXG4gKiBkZWZhdWx0IENsb3VkV2F0Y2ggbG9nIGdyb3VwIG5hbWVkIGFmdGVyIHRoZSBMYW1iZGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBlbnVtIFN5c3RlbUxvZ0xldmVsIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGluZm8gbGV2ZWwuXG4gICAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBkZWJ1ZyBsZXZlbC5cbiAgICovXG4gIERFQlVHID0gXCJERUJVR1wiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgd2FybiBsZXZlbC5cbiAgICovXG4gIFdBUk4gPSBcIldBUk5cIixcbn1cblxuLyoqXG4gKiBMYW1iZGEgc2VydmljZSBhdXRvbWF0aWNhbGx5IGNhcHR1cmVzIGxvZ3MgZ2VuZXJhdGVkIGJ5IHRoZSBmdW5jdGlvbiBjb2RlXG4gKiAoa25vd24gYXMgYXBwbGljYXRpb24gbG9ncykgYW5kIHNlbmRzIHRoZXNlIGxvZ3MgdG8gYSBkZWZhdWx0IENsb3VkV2F0Y2hcbiAqIGxvZyBncm91cCBuYW1lZCBhZnRlciB0aGUgTGFtYmRhIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvbkxvZ0xldmVsIHtcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IGluZm8gbGV2ZWwuXG4gICAqL1xuICBJTkZPID0gXCJJTkZPXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBkZWJ1ZyBsZXZlbC5cbiAgICovXG4gIERFQlVHID0gXCJERUJVR1wiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgd2FybiBsZXZlbC5cbiAgICovXG4gIFdBUk4gPSBcIldBUk5cIixcbiAgLyoqXG4gICAqIExhbWJkYSB3aWxsIGNhcHR1cmUgb25seSBsb2dzIGF0IHRyYWNlIGxldmVsLlxuICAgKi9cbiAgVFJBQ0UgPSBcIlRSQUNFXCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgd2lsbCBjYXB0dXJlIG9ubHkgbG9ncyBhdCBlcnJvciBsZXZlbC5cbiAgICovXG4gIEVSUk9SID0gXCJFUlJPUlwiLFxuICAvKipcbiAgICogTGFtYmRhIHdpbGwgY2FwdHVyZSBvbmx5IGxvZ3MgYXQgZmF0YWwgbGV2ZWwuXG4gICAqL1xuICBGQVRBTCA9IFwiRkFUQUxcIixcbn1cblxuLyoqXG4gKiBUaGlzIGZpZWxkIHRha2VzIGluIDIgdmFsdWVzIGVpdGhlciBUZXh0IG9yIEpTT04uIEJ5IHNldHRpbmcgdGhpcyB2YWx1ZSB0byBUZXh0LFxuICogd2lsbCByZXN1bHQgaW4gdGhlIGN1cnJlbnQgc3RydWN0dXJlIG9mIGxvZ3MgZm9ybWF0LCB3aGVyZWFzLCBieSBzZXR0aW5nIHRoaXMgdmFsdWUgdG8gSlNPTixcbiAqIExhbWJkYSB3aWxsIHByaW50IHRoZSBsb2dzIGFzIFN0cnVjdHVyZWQgSlNPTiBMb2dzLCB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVzdGFtcCBhbmQgbG9nIGxldmVsXG4gKiBvZiBlYWNoIGV2ZW50LiBTZWxlY3Rpbmcg4oCYSlNPTuKAmSBmb3JtYXQgd2lsbCBvbmx5IGFsbG93IGN1c3RvbWVy4oCZcyB0byBoYXZlIGRpZmZlcmVudCBsb2cgbGV2ZWxcbiAqIEFwcGxpY2F0aW9uIGxvZyBsZXZlbCBhbmQgdGhlIFN5c3RlbSBsb2cgbGV2ZWwuXG4gKi9cbmV4cG9ydCBlbnVtIExvZ2dpbmdGb3JtYXQge1xuICAvKipcbiAgICogTGFtYmRhIExvZ3MgdGV4dCBmb3JtYXQuXG4gICAqL1xuICBURVhUID0gXCJUZXh0XCIsXG4gIC8qKlxuICAgKiBMYW1iZGEgc3RydWN0dXJlZCBsb2dnaW5nIGluIEpzb24gZm9ybWF0LlxuICAgKi9cbiAgSlNPTiA9IFwiSlNPTlwiLFxufVxuXG4vKipcbiAqIEEgZGVzdGluYXRpb24gY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERscURlc3RpbmF0aW9uQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgZGVzdGluYXRpb24gcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGRlc3RpbmF0aW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBETFEgZm9yIGFuIGV2ZW50IHNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFdmVudFNvdXJjZURscSB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBETFEgZGVzdGluYXRpb24gY29uZmlnIG9mIHRoZSBETFFcbiAgICovXG4gIGJpbmQoXG4gICAgdGFyZ2V0OiBJRXZlbnRTb3VyY2VNYXBwaW5nLFxuICAgIHRhcmdldEhhbmRsZXI6IElGdW5jdGlvbixcbiAgKTogRGxxRGVzdGluYXRpb25Db25maWc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlDb2RlQ29uZmlnKGNvZGU6IENvZGVDb25maWcsIHByb3BzOiBGdW5jdGlvblByb3BzKSB7XG4gIC8vIG11dHVhbGx5IGV4Y2x1c2l2ZVxuICBjb25zdCBjb2RlVHlwZSA9IFtjb2RlLmlubGluZUNvZGUsIGNvZGUuczNMb2NhdGlvbiwgY29kZS5pbWFnZV07XG5cbiAgaWYgKGNvZGVUeXBlLmZpbHRlcigoeCkgPT4gISF4KS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICAnbGFtYmRhLkNvZGUgbXVzdCBzcGVjaWZ5IGV4YWN0bHkgb25lIG9mOiBcImlubGluZUNvZGVcIiwgXCJzM0xvY2F0aW9uXCIsIG9yIFwiaW1hZ2VcIicsXG4gICAgKTtcbiAgfVxuXG4gIGlmICghIWNvZGUuaW1hZ2UgPT09IChwcm9wcy5oYW5kbGVyICE9PSBIYW5kbGVyLkZST01fSU1BR0UpKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgXCJoYW5kbGVyIG11c3QgYmUgYEhhbmRsZXIuRlJPTV9JTUFHRWAgd2hlbiB1c2luZyBpbWFnZSBhc3NldCBmb3IgTGFtYmRhIGZ1bmN0aW9uXCIsXG4gICAgKTtcbiAgfVxuXG4gIGlmICghIWNvZGUuaW1hZ2UgPT09IChwcm9wcy5ydW50aW1lICE9PSBSdW50aW1lLkZST01fSU1BR0UpKSB7XG4gICAgdGhyb3cgbmV3IFVuc2NvcGVkVmFsaWRhdGlvbkVycm9yKFxuICAgICAgXCJydW50aW1lIG11c3QgYmUgYFJ1bnRpbWUuRlJPTV9JTUFHRWAgd2hlbiB1c2luZyBpbWFnZSBhc3NldCBmb3IgTGFtYmRhIGZ1bmN0aW9uXCIsXG4gICAgKTtcbiAgfVxuXG4gIC8vIGlmIHRoaXMgaXMgaW5saW5lIGNvZGUsIGNoZWNrIHRoYXQgdGhlIHJ1bnRpbWUgc3VwcG9ydHNcbiAgaWYgKGNvZGUuaW5saW5lQ29kZSAmJiAhcHJvcHMucnVudGltZS5zdXBwb3J0c0lubGluZUNvZGUpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IoXG4gICAgICBgSW5saW5lIHNvdXJjZSBub3QgYWxsb3dlZCBmb3IgJHtwcm9wcy5ydW50aW1lIS5uYW1lfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bmRlZmluZWRJZk5vS2V5czxBIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0+KFxuICBzdHJ1Y3Q6IEEsXG4pOiBBIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYWxsVW5kZWZpbmVkID0gT2JqZWN0LnZhbHVlcyhzdHJ1Y3QpLmV2ZXJ5KCh2YWwpID0+IHZhbCA9PT0gdW5kZWZpbmVkKTtcbiAgcmV0dXJuIGFsbFVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHN0cnVjdDtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { apiGatewayGatewayResponse } from "@
|
|
1
|
+
import { apiGatewayGatewayResponse } from "@cdktn/provider-aws";
|
|
2
2
|
import { Construct } from "constructs";
|
|
3
3
|
import { IRestApi } from "./restapi";
|
|
4
4
|
import { AwsConstructBase, AwsConstructProps, IAwsConstruct } from "../aws-construct";
|
|
@@ -3,7 +3,7 @@ var _a, _b;
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.ResponseType = exports.GatewayResponse = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
-
const provider_aws_1 = require("@
|
|
6
|
+
const provider_aws_1 = require("@cdktn/provider-aws");
|
|
7
7
|
const aws_construct_1 = require("../aws-construct");
|
|
8
8
|
/**
|
|
9
9
|
* Configure the response received by clients, produced from the API Gateway backend.
|
|
@@ -50,7 +50,7 @@ class GatewayResponse extends aws_construct_1.AwsConstructBase {
|
|
|
50
50
|
}
|
|
51
51
|
exports.GatewayResponse = GatewayResponse;
|
|
52
52
|
_a = JSII_RTTI_SYMBOL_1;
|
|
53
|
-
GatewayResponse[_a] = { fqn: "terraconstructs.aws.compute.GatewayResponse", version: "0.2.
|
|
53
|
+
GatewayResponse[_a] = { fqn: "terraconstructs.aws.compute.GatewayResponse", version: "0.2.5" };
|
|
54
54
|
/**
|
|
55
55
|
* Supported types of gateway responses.
|
|
56
56
|
* @see https://docs.aws.amazon.com/apigateway/latest/developerguide/supported-gateway-response-types.html
|
|
@@ -66,7 +66,7 @@ class ResponseType {
|
|
|
66
66
|
}
|
|
67
67
|
exports.ResponseType = ResponseType;
|
|
68
68
|
_b = JSII_RTTI_SYMBOL_1;
|
|
69
|
-
ResponseType[_b] = { fqn: "terraconstructs.aws.compute.ResponseType", version: "0.2.
|
|
69
|
+
ResponseType[_b] = { fqn: "terraconstructs.aws.compute.ResponseType", version: "0.2.5" };
|
|
70
70
|
/**
|
|
71
71
|
* The gateway response for authorization failure.
|
|
72
72
|
*/
|
|
@@ -153,4 +153,4 @@ ResponseType.UNSUPPORTED_MEDIA_TYPE = new ResponseType("UNSUPPORTED_MEDIA_TYPE")
|
|
|
153
153
|
* The gateway response when a request is blocked by AWS WAF.
|
|
154
154
|
*/
|
|
155
155
|
ResponseType.WAF_FILTERED = new ResponseType("WAF_FILTERED");
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS1yZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9nYXRld2F5LXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQWdFO0FBR2hFLG9EQUkwQjtBQWlEMUI7Ozs7R0FJRztBQUNILE1BQWEsZUFDWCxTQUFRLGdDQUFnQjtJQUt4QixJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLDZHQUE2RztZQUM3Ryw4RkFBOEY7WUFDOUYsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN4QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FDckQsS0FBSyxDQUFDLGVBQWUsQ0FDdEIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQ3hCO1lBQ0UsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUztZQUNsQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ3JDLGtCQUFrQixFQUFFLGtCQUFrQjtZQUN0QyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsU0FBUztZQUNsQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQztRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSx3Q0FBeUIsQ0FBQyx5QkFBeUIsQ0FDckUsSUFBSSxFQUNKLFVBQVUsRUFDVixvQkFBb0IsQ0FDckIsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDbEQsSUFBSSxVQUFVLEVBQUUsQ0FB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QUFDb0IseUJBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV2RTs7R0FFRztBQUNvQixtQ0FBc0IsR0FBRyxJQUFJLFlBQVksQ0FDOUQsd0JBQXdCLENBQ3pCLENBQUM7QUFFRjs7R0FFRztBQUNvQix5QkFBWSxHQUFHLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZSB9IGZyb20gXCJAY2RrdGYvcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVJlc3RBcGkgfSBmcm9tIFwiLi9yZXN0YXBpXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8vIGltcG9ydCB7IEZuIH0gZnJvbSBcIi4uLy4uL3RlcnJhLWZ1bmNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGdhdGV3YXkgcmVzcG9uc2UgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhdGV3YXlSZXNwb25zZSBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge31cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIG5ldyBnYXRld2F5IHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlSZXNwb25zZVByb3BzXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMsXG4gICAgR2F0ZXdheVJlc3BvbnNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXN0IGFwaSByZXNvdXJjZSB0byB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByZXN0QXBpOiBJUmVzdEFwaTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBnYXRld2F5IHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlSZXNwb25zZU9wdGlvbnMge1xuICAvKipcbiAgICogUmVzcG9uc2UgdHlwZSB0byBhc3NvY2lhdGUgd2l0aCBnYXRld2F5IHJlc3BvbnNlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdXBwb3J0ZWQtZ2F0ZXdheS1yZXNwb25zZS10eXBlcy5odG1sXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBSZXNwb25zZVR5cGU7XG5cbiAgLyoqXG4gICAqIEh0dHAgc3RhdHVzIGNvZGUgZm9yIHJlc3BvbnNlLlxuICAgKiBAZGVmYXVsdCAtIHN0YW5kYXJkIGh0dHAgc3RhdHVzIGNvZGUgZm9yIHRoZSByZXNwb25zZSB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ29kZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIGhlYWRlcnMgcGFyYW1ldGVycyBmb3IgcmVzcG9uc2UuXG4gICAqIEBkZWZhdWx0IC0gbm8gaGVhZGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VIZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ3VzdG9tIHRlbXBsYXRlcyB0byBnZXQgbWFwcGVkIGFzIHJlc3BvbnNlLlxuICAgKiBAZGVmYXVsdCAtIFJlc3BvbnNlIGZyb20gYXBpIHdpbGwgYmUgcmV0dXJuZWQgd2l0aG91dCBhcHBseWluZyBhbnkgdHJhbnNmb3JtYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZSB0aGUgcmVzcG9uc2UgcmVjZWl2ZWQgYnkgY2xpZW50cywgcHJvZHVjZWQgZnJvbSB0aGUgQVBJIEdhdGV3YXkgYmFja2VuZC5cbiAqXG4gKiBAcmVzb3VyY2UgYXdzX2FwaV9nYXRld2F5X2dhdGV3YXlfcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEdhdGV3YXlSZXNwb25zZVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJR2F0ZXdheVJlc3BvbnNlXG57XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogYXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZS5BcGlHYXRld2F5R2F0ZXdheVJlc3BvbnNlO1xuXG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gR2F0ZXdheVJlc3BvbnNlIGl0c2VsZiBkb2Vzbid0IGhhdmUgc3BlY2lmaWMgb3V0cHV0cyBsaWtlIEFSTiBvciBJRCBpbiB0aGUgc2FtZSB3YXkgb3RoZXIgcmVzb3VyY2VzIG1pZ2h0LlxuICAgICAgLy8gVGhlIHVuZGVybHlpbmcgVGVycmFmb3JtIHJlc291cmNlIGhhcyBhbiAnaWQnIHdoaWNoIGlzIHR5cGljYWxseSByZXN0X2FwaV9pZC9yZXNwb25zZV90eXBlLlxuICAgICAgcmVzcG9uc2VUeXBlOiB0aGlzLnJlc291cmNlLnJlc3BvbnNlVHlwZSxcbiAgICAgIHJlc3RBcGlJZDogdGhpcy5yZXNvdXJjZS5yZXN0QXBpSWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5UmVzcG9uc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VQYXJhbWV0ZXJzID0gdGhpcy5idWlsZFJlc3BvbnNlUGFyYW1ldGVycyhcbiAgICAgIHByb3BzLnJlc3BvbnNlSGVhZGVycyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2F0ZXdheVJlc3BvbnNlUHJvcHM6IGFwaUdhdGV3YXlHYXRld2F5UmVzcG9uc2UuQXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZUNvbmZpZyA9XG4gICAgICB7XG4gICAgICAgIHJlc3RBcGlJZDogcHJvcHMucmVzdEFwaS5yZXN0QXBpSWQsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogcHJvcHMudHlwZS5yZXNwb25zZVR5cGUsXG4gICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczogcmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICByZXNwb25zZVRlbXBsYXRlczogcHJvcHMudGVtcGxhdGVzLFxuICAgICAgICBzdGF0dXNDb2RlOiBwcm9wcy5zdGF0dXNDb2RlLFxuICAgICAgfTtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGFwaUdhdGV3YXlHYXRld2F5UmVzcG9uc2UuQXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZShcbiAgICAgIHRoaXMsXG4gICAgICBcIlJlc291cmNlXCIsXG4gICAgICBnYXRld2F5UmVzcG9uc2VQcm9wcyxcbiAgICApO1xuXG4gICAgY29uc3QgZGVwbG95bWVudCA9IHByb3BzLnJlc3RBcGkubGF0ZXN0RGVwbG95bWVudDtcbiAgICBpZiAoZGVwbG95bWVudCkge1xuICAgICAgZGVwbG95bWVudC5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yZXNvdXJjZSk7XG4gICAgICAvLyBGbi5zaGExKEZuLmpzb25lbmNvZGUoKSkgY2F1c2VzIG5lc3RlZCBUb2tlbnMgYW5kIFJlc29sdmVyIGVycm9ycz9cbiAgICAgIGRlcGxveW1lbnQuYWRkVG9UcmlnZ2VycyhnYXRld2F5UmVzcG9uc2VQcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlc3BvbnNlUGFyYW1ldGVycyhyZXNwb25zZUhlYWRlcnM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFyZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzW2BnYXRld2F5cmVzcG9uc2UuaGVhZGVyLiR7aGVhZGVyfWBdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVBhcmFtZXRlcnM7XG4gIH1cbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgdHlwZXMgb2YgZ2F0ZXdheSByZXNwb25zZXMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdXBwb3J0ZWQtZ2F0ZXdheS1yZXNwb25zZS10eXBlcy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNwb25zZVR5cGUge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIGF1dGhvcml6YXRpb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0RFTklFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJBQ0NFU1NfREVOSUVEXCIpO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gaW52YWxpZCBBUEkgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBJX0NPTkZJR1VSQVRJT05fRVJST1IgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiQVBJX0NPTkZJR1VSQVRJT05fRVJST1JcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiBhIGN1c3RvbSBvciBBbWF6b24gQ29nbml0byBhdXRob3JpemVyIGZhaWxlZCB0byBhdXRoZW50aWNhdGUgdGhlIGNhbGxlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUSE9SSVpFUl9GQUlMVVJFID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIkFVVEhPUklaRVJfRkFJTFVSRVwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgZmFpbGluZyB0byBjb25uZWN0IHRvIGEgY3VzdG9tIG9yIEFtYXpvbiBDb2duaXRvIGF1dGhvcml6ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhPUklaRVJfQ09ORklHVVJBVElPTl9FUlJPUiA9IG5ldyBSZXNwb25zZVR5cGUoXG4gICAgXCJBVVRIT1JJWkVSX0NPTkZJR1VSQVRJT05fRVJST1JcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXIgY2Fubm90IGJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gYW4gZW5hYmxlZCByZXF1ZXN0IHZhbGlkYXRvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkFEX1JFUVVFU1RfUEFSQU1FVEVSUyA9IG5ldyBSZXNwb25zZVR5cGUoXG4gICAgXCJCQURfUkVRVUVTVF9QQVJBTUVURVJTXCIsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIHdoZW4gdGhlIHJlcXVlc3QgYm9keSBjYW5ub3QgYmUgdmFsaWRhdGVkIGFjY29yZGluZyB0byBhbiBlbmFibGVkIHJlcXVlc3QgdmFsaWRhdG9yLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCQURfUkVRVUVTVF9CT0RZID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIkJBRF9SRVFVRVNUX0JPRFlcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gdW5zcGVjaWZpZWQgcmVzcG9uc2UgdHlwZSB3aXRoIHRoZSBzdGF0dXMgY29kZSBvZiA0WFguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfNFhYID0gbmV3IFJlc3BvbnNlVHlwZShcIkRFRkFVTFRfNFhYXCIpO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBnYXRld2F5IHJlc3BvbnNlIGZvciBhbiB1bnNwZWNpZmllZCByZXNwb25zZSB0eXBlIHdpdGggYSBzdGF0dXMgY29kZSBvZiA1WFguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfNVhYID0gbmV3IFJlc3BvbnNlVHlwZShcIkRFRkFVTFRfNVhYXCIpO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gQVdTIGF1dGhlbnRpY2F0aW9uIHRva2VuIGV4cGlyZWQgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVYUElSRURfVE9LRU4gPSBuZXcgUmVzcG9uc2VUeXBlKFwiRVhQSVJFRF9UT0tFTlwiKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIGFuIGludmFsaWQgQVdTIHNpZ25hdHVyZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5WQUxJRF9TSUdOQVRVUkUgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiSU5WQUxJRF9TSUdOQVRVUkVcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIGFuIGludGVncmF0aW9uIGZhaWxlZCBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5URUdSQVRJT05fRkFJTFVSRSA9IG5ldyBSZXNwb25zZVR5cGUoXG4gICAgXCJJTlRFR1JBVElPTl9GQUlMVVJFXCIsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIGZvciBhbiBpbnRlZ3JhdGlvbiB0aW1lZCBvdXQgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVEVHUkFUSU9OX1RJTUVPVVQgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiSU5URUdSQVRJT05fVElNRU9VVFwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gaW52YWxpZCBBUEkga2V5IHN1Ym1pdHRlZCBmb3IgYSBtZXRob2QgcmVxdWlyaW5nIGFuIEFQSSBrZXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVkFMSURfQVBJX0tFWSA9IG5ldyBSZXNwb25zZVR5cGUoXCJJTlZBTElEX0FQSV9LRVlcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIGZvciBhIG1pc3NpbmcgYXV0aGVudGljYXRpb24gdG9rZW4gZXJyb3IsXG4gICAqIGluY2x1ZGluZyB0aGUgY2FzZXMgd2hlbiB0aGUgY2xpZW50IGF0dGVtcHRzIHRvIGludm9rZSBhbiB1bnN1cHBvcnRlZCBBUEkgbWV0aG9kIG9yIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSVNTSU5HX0FVVEhFTlRJQ0FUSU9OX1RPS0VOID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIk1JU1NJTkdfQVVUSEVOVElDQVRJT05fVE9LRU5cIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIHRoZSB1c2FnZSBwbGFuIHF1b3RhIGV4Y2VlZGVkIGVycm9yLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBRVU9UQV9FWENFRURFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJRVU9UQV9FWENFRURFRFwiKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0IHRvbyBsYXJnZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVRVUVTVF9UT09fTEFSR0UgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiUkVRVUVTVF9UT09fTEFSR0VcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiBBUEkgR2F0ZXdheSBjYW5ub3QgZmluZCB0aGUgc3BlY2lmaWVkIHJlc291cmNlXG4gICAqIGFmdGVyIGFuIEFQSSByZXF1ZXN0IHBhc3NlcyBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTT1VSQ0VfTk9UX0ZPVU5EID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIlJFU09VUkNFX05PVF9GT1VORFwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSB3aGVuIHVzYWdlIHBsYW4sIG1ldGhvZCwgc3RhZ2UsIG9yIGFjY291bnQgbGV2ZWwgdGhyb3R0bGluZyBsaW1pdHMgZXhjZWVkZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRIUk9UVExFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJUSFJPVFRMRURcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIHdoZW4gdGhlIGN1c3RvbSBvciBBbWF6b24gQ29nbml0byBhdXRob3JpemVyIGZhaWxlZCB0byBhdXRoZW50aWNhdGUgdGhlIGNhbGxlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVU5BVVRIT1JJWkVEID0gbmV3IFJlc3BvbnNlVHlwZShcIlVOQVVUSE9SSVpFRFwiKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiBhIHBheWxvYWQgaXMgb2YgYW4gdW5zdXBwb3J0ZWQgbWVkaWEgdHlwZSwgaWYgc3RyaWN0IHBhc3N0aHJvdWdoIGJlaGF2aW9yIGlzIGVuYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVOU1VQUE9SVEVEX01FRElBX1RZUEUgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiVU5TVVBQT1JURURfTUVESUFfVFlQRVwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSB3aGVuIGEgcmVxdWVzdCBpcyBibG9ja2VkIGJ5IEFXUyBXQUYuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdBRl9GSUxURVJFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJXQUZfRklMVEVSRURcIik7XG5cbiAgLyoqIEEgY3VzdG9tIHJlc3BvbnNlIHR5cGUgdG8gc3VwcG9ydCBmdXR1cmUgY2FzZXMuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodHlwZTogc3RyaW5nKTogUmVzcG9uc2VUeXBlIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlVHlwZSh0eXBlLnRvVXBwZXJDYXNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkIHZhbHVlIG9mIHJlc3BvbnNlIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2VUeXBlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IHR5cGU7XG4gIH1cbn1cbiJdfQ==
|
|
156
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS1yZXNwb25zZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hd3MvY29tcHV0ZS9nYXRld2F5LXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsc0RBQWdFO0FBR2hFLG9EQUkwQjtBQWlEMUI7Ozs7R0FJRztBQUNILE1BQWEsZUFDWCxTQUFRLGdDQUFnQjtJQUt4QixJQUFXLE9BQU87UUFDaEIsT0FBTztZQUNMLDZHQUE2RztZQUM3Ryw4RkFBOEY7WUFDOUYsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWTtZQUN4QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO1NBQ25DLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUEyQjtRQUNuRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FDckQsS0FBSyxDQUFDLGVBQWUsQ0FDdEIsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQ3hCO1lBQ0UsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUztZQUNsQyxZQUFZLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZO1lBQ3JDLGtCQUFrQixFQUFFLGtCQUFrQjtZQUN0QyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsU0FBUztZQUNsQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVU7U0FDN0IsQ0FBQztRQUNKLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSx3Q0FBeUIsQ0FBQyx5QkFBeUIsQ0FDckUsSUFBSSxFQUNKLFVBQVUsRUFDVixvQkFBb0IsQ0FDckIsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7UUFDbEQsSUFBSSxVQUFVLEVBQUUsQ0FB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QUFDb0IseUJBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV2RTs7R0FFRztBQUNvQixtQ0FBc0IsR0FBRyxJQUFJLFlBQVksQ0FDOUQsd0JBQXdCLENBQ3pCLENBQUM7QUFFRjs7R0FFRztBQUNvQix5QkFBWSxHQUFHLElBQUksWUFBWSxDQUFDLGNBQWMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZSB9IGZyb20gXCJAY2RrdG4vcHJvdmlkZXItYXdzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVJlc3RBcGkgfSBmcm9tIFwiLi9yZXN0YXBpXCI7XG5pbXBvcnQge1xuICBBd3NDb25zdHJ1Y3RCYXNlLFxuICBBd3NDb25zdHJ1Y3RQcm9wcyxcbiAgSUF3c0NvbnN0cnVjdCxcbn0gZnJvbSBcIi4uL2F3cy1jb25zdHJ1Y3RcIjtcbi8vIGltcG9ydCB7IEZuIH0gZnJvbSBcIi4uLy4uL3RlcnJhLWZ1bmNcIjtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGdhdGV3YXkgcmVzcG9uc2UgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUdhdGV3YXlSZXNwb25zZSBleHRlbmRzIElBd3NDb25zdHJ1Y3Qge31cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIG5ldyBnYXRld2F5IHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlSZXNwb25zZVByb3BzXG4gIGV4dGVuZHMgQXdzQ29uc3RydWN0UHJvcHMsXG4gICAgR2F0ZXdheVJlc3BvbnNlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBSZXN0IGFwaSByZXNvdXJjZSB0byB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSByZXN0QXBpOiBJUmVzdEFwaTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIHRvIGFkZCBnYXRld2F5IHJlc3BvbnNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdhdGV3YXlSZXNwb25zZU9wdGlvbnMge1xuICAvKipcbiAgICogUmVzcG9uc2UgdHlwZSB0byBhc3NvY2lhdGUgd2l0aCBnYXRld2F5IHJlc3BvbnNlLlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdXBwb3J0ZWQtZ2F0ZXdheS1yZXNwb25zZS10eXBlcy5odG1sXG4gICAqL1xuICByZWFkb25seSB0eXBlOiBSZXNwb25zZVR5cGU7XG5cbiAgLyoqXG4gICAqIEh0dHAgc3RhdHVzIGNvZGUgZm9yIHJlc3BvbnNlLlxuICAgKiBAZGVmYXVsdCAtIHN0YW5kYXJkIGh0dHAgc3RhdHVzIGNvZGUgZm9yIHRoZSByZXNwb25zZSB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzQ29kZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ3VzdG9tIGhlYWRlcnMgcGFyYW1ldGVycyBmb3IgcmVzcG9uc2UuXG4gICAqIEBkZWZhdWx0IC0gbm8gaGVhZGVyc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVzcG9uc2VIZWFkZXJzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogQ3VzdG9tIHRlbXBsYXRlcyB0byBnZXQgbWFwcGVkIGFzIHJlc3BvbnNlLlxuICAgKiBAZGVmYXVsdCAtIFJlc3BvbnNlIGZyb20gYXBpIHdpbGwgYmUgcmV0dXJuZWQgd2l0aG91dCBhcHBseWluZyBhbnkgdHJhbnNmb3JtYXRpb24uXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZXM/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyZSB0aGUgcmVzcG9uc2UgcmVjZWl2ZWQgYnkgY2xpZW50cywgcHJvZHVjZWQgZnJvbSB0aGUgQVBJIEdhdGV3YXkgYmFja2VuZC5cbiAqXG4gKiBAcmVzb3VyY2UgYXdzX2FwaV9nYXRld2F5X2dhdGV3YXlfcmVzcG9uc2VcbiAqL1xuZXhwb3J0IGNsYXNzIEdhdGV3YXlSZXNwb25zZVxuICBleHRlbmRzIEF3c0NvbnN0cnVjdEJhc2VcbiAgaW1wbGVtZW50cyBJR2F0ZXdheVJlc3BvbnNlXG57XG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZTogYXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZS5BcGlHYXRld2F5R2F0ZXdheVJlc3BvbnNlO1xuXG4gIHB1YmxpYyBnZXQgb3V0cHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gR2F0ZXdheVJlc3BvbnNlIGl0c2VsZiBkb2Vzbid0IGhhdmUgc3BlY2lmaWMgb3V0cHV0cyBsaWtlIEFSTiBvciBJRCBpbiB0aGUgc2FtZSB3YXkgb3RoZXIgcmVzb3VyY2VzIG1pZ2h0LlxuICAgICAgLy8gVGhlIHVuZGVybHlpbmcgVGVycmFmb3JtIHJlc291cmNlIGhhcyBhbiAnaWQnIHdoaWNoIGlzIHR5cGljYWxseSByZXN0X2FwaV9pZC9yZXNwb25zZV90eXBlLlxuICAgICAgcmVzcG9uc2VUeXBlOiB0aGlzLnJlc291cmNlLnJlc3BvbnNlVHlwZSxcbiAgICAgIHJlc3RBcGlJZDogdGhpcy5yZXNvdXJjZS5yZXN0QXBpSWQsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHYXRld2F5UmVzcG9uc2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgY29uc3QgcmVzcG9uc2VQYXJhbWV0ZXJzID0gdGhpcy5idWlsZFJlc3BvbnNlUGFyYW1ldGVycyhcbiAgICAgIHByb3BzLnJlc3BvbnNlSGVhZGVycyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2F0ZXdheVJlc3BvbnNlUHJvcHM6IGFwaUdhdGV3YXlHYXRld2F5UmVzcG9uc2UuQXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZUNvbmZpZyA9XG4gICAgICB7XG4gICAgICAgIHJlc3RBcGlJZDogcHJvcHMucmVzdEFwaS5yZXN0QXBpSWQsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogcHJvcHMudHlwZS5yZXNwb25zZVR5cGUsXG4gICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczogcmVzcG9uc2VQYXJhbWV0ZXJzLFxuICAgICAgICByZXNwb25zZVRlbXBsYXRlczogcHJvcHMudGVtcGxhdGVzLFxuICAgICAgICBzdGF0dXNDb2RlOiBwcm9wcy5zdGF0dXNDb2RlLFxuICAgICAgfTtcbiAgICB0aGlzLnJlc291cmNlID0gbmV3IGFwaUdhdGV3YXlHYXRld2F5UmVzcG9uc2UuQXBpR2F0ZXdheUdhdGV3YXlSZXNwb25zZShcbiAgICAgIHRoaXMsXG4gICAgICBcIlJlc291cmNlXCIsXG4gICAgICBnYXRld2F5UmVzcG9uc2VQcm9wcyxcbiAgICApO1xuXG4gICAgY29uc3QgZGVwbG95bWVudCA9IHByb3BzLnJlc3RBcGkubGF0ZXN0RGVwbG95bWVudDtcbiAgICBpZiAoZGVwbG95bWVudCkge1xuICAgICAgZGVwbG95bWVudC5ub2RlLmFkZERlcGVuZGVuY3kodGhpcy5yZXNvdXJjZSk7XG4gICAgICAvLyBGbi5zaGExKEZuLmpzb25lbmNvZGUoKSkgY2F1c2VzIG5lc3RlZCBUb2tlbnMgYW5kIFJlc29sdmVyIGVycm9ycz9cbiAgICAgIGRlcGxveW1lbnQuYWRkVG9UcmlnZ2VycyhnYXRld2F5UmVzcG9uc2VQcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJlc3BvbnNlUGFyYW1ldGVycyhyZXNwb25zZUhlYWRlcnM/OiB7XG4gICAgW2tleTogc3RyaW5nXTogc3RyaW5nO1xuICB9KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFyZXNwb25zZUhlYWRlcnMpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VQYXJhbWV0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgZm9yIChjb25zdCBbaGVhZGVyLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocmVzcG9uc2VIZWFkZXJzKSkge1xuICAgICAgcmVzcG9uc2VQYXJhbWV0ZXJzW2BnYXRld2F5cmVzcG9uc2UuaGVhZGVyLiR7aGVhZGVyfWBdID0gdmFsdWU7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZVBhcmFtZXRlcnM7XG4gIH1cbn1cblxuLyoqXG4gKiBTdXBwb3J0ZWQgdHlwZXMgb2YgZ2F0ZXdheSByZXNwb25zZXMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hcGlnYXRld2F5L2xhdGVzdC9kZXZlbG9wZXJndWlkZS9zdXBwb3J0ZWQtZ2F0ZXdheS1yZXNwb25zZS10eXBlcy5odG1sXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNwb25zZVR5cGUge1xuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIGF1dGhvcml6YXRpb24gZmFpbHVyZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNDRVNTX0RFTklFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJBQ0NFU1NfREVOSUVEXCIpO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gaW52YWxpZCBBUEkgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVBJX0NPTkZJR1VSQVRJT05fRVJST1IgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiQVBJX0NPTkZJR1VSQVRJT05fRVJST1JcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiBhIGN1c3RvbSBvciBBbWF6b24gQ29nbml0byBhdXRob3JpemVyIGZhaWxlZCB0byBhdXRoZW50aWNhdGUgdGhlIGNhbGxlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQVVUSE9SSVpFUl9GQUlMVVJFID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIkFVVEhPUklaRVJfRkFJTFVSRVwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgZmFpbGluZyB0byBjb25uZWN0IHRvIGEgY3VzdG9tIG9yIEFtYXpvbiBDb2duaXRvIGF1dGhvcml6ZXIuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFVVEhPUklaRVJfQ09ORklHVVJBVElPTl9FUlJPUiA9IG5ldyBSZXNwb25zZVR5cGUoXG4gICAgXCJBVVRIT1JJWkVSX0NPTkZJR1VSQVRJT05fRVJST1JcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiB0aGUgcmVxdWVzdCBwYXJhbWV0ZXIgY2Fubm90IGJlIHZhbGlkYXRlZCBhY2NvcmRpbmcgdG8gYW4gZW5hYmxlZCByZXF1ZXN0IHZhbGlkYXRvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQkFEX1JFUVVFU1RfUEFSQU1FVEVSUyA9IG5ldyBSZXNwb25zZVR5cGUoXG4gICAgXCJCQURfUkVRVUVTVF9QQVJBTUVURVJTXCIsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIHdoZW4gdGhlIHJlcXVlc3QgYm9keSBjYW5ub3QgYmUgdmFsaWRhdGVkIGFjY29yZGluZyB0byBhbiBlbmFibGVkIHJlcXVlc3QgdmFsaWRhdG9yLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBCQURfUkVRVUVTVF9CT0RZID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIkJBRF9SRVFVRVNUX0JPRFlcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gdW5zcGVjaWZpZWQgcmVzcG9uc2UgdHlwZSB3aXRoIHRoZSBzdGF0dXMgY29kZSBvZiA0WFguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfNFhYID0gbmV3IFJlc3BvbnNlVHlwZShcIkRFRkFVTFRfNFhYXCIpO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBnYXRld2F5IHJlc3BvbnNlIGZvciBhbiB1bnNwZWNpZmllZCByZXNwb25zZSB0eXBlIHdpdGggYSBzdGF0dXMgY29kZSBvZiA1WFguXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfNVhYID0gbmV3IFJlc3BvbnNlVHlwZShcIkRFRkFVTFRfNVhYXCIpO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gQVdTIGF1dGhlbnRpY2F0aW9uIHRva2VuIGV4cGlyZWQgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVYUElSRURfVE9LRU4gPSBuZXcgUmVzcG9uc2VUeXBlKFwiRVhQSVJFRF9UT0tFTlwiKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIGFuIGludmFsaWQgQVdTIHNpZ25hdHVyZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5WQUxJRF9TSUdOQVRVUkUgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiSU5WQUxJRF9TSUdOQVRVUkVcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIGFuIGludGVncmF0aW9uIGZhaWxlZCBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSU5URUdSQVRJT05fRkFJTFVSRSA9IG5ldyBSZXNwb25zZVR5cGUoXG4gICAgXCJJTlRFR1JBVElPTl9GQUlMVVJFXCIsXG4gICk7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIGZvciBhbiBpbnRlZ3JhdGlvbiB0aW1lZCBvdXQgZXJyb3IuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVEVHUkFUSU9OX1RJTUVPVVQgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiSU5URUdSQVRJT05fVElNRU9VVFwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSBmb3IgYW4gaW52YWxpZCBBUEkga2V5IHN1Ym1pdHRlZCBmb3IgYSBtZXRob2QgcmVxdWlyaW5nIGFuIEFQSSBrZXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IElOVkFMSURfQVBJX0tFWSA9IG5ldyBSZXNwb25zZVR5cGUoXCJJTlZBTElEX0FQSV9LRVlcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIGZvciBhIG1pc3NpbmcgYXV0aGVudGljYXRpb24gdG9rZW4gZXJyb3IsXG4gICAqIGluY2x1ZGluZyB0aGUgY2FzZXMgd2hlbiB0aGUgY2xpZW50IGF0dGVtcHRzIHRvIGludm9rZSBhbiB1bnN1cHBvcnRlZCBBUEkgbWV0aG9kIG9yIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNSVNTSU5HX0FVVEhFTlRJQ0FUSU9OX1RPS0VOID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIk1JU1NJTkdfQVVUSEVOVElDQVRJT05fVE9LRU5cIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIHRoZSB1c2FnZSBwbGFuIHF1b3RhIGV4Y2VlZGVkIGVycm9yLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBRVU9UQV9FWENFRURFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJRVU9UQV9FWENFRURFRFwiKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2UgZm9yIHRoZSByZXF1ZXN0IHRvbyBsYXJnZSBlcnJvci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVRVUVTVF9UT09fTEFSR0UgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiUkVRVUVTVF9UT09fTEFSR0VcIixcbiAgKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiBBUEkgR2F0ZXdheSBjYW5ub3QgZmluZCB0aGUgc3BlY2lmaWVkIHJlc291cmNlXG4gICAqIGFmdGVyIGFuIEFQSSByZXF1ZXN0IHBhc3NlcyBhdXRoZW50aWNhdGlvbiBhbmQgYXV0aG9yaXphdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTT1VSQ0VfTk9UX0ZPVU5EID0gbmV3IFJlc3BvbnNlVHlwZShcbiAgICBcIlJFU09VUkNFX05PVF9GT1VORFwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSB3aGVuIHVzYWdlIHBsYW4sIG1ldGhvZCwgc3RhZ2UsIG9yIGFjY291bnQgbGV2ZWwgdGhyb3R0bGluZyBsaW1pdHMgZXhjZWVkZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRIUk9UVExFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJUSFJPVFRMRURcIik7XG5cbiAgLyoqXG4gICAqIFRoZSBnYXRld2F5IHJlc3BvbnNlIHdoZW4gdGhlIGN1c3RvbSBvciBBbWF6b24gQ29nbml0byBhdXRob3JpemVyIGZhaWxlZCB0byBhdXRoZW50aWNhdGUgdGhlIGNhbGxlci5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVU5BVVRIT1JJWkVEID0gbmV3IFJlc3BvbnNlVHlwZShcIlVOQVVUSE9SSVpFRFwiKTtcblxuICAvKipcbiAgICogVGhlIGdhdGV3YXkgcmVzcG9uc2Ugd2hlbiBhIHBheWxvYWQgaXMgb2YgYW4gdW5zdXBwb3J0ZWQgbWVkaWEgdHlwZSwgaWYgc3RyaWN0IHBhc3N0aHJvdWdoIGJlaGF2aW9yIGlzIGVuYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVOU1VQUE9SVEVEX01FRElBX1RZUEUgPSBuZXcgUmVzcG9uc2VUeXBlKFxuICAgIFwiVU5TVVBQT1JURURfTUVESUFfVFlQRVwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBUaGUgZ2F0ZXdheSByZXNwb25zZSB3aGVuIGEgcmVxdWVzdCBpcyBibG9ja2VkIGJ5IEFXUyBXQUYuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFdBRl9GSUxURVJFRCA9IG5ldyBSZXNwb25zZVR5cGUoXCJXQUZfRklMVEVSRURcIik7XG5cbiAgLyoqIEEgY3VzdG9tIHJlc3BvbnNlIHR5cGUgdG8gc3VwcG9ydCBmdXR1cmUgY2FzZXMuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodHlwZTogc3RyaW5nKTogUmVzcG9uc2VUeXBlIHtcbiAgICByZXR1cm4gbmV3IFJlc3BvbnNlVHlwZSh0eXBlLnRvVXBwZXJDYXNlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkIHZhbHVlIG9mIHJlc3BvbnNlIHR5cGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcmVzcG9uc2VUeXBlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih0eXBlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnJlc3BvbnNlVHlwZSA9IHR5cGU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -12,7 +12,7 @@ class Handler {
|
|
|
12
12
|
}
|
|
13
13
|
exports.Handler = Handler;
|
|
14
14
|
_a = JSII_RTTI_SYMBOL_1;
|
|
15
|
-
Handler[_a] = { fqn: "terraconstructs.aws.compute.Handler", version: "0.2.
|
|
15
|
+
Handler[_a] = { fqn: "terraconstructs.aws.compute.Handler", version: "0.2.5" };
|
|
16
16
|
/**
|
|
17
17
|
* A special handler when the function handler is part of a Docker image.
|
|
18
18
|
*/
|