UNPKG

iam-floyd

Version:

AWS IAM policy statement generator with fluent interface

635 lines 60.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Entityresolution = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [entityresolution](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsentityresolution.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class Entityresolution extends shared_1.PolicyStatement { /** * Statement provider for service [entityresolution](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awsentityresolution.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ constructor(sid) { super(sid); this.servicePrefix = 'entityresolution'; this.accessLevelList = { 'Permissions management': [ 'AddPolicyStatement', 'DeletePolicyStatement', 'PutPolicy', 'UseIdNamespace', 'UseWorkflow' ], Write: [ 'BatchDeleteUniqueId', 'CreateIdMappingWorkflow', 'CreateIdNamespace', 'CreateMatchingWorkflow', 'CreateSchemaMapping', 'DeleteIdMappingWorkflow', 'DeleteIdNamespace', 'DeleteMatchingWorkflow', 'DeleteSchemaMapping', 'GenerateMatchId', 'StartIdMappingJob', 'StartMatchingJob', 'UpdateIdMappingWorkflow', 'UpdateIdNamespace', 'UpdateMatchingWorkflow', 'UpdateSchemaMapping' ], Read: [ 'GetIdMappingJob', 'GetIdMappingWorkflow', 'GetIdNamespace', 'GetMatchId', 'GetMatchingJob', 'GetMatchingWorkflow', 'GetPolicy', 'GetProviderService', 'GetSchemaMapping', 'ListTagsForResource' ], List: [ 'ListIdMappingJobs', 'ListIdMappingWorkflows', 'ListIdNamespaces', 'ListMatchingJobs', 'ListMatchingWorkflows', 'ListProviderServices', 'ListSchemaMappings' ], Tagging: [ 'TagResource', 'UntagResource' ] }; } /** * Grants permission to give an AWS service or another account permission to use an AWS Entity Resolution resources * * Access Level: Permissions management * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_AddPolicyStatement.html */ toAddPolicyStatement() { return this.to('AddPolicyStatement'); } /** * Grants permission to batch delete unique Id * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_BatchDeleteUniqueId.html */ toBatchDeleteUniqueId() { return this.to('BatchDeleteUniqueId'); } /** * Grants permission to create a idmapping workflow * * Access Level: Write * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_CreateIdMappingWorkflow.html */ toCreateIdMappingWorkflow() { return this.to('CreateIdMappingWorkflow'); } /** * Grants permission to create a IdNamespace * * Access Level: Write * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_CreateIdNamespace.html */ toCreateIdNamespace() { return this.to('CreateIdNamespace'); } /** * Grants permission to create a matching workflow * * Access Level: Write * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_CreateMatchingWorkflow.html */ toCreateMatchingWorkflow() { return this.to('CreateMatchingWorkflow'); } /** * Grants permission to create a schema mapping * * Access Level: Write * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_CreateSchemaMapping.html */ toCreateSchemaMapping() { return this.to('CreateSchemaMapping'); } /** * Grants permission to delete a idmapping workflow * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_DeleteIdMappingWorkflow.html */ toDeleteIdMappingWorkflow() { return this.to('DeleteIdMappingWorkflow'); } /** * Grants permission to delete a IdNamespace * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_DeleteIdNamespace.html */ toDeleteIdNamespace() { return this.to('DeleteIdNamespace'); } /** * Grants permission to delete a matching workflow * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_DeleteMatchingWorkflow.html */ toDeleteMatchingWorkflow() { return this.to('DeleteMatchingWorkflow'); } /** * Grants permission to delete permission given to an AWS service or another account permission to use an AWS Entity Resolution resources * * Access Level: Permissions management * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_DeletePolicyStatement.html */ toDeletePolicyStatement() { return this.to('DeletePolicyStatement'); } /** * Grants permission to delete a schema mapping * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_DeleteSchemaMapping.html */ toDeleteSchemaMapping() { return this.to('DeleteSchemaMapping'); } /** * Grants permission to generate match Id * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GenerateMatchId.html */ toGenerateMatchId() { return this.to('GenerateMatchId'); } /** * Grants permission to get a idmapping job * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetIdMappingJob.html */ toGetIdMappingJob() { return this.to('GetIdMappingJob'); } /** * Grants permission to get a idmapping workflow * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetIdMappingWorkflow.html */ toGetIdMappingWorkflow() { return this.to('GetIdMappingWorkflow'); } /** * Grants permission to get a IdNamespace * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetIdNamespace.html */ toGetIdNamespace() { return this.to('GetIdNamespace'); } /** * Grants permission to get match Id * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetMatchId.html */ toGetMatchId() { return this.to('GetMatchId'); } /** * Grants permission to get a matching job * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetMatchingJob.html */ toGetMatchingJob() { return this.to('GetMatchingJob'); } /** * Grants permission to get a matching workflow * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetMatchingWorkflow.html */ toGetMatchingWorkflow() { return this.to('GetMatchingWorkflow'); } /** * Grants permission to get a resource policy for an AWS Entity Resolution resources * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetPolicy.html */ toGetPolicy() { return this.to('GetPolicy'); } /** * Grants permission to get provider service * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetProviderService.html */ toGetProviderService() { return this.to('GetProviderService'); } /** * Grants permission to get a schema mapping * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_GetSchemaMapping.html */ toGetSchemaMapping() { return this.to('GetSchemaMapping'); } /** * Grants permission to list idmapping jobs * * Access Level: List * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListIdMappingJobs.html */ toListIdMappingJobs() { return this.to('ListIdMappingJobs'); } /** * Grants permission to list idmapping workflows * * Access Level: List * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListIdMappingWorkflows.html */ toListIdMappingWorkflows() { return this.to('ListIdMappingWorkflows'); } /** * Grants permission to list IdNamespaces * * Access Level: List * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListIdNamespaces.html */ toListIdNamespaces() { return this.to('ListIdNamespaces'); } /** * Grants permission to list matching jobs * * Access Level: List * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListMatchingJobs.html */ toListMatchingJobs() { return this.to('ListMatchingJobs'); } /** * Grants permission to list matching workflows * * Access Level: List * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListMatchingWorkflows.html */ toListMatchingWorkflows() { return this.to('ListMatchingWorkflows'); } /** * Grants permission to list provider service * * Access Level: List * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListProviderServices.html */ toListProviderServices() { return this.to('ListProviderServices'); } /** * Grants permission to list schema mappings * * Access Level: List * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListSchemaMappings.html */ toListSchemaMappings() { return this.to('ListSchemaMappings'); } /** * Grants permission to List tags for a resource * * Access Level: Read * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_ListTagsForResource.html */ toListTagsForResource() { return this.to('ListTagsForResource'); } /** * Grants permission to put a resource policy for an AWS Entity Resolution resources * * Access Level: Permissions management * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_PutPolicy.html */ toPutPolicy() { return this.to('PutPolicy'); } /** * Grants permission to start a idmapping job * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_StartIdMappingJob.html */ toStartIdMappingJob() { return this.to('StartIdMappingJob'); } /** * Grants permission to start a matching job * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_StartMatchingJob.html */ toStartMatchingJob() { return this.to('StartMatchingJob'); } /** * Grants permission to adds tags to a resource * * Access Level: Tagging * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_TagResource.html */ toTagResource() { return this.to('TagResource'); } /** * Grants permission to untag a resource * * Access Level: Tagging * * Possible conditions: * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_UntagResource.html */ toUntagResource() { return this.to('UntagResource'); } /** * Grants permission to update a idmapping workflow * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_UpdateIdMappingWorkflow.html */ toUpdateIdMappingWorkflow() { return this.to('UpdateIdMappingWorkflow'); } /** * Grants permission to update a IdNamespace * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_UpdateIdNamespace.html */ toUpdateIdNamespace() { return this.to('UpdateIdNamespace'); } /** * Grants permission to update a matching workflow * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_UpdateMatchingWorkflow.html */ toUpdateMatchingWorkflow() { return this.to('UpdateMatchingWorkflow'); } /** * Grants permission to update a schema mapping * * Access Level: Write * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_UpdateSchemaMapping.html */ toUpdateSchemaMapping() { return this.to('UpdateSchemaMapping'); } /** * Grants permission to give an AWS service or another account permission to use IdNamespace within a workflow * * Access Level: Permissions management * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_UseIdNamespace.html */ toUseIdNamespace() { return this.to('UseIdNamespace'); } /** * Grants permission to give an AWS service or another account permission to use workflow within a IdNamespace * * Access Level: Permissions management * * https://docs.aws.amazon.com/entityresolution/latest/apireference/API_UseWorkflow.html */ toUseWorkflow() { return this.to('UseWorkflow'); } /** * Adds a resource of type MatchingWorkflow to the statement * * https://docs.aws.amazon.com/entityresolution/latest/userguide/ * * @param workflowName - Identifier for the workflowName. * @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() */ onMatchingWorkflow(workflowName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:entityresolution:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:matchingworkflow/${workflowName}`); } /** * Adds a resource of type SchemaMapping to the statement * * https://docs.aws.amazon.com/entityresolution/latest/userguide/ * * @param schemaName - Identifier for the schemaName. * @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() */ onSchemaMapping(schemaName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:entityresolution:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:schemamapping/${schemaName}`); } /** * Adds a resource of type IdMappingWorkflow to the statement * * https://docs.aws.amazon.com/entityresolution/latest/userguide/ * * @param workflowName - Identifier for the workflowName. * @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() */ onIdMappingWorkflow(workflowName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:entityresolution:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:idmappingworkflow/${workflowName}`); } /** * Adds a resource of type ProviderService to the statement * * https://docs.aws.amazon.com/entityresolution/latest/userguide/ * * @param providerName - Identifier for the providerName. * @param providerServiceName - Identifier for the providerServiceName. * @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() */ onProviderService(providerName, providerServiceName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:entityresolution:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:providerservice/${providerName}/${providerServiceName}`); } /** * Adds a resource of type IdNamespace to the statement * * https://docs.aws.amazon.com/entityresolution/latest/userguide/ * * @param idNamespaceName - Identifier for the idNamespaceName. * @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() */ onIdNamespace(idNamespaceName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:entityresolution:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:idnamespace/${idNamespaceName}`); } /** * Filters access by a key that is present in the request the user makes to the entity resolution service * * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-permissions.html#iam-contextkeys * * Applies to actions: * - .toCreateIdMappingWorkflow() * - .toCreateIdNamespace() * - .toCreateMatchingWorkflow() * - .toCreateSchemaMapping() * - .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 a tag key and value pair * * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-permissions.html#iam-contextkeys * * Applies to resource types: * - MatchingWorkflow * - SchemaMapping * - IdMappingWorkflow * - ProviderService * - IdNamespace * * @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 list of all the tag key names present in the request the user makes to the entity resolution service * * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-permissions.html#iam-contextkeys * * Applies to actions: * - .toCreateIdMappingWorkflow() * - .toCreateIdNamespace() * - .toCreateMatchingWorkflow() * - .toCreateSchemaMapping() * - .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'); } } exports.Entityresolution = Entityresolution; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5cmVzb2x1dGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImVudGl0eXJlc29sdXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBRXpEOzs7O0dBSUc7QUFDSCxNQUFhLGdCQUFpQixTQUFRLHdCQUFlO0lBR25EOzs7O09BSUc7SUFDSCxZQUFZLEdBQVk7UUFDdEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBUk4sa0JBQWEsR0FBRyxrQkFBa0IsQ0FBQztRQTBkaEMsb0JBQWUsR0FBb0I7WUFDM0Msd0JBQXdCLEVBQUU7Z0JBQ3hCLG9CQUFvQjtnQkFDcEIsdUJBQXVCO2dCQUN2QixXQUFXO2dCQUNYLGdCQUFnQjtnQkFDaEIsYUFBYTthQUNkO1lBQ0QsS0FBSyxFQUFFO2dCQUNMLHFCQUFxQjtnQkFDckIseUJBQXlCO2dCQUN6QixtQkFBbUI7Z0JBQ25CLHdCQUF3QjtnQkFDeEIscUJBQXFCO2dCQUNyQix5QkFBeUI7Z0JBQ3pCLG1CQUFtQjtnQkFDbkIsd0JBQXdCO2dCQUN4QixxQkFBcUI7Z0JBQ3JCLGlCQUFpQjtnQkFDakIsbUJBQW1CO2dCQUNuQixrQkFBa0I7Z0JBQ2xCLHlCQUF5QjtnQkFDekIsbUJBQW1CO2dCQUNuQix3QkFBd0I7Z0JBQ3hCLHFCQUFxQjthQUN0QjtZQUNELElBQUksRUFBRTtnQkFDSixpQkFBaUI7Z0JBQ2pCLHNCQUFzQjtnQkFDdEIsZ0JBQWdCO2dCQUNoQixZQUFZO2dCQUNaLGdCQUFnQjtnQkFDaEIscUJBQXFCO2dCQUNyQixXQUFXO2dCQUNYLG9CQUFvQjtnQkFDcEIsa0JBQWtCO2dCQUNsQixxQkFBcUI7YUFDdEI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osbUJBQW1CO2dCQUNuQix3QkFBd0I7Z0JBQ3hCLGtCQUFrQjtnQkFDbEIsa0JBQWtCO2dCQUNsQix1QkFBdUI7Z0JBQ3ZCLHNCQUFzQjtnQkFDdEIsb0JBQW9CO2FBQ3JCO1lBQ0QsT0FBTyxFQUFFO2dC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QUMsZUFBdUIsRUFBRSxPQUFnQixFQUFFLE1BQWUsRUFBRSxTQUFrQjtRQUNqRyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBUSxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFpQixxQkFBc0IsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFjLElBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFlLGdCQUFpQixlQUFnQixFQUFFLENBQUMsQ0FBQztJQUN4TCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0ksZUFBZSxDQUFDLE1BQWMsRUFBRSxLQUF3QixFQUFFLFFBQTRCO1FBQzNGLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBbUIsTUFBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7OztPQWVHO0lBQ0ksZ0JBQWdCLENBQUMsTUFBYyxFQUFFLEtBQXdCLEVBQUUsUUFBNEI7UUFDNUYsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLG1CQUFvQixNQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7O09BZUc7SUFDSSxZQUFZLENBQUMsS0FBd0IsRUFBRSxRQUE0QjtRQUN4RSxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLElBQUksWUFBWSxDQUFDLENBQUM7SUFDakUsQ0FBQztDQUNGO0FBanFCRCw0Q0FpcUJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjZXNzTGV2ZWxMaXN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FjY2Vzcy1sZXZlbCc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcblxuLyoqXG4gKiBTdGF0ZW1lbnQgcHJvdmlkZXIgZm9yIHNlcnZpY2UgW2VudGl0eXJlc29sdXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXJ2aWNlLWF1dGhvcml6YXRpb24vbGF0ZXN0L3JlZmVyZW5jZS9saXN0X2F3c2VudGl0eXJlc29sdXRpb24uaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBFbnRpdHlyZXNvbHV0aW9uIGV4dGVuZHMgUG9saWN5U3RhdGVtZW50IHtcbiAgcHVibGljIHNlcnZpY2VQcmVmaXggPSAnZW50aXR5cmVzb2x1dGlvbic7XG5cbiAgLyoqXG4gICAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbZW50aXR5cmVzb2x1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYXdzZW50aXR5cmVzb2x1dGlvbi5odG1sKS5cbiAgICpcbiAgICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gICAqL1xuICBjb25zdHJ1Y3RvcihzaWQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihzaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdpdmUgYW4gQVdTIHNlcnZpY2Ugb3IgYW5vdGhlciBhY2NvdW50IHBlcm1pc3Npb24gdG8gdXNlIGFuIEFXUyBFbnRpdHkgUmVzb2x1dGlvbiByZXNvdXJjZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBQZXJtaXNzaW9ucyBtYW5hZ2VtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0FkZFBvbGljeVN0YXRlbWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9BZGRQb2xpY3lTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FkZFBvbGljeVN0YXRlbWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGJhdGNoIGRlbGV0ZSB1bmlxdWUgSWRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9CYXRjaERlbGV0ZVVuaXF1ZUlkLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0JhdGNoRGVsZXRlVW5pcXVlSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0JhdGNoRGVsZXRlVW5pcXVlSWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBpZG1hcHBpbmcgd29ya2Zsb3dcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVJZE1hcHBpbmdXb3JrZmxvdy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVJZE1hcHBpbmdXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlSWRNYXBwaW5nV29ya2Zsb3cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBJZE5hbWVzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0NyZWF0ZUlkTmFtZXNwYWNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZUlkTmFtZXNwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVJZE5hbWVzcGFjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG1hdGNoaW5nIHdvcmtmbG93XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfQ3JlYXRlTWF0Y2hpbmdXb3JrZmxvdy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVNYXRjaGluZ1dvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVNYXRjaGluZ1dvcmtmbG93Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgc2NoZW1hIG1hcHBpbmdcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9DcmVhdGVTY2hlbWFNYXBwaW5nLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVNjaGVtYU1hcHBpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVNjaGVtYU1hcHBpbmcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBpZG1hcHBpbmcgd29ya2Zsb3dcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9EZWxldGVJZE1hcHBpbmdXb3JrZmxvdy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVJZE1hcHBpbmdXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlSWRNYXBwaW5nV29ya2Zsb3cnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBJZE5hbWVzcGFjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZUlkTmFtZXNwYWNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUlkTmFtZXNwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVJZE5hbWVzcGFjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIG1hdGNoaW5nIHdvcmtmbG93XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlTWF0Y2hpbmdXb3JrZmxvdy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVNYXRjaGluZ1dvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVNYXRjaGluZ1dvcmtmbG93Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIHBlcm1pc3Npb24gZ2l2ZW4gdG8gYW4gQVdTIHNlcnZpY2Ugb3IgYW5vdGhlciBhY2NvdW50IHBlcm1pc3Npb24gdG8gdXNlIGFuIEFXUyBFbnRpdHkgUmVzb2x1dGlvbiByZXNvdXJjZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBQZXJtaXNzaW9ucyBtYW5hZ2VtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0RlbGV0ZVBvbGljeVN0YXRlbWVudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVQb2xpY3lTdGF0ZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVBvbGljeVN0YXRlbWVudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHNjaGVtYSBtYXBwaW5nXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfRGVsZXRlU2NoZW1hTWFwcGluZy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTY2hlbWFNYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVTY2hlbWFNYXBwaW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2VuZXJhdGUgbWF0Y2ggSWRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZW5lcmF0ZU1hdGNoSWQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2VuZXJhdGVNYXRjaElkKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZW5lcmF0ZU1hdGNoSWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBpZG1hcHBpbmcgam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRJZE1hcHBpbmdKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0SWRNYXBwaW5nSm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRJZE1hcHBpbmdKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBpZG1hcHBpbmcgd29ya2Zsb3dcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldElkTWFwcGluZ1dvcmtmbG93Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldElkTWFwcGluZ1dvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRJZE1hcHBpbmdXb3JrZmxvdycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIElkTmFtZXNwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRJZE5hbWVzcGFjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRJZE5hbWVzcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0SWROYW1lc3BhY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgbWF0Y2ggSWRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldE1hdGNoSWQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0TWF0Y2hJZCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0TWF0Y2hJZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIG1hdGNoaW5nIGpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0TWF0Y2hpbmdKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0TWF0Y2hpbmdKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldE1hdGNoaW5nSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGEgbWF0Y2hpbmcgd29ya2Zsb3dcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldE1hdGNoaW5nV29ya2Zsb3cuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0TWF0Y2hpbmdXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0TWF0Y2hpbmdXb3JrZmxvdycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIHJlc291cmNlIHBvbGljeSBmb3IgYW4gQVdTIEVudGl0eSBSZXNvbHV0aW9uIHJlc291cmNlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfR2V0UG9saWN5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFBvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UG9saWN5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IHByb3ZpZGVyIHNlcnZpY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0dldFByb3ZpZGVyU2VydmljZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRQcm92aWRlclNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFByb3ZpZGVyU2VydmljZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBhIHNjaGVtYSBtYXBwaW5nXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9HZXRTY2hlbWFNYXBwaW5nLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFNjaGVtYU1hcHBpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFNjaGVtYU1hcHBpbmcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGlkbWFwcGluZyBqb2JzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0SWRNYXBwaW5nSm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0SWRNYXBwaW5nSm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdElkTWFwcGluZ0pvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGlkbWFwcGluZyB3b3JrZmxvd3NcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RJZE1hcHBpbmdXb3JrZmxvd3MuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdElkTWFwcGluZ1dvcmtmbG93cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdElkTWFwcGluZ1dvcmtmbG93cycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgSWROYW1lc3BhY2VzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0SWROYW1lc3BhY2VzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RJZE5hbWVzcGFjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RJZE5hbWVzcGFjZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IG1hdGNoaW5nIGpvYnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RNYXRjaGluZ0pvYnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdE1hdGNoaW5nSm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdE1hdGNoaW5nSm9icycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgbWF0Y2hpbmcgd29ya2Zsb3dzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0TWF0Y2hpbmdXb3JrZmxvd3MuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdE1hdGNoaW5nV29ya2Zsb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0TWF0Y2hpbmdXb3JrZmxvd3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IHByb3ZpZGVyIHNlcnZpY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RQcm92aWRlclNlcnZpY2VzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RQcm92aWRlclNlcnZpY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UHJvdmlkZXJTZXJ2aWNlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3Qgc2NoZW1hIG1hcHBpbmdzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9MaXN0U2NoZW1hTWFwcGluZ3MuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFNjaGVtYU1hcHBpbmdzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0U2NoZW1hTWFwcGluZ3MnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBMaXN0IHRhZ3MgZm9yIGEgcmVzb3VyY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX0xpc3RUYWdzRm9yUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFRhZ3NGb3JSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFRhZ3NGb3JSZXNvdXJjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHB1dCBhIHJlc291cmNlIHBvbGljeSBmb3IgYW4gQVdTIEVudGl0eSBSZXNvbHV0aW9uIHJlc291cmNlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFBlcm1pc3Npb25zIG1hbmFnZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfUHV0UG9saWN5Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1B1dFBvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUHV0UG9saWN5Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYSBpZG1hcHBpbmcgam9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfU3RhcnRJZE1hcHBpbmdKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRJZE1hcHBpbmdKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0SWRNYXBwaW5nSm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYSBtYXRjaGluZyBqb2JcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9TdGFydE1hdGNoaW5nSm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0TWF0Y2hpbmdKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0TWF0Y2hpbmdKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhZGRzIHRhZ3MgdG8gYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmdcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVGFnUmVzb3VyY2UuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVGFnUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1RhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdW50YWcgYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmdcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVW50YWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VbnRhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVbnRhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgaWRtYXBwaW5nIHdvcmtmbG93XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlSWRNYXBwaW5nV29ya2Zsb3cuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlSWRNYXBwaW5nV29ya2Zsb3coKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUlkTWFwcGluZ1dvcmtmbG93Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGEgSWROYW1lc3BhY2VcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9VcGRhdGVJZE5hbWVzcGFjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVJZE5hbWVzcGFjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlSWROYW1lc3BhY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSBtYXRjaGluZyB3b3JrZmxvd1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VwZGF0ZU1hdGNoaW5nV29ya2Zsb3cuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlTWF0Y2hpbmdXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlTWF0Y2hpbmdXb3JrZmxvdycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIHNjaGVtYSBtYXBwaW5nXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2VudGl0eXJlc29sdXRpb24vbGF0ZXN0L2FwaXJlZmVyZW5jZS9BUElfVXBkYXRlU2NoZW1hTWFwcGluZy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVTY2hlbWFNYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVTY2hlbWFNYXBwaW5nJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2l2ZSBhbiBBV1Mgc2VydmljZSBvciBhbm90aGVyIGFjY291bnQgcGVybWlzc2lvbiB0byB1c2UgSWROYW1lc3BhY2Ugd2l0aGluIGEgd29ya2Zsb3dcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBQZXJtaXNzaW9ucyBtYW5hZ2VtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbnRpdHlyZXNvbHV0aW9uL2xhdGVzdC9hcGlyZWZlcmVuY2UvQVBJX1VzZUlkTmFtZXNwYWNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VzZUlkTmFtZXNwYWNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVc2VJZE5hbWVzcGFjZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdpdmUgYW4gQVdTIHNlcnZpY2Ugb3IgYW5vdGhlciBhY2NvdW50IHBlcm1pc3Npb24gdG8gdXNlIHdvcmtmbG93IHdpdGhpbiBhIElkTmFtZXNwYWNlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUGVybWlzc2lvbnMgbWFuYWdlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vZW50aXR5cmVzb2x1dGlvbi9sYXRlc3QvYXBpcmVmZXJlbmNlL0FQSV9Vc2VXb3JrZmxvdy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9Vc2VXb3JrZmxvdygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXNlV29ya2Zsb3cnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhY2Nlc3NMZXZlbExpc3Q6IEFjY2Vzc0xldmVsTGlzdCA9IHtcbiAgICAnUGVybWlzc2lvbnMgbWFuYWdlbWVudCc6IFtcbiAgICAgICdBZGRQb2xpY3lTdGF0ZW1lbnQnLFxuICAgICAgJ0RlbGV0ZVBvbGljeVN0YXRlbWVudCcsXG4gICAgICAnUHV0UG9saWN5JyxcbiAgICAgICdVc2VJZE5hbWVzcGFjZScsXG4gICAgICAnVXNlV29ya2Zsb3cnXG4gICAgXSxcbiAgICBXcml0ZTogW1xuICAgICAgJ0JhdGNoRGVsZXRlVW5pcXVlSWQnLFxuICAgICAgJ0NyZWF0ZUlkTWFwcGluZ1dvcmtmbG93JyxcbiAgICAgICdDcmVhdGVJZE5hbWVzcGFjZScsXG4gICAgICAnQ3JlYXRlTWF0Y2hpbmdXb3JrZmxvdycsXG4gICAgICAnQ3JlYXRlU2NoZW1hTWFwcGluZycsXG4gICAgICAnRGVsZXRlSWRNYXBwaW5nV29ya2Zsb3cnLFxuICAgICAgJ0RlbGV0ZUlkTmFtZXNwYWNlJyxcbiAgICAgICdEZWxldGVNYXRjaGluZ1dvcmtmbG93JyxcbiAgICAgICdEZWxldGVTY2hlbWFNYXBwaW5nJyxcbiAgICAgICdHZW5lcmF0ZU1hdGNoSWQnLFxuICAgICAgJ1N0YXJ0SWRNYXBwaW5nSm9iJyxcbiAgICAgICdTdGFydE1hdGNoaW5nSm9iJyxcbiAgICAgICdVcGRhdGVJZE1hcHBpbmdXb3JrZmxvdycsXG4gICAgICAnVXBkYXRlSWROYW1lc3BhY2UnLFxuICAgICAgJ1VwZGF0ZU1hdGNoaW5nV29ya2Zsb3cnLFxuICAgICAgJ1VwZGF0ZVNjaGVtYU1hcHBpbmcnXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnR2V0SWRNYXBwaW5nSm9iJyxcbiAgICAgICdHZXRJZE1hcHBpbmdXb3JrZmxvdycsXG4gICAgICAnR2V0SWROYW1lc3BhY2UnLFxuICAgICAgJ0dldE1hdGNoSWQnLFxuICAgICAgJ0dldE1hdGNoaW5nSm9iJyxcbiAgICAgICdHZXRNYXRjaGluZ1dvcmtmbG93JyxcbiAgICAgICdHZXRQb2xpY3knLFxuICAgICAgJ0dldFByb3ZpZGVyU2VydmljZScsXG4gICAgICAnR2V0U2NoZW1hTWFwcGluZycsXG4gICAgICAnTGlzdFRhZ3NGb3JSZXNvdXJjZSdcbiAgICBdLFxuICAgIExpc3Q6IFtcbiAgICAgICdMaXN0SWRNYXBwaW5nSm9icycsXG4gICAgICAnTGlzdElkTWFwcGluZ1dvcmtmbG93cycsXG4gICAgICAnTGlzdElkTmFtZXNwYWNlcycsXG4gICAgICAnTGlzdE1hdGNoaW5nSm9icycsXG4gICAgICAnTGlzdE1hdGNoaW5nV29ya2Zsb3dzJyxcbiAgICAgICdMaXN0UHJvdmlkZXJTZXJ2aWNlcycsXG4gICAgICAnTGlzdFNjaGVtYU1hcHBpbmdzJ1xuICAgIF0sXG4gICAgVGFn