cdk-iam-floyd
Version:
AWS IAM policy statement generator with fluent interface for AWS CDK
1,160 lines • 101 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Aidevops = void 0;
const shared_1 = require("../../shared");
/**
* Statement provider for service [aidevops](https://docs.aws.amazon.com/service-authorization/latest/reference/list_devops-agent.html).
*
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
*/
class Aidevops extends shared_1.PolicyStatement {
/**
* Grants permission to associate service
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_AssociateService.html
*/
toAssociateService() {
return this.to('AssociateService');
}
/**
* Grants permission to create an access token
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateAccessToken.html
*/
toCreateAccessToken() {
return this.to('CreateAccessToken');
}
/**
* Grants permission to create agentspace
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateAgentSpace.html
*/
toCreateAgentSpace() {
return this.to('CreateAgentSpace');
}
/**
* Grants permission to create an asset
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateAsset.html
*/
toCreateAsset() {
return this.to('CreateAsset');
}
/**
* Grants permission to create an asset file
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateAssetFile.html
*/
toCreateAssetFile() {
return this.to('CreateAssetFile');
}
/**
* Grants permission to create a new backlog task
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateBacklogTask.html
*/
toCreateBacklogTask() {
return this.to('CreateBacklogTask');
}
/**
* Grants permission to create a chat
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateChat.html
*/
toCreateChat() {
return this.to('CreateChat');
}
/**
* Grants permission to create a new knowledge item
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateKnowledgeItem.html
*/
toCreateKnowledgeItem() {
return this.to('CreateKnowledgeItem');
}
/**
* Grants permission to generate secure one-time session for initiating off-console Application login
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toCreateOneTimeLoginSession() {
return this.to('CreateOneTimeLoginSession');
}
/**
* Grants permission to create a private connection
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreatePrivateConnection.html
*/
toCreatePrivateConnection() {
return this.to('CreatePrivateConnection');
}
/**
* Grants permission to create a trigger
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_CreateTrigger.html
*/
toCreateTrigger() {
return this.to('CreateTrigger');
}
/**
* Grants permission to delete agentspace
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DeleteAgentSpace.html
*/
toDeleteAgentSpace() {
return this.to('DeleteAgentSpace');
}
/**
* Grants permission to delete an asset
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DeleteAsset.html
*/
toDeleteAsset() {
return this.to('DeleteAsset');
}
/**
* Grants permission to delete an asset file
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DeleteAssetFile.html
*/
toDeleteAssetFile() {
return this.to('DeleteAssetFile');
}
/**
* Grants permission to delete a knowledge item
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toDeleteKnowledgeItem() {
return this.to('DeleteKnowledgeItem');
}
/**
* Grants permission to delete a private connection
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DeletePrivateConnection.html
*/
toDeletePrivateConnection() {
return this.to('DeletePrivateConnection');
}
/**
* Grants permission to delete a trigger
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DeleteTrigger.html
*/
toDeleteTrigger() {
return this.to('DeleteTrigger');
}
/**
* Grants permission to deregister a service
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DeregisterService.html
*/
toDeregisterService() {
return this.to('DeregisterService');
}
/**
* Grants permission to describe a private connection
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DescribePrivateConnection.html
*/
toDescribePrivateConnection() {
return this.to('DescribePrivateConnection');
}
/**
* Grants permission to describe support services
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toDescribeServices() {
return this.to('DescribeServices');
}
/**
* Grants permission to describe customer support level
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toDescribeSupportLevel() {
return this.to('DescribeSupportLevel');
}
/**
* Grants permission to disable the Operator App access to the given AgentSpace
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DisableOperatorApp.html
*/
toDisableOperatorApp() {
return this.to('DisableOperatorApp');
}
/**
* Grants permission to disassociate service
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_DisassociateService.html
*/
toDisassociateService() {
return this.to('DisassociateService');
}
/**
* Grants permission to discover topology information
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toDiscoverTopology() {
return this.to('DiscoverTopology');
}
/**
* Grants permission to enable the Operator App to access the given AgentSpace
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_EnableOperatorApp.html
*/
toEnableOperatorApp() {
return this.to('EnableOperatorApp');
}
/**
* Grants permission to end a chat for a case
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toEndChatForCase() {
return this.to('EndChatForCase');
}
/**
* Grants permission to get access token details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetAccessToken.html
*/
toGetAccessToken() {
return this.to('GetAccessToken');
}
/**
* Grants permission to retrieve account usage information
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetAccountUsage.html
*/
toGetAccountUsage() {
return this.to('GetAccountUsage');
}
/**
* Grants permission to get agentspace
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetAgentSpace.html
*/
toGetAgentSpace() {
return this.to('GetAgentSpace');
}
/**
* Grants permission to get an asset
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetAsset.html
*/
toGetAsset() {
return this.to('GetAsset');
}
/**
* Grants permission to get asset content
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetAssetContent.html
*/
toGetAssetContent() {
return this.to('GetAssetContent');
}
/**
* Grants permission to get an asset file
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetAssetFile.html
*/
toGetAssetFile() {
return this.to('GetAssetFile');
}
/**
* Grants permission to get association
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetAssociation.html
*/
toGetAssociation() {
return this.to('GetAssociation');
}
/**
* Grants permission to get a backlog task
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetBacklogTask.html
*/
toGetBacklogTask() {
return this.to('GetBacklogTask');
}
/**
* Grants permission to get a knowledge item
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toGetKnowledgeItem() {
return this.to('GetKnowledgeItem');
}
/**
* Grants permission to get operator auth config for any enabled auth flow
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetOperatorApp.html
*/
toGetOperatorApp() {
return this.to('GetOperatorApp');
}
/**
* Grants permission to get a recommendation
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetRecommendation.html
*/
toGetRecommendation() {
return this.to('GetRecommendation');
}
/**
* Grants permission to get services
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetService.html
*/
toGetService() {
return this.to('GetService');
}
/**
* Grants permission to get a trigger
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_GetTrigger.html
*/
toGetTrigger() {
return this.to('GetTrigger');
}
/**
* Grants permission to initiate a chat for a case
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toInitiateChatForCase() {
return this.to('InitiateChatForCase');
}
/**
* Grants permission to list access tokens
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListAccessTokens.html
*/
toListAccessTokens() {
return this.to('ListAccessTokens');
}
/**
* Grants permission to list agentspace
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListAgentSpaces.html
*/
toListAgentSpaces() {
return this.to('ListAgentSpaces');
}
/**
* Grants permission to list asset files
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListAssetFiles.html
*/
toListAssetFiles() {
return this.to('ListAssetFiles');
}
/**
* Grants permission to list asset types
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListAssetTypes.html
*/
toListAssetTypes() {
return this.to('ListAssetTypes');
}
/**
* Grants permission to list asset versions
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListAssetVersions.html
*/
toListAssetVersions() {
return this.to('ListAssetVersions');
}
/**
* Grants permission to list assets
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListAssets.html
*/
toListAssets() {
return this.to('ListAssets');
}
/**
* Grants permission to list associations
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListAssociations.html
*/
toListAssociations() {
return this.to('ListAssociations');
}
/**
* Grants permission to list backlog tasks
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListBacklogTasks.html
*/
toListBacklogTasks() {
return this.to('ListBacklogTasks');
}
/**
* Grants permission to list chats
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListChats.html
*/
toListChats() {
return this.to('ListChats');
}
/**
* Grants permission to list executions
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListExecutions.html
*/
toListExecutions() {
return this.to('ListExecutions');
}
/**
* Grants permission to list goals
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListGoals.html
*/
toListGoals() {
return this.to('ListGoals');
}
/**
* Grants permission to list journal records
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListJournalRecords.html
*/
toListJournalRecords() {
return this.to('ListJournalRecords');
}
/**
* Grants permission to list knowledge item versions
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toListKnowledgeItemVersions() {
return this.to('ListKnowledgeItemVersions');
}
/**
* Grants permission to list knowledge items
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toListKnowledgeItems() {
return this.to('ListKnowledgeItems');
}
/**
* Grants permission to list pending messages
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListPendingMessages.html
*/
toListPendingMessages() {
return this.to('ListPendingMessages');
}
/**
* Grants permission to list private connections
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListPrivateConnections.html
*/
toListPrivateConnections() {
return this.to('ListPrivateConnections');
}
/**
* Grants permission to list recommendations
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListRecommendations.html
*/
toListRecommendations() {
return this.to('ListRecommendations');
}
/**
* Grants permission to list services
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListServices.html
*/
toListServices() {
return this.to('ListServices');
}
/**
* Grants permission to list tags for a resource
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListTagsForResource.html
*/
toListTagsForResource() {
return this.to('ListTagsForResource');
}
/**
* Grants permission to list triggers
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListTriggers.html
*/
toListTriggers() {
return this.to('ListTriggers');
}
/**
* Grants permission to list webhooks for association
*
* Access Level: List
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ListWebhooks.html
*/
toListWebhooks() {
return this.to('ListWebhooks');
}
/**
* Grants permission to register specific service
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_RegisterService.html
*/
toRegisterService() {
return this.to('RegisterService');
}
/**
* Grants permission to revoke an access token
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_RevokeAccessToken.html
*/
toRevokeAccessToken() {
return this.to('RevokeAccessToken');
}
/**
* Grants permission to rotate an access token
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_RotateAccessToken.html
*/
toRotateAccessToken() {
return this.to('RotateAccessToken');
}
/**
* Grants permission to look up a registered service accessible resources
*
* Access Level: Read
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toSearchServiceAccessibleResource() {
return this.to('SearchServiceAccessibleResource');
}
/**
* Grants permission to send chat messages
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_SendMessage.html
*/
toSendMessage() {
return this.to('SendMessage');
}
/**
* Grants permission to tag a resource
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_TagResource.html
*/
toTagResource() {
return this.to('TagResource');
}
/**
* Grants permission to untag a resource
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UntagResource.html
*/
toUntagResource() {
return this.to('UntagResource');
}
/**
* Grants permission to update agentspace
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateAgentSpace.html
*/
toUpdateAgentSpace() {
return this.to('UpdateAgentSpace');
}
/**
* Grants permission to update an approval action (approve or reject) for an agent tool invocation
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateApprovalAction.html
*/
toUpdateApprovalAction() {
return this.to('UpdateApprovalAction');
}
/**
* Grants permission to update an asset
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateAsset.html
*/
toUpdateAsset() {
return this.to('UpdateAsset');
}
/**
* Grants permission to update an asset file
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateAssetFile.html
*/
toUpdateAssetFile() {
return this.to('UpdateAssetFile');
}
/**
* Grants permission to update association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateAssociation.html
*/
toUpdateAssociation() {
return this.to('UpdateAssociation');
}
/**
* Grants permission to update a task
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateBacklogTask.html
*/
toUpdateBacklogTask() {
return this.to('UpdateBacklogTask');
}
/**
* Grants permission to update a goal
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateGoal.html
*/
toUpdateGoal() {
return this.to('UpdateGoal');
}
/**
* Grants permission to update a knowledge item
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/what-is.html
*/
toUpdateKnowledgeItem() {
return this.to('UpdateKnowledgeItem');
}
/**
* Grants permission to update the external Identity Provider configuration for the Operator App
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateOperatorAppIdpConfig.html
*/
toUpdateOperatorAppIdpConfig() {
return this.to('UpdateOperatorAppIdpConfig');
}
/**
* Grants permission to update a private connection certificate
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdatePrivateConnectionCertificate.html
*/
toUpdatePrivateConnectionCertificate() {
return this.to('UpdatePrivateConnectionCertificate');
}
/**
* Grants permission to update a recommendation
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateRecommendation.html
*/
toUpdateRecommendation() {
return this.to('UpdateRecommendation');
}
/**
* Grants permission to update a trigger
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_UpdateTrigger.html
*/
toUpdateTrigger() {
return this.to('UpdateTrigger');
}
/**
* Grants permission to validate aws association
*
* Access Level: Write
*
* https://docs.aws.amazon.com/devopsagent/latest/APIReference/API_ValidateAwsAssociations.html
*/
toValidateAwsAssociations() {
return this.to('ValidateAwsAssociations');
}
/**
* Grants permission to authorize vended logs
*
* Access Level: Permissions management, Write
*
* https://docs.aws.amazon.com/devopsagent/latest/userguide/configuring-capabilities-for-aws-devops-agent-vended-logs-and-metrics.html
*/
toAllowVendedLogDeliveryForResource() {
return this.to('AllowVendedLogDeliveryForResource');
}
/**
* Adds a resource of type agentspace to the statement
*
* https://docs.aws.amazon.com/devopsagent/latest/userguide/
*
* @param agentSpaceId - Identifier for the agentSpaceId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onAgentspace(agentSpaceId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:aidevops:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:agentspace/${agentSpaceId}`);
}
/**
* Adds a resource of type asset to the statement
*
* https://docs.aws.amazon.com/devopsagent/latest/userguide/
*
* @param agentSpaceId - Identifier for the agentSpaceId.
* @param assetId - Identifier for the assetId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*/
onAsset(agentSpaceId, assetId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:aidevops:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:agentspace/${agentSpaceId}/asset/${assetId}`);
}
/**
* Adds a resource of type associations to the statement
*
* https://docs.aws.amazon.com/devopsagent/latest/userguide/
*
* @param agentSpaceId - Identifier for the agentSpaceId.
* @param associationId - Identifier for the associationId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*/
onAssociations(agentSpaceId, associationId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:aidevops:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:agentspace/${agentSpaceId}/association/${associationId}`);
}
/**
* Adds a resource of type private-connection to the statement
*
* https://docs.aws.amazon.com/devopsagent/latest/userguide/
*
* @param name - Identifier for the name.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onPrivateConnection(name, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:aidevops:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:private-connection/${name}`);
}
/**
* Adds a resource of type service to the statement
*
* https://docs.aws.amazon.com/devopsagent/latest/userguide/
*
* @param serviceId - Identifier for the serviceId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*
* Possible conditions:
* - .ifAwsResourceTag()
*/
onService(serviceId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:aidevops:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:service/${serviceId}`);
}
/**
* Adds a resource of type trigger to the statement
*
* https://docs.aws.amazon.com/devopsagent/latest/userguide/
*
* @param agentSpaceId - Identifier for the agentSpaceId.
* @param triggerId - Identifier for the triggerId.
* @param account - Account of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's account.
* @param region - Region of the resource; defaults to `*`, unless using the CDK, where the default is the current Stack's region.
* @param partition - Partition of the AWS account [aws, aws-cn, aws-us-gov]; defaults to `aws`, unless using the CDK, where the default is the current Stack's partition.
*/
onTrigger(agentSpaceId, triggerId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:aidevops:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:agentspace/${agentSpaceId}/trigger/${triggerId}`);
}
/**
* Filters access by the tags that are passed in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
*
* Applies to actions:
* - .toCreateAgentSpace()
* - .toCreatePrivateConnection()
* - .toListTagsForResource()
* - .toRegisterService()
* - .toTagResource()
*
* @param tagKey The tag key to check
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsRequestTag(tagKey, value, operator) {
return this.if(`aws:RequestTag/${tagKey}`, value, operator ?? 'StringLike');
}
/**
* Filters access by the tags associated with the resource
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag
*
* Applies to actions:
* - .toAssociateService()
* - .toCreateAccessToken()
* - .toCreateAgentSpace()
* - .toCreateAsset()
* - .toCreateAssetFile()
* - .toCreateBacklogTask()
* - .toCreateChat()
* - .toCreateKnowledgeItem()
* - .toCreateOneTimeLoginSession()
* - .toCreatePrivateConnection()
* - .toCreateTrigger()
* - .toDeleteAgentSpace()
* - .toDeleteAsset()
* - .toDeleteAssetFile()
* - .toDeleteKnowledgeItem()
* - .toDeletePrivateConnection()
* - .toDeleteTrigger()
* - .toDeregisterService()
* - .toDescribePrivateConnection()
* - .toDescribeServices()
* - .toDescribeSupportLevel()
* - .toDisableOperatorApp()
* - .toDisassociateService()
* - .toDiscoverTopology()
* - .toEnableOperatorApp()
* - .toEndChatForCase()
* - .toGetAccessToken()
* - .toGetAgentSpace()
* - .toGetAsset()
* - .toGetAssetContent()
* - .toGetAssetFile()
* - .toGetAssociation()
* - .toGetBacklogTask()
* - .toGetKnowledgeItem()
* - .toGetOperatorApp()
* - .toGetRecommendation()
* - .toGetService()
* - .toGetTrigger()
* - .toInitiateChatForCase()
* - .toListAccessTokens()
* - .toListAssetFiles()
* - .toListAssetVersions()
* - .toListAssets()
* - .toListAssociations()
* - .toListBacklogTasks()
* - .toListChats()
* - .toListExecutions()
* - .toListGoals()
* - .toListJournalRecords()
* - .toListKnowledgeItemVersions()
* - .toListKnowledgeItems()
* - .toListPendingMessages()
* - .toListRecommendations()
* - .toListTagsForResource()
* - .toListTriggers()
* - .toListWebhooks()
* - .toRegisterService()
* - .toRevokeAccessToken()
* - .toRotateAccessToken()
* - .toSendMessage()
* - .toTagResource()
* - .toUntagResource()
* - .toUpdateAgentSpace()
* - .toUpdateApprovalAction()
* - .toUpdateAsset()
* - .toUpdateAssetFile()
* - .toUpdateAssociation()
* - .toUpdateBacklogTask()
* - .toUpdateGoal()
* - .toUpdateKnowledgeItem()
* - .toUpdateOperatorAppIdpConfig()
* - .toUpdatePrivateConnectionCertificate()
* - .toUpdateRecommendation()
* - .toUpdateTrigger()
* - .toValidateAwsAssociations()
*
* Applies to resource types:
* - agentspace
* - private-connection
* - service
*
* @param tagKey The tag key to check
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsResourceTag(tagKey, value, operator) {
return this.if(`aws:ResourceTag/${tagKey}`, value, operator ?? 'StringLike');
}
/**
* Filters access by the tag keys that are passed in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
*
* Applies to actions:
* - .toCreateAgentSpace()
* - .toCreatePrivateConnection()
* - .toListTagsForResource()
* - .toRegisterService()
* - .toTagResource()
* - .toUntagResource()
*
* @param value The value(s) to check
* @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike`
*/
ifAwsTagKeys(value, operator) {
return this.if(`aws:TagKeys`, value, operator ?? 'StringLike');
}
/**
* Statement provider for service [aidevops](https://docs.aws.amazon.com/service-authorization/latest/reference/list_devops-agent.html).
*
*/
constructor(props) {
super(props);
this.servicePrefix = 'aidevops';
this.accessLevelList = {
Write: [
'AssociateService',
'CreateAccessToken',
'CreateAgentSpace',
'CreateAsset',
'CreateAssetFile',
'CreateBacklogTask',
'CreateChat',
'CreateKnowledgeItem',
'CreateOneTimeLoginSession',
'CreatePrivateConnection',
'CreateTrigger',
'DeleteAgentSpace',
'DeleteAsset',
'DeleteAssetFile',
'DeleteKnowledgeItem',
'DeletePrivateConnection',
'DeleteTrigger',
'DeregisterService',
'DescribeSupportLevel',
'DisableOperatorApp',
'DisassociateService',
'DiscoverTopology',
'EnableOperatorApp',
'EndChatForCase',
'InitiateChatForCase',
'RegisterService',
'RevokeAccessToken',
'RotateAccessToken',
'SendMessage',
'TagResource',
'UntagResource',
'UpdateAgentSpace',
'UpdateApprovalAction',
'UpdateAsset',
'UpdateAssetFile',
'UpdateAssociation',
'UpdateBacklogTask',
'UpdateGoal',
'UpdateKnowledgeItem',
'UpdateOperatorAppIdpConfig',
'UpdatePrivateConnectionCertificate',
'UpdateRecommendation',
'UpdateTrigger',
'ValidateAwsAssociations',
'AllowVendedLogDeliveryForResource'
],
Read: [
'DescribePrivateConnection',
'DescribeServices',
'GetAccessToken',
'GetAccountUsage',
'GetAgentSpace',
'GetAsset',
'GetAssetContent',
'GetAssetFile',
'GetAssociation',
'GetBacklogTask',
'GetKnowledgeItem',
'GetOperatorApp',
'GetRecommendation',
'GetService',
'GetTrigger',
'ListTagsForResource',
'SearchServiceAccessibleResource'
],
List: [
'ListAccessTokens',
'ListAgentSpaces',
'ListAssetFiles',
'ListAssetTypes',
'ListAssetVersions',
'ListAssets',
'ListAssociations',
'ListBacklogTasks',
'ListChats',
'ListExecutions',
'ListGoals',
'ListJournalRecords',
'ListKnowledgeItemVersions',
'ListKnowledgeItems',
'ListPendingMessages',
'ListPrivateConnections',
'ListRecommendations',
'ListServices',
'ListTriggers',
'ListWebhooks'
],
Tagging: [
'TagResource',
'UntagResource'
],
'Permissions management': [
'AllowVendedLogDeliveryForResource'
]
};
}
}
exports.Aidevops = Aidevops;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2b3BzLWFnZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGV2b3BzLWFnZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHlDQUF5RDtBQUd6RDs7OztHQUlHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsd0JBQWU7SUFHM0M7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxtQkFBbUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGlCQUFpQjtRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0kscUJBQXFCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSwyQkFBMkI7UUFDaEMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFD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LGtCQUFrQjtnQkFDbEIsZ0JBQWdCO2dCQUNoQixpQkFBaUI7Z0JBQ2pCLGVBQWU7Z0JBQ2YsVUFBVTtnQkFDVixpQkFBaUI7Z0JBQ2pCLGNBQWM7Z0JBQ2QsZ0JBQWdCO2dCQUNoQixnQkFBZ0I7Z0JBQ2hCLGtCQUFrQjtnQkFDbEIsZ0JBQWdCO2dCQUNoQixtQkFBbUI7Z0JBQ25CLFlBQVk7Z0JBQ1osWUFBWTtnQkFDWixxQkFBcUI7Z0JBQ3JCLGlDQUFpQzthQUNsQztZQUNELElBQUksRUFBRTtnQkFDSixrQkFBa0I7Z0JBQ2xCLGlCQUFpQjtnQkFDakIsZ0JBQWdCO2dCQUNoQixnQkFBZ0I7Z0JBQ2hCLG1CQUFtQjtnQkFDbkIsWUFBWTtnQkFDWixrQkFBa0I7Z0JBQ2xCLGtCQUFrQjtnQkFDbEIsV0FBVztnQkFDWCxnQkFBZ0I7Z0JBQ2hCLFdBQVc7Z0JBQ1gsb0JBQW9CO2dCQUNwQiwyQkFBMkI7Z0JBQzNCLG9CQUFvQjtnQkFDcEIscUJBQXFCO2dCQUNyQix3QkFBd0I7Z0JBQ3hCLHFCQUFxQjtnQkFDckIsY0FBYztnQkFDZCxjQUFjO2dCQUNkLGNBQWM7YUFDZjtZQUNELE9BQU8sRUFBRTtnQkFDUCxhQUFhO2dCQUNiLGVBQWU7YUFDaEI7WUFDRCx3QkFBd0IsRUFBRTtnQkFDeEIsbUNBQW1DO2FBQ3BDO1NBQ0YsQ0FBQztJQStPRixDQUFDO0NBQ0Y7QUF6dENELDRCQXl0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuaW1wb3J0IHsgYXdzX2lhbSBhcyBpYW0gfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2FpZGV2b3BzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9kZXZvcHMtYWdlbnQuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBBaWRldm9wcyBleHRlbmRzIFBvbGljeVN0YXRlbWVudCB7XG4gIHB1YmxpYyBzZXJ2aWNlUHJlZml4ID0gJ2FpZGV2b3BzJztcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXNzb2NpYXRlIHNlcnZpY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQXNzb2NpYXRlU2VydmljZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9Bc3NvY2lhdGVTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBc3NvY2lhdGVTZXJ2aWNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuIGFjY2VzcyB0b2tlblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVBY2Nlc3NUb2tlbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVBY2Nlc3NUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQWNjZXNzVG9rZW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYWdlbnRzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVBZ2VudFNwYWNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUFnZW50U3BhY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUFnZW50U3BhY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gYXNzZXRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQXNzZXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQXNzZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUFzc2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGFuIGFzc2V0IGZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlQXNzZXRGaWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUFzc2V0RmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQXNzZXRGaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IGJhY2tsb2cgdGFza1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVCYWNrbG9nVGFzay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVCYWNrbG9nVGFzaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQmFja2xvZ1Rhc2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBjaGF0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUNoYXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQ2hhdCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ2hhdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBrbm93bGVkZ2UgaXRlbVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVLbm93bGVkZ2VJdGVtLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUtub3dsZWRnZUl0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUtub3dsZWRnZUl0ZW0nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZW5lcmF0ZSBzZWN1cmUgb25lLXRpbWUgc2Vzc2lvbiBmb3IgaW5pdGlhdGluZyBvZmYtY29uc29sZSBBcHBsaWNhdGlvbiBsb2dpblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL3doYXQtaXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlT25lVGltZUxvZ2luU2Vzc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlT25lVGltZUxvZ2luU2Vzc2lvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHByaXZhdGUgY29ubmVjdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVQcml2YXRlQ29ubmVjdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVQcml2YXRlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlUHJpdmF0ZUNvbm5lY3Rpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSB0cmlnZ2VyXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZVRyaWdnZXIuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVHJpZ2dlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhZ2VudHNwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZUFnZW50U3BhY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQWdlbnRTcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlQWdlbnRTcGFjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBhc3NldFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVBc3NldC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVBc3NldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlQXNzZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYW4gYXNzZXQgZmlsZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVBc3NldEZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlQXNzZXRGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVBc3NldEZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBrbm93bGVkZ2UgaXRlbVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL3doYXQtaXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlS25vd2xlZGdlSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlS25vd2xlZGdlSXRlbScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHByaXZhdGUgY29ubmVjdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVQcml2YXRlQ29ubmVjdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVQcml2YXRlQ29ubmVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlUHJpdmF0ZUNvbm5lY3Rpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSB0cmlnZ2VyXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlbGV0ZVRyaWdnZXIuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlVHJpZ2dlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlcmVnaXN0ZXIgYSBzZXJ2aWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0RlcmVnaXN0ZXJTZXJ2aWNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlcmVnaXN0ZXJTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXJlZ2lzdGVyU2VydmljZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlc2NyaWJlIGEgcHJpdmF0ZSBjb25uZWN0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVzY3JpYmVQcml2YXRlQ29ubmVjdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZVByaXZhdGVDb25uZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZVByaXZhdGVDb25uZWN0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgc3VwcG9ydCBzZXJ2aWNlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2Uvd2hhdC1pcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZVNlcnZpY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZXNjcmliZVNlcnZpY2VzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVzY3JpYmUgY3VzdG9tZXIgc3VwcG9ydCBsZXZlbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL3doYXQtaXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVzY3JpYmVTdXBwb3J0TGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlU3VwcG9ydExldmVsJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGlzYWJsZSB0aGUgT3BlcmF0b3IgQXBwIGFjY2VzcyB0byB0aGUgZ2l2ZW4gQWdlbnRTcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EaXNhYmxlT3BlcmF0b3JBcHAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGlzYWJsZU9wZXJhdG9yQXBwKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEaXNhYmxlT3BlcmF0b3JBcHAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNhc3NvY2lhdGUgc2VydmljZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9EaXNhc3NvY2lhdGVTZXJ2aWNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Rpc2Fzc29jaWF0ZVNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rpc2Fzc29jaWF0ZVNlcnZpY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkaXNjb3ZlciB0b3BvbG9neSBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL3doYXQtaXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGlzY292ZXJUb3BvbG9neSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGlzY292ZXJUb3BvbG9neScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGVuYWJsZSB0aGUgT3BlcmF0b3IgQXBwIHRvIGFjY2VzcyB0aGUgZ2l2ZW4gQWdlbnRTcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVPcGVyYXRvckFwcC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9FbmFibGVPcGVyYXRvckFwcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRW5hYmxlT3BlcmF0b3JBcHAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmQgYSBjaGF0IGZvciBhIGNhc2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS93aGF0LWlzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0VuZENoYXRGb3JDYXNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdFbmRDaGF0Rm9yQ2FzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhY2Nlc3MgdG9rZW4gZGV0YWlsc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldEFjY2Vzc1Rva2VuLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFjY2Vzc1Rva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBY2Nlc3NUb2tlbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGFjY291bnQgdXNhZ2UgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRBY2NvdW50VXNhZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0QWNjb3VudFVzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBY2NvdW50VXNhZ2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYWdlbnRzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldEFnZW50U3BhY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0QWdlbnRTcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QWdlbnRTcGFjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhbiBhc3NldFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldEFzc2V0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFzc2V0KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBc3NldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhc3NldCBjb250ZW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfR2V0QXNzZXRDb250ZW50Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFzc2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QXNzZXRDb250ZW50Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGFuIGFzc2V0IGZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRBc3NldEZpbGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0QXNzZXRGaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBc3NldEZpbGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYXNzb2NpYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRBc3NvY2lhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRBc3NvY2lhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QXNzb2NpYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBiYWNrbG9nIHRhc2tcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRCYWNrbG9nVGFzay5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRCYWNrbG9nVGFzaygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QmFja2xvZ1Rhc2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBrbm93bGVkZ2UgaXRlbVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2Uvd2hhdC1pcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRLbm93bGVkZ2VJdGVtKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRLbm93bGVkZ2VJdGVtJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IG9wZXJhdG9yIGF1dGggY29uZmlnIGZvciBhbnkgZW5hYmxlZCBhdXRoIGZsb3dcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRPcGVyYXRvckFwcC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRPcGVyYXRvckFwcCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0T3BlcmF0b3JBcHAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSByZWNvbW1lbmRhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldFJlY29tbWVuZGF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFJlY29tbWVuZGF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRSZWNvbW1lbmRhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBzZXJ2aWNlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0dldFNlcnZpY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0U2VydmljZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0U2VydmljZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIHRyaWdnZXJcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRUcmlnZ2VyLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFRyaWdnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFRyaWdnZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBpbml0aWF0ZSBhIGNoYXQgZm9yIGEgY2FzZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL3doYXQtaXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvSW5pdGlhdGVDaGF0Rm9yQ2FzZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnSW5pdGlhdGVDaGF0Rm9yQ2FzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWNjZXNzIHRva2Vuc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RBY2Nlc3NUb2tlbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEFjY2Vzc1Rva2VucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEFjY2Vzc1Rva2VucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWdlbnRzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RBZ2VudFNwYWNlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0QWdlbnRTcGFjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RBZ2VudFNwYWNlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXNzZXQgZmlsZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0QXNzZXRGaWxlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0QXNzZXRGaWxlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEFzc2V0RmlsZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFzc2V0IHR5cGVzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdEFzc2V0VHlwZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEFzc2V0VHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RBc3NldFR5cGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhc3NldCB2ZXJzaW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RBc3NldFZlcnNpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RBc3NldFZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0QXNzZXRWZXJzaW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYXNzZXRzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdEFzc2V0cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0QXNzZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0QXNzZXRzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBhc3NvY2lhdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0QXNzb2NpYXRpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RBc3NvY2lhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RBc3NvY2lhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGJhY2tsb2cgdGFza3NcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0QmFja2xvZ1Rhc2tzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RCYWNrbG9nVGFza3MoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RCYWNrbG9nVGFza3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGNoYXRzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdENoYXRzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RDaGF0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdENoYXRzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBleGVjdXRpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdEV4ZWN1dGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEV4ZWN1dGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RFeGVjdXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBnb2Fsc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RHb2Fscy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0R29hbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RHb2FscycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3Qgam91cm5hbCByZWNvcmRzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdEpvdXJuYWxSZWNvcmRzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RKb3VybmFsUmVjb3JkcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEpvdXJuYWxSZWNvcmRzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBrbm93bGVkZ2UgaXRlbSB2ZXJzaW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2Uvd2hhdC1pcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0S25vd2xlZGdlSXRlbVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0S25vd2xlZGdlSXRlbVZlcnNpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBrbm93bGVkZ2UgaXRlbXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL3doYXQtaXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEtub3dsZWRnZUl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0S25vd2xlZGdlSXRlbXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHBlbmRpbmcgbWVzc2FnZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0UGVuZGluZ01lc3NhZ2VzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RQZW5kaW5nTWVzc2FnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RQZW5kaW5nTWVzc2FnZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHByaXZhdGUgY29ubmVjdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0UHJpdmF0ZUNvbm5lY3Rpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RQcml2YXRlQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RQcml2YXRlQ29ubmVjdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHJlY29tbWVuZGF0aW9uc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RSZWNvbW1lbmRhdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFJlY29tbWVuZGF0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlY29tbWVuZGF0aW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3Qgc2VydmljZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0U2VydmljZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFNlcnZpY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0U2VydmljZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHRhZ3MgZm9yIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0VGFnc0ZvclJlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUYWdzRm9yUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUYWdzRm9yUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHRyaWdnZXJzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfTGlzdFRyaWdnZXJzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUcmlnZ2VycygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRyaWdnZXJzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCB3ZWJob29rcyBmb3IgYXNzb2NpYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0V2ViaG9va3MuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFdlYmhvb2tzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0V2ViaG9va3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZWdpc3RlciBzcGVjaWZpYyBzZXJ2aWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1JlZ2lzdGVyU2VydmljZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9SZWdpc3RlclNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1JlZ2lzdGVyU2VydmljZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldm9rZSBhbiBhY2Nlc3MgdG9rZW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfUmV2b2tlQWNjZXNzVG9rZW4uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvUmV2b2tlQWNjZXNzVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1Jldm9rZUFjY2Vzc1Rva2VuJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcm90YXRlIGFuIGFjY2VzcyB0b2tlblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9Sb3RhdGVBY2Nlc3NUb2tlbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9Sb3RhdGVBY2Nlc3NUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUm90YXRlQWNjZXNzVG9rZW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsb29rIHVwIGEgcmVnaXN0ZXJlZCBzZXJ2aWNlIGFjY2Vzc2libGUgcmVzb3VyY2VzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS93aGF0LWlzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1NlYXJjaFNlcnZpY2VBY2Nlc3NpYmxlUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1NlYXJjaFNlcnZpY2VBY2Nlc3NpYmxlUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzZW5kIGNoYXQgbWVzc2FnZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfU2VuZE1lc3NhZ2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU2VuZE1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1NlbmRNZXNzYWdlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdGFnIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nLCBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVGFnUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1RhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdW50YWcgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9VbnRhZ1Jlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VudGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VudGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYWdlbnRzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9VcGRhdGVBZ2VudFNwYWNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUFnZW50U3BhY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUFnZW50U3BhY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYW4gYXBwcm92YWwgYWN0aW9uIChhcHByb3ZlIG9yIHJlamVjdCkgZm9yIGFuIGFnZW50IHRvb2wgaW52b2NhdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9VcGRhdGVBcHByb3ZhbEFjdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVBcHByb3ZhbEFjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQXBwcm92YWxBY3Rpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYW4gYXNzZXRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlQXNzZXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQXNzZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUFzc2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGFuIGFzc2V0IGZpbGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlQXNzZXRGaWxlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUFzc2V0RmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQXNzZXRGaWxlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGFzc29jaWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VwZGF0ZUFzc29jaWF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUFzc29jaWF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVBc3NvY2lhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIHRhc2tcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlQmFja2xvZ1Rhc2suaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQmFja2xvZ1Rhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUJhY2tsb2dUYXNrJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgZ29hbFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9VcGRhdGVHb2FsLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZUdvYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUdvYWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBrbm93bGVkZ2UgaXRlbVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL3doYXQtaXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlS25vd2xlZGdlSXRlbSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlS25vd2xlZGdlSXRlbScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSB0aGUgZXh0ZXJuYWwgSWRlbnRpdHkgUHJvdmlkZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIE9wZXJhdG9yIEFwcFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9VcGRhdGVPcGVyYXRvckFwcElkcENvbmZpZy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVPcGVyYXRvckFwcElkcENvbmZpZygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlT3BlcmF0b3JBcHBJZHBDb25maWcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBwcml2YXRlIGNvbm5lY3Rpb24gY2VydGlmaWNhdGVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlUHJpdmF0ZUNvbm5lY3Rpb25DZXJ0aWZpY2F0ZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVQcml2YXRlQ29ubmVjdGlvbkNlcnRpZmljYXRlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVQcml2YXRlQ29ubmVjdGlvbkNlcnRpZmljYXRlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgcmVjb21tZW5kYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVXBkYXRlUmVjb21tZW5kYXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUmVjb21tZW5kYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVJlY29tbWVuZGF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgdHJpZ2dlclxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9VcGRhdGVUcmlnZ2VyLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVRyaWdnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVRyaWdnZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB2YWxpZGF0ZSBhd3MgYXNzb2NpYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZGV2b3BzYWdlbnQvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfVmFsaWRhdGVBd3NBc3NvY2lhdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVmFsaWRhdGVBd3NBc3NvY2lhdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1ZhbGlkYXRlQXdzQXNzb2NpYXRpb25zJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXV0aG9yaXplIHZlbmRlZCBsb2dzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUGVybWlzc2lvbnMgbWFuYWdlbWVudCwgV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC91c2VyZ3VpZGUvY29uZmlndXJpbmctY2FwYWJpbGl0aWVzLWZvci1hd3MtZGV2b3BzLWFnZW50LXZlbmRlZC1sb2dzLWFuZC1tZXRyaWNzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0FsbG93VmVuZGVkTG9nRGVsaXZlcnlGb3JSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQWxsb3dWZW5kZWRMb2dEZWxpdmVyeUZvclJlc291cmNlJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWNjZXNzTGV2ZWxMaXN0OiBBY2Nlc3NMZXZlbExpc3QgPSB7XG4gICAgV3JpdGU6IFtcbiAgICAgICdBc3NvY2lhdGVTZXJ2aWNlJyxcbiAgICAgICdDcmVhdGVBY2Nlc3NUb2tlbicsXG4gICAgICAnQ3JlYXRlQWdlbnRTcGFjZScsXG4gICAgICAnQ3JlYXRlQXNzZXQnLFxuICAgICAgJ0NyZWF0ZUFzc2V0RmlsZScsXG4gICAgICAnQ3JlYXRlQmFja2xvZ1Rhc2snLFxuICAgICAgJ0NyZWF0ZUNoYXQnLFxuICAgICAgJ0NyZWF0ZUtub3dsZWRnZUl0ZW0nLFxuICAgICAgJ0NyZWF0ZU9uZVRpbWVMb2dpblNlc3Npb24nLFxuICAgICAgJ0NyZWF0ZVByaXZhdGVDb25uZWN0aW9uJyxcbiAgICAgICdDcmVhdGVUcmlnZ2VyJyxcbiAgICAgICdEZWxldGVBZ2VudFNwYWNlJyxcbiAgICAgICdEZWxldGVBc3NldCcsXG4gICAgICAnRGVsZXRlQXNzZXRGaWxlJyxcbiAgICAgICdEZWxldGVLbm93bGVkZ2VJdGVtJyxcbiAgICAgICdEZWxldGVQcml2YXRlQ29ubmVjdGlvbicsXG4gICAgICAnRGVsZXRlVHJpZ2dlcicsXG4gICAgICAnRGVyZWdpc3RlclNlcnZpY2UnLFxuICAgICAgJ0Rlc2NyaWJlU3VwcG9ydExldmVsJyxcbiAgICAgICdEaXNhYmxlT3BlcmF0b3JBcHAnLFxuICAgICAgJ0Rpc2Fzc29jaWF0ZVNlcnZpY2UnLFxuICAgICAgJ0Rpc2NvdmVyVG9wb2xvZ3knLFxuICAgICAgJ0VuYWJsZU9wZXJhdG9yQXBwJyxcbiAgICAgICdFbmRDaGF0Rm9yQ2FzZScsXG4gICAgICAnSW5pdGlhdGVDaGF0Rm9yQ2FzZScsXG4gICAgICAnUmVnaXN0ZXJTZXJ2aWNlJyxcbiAgICAgICdSZXZva2VBY2Nlc3NUb2tlbicsXG4gICAgICAnUm90YXRlQWNjZXNzVG9rZW4nLFxuICAgICAgJ1NlbmRNZXNzYWdlJyxcbiAgICAgICdUYWdSZXNvdXJjZScsXG4gICAgICAnVW50YWdSZXNvdXJjZScsXG4gICAgICAnVXBkYXRlQWdlbnRTcGFjZScsXG4gICAgICAnVXBkYXRlQXBwcm92YWxBY3Rpb24nLFxuICAgICAgJ1VwZGF0ZUFzc2V0JyxcbiAgICAgICdVcGRhdGVBc3NldEZpbGUnLFxuICAgICAgJ1VwZGF0ZUFzc29jaWF0aW9uJyxcbiAgICAgICdVcGRhdGVCYWNrbG9nVGFzaycsXG4gICAgICAnVXBkYXRlR29hbCcsXG4gICAgICAnVXBkYXRlS25vd2xlZGdlSXRlbScsXG4gICAgICAnVXBkYXRlT3BlcmF0b3JBcHBJZHBDb25maWcnLFxuICAgICAgJ1VwZGF0ZVByaXZhdGVDb25uZWN0aW9uQ2VydGlmaWNhdGUnLFxuICAgICAgJ1VwZGF0ZVJlY29tbWVuZGF0aW9uJyxcbiAgICAgICdVcGRhdGVUcmlnZ2VyJyxcbiAgICAgICdWYWxpZGF0ZUF3c0Fzc29jaWF0aW9ucycsXG4gICAgICAnQWxsb3dWZW5kZWRMb2dEZWxpdmVyeUZvclJlc291cmNlJ1xuICAgIF0sXG4gICAgUmVhZDogW1xuICAgICAgJ0Rlc2NyaWJlUHJpdmF0ZUNvbm5lY3Rpb24nLFxuICAgICAgJ0Rlc2NyaWJlU2VydmljZXMnLFxuICAgICAgJ0dldEFjY2Vzc1Rva2VuJyxcbiAgICAgICdHZXRBY2NvdW50VXNhZ2UnLFxuICAgICAgJ0dldEFnZW50U3BhY2UnLFxuICAgICAgJ0dldEFzc2V0JyxcbiAgICAgICdHZXRBc3NldENvbnRlbnQnLFxuICAgICAgJ0dldEFzc2V0RmlsZScsXG4gICAgICAnR2V0QXNzb2NpYXRpb24nLFxuICAgICAgJ0dldEJhY2tsb2dUYXNrJyxcbiAgICAgICdHZXRLbm93bGVkZ2VJdGVtJyxcbiAgICAgICdHZXRPcGVyYXRvckFwcCcsXG4gICAgICAnR2V0UmVjb21tZW5kYXRpb24nLFxuICAgICAgJ0dldFNlcnZpY2UnLFxuICAgICAgJ0dldFRyaWdnZXInLFxuICAgICAgJ0xpc3RUYWdzRm9yUmVzb3VyY2UnLFxuICAgICAgJ1NlYXJjaFNlcnZpY2VBY2Nlc3NpYmxlUmVzb3VyY2UnXG4gICAgXSxcbiAgICBMaXN0OiBbXG4gICAgICAnTGlzdEFjY2Vzc1Rva2VucycsXG4gICAgICAnTGlzdEFnZW50U3BhY2VzJyxcbiAgICAgICdMaXN0QXNzZXRGaWxlcycsXG4gICAgICAnTGlzdEFzc2V0VHlwZXMnLFxuICAgICAgJ0xpc3RBc3NldFZlcnNpb25zJyxcbiAgICAgICdMaXN0QXNzZXRzJyxcbiAgICAgICdMaXN0QXNzb2NpYXRpb25zJyxcbiAgICAgICdMaXN0QmFja2xvZ1Rhc2tzJyxcbiAgICAgICdMaXN0Q2hhdHMnLFxuICAgICAgJ0xpc3RFeGVjdXRpb25zJyxcbiAgICAgICdMaXN0R29hbHMnLFxuICAgICAgJ0xpc3RKb3VybmFsUmVjb3JkcycsXG4gICAgICAnTGlzdEtub3dsZWRnZUl0ZW1WZXJzaW9ucycsXG4gICAgICAnTGlzdEtub3dsZWRnZUl0ZW1zJyxcbiAgICAgICdMaXN0UGVuZGluZ01lc3NhZ2VzJyxcbiAgICAgICdMaXN0UHJpdmF0ZUNvbm5lY3Rpb25zJyxcbiAgICAgICdMaXN0UmVjb21tZW5kYXRpb25zJyxcbiAgICAgICdMaXN0U2VydmljZXMnLFxuICAgICAgJ0xpc3RUcmlnZ2VycycsXG4gICAgICAnTGlzdFdlYmhvb2tzJ1xuICAgIF0sXG4gICAgVGFnZ2luZzogW1xuICAgICAgJ1RhZ1Jlc291cmNlJyxcbiAgICAgICdVbnRhZ1Jlc291cmNlJ1xuICAgIF0sXG4gICAgJ1Blcm1pc3Npb25zIG1hbmFnZW1lbnQnOiBbXG4gICAgICAnQWxsb3dWZW5kZWRMb2dEZWxpdmVyeUZvclJlc291cmNlJ1xuICAgIF1cbiAgfTtcblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgYWdlbnRzcGFjZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvdXNlcmd1aWRlL1xuICAgKlxuICAgKiBAcGFyYW0gYWdlbnRTcGFjZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGFnZW50U3BhY2VJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uQWdlbnRzcGFjZShhZ2VudFNwYWNlSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTphaWRldm9wczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06YWdlbnRzcGFjZS8keyBhZ2VudFNwYWNlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIGFzc2V0IHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC91c2VyZ3VpZGUvXG4gICAqXG4gICAqIEBwYXJhbSBhZ2VudFNwYWNlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgYWdlbnRTcGFjZUlkLlxuICAgKiBAcGFyYW0gYXNzZXRJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBhc3NldElkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBvbkFzc2V0KGFnZW50U3BhY2VJZDogc3RyaW5nLCBhc3NldElkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06YWlkZXZvcHM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmFnZW50c3BhY2UvJHsgYWdlbnRTcGFjZUlkIH0vYXNzZXQvJHsgYXNzZXRJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgYXNzb2NpYXRpb25zIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC91c2VyZ3VpZGUvXG4gICAqXG4gICAqIEBwYXJhbSBhZ2VudFNwYWNlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgYWdlbnRTcGFjZUlkLlxuICAgKiBAcGFyYW0gYXNzb2NpYXRpb25JZCAtIElkZW50aWZpZXIgZm9yIHRoZSBhc3NvY2lhdGlvbklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBvbkFzc29jaWF0aW9ucyhhZ2VudFNwYWNlSWQ6IHN0cmluZywgYXNzb2NpYXRpb25JZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmFpZGV2b3BzOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTphZ2VudHNwYWNlLyR7IGFnZW50U3BhY2VJZCB9L2Fzc29jaWF0aW9uLyR7IGFzc29jaWF0aW9uSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIHByaXZhdGUtY29ubmVjdGlvbiB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvdXNlcmd1aWRlL1xuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIElkZW50aWZpZXIgZm9yIHRoZSBuYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Qcml2YXRlQ29ubmVjdGlvbihuYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06YWlkZXZvcHM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnByaXZhdGUtY29ubmVjdGlvbi8keyBuYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBzZXJ2aWNlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Rldm9wc2FnZW50L2xhdGVzdC91c2VyZ3VpZGUvXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgc2VydmljZUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25TZXJ2aWNlKHNlcnZpY2VJZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9OmFpZGV2b3BzOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTpzZXJ2aWNlLyR7IHNlcnZpY2VJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgdHJpZ2dlciB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9kZXZvcHNhZ2VudC9sYXRlc3QvdXNlcmd1aWRlL1xuICAgKlxuICAgKiBAcGFyYW0gYWdlbnRTcGFjZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGFnZW50U3BhY2VJZC5cbiAgICogQHBhcmFtIHRyaWdnZXJJZCAtIElkZW50aWZpZXIgZm9yIHRoZSB0cmlnZ2VySWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKi9cbiAgcHVibGljIG9uVHJpZ2dlcihhZ2VudFNwYWNlSWQ6IHN0cmluZywgdHJpZ2dlcklkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06YWlkZXZvcHM6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmFnZW50c3BhY2UvJHsgYWdlbnRTcGFjZUlkIH0vdHJpZ2dlci8keyB0cmlnZ2VySWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbHRlcnMgYWNjZXNzIGJ5IHRoZSB0YWdzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQWdlbnRTcGFjZSgpXG4gICAqIC0gLnRvQ3JlYXRlUHJpdmF0ZUNvbm5lY3Rpb24oKVxuICAgKiAtIC50b0xpc3RUYWdzRm9yUmVzb3VyY2UoKVxuICAgKiAtIC50b1JlZ2lzdGVyU2VydmljZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVxdWVzdFRhZyh0YWdLZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpSZXF1ZXN0VGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZ3MgYXNzb2NpYXRlZCB3aXRoIHRoZSByZXNvdXJjZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVzb3VyY2V0YWdcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0Fzc29jaWF0ZVNlcnZpY2UoKVxuICAgKiAtIC50b0NyZWF0ZUFjY2Vzc1Rva2VuKClcbiAgICogLSAudG9DcmVhdGVBZ2VudFNwYWNlKClcbiAgICogLSAudG9DcmVhdGVBc3NldCgpXG4gICAqIC0gLnRvQ3JlYXRlQXNzZXRGaWxlKClcbiAgICogLSAudG9DcmVhdGVCYWNrbG9nVGFzaygpXG4gICAqIC0gLnRvQ3JlYXRlQ2hhdCgpXG4gICAqIC0gLnRvQ3JlYXRlS25vd2xlZGdlSXRlbSgpXG4gICAqIC0gLnRvQ3JlYXRlT25lVGltZUxvZ2luU2Vzc2lvbigpXG4gICAqIC0gLnRvQ3JlYXRlUHJpdmF0ZUNvbm5lY3Rpb24oKVxuICAgKiAtIC50b0NyZWF0ZVRyaWdnZXIoKVxuICAgKiAtIC50b0RlbGV0ZUFnZW50U3BhY2UoKVxuICAgKiAtIC50b0RlbGV0ZUFzc2V0KClcbiAgICogLSAudG9EZWxldGVBc3NldEZpbGUoKVxuICAgKiAtIC50b0RlbGV0ZUtub3dsZWRnZUl0ZW0oKVxuICAgKiAtIC50b0RlbGV0ZVByaXZhdGVDb25uZWN0aW9uKClcbiAgICogLSAudG9EZWxldGVUcmlnZ2VyKClcbiAgICogLSAudG9EZXJlZ2lzdGVyU2VydmljZSgpXG4gICAqIC0gLnRvRGVzY3JpYmVQcml2YXRlQ29ubmVjdGlvbigpXG4gICAqIC0gLnRvRGVzY3JpYmVTZXJ2aWNlcygpXG4gICAqIC0gLnRvRGVzY3JpYmVTdXBwb3J0TGV2ZWwoKVxuICAgKiAtIC50b0Rpc2FibGVPcGVyYXRvckFwcCgpXG4gICAqIC0gLnRvRGlzYXNzb2NpYXRlU2VydmljZSgpXG4gICAqIC0gLnRvRGlzY292ZXJUb3BvbG9neSgpXG4gICAqIC0gLnRvRW5hYmxlT3BlcmF0b3JBcHAoKVxuICAgKiAtIC50b0VuZENoYXRGb3JDYXNlKClcbiAgICogLSAudG9HZXRBY2Nlc3NUb2tlbigpXG4gICAqIC0gLnRvR2V0QWdlbnRTcGFjZSgpXG4gICAqIC0gLnRvR2V0QXNzZXQoKVxuICAgKiAtIC50b0dldEFzc2V0Q29udGVudCgpXG4gICAqIC0gLnRvR2V0QXNzZXRGaWxlKClcbiAgICogLSAudG9HZXRBc3NvY2lhdGlvbigpXG4gICAqIC0gLnRvR2V0QmFja2xvZ1Rhc2soKVxuICAgKiAtIC50b0dldEtub3dsZWRnZUl0ZW0oKVxuICAgKiAtIC50b0dldE9wZXJhdG9yQXBwKClcbiAgICogLSAudG9HZXRSZWNvbW1lbmRhdGlvbigpXG4gICAqIC0gLnRvR2V0U2VydmljZSgpXG4gICAqIC0gLnRvR2V0VHJpZ2dlcigpXG4gICAqIC0gLnRvSW5pdGlhdGVDaGF0Rm9yQ2FzZSgpXG4gICAqIC0gLnRvTGlzdEFjY2Vzc1Rva2VucygpXG4gICAqIC0gLnRvTGlzdEFzc2V0RmlsZXMoKVxuICAgKiAtIC50b0xpc3RBc3NldFZlcnNpb25zKClcbiAgICogLSAudG9MaXN0QXNzZXRzKClcbiAgICogLSAudG9MaXN0QXNzb2NpYXRpb25zKClcbiAgICogLSAudG9MaXN0QmFja2xvZ1Rhc2tzKClcbiAgICogLSAudG9MaXN0Q2hhdHMoKVxuICAgKiAtIC50b0xpc3RFeGVjdXRpb25zKClcbiAgICogLSAudG9MaXN0R29hbHMoKVxuICAgKiAtIC50b0xpc3RKb3VybmFsUmVjb3JkcygpXG4gICAqIC0gLnRvTGlzdEtub3dsZWRnZUl0ZW1WZXJzaW9ucygpXG4gICAqIC0gLnRvTGlzdEtub3dsZWRnZUl0ZW1zKClcbiAgICogLSAudG9MaXN0UGVuZGluZ01lc3NhZ2VzKClcbiAgICogLSAudG9MaXN0UmVjb21tZW5kYXRpb25zKClcbiAgICogLSAudG9MaXN0VGFnc0ZvclJlc291cmNlKClcbiAgICogLSAudG9MaXN0VHJpZ2dlcnMoKVxuICAgKiAtIC50b0xpc3RXZWJob29rcygpXG4gICAqIC0gLnRvUmVnaXN0ZXJTZXJ2aWNlKClcbiAgICogLSAudG9SZXZva2VBY2Nlc3NUb2tlbigpXG4gICAqIC0gLnRvUm90YXRlQWNjZXNzVG9rZW4oKVxuICAgKiAtIC50b1NlbmRNZXNzYWdlKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVW50YWdSZXNvdXJjZSgpXG4gICAqIC0gLnRvVXBkYXRlQWdlbnRTcGFjZSgpXG4gICAqIC0gLnRvVXBkYXRlQXBwcm92YWxBY3Rpb24oKVxuICAgKiAtIC50b1VwZGF0ZUFzc2V0KClcbiAgICogLSAudG9VcGRhdGVBc3NldEZpbGUoKVxuICAgKiAtIC50b1VwZGF0ZUFzc29jaWF0aW9uKClcbiAgICogLSAudG9VcGRhdGVCYWNrbG9nVGFzaygpXG4gICAqIC0gLnRvVXBkYXRlR29hbCgpXG4gICAqIC0gLnRvVXBkYXRlS25vd2xlZGdlSXRlbSgpXG4gICAqIC0gLnRvVXBkYXRlT3BlcmF0b3JBcHBJZHBDb25maWcoKVxuICAgKiAtIC50b1VwZGF0ZVByaXZhdGVDb25uZWN0aW9uQ2VydGlmaWNhdGUoKVxuICAgKiAtIC50b1VwZGF0ZVJlY29tbWVuZGF0aW9uKClcbiAgICogLSAudG9VcGRhdGVUcmlnZ2VyKClcbiAgICogLSAudG9WYWxpZGF0ZUF3c0Fzc29jaWF0aW9ucygpXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gcmVzb3VyY2UgdHlwZXM6XG4gICAqIC0gYWdlbnRzcGFjZVxuICAgKiAtIHByaXZhdGUtY29ubmVjdGlvblxuICAgKiAtIHNlcnZpY2VcbiAgICpcbiAgICogQHBhcmFtIHRhZ0tleSBUaGUgdGFnIGtleSB0byBjaGVja1xuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1Jlc291cmNlVGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlc291cmNlVGFnLyR7IHRhZ0tleSB9YCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogRmlsdGVycyBhY2Nlc3MgYnkgdGhlIHRhZyBrZXlzIHRoYXQgYXJlIHBhc3NlZCBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtdGFna2V5c1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQWdlbnRTcGFjZSgpXG4gICAqIC0gLnRvQ3JlYXRlUHJpdmF0ZUNvbm5lY3Rpb24oKVxuICAgKiAtIC50b0xpc3RUYWdzRm9yUmVzb3VyY2UoKVxuICAgKiAtIC50b1JlZ2lzdGVyU2VydmljZSgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1RhZ0tleXModmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpUYWdLZXlzYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFthaWRldm9wc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfZGV2b3BzLWFnZW50Lmh0bWwpLlxuICAgKlxuICAgKi9cbiAgY29uc3RydWN0b3IocHJvcHM/OiBpYW0uUG9saWN5U3RhdGVtZW50UHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cbn1cbiJdfQ==