cdk-iam-floyd
Version:
AWS IAM policy statement generator with fluent interface for AWS CDK
1,644 lines • 151 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Omics = void 0;
const shared_1 = require("../../shared");
/**
* Statement provider for service [omics](https://docs.aws.amazon.com/service-authorization/latest/reference/list_omics.html).
*
* @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement
*/
class Omics extends shared_1.PolicyStatement {
/**
* Grants permission to abort multipart read set uploads
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_AbortMultipartReadSetUpload.html
*/
toAbortMultipartReadSetUpload() {
return this.to('AbortMultipartReadSetUpload');
}
/**
* Grants permission to accept a share
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_AcceptShare.html
*/
toAcceptShare() {
return this.to('AcceptShare');
}
/**
* Grants permission to batch delete Read Sets in the given Sequence Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_BatchDeleteReadSet.html
*/
toBatchDeleteReadSet() {
return this.to('BatchDeleteReadSet');
}
/**
* Grants permission to cancel an Annotation Import Job
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CancelAnnotationImportJob.html
*/
toCancelAnnotationImportJob() {
return this.to('CancelAnnotationImportJob');
}
/**
* Grants permission to cancel a workflow run and stop all workflow tasks
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CancelRun.html
*/
toCancelRun() {
return this.to('CancelRun');
}
/**
* Grants permission to cancel a batch of workflow runs
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CancelRunBatch.html
*/
toCancelRunBatch() {
return this.to('CancelRunBatch');
}
/**
* Grants permission to cancel a Variant Import Job
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CancelVariantImportJob.html
*/
toCancelVariantImportJob() {
return this.to('CancelVariantImportJob');
}
/**
* Grants permission to complete a multipart read set upload
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CompleteMultipartReadSetUpload.html
*/
toCompleteMultipartReadSetUpload() {
return this.to('CompleteMultipartReadSetUpload');
}
/**
* Grants permission to create an Annotation Store
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateAnnotationStore.html
*/
toCreateAnnotationStore() {
return this.to('CreateAnnotationStore');
}
/**
* Grants permission to create a Version in an Annotation Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateAnnotationStoreVersion.html
*/
toCreateAnnotationStoreVersion() {
return this.to('CreateAnnotationStoreVersion');
}
/**
* Grants permission to create a new configuration
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateConfiguration.html
*/
toCreateConfiguration() {
return this.to('CreateConfiguration');
}
/**
* Grants permission to create a multipart read set upload
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateMultipartReadSetUpload.html
*/
toCreateMultipartReadSetUpload() {
return this.to('CreateMultipartReadSetUpload');
}
/**
* Grants permission to create a Reference Store
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateReferenceStore.html
*/
toCreateReferenceStore() {
return this.to('CreateReferenceStore');
}
/**
* Grants permission to create a new workflow run cache
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateRunCache.html
*/
toCreateRunCache() {
return this.to('CreateRunCache');
}
/**
* Grants permission to create a new workflow run group
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateRunGroup.html
*/
toCreateRunGroup() {
return this.to('CreateRunGroup');
}
/**
* Grants permission to create a Sequence Store
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateSequenceStore.html
*/
toCreateSequenceStore() {
return this.to('CreateSequenceStore');
}
/**
* Grants permission to create a share
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateShare.html
*/
toCreateShare() {
return this.to('CreateShare');
}
/**
* Grants permission to create a Variant Store
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateVariantStore.html
*/
toCreateVariantStore() {
return this.to('CreateVariantStore');
}
/**
* Grants permission to create a new workflow with a workflow definition and template of workflow parameters
*
* Access Level: Write
*
* Possible conditions:
* - .ifAwsRequestTag()
* - .ifAwsTagKeys()
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflow.html
*/
toCreateWorkflow() {
return this.to('CreateWorkflow');
}
/**
* Grants permission to create a new workflow version with a workflow definition and template of workflow parameters
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_CreateWorkflowVersion.html
*/
toCreateWorkflowVersion() {
return this.to('CreateWorkflowVersion');
}
/**
* Grants permission to delete an Annotation Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteAnnotationStore.html
*/
toDeleteAnnotationStore() {
return this.to('DeleteAnnotationStore');
}
/**
* Grants permission to delete Versions in an Annotation Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteAnnotationStoreVersions.html
*/
toDeleteAnnotationStoreVersions() {
return this.to('DeleteAnnotationStoreVersions');
}
/**
* Grants permission to delete a batch
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteBatch.html
*/
toDeleteBatch() {
return this.to('DeleteBatch');
}
/**
* Grants permission to delete a configuration
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteConfiguration.html
*/
toDeleteConfiguration() {
return this.to('DeleteConfiguration');
}
/**
* Grants permission to delete a Reference in the given Reference Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteReference.html
*/
toDeleteReference() {
return this.to('DeleteReference');
}
/**
* Grants permission to delete a Reference Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteReferenceStore.html
*/
toDeleteReferenceStore() {
return this.to('DeleteReferenceStore');
}
/**
* Grants permission to delete a workflow run
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteRun.html
*/
toDeleteRun() {
return this.to('DeleteRun');
}
/**
* Grants permission to delete a batch of workflow runs
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteRunBatch.html
*/
toDeleteRunBatch() {
return this.to('DeleteRunBatch');
}
/**
* Grants permission to delete a workflow run cache
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteRunCache.html
*/
toDeleteRunCache() {
return this.to('DeleteRunCache');
}
/**
* Grants permission to delete a workflow run group
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteRunGroup.html
*/
toDeleteRunGroup() {
return this.to('DeleteRunGroup');
}
/**
* Grants permission to delete an access policy on a given store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteS3AccessPolicy.html
*/
toDeleteS3AccessPolicy() {
return this.to('DeleteS3AccessPolicy');
}
/**
* Grants permission to delete a Sequence Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteSequenceStore.html
*/
toDeleteSequenceStore() {
return this.to('DeleteSequenceStore');
}
/**
* Grants permission to delete a share
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteShare.html
*/
toDeleteShare() {
return this.to('DeleteShare');
}
/**
* Grants permission to delete a Variant Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteVariantStore.html
*/
toDeleteVariantStore() {
return this.to('DeleteVariantStore');
}
/**
* Grants permission to delete a workflow
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteWorkflow.html
*/
toDeleteWorkflow() {
return this.to('DeleteWorkflow');
}
/**
* Grants permission to delete a workflow version
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_DeleteWorkflowVersion.html
*/
toDeleteWorkflowVersion() {
return this.to('DeleteWorkflowVersion');
}
/**
* Grants permission to get the status of an Annotation Import Job
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetAnnotationImportJob.html
*/
toGetAnnotationImportJob() {
return this.to('GetAnnotationImportJob');
}
/**
* Grants permission to get detailed information about an Annotation Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetAnnotationStore.html
*/
toGetAnnotationStore() {
return this.to('GetAnnotationStore');
}
/**
* Grants permission to get detailed information about a version in an Annotation Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetAnnotationStoreVersion.html
*/
toGetAnnotationStoreVersion() {
return this.to('GetAnnotationStoreVersion');
}
/**
* Grants permission to retrieve batch details and status
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetBatch.html
*/
toGetBatch() {
return this.to('GetBatch');
}
/**
* Grants permission to retrieve configuration details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetConfiguration.html
*/
toGetConfiguration() {
return this.to('GetConfiguration');
}
/**
* Grants permission to get a Read Set in the given Sequence Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReadSet.html
*/
toGetReadSet() {
return this.to('GetReadSet');
}
/**
* Grants permission to get details about a Read Set activation job for the given Sequence Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReadSetActivationJob.html
*/
toGetReadSetActivationJob() {
return this.to('GetReadSetActivationJob');
}
/**
* Grants permission to get details about a Read Set export job for the given Sequence Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReadSetExportJob.html
*/
toGetReadSetExportJob() {
return this.to('GetReadSetExportJob');
}
/**
* Grants permission to get details about a Read Set import job for the given Sequence Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReadSetImportJob.html
*/
toGetReadSetImportJob() {
return this.to('GetReadSetImportJob');
}
/**
* Grants permission to get details about a Read Set in the given Sequence Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReadSetMetadata.html
*/
toGetReadSetMetadata() {
return this.to('GetReadSetMetadata');
}
/**
* Grants permission to get a Reference in the given Reference Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReference.html
*/
toGetReference() {
return this.to('GetReference');
}
/**
* Grants permission to get details about a Reference import job for the given Reference Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReferenceImportJob.html
*/
toGetReferenceImportJob() {
return this.to('GetReferenceImportJob');
}
/**
* Grants permission to get details about a Reference in the given Reference Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReferenceMetadata.html
*/
toGetReferenceMetadata() {
return this.to('GetReferenceMetadata');
}
/**
* Grants permission to get details about a Reference Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetReferenceStore.html
*/
toGetReferenceStore() {
return this.to('GetReferenceStore');
}
/**
* Grants permission to retrieve workflow run details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetRun.html
*/
toGetRun() {
return this.to('GetRun');
}
/**
* Grants permission to retrieve workflow run cache details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetRunCache.html
*/
toGetRunCache() {
return this.to('GetRunCache');
}
/**
* Grants permission to retrieve workflow run group details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetRunGroup.html
*/
toGetRunGroup() {
return this.to('GetRunGroup');
}
/**
* Grants permission to retrieve workflow task details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetRunTask.html
*/
toGetRunTask() {
return this.to('GetRunTask');
}
/**
* Grants permission to get details about an access policy on a given store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetS3AccessPolicy.html
*/
toGetS3AccessPolicy() {
return this.to('GetS3AccessPolicy');
}
/**
* Grants permission to get details about a Sequence Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetSequenceStore.html
*/
toGetSequenceStore() {
return this.to('GetSequenceStore');
}
/**
* Grants permission to get detailed information about a Share
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetShare.html
*/
toGetShare() {
return this.to('GetShare');
}
/**
* Grants permission to get the status of a Variant Import Job
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetVariantImportJob.html
*/
toGetVariantImportJob() {
return this.to('GetVariantImportJob');
}
/**
* Grants permission to get detailed information about a Variant Store
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetVariantStore.html
*/
toGetVariantStore() {
return this.to('GetVariantStore');
}
/**
* Grants permission to retrieve workflow details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetWorkflow.html
*/
toGetWorkflow() {
return this.to('GetWorkflow');
}
/**
* Grants permission to retrieve workflow version details
*
* Access Level: Read
*
* https://docs.aws.amazon.com/omics/latest/api/API_GetWorkflowVersion.html
*/
toGetWorkflowVersion() {
return this.to('GetWorkflowVersion');
}
/**
* Grants permission to get a list of Annotation Import Jobs
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListAnnotationImportJobs.html
*/
toListAnnotationImportJobs() {
return this.to('ListAnnotationImportJobs');
}
/**
* Grants permission to retrieve a list of information about Versions in an Annotation Store
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListAnnotationStoreVersions.html
*/
toListAnnotationStoreVersions() {
return this.to('ListAnnotationStoreVersions');
}
/**
* Grants permission to retrieve a list of information about Annotation Stores
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListAnnotationStores.html
*/
toListAnnotationStores() {
return this.to('ListAnnotationStores');
}
/**
* Grants permission to retrieve list of batches
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListBatch.html
*/
toListBatch() {
return this.to('ListBatch');
}
/**
* Grants permission to retrieve a list of configurations
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListConfigurations.html
*/
toListConfigurations() {
return this.to('ListConfigurations');
}
/**
* Grants permission to list multipart read set uploads
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListMultipartReadSetUploads.html
*/
toListMultipartReadSetUploads() {
return this.to('ListMultipartReadSetUploads');
}
/**
* Grants permission to list Read Set activation jobs for the given Sequence Store
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReadSetActivationJobs.html
*/
toListReadSetActivationJobs() {
return this.to('ListReadSetActivationJobs');
}
/**
* Grants permission to list Read Set export jobs for the given Sequence Store
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReadSetExportJobs.html
*/
toListReadSetExportJobs() {
return this.to('ListReadSetExportJobs');
}
/**
* Grants permission to list Read Set import jobs for the given Sequence Store
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReadSetImportJobs.html
*/
toListReadSetImportJobs() {
return this.to('ListReadSetImportJobs');
}
/**
* Grants permission to list read set upload parts
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReadSetUploadParts.html
*/
toListReadSetUploadParts() {
return this.to('ListReadSetUploadParts');
}
/**
* Grants permission to list Read Sets in the given Sequence Store
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReadSets.html
*/
toListReadSets() {
return this.to('ListReadSets');
}
/**
* Grants permission to list Reference import jobs for the given Reference Store
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReferenceImportJobs.html
*/
toListReferenceImportJobs() {
return this.to('ListReferenceImportJobs');
}
/**
* Grants permission to list Reference Stores
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReferenceStores.html
*/
toListReferenceStores() {
return this.to('ListReferenceStores');
}
/**
* Grants permission to list References in the given Reference Store
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListReferences.html
*/
toListReferences() {
return this.to('ListReferences');
}
/**
* Grants permission to retrieve a list of workflow run caches
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListRunCaches.html
*/
toListRunCaches() {
return this.to('ListRunCaches');
}
/**
* Grants permission to retrieve a list of workflow run groups
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListRunGroups.html
*/
toListRunGroups() {
return this.to('ListRunGroups');
}
/**
* Grants permission to retrieve a list of tasks for a workflow run
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListRunTasks.html
*/
toListRunTasks() {
return this.to('ListRunTasks');
}
/**
* Grants permission to retrieve a list of workflow runs
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListRuns.html
*/
toListRuns() {
return this.to('ListRuns');
}
/**
* Grants permission to retrieve list of workflow runs in batch
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListRunsInBatch.html
*/
toListRunsInBatch() {
return this.to('ListRunsInBatch');
}
/**
* Grants permission to list Sequence Stores
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListSequenceStores.html
*/
toListSequenceStores() {
return this.to('ListSequenceStores');
}
/**
* Grants permission to retrieve a list of information about shares
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListShares.html
*/
toListShares() {
return this.to('ListShares');
}
/**
* Grants permission to retrieve a list of resource AWS tags
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListTagsForResource.html
*/
toListTagsForResource() {
return this.to('ListTagsForResource');
}
/**
* Grants permission to get a list of Variant Import Jobs
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListVariantImportJobs.html
*/
toListVariantImportJobs() {
return this.to('ListVariantImportJobs');
}
/**
* Grants permission to retrieve a list of metadata for Variant Stores
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListVariantStores.html
*/
toListVariantStores() {
return this.to('ListVariantStores');
}
/**
* Grants permission to retrieve a list of available versions for a workflow
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListWorkflowVersions.html
*/
toListWorkflowVersions() {
return this.to('ListWorkflowVersions');
}
/**
* Grants permission to retrieve a list of available workflows
*
* Access Level: List
*
* https://docs.aws.amazon.com/omics/latest/api/API_ListWorkflows.html
*/
toListWorkflows() {
return this.to('ListWorkflows');
}
/**
* Grants permission to put an access policy on a given store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_PutS3AccessPolicy.html
*/
toPutS3AccessPolicy() {
return this.to('PutS3AccessPolicy');
}
/**
* Grants permission to import a list of Annotation files to an Annotation Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartAnnotationImportJob.html
*/
toStartAnnotationImportJob() {
return this.to('StartAnnotationImportJob');
}
/**
* Grants permission to start a Read Set activation job from the given Sequence Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartReadSetActivationJob.html
*/
toStartReadSetActivationJob() {
return this.to('StartReadSetActivationJob');
}
/**
* Grants permission to start a Read Set export job from the given Sequence Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartReadSetExportJob.html
*/
toStartReadSetExportJob() {
return this.to('StartReadSetExportJob');
}
/**
* Grants permission to start a Read Set import job into the given Sequence Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartReadSetImportJob.html
*/
toStartReadSetImportJob() {
return this.to('StartReadSetImportJob');
}
/**
* Grants permission to start a Reference import job into the given Reference Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartReferenceImportJob.html
*/
toStartReferenceImportJob() {
return this.to('StartReferenceImportJob');
}
/**
* Grants permission to start a workflow run
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartRun.html
*/
toStartRun() {
return this.to('StartRun');
}
/**
* Grants permission to start batch of workflow runs
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartRunBatch.html
*/
toStartRunBatch() {
return this.to('StartRunBatch');
}
/**
* Grants permission to import a list of variant files to an Variant Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_StartVariantImportJob.html
*/
toStartVariantImportJob() {
return this.to('StartVariantImportJob');
}
/**
* Grants permission to add AWS tags to a resource
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_TagResource.html
*/
toTagResource() {
return this.to('TagResource');
}
/**
* Grants permission to remove resource AWS tags
*
* Access Level: Tagging, Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UntagResource.html
*/
toUntagResource() {
return this.to('UntagResource');
}
/**
* Grants permission to update information about the Annotation Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateAnnotationStore.html
*/
toUpdateAnnotationStore() {
return this.to('UpdateAnnotationStore');
}
/**
* Grants permission to update information about the Version in an Annotation Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateAnnotationStoreVersion.html
*/
toUpdateAnnotationStoreVersion() {
return this.to('UpdateAnnotationStoreVersion');
}
/**
* Grants permission to update a workflow run cache
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateRunCache.html
*/
toUpdateRunCache() {
return this.to('UpdateRunCache');
}
/**
* Grants permission to update a workflow run group
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateRunGroup.html
*/
toUpdateRunGroup() {
return this.to('UpdateRunGroup');
}
/**
* Grants permission to update details about a Sequence Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateSequenceStore.html
*/
toUpdateSequenceStore() {
return this.to('UpdateSequenceStore');
}
/**
* Grants permission to update metadata about the Variant Store
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateVariantStore.html
*/
toUpdateVariantStore() {
return this.to('UpdateVariantStore');
}
/**
* Grants permission to update workflow details
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateWorkflow.html
*/
toUpdateWorkflow() {
return this.to('UpdateWorkflow');
}
/**
* Grants permission to update workflow version details
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UpdateWorkflowVersion.html
*/
toUpdateWorkflowVersion() {
return this.to('UpdateWorkflowVersion');
}
/**
* Grants permission to upload read set parts
*
* Access Level: Write
*
* https://docs.aws.amazon.com/omics/latest/api/API_UploadReadSetPart.html
*/
toUploadReadSetPart() {
return this.to('UploadReadSetPart');
}
/**
* Adds a resource of type AnnotationStore to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_AnnotationStoreItem.html
*
* @param annotationStoreName - Identifier for the annotationStoreName.
* @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()
*/
onAnnotationStore(annotationStoreName, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:annotationStore/${annotationStoreName}`);
}
/**
* Adds a resource of type AnnotationStoreVersion to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_AnnotationStoreVersionItem.html
*
* @param annotationStoreName - Identifier for the annotationStoreName.
* @param annotationStoreVersionName - Identifier for the annotationStoreVersionName.
* @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()
*/
onAnnotationStoreVersion(annotationStoreName, annotationStoreVersionName, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:annotationStore/${annotationStoreName}/version/${annotationStoreVersionName}`);
}
/**
* Adds a resource of type TaskResource to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_TaskListItem.html
*
* @param id - Identifier for the id.
* @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.
*/
onTaskResource(id, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:task/${id}`);
}
/**
* Adds a resource of type VariantStore to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_VariantStoreItem.html
*
* @param variantStoreName - Identifier for the variantStoreName.
* @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()
*/
onVariantStore(variantStoreName, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:variantStore/${variantStoreName}`);
}
/**
* Adds a resource of type WorkflowVersion to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_WorkflowVersionListItem.html
*
* @param id - Identifier for the id.
* @param versionName - Identifier for the versionName.
* @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()
*/
onWorkflowVersion(id, versionName, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:workflow/${id}/version/${versionName}`);
}
/**
* Adds a resource of type configuration to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_ConfigurationListItem.html
*
* @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()
*/
onConfiguration(name, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:configuration/${name}`);
}
/**
* Adds a resource of type readSet to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_ReadSetFiles.html
*
* @param sequenceStoreId - Identifier for the sequenceStoreId.
* @param readSetId - Identifier for the readSetId.
* @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()
*/
onReadSet(sequenceStoreId, readSetId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:sequenceStore/${sequenceStoreId}/readSet/${readSetId}`);
}
/**
* Adds a resource of type reference to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_ReferenceFiles.html
*
* @param referenceStoreId - Identifier for the referenceStoreId.
* @param referenceId - Identifier for the referenceId.
* @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()
*/
onReference(referenceStoreId, referenceId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:referenceStore/${referenceStoreId}/reference/${referenceId}`);
}
/**
* Adds a resource of type referenceStore to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_ReferenceStoreDetail.html
*
* @param referenceStoreId - Identifier for the referenceStoreId.
* @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()
*/
onReferenceStore(referenceStoreId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:referenceStore/${referenceStoreId}`);
}
/**
* Adds a resource of type run to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_RunListItem.html
*
* @param id - Identifier for the id.
* @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()
*/
onRun(id, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:run/${id}`);
}
/**
* Adds a resource of type runBatch to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_BatchListItem.html
*
* @param batchId - Identifier for the batchId.
* @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()
*/
onRunBatch(batchId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:runBatch/${batchId}`);
}
/**
* Adds a resource of type runCache to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_RunCacheListItem.html
*
* @param id - Identifier for the id.
* @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()
*/
onRunCache(id, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:runCache/${id}`);
}
/**
* Adds a resource of type runGroup to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_RunGroupListItem.html
*
* @param id - Identifier for the id.
* @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()
*/
onRunGroup(id, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:runGroup/${id}`);
}
/**
* Adds a resource of type sequenceStore to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_SequenceStoreDetail.html
*
* @param sequenceStoreId - Identifier for the sequenceStoreId.
* @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()
*/
onSequenceStore(sequenceStoreId, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:sequenceStore/${sequenceStoreId}`);
}
/**
* Adds a resource of type workflow to the statement
*
* https://docs.aws.amazon.com/omics/latest/api/API_WorkflowListItem.html
*
* @param id - Identifier for the id.
* @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()
*/
onWorkflow(id, account, region, partition) {
return this.on(`arn:${partition ?? this.defaultPartition}:omics:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:workflow/${id}`);
}
/**
* Filters access by the presence of tag key-value pairs in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requesttag
*
* Applies to actions:
* - .toCreateAnnotationStore()
* - .toCreateAnnotationStoreVersion()
* - .toCreateConfiguration()
* - .toCreateReferenceStore()
* - .toCreateRunCache()
* - .toCreateRunGroup()
* - .toCreateSequenceStore()
* - .toCreateVariantStore()
* - .toCreateWorkflow()
* - .toCreateWorkflowVersion()
* - .toStartRun()
* - .toStartRunBatch()
* - .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 presence of tag key-value pairs attached to the resource
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourcetag
*
* Applies to actions:
* - .toAbortMultipartReadSetUpload()
* - .toBatchDeleteReadSet()
* - .toCancelRun()
* - .toCancelRunBatch()
* - .toCompleteMultipartReadSetUpload()
* - .toCreateAnnotationStoreVersion()
* - .toCreateMultipartReadSetUpload()
* - .toCreateWorkflowVersion()
* - .toDeleteAnnotationStore()
* - .toDeleteAnnotationStoreVersions()
* - .toDeleteBatch()
* - .toDeleteConfiguration()
* - .toDeleteReference()
* - .toDeleteReferenceStore()
* - .toDeleteRun()
* - .toDeleteRunBatch()
* - .toDeleteRunCache()
* - .toDeleteRunGroup()
* - .toDeleteS3AccessPolicy()
* - .toDeleteSequenceStore()
* - .toDeleteVariantStore()
* - .toDeleteWorkflow()
* - .toDeleteWorkflowVersion()
* - .toGetAnnotationStore()
* - .toGetAnnotationStoreVersion()
* - .toGetBatch()
* - .toGetConfiguration()
* - .toGetReadSet()
* - .toGetReadSetActivationJob()
* - .toGetReadSetExportJob()
* - .toGetReadSetImportJob()
* - .toGetReadSetMetadata()
* - .toGetReference()
* - .toGetReferenceImportJob()
* - .toGetReferenceMetadata()
* - .toGetReferenceStore()
* - .toGetRun()
* - .toGetRunCache()
* - .toGetRunGroup()
* - .toGetRunTask()
* - .toGetS3AccessPolicy()
* - .toGetSequenceStore()
* - .toGetVariantStore()
* - .toGetWorkflow()
* - .toGetWorkflowVersion()
* - .toListAnnotationStoreVersions()
* - .toListMultipartReadSetUploads()
* - .toListReadSetActivationJobs()
* - .toListReadSetExportJobs()
* - .toListReadSetImportJobs()
* - .toListReadSetUploadParts()
* - .toListReadSets()
* - .toListReferenceImportJobs()
* - .toListReferences()
* - .toListRunTasks()
* - .toListRunsInBatch()
* - .toListWorkflowVersions()
* - .toPutS3AccessPolicy()
* - .toStartAnnotationImportJob()
* - .toStartReadSetActivationJob()
* - .toStartReadSetExportJob()
* - .toStartReadSetImportJob()
* - .toStartReferenceImportJob()
* - .toStartRun()
* - .toStartRunBatch()
* - .toStartVariantImportJob()
* - .toTagResource()
* - .toUntagResource()
* - .toUpdateAnnotationStore()
* - .toUpdateAnnotationStoreVersion()
* - .toUpdateRunCache()
* - .toUpdateRunGroup()
* - .toUpdateSequenceStore()
* - .toUpdateVariantStore()
* - .toUpdateWorkflow()
* - .toUpdateWorkflowVersion()
* - .toUploadReadSetPart()
*
* Applies to resource types:
* - AnnotationStore
* - AnnotationStoreVersion
* - VariantStore
* - WorkflowVersion
* - configuration
* - readSet
* - reference
* - referenceStore
* - run
* - runBatch
* - runCache
* - runGroup
* - sequenceStore
* - workflow
*
* @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 presence of tag keys in the request
*
* https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys
*
* Applies to actions:
* - .toCreateAnnotationStore()
* - .toCreateAnnotationStoreVersion()
* - .toCreateConfiguration()
* - .toCreateReferenceStore()
* - .toCreateRunCache()
* - .toCreateRunGroup()
* - .toCreateSequenceStore()
* - .toCreateVariantStore()
* - .toCreateWorkflow()
* - .toCreateWorkflowVersion()
* - .toStartRun()
* - .toStartRunBatch()
* - .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 [omics](https://docs.aws.amazon.com/service-authorization/latest/reference/list_omics.html).
*
*/
constructor(props) {
super(props);
this.servicePrefix = 'omics';
this.accessLevelList = {
Write: [
'AbortMultipartReadSetUpload',
'AcceptShare',
'BatchDeleteReadSet',
'CancelAnnotationImportJob',
'CancelRun',
'CancelRunBatch',
'CancelVariantImportJob',
'CompleteMultipartReadSetUpload',
'CreateAnnotationStore',
'CreateAnnotationStoreVersion',
'CreateConfiguration',
'CreateMultipartReadSetUpload',
'CreateReferenceStore',
'CreateRunCache',
'CreateRunGroup',
'CreateSequenceStore',
'CreateShare',
'CreateVariantStore',
'CreateWorkflow',
'CreateWorkflowVersion',
'DeleteAnnotationStore',
'DeleteAnnotationStoreVersions',
'DeleteBatch',
'DeleteConfiguration',
'DeleteReference',
'DeleteReferenceStore',
'DeleteRun',
'DeleteRunBatch',
'DeleteRunCache',
'DeleteRunGroup',
'DeleteS3AccessPolicy',
'DeleteSequenceStore',
'DeleteShare',
'DeleteVariantStore',
'DeleteWorkflow',
'DeleteWorkflowVersion',
'PutS3AccessPolicy',
'StartAnnotationImportJob',
'StartReadSetActivationJob',
'StartReadSetExportJob',
'StartReadSetImportJob',
'StartReferenceImportJob',
'StartRun',
'StartRunBatch',
'StartVariantImportJob',
'TagResource',
'UntagResource',
'UpdateAnnotationStore',
'UpdateAnnotationStoreVersion',
'UpdateRunCache',
'UpdateRunGroup',
'UpdateSequenceStore',
'UpdateVariantStore',
'UpdateWorkflow',
'UpdateWorkflowVersion',
'UploadReadSetPart'
],
Read: [
'GetAnnotationImportJob',
'GetAnnotationStore',
'GetAnnotationStoreVersion',
'GetBatch',
'GetConfiguration',
'GetReadSet',
'GetReadSetActivationJob',
'GetReadSetExportJob',
'GetReadSetImportJob',
'GetReadSetMetadata',
'GetReference',
'GetReferenceImportJob',
'GetReferenceMetadata',
'GetReferenceStore',
'GetRun',
'GetRunCache',
'GetRunGroup',
'GetRunTask',
'GetS3AccessPolicy',
'GetSequenceStore',
'GetShare',
'GetVariantImportJob',
'GetVariantStore',
'GetWorkflow',
'GetWorkflowVersion'
],
List: [
'ListAnnotationImportJobs',
'ListAnnotationStoreVersions',
'ListAnnotationStores',
'ListBatch',
'ListConfigurations',
'ListMultipartReadSetUploads',
'ListReadSetActivationJobs',
'ListReadSetExportJobs',
'ListReadSetImportJobs',
'ListReadSetUploadParts',
'ListReadSets',
'ListReferenceImportJobs',
'ListReferenceStores',
'ListReferences',
'ListRunCaches',
'ListRunGroups',
'ListRunTasks',
'ListRuns',
'ListRunsInBatch',
'ListSequenceStores',
'ListShares',
'ListTagsForResource',
'ListVariantImportJobs',
'ListVariantStores',
'ListWorkflowVersions',
'ListWorkflows'
],
Tagging: [
'TagResource',
'UntagResource'
]
};
}
}
exports.Omics = Omics;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib21pY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvbWljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBeUQ7QUFHekQ7Ozs7R0FJRztBQUNILE1BQWEsS0FBTSxTQUFRLHdCQUFlO0lBR3hDOzs7Ozs7T0FNRztJQUNJLDZCQUE2QjtRQUNsQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsNkJBQTZCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksYUFBYTtRQUNsQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG9CQUFvQjtRQUN6QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksMkJBQTJCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSx3QkFBd0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGdDQUFnQztRQUNyQyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLHVCQUF1QjtRQUM1QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsdUJBQXVCLENB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MkJBQTJCO2dCQUMzQixVQUFVO2dCQUNWLGtCQUFrQjtnQkFDbEIsWUFBWTtnQkFDWix5QkFBeUI7Z0JBQ3pCLHFCQUFxQjtnQkFDckIscUJBQXFCO2dCQUNyQixvQkFBb0I7Z0JBQ3BCLGNBQWM7Z0JBQ2QsdUJBQXVCO2dCQUN2QixzQkFBc0I7Z0JBQ3RCLG1CQUFtQjtnQkFDbkIsUUFBUTtnQkFDUixhQUFhO2dCQUNiLGFBQWE7Z0JBQ2IsWUFBWTtnQkFDWixtQkFBbUI7Z0JBQ25CLGtCQUFrQjtnQkFDbEIsVUFBVTtnQkFDVixxQkFBcUI7Z0JBQ3JCLGlCQUFpQjtnQkFDakIsYUFBYTtnQkFDYixvQkFBb0I7YUFDckI7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osMEJBQTBCO2dCQUMxQiw2QkFBNkI7Z0JBQzdCLHNCQUFzQjtnQkFDdEIsV0FBVztnQkFDWCxvQkFBb0I7Z0JBQ3BCLDZCQUE2QjtnQkFDN0IsMkJBQTJCO2dCQUMzQix1QkFBdUI7Z0JBQ3ZCLHVCQUF1QjtnQkFDdkIsd0JBQXdCO2dCQUN4QixjQUFjO2dCQUNkLHlCQUF5QjtnQkFDekIscUJBQXFCO2dCQUNyQixnQkFBZ0I7Z0JBQ2hCLGVBQWU7Z0JBQ2YsZUFBZTtnQkFDZixjQUFjO2dCQUNkLFVBQVU7Z0JBQ1YsaUJBQWlCO2dCQUNqQixvQkFBb0I7Z0JBQ3BCLFlBQVk7Z0JBQ1oscUJBQXFCO2dCQUNyQix1QkFBdUI7Z0JBQ3ZCLG1CQUFtQjtnQkFDbkIsc0JBQXNCO2dCQUN0QixlQUFlO2FBQ2hCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLGFBQWE7Z0JBQ2IsZUFBZTthQUNoQjtTQUNGLENBQUM7SUE0YUYsQ0FBQztDQUNGO0FBL3RERCxzQkErdERDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWNjZXNzTGV2ZWxMaXN0IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2FjY2Vzcy1sZXZlbCc7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQsIE9wZXJhdG9yIH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IGF3c19pYW0gYXMgaWFtIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbi8qKlxuICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtvbWljc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3Rfb21pY3MuaHRtbCkuXG4gKlxuICogQHBhcmFtIHNpZCBbU0lEXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX3NpZC5odG1sKSBvZiB0aGUgc3RhdGVtZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBPbWljcyBleHRlbmRzIFBvbGljeVN0YXRlbWVudCB7XG4gIHB1YmxpYyBzZXJ2aWNlUHJlZml4ID0gJ29taWNzJztcblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWJvcnQgbXVsdGlwYXJ0IHJlYWQgc2V0IHVwbG9hZHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQWJvcnRNdWx0aXBhcnRSZWFkU2V0VXBsb2FkLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0Fib3J0TXVsdGlwYXJ0UmVhZFNldFVwbG9hZCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQWJvcnRNdWx0aXBhcnRSZWFkU2V0VXBsb2FkJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYWNjZXB0IGEgc2hhcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQWNjZXB0U2hhcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQWNjZXB0U2hhcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0FjY2VwdFNoYXJlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYmF0Y2ggZGVsZXRlIFJlYWQgU2V0cyBpbiB0aGUgZ2l2ZW4gU2VxdWVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQmF0Y2hEZWxldGVSZWFkU2V0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0JhdGNoRGVsZXRlUmVhZFNldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQmF0Y2hEZWxldGVSZWFkU2V0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGFuIEFubm90YXRpb24gSW1wb3J0IEpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9DYW5jZWxBbm5vdGF0aW9uSW1wb3J0Sm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NhbmNlbEFubm90YXRpb25JbXBvcnRKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbEFubm90YXRpb25JbXBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjYW5jZWwgYSB3b3JrZmxvdyBydW4gYW5kIHN0b3AgYWxsIHdvcmtmbG93IHRhc2tzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0NhbmNlbFJ1bi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DYW5jZWxSdW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbFJ1bicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNhbmNlbCBhIGJhdGNoIG9mIHdvcmtmbG93IHJ1bnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQ2FuY2VsUnVuQmF0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ2FuY2VsUnVuQmF0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbFJ1bkJhdGNoJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY2FuY2VsIGEgVmFyaWFudCBJbXBvcnQgSm9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0NhbmNlbFZhcmlhbnRJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ2FuY2VsVmFyaWFudEltcG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ2FuY2VsVmFyaWFudEltcG9ydEpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNvbXBsZXRlIGEgbXVsdGlwYXJ0IHJlYWQgc2V0IHVwbG9hZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9Db21wbGV0ZU11bHRpcGFydFJlYWRTZXRVcGxvYWQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ29tcGxldGVNdWx0aXBhcnRSZWFkU2V0VXBsb2FkKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDb21wbGV0ZU11bHRpcGFydFJlYWRTZXRVcGxvYWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW4gQW5ub3RhdGlvbiBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVBbm5vdGF0aW9uU3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlQW5ub3RhdGlvblN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVBbm5vdGF0aW9uU3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBWZXJzaW9uIGluIGFuIEFubm90YXRpb24gU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlQW5ub3RhdGlvblN0b3JlVmVyc2lvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVBbm5vdGF0aW9uU3RvcmVWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVBbm5vdGF0aW9uU3RvcmVWZXJzaW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlQ29uZmlndXJhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVDb25maWd1cmF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbXVsdGlwYXJ0IHJlYWQgc2V0IHVwbG9hZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVNdWx0aXBhcnRSZWFkU2V0VXBsb2FkLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZU11bHRpcGFydFJlYWRTZXRVcGxvYWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZU11bHRpcGFydFJlYWRTZXRVcGxvYWQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBSZWZlcmVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlUmVmZXJlbmNlU3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlUmVmZXJlbmNlU3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVJlZmVyZW5jZVN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IHdvcmtmbG93IHJ1biBjYWNoZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9DcmVhdGVSdW5DYWNoZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVSdW5DYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlUnVuQ2FjaGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYSBuZXcgd29ya2Zsb3cgcnVuIGdyb3VwXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVJ1bkdyb3VwLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVJ1bkdyb3VwKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVSdW5Hcm91cCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIFNlcXVlbmNlIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNlcXVlbmNlU3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlU2VxdWVuY2VTdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlU2VxdWVuY2VTdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIHNoYXJlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVNoYXJlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVNoYXJlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVTaGFyZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIFZhcmlhbnQgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1JlcXVlc3RUYWcoKVxuICAgKiAtIC5pZkF3c1RhZ0tleXMoKVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQ3JlYXRlVmFyaWFudFN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVZhcmlhbnRTdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlVmFyaWFudFN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IHdvcmtmbG93IHdpdGggYSB3b3JrZmxvdyBkZWZpbml0aW9uIGFuZCB0ZW1wbGF0ZSBvZiB3b3JrZmxvdyBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVdvcmtmbG93Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVdvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVXb3JrZmxvdycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyB3b3JrZmxvdyB2ZXJzaW9uIHdpdGggYSB3b3JrZmxvdyBkZWZpbml0aW9uIGFuZCB0ZW1wbGF0ZSBvZiB3b3JrZmxvdyBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0NyZWF0ZVdvcmtmbG93VmVyc2lvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVXb3JrZmxvd1ZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVdvcmtmbG93VmVyc2lvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhbiBBbm5vdGF0aW9uIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZUFubm90YXRpb25TdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVBbm5vdGF0aW9uU3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZUFubm90YXRpb25TdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBWZXJzaW9ucyBpbiBhbiBBbm5vdGF0aW9uIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZUFubm90YXRpb25TdG9yZVZlcnNpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUFubm90YXRpb25TdG9yZVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVBbm5vdGF0aW9uU3RvcmVWZXJzaW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGJhdGNoXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZUJhdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUJhdGNoKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVCYXRjaCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfRGVsZXRlQ29uZmlndXJhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDb25maWd1cmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVDb25maWd1cmF0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgUmVmZXJlbmNlIGluIHRoZSBnaXZlbiBSZWZlcmVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfRGVsZXRlUmVmZXJlbmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlUmVmZXJlbmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGEgUmVmZXJlbmNlIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZVJlZmVyZW5jZVN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVJlZmVyZW5jZVN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVSZWZlcmVuY2VTdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHdvcmtmbG93IHJ1blxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9EZWxldGVSdW4uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUnVuKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVSdW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBiYXRjaCBvZiB3b3JrZmxvdyBydW5zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZVJ1bkJhdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVJ1bkJhdGNoKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVSdW5CYXRjaCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHdvcmtmbG93IHJ1biBjYWNoZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9EZWxldGVSdW5DYWNoZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVSdW5DYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlUnVuQ2FjaGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSB3b3JrZmxvdyBydW4gZ3JvdXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfRGVsZXRlUnVuR3JvdXAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlUnVuR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVJ1bkdyb3VwJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZGVsZXRlIGFuIGFjY2VzcyBwb2xpY3kgb24gYSBnaXZlbiBzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9EZWxldGVTM0FjY2Vzc1BvbGljeS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTM0FjY2Vzc1BvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlUzNBY2Nlc3NQb2xpY3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBTZXF1ZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9EZWxldGVTZXF1ZW5jZVN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVNlcXVlbmNlU3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVNlcXVlbmNlU3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBzaGFyZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9EZWxldGVTaGFyZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVTaGFyZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlU2hhcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBWYXJpYW50IFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZVZhcmlhbnRTdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVWYXJpYW50U3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVZhcmlhbnRTdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHdvcmtmbG93XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0RlbGV0ZVdvcmtmbG93Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVdvcmtmbG93KCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEZWxldGVXb3JrZmxvdycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRlbGV0ZSBhIHdvcmtmbG93IHZlcnNpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfRGVsZXRlV29ya2Zsb3dWZXJzaW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVdvcmtmbG93VmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlV29ya2Zsb3dWZXJzaW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IHRoZSBzdGF0dXMgb2YgYW4gQW5ub3RhdGlvbiBJbXBvcnQgSm9iXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfR2V0QW5ub3RhdGlvbkltcG9ydEpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRBbm5vdGF0aW9uSW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBbm5vdGF0aW9uSW1wb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGFuIEFubm90YXRpb24gU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRBbm5vdGF0aW9uU3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0QW5ub3RhdGlvblN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRBbm5vdGF0aW9uU3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgYSB2ZXJzaW9uIGluIGFuIEFubm90YXRpb24gU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRBbm5vdGF0aW9uU3RvcmVWZXJzaW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldEFubm90YXRpb25TdG9yZVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldEFubm90YXRpb25TdG9yZVZlcnNpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBiYXRjaCBkZXRhaWxzIGFuZCBzdGF0dXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRCYXRjaC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRCYXRjaCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0QmF0Y2gnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBjb25maWd1cmF0aW9uIGRldGFpbHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRDb25maWd1cmF0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldENvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldENvbmZpZ3VyYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBSZWFkIFNldCBpbiB0aGUgZ2l2ZW4gU2VxdWVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRSZWFkU2V0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFJlYWRTZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJlYWRTZXQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgZGV0YWlscyBhYm91dCBhIFJlYWQgU2V0IGFjdGl2YXRpb24gam9iIGZvciB0aGUgZ2l2ZW4gU2VxdWVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRSZWFkU2V0QWN0aXZhdGlvbkpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRSZWFkU2V0QWN0aXZhdGlvbkpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UmVhZFNldEFjdGl2YXRpb25Kb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgZGV0YWlscyBhYm91dCBhIFJlYWQgU2V0IGV4cG9ydCBqb2IgZm9yIHRoZSBnaXZlbiBTZXF1ZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0dldFJlYWRTZXRFeHBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UmVhZFNldEV4cG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UmVhZFNldEV4cG9ydEpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBkZXRhaWxzIGFib3V0IGEgUmVhZCBTZXQgaW1wb3J0IGpvYiBmb3IgdGhlIGdpdmVuIFNlcXVlbmNlIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfR2V0UmVhZFNldEltcG9ydEpvYi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRSZWFkU2V0SW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRSZWFkU2V0SW1wb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGRldGFpbHMgYWJvdXQgYSBSZWFkIFNldCBpbiB0aGUgZ2l2ZW4gU2VxdWVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRSZWFkU2V0TWV0YWRhdGEuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UmVhZFNldE1ldGFkYXRhKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRSZWFkU2V0TWV0YWRhdGEnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBSZWZlcmVuY2UgaW4gdGhlIGdpdmVuIFJlZmVyZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0dldFJlZmVyZW5jZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRSZWZlcmVuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJlZmVyZW5jZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBkZXRhaWxzIGFib3V0IGEgUmVmZXJlbmNlIGltcG9ydCBqb2IgZm9yIHRoZSBnaXZlbiBSZWZlcmVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRSZWZlcmVuY2VJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UmVmZXJlbmNlSW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRSZWZlcmVuY2VJbXBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgZGV0YWlscyBhYm91dCBhIFJlZmVyZW5jZSBpbiB0aGUgZ2l2ZW4gUmVmZXJlbmNlIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfR2V0UmVmZXJlbmNlTWV0YWRhdGEuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UmVmZXJlbmNlTWV0YWRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJlZmVyZW5jZU1ldGFkYXRhJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGRldGFpbHMgYWJvdXQgYSBSZWZlcmVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRSZWZlcmVuY2VTdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRSZWZlcmVuY2VTdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UmVmZXJlbmNlU3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB3b3JrZmxvdyBydW4gZGV0YWlsc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0dldFJ1bi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRSdW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJ1bicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIHdvcmtmbG93IHJ1biBjYWNoZSBkZXRhaWxzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfR2V0UnVuQ2FjaGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0UnVuQ2FjaGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJ1bkNhY2hlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgd29ya2Zsb3cgcnVuIGdyb3VwIGRldGFpbHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRSdW5Hcm91cC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRSdW5Hcm91cCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UnVuR3JvdXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB3b3JrZmxvdyB0YXNrIGRldGFpbHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRSdW5UYXNrLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFJ1blRhc2soKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFJ1blRhc2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgZGV0YWlscyBhYm91dCBhbiBhY2Nlc3MgcG9saWN5IG9uIGEgZ2l2ZW4gc3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRTM0FjY2Vzc1BvbGljeS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRTM0FjY2Vzc1BvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0UzNBY2Nlc3NQb2xpY3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgZGV0YWlscyBhYm91dCBhIFNlcXVlbmNlIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfR2V0U2VxdWVuY2VTdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRTZXF1ZW5jZVN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRTZXF1ZW5jZVN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IGEgU2hhcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRTaGFyZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9HZXRTaGFyZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0U2hhcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgdGhlIHN0YXR1cyBvZiBhIFZhcmlhbnQgSW1wb3J0IEpvYlxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0dldFZhcmlhbnRJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VmFyaWFudEltcG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0VmFyaWFudEltcG9ydEpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGdldCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIFZhcmlhbnQgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9HZXRWYXJpYW50U3RvcmUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0VmFyaWFudFN0b3JlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRWYXJpYW50U3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB3b3JrZmxvdyBkZXRhaWxzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfR2V0V29ya2Zsb3cuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0V29ya2Zsb3coKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFdvcmtmbG93Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgd29ya2Zsb3cgdmVyc2lvbiBkZXRhaWxzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfR2V0V29ya2Zsb3dWZXJzaW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0dldFdvcmtmbG93VmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnR2V0V29ya2Zsb3dWZXJzaW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZ2V0IGEgbGlzdCBvZiBBbm5vdGF0aW9uIEltcG9ydCBKb2JzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdEFubm90YXRpb25JbXBvcnRKb2JzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RBbm5vdGF0aW9uSW1wb3J0Sm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEFubm90YXRpb25JbXBvcnRKb2JzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBsaXN0IG9mIGluZm9ybWF0aW9uIGFib3V0IFZlcnNpb25zIGluIGFuIEFubm90YXRpb24gU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0QW5ub3RhdGlvblN0b3JlVmVyc2lvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEFubm90YXRpb25TdG9yZVZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0QW5ub3RhdGlvblN0b3JlVmVyc2lvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgaW5mb3JtYXRpb24gYWJvdXQgQW5ub3RhdGlvbiBTdG9yZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0QW5ub3RhdGlvblN0b3Jlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0QW5ub3RhdGlvblN0b3JlcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEFubm90YXRpb25TdG9yZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBsaXN0IG9mIGJhdGNoZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0QmF0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdEJhdGNoKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0QmF0Y2gnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0Q29uZmlndXJhdGlvbnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdENvbmZpZ3VyYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0Q29uZmlndXJhdGlvbnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IG11bHRpcGFydCByZWFkIHNldCB1cGxvYWRzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdE11bHRpcGFydFJlYWRTZXRVcGxvYWRzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RNdWx0aXBhcnRSZWFkU2V0VXBsb2FkcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdE11bHRpcGFydFJlYWRTZXRVcGxvYWRzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBSZWFkIFNldCBhY3RpdmF0aW9uIGpvYnMgZm9yIHRoZSBnaXZlbiBTZXF1ZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0xpc3RSZWFkU2V0QWN0aXZhdGlvbkpvYnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFJlYWRTZXRBY3RpdmF0aW9uSm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlYWRTZXRBY3RpdmF0aW9uSm9icycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgUmVhZCBTZXQgZXhwb3J0IGpvYnMgZm9yIHRoZSBnaXZlbiBTZXF1ZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0xpc3RSZWFkU2V0RXhwb3J0Sm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UmVhZFNldEV4cG9ydEpvYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSZWFkU2V0RXhwb3J0Sm9icycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgUmVhZCBTZXQgaW1wb3J0IGpvYnMgZm9yIHRoZSBnaXZlbiBTZXF1ZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0xpc3RSZWFkU2V0SW1wb3J0Sm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UmVhZFNldEltcG9ydEpvYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSZWFkU2V0SW1wb3J0Sm9icycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgcmVhZCBzZXQgdXBsb2FkIHBhcnRzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdFJlYWRTZXRVcGxvYWRQYXJ0cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UmVhZFNldFVwbG9hZFBhcnRzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UmVhZFNldFVwbG9hZFBhcnRzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBSZWFkIFNldHMgaW4gdGhlIGdpdmVuIFNlcXVlbmNlIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdFJlYWRTZXRzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZWFkU2V0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlYWRTZXRzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gbGlzdCBSZWZlcmVuY2UgaW1wb3J0IGpvYnMgZm9yIHRoZSBnaXZlbiBSZWZlcmVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0UmVmZXJlbmNlSW1wb3J0Sm9icy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UmVmZXJlbmNlSW1wb3J0Sm9icygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJlZmVyZW5jZUltcG9ydEpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IFJlZmVyZW5jZSBTdG9yZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0UmVmZXJlbmNlU3RvcmVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZWZlcmVuY2VTdG9yZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSZWZlcmVuY2VTdG9yZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IFJlZmVyZW5jZXMgaW4gdGhlIGdpdmVuIFJlZmVyZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0xpc3RSZWZlcmVuY2VzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSZWZlcmVuY2VzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UmVmZXJlbmNlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGEgbGlzdCBvZiB3b3JrZmxvdyBydW4gY2FjaGVzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdFJ1bkNhY2hlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UnVuQ2FjaGVzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UnVuQ2FjaGVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBsaXN0IG9mIHdvcmtmbG93IHJ1biBncm91cHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0UnVuR3JvdXBzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSdW5Hcm91cHMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RSdW5Hcm91cHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgdGFza3MgZm9yIGEgd29ya2Zsb3cgcnVuXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdFJ1blRhc2tzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RSdW5UYXNrcygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJ1blRhc2tzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBsaXN0IG9mIHdvcmtmbG93IHJ1bnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0UnVucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0UnVucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFJ1bnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBsaXN0IG9mIHdvcmtmbG93IHJ1bnMgaW4gYmF0Y2hcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0UnVuc0luQmF0Y2guaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFJ1bnNJbkJhdGNoKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0UnVuc0luQmF0Y2gnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IFNlcXVlbmNlIFN0b3Jlc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0xpc3RTZXF1ZW5jZVN0b3Jlcy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0U2VxdWVuY2VTdG9yZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RTZXF1ZW5jZVN0b3JlcycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGEgbGlzdCBvZiBpbmZvcm1hdGlvbiBhYm91dCBzaGFyZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0U2hhcmVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RTaGFyZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RTaGFyZXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgcmVzb3VyY2UgQVdTIHRhZ3NcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0VGFnc0ZvclJlc291cmNlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RUYWdzRm9yUmVzb3VyY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RUYWdzRm9yUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBnZXQgYSBsaXN0IG9mIFZhcmlhbnQgSW1wb3J0IEpvYnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBMaXN0XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9MaXN0VmFyaWFudEltcG9ydEpvYnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFZhcmlhbnRJbXBvcnRKb2JzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0VmFyaWFudEltcG9ydEpvYnMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBhIGxpc3Qgb2YgbWV0YWRhdGEgZm9yIFZhcmlhbnQgU3RvcmVzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdFZhcmlhbnRTdG9yZXMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFZhcmlhbnRTdG9yZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RWYXJpYW50U3RvcmVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgYSBsaXN0IG9mIGF2YWlsYWJsZSB2ZXJzaW9ucyBmb3IgYSB3b3JrZmxvd1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0xpc3RXb3JrZmxvd1ZlcnNpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RXb3JrZmxvd1ZlcnNpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0V29ya2Zsb3dWZXJzaW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGEgbGlzdCBvZiBhdmFpbGFibGUgd29ya2Zsb3dzXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogTGlzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfTGlzdFdvcmtmbG93cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0V29ya2Zsb3dzKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0V29ya2Zsb3dzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcHV0IGFuIGFjY2VzcyBwb2xpY3kgb24gYSBnaXZlbiBzdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9QdXRTM0FjY2Vzc1BvbGljeS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9QdXRTM0FjY2Vzc1BvbGljeSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnUHV0UzNBY2Nlc3NQb2xpY3knKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBpbXBvcnQgYSBsaXN0IG9mIEFubm90YXRpb24gZmlsZXMgdG8gYW4gQW5ub3RhdGlvbiBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9TdGFydEFubm90YXRpb25JbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRBbm5vdGF0aW9uSW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydEFubm90YXRpb25JbXBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBhIFJlYWQgU2V0IGFjdGl2YXRpb24gam9iIGZyb20gdGhlIGdpdmVuIFNlcXVlbmNlIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX1N0YXJ0UmVhZFNldEFjdGl2YXRpb25Kb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRSZWFkU2V0QWN0aXZhdGlvbkpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRSZWFkU2V0QWN0aXZhdGlvbkpvYicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHN0YXJ0IGEgUmVhZCBTZXQgZXhwb3J0IGpvYiBmcm9tIHRoZSBnaXZlbiBTZXF1ZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9TdGFydFJlYWRTZXRFeHBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRSZWFkU2V0RXhwb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFJlYWRTZXRFeHBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBzdGFydCBhIFJlYWQgU2V0IGltcG9ydCBqb2IgaW50byB0aGUgZ2l2ZW4gU2VxdWVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfU3RhcnRSZWFkU2V0SW1wb3J0Sm9iLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0UmVhZFNldEltcG9ydEpvYigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnU3RhcnRSZWFkU2V0SW1wb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYSBSZWZlcmVuY2UgaW1wb3J0IGpvYiBpbnRvIHRoZSBnaXZlbiBSZWZlcmVuY2UgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfU3RhcnRSZWZlcmVuY2VJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRSZWZlcmVuY2VJbXBvcnRKb2IoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0UmVmZXJlbmNlSW1wb3J0Sm9iJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYSB3b3JrZmxvdyBydW5cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfU3RhcnRSdW4uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRSdW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0UnVuJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gc3RhcnQgYmF0Y2ggb2Ygd29ya2Zsb3cgcnVuc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9TdGFydFJ1bkJhdGNoLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1N0YXJ0UnVuQmF0Y2goKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1N0YXJ0UnVuQmF0Y2gnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBpbXBvcnQgYSBsaXN0IG9mIHZhcmlhbnQgZmlsZXMgdG8gYW4gVmFyaWFudCBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9TdGFydFZhcmlhbnRJbXBvcnRKb2IuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvU3RhcnRWYXJpYW50SW1wb3J0Sm9iKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdTdGFydFZhcmlhbnRJbXBvcnRKb2InKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBhZGQgQVdTIHRhZ3MgdG8gYSByZXNvdXJjZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFRhZ2dpbmcsIFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9UYWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9UYWdSZXNvdXJjZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVGFnUmVzb3VyY2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZW1vdmUgcmVzb3VyY2UgQVdTIHRhZ3NcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBUYWdnaW5nLCBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfVW50YWdSZXNvdXJjZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VbnRhZ1Jlc291cmNlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVbnRhZ1Jlc291cmNlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBBbm5vdGF0aW9uIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX1VwZGF0ZUFubm90YXRpb25TdG9yZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVBbm5vdGF0aW9uU3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUFubm90YXRpb25TdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgVmVyc2lvbiBpbiBhbiBBbm5vdGF0aW9uIFN0b3JlXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX1VwZGF0ZUFubm90YXRpb25TdG9yZVZlcnNpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlQW5ub3RhdGlvblN0b3JlVmVyc2lvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlQW5ub3RhdGlvblN0b3JlVmVyc2lvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhIHdvcmtmbG93IHJ1biBjYWNoZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9VcGRhdGVSdW5DYWNoZS5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVSdW5DYWNoZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlUnVuQ2FjaGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgYSB3b3JrZmxvdyBydW4gZ3JvdXBcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfVXBkYXRlUnVuR3JvdXAuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlUnVuR3JvdXAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVJ1bkdyb3VwJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIGRldGFpbHMgYWJvdXQgYSBTZXF1ZW5jZSBTdG9yZVxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9VcGRhdGVTZXF1ZW5jZVN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVNlcXVlbmNlU3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVNlcXVlbmNlU3RvcmUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgbWV0YWRhdGEgYWJvdXQgdGhlIFZhcmlhbnQgU3RvcmVcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfVXBkYXRlVmFyaWFudFN0b3JlLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVZhcmlhbnRTdG9yZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnVXBkYXRlVmFyaWFudFN0b3JlJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHdvcmtmbG93IGRldGFpbHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfVXBkYXRlV29ya2Zsb3cuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlV29ya2Zsb3coKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZVdvcmtmbG93Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdXBkYXRlIHdvcmtmbG93IHZlcnNpb24gZGV0YWlsc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9VcGRhdGVXb3JrZmxvd1ZlcnNpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBkYXRlV29ya2Zsb3dWZXJzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVXb3JrZmxvd1ZlcnNpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGxvYWQgcmVhZCBzZXQgcGFydHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfVXBsb2FkUmVhZFNldFBhcnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvVXBsb2FkUmVhZFNldFBhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwbG9hZFJlYWRTZXRQYXJ0Jyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWNjZXNzTGV2ZWxMaXN0OiBBY2Nlc3NMZXZlbExpc3QgPSB7XG4gICAgV3JpdGU6IFtcbiAgICAgICdBYm9ydE11bHRpcGFydFJlYWRTZXRVcGxvYWQnLFxuICAgICAgJ0FjY2VwdFNoYXJlJyxcbiAgICAgICdCYXRjaERlbGV0ZVJlYWRTZXQnLFxuICAgICAgJ0NhbmNlbEFubm90YXRpb25JbXBvcnRKb2InLFxuICAgICAgJ0NhbmNlbFJ1bicsXG4gICAgICAnQ2FuY2VsUnVuQmF0Y2gnLFxuICAgICAgJ0NhbmNlbFZhcmlhbnRJbXBvcnRKb2InLFxuICAgICAgJ0NvbXBsZXRlTXVsdGlwYXJ0UmVhZFNldFVwbG9hZCcsXG4gICAgICAnQ3JlYXRlQW5ub3RhdGlvblN0b3JlJyxcbiAgICAgICdDcmVhdGVBbm5vdGF0aW9uU3RvcmVWZXJzaW9uJyxcbiAgICAgICdDcmVhdGVDb25maWd1cmF0aW9uJyxcbiAgICAgICdDcmVhdGVNdWx0aXBhcnRSZWFkU2V0VXBsb2FkJyxcbiAgICAgICdDcmVhdGVSZWZlcmVuY2VTdG9yZScsXG4gICAgICAnQ3JlYXRlUnVuQ2FjaGUnLFxuICAgICAgJ0NyZWF0ZVJ1bkdyb3VwJyxcbiAgICAgICdDcmVhdGVTZXF1ZW5jZVN0b3JlJyxcbiAgICAgICdDcmVhdGVTaGFyZScsXG4gICAgICAnQ3JlYXRlVmFyaWFudFN0b3JlJyxcbiAgICAgICdDcmVhdGVXb3JrZmxvdycsXG4gICAgICAnQ3JlYXRlV29ya2Zsb3dWZXJzaW9uJyxcbiAgICAgICdEZWxldGVBbm5vdGF0aW9uU3RvcmUnLFxuICAgICAgJ0RlbGV0ZUFubm90YXRpb25TdG9yZVZlcnNpb25zJyxcbiAgICAgICdEZWxldGVCYXRjaCcsXG4gICAgICAnRGVsZXRlQ29uZmlndXJhdGlvbicsXG4gICAgICAnRGVsZXRlUmVmZXJlbmNlJyxcbiAgICAgICdEZWxldGVSZWZlcmVuY2VTdG9yZScsXG4gICAgICAnRGVsZXRlUnVuJyxcbiAgICAgICdEZWxldGVSdW5CYXRjaCcsXG4gICAgICAnRGVsZXRlUnVuQ2FjaGUnLFxuICAgICAgJ0RlbGV0ZVJ1bkdyb3VwJyxcbiAgICAgICdEZWxldGVTM0FjY2Vzc1BvbGljeScsXG4gICAgICAnRGVsZXRlU2VxdWVuY2VTdG9yZScsXG4gICAgICAnRGVsZXRlU2hhcmUnLFxuICAgICAgJ0RlbGV0ZVZhcmlhbnRTdG9yZScsXG4gICAgICAnRGVsZXRlV29ya2Zsb3cnLFxuICAgICAgJ0RlbGV0ZVdvcmtmbG93VmVyc2lvbicsXG4gICAgICAnUHV0UzNBY2Nlc3NQb2xpY3knLFxuICAgICAgJ1N0YXJ0QW5ub3RhdGlvbkltcG9ydEpvYicsXG4gICAgICAnU3RhcnRSZWFkU2V0QWN0aXZhdGlvbkpvYicsXG4gICAgICAnU3RhcnRSZWFkU2V0RXhwb3J0Sm9iJyxcbiAgICAgICdTdGFydFJlYWRTZXRJbXBvcnRKb2InLFxuICAgICAgJ1N0YXJ0UmVmZXJlbmNlSW1wb3J0Sm9iJyxcbiAgICAgICdTdGFydFJ1bicsXG4gICAgICAnU3RhcnRSdW5CYXRjaCcsXG4gICAgICAnU3RhcnRWYXJpYW50SW1wb3J0Sm9iJyxcbiAgICAgICdUYWdSZXNvdXJjZScsXG4gICAgICAnVW50YWdSZXNvdXJjZScsXG4gICAgICAnVXBkYXRlQW5ub3RhdGlvblN0b3JlJyxcbiAgICAgICdVcGRhdGVBbm5vdGF0aW9uU3RvcmVWZXJzaW9uJyxcbiAgICAgICdVcGRhdGVSdW5DYWNoZScsXG4gICAgICAnVXBkYXRlUnVuR3JvdXAnLFxuICAgICAgJ1VwZGF0ZVNlcXVlbmNlU3RvcmUnLFxuICAgICAgJ1VwZGF0ZVZhcmlhbnRTdG9yZScsXG4gICAgICAnVXBkYXRlV29ya2Zsb3cnLFxuICAgICAgJ1VwZGF0ZVdvcmtmbG93VmVyc2lvbicsXG4gICAgICAnVXBsb2FkUmVhZFNldFBhcnQnXG4gICAgXSxcbiAgICBSZWFkOiBbXG4gICAgICAnR2V0QW5ub3RhdGlvbkltcG9ydEpvYicsXG4gICAgICAnR2V0QW5ub3RhdGlvblN0b3JlJyxcbiAgICAgICdHZXRBbm5vdGF0aW9uU3RvcmVWZXJzaW9uJyxcbiAgICAgICdHZXRCYXRjaCcsXG4gICAgICAnR2V0Q29uZmlndXJhdGlvbicsXG4gICAgICAnR2V0UmVhZFNldCcsXG4gICAgICAnR2V0UmVhZFNldEFjdGl2YXRpb25Kb2InLFxuICAgICAgJ0dldFJlYWRTZXRFeHBvcnRKb2InLFxuICAgICAgJ0dldFJlYWRTZXRJbXBvcnRKb2InLFxuICAgICAgJ0dldFJlYWRTZXRNZXRhZGF0YScsXG4gICAgICAnR2V0UmVmZXJlbmNlJyxcbiAgICAgICdHZXRSZWZlcmVuY2VJbXBvcnRKb2InLFxuICAgICAgJ0dldFJlZmVyZW5jZU1ldGFkYXRhJyxcbiAgICAgICdHZXRSZWZlcmVuY2VTdG9yZScsXG4gICAgICAnR2V0UnVuJyxcbiAgICAgICdHZXRSdW5DYWNoZScsXG4gICAgICAnR2V0UnVuR3JvdXAnLFxuICAgICAgJ0dldFJ1blRhc2snLFxuICAgICAgJ0dldFMzQWNjZXNzUG9saWN5JyxcbiAgICAgICdHZXRTZXF1ZW5jZVN0b3JlJyxcbiAgICAgICdHZXRTaGFyZScsXG4gICAgICAnR2V0VmFyaWFudEltcG9ydEpvYicsXG4gICAgICAnR2V0VmFyaWFudFN0b3JlJyxcbiAgICAgICdHZXRXb3JrZmxvdycsXG4gICAgICAnR2V0V29ya2Zsb3dWZXJzaW9uJ1xuICAgIF0sXG4gICAgTGlzdDogW1xuICAgICAgJ0xpc3RBbm5vdGF0aW9uSW1wb3J0Sm9icycsXG4gICAgICAnTGlzdEFubm90YXRpb25TdG9yZVZlcnNpb25zJyxcbiAgICAgICdMaXN0QW5ub3RhdGlvblN0b3JlcycsXG4gICAgICAnTGlzdEJhdGNoJyxcbiAgICAgICdMaXN0Q29uZmlndXJhdGlvbnMnLFxuICAgICAgJ0xpc3RNdWx0aXBhcnRSZWFkU2V0VXBsb2FkcycsXG4gICAgICAnTGlzdFJlYWRTZXRBY3RpdmF0aW9uSm9icycsXG4gICAgICAnTGlzdFJlYWRTZXRFeHBvcnRKb2JzJyxcbiAgICAgICdMaXN0UmVhZFNldEltcG9ydEpvYnMnLFxuICAgICAgJ0xpc3RSZWFkU2V0VXBsb2FkUGFydHMnLFxuICAgICAgJ0xpc3RSZWFkU2V0cycsXG4gICAgICAnTGlzdFJlZmVyZW5jZUltcG9ydEpvYnMnLFxuICAgICAgJ0xpc3RSZWZlcmVuY2VTdG9yZXMnLFxuICAgICAgJ0xpc3RSZWZlcmVuY2VzJyxcbiAgICAgICdMaXN0UnVuQ2FjaGVzJyxcbiAgICAgICdMaXN0UnVuR3JvdXBzJyxcbiAgICAgICdMaXN0UnVuVGFza3MnLFxuICAgICAgJ0xpc3RSdW5zJyxcbiAgICAgICdMaXN0UnVuc0luQmF0Y2gnLFxuICAgICAgJ0xpc3RTZXF1ZW5jZVN0b3JlcycsXG4gICAgICAnTGlzdFNoYXJlcycsXG4gICAgICAnTGlzdFRhZ3NGb3JSZXNvdXJjZScsXG4gICAgICAnTGlzdFZhcmlhbnRJbXBvcnRKb2JzJyxcbiAgICAgICdMaXN0VmFyaWFudFN0b3JlcycsXG4gICAgICAnTGlzdFdvcmtmbG93VmVyc2lvbnMnLFxuICAgICAgJ0xpc3RXb3JrZmxvd3MnXG4gICAgXSxcbiAgICBUYWdnaW5nOiBbXG4gICAgICAnVGFnUmVzb3VyY2UnLFxuICAgICAgJ1VudGFnUmVzb3VyY2UnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBBbm5vdGF0aW9uU3RvcmUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQW5ub3RhdGlvblN0b3JlSXRlbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBhbm5vdGF0aW9uU3RvcmVOYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIGFubm90YXRpb25TdG9yZU5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbkFubm90YXRpb25TdG9yZShhbm5vdGF0aW9uU3RvcmVOYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OmFubm90YXRpb25TdG9yZS8keyBhbm5vdGF0aW9uU3RvcmVOYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBBbm5vdGF0aW9uU3RvcmVWZXJzaW9uIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX0Fubm90YXRpb25TdG9yZVZlcnNpb25JdGVtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGFubm90YXRpb25TdG9yZU5hbWUgLSBJZGVudGlmaWVyIGZvciB0aGUgYW5ub3RhdGlvblN0b3JlTmFtZS5cbiAgICogQHBhcmFtIGFubm90YXRpb25TdG9yZVZlcnNpb25OYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIGFubm90YXRpb25TdG9yZVZlcnNpb25OYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Bbm5vdGF0aW9uU3RvcmVWZXJzaW9uKGFubm90YXRpb25TdG9yZU5hbWU6IHN0cmluZywgYW5ub3RhdGlvblN0b3JlVmVyc2lvbk5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvbWljczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06YW5ub3RhdGlvblN0b3JlLyR7IGFubm90YXRpb25TdG9yZU5hbWUgfS92ZXJzaW9uLyR7IGFubm90YXRpb25TdG9yZVZlcnNpb25OYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBUYXNrUmVzb3VyY2UgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfVGFza0xpc3RJdGVtLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIGlkIC0gSWRlbnRpZmllciBmb3IgdGhlIGlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBvblRhc2tSZXNvdXJjZShpZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9Om9taWNzOiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTp0YXNrLyR7IGlkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBWYXJpYW50U3RvcmUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfVmFyaWFudFN0b3JlSXRlbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSB2YXJpYW50U3RvcmVOYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIHZhcmlhbnRTdG9yZU5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvblZhcmlhbnRTdG9yZSh2YXJpYW50U3RvcmVOYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnZhcmlhbnRTdG9yZS8keyB2YXJpYW50U3RvcmVOYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBXb3JrZmxvd1ZlcnNpb24gdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfV29ya2Zsb3dWZXJzaW9uTGlzdEl0ZW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBJZGVudGlmaWVyIGZvciB0aGUgaWQuXG4gICAqIEBwYXJhbSB2ZXJzaW9uTmFtZSAtIElkZW50aWZpZXIgZm9yIHRoZSB2ZXJzaW9uTmFtZS5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uV29ya2Zsb3dWZXJzaW9uKGlkOiBzdHJpbmcsIHZlcnNpb25OYW1lOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OndvcmtmbG93LyR7IGlkIH0vdmVyc2lvbi8keyB2ZXJzaW9uTmFtZSB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgY29uZmlndXJhdGlvbiB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9Db25maWd1cmF0aW9uTGlzdEl0ZW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIElkZW50aWZpZXIgZm9yIHRoZSBuYW1lLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25Db25maWd1cmF0aW9uKG5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvbWljczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06Y29uZmlndXJhdGlvbi8keyBuYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSByZWFkU2V0IHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX1JlYWRTZXRGaWxlcy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBzZXF1ZW5jZVN0b3JlSWQgLSBJZGVudGlmaWVyIGZvciB0aGUgc2VxdWVuY2VTdG9yZUlkLlxuICAgKiBAcGFyYW0gcmVhZFNldElkIC0gSWRlbnRpZmllciBmb3IgdGhlIHJlYWRTZXRJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uUmVhZFNldChzZXF1ZW5jZVN0b3JlSWQ6IHN0cmluZywgcmVhZFNldElkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnNlcXVlbmNlU3RvcmUvJHsgc2VxdWVuY2VTdG9yZUlkIH0vcmVhZFNldC8keyByZWFkU2V0SWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIHJlZmVyZW5jZSB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9SZWZlcmVuY2VGaWxlcy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSByZWZlcmVuY2VTdG9yZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIHJlZmVyZW5jZVN0b3JlSWQuXG4gICAqIEBwYXJhbSByZWZlcmVuY2VJZCAtIElkZW50aWZpZXIgZm9yIHRoZSByZWZlcmVuY2VJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uUmVmZXJlbmNlKHJlZmVyZW5jZVN0b3JlSWQ6IHN0cmluZywgcmVmZXJlbmNlSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvbWljczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06cmVmZXJlbmNlU3RvcmUvJHsgcmVmZXJlbmNlU3RvcmVJZCB9L3JlZmVyZW5jZS8keyByZWZlcmVuY2VJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgcmVmZXJlbmNlU3RvcmUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfUmVmZXJlbmNlU3RvcmVEZXRhaWwuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gcmVmZXJlbmNlU3RvcmVJZCAtIElkZW50aWZpZXIgZm9yIHRoZSByZWZlcmVuY2VTdG9yZUlkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqL1xuICBwdWJsaWMgb25SZWZlcmVuY2VTdG9yZShyZWZlcmVuY2VTdG9yZUlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnJlZmVyZW5jZVN0b3JlLyR7IHJlZmVyZW5jZVN0b3JlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIHJ1biB0byB0aGUgc3RhdGVtZW50XG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9vbWljcy9sYXRlc3QvYXBpL0FQSV9SdW5MaXN0SXRlbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIElkZW50aWZpZXIgZm9yIHRoZSBpZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uUnVuKGlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnJ1bi8keyBpZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgcnVuQmF0Y2ggdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfQmF0Y2hMaXN0SXRlbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBiYXRjaElkIC0gSWRlbnRpZmllciBmb3IgdGhlIGJhdGNoSWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvblJ1bkJhdGNoKGJhdGNoSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvbWljczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06cnVuQmF0Y2gvJHsgYmF0Y2hJZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHJlc291cmNlIG9mIHR5cGUgcnVuQ2FjaGUgdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vb21pY3MvbGF0ZXN0L2FwaS9BUElfUnVuQ2FjaGVMaXN0SXRlbS5odG1sXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIElkZW50aWZpZXIgZm9yIHRoZSBpZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uUnVuQ2FjaGUoaWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvbWljczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06cnVuQ2FjaGUvJHsgaWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIHJ1bkdyb3VwIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX1J1bkdyb3VwTGlzdEl0ZW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBJZGVudGlmaWVyIGZvciB0aGUgaWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvblJ1bkdyb3VwKGlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OnJ1bkdyb3VwLyR7IGlkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSBzZXF1ZW5jZVN0b3JlIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX1NlcXVlbmNlU3RvcmVEZXRhaWwuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gc2VxdWVuY2VTdG9yZUlkIC0gSWRlbnRpZmllciBmb3IgdGhlIHNlcXVlbmNlU3RvcmVJZC5cbiAgICogQHBhcmFtIGFjY291bnQgLSBBY2NvdW50IG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBhY2NvdW50LlxuICAgKiBAcGFyYW0gcmVnaW9uIC0gUmVnaW9uIG9mIHRoZSByZXNvdXJjZTsgZGVmYXVsdHMgdG8gYCpgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyByZWdpb24uXG4gICAqIEBwYXJhbSBwYXJ0aXRpb24gLSBQYXJ0aXRpb24gb2YgdGhlIEFXUyBhY2NvdW50IFthd3MsIGF3cy1jbiwgYXdzLXVzLWdvdl07IGRlZmF1bHRzIHRvIGBhd3NgLCB1bmxlc3MgdXNpbmcgdGhlIENESywgd2hlcmUgdGhlIGRlZmF1bHQgaXMgdGhlIGN1cnJlbnQgU3RhY2sncyBwYXJ0aXRpb24uXG4gICAqXG4gICAqIFBvc3NpYmxlIGNvbmRpdGlvbnM6XG4gICAqIC0gLmlmQXdzUmVzb3VyY2VUYWcoKVxuICAgKi9cbiAgcHVibGljIG9uU2VxdWVuY2VTdG9yZShzZXF1ZW5jZVN0b3JlSWQ6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpvbWljczokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06c2VxdWVuY2VTdG9yZS8keyBzZXF1ZW5jZVN0b3JlSWQgfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXNvdXJjZSBvZiB0eXBlIHdvcmtmbG93IHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29taWNzL2xhdGVzdC9hcGkvQVBJX1dvcmtmbG93TGlzdEl0ZW0uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBJZGVudGlmaWVyIGZvciB0aGUgaWQuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKlxuICAgKiBQb3NzaWJsZSBjb25kaXRpb25zOlxuICAgKiAtIC5pZkF3c1Jlc291cmNlVGFnKClcbiAgICovXG4gIHB1YmxpYyBvbldvcmtmbG93KGlkOiBzdHJpbmcsIGFjY291bnQ/OiBzdHJpbmcsIHJlZ2lvbj86IHN0cmluZywgcGFydGl0aW9uPzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMub24oYGFybjokeyBwYXJ0aXRpb24gPz8gdGhpcy5kZWZhdWx0UGFydGl0aW9uIH06b21pY3M6JHsgcmVnaW9uID8/IHRoaXMuZGVmYXVsdFJlZ2lvbiB9OiR7IGFjY291bnQgPz8gdGhpcy5kZWZhdWx0QWNjb3VudCB9OndvcmtmbG93LyR7IGlkIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgcHJlc2VuY2Ugb2YgdGFnIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgcmVxdWVzdFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2NvbmRpdGlvbi1rZXlzLmh0bWwjY29uZGl0aW9uLWtleXMtcmVxdWVzdHRhZ1xuICAgKlxuICAgKiBBcHBsaWVzIHRvIGFjdGlvbnM6XG4gICAqIC0gLnRvQ3JlYXRlQW5ub3RhdGlvblN0b3JlKClcbiAgICogLSAudG9DcmVhdGVBbm5vdGF0aW9uU3RvcmVWZXJzaW9uKClcbiAgICogLSAudG9DcmVhdGVDb25maWd1cmF0aW9uKClcbiAgICogLSAudG9DcmVhdGVSZWZlcmVuY2VTdG9yZSgpXG4gICAqIC0gLnRvQ3JlYXRlUnVuQ2FjaGUoKVxuICAgKiAtIC50b0NyZWF0ZVJ1bkdyb3VwKClcbiAgICogLSAudG9DcmVhdGVTZXF1ZW5jZVN0b3JlKClcbiAgICogLSAudG9DcmVhdGVWYXJpYW50U3RvcmUoKVxuICAgKiAtIC50b0NyZWF0ZVdvcmtmbG93KClcbiAgICogLSAudG9DcmVhdGVXb3JrZmxvd1ZlcnNpb24oKVxuICAgKiAtIC50b1N0YXJ0UnVuKClcbiAgICogLSAudG9TdGFydFJ1bkJhdGNoKClcbiAgICogLSAudG9UYWdSZXNvdXJjZSgpXG4gICAqXG4gICAqIEBwYXJhbSB0YWdLZXkgVGhlIHRhZyBrZXkgdG8gY2hlY2tcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZShzKSB0byBjaGVja1xuICAgKiBAcGFyYW0gb3BlcmF0b3IgV29ya3Mgd2l0aCBbc3RyaW5nIG9wZXJhdG9yc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19lbGVtZW50c19jb25kaXRpb25fb3BlcmF0b3JzLmh0bWwjQ29uZGl0aW9uc19TdHJpbmcpLiAqKkRlZmF1bHQ6KiogYFN0cmluZ0xpa2VgXG4gICAqL1xuICBwdWJsaWMgaWZBd3NSZXF1ZXN0VGFnKHRhZ0tleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIG9wZXJhdG9yPzogT3BlcmF0b3IgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5pZihgYXdzOlJlcXVlc3RUYWcvJHsgdGFnS2V5IH1gLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgcHJlc2VuY2Ugb2YgdGFnIGtleS12YWx1ZSBwYWlycyBhdHRhY2hlZCB0byB0aGUgcmVzb3VyY2VcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19jb25kaXRpb24ta2V5cy5odG1sI2NvbmRpdGlvbi1rZXlzLXJlc291cmNldGFnXG4gICAqXG4gICAqIEFwcGxpZXMgdG8gYWN0aW9uczpcbiAgICogLSAudG9BYm9ydE11bHRpcGFydFJlYWRTZXRVcGxvYWQoKVxuICAgKiAtIC50b0JhdGNoRGVsZXRlUmVhZFNldCgpXG4gICAqIC0gLnRvQ2FuY2VsUnVuKClcbiAgICogLSAudG9DYW5jZWxSdW5CYXRjaCgpXG4gICAqIC0gLnRvQ29tcGxldGVNdWx0aXBhcnRSZWFkU2V0VXBsb2FkKClcbiAgICogLSAudG9DcmVhdGVBbm5vdGF0aW9uU3RvcmVWZXJzaW9uKClcbiAgICogLSAudG9DcmVhdGVNdWx0aXBhcnRSZWFkU2V0VXBsb2FkKClcbiAgICogLSAudG9DcmVhdGVXb3JrZmxvd1ZlcnNpb24oKVxuICAgKiAtIC50b0RlbGV0ZUFubm90YXRpb25TdG9yZSgpXG4gICAqIC0gLnRvRGVsZXRlQW5ub3RhdGlvblN0b3JlVmVyc2lvbnMoKVxuICAgKiAtIC50b0RlbGV0ZUJhdGNoKClcbiAgICogLSAudG9EZWxldGVDb25maWd1cmF0aW9uKClcbiAgICogLSAudG9EZWxldGVSZWZlcmVuY2UoKVxuICAgKiAtIC50b0RlbGV0ZVJlZmVyZW5jZVN0b3JlKClcbiAgICogLSAudG9EZWxldGVSdW4oKVxuICAgKiAtIC50b0RlbGV0ZVJ1bkJhdGNoKClcbiAgICogLSAudG9EZWxldGVSdW5DYWNoZSgpXG4gICAqIC0gLnRvRGVsZXRlUnVuR3JvdXAoKVxuICAgKiAtIC50b0RlbGV0ZVMzQWNjZXNzUG9saWN5KClcbiAgICogLSAudG9EZWxldGVTZXF1ZW5jZVN0b3JlKClcbiAgICogLSAudG9EZWxldGVWYXJpYW50U3RvcmUoKVxuICAgKiAtIC50b0RlbGV0ZVdvcmtmbG93KClcbiAgICogLSAudG9EZWxldGVXb3JrZmxvd1ZlcnNpb24oKVxuICAgKiAtIC50b0dldEFubm90YXRpb25TdG9yZSgpXG4gICAqIC0gLnRvR2V0QW5ub3RhdGlvblN0b3JlVmVyc2lvbigpXG4gICAqIC0gLnRvR2V0QmF0Y2goKVxuICAgKiAtIC50b0dldENvbmZpZ3VyYXRpb24oKVxuICAgKiAtIC50b0dldFJlYWRTZXQoKVxuICAgKiAtIC50b0dldFJlYWRTZXRBY3RpdmF0aW9uSm9iKClcbiAgICogLSAudG9HZXRSZWFkU2V0RXhwb3J0Sm9iKClcbiAgICogLSAudG9HZXRSZWFkU2V0SW1wb3J0Sm9iKClcbiAgICogLSAudG9HZXRSZWFkU2V0TWV0YWRhdGEoKVxuICAgKiAtIC50b0dldFJlZmVyZW5jZSgpXG4gICAqIC0gLnRvR2V0UmVmZXJlbmNlSW1wb3J0Sm9iKClcbiAgICogLSAudG9HZXRSZWZlcmVuY2VNZXRhZGF0YSgpXG4gICAqIC0gLnRvR2V0UmVmZXJlbmNlU3RvcmUoKVxuICAgKiAtIC50b0dldFJ1bigpXG4gICAqIC0gLnRvR2V0UnVuQ2FjaGUoKVxuICAgKiAtIC50b0dldFJ1bkdyb3VwKClcbiAgICogLSAudG9HZXRSdW5UYXNrKClcbiAgICogLSAudG9HZXRTM0FjY2Vzc1BvbGljeSgpXG4gICAqIC0gLnRvR2V0U2VxdWVuY2VTdG9yZSgpXG4gICAqIC0gLnRvR2V0VmFyaWFudFN0b3JlKClcbiAgICogLSAudG9HZXRXb3JrZmxvdygpXG4gICAqIC0gLnRvR2V0V29ya2Zsb3dWZXJzaW9uKClcbiAgICogLSAudG9MaXN0QW5ub3RhdGlvblN0b3JlVmVyc2lvbnMoKVxuICAgKiAtIC50b0xpc3RNdWx0aXBhcnRSZWFkU2V0VXBsb2FkcygpXG4gICAqIC0gLnRvTGlzdFJlYWRTZXRBY3RpdmF0aW9uSm9icygpXG4gICAqIC0gLnRvTGlzdFJlYWRTZXRFeHBvcnRKb2JzKClcbiAgICogLSAudG9MaXN0UmVhZFNldEltcG9ydEpvYnMoKVxuICAgKiAtIC50b0xpc3RSZWFkU2V0VXBsb2FkUGFydHMoKVxuICAgKiAtIC50b0xpc3RSZWFkU2V0cygpXG4gICAqIC0gLnRvTGlzdFJlZmVyZW5jZUltcG9ydEpvYnMoKVxuICAgKiAtIC50b0xpc3RSZWZlcmVuY2VzKClcbiAgICogLSAudG9MaXN0UnVuVGFza3MoKVxuICAgKiAtIC50b0xpc3RSdW5zSW5CYXRjaCgpXG4gICAqIC0gLnRvTGlzdFdvcmtmbG93VmVyc2lvbnMoKVxuICAgKiAtIC50b1B1dFMzQWNjZXNzUG9saWN5KClcbiAgICogLSAudG9TdGFydEFubm90YXRpb25JbXBvcnRKb2IoKVxuICAgKiAtIC50b1N0YXJ0UmVhZFNldEFjdGl2YXRpb25Kb2IoKVxuICAgKiAtIC50b1N0YXJ0UmVhZFNldEV4cG9ydEpvYigpXG4gICAqIC0gLnRvU3RhcnRSZWFkU2V0SW1wb3J0Sm9iKClcbiAgICogLSAudG9TdGFydFJlZmVyZW5jZUltcG9ydEpvYigpXG4gICAqIC0gLnRvU3RhcnRSdW4oKVxuICAgKiAtIC50b1N0YXJ0UnVuQmF0Y2goKVxuICAgKiAtIC50b1N0YXJ0VmFyaWFudEltcG9ydEpvYigpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VwZGF0ZUFubm90YXRpb25TdG9yZSgpXG4gICAqIC0gLnRvVXBkYXRlQW5ub3RhdGlvblN0b3JlVmVyc2lvbigpXG4gICAqIC0gLnRvVXBkYXRlUnVuQ2FjaGUoKVxuICAgKiAtIC50b1VwZGF0ZVJ1bkdyb3VwKClcbiAgICogLSAudG9VcGRhdGVTZXF1ZW5jZVN0b3JlKClcbiAgICogLSAudG9VcGRhdGVWYXJpYW50U3RvcmUoKVxuICAgKiAtIC50b1VwZGF0ZVdvcmtmbG93KClcbiAgICogLSAudG9VcGRhdGVXb3JrZmxvd1ZlcnNpb24oKVxuICAgKiAtIC50b1VwbG9hZFJlYWRTZXRQYXJ0KClcbiAgICpcbiAgICogQXBwbGllcyB0byByZXNvdXJjZSB0eXBlczpcbiAgICogLSBBbm5vdGF0aW9uU3RvcmVcbiAgICogLSBBbm5vdGF0aW9uU3RvcmVWZXJzaW9uXG4gICAqIC0gVmFyaWFudFN0b3JlXG4gICAqIC0gV29ya2Zsb3dWZXJzaW9uXG4gICAqIC0gY29uZmlndXJhdGlvblxuICAgKiAtIHJlYWRTZXRcbiAgICogLSByZWZlcmVuY2VcbiAgICogLSByZWZlcmVuY2VTdG9yZVxuICAgKiAtIHJ1blxuICAgKiAtIHJ1bkJhdGNoXG4gICAqIC0gcnVuQ2FjaGVcbiAgICogLSBydW5Hcm91cFxuICAgKiAtIHNlcXVlbmNlU3RvcmVcbiAgICogLSB3b3JrZmxvd1xuICAgKlxuICAgKiBAcGFyYW0gdGFnS2V5IFRoZSB0YWcga2V5IHRvIGNoZWNrXG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUocykgdG8gY2hlY2tcbiAgICogQHBhcmFtIG9wZXJhdG9yIFdvcmtzIHdpdGggW3N0cmluZyBvcGVyYXRvcnNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfY29uZGl0aW9uX29wZXJhdG9ycy5odG1sI0NvbmRpdGlvbnNfU3RyaW5nKS4gKipEZWZhdWx0OioqIGBTdHJpbmdMaWtlYFxuICAgKi9cbiAgcHVibGljIGlmQXdzUmVzb3VyY2VUYWcodGFnS2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSwgb3BlcmF0b3I/OiBPcGVyYXRvciB8IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmlmKGBhd3M6UmVzb3VyY2VUYWcvJHsgdGFnS2V5IH1gLCB2YWx1ZSwgb3BlcmF0b3IgPz8gJ1N0cmluZ0xpa2UnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXJzIGFjY2VzcyBieSB0aGUgcHJlc2VuY2Ugb2YgdGFnIGtleXMgaW4gdGhlIHJlcXVlc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0lBTS9sYXRlc3QvVXNlckd1aWRlL3JlZmVyZW5jZV9wb2xpY2llc19jb25kaXRpb24ta2V5cy5odG1sI2NvbmRpdGlvbi1rZXlzLXRhZ2tleXNcbiAgICpcbiAgICogQXBwbGllcyB0byBhY3Rpb25zOlxuICAgKiAtIC50b0NyZWF0ZUFubm90YXRpb25TdG9yZSgpXG4gICAqIC0gLnRvQ3JlYXRlQW5ub3RhdGlvblN0b3JlVmVyc2lvbigpXG4gICAqIC0gLnRvQ3JlYXRlQ29uZmlndXJhdGlvbigpXG4gICAqIC0gLnRvQ3JlYXRlUmVmZXJlbmNlU3RvcmUoKVxuICAgKiAtIC50b0NyZWF0ZVJ1bkNhY2hlKClcbiAgICogLSAudG9DcmVhdGVSdW5Hcm91cCgpXG4gICAqIC0gLnRvQ3JlYXRlU2VxdWVuY2VTdG9yZSgpXG4gICAqIC0gLnRvQ3JlYXRlVmFyaWFudFN0b3JlKClcbiAgICogLSAudG9DcmVhdGVXb3JrZmxvdygpXG4gICAqIC0gLnRvQ3JlYXRlV29ya2Zsb3dWZXJzaW9uKClcbiAgICogLSAudG9TdGFydFJ1bigpXG4gICAqIC0gLnRvU3RhcnRSdW5CYXRjaCgpXG4gICAqIC0gLnRvVGFnUmVzb3VyY2UoKVxuICAgKiAtIC50b1VudGFnUmVzb3VyY2UoKVxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlKHMpIHRvIGNoZWNrXG4gICAqIEBwYXJhbSBvcGVyYXRvciBXb3JrcyB3aXRoIFtzdHJpbmcgb3BlcmF0b3JzXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vSUFNL2xhdGVzdC9Vc2VyR3VpZGUvcmVmZXJlbmNlX3BvbGljaWVzX2VsZW1lbnRzX2NvbmRpdGlvbl9vcGVyYXRvcnMuaHRtbCNDb25kaXRpb25zX1N0cmluZykuICoqRGVmYXVsdDoqKiBgU3RyaW5nTGlrZWBcbiAgICovXG4gIHB1YmxpYyBpZkF3c1RhZ0tleXModmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdLCBvcGVyYXRvcj86IE9wZXJhdG9yIHwgc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaWYoYGF3czpUYWdLZXlzYCwgdmFsdWUsIG9wZXJhdG9yID8/ICdTdHJpbmdMaWtlJyk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtvbWljc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3Rfb21pY3MuaHRtbCkuXG4gICAqXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcm9wcz86IGlhbS5Qb2xpY3lTdGF0ZW1lbnRQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxufVxuIl19