UNPKG

iam-floyd

Version:

AWS IAM policy statement generator with fluent interface

815 lines 77.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Inspector2 = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [inspector2](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoninspector2.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class Inspector2 extends shared_1.PolicyStatement { /** * Statement provider for service [inspector2](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoninspector2.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ constructor(sid) { super(sid); this.servicePrefix = 'inspector2'; this.accessLevelList = { Write: [ 'AssociateMember', 'BatchUpdateMemberEc2DeepInspectionStatus', 'CancelFindingsReport', 'CancelSbomExport', 'CreateCisScanConfiguration', 'CreateFilter', 'CreateFindingsReport', 'CreateSbomExport', 'DeleteCisScanConfiguration', 'DeleteFilter', 'Disable', 'DisableDelegatedAdminAccount', 'DisassociateMember', 'Enable', 'EnableDelegatedAdminAccount', 'ResetEncryptionKey', 'SendCisSessionHealth', 'SendCisSessionTelemetry', 'StartCisSession', 'StopCisSession', 'UpdateCisScanConfiguration', 'UpdateConfiguration', 'UpdateEc2DeepInspectionConfiguration', 'UpdateEncryptionKey', 'UpdateFilter', 'UpdateOrgEc2DeepInspectionConfiguration', 'UpdateOrganizationConfiguration' ], Read: [ 'BatchGetAccountStatus', 'BatchGetCodeSnippet', 'BatchGetFindingDetails', 'BatchGetFreeTrialInfo', 'BatchGetMemberEc2DeepInspectionStatus', 'DescribeOrganizationConfiguration', 'GetCisScanReport', 'GetConfiguration', 'GetDelegatedAdminAccount', 'GetEc2DeepInspectionConfiguration', 'GetEncryptionKey', 'GetFindingsReportStatus', 'GetMember', 'GetSbomExport', 'ListTagsForResource', 'SearchVulnerabilities' ], List: [ 'GetCisScanResultDetails', 'ListAccountPermissions', 'ListCisScanConfigurations', 'ListCisScanResultsAggregatedByChecks', 'ListCisScanResultsAggregatedByTargetResource', 'ListCisScans', 'ListCoverage', 'ListCoverageStatistics', 'ListDelegatedAdminAccounts', 'ListFilters', 'ListFindingAggregations', 'ListFindings', 'ListMembers', 'ListUsageTotals' ], Tagging: [ 'TagResource', 'UntagResource' ] }; } /** * Grants permission to associate an account with an Amazon Inspector administrator account * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_AssociateMember.html */ toAssociateMember() { return this.to('AssociateMember'); } /** * Grants permission to retrieve information about Amazon Inspector accounts for an account * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_BatchGetAccountStatus.html */ toBatchGetAccountStatus() { return this.to('BatchGetAccountStatus'); } /** * Grants permission to retrieve code snippet information about one or more code vulnerability findings * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_BatchGetCodeSnippet.html */ toBatchGetCodeSnippet() { return this.to('BatchGetCodeSnippet'); } /** * Grants permission to let a customer get enhanced vulnerability intelligence details for findings * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_BatchGetFindingDetails.html */ toBatchGetFindingDetails() { return this.to('BatchGetFindingDetails'); } /** * Grants permission to retrieve free trial period eligibility about Amazon Inspector accounts for an account * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_BatchGetFreeTrialInfo.html */ toBatchGetFreeTrialInfo() { return this.to('BatchGetFreeTrialInfo'); } /** * Grants permission to delegated administrator to retrieve ec2 deep inspection status of member accounts * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_BatchGetMemberEc2DeepInspectionStatus.html */ toBatchGetMemberEc2DeepInspectionStatus() { return this.to('BatchGetMemberEc2DeepInspectionStatus'); } /** * Grants permission to update ec2 deep inspection status by delegated administrator for its associated member accounts * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_BatchUpdateMemberEc2DeepInspectionStatus.html */ toBatchUpdateMemberEc2DeepInspectionStatus() { return this.to('BatchUpdateMemberEc2DeepInspectionStatus'); } /** * Grants permission to cancel the generation of a findings report * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_CancelFindingsReport.html */ toCancelFindingsReport() { return this.to('CancelFindingsReport'); } /** * Grants permission to cancel the generation of an SBOM report * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_CancelSbomExport.html */ toCancelSbomExport() { return this.to('CancelSbomExport'); } /** * Grants permission to create and define the settings for a CIS scan configuration * * Access Level: Write * * Possible conditions: * - .ifAwsResourceTag() * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_CreateCisScanConfiguration.html */ toCreateCisScanConfiguration() { return this.to('CreateCisScanConfiguration'); } /** * Grants permission to create and define the settings for a findings filter * * Access Level: Write * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_CreateFilter.html */ toCreateFilter() { return this.to('CreateFilter'); } /** * Grants permission to request the generation of a findings report * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_CreateFindingsReport.html */ toCreateFindingsReport() { return this.to('CreateFindingsReport'); } /** * Grants permission to request the generation of an SBOM report * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_CreateSbomExport.html */ toCreateSbomExport() { return this.to('CreateSbomExport'); } /** * Grants permission to delete a CIS scan configuration * * Access Level: Write * * Possible conditions: * - .ifAwsResourceTag() * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_DeleteCisScanConfiguration.html */ toDeleteCisScanConfiguration() { return this.to('DeleteCisScanConfiguration'); } /** * Grants permission to delete a findings filter * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_DeleteFilter.html */ toDeleteFilter() { return this.to('DeleteFilter'); } /** * Grants permission to retrieve information about the Amazon Inspector configuration settings for an AWS organization * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_DescribeOrganizationConfiguration.html */ toDescribeOrganizationConfiguration() { return this.to('DescribeOrganizationConfiguration'); } /** * Grants permission to disable an Amazon Inspector account * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_Disable.html */ toDisable() { return this.to('Disable'); } /** * Grants permission to disable an account as the delegated Amazon Inspector administrator account for an AWS organization * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_DisableDelegatedAdminAccount.html */ toDisableDelegatedAdminAccount() { return this.to('DisableDelegatedAdminAccount'); } /** * Grants permission to an Amazon Inspector administrator account to disassociate from an Inspector member account * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_DisassociateMember.html */ toDisassociateMember() { return this.to('DisassociateMember'); } /** * Grants permission to enable and specify the configuration settings for a new Amazon Inspector account * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_Enable.html */ toEnable() { return this.to('Enable'); } /** * Grants permission to enable an account as the delegated Amazon Inspector administrator account for an AWS organization * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_EnableDelegatedAdminAccount.html */ toEnableDelegatedAdminAccount() { return this.to('EnableDelegatedAdminAccount'); } /** * Grants permission to retrieve a report containing information about completed CIS scans * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetCisScanReport.html */ toGetCisScanReport() { return this.to('GetCisScanReport'); } /** * Grants permission to retrieve information about all details pertaining to one CIS scan and one targeted resource * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetCisScanResultDetails.html */ toGetCisScanResultDetails() { return this.to('GetCisScanResultDetails'); } /** * Grants permission to retrieve information about the Amazon Inspector configuration settings for an AWS account * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetConfiguration.html */ toGetConfiguration() { return this.to('GetConfiguration'); } /** * Grants permission to retrieve information about the Amazon Inspector administrator account for an account * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetDelegatedAdminAccount.html */ toGetDelegatedAdminAccount() { return this.to('GetDelegatedAdminAccount'); } /** * Grants permission to retrieve ec2 deep inspection configuration for standalone accounts, delegated administrator and member account * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetEc2DeepInspectionConfiguration.html */ toGetEc2DeepInspectionConfiguration() { return this.to('GetEc2DeepInspectionConfiguration'); } /** * Grants permission to retrieve information about the KMS key used to encrypt code snippets with * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetEncryptionKey.html */ toGetEncryptionKey() { return this.to('GetEncryptionKey'); } /** * Grants permission to retrieve status for a requested findings report * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetFindingsReportStatus.html */ toGetFindingsReportStatus() { return this.to('GetFindingsReportStatus'); } /** * Grants permission to retrieve information about an account that's associated with an Amazon Inspector administrator account * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetMember.html */ toGetMember() { return this.to('GetMember'); } /** * Grants permission to retrieve a requested SBOM report * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_GetSbomExport.html */ toGetSbomExport() { return this.to('GetSbomExport'); } /** * Grants permission to retrieve feature configuration permissions associated with an Amazon Inspector account within an organization * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListAccountPermissions.html */ toListAccountPermissions() { return this.to('ListAccountPermissions'); } /** * Grants permission to retrieve information about all CIS scan configurations * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListCisScanConfigurations.html */ toListCisScanConfigurations() { return this.to('ListCisScanConfigurations'); } /** * Grants permission to retrieve information about all checks pertaining to one CIS scan * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListCisScanResultsAggregatedByChecks.html */ toListCisScanResultsAggregatedByChecks() { return this.to('ListCisScanResultsAggregatedByChecks'); } /** * Grants permission to retrieve information about all resources pertaining to one CIS scan * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListCisScanResultsAggregatedByTargetResource.html */ toListCisScanResultsAggregatedByTargetResource() { return this.to('ListCisScanResultsAggregatedByTargetResource'); } /** * Grants permission to retrieve information about completed CIS scans * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListCisScans.html */ toListCisScans() { return this.to('ListCisScans'); } /** * Grants permission to retrieve the types of statistics Amazon Inspector can generate for resources Inspector monitors * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListCoverage.html */ toListCoverage() { return this.to('ListCoverage'); } /** * Grants permission to retrieve statistical data and other information about the resources Amazon Inspector monitors * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListCoverageStatistics.html */ toListCoverageStatistics() { return this.to('ListCoverageStatistics'); } /** * Grants permission to retrieve information about the delegated Amazon Inspector administrator account for an AWS organization * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListDelegatedAdminAccounts.html */ toListDelegatedAdminAccounts() { return this.to('ListDelegatedAdminAccounts'); } /** * Grants permission to retrieve information about all findings filters * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListFilters.html */ toListFilters() { return this.to('ListFilters'); } /** * Grants permission to retrieve statistical data and other information about Amazon Inspector findings * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListFindingAggregations.html */ toListFindingAggregations() { return this.to('ListFindingAggregations'); } /** * Grants permission to retrieve a subset of information about one or more findings * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListFindings.html */ toListFindings() { return this.to('ListFindings'); } /** * Grants permission to retrieve information about the Amazon Inspector member accounts that are associated with an Inspector administrator account * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListMembers.html */ toListMembers() { return this.to('ListMembers'); } /** * Grants permission to retrieve the tags for an Amazon Inspector resource * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListTagsForResource.html */ toListTagsForResource() { return this.to('ListTagsForResource'); } /** * Grants permission to retrieve aggregated usage data for an account * * Access Level: List * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ListUsageTotals.html */ toListUsageTotals() { return this.to('ListUsageTotals'); } /** * Grants permission to let a customer reset to use an Amazon-owned KMS key to encrypt code snippets with * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_ResetEncryptionKey.html */ toResetEncryptionKey() { return this.to('ResetEncryptionKey'); } /** * Grants permission to list Amazon Inspector coverage details for a specific vulnerability * * Access Level: Read * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_SearchVulnerabilities.html */ toSearchVulnerabilities() { return this.to('SearchVulnerabilities'); } /** * Grants permission to send CIS health for a CIS scan * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_SendCisSessionHealth.html */ toSendCisSessionHealth() { return this.to('SendCisSessionHealth'); } /** * Grants permission to send CIS telemetry for a CIS scan * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_SendCisSessionTelemetry.html */ toSendCisSessionTelemetry() { return this.to('SendCisSessionTelemetry'); } /** * Grants permission to start a CIS scan session * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_StartCisSession.html */ toStartCisSession() { return this.to('StartCisSession'); } /** * Grants permission to stop a CIS scan session * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_StopCisSession.html */ toStopCisSession() { return this.to('StopCisSession'); } /** * Grants permission to add or update the tags for an Amazon Inspector resource * * Access Level: Tagging * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * - .ifAwsResourceTag() * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_TagResource.html */ toTagResource() { return this.to('TagResource'); } /** * Grants permission to remove tags from an Amazon Inspector resource * * Access Level: Tagging * * Possible conditions: * - .ifAwsResourceTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UntagResource.html */ toUntagResource() { return this.to('UntagResource'); } /** * Grants permission to update the settings for a CIS scan configuration * * Access Level: Write * * Possible conditions: * - .ifAwsResourceTag() * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UpdateCisScanConfiguration.html */ toUpdateCisScanConfiguration() { return this.to('UpdateCisScanConfiguration'); } /** * Grants permission to update information about the Amazon Inspector configuration settings for an AWS account * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UpdateConfiguration.html */ toUpdateConfiguration() { return this.to('UpdateConfiguration'); } /** * Grants permission to update ec2 deep inspection configuration by delegated administrator, member and standalone account * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UpdateEc2DeepInspectionConfiguration.html */ toUpdateEc2DeepInspectionConfiguration() { return this.to('UpdateEc2DeepInspectionConfiguration'); } /** * Grants permission to let a customer use a KMS key to encrypt code snippets with * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UpdateEncryptionKey.html */ toUpdateEncryptionKey() { return this.to('UpdateEncryptionKey'); } /** * Grants permission to update the settings for a findings filter * * Access Level: Write * * Possible conditions: * - .ifAwsRequestTag() * - .ifAwsTagKeys() * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UpdateFilter.html */ toUpdateFilter() { return this.to('UpdateFilter'); } /** * Grants permission to update ec2 deep inspection configuration by delegated administrator for its associated member accounts * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UpdateOrgEc2DeepInspectionConfiguration.html */ toUpdateOrgEc2DeepInspectionConfiguration() { return this.to('UpdateOrgEc2DeepInspectionConfiguration'); } /** * Grants permission to update Amazon Inspector configuration settings for an AWS organization * * Access Level: Write * * https://docs.aws.amazon.com/inspector/v2/APIReference/API_UpdateOrganizationConfiguration.html */ toUpdateOrganizationConfiguration() { return this.to('UpdateOrganizationConfiguration'); } /** * Adds a resource of type Filter to the statement * * https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html * * @param ownerId - Identifier for the ownerId. * @param filterId - Identifier for the filterId. * @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() */ onFilter(ownerId, filterId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:inspector2:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:owner/${ownerId}/filter/${filterId}`); } /** * Adds a resource of type Finding to the statement * * https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html * * @param findingId - Identifier for the findingId. * @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. */ onFinding(findingId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:inspector2:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:finding/${findingId}`); } /** * Adds a resource of type CIS Scan Configuration to the statement * * https://docs.aws.amazon.com/inspector/latest/user/what-is-inspector.html * * @param ownerId - Identifier for the ownerId. * @param cISScanConfigurationId - Identifier for the cISScanConfigurationId. * @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() */ onCISScanConfiguration(ownerId, cISScanConfigurationId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:inspector2:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:owner/${ownerId}/cis-configuration/${cISScanConfigurationId}`); } /** * 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: * - .toCreateCisScanConfiguration() * - .toCreateFilter() * - .toTagResource() * - .toUpdateFilter() * * @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 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: * - .toCreateCisScanConfiguration() * - .toDeleteCisScanConfiguration() * - .toTagResource() * - .toUntagResource() * - .toUpdateCisScanConfiguration() * * Applies to resource types: * - Filter * - CIS Scan Configuration * * @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: * - .toCreateCisScanConfiguration() * - .toCreateFilter() * - .toTagResource() * - .toUntagResource() * - .toUpdateFilter() * * @param value The value(s) to check * @param operator Works with [string operators](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_String). **Default:** `StringLike` */ ifAwsTagKeys(value, operator) { return this.if(`aws:TagKeys`, value, operator ?? 'StringLike'); } } exports.Inspector2 = Inspector2; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zcGVjdG9yMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluc3BlY3RvcjIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQXlEO0FBRXpEOzs7O0dBSUc7QUFDSCxNQUFhLFVBQVcsU0FBUSx3QkFBZTtJQUc3Qzs7OztPQUlHO0lBQ0gsWUFBWSxHQUFZO1FBQ3RCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQVJOLGtCQUFhLEdBQUcsWUFBWSxDQUFDO1FBZ3JCMUIsb0JBQWUsR0FBb0I7WUFDM0MsS0FBSyxFQUFFO2dCQUNMLGlCQUFpQjtnQkFDakIsMENBQTBDO2dCQUMxQyxzQkFBc0I7Z0JBQ3RCLGtCQUFrQjtnQkFDbEIsNEJBQTRCO2dCQUM1QixjQUFjO2dCQUNkLHNCQUFzQjtnQkFDdEIsa0JBQWtCO2dCQUNsQiw0QkFBNEI7Z0JBQzVCLGNBQWM7Z0JBQ2QsU0FBUztnQkFDVCw4QkFBOEI7Z0JBQzlCLG9CQUFvQjtnQkFDcEIsUUFBUTtnQkFDUiw2QkFBNkI7Z0JBQzdCLG9CQUFvQjtnQkFDcEIsc0JBQXNCO2dCQUN0Qix5QkFBeUI7Z0JBQ3pCLGlCQUFpQjtnQkFDakIsZ0JBQWdCO2dCQUNoQiw0QkFBNEI7Z0JBQzVCLHFCQUFxQjtnQkFDckIsc0NBQXNDO2dCQUN0QyxxQkFBcUI7Z0JBQ3JCLGNBQWM7Z0JBQ2QseUNBQXlDO2dCQUN6QyxpQ0FBaUM7YUFDbEM7WUFDRCxJQUFJLEVBQUU7Z0JBQ0osdUJBQXVCO2dCQUN2QixxQkFBcUI7Z0JBQ3JCLHdCQUF3QjtnQkFDeEIsdUJBQXVCO2dCQUN2Qix1Q0FBdUM7Z0JBQ3ZDLG1DQUFtQztnQkFDbkMsa0JBQWtCO2dCQUNsQixrQkFBa0I7Z0JBQ2xCLDBCQUEwQjtnQkFDMUIsbUNBQW1DO2dCQUNuQyxrQkFBa0I7Z0JBQ2xCLHlCQUF5QjtnQkFDekIsV0FBVztnQkFDWCxlQUFlO2dCQUNmLHFCQUFxQjtnQkFDckIsdUJBQXVCO2FBQ3hCO1lBQ0QsSUFBSSxFQUFF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QUMsRUFBRSxDQUFDLG1CQUFvQixNQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7T0FjRztJQUNJLFlBQVksQ0FBQyxLQUF3QixFQUFFLFFBQTRCO1FBQ3hFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLFFBQVEsSUFBSSxZQUFZLENBQUMsQ0FBQztJQUNqRSxDQUFDO0NBQ0Y7QUF0MkJELGdDQXMyQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY2Nlc3NMZXZlbExpc3QgfSBmcm9tICcuLi8uLi9zaGFyZWQvYWNjZXNzLWxldmVsJztcbmltcG9ydCB7IFBvbGljeVN0YXRlbWVudCwgT3BlcmF0b3IgfSBmcm9tICcuLi8uLi9zaGFyZWQnO1xuXG4vKipcbiAqIFN0YXRlbWVudCBwcm92aWRlciBmb3Igc2VydmljZSBbaW5zcGVjdG9yMl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uaW5zcGVjdG9yMi5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIEluc3BlY3RvcjIgZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdpbnNwZWN0b3IyJztcblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtpbnNwZWN0b3IyXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hbWF6b25pbnNwZWN0b3IyLmh0bWwpLlxuICAgKlxuICAgKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHNpZD86IHN0cmluZykge1xuICAgIHN1cGVyKHNpZCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gYXNzb2NpYXRlIGFuIGFjY291bnQgd2l0aCBhbiBBbWF6b24gSW5zcGVjdG9yIGFkbWluaXN0cmF0b3IgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9Bc3NvY2lhdGVNZW1iZXIuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQXNzb2NpYXRlTWVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdBc3NvY2lhdGVNZW1iZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCBBbWF6b24gSW5zcGVjdG9yIGFjY291bnRzIGZvciBhbiBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW5zcGVjdG9yL3YyL0FQSVJlZmVyZW5jZS9BUElfQmF0Y2hHZXRBY2NvdW50U3RhdHVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0JhdGNoR2V0QWNjb3VudFN0YXR1cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQmF0Y2hHZXRBY2NvdW50U3RhdHVzJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgY29kZSBzbmlwcGV0IGluZm9ybWF0aW9uIGFib3V0IG9uZSBvciBtb3JlIGNvZGUgdnVsbmVyYWJpbGl0eSBmaW5kaW5nc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0JhdGNoR2V0Q29kZVNuaXBwZXQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQmF0Y2hHZXRDb2RlU25pcHBldCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQmF0Y2hHZXRDb2RlU25pcHBldCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxldCBhIGN1c3RvbWVyIGdldCBlbmhhbmNlZCB2dWxuZXJhYmlsaXR5IGludGVsbGlnZW5jZSBkZXRhaWxzIGZvciBmaW5kaW5nc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0JhdGNoR2V0RmluZGluZ0RldGFpbHMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQmF0Y2hHZXRGaW5kaW5nRGV0YWlscygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQmF0Y2hHZXRGaW5kaW5nRGV0YWlscycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGZyZWUgdHJpYWwgcGVyaW9kIGVsaWdpYmlsaXR5IGFib3V0IEFtYXpvbiBJbnNwZWN0b3IgYWNjb3VudHMgZm9yIGFuIGFjY291bnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9CYXRjaEdldEZyZWVUcmlhbEluZm8uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQmF0Y2hHZXRGcmVlVHJpYWxJbmZvKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdCYXRjaEdldEZyZWVUcmlhbEluZm8nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxlZ2F0ZWQgYWRtaW5pc3RyYXRvciB0byByZXRyaWV2ZSBlYzIgZGVlcCBpbnNwZWN0aW9uIHN0YXR1cyBvZiBtZW1iZXIgYWNjb3VudHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9CYXRjaEdldE1lbWJlckVjMkRlZXBJbnNwZWN0aW9uU3RhdHVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0JhdGNoR2V0TWVtYmVyRWMyRGVlcEluc3BlY3Rpb25TdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0JhdGNoR2V0TWVtYmVyRWMyRGVlcEluc3BlY3Rpb25TdGF0dXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byB1cGRhdGUgZWMyIGRlZXAgaW5zcGVjdGlvbiBzdGF0dXMgYnkgZGVsZWdhdGVkIGFkbWluaXN0cmF0b3IgZm9yIGl0cyBhc3NvY2lhdGVkIG1lbWJlciBhY2NvdW50c1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9CYXRjaFVwZGF0ZU1lbWJlckVjMkRlZXBJbnNwZWN0aW9uU3RhdHVzLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0JhdGNoVXBkYXRlTWVtYmVyRWMyRGVlcEluc3BlY3Rpb25TdGF0dXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0JhdGNoVXBkYXRlTWVtYmVyRWMyRGVlcEluc3BlY3Rpb25TdGF0dXMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjYW5jZWwgdGhlIGdlbmVyYXRpb24gb2YgYSBmaW5kaW5ncyByZXBvcnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW5zcGVjdG9yL3YyL0FQSVJlZmVyZW5jZS9BUElfQ2FuY2VsRmluZGluZ3NSZXBvcnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ2FuY2VsRmluZGluZ3NSZXBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NhbmNlbEZpbmRpbmdzUmVwb3J0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY2FuY2VsIHRoZSBnZW5lcmF0aW9uIG9mIGFuIFNCT00gcmVwb3J0XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0NhbmNlbFNib21FeHBvcnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ2FuY2VsU2JvbUV4cG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ2FuY2VsU2JvbUV4cG9ydCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhbmQgZGVmaW5lIHRoZSBzZXR0aW5ncyBmb3IgYSBDSVMgc2NhbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqIC0gLmlmQXdzUmVxdWVzdFRhZygpXG4gICAqIC0gLmlmQXdzVGFnS2V5cygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVDaXNTY2FuQ29uZmlndXJhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVDaXNTY2FuQ29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlQ2lzU2NhbkNvbmZpZ3VyYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBjcmVhdGUgYW5kIGRlZmluZSB0aGUgc2V0dGluZ3MgZm9yIGEgZmluZGluZ3MgZmlsdGVyXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXF1ZXN0VGFnKClcbiAgICogLSAuaWZBd3NUYWdLZXlzKClcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUZpbHRlci5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVGaWx0ZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUZpbHRlcicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJlcXVlc3QgdGhlIGdlbmVyYXRpb24gb2YgYSBmaW5kaW5ncyByZXBvcnRcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW5zcGVjdG9yL3YyL0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlRmluZGluZ3NSZXBvcnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvQ3JlYXRlRmluZGluZ3NSZXBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUZpbmRpbmdzUmVwb3J0Jyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmVxdWVzdCB0aGUgZ2VuZXJhdGlvbiBvZiBhbiBTQk9NIHJlcG9ydFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVTYm9tRXhwb3J0Lmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVNib21FeHBvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZVNib21FeHBvcnQnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBDSVMgc2NhbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogUG9zc2libGUgY29uZGl0aW9uczpcbiAgICogLSAuaWZBd3NSZXNvdXJjZVRhZygpXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9EZWxldGVDaXNTY2FuQ29uZmlndXJhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZWxldGVDaXNTY2FuQ29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlQ2lzU2NhbkNvbmZpZ3VyYXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSBmaW5kaW5ncyBmaWx0ZXJcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW5zcGVjdG9yL3YyL0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlRmlsdGVyLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZUZpbHRlcigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlRmlsdGVyJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIEFtYXpvbiBJbnNwZWN0b3IgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgYW4gQVdTIG9yZ2FuaXphdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0Rlc2NyaWJlT3JnYW5pemF0aW9uQ29uZmlndXJhdGlvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9EZXNjcmliZU9yZ2FuaXphdGlvbkNvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0Rlc2NyaWJlT3JnYW5pemF0aW9uQ29uZmlndXJhdGlvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRpc2FibGUgYW4gQW1hem9uIEluc3BlY3RvciBhY2NvdW50XG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0Rpc2FibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGlzYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGlzYWJsZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGRpc2FibGUgYW4gYWNjb3VudCBhcyB0aGUgZGVsZWdhdGVkIEFtYXpvbiBJbnNwZWN0b3IgYWRtaW5pc3RyYXRvciBhY2NvdW50IGZvciBhbiBBV1Mgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0Rpc2FibGVEZWxlZ2F0ZWRBZG1pbkFjY291bnQuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGlzYWJsZURlbGVnYXRlZEFkbWluQWNjb3VudCgpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGlzYWJsZURlbGVnYXRlZEFkbWluQWNjb3VudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGFuIEFtYXpvbiBJbnNwZWN0b3IgYWRtaW5pc3RyYXRvciBhY2NvdW50IHRvIGRpc2Fzc29jaWF0ZSBmcm9tIGFuIEluc3BlY3RvciBtZW1iZXIgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9EaXNhc3NvY2lhdGVNZW1iZXIuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGlzYXNzb2NpYXRlTWVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdEaXNhc3NvY2lhdGVNZW1iZXInKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgYW5kIHNwZWNpZnkgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgZm9yIGEgbmV3IEFtYXpvbiBJbnNwZWN0b3IgYWNjb3VudFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbnNwZWN0b3IvdjIvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGUuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRW5hYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdFbmFibGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBlbmFibGUgYW4gYWNjb3VudCBhcyB0aGUgZGVsZWdhdGVkIEFtYXpvbiBJbnNwZWN0b3IgYWRtaW5pc3RyYXRvciBhY2NvdW50IGZvciBhbiBBV1Mgb3JnYW5pemF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2luc3BlY3Rvci92Mi9BUElSZWZlcmVuY2UvQVBJX0VuYWJsZURlbGVnYXRlZEFkbWluQWNjb3VudC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9FbmFibGVEZWxlZ2F0ZWRBZG1pbkFjY291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0VuYWJsZURlbGVnYXRlZEFkbWluQWNjb3VudCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHJldHJpZXZlIGEgcmVwb3J0IGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gYWJvdXQgY29tcGxldGVkIENJUyBzY2Fuc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2