UNPKG

cdk-iam-floyd

Version:

AWS IAM policy statement generator with fluent interface for AWS CDK

232 lines 23.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NovaAct = void 0; const shared_1 = require("../../shared"); /** * Statement provider for service [nova-act](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonnovaact.html). * * @param sid [SID](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_sid.html) of the statement */ class NovaAct extends shared_1.PolicyStatement { /** * Grants permission to create a new AI task (act) within a session that can interact with tools and perform specific actions * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_CreateAct.html */ toCreateAct() { return this.to('CreateAct'); } /** * Grants permission to create a new session context within a workflow run to manage conversation state and acts * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_CreateSession.html */ toCreateSession() { return this.to('CreateSession'); } /** * Grants permission to create a new workflow definition template that can be used to execute multiple workflow runs * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_CreateWorkflowDefinition.html */ toCreateWorkflowDefinition() { return this.to('CreateWorkflowDefinition'); } /** * Grants permission to create a new execution instance of a workflow definition with specified parameters * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_CreateWorkflowRun.html */ toCreateWorkflowRun() { return this.to('CreateWorkflowRun'); } /** * Grants permission to delete a workflow definition and all associated resources * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_DeleteWorkflowDefinition.html */ toDeleteWorkflowDefinition() { return this.to('DeleteWorkflowDefinition'); } /** * Grants permission to terminate and clean up a workflow run, stopping all associated acts and sessions * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_DeleteWorkflowRun.html */ toDeleteWorkflowRun() { return this.to('DeleteWorkflowRun'); } /** * Grants permission to retrieve details and configuration of a specific workflow definition * * Access Level: Read * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_GetWorkflowDefinition.html */ toGetWorkflowDefinition() { return this.to('GetWorkflowDefinition'); } /** * Grants permission to retrieve the current state, configuration, and execution details of a workflow run * * Access Level: Read * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_GetWorkflowRun.html */ toGetWorkflowRun() { return this.to('GetWorkflowRun'); } /** * Grants permission to execute the next step of an act, processing tool call results and returning new tool calls if needed * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_InvokeActStep.html */ toInvokeActStep() { return this.to('InvokeActStep'); } /** * Grants permission to list all acts within a specific session with their current status and execution details * * Access Level: Read * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_ListActs.html */ toListActs() { return this.to('ListActs'); } /** * Grants permission to list all available AI models that can be used for workflow execution, including their status and compatibility information * * Access Level: Read * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_ListModels.html */ toListModels() { return this.to('ListModels'); } /** * Grants permission to list all sessions within a specific workflow run * * Access Level: Read * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_ListSessions.html */ toListSessions() { return this.to('ListSessions'); } /** * Grants permission to list all workflow definitions in your account with optional filtering and pagination * * Access Level: List * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_ListWorkflowDefinitions.html */ toListWorkflowDefinitions() { return this.to('ListWorkflowDefinitions'); } /** * Grants permission to list all workflow runs for a specific workflow definition with optional filtering and pagination * * Access Level: List * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_ListWorkflowRuns.html */ toListWorkflowRuns() { return this.to('ListWorkflowRuns'); } /** * Grants permission to update an existing act's configuration, status, or error information * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_UpdateAct.html */ toUpdateAct() { return this.to('UpdateAct'); } /** * Grants permission to update the configuration or state of an active workflow run * * Access Level: Write * * https://docs.aws.amazon.com/nova-act/latest/APIReference/API_UpdateWorkflowRun.html */ toUpdateWorkflowRun() { return this.to('UpdateWorkflowRun'); } /** * Adds a resource of type workflow-definition to the statement * * https://docs.aws.amazon.com/nova-act/latest/userguide/workflow-definition.html * * @param workflowDefinitionName - Identifier for the workflowDefinitionName. * @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. */ onWorkflowDefinition(workflowDefinitionName, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:nova-act:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:workflow-definition/${workflowDefinitionName}`); } /** * Adds a resource of type workflow-run to the statement * * https://docs.aws.amazon.com/nova-act/latest/userguide/workflow-run.html * * @param workflowDefinitionName - Identifier for the workflowDefinitionName. * @param workflowRunId - Identifier for the workflowRunId. * @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. */ onWorkflowRun(workflowDefinitionName, workflowRunId, account, region, partition) { return this.on(`arn:${partition ?? this.defaultPartition}:nova-act:${region ?? this.defaultRegion}:${account ?? this.defaultAccount}:workflow-definition/${workflowDefinitionName}/workflow-run/${workflowRunId}`); } /** * Statement provider for service [nova-act](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazonnovaact.html). * */ constructor(props) { super(props); this.servicePrefix = 'nova-act'; this.accessLevelList = { Write: [ 'CreateAct', 'CreateSession', 'CreateWorkflowDefinition', 'CreateWorkflowRun', 'DeleteWorkflowDefinition', 'DeleteWorkflowRun', 'InvokeActStep', 'UpdateAct', 'UpdateWorkflowRun' ], Read: [ 'GetWorkflowDefinition', 'GetWorkflowRun', 'ListActs', 'ListModels', 'ListSessions' ], List: [ 'ListWorkflowDefinitions', 'ListWorkflowRuns' ] }; } } exports.NovaAct = NovaAct; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm92YWFjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm5vdmFhY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EseUNBQStDO0FBRy9DOzs7O0dBSUc7QUFDSCxNQUFhLE9BQVEsU0FBUSx3QkFBZTtJQUcxQzs7Ozs7O09BTUc7SUFDSSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksZUFBZTtRQUNwQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLDBCQUEwQjtRQUMvQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsMEJBQTBCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSwwQkFBMEI7UUFDL0IsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLG1CQUFtQjtRQUN4QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksdUJBQXVCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxnQkFBZ0I7UUFDckIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGVBQWU7UUFDcEIsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxZQUFZO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksY0FBYztRQUNuQixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLHlCQUF5QjtRQUM5QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksa0JBQWtCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksbUJBQW1CO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUEyQkQ7Ozs7Ozs7OztPQVNHO0lBQ0ksb0JBQW9CLENBQUMsc0JBQThCLEVBQUUsT0FBZ0IsRUFBRSxNQUFlLEVBQUUsU0FBa0I7UUFDL0csT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQVEsU0FBUyxJQUFJLElBQUksQ0FBQyxnQkFBaUIsYUFBYyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWMsSUFBSyxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWUsd0JBQXlCLHNCQUF1QixFQUFFLENBQUMsQ0FBQztJQUMvTCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNJLGFBQWEsQ0FBQyxzQkFBOEIsRUFBRSxhQUFxQixFQUFFLE9BQWdCLEVBQUUsTUFBZSxFQUFFLFNBQWtCO1FBQy9ILE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFRLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWlCLGFBQWMsTUFBTSxJQUFJLElBQUksQ0FBQyxhQUFjLElBQUssT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFlLHdCQUF5QixzQkFBdUIsaUJBQWtCLGFBQWMsRUFBRSxDQUFDLENBQUM7SUFDL04sQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksS0FBZ0M7UUFDMUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBN09SLGtCQUFhLEdBQUcsVUFBVSxDQUFDO1FBa0x4QixvQkFBZSxHQUFvQjtZQUMzQyxLQUFLLEVBQUU7Z0JBQ0wsV0FBVztnQkFDWCxlQUFlO2dCQUNmLDBCQUEwQjtnQkFDMUIsbUJBQW1CO2dCQUNuQiwwQkFBMEI7Z0JBQzFCLG1CQUFtQjtnQkFDbkIsZUFBZTtnQkFDZixXQUFXO2dCQUNYLG1CQUFtQjthQUNwQjtZQUNELElBQUksRUFBRTtnQkFDSix1QkFBdUI7Z0JBQ3ZCLGdCQUFnQjtnQkFDaEIsVUFBVTtnQkFDVixZQUFZO2dCQUNaLGNBQWM7YUFDZjtZQUNELElBQUksRUFBRTtnQkFDSix5QkFBeUI7Z0JBQ3pCLGtCQUFrQjthQUNuQjtTQUNGLENBQUM7SUFxQ0YsQ0FBQztDQUNGO0FBaFBELDBCQWdQQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjY2Vzc0xldmVsTGlzdCB9IGZyb20gJy4uLy4uL3NoYXJlZC9hY2Nlc3MtbGV2ZWwnO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkJztcbmltcG9ydCB7IGF3c19pYW0gYXMgaWFtIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5cbi8qKlxuICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtub3ZhLWFjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9ubm92YWFjdC5odG1sKS5cbiAqXG4gKiBAcGFyYW0gc2lkIFtTSURdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9JQU0vbGF0ZXN0L1VzZXJHdWlkZS9yZWZlcmVuY2VfcG9saWNpZXNfZWxlbWVudHNfc2lkLmh0bWwpIG9mIHRoZSBzdGF0ZW1lbnRcbiAqL1xuZXhwb3J0IGNsYXNzIE5vdmFBY3QgZXh0ZW5kcyBQb2xpY3lTdGF0ZW1lbnQge1xuICBwdWJsaWMgc2VydmljZVByZWZpeCA9ICdub3ZhLWFjdCc7XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBBSSB0YXNrIChhY3QpIHdpdGhpbiBhIHNlc3Npb24gdGhhdCBjYW4gaW50ZXJhY3Qgd2l0aCB0b29scyBhbmQgcGVyZm9ybSBzcGVjaWZpYyBhY3Rpb25zXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0NyZWF0ZUFjdC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVBY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0NyZWF0ZUFjdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBhIG5ldyBzZXNzaW9uIGNvbnRleHQgd2l0aGluIGEgd29ya2Zsb3cgcnVuIHRvIG1hbmFnZSBjb252ZXJzYXRpb24gc3RhdGUgYW5kIGFjdHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbm92YS1hY3QvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlU2Vzc2lvbi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVTZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdDcmVhdGVTZXNzaW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IHdvcmtmbG93IGRlZmluaXRpb24gdGVtcGxhdGUgdGhhdCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIG11bHRpcGxlIHdvcmtmbG93IHJ1bnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbm92YS1hY3QvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfQ3JlYXRlV29ya2Zsb3dEZWZpbml0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0NyZWF0ZVdvcmtmbG93RGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlV29ya2Zsb3dEZWZpbml0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgbmV3IGV4ZWN1dGlvbiBpbnN0YW5jZSBvZiBhIHdvcmtmbG93IGRlZmluaXRpb24gd2l0aCBzcGVjaWZpZWQgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ub3ZhLWFjdC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9DcmVhdGVXb3JrZmxvd1J1bi5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9DcmVhdGVXb3JrZmxvd1J1bigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnQ3JlYXRlV29ya2Zsb3dSdW4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBkZWxldGUgYSB3b3JrZmxvdyBkZWZpbml0aW9uIGFuZCBhbGwgYXNzb2NpYXRlZCByZXNvdXJjZXNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbm92YS1hY3QvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlV29ya2Zsb3dEZWZpbml0aW9uLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0RlbGV0ZVdvcmtmbG93RGVmaW5pdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50bygnRGVsZXRlV29ya2Zsb3dEZWZpbml0aW9uJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gdGVybWluYXRlIGFuZCBjbGVhbiB1cCBhIHdvcmtmbG93IHJ1biwgc3RvcHBpbmcgYWxsIGFzc29jaWF0ZWQgYWN0cyBhbmQgc2Vzc2lvbnNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBXcml0ZVxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbm92YS1hY3QvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfRGVsZXRlV29ya2Zsb3dSdW4uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvRGVsZXRlV29ya2Zsb3dSdW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0RlbGV0ZVdvcmtmbG93UnVuJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gcmV0cmlldmUgZGV0YWlscyBhbmQgY29uZmlndXJhdGlvbiBvZiBhIHNwZWNpZmljIHdvcmtmbG93IGRlZmluaXRpb25cbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ub3ZhLWFjdC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9HZXRXb3JrZmxvd0RlZmluaXRpb24uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0V29ya2Zsb3dEZWZpbml0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdHZXRXb3JrZmxvd0RlZmluaXRpb24nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byByZXRyaWV2ZSB0aGUgY3VycmVudCBzdGF0ZSwgY29uZmlndXJhdGlvbiwgYW5kIGV4ZWN1dGlvbiBkZXRhaWxzIG9mIGEgd29ya2Zsb3cgcnVuXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogUmVhZFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbm92YS1hY3QvbGF0ZXN0L0FQSVJlZmVyZW5jZS9BUElfR2V0V29ya2Zsb3dSdW4uaHRtbFxuICAgKi9cbiAgcHVibGljIHRvR2V0V29ya2Zsb3dSdW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0dldFdvcmtmbG93UnVuJyk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHBlcm1pc3Npb24gdG8gZXhlY3V0ZSB0aGUgbmV4dCBzdGVwIG9mIGFuIGFjdCwgcHJvY2Vzc2luZyB0b29sIGNhbGwgcmVzdWx0cyBhbmQgcmV0dXJuaW5nIG5ldyB0b29sIGNhbGxzIGlmIG5lZWRlZFxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFdyaXRlXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ub3ZhLWFjdC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9JbnZva2VBY3RTdGVwLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0ludm9rZUFjdFN0ZXAoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0ludm9rZUFjdFN0ZXAnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCBhY3RzIHdpdGhpbiBhIHNwZWNpZmljIHNlc3Npb24gd2l0aCB0aGVpciBjdXJyZW50IHN0YXR1cyBhbmQgZXhlY3V0aW9uIGRldGFpbHNcbiAgICpcbiAgICogQWNjZXNzIExldmVsOiBSZWFkXG4gICAqXG4gICAqIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9ub3ZhLWFjdC9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9MaXN0QWN0cy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0QWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdEFjdHMnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudHMgcGVybWlzc2lvbiB0byBsaXN0IGFsbCBhdmFpbGFibGUgQUkgbW9kZWxzIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHdvcmtmbG93IGV4ZWN1dGlvbiwgaW5jbHVkaW5nIHRoZWlyIHN0YXR1cyBhbmQgY29tcGF0aWJpbGl0eSBpbmZvcm1hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RNb2RlbHMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdE1vZGVscygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdE1vZGVscycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWxsIHNlc3Npb25zIHdpdGhpbiBhIHNwZWNpZmljIHdvcmtmbG93IHJ1blxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IFJlYWRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RTZXNzaW9ucy5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9MaXN0U2Vzc2lvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ0xpc3RTZXNzaW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWxsIHdvcmtmbG93IGRlZmluaXRpb25zIGluIHlvdXIgYWNjb3VudCB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RXb3JrZmxvd0RlZmluaXRpb25zLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b0xpc3RXb3JrZmxvd0RlZmluaXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdMaXN0V29ya2Zsb3dEZWZpbml0aW9ucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIGxpc3QgYWxsIHdvcmtmbG93IHJ1bnMgZm9yIGEgc3BlY2lmaWMgd29ya2Zsb3cgZGVmaW5pdGlvbiB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvblxuICAgKlxuICAgKiBBY2Nlc3MgTGV2ZWw6IExpc3RcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0xpc3RXb3JrZmxvd1J1bnMuaHRtbFxuICAgKi9cbiAgcHVibGljIHRvTGlzdFdvcmtmbG93UnVucygpIHtcbiAgICByZXR1cm4gdGhpcy50bygnTGlzdFdvcmtmbG93UnVucycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSBhbiBleGlzdGluZyBhY3QncyBjb25maWd1cmF0aW9uLCBzdGF0dXMsIG9yIGVycm9yIGluZm9ybWF0aW9uXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VwZGF0ZUFjdC5odG1sXG4gICAqL1xuICBwdWJsaWMgdG9VcGRhdGVBY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMudG8oJ1VwZGF0ZUFjdCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyBwZXJtaXNzaW9uIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBvciBzdGF0ZSBvZiBhbiBhY3RpdmUgd29ya2Zsb3cgcnVuXG4gICAqXG4gICAqIEFjY2VzcyBMZXZlbDogV3JpdGVcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1VwZGF0ZVdvcmtmbG93UnVuLmh0bWxcbiAgICovXG4gIHB1YmxpYyB0b1VwZGF0ZVdvcmtmbG93UnVuKCkge1xuICAgIHJldHVybiB0aGlzLnRvKCdVcGRhdGVXb3JrZmxvd1J1bicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFjY2Vzc0xldmVsTGlzdDogQWNjZXNzTGV2ZWxMaXN0ID0ge1xuICAgIFdyaXRlOiBbXG4gICAgICAnQ3JlYXRlQWN0JyxcbiAgICAgICdDcmVhdGVTZXNzaW9uJyxcbiAgICAgICdDcmVhdGVXb3JrZmxvd0RlZmluaXRpb24nLFxuICAgICAgJ0NyZWF0ZVdvcmtmbG93UnVuJyxcbiAgICAgICdEZWxldGVXb3JrZmxvd0RlZmluaXRpb24nLFxuICAgICAgJ0RlbGV0ZVdvcmtmbG93UnVuJyxcbiAgICAgICdJbnZva2VBY3RTdGVwJyxcbiAgICAgICdVcGRhdGVBY3QnLFxuICAgICAgJ1VwZGF0ZVdvcmtmbG93UnVuJ1xuICAgIF0sXG4gICAgUmVhZDogW1xuICAgICAgJ0dldFdvcmtmbG93RGVmaW5pdGlvbicsXG4gICAgICAnR2V0V29ya2Zsb3dSdW4nLFxuICAgICAgJ0xpc3RBY3RzJyxcbiAgICAgICdMaXN0TW9kZWxzJyxcbiAgICAgICdMaXN0U2Vzc2lvbnMnXG4gICAgXSxcbiAgICBMaXN0OiBbXG4gICAgICAnTGlzdFdvcmtmbG93RGVmaW5pdGlvbnMnLFxuICAgICAgJ0xpc3RXb3JrZmxvd1J1bnMnXG4gICAgXVxuICB9O1xuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSB3b3JrZmxvdy1kZWZpbml0aW9uIHRvIHRoZSBzdGF0ZW1lbnRcbiAgICpcbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL25vdmEtYWN0L2xhdGVzdC91c2VyZ3VpZGUvd29ya2Zsb3ctZGVmaW5pdGlvbi5odG1sXG4gICAqXG4gICAqIEBwYXJhbSB3b3JrZmxvd0RlZmluaXRpb25OYW1lIC0gSWRlbnRpZmllciBmb3IgdGhlIHdvcmtmbG93RGVmaW5pdGlvbk5hbWUuXG4gICAqIEBwYXJhbSBhY2NvdW50IC0gQWNjb3VudCBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgYWNjb3VudC5cbiAgICogQHBhcmFtIHJlZ2lvbiAtIFJlZ2lvbiBvZiB0aGUgcmVzb3VyY2U7IGRlZmF1bHRzIHRvIGAqYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcmVnaW9uLlxuICAgKiBAcGFyYW0gcGFydGl0aW9uIC0gUGFydGl0aW9uIG9mIHRoZSBBV1MgYWNjb3VudCBbYXdzLCBhd3MtY24sIGF3cy11cy1nb3ZdOyBkZWZhdWx0cyB0byBgYXdzYCwgdW5sZXNzIHVzaW5nIHRoZSBDREssIHdoZXJlIHRoZSBkZWZhdWx0IGlzIHRoZSBjdXJyZW50IFN0YWNrJ3MgcGFydGl0aW9uLlxuICAgKi9cbiAgcHVibGljIG9uV29ya2Zsb3dEZWZpbml0aW9uKHdvcmtmbG93RGVmaW5pdGlvbk5hbWU6IHN0cmluZywgYWNjb3VudD86IHN0cmluZywgcmVnaW9uPzogc3RyaW5nLCBwYXJ0aXRpb24/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5vbihgYXJuOiR7IHBhcnRpdGlvbiA/PyB0aGlzLmRlZmF1bHRQYXJ0aXRpb24gfTpub3ZhLWFjdDokeyByZWdpb24gPz8gdGhpcy5kZWZhdWx0UmVnaW9uIH06JHsgYWNjb3VudCA/PyB0aGlzLmRlZmF1bHRBY2NvdW50IH06d29ya2Zsb3ctZGVmaW5pdGlvbi8keyB3b3JrZmxvd0RlZmluaXRpb25OYW1lIH1gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVzb3VyY2Ugb2YgdHlwZSB3b3JrZmxvdy1ydW4gdG8gdGhlIHN0YXRlbWVudFxuICAgKlxuICAgKiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbm92YS1hY3QvbGF0ZXN0L3VzZXJndWlkZS93b3JrZmxvdy1ydW4uaHRtbFxuICAgKlxuICAgKiBAcGFyYW0gd29ya2Zsb3dEZWZpbml0aW9uTmFtZSAtIElkZW50aWZpZXIgZm9yIHRoZSB3b3JrZmxvd0RlZmluaXRpb25OYW1lLlxuICAgKiBAcGFyYW0gd29ya2Zsb3dSdW5JZCAtIElkZW50aWZpZXIgZm9yIHRoZSB3b3JrZmxvd1J1bklkLlxuICAgKiBAcGFyYW0gYWNjb3VudCAtIEFjY291bnQgb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIGFjY291bnQuXG4gICAqIEBwYXJhbSByZWdpb24gLSBSZWdpb24gb2YgdGhlIHJlc291cmNlOyBkZWZhdWx0cyB0byBgKmAsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHJlZ2lvbi5cbiAgICogQHBhcmFtIHBhcnRpdGlvbiAtIFBhcnRpdGlvbiBvZiB0aGUgQVdTIGFjY291bnQgW2F3cywgYXdzLWNuLCBhd3MtdXMtZ292XTsgZGVmYXVsdHMgdG8gYGF3c2AsIHVubGVzcyB1c2luZyB0aGUgQ0RLLCB3aGVyZSB0aGUgZGVmYXVsdCBpcyB0aGUgY3VycmVudCBTdGFjaydzIHBhcnRpdGlvbi5cbiAgICovXG4gIHB1YmxpYyBvbldvcmtmbG93UnVuKHdvcmtmbG93RGVmaW5pdGlvbk5hbWU6IHN0cmluZywgd29ya2Zsb3dSdW5JZDogc3RyaW5nLCBhY2NvdW50Pzogc3RyaW5nLCByZWdpb24/OiBzdHJpbmcsIHBhcnRpdGlvbj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLm9uKGBhcm46JHsgcGFydGl0aW9uID8/IHRoaXMuZGVmYXVsdFBhcnRpdGlvbiB9Om5vdmEtYWN0OiR7IHJlZ2lvbiA/PyB0aGlzLmRlZmF1bHRSZWdpb24gfTokeyBhY2NvdW50ID8/IHRoaXMuZGVmYXVsdEFjY291bnQgfTp3b3JrZmxvdy1kZWZpbml0aW9uLyR7IHdvcmtmbG93RGVmaW5pdGlvbk5hbWUgfS93b3JrZmxvdy1ydW4vJHsgd29ya2Zsb3dSdW5JZCB9YCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhdGVtZW50IHByb3ZpZGVyIGZvciBzZXJ2aWNlIFtub3ZhLWFjdF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9ubm92YWFjdC5odG1sKS5cbiAgICpcbiAgICovXG4gIGNvbnN0cnVjdG9yKHByb3BzPzogaWFtLlBvbGljeVN0YXRlbWVudFByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG59XG4iXX0=