@cdklabs/cdk-appmod-catalog-blueprints 1.12.0 → 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +3 -3
- package/README.md +184 -77
- package/lib/document-processing/adapter/queued-s3-adapter.js +1 -1
- package/lib/document-processing/agentic-document-processing.js +1 -1
- package/lib/document-processing/base-document-processing.js +1 -1
- package/lib/document-processing/bedrock-document-processing.js +1 -1
- package/lib/document-processing/default-document-processing-config.js +1 -1
- package/lib/framework/agents/base-agent.js +1 -1
- package/lib/framework/agents/batch-agent.js +1 -1
- package/lib/framework/agents/default-agent-config.js +1 -1
- package/lib/framework/agents/interactive-agent.js +9 -9
- package/lib/framework/agents/knowledge-base/base-knowledge-base.js +1 -1
- package/lib/framework/agents/knowledge-base/bedrock-knowledge-base.js +1 -1
- package/lib/framework/bedrock/bedrock.js +1 -1
- package/lib/framework/custom-resource/default-runtimes.js +1 -1
- package/lib/framework/foundation/access-log.js +1 -1
- package/lib/framework/foundation/eventbridge-broker.js +1 -1
- package/lib/framework/foundation/network.js +1 -1
- package/lib/utilities/data-loader.js +1 -1
- package/lib/utilities/lambda-iam-utils.js +1 -1
- package/lib/utilities/observability/cloudfront-distribution-observability-property-injector.js +1 -1
- package/lib/utilities/observability/cloudwatch-transaction-search.js +1 -1
- package/lib/utilities/observability/default-observability-config.js +1 -1
- package/lib/utilities/observability/lambda-observability-property-injector.js +1 -1
- package/lib/utilities/observability/log-group-data-protection-utils.js +1 -1
- package/lib/utilities/observability/powertools-config.js +1 -1
- package/lib/utilities/observability/state-machine-observability-property-injector.js +1 -1
- package/lib/webapp/frontend-construct.js +1 -1
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -4129,7 +4129,7 @@
|
|
|
4129
4129
|
},
|
|
4130
4130
|
"name": "@cdklabs/cdk-appmod-catalog-blueprints",
|
|
4131
4131
|
"readme": {
|
|
4132
|
-
"markdown": "# AppMod Catalog Blueprints\n\n[](https://github.com/cdklabs/cdk-appmod-catalog-blueprints)\n[](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/)\n[](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints/)\n\nApplication Modernization (AppMod) Catalog Blueprints is a comprehensive library of use case-driven infrastructure solution blueprints built using AWS well-architected best practices. Designed as composable multi-layered building blocks using [AWS Cloud Development Kit](https://aws.amazon.com/cdk/) (CDK) [L3 constructs](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html), these blueprints offer use case-driven solutions with multiple implementation pathways and industry-specific implementations to accelerate serverless development and modernization on AWS.\n\n**Key Benefits:**\n- **Use case-driven solutions**: Purpose-built blueprints for common business scenarios like document processing, web applications, and AI workflows, with industry-specific implementations like insurance claims processing\n- **Multi-layered approach**: Infrastructure Foundation → General Use Cases → Industry Examples, allowing you to start with proven patterns and customize as needed.\n- **Composable architecture**: Mix and match independent components with standardized interfaces\n- **Enterprise-ready**: Built-in security, compliance, and AWS Well-Architected best practices\n- **Multi-language support**: Available in TypeScript, Python, Java, and .NET via [JSII](https://aws.github.io/jsii/)\n\n## How to Use This Library\n\nGet started by exploring the [use case constructs](use-cases) and deployable [examples](examples). Learn more from [documentation](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/) and [Construct Hub](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints).\n\n| Approach | Best For | Get Started |\n|----------|----------|-------------|\n| **🚀 Rapid Deployment** | Quick evaluation, immediate solutions, proof-of-concepts | Use [examples](./examples/) - deploy complete solutions in minutes with sensible defaults and AWS Well-Architected best practices |\n| **🔧 Custom Development** | Specific requirements, enterprise integration, tailored solutions | Use [individual constructs](./use-cases/) - override defaults, inject custom logic, configure for your environment |\n\n## Use Case Building Blocks\n\n### Core Use Cases\n\n| Use Case | Description | Quick Deploy Examples |\n|----------|-------------|----------------------|\n| **[Document Processing](./use-cases/document-processing/)** | Intelligent document processing workflows with classification, extraction, and agentic capabilities | • [Bedrock Document Processing](./examples/document-processing/bedrock-document-processing/)<br/>• [Agentic Document Processing](./examples/document-processing/agentic-document-processing/)<br/>• [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |\n| **[Web Application](./use-cases/webapp/)** | Static web application hosting with global CDN, security headers, and SPA support | • [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |\n\n### Foundation and Utilities\n\n| Component | Description |\n|-----------|-------------|\n| **[Agentic AI Framework](./use-cases/framework/agents/)** | Composable enterprise framework for building intelligent AI agents that can be mixed and matched across diverse use cases - from document processing to conversational AI |\n| **[Infrastructure Foundation](./use-cases/framework/foundation/)** | Core infrastructure components including VPC networking, access logging, and EventBridge integration |\n| **[Observability & Monitoring](./use-cases/utilities/#observability)** | Comprehensive monitoring, logging, and alerting with automatic property injection and Lambda Powertools integration |\n| **[Data Masking](./use-cases/utilities/#data-masking)** | Lambda layer for data masking and PII protection in serverless applications |\n\n## Getting Started\n\n### Environment Setup\n```bash\n# Configure AWS credentials and region\naws configure\n# OR set AWS profile: export AWS_PROFILE=your-profile-name\n\n# Bootstrap your AWS environment (one-time setup)\nnpx cdk bootstrap\n```\n\n### Quick Deploy (Complete Solutions)\nDeploy working examples in minutes for immediate value:\n\n```bash\n# Clone the repository\ngit clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git\n\n# Deploy complete insurance claims processing solution\ncd examples/document-processing/doc-processing-fullstack-webapp\nnpm install && npm run deploy\n# Full AI-powered solution with web interface deployed\n\n# Or deploy basic document processing\ncd examples/document-processing/bedrock-document-processing\nnpm install && npm run deploy\n```\n\n### Using Individual Constructs\nAdd to your existing CDK projects for custom solutions:\n\n```bash\n# Install the library\nnpm install @cdklabs/appmod-catalog-blueprints\n\n# Use in your CDK code\nimport { AgenticDocumentProcessing, WebApp } from '@cdklabs/appmod-catalog-blueprints';\n\nconst docProcessor = new AgenticDocumentProcessing(this, 'Processor', {\n agentDefinition: {\n bedrockModel: { useCrossRegionInference: true },\n systemPrompt: myPrompt,\n tools: [myTools]\n }\n});\n```\n\n## Key Design Principles\n\nAppMod Catalog Blueprints is built on Object-Oriented Programming (OOP) principles, providing a structured approach to infrastructure development through core design concepts:\n\n### Composable Architecture\n\nBuild complex enterprise systems by combining independent, reusable components with standardized interfaces.\n\n- **Independent components** with clear interfaces and loose coupling for maximum flexibility\n- **Mix and match building blocks** to create custom solutions across different contexts and use cases\n- **Scalable composition** that maintains consistency while enabling incremental adoption and gradual modernization\n\n### Multi-Layered Building Blocks Architecture\n\nOur blueprints use a multi-layered architecture that bridges the gap between business requirements and technical implementation:\n\n| Layer | Implementation Type | Purpose | Key Features |\n|-------|-------------------|---------|--------------|\n| **Infrastructure Foundation** | Abstract base classes | Shared infrastructure components and common services | • Standardized interfaces and contracts<br/>• Extensible foundation for custom implementations |\n| **General Use Case Implementation** | Concrete implementation classes | Implementations for common patterns across industries | • Configurable parameters for different environments<br/>• Abstract method implementations with general-purpose solutions |\n| **Industry-Aligned Implementation** | Configured implementation examples | Pre-configured solutions for specific business domains | • Industry-specific validation rules and workflows<br/>• Built-in compliance requirements and domain expertise |\n\n### Security & Compliance\n\nAll components include enterprise-grade security by default:\n- **CDK Nag Integration**: Automated security compliance checking\n- **AWS Well-Architected**: Security, reliability, and performance best practices\n- **Encryption & IAM**: At-rest/in-transit encryption with least-privilege access\n- **Compliance Reports**: Generate reports with `npm test -- --testPathPattern=\"nag.test.ts\"`\n\n## Contributing\n\nSee [CONTRIBUTING.md](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/CONTRIBUTING.md) for detailed guidelines on how to contribute to this project.\n\n## Disclaimer\nThese application solutions are not supported products in their own right, but examples to help our customers use our products from their applications. As our customer, any applications you integrate these examples in should be thoroughly tested, secured, and optimized according to your business's security standards before deploying to production or handling production workloads.\n\n## License\n\nApache License 2.0 - see [LICENSE](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/LICENSE) file for details.\n"
|
|
4132
|
+
"markdown": "# AppMod Catalog Blueprints\n\n> **Build customizable, well-architected applications on AWS in minutes, not months.**\n\n[](https://github.com/cdklabs/cdk-appmod-catalog-blueprints)\n[](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints/)\n[](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/)\n[](https://www.npmjs.com/package/@cdklabs/cdk-appmod-catalog-blueprints)\n[](https://www.npmjs.com/package/@cdklabs/cdk-appmod-catalog-blueprints)\n[](https://pypi.org/project/appmod-catalog-blueprints/)\n[](https://pepy.tech/project/appmod-catalog-blueprints)\n[](https://www.nuget.org/packages/CdklabsAppmodCatalogBlueprints)\n[](https://www.nuget.org/packages/CdklabsAppmodCatalogBlueprints)\n[](https://central.sonatype.com/artifact/io.github.cdklabs/appmod-catalog-blueprints)\n\nApplication Modernization (AppMod) Catalog Blueprints is a comprehensive library of **use case-driven infrastructure blueprints** and **industry-aligned solutions** built on AWS Well-Architected best practices. Designed as composable, multi-layered [AWS CDK](https://aws.amazon.com/cdk/) [L3 constructs](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html), these blueprints accelerate serverless development and modernization with multiple implementation pathways — from ready-to-deploy solutions to fully customizable building blocks.\n\n**Why This Library?**\n- **Use case-driven**: Purpose-built for real business problems — AI workflows, document processing, event-driven architectures, web applications\n- **Multi-layered approach**: Infrastructure Foundation → General Use Cases → Industry Solutions — start with proven patterns, customize as needed\n- **Composable architecture**: Mix and match independent components with standardized interfaces\n- **Enterprise-ready security**: Built-in compliance, encryption, least-privilege IAM, and CDK Nag validation\n- **Multi-language**: TypeScript, Python, Java, .NET via [JSII](https://aws.github.io/jsii/)\n\n---\n\n## Deploy in 3 Commands\n\nPick any solution from [the catalog below](#what-you-can-build) and deploy:\n\n```bash\ngit clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git\ncd cdk-appmod-catalog-blueprints/examples/chatbot/customer-service-chatbot # or any other example\nnpm install && npm run deploy\n```\n\n**That's it.** In this example, you now have a well-architected AI chatbot with streaming, authentication, and a React frontend. Swap the path for any other solution — fraud detection, document processing, RAG support, and more.\n\n---\n\n## Two Ways to Use This Library\n\n| Approach | Best For | Get Started |\n|----------|----------|-------------|\n| **🚀 Deploy a Solution** | Quick evaluation, immediate value, proof-of-concepts | Pick from [ready-to-deploy solutions](#what-you-can-build) below — deploy in minutes with sensible defaults |\n| **🔧 Build Custom** | Specific requirements, enterprise integration, tailored applications | Use [individual constructs](#building-blocks) — import into your CDK project, override defaults, inject custom logic |\n\n---\n\n## What You Can Build\n\n### AI Chatbots & Assistants\n\n| Solution | What It Does | Constructs Used |\n|----------|--------------|-----------------|\n| [**Customer Service Chatbot**](./examples/chatbot/customer-service-chatbot/) | Real-time chatbot with streaming and session management | [InteractiveAgent](./use-cases/framework/agents/), [Frontend](./use-cases/webapp/) |\n| [**Retail Banking Chatbot**](./examples/chatbot/retail-banking-chatbot/) | Banking chatbot with RAG knowledge base and transaction lookup | [InteractiveAgent](./use-cases/framework/agents/), [BedrockKnowledgeBase](./use-cases/framework/agents/knowledge-base/), [Frontend](./use-cases/webapp/) |\n| [**Retail Banking Chatbot (AgentCore)**](./examples/chatbot/retail-banking-chatbot-agentcore/) | High-availability banking bot on AgentCore Runtime | [InteractiveAgent](./use-cases/framework/agents/), [BedrockKnowledgeBase](./use-cases/framework/agents/knowledge-base/) |\n| [**RAG Customer Support**](./examples/rag-customer-support/) | Knowledge-powered Q&A for e-commerce support | [BatchAgent](./use-cases/framework/agents/), [BedrockKnowledgeBase](./use-cases/framework/agents/knowledge-base/) |\n\n### Intelligent Document Processing\n\n| Solution | What It Does | Constructs Used |\n|----------|--------------|-----------------|\n| [**Insurance Claims Portal**](./examples/document-processing/doc-processing-fullstack-webapp/) | End-to-end claims processing with web UI | [AgenticDocumentProcessing](./use-cases/document-processing/), [Frontend](./use-cases/webapp/) |\n| [**Fraud Detection**](./examples/document-processing/fraud-detection/) | AI-powered document fraud analysis with risk scoring | [AgenticDocumentProcessing](./use-cases/document-processing/) |\n| [**Document Summarization**](./examples/document-processing/summarization-pipeline/) | Multi-format summarization with semantic search | [BedrockDocumentProcessing](./use-cases/document-processing/) |\n| [**Agentic Document Processing**](./examples/document-processing/agentic-document-processing/) | Advanced document processing with AI reasoning | [AgenticDocumentProcessing](./use-cases/document-processing/) |\n| [**Bedrock Document Processing**](./examples/document-processing/bedrock-document-processing/) | Document classification and extraction pipeline | [BedrockDocumentProcessing](./use-cases/document-processing/) |\n| [**Minimal Document Processing**](./examples/document-processing/minimal-bedrock-doc-processing/) | Zero-config document processing starter | [BedrockDocumentProcessing](./use-cases/document-processing/) |\n\n---\n\n## Building Blocks\n\nUse individual constructs to build custom applications:\n\n```bash\nnpm install @cdklabs/cdk-appmod-catalog-blueprints\n```\n\n```typescript\nimport { InteractiveAgent } from '@cdklabs/cdk-appmod-catalog-blueprints';\nimport { Asset } from 'aws-cdk-lib/aws-s3-assets';\n\nnew InteractiveAgent(this, 'MyChatbot', {\n agentName: 'support-bot',\n agentDefinition: {\n bedrockModel: { useCrossRegionInference: true },\n systemPrompt: new Asset(this, 'Prompt', { path: './prompt.txt' }),\n },\n});\n```\n\n### Available Constructs\n\n| Construct | What It Does |\n|-----------|--------------|\n| [**InteractiveAgent**](./use-cases/framework/agents/) | Real-time chatbots with SSE streaming, sessions, and auth |\n| [**BatchAgent**](./use-cases/framework/agents/) | Async AI processing for document analysis |\n| [**BaseAgent**](./use-cases/framework/agents/) | Abstract base for custom agent implementations |\n| [**AgenticDocumentProcessing**](./use-cases/document-processing/) | Document workflows with AI agents and tools |\n| [**BedrockDocumentProcessing**](./use-cases/document-processing/) | Document classification and extraction |\n| [**BaseDocumentProcessing**](./use-cases/document-processing/) | Abstract base for custom document processing |\n| [**BedrockKnowledgeBase**](./use-cases/framework/agents/knowledge-base/) | RAG retrieval with access control |\n| [**Frontend**](./use-cases/webapp/) | Static web hosting with CloudFront CDN |\n\n### Foundation & Utilities\n\n| Component | What It Does |\n|-----------|--------------|\n| [**Network**](./use-cases/framework/foundation/) | VPC with subnets and endpoints |\n| [**Observability**](./use-cases/utilities/) | Logging, tracing, monitoring with Lambda Powertools |\n| [**DataMasking**](./use-cases/utilities/) | PII protection Lambda layer |\n\n---\n\n## Architecture\n\n### How It Works\n\n```\n┌─────────────────────────────────────────────────────────────────────┐\n│ Your Application │\n├─────────────────────────────────────────────────────────────────────┤\n│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │\n│ │ Interactive │ │ Batch │ │ Document │ │ Frontend │ │\n│ │ Agent │ │ Agent │ │ Processing │ │ (React) │ │\n│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │\n├─────────┼────────────────┼────────────────┼────────────────┼────────┤\n│ │ │ │ │ │\n│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │\n│ │ Bedrock │ │ Step │ │ Lambda │ │ CloudFront │ │\n│ │ + Cognito │ │ Functions │ │ + S3 │ │ + S3 │ │\n│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │\n├─────────────────────────────────────────────────────────────────────┤\n│ Foundation (Network, Observability) │\n└─────────────────────────────────────────────────────────────────────┘\n```\n\n### Multi-Layered Design\n\nThe library uses a multi-layered architecture that bridges business requirements and technical implementation:\n\n| Layer | What It Is | Purpose |\n|-------|------------|---------|\n| **Infrastructure Foundation** | Abstract base classes (`BaseAgent`, `BaseDocumentProcessing`) | Standardized interfaces and contracts — extend for custom implementations |\n| **General Use Case Implementation** | Concrete classes (`InteractiveAgent`, `BedrockDocumentProcessing`) | Configurable implementations for common patterns — use directly or extend |\n| **Industry-Aligned Solutions** | Deployable examples (`examples/`) | Pre-configured for specific domains (insurance, banking, e-commerce) — deploy as-is or use as reference |\n\n### Composable Architecture\n\nBuild complex systems by combining independent, reusable components:\n\n- **Independent components** with clear interfaces and loose coupling\n- **Mix and match** constructs across different contexts and use cases\n- **Pluggable strategies** for networking, observability, and event handling\n- **Scalable composition** — incremental adoption and gradual modernization\n\n---\n\n## Getting Started\n\n### Prerequisites\n\n```bash\n# Configure AWS credentials\naws configure\n# OR: export AWS_PROFILE=your-profile-name\n\n# Bootstrap CDK (one-time per account/region)\nnpx cdk bootstrap\n```\n\n### Option 1: Deploy a Solution\n\n```bash\ngit clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git\ncd cdk-appmod-catalog-blueprints/examples/chatbot/customer-service-chatbot\nnpm install && npm run deploy\n```\n\n### Option 2: Use Constructs in Your Project\n\n```bash\nnpm install @cdklabs/cdk-appmod-catalog-blueprints\n```\n\n```typescript\nimport { InteractiveAgent } from '@cdklabs/cdk-appmod-catalog-blueprints';\nimport { Asset } from 'aws-cdk-lib/aws-s3-assets';\n\nnew InteractiveAgent(this, 'MyChatbot', {\n agentName: 'my-bot',\n agentDefinition: {\n bedrockModel: { useCrossRegionInference: true },\n systemPrompt: new Asset(this, 'Prompt', { path: './prompt.txt' }),\n },\n});\n```\n\n---\n\n## Security & Compliance\n\nAll constructs include enterprise-grade security by default:\n\n| Feature | What You Get |\n|---------|--------------|\n| **CDK Nag Integration** | Automated security compliance checking |\n| **AWS Well-Architected** | Security, reliability, and performance best practices |\n| **Encryption** | KMS at rest, TLS in transit — always on |\n| **IAM** | Least-privilege, resource-scoped permissions |\n| **Compliance Reports** | Generate with `npm test -- --testPathPattern=\"nag.test.ts\"` |\n\n---\n\n## Documentation\n\n- [**Website**](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/) — Full documentation and guides\n- [**Construct Hub**](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints/) — API reference\n- [**Examples**](./examples/) — Complete deployable solutions\n- [**Building Blocks**](./use-cases/) — Individual construct documentation\n\n---\n\n## Contributing\n\nWe welcome contributions! See [CONTRIBUTING.md](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/CONTRIBUTING.md) for guidelines.\n\n## Disclaimer\n\nThese solutions are examples to help you build applications, not supported products. Any applications you build should be thoroughly tested, secured, and optimized according to your security standards before production use.\n\n## License\n\nApache License 2.0 — see [LICENSE](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/LICENSE) for details.\n"
|
|
4133
4133
|
},
|
|
4134
4134
|
"repository": {
|
|
4135
4135
|
"type": "git",
|
|
@@ -16425,6 +16425,6 @@
|
|
|
16425
16425
|
"usedFeatures": [
|
|
16426
16426
|
"class-covariant-overrides"
|
|
16427
16427
|
],
|
|
16428
|
-
"version": "1.12.
|
|
16429
|
-
"fingerprint": "
|
|
16428
|
+
"version": "1.12.1",
|
|
16429
|
+
"fingerprint": "aq/R/hqCScqpVI7a9hyNj6+XrZOO+5mIr3saEeqY0pU="
|
|
16430
16430
|
}
|
package/README.md
CHANGED
|
@@ -1,130 +1,237 @@
|
|
|
1
1
|
# AppMod Catalog Blueprints
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
[](https://github.com/cdklabs/cdk-appmod-catalog-blueprints)
|
|
6
|
+
[](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints/)
|
|
7
|
+
[](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/)
|
|
8
|
+
[](https://www.npmjs.com/package/@cdklabs/cdk-appmod-catalog-blueprints)
|
|
9
|
+
[](https://www.npmjs.com/package/@cdklabs/cdk-appmod-catalog-blueprints)
|
|
10
|
+
[](https://pypi.org/project/appmod-catalog-blueprints/)
|
|
11
|
+
[](https://pepy.tech/project/appmod-catalog-blueprints)
|
|
12
|
+
[](https://www.nuget.org/packages/CdklabsAppmodCatalogBlueprints)
|
|
13
|
+
[](https://www.nuget.org/packages/CdklabsAppmodCatalogBlueprints)
|
|
14
|
+
[](https://central.sonatype.com/artifact/io.github.cdklabs/appmod-catalog-blueprints)
|
|
15
|
+
|
|
16
|
+
Application Modernization (AppMod) Catalog Blueprints is a comprehensive library of **use case-driven infrastructure blueprints** and **industry-aligned solutions** built on AWS Well-Architected best practices. Designed as composable, multi-layered [AWS CDK](https://aws.amazon.com/cdk/) [L3 constructs](https://docs.aws.amazon.com/cdk/v2/guide/constructs.html), these blueprints accelerate serverless development and modernization with multiple implementation pathways — from ready-to-deploy solutions to fully customizable building blocks.
|
|
17
|
+
|
|
18
|
+
**Why This Library?**
|
|
19
|
+
- **Use case-driven**: Purpose-built for real business problems — AI workflows, document processing, event-driven architectures, web applications
|
|
20
|
+
- **Multi-layered approach**: Infrastructure Foundation → General Use Cases → Industry Solutions — start with proven patterns, customize as needed
|
|
21
|
+
- **Composable architecture**: Mix and match independent components with standardized interfaces
|
|
22
|
+
- **Enterprise-ready security**: Built-in compliance, encryption, least-privilege IAM, and CDK Nag validation
|
|
23
|
+
- **Multi-language**: TypeScript, Python, Java, .NET via [JSII](https://aws.github.io/jsii/)
|
|
6
24
|
|
|
7
|
-
|
|
25
|
+
---
|
|
8
26
|
|
|
9
|
-
|
|
10
|
-
- **Use case-driven solutions**: Purpose-built blueprints for common business scenarios like document processing, web applications, and AI workflows, with industry-specific implementations like insurance claims processing
|
|
11
|
-
- **Multi-layered approach**: Infrastructure Foundation → General Use Cases → Industry Examples, allowing you to start with proven patterns and customize as needed.
|
|
12
|
-
- **Composable architecture**: Mix and match independent components with standardized interfaces
|
|
13
|
-
- **Enterprise-ready**: Built-in security, compliance, and AWS Well-Architected best practices
|
|
14
|
-
- **Multi-language support**: Available in TypeScript, Python, Java, and .NET via [JSII](https://aws.github.io/jsii/)
|
|
27
|
+
## Deploy in 3 Commands
|
|
15
28
|
|
|
16
|
-
|
|
29
|
+
Pick any solution from [the catalog below](#what-you-can-build) and deploy:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
git clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git
|
|
33
|
+
cd cdk-appmod-catalog-blueprints/examples/chatbot/customer-service-chatbot # or any other example
|
|
34
|
+
npm install && npm run deploy
|
|
35
|
+
```
|
|
17
36
|
|
|
18
|
-
|
|
37
|
+
**That's it.** In this example, you now have a well-architected AI chatbot with streaming, authentication, and a React frontend. Swap the path for any other solution — fraud detection, document processing, RAG support, and more.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Two Ways to Use This Library
|
|
19
42
|
|
|
20
43
|
| Approach | Best For | Get Started |
|
|
21
44
|
|----------|----------|-------------|
|
|
22
|
-
| **🚀
|
|
23
|
-
| **🔧 Custom
|
|
45
|
+
| **🚀 Deploy a Solution** | Quick evaluation, immediate value, proof-of-concepts | Pick from [ready-to-deploy solutions](#what-you-can-build) below — deploy in minutes with sensible defaults |
|
|
46
|
+
| **🔧 Build Custom** | Specific requirements, enterprise integration, tailored applications | Use [individual constructs](#building-blocks) — import into your CDK project, override defaults, inject custom logic |
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## What You Can Build
|
|
51
|
+
|
|
52
|
+
### AI Chatbots & Assistants
|
|
53
|
+
|
|
54
|
+
| Solution | What It Does | Constructs Used |
|
|
55
|
+
|----------|--------------|-----------------|
|
|
56
|
+
| [**Customer Service Chatbot**](./examples/chatbot/customer-service-chatbot/) | Real-time chatbot with streaming and session management | [InteractiveAgent](./use-cases/framework/agents/), [Frontend](./use-cases/webapp/) |
|
|
57
|
+
| [**Retail Banking Chatbot**](./examples/chatbot/retail-banking-chatbot/) | Banking chatbot with RAG knowledge base and transaction lookup | [InteractiveAgent](./use-cases/framework/agents/), [BedrockKnowledgeBase](./use-cases/framework/agents/knowledge-base/), [Frontend](./use-cases/webapp/) |
|
|
58
|
+
| [**Retail Banking Chatbot (AgentCore)**](./examples/chatbot/retail-banking-chatbot-agentcore/) | High-availability banking bot on AgentCore Runtime | [InteractiveAgent](./use-cases/framework/agents/), [BedrockKnowledgeBase](./use-cases/framework/agents/knowledge-base/) |
|
|
59
|
+
| [**RAG Customer Support**](./examples/rag-customer-support/) | Knowledge-powered Q&A for e-commerce support | [BatchAgent](./use-cases/framework/agents/), [BedrockKnowledgeBase](./use-cases/framework/agents/knowledge-base/) |
|
|
24
60
|
|
|
25
|
-
|
|
61
|
+
### Intelligent Document Processing
|
|
26
62
|
|
|
27
|
-
|
|
63
|
+
| Solution | What It Does | Constructs Used |
|
|
64
|
+
|----------|--------------|-----------------|
|
|
65
|
+
| [**Insurance Claims Portal**](./examples/document-processing/doc-processing-fullstack-webapp/) | End-to-end claims processing with web UI | [AgenticDocumentProcessing](./use-cases/document-processing/), [Frontend](./use-cases/webapp/) |
|
|
66
|
+
| [**Fraud Detection**](./examples/document-processing/fraud-detection/) | AI-powered document fraud analysis with risk scoring | [AgenticDocumentProcessing](./use-cases/document-processing/) |
|
|
67
|
+
| [**Document Summarization**](./examples/document-processing/summarization-pipeline/) | Multi-format summarization with semantic search | [BedrockDocumentProcessing](./use-cases/document-processing/) |
|
|
68
|
+
| [**Agentic Document Processing**](./examples/document-processing/agentic-document-processing/) | Advanced document processing with AI reasoning | [AgenticDocumentProcessing](./use-cases/document-processing/) |
|
|
69
|
+
| [**Bedrock Document Processing**](./examples/document-processing/bedrock-document-processing/) | Document classification and extraction pipeline | [BedrockDocumentProcessing](./use-cases/document-processing/) |
|
|
70
|
+
| [**Minimal Document Processing**](./examples/document-processing/minimal-bedrock-doc-processing/) | Zero-config document processing starter | [BedrockDocumentProcessing](./use-cases/document-processing/) |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## Building Blocks
|
|
75
|
+
|
|
76
|
+
Use individual constructs to build custom applications:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npm install @cdklabs/cdk-appmod-catalog-blueprints
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
import { InteractiveAgent } from '@cdklabs/cdk-appmod-catalog-blueprints';
|
|
84
|
+
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
|
|
85
|
+
|
|
86
|
+
new InteractiveAgent(this, 'MyChatbot', {
|
|
87
|
+
agentName: 'support-bot',
|
|
88
|
+
agentDefinition: {
|
|
89
|
+
bedrockModel: { useCrossRegionInference: true },
|
|
90
|
+
systemPrompt: new Asset(this, 'Prompt', { path: './prompt.txt' }),
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
```
|
|
28
94
|
|
|
29
|
-
|
|
30
|
-
|----------|-------------|----------------------|
|
|
31
|
-
| **[Document Processing](./use-cases/document-processing/)** | Intelligent document processing workflows with classification, extraction, and agentic capabilities | • [Bedrock Document Processing](./examples/document-processing/bedrock-document-processing/)<br/>• [Agentic Document Processing](./examples/document-processing/agentic-document-processing/)<br/>• [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |
|
|
32
|
-
| **[Web Application](./use-cases/webapp/)** | Static web application hosting with global CDN, security headers, and SPA support | • [Full-Stack Insurance Claims Processing Web Application](./examples/document-processing/doc-processing-fullstack-webapp/) |
|
|
95
|
+
### Available Constructs
|
|
33
96
|
|
|
34
|
-
|
|
97
|
+
| Construct | What It Does |
|
|
98
|
+
|-----------|--------------|
|
|
99
|
+
| [**InteractiveAgent**](./use-cases/framework/agents/) | Real-time chatbots with SSE streaming, sessions, and auth |
|
|
100
|
+
| [**BatchAgent**](./use-cases/framework/agents/) | Async AI processing for document analysis |
|
|
101
|
+
| [**BaseAgent**](./use-cases/framework/agents/) | Abstract base for custom agent implementations |
|
|
102
|
+
| [**AgenticDocumentProcessing**](./use-cases/document-processing/) | Document workflows with AI agents and tools |
|
|
103
|
+
| [**BedrockDocumentProcessing**](./use-cases/document-processing/) | Document classification and extraction |
|
|
104
|
+
| [**BaseDocumentProcessing**](./use-cases/document-processing/) | Abstract base for custom document processing |
|
|
105
|
+
| [**BedrockKnowledgeBase**](./use-cases/framework/agents/knowledge-base/) | RAG retrieval with access control |
|
|
106
|
+
| [**Frontend**](./use-cases/webapp/) | Static web hosting with CloudFront CDN |
|
|
35
107
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
|
39
|
-
|
|
40
|
-
| **
|
|
41
|
-
| **
|
|
108
|
+
### Foundation & Utilities
|
|
109
|
+
|
|
110
|
+
| Component | What It Does |
|
|
111
|
+
|-----------|--------------|
|
|
112
|
+
| [**Network**](./use-cases/framework/foundation/) | VPC with subnets and endpoints |
|
|
113
|
+
| [**Observability**](./use-cases/utilities/) | Logging, tracing, monitoring with Lambda Powertools |
|
|
114
|
+
| [**DataMasking**](./use-cases/utilities/) | PII protection Lambda layer |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Architecture
|
|
119
|
+
|
|
120
|
+
### How It Works
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
┌─────────────────────────────────────────────────────────────────────┐
|
|
124
|
+
│ Your Application │
|
|
125
|
+
├─────────────────────────────────────────────────────────────────────┤
|
|
126
|
+
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
|
|
127
|
+
│ │ Interactive │ │ Batch │ │ Document │ │ Frontend │ │
|
|
128
|
+
│ │ Agent │ │ Agent │ │ Processing │ │ (React) │ │
|
|
129
|
+
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
|
|
130
|
+
├─────────┼────────────────┼────────────────┼────────────────┼────────┤
|
|
131
|
+
│ │ │ │ │ │
|
|
132
|
+
│ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │
|
|
133
|
+
│ │ Bedrock │ │ Step │ │ Lambda │ │ CloudFront │ │
|
|
134
|
+
│ │ + Cognito │ │ Functions │ │ + S3 │ │ + S3 │ │
|
|
135
|
+
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
|
|
136
|
+
├─────────────────────────────────────────────────────────────────────┤
|
|
137
|
+
│ Foundation (Network, Observability) │
|
|
138
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### Multi-Layered Design
|
|
142
|
+
|
|
143
|
+
The library uses a multi-layered architecture that bridges business requirements and technical implementation:
|
|
144
|
+
|
|
145
|
+
| Layer | What It Is | Purpose |
|
|
146
|
+
|-------|------------|---------|
|
|
147
|
+
| **Infrastructure Foundation** | Abstract base classes (`BaseAgent`, `BaseDocumentProcessing`) | Standardized interfaces and contracts — extend for custom implementations |
|
|
148
|
+
| **General Use Case Implementation** | Concrete classes (`InteractiveAgent`, `BedrockDocumentProcessing`) | Configurable implementations for common patterns — use directly or extend |
|
|
149
|
+
| **Industry-Aligned Solutions** | Deployable examples (`examples/`) | Pre-configured for specific domains (insurance, banking, e-commerce) — deploy as-is or use as reference |
|
|
150
|
+
|
|
151
|
+
### Composable Architecture
|
|
152
|
+
|
|
153
|
+
Build complex systems by combining independent, reusable components:
|
|
154
|
+
|
|
155
|
+
- **Independent components** with clear interfaces and loose coupling
|
|
156
|
+
- **Mix and match** constructs across different contexts and use cases
|
|
157
|
+
- **Pluggable strategies** for networking, observability, and event handling
|
|
158
|
+
- **Scalable composition** — incremental adoption and gradual modernization
|
|
159
|
+
|
|
160
|
+
---
|
|
42
161
|
|
|
43
162
|
## Getting Started
|
|
44
163
|
|
|
45
|
-
###
|
|
164
|
+
### Prerequisites
|
|
165
|
+
|
|
46
166
|
```bash
|
|
47
|
-
# Configure AWS credentials
|
|
167
|
+
# Configure AWS credentials
|
|
48
168
|
aws configure
|
|
49
|
-
# OR
|
|
169
|
+
# OR: export AWS_PROFILE=your-profile-name
|
|
50
170
|
|
|
51
|
-
# Bootstrap
|
|
171
|
+
# Bootstrap CDK (one-time per account/region)
|
|
52
172
|
npx cdk bootstrap
|
|
53
173
|
```
|
|
54
174
|
|
|
55
|
-
###
|
|
56
|
-
Deploy working examples in minutes for immediate value:
|
|
175
|
+
### Option 1: Deploy a Solution
|
|
57
176
|
|
|
58
177
|
```bash
|
|
59
|
-
# Clone the repository
|
|
60
178
|
git clone https://github.com/cdklabs/cdk-appmod-catalog-blueprints.git
|
|
61
|
-
|
|
62
|
-
# Deploy complete insurance claims processing solution
|
|
63
|
-
cd examples/document-processing/doc-processing-fullstack-webapp
|
|
64
|
-
npm install && npm run deploy
|
|
65
|
-
# Full AI-powered solution with web interface deployed
|
|
66
|
-
|
|
67
|
-
# Or deploy basic document processing
|
|
68
|
-
cd examples/document-processing/bedrock-document-processing
|
|
179
|
+
cd cdk-appmod-catalog-blueprints/examples/chatbot/customer-service-chatbot
|
|
69
180
|
npm install && npm run deploy
|
|
70
181
|
```
|
|
71
182
|
|
|
72
|
-
###
|
|
73
|
-
Add to your existing CDK projects for custom solutions:
|
|
183
|
+
### Option 2: Use Constructs in Your Project
|
|
74
184
|
|
|
75
185
|
```bash
|
|
76
|
-
|
|
77
|
-
|
|
186
|
+
npm install @cdklabs/cdk-appmod-catalog-blueprints
|
|
187
|
+
```
|
|
78
188
|
|
|
79
|
-
|
|
80
|
-
import {
|
|
189
|
+
```typescript
|
|
190
|
+
import { InteractiveAgent } from '@cdklabs/cdk-appmod-catalog-blueprints';
|
|
191
|
+
import { Asset } from 'aws-cdk-lib/aws-s3-assets';
|
|
81
192
|
|
|
82
|
-
|
|
193
|
+
new InteractiveAgent(this, 'MyChatbot', {
|
|
194
|
+
agentName: 'my-bot',
|
|
83
195
|
agentDefinition: {
|
|
84
196
|
bedrockModel: { useCrossRegionInference: true },
|
|
85
|
-
systemPrompt:
|
|
86
|
-
|
|
87
|
-
}
|
|
197
|
+
systemPrompt: new Asset(this, 'Prompt', { path: './prompt.txt' }),
|
|
198
|
+
},
|
|
88
199
|
});
|
|
89
200
|
```
|
|
90
201
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
AppMod Catalog Blueprints is built on Object-Oriented Programming (OOP) principles, providing a structured approach to infrastructure development through core design concepts:
|
|
202
|
+
---
|
|
94
203
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
Build complex enterprise systems by combining independent, reusable components with standardized interfaces.
|
|
204
|
+
## Security & Compliance
|
|
98
205
|
|
|
99
|
-
|
|
100
|
-
- **Mix and match building blocks** to create custom solutions across different contexts and use cases
|
|
101
|
-
- **Scalable composition** that maintains consistency while enabling incremental adoption and gradual modernization
|
|
206
|
+
All constructs include enterprise-grade security by default:
|
|
102
207
|
|
|
103
|
-
|
|
208
|
+
| Feature | What You Get |
|
|
209
|
+
|---------|--------------|
|
|
210
|
+
| **CDK Nag Integration** | Automated security compliance checking |
|
|
211
|
+
| **AWS Well-Architected** | Security, reliability, and performance best practices |
|
|
212
|
+
| **Encryption** | KMS at rest, TLS in transit — always on |
|
|
213
|
+
| **IAM** | Least-privilege, resource-scoped permissions |
|
|
214
|
+
| **Compliance Reports** | Generate with `npm test -- --testPathPattern="nag.test.ts"` |
|
|
104
215
|
|
|
105
|
-
|
|
216
|
+
---
|
|
106
217
|
|
|
107
|
-
|
|
108
|
-
|-------|-------------------|---------|--------------|
|
|
109
|
-
| **Infrastructure Foundation** | Abstract base classes | Shared infrastructure components and common services | • Standardized interfaces and contracts<br/>• Extensible foundation for custom implementations |
|
|
110
|
-
| **General Use Case Implementation** | Concrete implementation classes | Implementations for common patterns across industries | • Configurable parameters for different environments<br/>• Abstract method implementations with general-purpose solutions |
|
|
111
|
-
| **Industry-Aligned Implementation** | Configured implementation examples | Pre-configured solutions for specific business domains | • Industry-specific validation rules and workflows<br/>• Built-in compliance requirements and domain expertise |
|
|
218
|
+
## Documentation
|
|
112
219
|
|
|
113
|
-
|
|
220
|
+
- [**Website**](https://cdklabs.github.io/cdk-appmod-catalog-blueprints/) — Full documentation and guides
|
|
221
|
+
- [**Construct Hub**](https://constructs.dev/packages/@cdklabs/cdk-appmod-catalog-blueprints/) — API reference
|
|
222
|
+
- [**Examples**](./examples/) — Complete deployable solutions
|
|
223
|
+
- [**Building Blocks**](./use-cases/) — Individual construct documentation
|
|
114
224
|
|
|
115
|
-
|
|
116
|
-
- **CDK Nag Integration**: Automated security compliance checking
|
|
117
|
-
- **AWS Well-Architected**: Security, reliability, and performance best practices
|
|
118
|
-
- **Encryption & IAM**: At-rest/in-transit encryption with least-privilege access
|
|
119
|
-
- **Compliance Reports**: Generate reports with `npm test -- --testPathPattern="nag.test.ts"`
|
|
225
|
+
---
|
|
120
226
|
|
|
121
227
|
## Contributing
|
|
122
228
|
|
|
123
|
-
See [CONTRIBUTING.md](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/CONTRIBUTING.md) for
|
|
229
|
+
We welcome contributions! See [CONTRIBUTING.md](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/CONTRIBUTING.md) for guidelines.
|
|
124
230
|
|
|
125
231
|
## Disclaimer
|
|
126
|
-
|
|
232
|
+
|
|
233
|
+
These solutions are examples to help you build applications, not supported products. Any applications you build should be thoroughly tested, secured, and optimized according to your security standards before production use.
|
|
127
234
|
|
|
128
235
|
## License
|
|
129
236
|
|
|
130
|
-
Apache License 2.0
|
|
237
|
+
Apache License 2.0 — see [LICENSE](https://github.com/cdklabs/cdk-appmod-catalog-blueprints/blob/main/LICENSE) for details.
|
|
@@ -240,5 +240,5 @@ class QueuedS3Adapter {
|
|
|
240
240
|
}
|
|
241
241
|
exports.QueuedS3Adapter = QueuedS3Adapter;
|
|
242
242
|
_a = JSII_RTTI_SYMBOL_1;
|
|
243
|
-
QueuedS3Adapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.QueuedS3Adapter", version: "1.12.
|
|
243
|
+
QueuedS3Adapter[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.QueuedS3Adapter", version: "1.12.1" };
|
|
244
244
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVldWVkLXMzLWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91c2UtY2FzZXMvZG9jdW1lbnQtcHJvY2Vzc2luZy9hZGFwdGVyL3F1ZXVlZC1zMy1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0QyxrQ0FBa0M7QUFDbEMsOEVBQWtFO0FBQ2xFLDZDQUFzRDtBQUN0RCxpREFBcUU7QUFDckUsaURBQXNHO0FBQ3RHLGlEQUEwQztBQUUxQyxtRkFBc0U7QUFDdEUsK0NBQXlFO0FBQ3pFLDJFQUFrRTtBQUNsRSxpREFBNkQ7QUFDN0QscUVBQThFO0FBQzlFLGlGQUFxRTtBQUlyRSwrQ0FBa0Q7QUFDbEQsK0NBQStGO0FBQy9GLDhGQUF3RjtBQTREeEY7OztHQUdHO0FBQ0gsTUFBYSxlQUFlO0lBSzFCLFlBQVksZUFBcUMsRUFBRTtRQUNqRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ2QsR0FBRyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDO1lBQzlELFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLFlBQVksQ0FBQztZQUNoRixNQUFNLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUM7U0FDeEUsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGVBQWUsQ0FBQyxNQUEwQixFQUFFLFlBQW9CO1FBQ3RFLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7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QUMsU0FBUyxJQUFJLENBQUM7WUFDdkMsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztTQUM3QixDQUFDLENBQ0gsQ0FBQztRQUVGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs7QUFqUUgsMENBa1FDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuXG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBQeXRob25GdW5jdGlvbiB9IGZyb20gJ0Bhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhJztcbmltcG9ydCB7IER1cmF0aW9uLCBSZW1vdmFsUG9saWN5IH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgeyBFZmZlY3QsIFBvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIFJvbGUsIFNlcnZpY2VQcmluY2lwYWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IFNxc0V2ZW50U291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ldmVudC1zb3VyY2VzJztcbmltcG9ydCB7IEJ1Y2tldCwgQnVja2V0RW5jcnlwdGlvbiwgRXZlbnRUeXBlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IFNxc0Rlc3RpbmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLW5vdGlmaWNhdGlvbnMnO1xuaW1wb3J0IHsgUXVldWUsIFF1ZXVlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zcXMnO1xuaW1wb3J0IHsgQ2hhaW4sIEpzb25QYXRoLCBTdGF0ZU1hY2hpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBDYWxsQXdzU2VydmljZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIH0gZnJvbSAnLi4vYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nJztcbmltcG9ydCB7IElBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVyJztcbmltcG9ydCB7IERlZmF1bHRSdW50aW1lcyB9IGZyb20gJy4uLy4uL2ZyYW1ld29yayc7XG5pbXBvcnQgeyBEZWZhdWx0T2JzZXJ2YWJpbGl0eUNvbmZpZywgTGFtYmRhSWFtVXRpbHMsIFBvd2VydG9vbHNDb25maWcgfSBmcm9tICcuLi8uLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZyB9IGZyb20gJy4uL2RlZmF1bHQtZG9jdW1lbnQtcHJvY2Vzc2luZy1jb25maWcnO1xuXG4vKipcbiAqIFN0cnVjdCBmb3IgUzMgUHJlZml4ZXNcbiAqL1xuaW50ZXJmYWNlIFMzUHJlZml4ZXMge1xuICByZWFkb25seSByYXc6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvY2Vzc2VkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZhaWxlZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgUXVldWVkIFMzIEFkYXB0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBRdWV1ZWRTM0FkYXB0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBTMyBidWNrZXQgZm9yIGRvY3VtZW50IHN0b3JhZ2Ugd2l0aCBvcmdhbml6ZWQgcHJlZml4ZXMgKHJhdy8sIHByb2Nlc3NlZC8sIGZhaWxlZC8pLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IGJ1Y2tldCB3aWxsIGJlIGNyZWF0ZWQgd2l0aCBhdXRvLWRlbGV0ZSBlbmFibGVkIGJhc2VkIG9uIHJlbW92YWxQb2xpY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IGNyZWF0ZSBhIG5ldyBidWNrZXRcbiAgICovXG4gIHJlYWRvbmx5IGJ1Y2tldD86IEJ1Y2tldDtcblxuICAvKipcbiAgICogUzMgcHJlZml4IHdoZXJlIHRoZSByYXcgZmlsZXMgd291bGQgYmUgc3RvcmVkLlxuICAgKiBUaGlzIHNlcnZlcyBhcyB0aGUgdHJpZ2dlciBwb2ludCBmb3IgcHJvY2Vzc2luZ1xuICAgKlxuICAgKiBAZGVmYXVsdCBcInJhdy9cIlxuICAgKi9cbiAgcmVhZG9ubHkgcmF3UHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTMyBwcmVmaXggd2hlcmUgdGhlIHByb2Nlc3NlZCBmaWxlcyB3b3VsZCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwicHJvY2Vzc2VkL1wiXG4gICAqL1xuICByZWFkb25seSBwcm9jZXNzZWRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFMzIHByZWZpeCB3aGVyZSB0aGUgZmlsZXMgdGhhdCBmYWlsZWQgcHJvY2Vzc2luZyB3b3VsZCBiZSBzdG9yZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiZmFpbGVkL1wiXG4gICAqL1xuICByZWFkb25seSBmYWlsZWRQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNRUyBxdWV1ZSB2aXNpYmlsaXR5IHRpbWVvdXQgZm9yIHByb2Nlc3NpbmcgbWVzc2FnZXMuXG4gICAqIFNob3VsZCBiZSBsb25nZXIgdGhhbiBleHBlY3RlZCBwcm9jZXNzaW5nIHRpbWUgdG8gcHJldmVudCBkdXBsaWNhdGUgcHJvY2Vzc2luZy5cbiAgICogQGRlZmF1bHQgRHVyYXRpb24uc2Vjb25kcygzMDApXG4gICAqL1xuICByZWFkb25seSBxdWV1ZVZpc2liaWxpdHlUaW1lb3V0PzogRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGltZXMgYSBtZXNzYWdlIGNhbiBiZSB1bnN1Y2Nlc3NmdWxseSBkZXF1ZXVlZCBiZWZvcmUgYmVpbmcgbW92ZWQgdG8gdGhlIGRlYWQtbGV0dGVyIHF1ZXVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCA1XG4gICAqL1xuICByZWFkb25seSBkbHFNYXhSZWNlaXZlQ291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhpcyBhZGFwdGVyIGFsbG93cyB0aGUgaW50ZWxsaWdlbnQgZG9jdW1lbnQgcHJvY2Vzc2luZyB3b3JrZmxvd1xuICogdG8gYmUgdHJpZ2dlcmVkIGJ5IGZpbGVzIHRoYXQgYXJlIHVwbG9hZGVkIGludG8gYSBTMyBCdWNrZXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBRdWV1ZWRTM0FkYXB0ZXIgaW1wbGVtZW50cyBJQWRhcHRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlclByb3BzOiBRdWV1ZWRTM0FkYXB0ZXJQcm9wcztcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJlZml4ZXM6IFMzUHJlZml4ZXM7XG5cbiAgY29uc3RydWN0b3IoYWRhcHRlclByb3BzOiBRdWV1ZWRTM0FkYXB0ZXJQcm9wcyA9IHt9KSB7XG4gICAgdGhpcy5hZGFwdGVyUHJvcHMgPSBhZGFwdGVyUHJvcHM7XG4gICAgdGhpcy5yZXNvdXJjZXMgPSB7fTtcbiAgICB0aGlzLnByZWZpeGVzID0ge1xuICAgICAgcmF3OiB0aGlzLm5vcm1hbGl6ZVByZWZpeCh0aGlzLmFkYXB0ZXJQcm9wcy5yYXdQcmVmaXgsICdyYXcvJyksXG4gICAgICBwcm9jZXNzZWQ6IHRoaXMubm9ybWFsaXplUHJlZml4KHRoaXMuYWRhcHRlclByb3BzLnByb2Nlc3NlZFByZWZpeCwgJ3Byb2Nlc3NlZC8nKSxcbiAgICAgIGZhaWxlZDogdGhpcy5ub3JtYWxpemVQcmVmaXgodGhpcy5hZGFwdGVyUHJvcHMuZmFpbGVkUHJlZml4LCAnZmFpbGVkLycpLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW5zdXJlcyBhIHByZWZpeCBlbmRzIHdpdGggJy8nLlxuICAgKiBAcGFyYW0gcHJlZml4IC0gVGhlIHByZWZpeCB0byBub3JtYWxpemVcbiAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIERlZmF1bHQgdmFsdWUgaWYgcHJlZml4IGlzIHVuZGVmaW5lZFxuICAgKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwcmVmaXggZW5kaW5nIHdpdGggJy8nXG4gICAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVByZWZpeChwcmVmaXg6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeC5lbmRzV2l0aCgnLycpID8gcHJlZml4IDogYCR7cHJlZml4fS9gO1xuICB9XG5cbiAgaW5pdChzY29wZTogQ29uc3RydWN0LCBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKTogdm9pZCB7XG4gICAgaWYgKHByb3BzLm5ldHdvcmspIHtcbiAgICAgIHByb3BzLm5ldHdvcmsuY3JlYXRlU2VydmljZUVuZHBvaW50KCd2cGNlLXNxcycsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5TUVMpO1xuICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtczMnLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuUzMpO1xuICAgIH1cblxuICAgIGNvbnN0IGVuY3J5cHRpb25LZXkgPSBwcm9wcy5lbmNyeXB0aW9uS2V5IHx8IG5ldyBLZXkoc2NvcGUsICdRdWV1ZWRTM0FkYXB0ZXJFbmNyeXB0aW9uS2V5Jywge1xuICAgICAgZW5hYmxlS2V5Um90YXRpb246IHRydWUsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5yZW1vdmFsUG9saWN5IHx8IFJlbW92YWxQb2xpY3kuREVTVFJPWSxcbiAgICB9KTtcblxuICAgIHRoaXMucmVzb3VyY2VzLmVuY3J5cHRpb25LZXkgPSBlbmNyeXB0aW9uS2V5O1xuXG4gICAgY29uc3QgYnVja2V0ID0gdGhpcy5hZGFwdGVyUHJvcHMuYnVja2V0IHx8IG5ldyBCdWNrZXQoc2NvcGUsICdEb2N1bWVudFByb2Nlc3NpbmdCdWNrZXQnLCB7XG4gICAgICBhdXRvRGVsZXRlT2JqZWN0czogKHByb3BzLnJlbW92YWxQb2xpY3kgJiYgcHJvcHMucmVtb3ZhbFBvbGljeSA9PT0gUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKSB8fCAhcHJvcHMucmVtb3ZhbFBvbGljeSA/IHRydWUgOiBmYWxzZSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgZW5jcnlwdGlvbjogQnVja2V0RW5jcnlwdGlvbi5LTVMsIC8vIFVzZXMgQVdTLW1hbmFnZWQgS01TIGtleSBmb3IgZW5jcnlwdGlvbiBhdCByZXN0XG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgICAgYnVja2V0S2V5RW5hYmxlZDogdHJ1ZSwgLy8gUmVkdWNlcyBLTVMgY29zdHMgYnkgdXNpbmcgUzMgQnVja2V0IEtleXNcbiAgICB9KTtcblxuICAgIHRoaXMucmVzb3VyY2VzLmJ1Y2tldCA9IGJ1Y2tldDtcblxuICAgIGNvbnN0IGRlYWRMZXR0ZXJRdWV1ZSA9IG5ldyBRdWV1ZShzY29wZSwgJ0RvY3VtZW50UHJvY2Vzc2luZ0RMUScsIHtcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiB0aGlzLmFkYXB0ZXJQcm9wcy5xdWV1ZVZpc2liaWxpdHlUaW1lb3V0IHx8IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVMsXG4gICAgICBlbmNyeXB0aW9uTWFzdGVyS2V5OiBlbmNyeXB0aW9uS2V5LFxuICAgIH0pO1xuXG4gICAgY29uc3QgcXVldWUgPSBuZXcgUXVldWUoc2NvcGUsICdEb2N1bWVudFByb2Nlc3NpbmdRdWV1ZScsIHtcbiAgICAgIHZpc2liaWxpdHlUaW1lb3V0OiB0aGlzLmFkYXB0ZXJQcm9wcy5xdWV1ZVZpc2liaWxpdHlUaW1lb3V0IHx8IER1cmF0aW9uLnNlY29uZHMoMzAwKSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIGRlYWRMZXR0ZXJRdWV1ZToge1xuICAgICAgICBtYXhSZWNlaXZlQ291bnQ6IHRoaXMuYWRhcHRlclByb3BzLmRscU1heFJlY2VpdmVDb3VudCB8fCA1LFxuICAgICAgICBxdWV1ZTogZGVhZExldHRlclF1ZXVlLFxuICAgICAgfSxcbiAgICAgIGVuY3J5cHRpb246IFF1ZXVlRW5jcnlwdGlvbi5LTVMsXG4gICAgICBlbmNyeXB0aW9uTWFzdGVyS2V5OiBlbmNyeXB0aW9uS2V5LFxuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNvdXJjZXMuZGVhZExldHRlclF1ZXVlID0gZGVhZExldHRlclF1ZXVlO1xuICAgIHRoaXMucmVzb3VyY2VzLnF1ZXVlID0gcXVldWU7XG4gIH1cblxuICBjcmVhdGVJbmdyZXNzVHJpZ2dlcihzY29wZTogQ29uc3RydWN0LCBzdGF0ZU1hY2hpbmU6IFN0YXRlTWFjaGluZSwgcHJvcHM6IEJhc2VEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyk6IFJlY29yZDxzdHJpbmcsIGFueT4ge1xuICAgIGNvbnN0IGJ1Y2tldDogQnVja2V0ID0gdGhpcy5yZXNvdXJjZXMuYnVja2V0O1xuICAgIGNvbnN0IHF1ZXVlOiBRdWV1ZSA9IHRoaXMucmVzb3VyY2VzLnF1ZXVlO1xuICAgIGNvbnN0IGVuY3J5cHRpb25LZXk6IEtleSA9IHRoaXMucmVzb3VyY2VzLmVuY3J5cHRpb25LZXk7XG5cbiAgICBidWNrZXQuYWRkRXZlbnROb3RpZmljYXRpb24oRXZlbnRUeXBlLk9CSkVDVF9DUkVBVEVELCBuZXcgU3FzRGVzdGluYXRpb24ocXVldWUpLCB7XG4gICAgICBwcmVmaXg6IHRoaXMucHJlZml4ZXMucmF3LFxuICAgIH0pO1xuXG4gICAgY29uc3Qgc3FzQ29uc3VtZXJMYW1iZGFGbiA9IHRoaXMuY3JlYXRlU1FTQ29uc3VtZXJMYW1iZGEoc2NvcGUsIHN0YXRlTWFjaGluZSwgcHJvcHMsIGVuY3J5cHRpb25LZXksIHF1ZXVlKTtcblxuICAgIHRoaXMucmVzb3VyY2VzLnNxc0NvbnN1bWVyTGFtYmRhRnVuY3Rpb24gPSBzcXNDb25zdW1lckxhbWJkYUZuO1xuXG4gICAgcmV0dXJuIHRoaXMucmVzb3VyY2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTUVNDb25zdW1lckxhbWJkYShzY29wZTogQ29uc3RydWN0LCBzdGF0ZU1hY2hpbmU6IFN0YXRlTWFjaGluZVxuICAgICwgcHJvcHM6IEJhc2VEb2N1bWVudFByb2Nlc3NpbmdQcm9wcywgZW5jcnlwdGlvbktleTogS2V5LCBxdWV1ZTogUXVldWUpOiBGdW5jdGlvbiB7XG4gICAgY29uc3QgbWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICBjb25zdCBtZXRyaWNTZXJ2aWNlTmFtZSA9IHByb3BzLm1ldHJpY1NlcnZpY2VOYW1lIHx8IERlZmF1bHREb2N1bWVudFByb2Nlc3NpbmdDb25maWcuREVGQVVMVF9PQlNFUlZBQklMSVRZX01FVFJJQ19TVkNfTkFNRTtcblxuICAgIGNvbnN0IHsgcmVnaW9uLCBhY2NvdW50IH0gPSBMYW1iZGFJYW1VdGlscy5nZXRTdGFja0luZm8oc2NvcGUpO1xuICAgIC8vIENyZWF0ZSBsb2dzIHBlcm1pc3Npb25zIGFuZCBnZXQgdW5pcXVlIGZ1bmN0aW9uIG5hbWVcbiAgICBjb25zdCBsb2dzUGVybWlzc2lvbnMgPSBMYW1iZGFJYW1VdGlscy5jcmVhdGVMb2dzUGVybWlzc2lvbnMoe1xuICAgICAgc2NvcGUsXG4gICAgICBmdW5jdGlvbk5hbWU6ICdTUVNDb25zdW1lcicsXG4gICAgICByZWdpb24sXG4gICAgICBhY2NvdW50LFxuICAgICAgZW5hYmxlT2JzZXJ2YWJpbGl0eTogcHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBwb2xpY3kgc3RhdGVtZW50cyBmb3IgU1FTIGNvbnN1bWVyIExhbWJkYVxuICAgIGNvbnN0IHBvbGljeVN0YXRlbWVudHMgPSBbXG4gICAgICAuLi5sb2dzUGVybWlzc2lvbnMucG9saWN5U3RhdGVtZW50cyxcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogWydzdGF0ZXM6U3RhcnRFeGVjdXRpb24nXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbc3RhdGVNYWNoaW5lLnN0YXRlTWFjaGluZUFybl0sXG4gICAgICB9KSxcbiAgICBdO1xuXG4gICAgaWYgKHByb3BzLm5ldHdvcmspIHtcbiAgICAgIHBvbGljeVN0YXRlbWVudHMucHVzaChMYW1iZGFJYW1VdGlscy5nZW5lcmF0ZUxhbWJkYVZQQ1Blcm1pc3Npb25zKCkpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBJQU0gcm9sZSBmb3IgU1FTIGNvbnN1bWVyIExhbWJkYVxuICAgIGNvbnN0IHNxc0NvbnN1bWVyUm9sZSA9IG5ldyBSb2xlKHNjb3BlLCAnU1FTQ29uc3VtZXJSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnbGFtYmRhLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFNRU0NvbnN1bWVyRXhlY3V0aW9uUG9saWN5OiBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IHBvbGljeVN0YXRlbWVudHMsXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGVuY3J5cHRpb25LZXkuZ3JhbnRFbmNyeXB0RGVjcnlwdChzcXNDb25zdW1lclJvbGUpO1xuXG4gICAgLy8gQ3JlYXRlIFNRUyBjb25zdW1lciBMYW1iZGEgZnVuY3Rpb25cbiAgICBjb25zdCBzcXNDb25zdW1lckxhbWJkYSA9IG5ldyBQeXRob25GdW5jdGlvbihzY29wZSwgJ1NRU0NvbnN1bWVyJywge1xuICAgICAgZnVuY3Rpb25OYW1lOiBsb2dzUGVybWlzc2lvbnMudW5pcXVlRnVuY3Rpb25OYW1lLFxuICAgICAgcnVudGltZTogRGVmYXVsdFJ1bnRpbWVzLlBZVEhPTixcbiAgICAgIHJvbGU6IHNxc0NvbnN1bWVyUm9sZSxcbiAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnLy4uL3Jlc291cmNlcy9kZWZhdWx0LXNxcy1jb25zdW1lcicpLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgU1RBVEVfTUFDSElORV9BUk46IHN0YXRlTWFjaGluZS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICAgIFJBV19QUkVGSVg6IHRoaXMucHJlZml4ZXMucmF3LFxuICAgICAgICAuLi5Qb3dlcnRvb2xzQ29uZmlnLmdlbmVyYXRlRGVmYXVsdExhbWJkYUNvbmZpZyhwcm9wcy5lbmFibGVPYnNlcnZhYmlsaXR5LCBtZXRyaWNOYW1lc3BhY2UsIG1ldHJpY1NlcnZpY2VOYW1lKSxcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgZGVzY3JpcHRpb246ICdDb25zdW1lcyBTUVMgbWVzc2FnZXMgYW5kIHRyaWdnZXJzIFN0ZXAgRnVuY3Rpb25zIGV4ZWN1dGlvbnMgZm9yIGRvY3VtZW50IHByb2Nlc3NpbmcnLFxuICAgICAgZW52aXJvbm1lbnRFbmNyeXB0aW9uOiBlbmNyeXB0aW9uS2V5LFxuICAgICAgdnBjOiBwcm9wcy5uZXR3b3JrID8gcHJvcHMubmV0d29yay52cGMgOiB1bmRlZmluZWQsXG4gICAgICB2cGNTdWJuZXRzOiBwcm9wcy5uZXR3b3JrID8gcHJvcHMubmV0d29yay5hcHBsaWNhdGlvblN1Ym5ldFNlbGVjdGlvbigpIDogdW5kZWZpbmVkLFxuICAgIH0pO1xuXG4gICAgLy8gQWRkIFNRUyBldmVudCBzb3VyY2UgdG8gTGFtYmRhXG4gICAgc3FzQ29uc3VtZXJMYW1iZGEuYWRkRXZlbnRTb3VyY2UoXG4gICAgICBuZXcgU3FzRXZlbnRTb3VyY2UocXVldWUsIHtcbiAgICAgICAgYmF0Y2hTaXplOiAxMCxcbiAgICAgICAgbWF4QmF0Y2hpbmdXaW5kb3c6IER1cmF0aW9uLnNlY29uZHMoNSksXG4gICAgICAgIHJlcG9ydEJhdGNoSXRlbUZhaWx1cmVzOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBzcXNDb25zdW1lckxhbWJkYTtcbiAgfVxuXG4gIGdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKGFkZGl0aW9uYWxJQU1BY3Rpb25zPzogc3RyaW5nW10sIG5hcnJvd0FjdGlvbnM/OiBib29sZWFuKTogUG9saWN5U3RhdGVtZW50W10ge1xuICAgIGNvbnN0IGJ1Y2tldDogQnVja2V0ID0gdGhpcy5yZXNvdXJjZXMuYnVja2V0O1xuXG4gICAgY29uc3Qgbm9ybWFsaXplZElBTUFjdGlvbnMgPSBhZGRpdGlvbmFsSUFNQWN0aW9ucyB8fCBbXTtcblxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBbXTtcbiAgICBpZiAoIW5hcnJvd0FjdGlvbnMpIHtcbiAgICAgIHN0YXRlbWVudHMucHVzaChuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFsnczM6R2V0T2JqZWN0JywgJ3MzOkNvcHlPYmplY3QnLCAnczM6RGVsZXRlT2JqZWN0JywgJ3MzOlB1dE9iamVjdCcsICdzMzpMaXN0KicsIC4uLm5vcm1hbGl6ZWRJQU1BY3Rpb25zXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbYCR7YnVja2V0LmJ1Y2tldEFybn0vKmAsIGJ1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgfSkpO1xuXG4gICAgICBpZiAoYnVja2V0LmVuY3J5cHRpb25LZXkpIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICdrbXM6RW5jcnlwdCcsXG4gICAgICAgICAgICAna21zOlJlRW5jcnlwdConLFxuICAgICAgICAgICAgJ2ttczpHZW5lcmF0ZURhdGFLZXkqJyxcbiAgICAgICAgICAgICdrbXM6RGVjcnlwdCcsXG4gICAgICAgICAgXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtidWNrZXQuZW5jcnlwdGlvbktleS5rZXlBcm5dLFxuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGVtZW50cy5wdXNoKG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgICAgYWN0aW9uczogbm9ybWFsaXplZElBTUFjdGlvbnMsXG4gICAgICAgIHJlc291cmNlczogW2Ake2J1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50cztcbiAgfVxuXG4gIGNyZWF0ZUZhaWxlZENoYWluKHNjb3BlOiBDb25zdHJ1Y3QsIGlkUHJlZml4Pzogc3RyaW5nKTogQ2hhaW4ge1xuICAgIGNvbnN0IGJ1Y2tldDogQnVja2V0ID0gdGhpcy5yZXNvdXJjZXMuYnVja2V0O1xuICAgIGNvbnN0IHByZWZpeCA9IGlkUHJlZml4ID8gYCR7aWRQcmVmaXh9LWAgOiAnJztcblxuICAgIGNvbnN0IGZhaWxlZENoYWluID0gbmV3IENhbGxBd3NTZXJ2aWNlKHNjb3BlLCBgJHtwcmVmaXh9Q29weVRvRmFpbGVkYCwge1xuICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgIGFjdGlvbjogJ2NvcHlPYmplY3QnLFxuICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICBCdWNrZXQ6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuYnVja2V0JyksXG4gICAgICAgIENvcHlTb3VyY2U6IEpzb25QYXRoLmZvcm1hdCgne30ve30nLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmJ1Y2tldCcpLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50LmtleScpKSxcbiAgICAgICAgS2V5OiBKc29uUGF0aC5mb3JtYXQoYCR7dGhpcy5wcmVmaXhlcy5mYWlsZWR9e30ve31gLCBKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJyksIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuZmlsZW5hbWUnKSksXG4gICAgICB9LFxuICAgICAgaWFtUmVzb3VyY2VzOiBbYCR7YnVja2V0LmJ1Y2tldEFybn0vKmBdLFxuICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICB9KS5uZXh0KFxuICAgICAgbmV3IENhbGxBd3NTZXJ2aWNlKHNjb3BlLCBgJHtwcmVmaXh9RGVsZXRlRnJvbVJhd2AsIHtcbiAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgYWN0aW9uOiAnZGVsZXRlT2JqZWN0JyxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEJ1Y2tldDogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5idWNrZXQnKSxcbiAgICAgICAgICBLZXk6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQua2V5JyksXG4gICAgICAgIH0sXG4gICAgICAgIGlhbVJlc291cmNlczogW2Ake2J1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFpbGVkQ2hhaW47XG4gIH1cblxuICBjcmVhdGVTdWNjZXNzQ2hhaW4oc2NvcGU6IENvbnN0cnVjdCwgaWRQcmVmaXg/OiBzdHJpbmcpOiBDaGFpbiB7XG4gICAgY29uc3QgYnVja2V0OiBCdWNrZXQgPSB0aGlzLnJlc291cmNlcy5idWNrZXQ7XG4gICAgY29uc3QgcHJlZml4ID0gaWRQcmVmaXggPyBgJHtpZFByZWZpeH0tYCA6ICcnO1xuXG4gICAgY29uc3QgY2hhaW4gPSBuZXcgQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsIGAke3ByZWZpeH1Db3B5VG9Qcm9jZXNzZWRgLCB7XG4gICAgICBzZXJ2aWNlOiAnczMnLFxuICAgICAgYWN0aW9uOiAnY29weU9iamVjdCcsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEJ1Y2tldDogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5idWNrZXQnKSxcbiAgICAgICAgQ29weVNvdXJjZTogSnNvblBhdGguZm9ybWF0KCd7fS97fScsIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQuYnVja2V0JyksIEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQua2V5JykpLFxuICAgICAgICBLZXk6IEpzb25QYXRoLmZvcm1hdChgJHt0aGlzLnByZWZpeGVzLnByb2Nlc3NlZH17fS97fWAsIEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSwgSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5maWxlbmFtZScpKSxcbiAgICAgIH0sXG4gICAgICBpYW1SZXNvdXJjZXM6IFtgJHtidWNrZXQuYnVja2V0QXJufS8qYF0sXG4gICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgIH0pLm5leHQoXG4gICAgICBuZXcgQ2FsbEF3c1NlcnZpY2Uoc2NvcGUsIGAke3ByZWZpeH1EZWxldGVGcm9tUmF3U3VjY2Vzc2AsIHtcbiAgICAgICAgc2VydmljZTogJ3MzJyxcbiAgICAgICAgYWN0aW9uOiAnZGVsZXRlT2JqZWN0JyxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIEJ1Y2tldDogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudC5idWNrZXQnKSxcbiAgICAgICAgICBLZXk6IEpzb25QYXRoLnN0cmluZ0F0KCckLmNvbnRlbnQua2V5JyksXG4gICAgICAgIH0sXG4gICAgICAgIGlhbVJlc291cmNlczogW2Ake2J1Y2tldC5idWNrZXRBcm59LypgXSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gY2hhaW47XG4gIH1cbn0iXX0=
|
|
@@ -39,5 +39,5 @@ class AgenticDocumentProcessing extends bedrock_document_processing_1.BedrockDoc
|
|
|
39
39
|
}
|
|
40
40
|
exports.AgenticDocumentProcessing = AgenticDocumentProcessing;
|
|
41
41
|
_a = JSII_RTTI_SYMBOL_1;
|
|
42
|
-
AgenticDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgenticDocumentProcessing", version: "1.12.
|
|
42
|
+
AgenticDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.AgenticDocumentProcessing", version: "1.12.1" };
|
|
43
43
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnRpYy1kb2N1bWVudC1wcm9jZXNzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvYWdlbnRpYy1kb2N1bWVudC1wcm9jZXNzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUZBQW1FO0FBR25FLCtFQUEwRztBQUMxRyw0Q0FBMkQ7QUFXM0QsTUFBYSx5QkFBMEIsU0FBUSx1REFBeUI7SUFNdEUsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsY0FBYztRQUN0Qiw4QkFBOEI7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsOEJBQWdFLENBQUM7WUFDekYsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMseUJBQXlCLENBQUM7WUFDbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLHNCQUFVLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1lBRS9FLE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2pGLEtBQUssTUFBTSxTQUFTLElBQUksdUJBQXVCLEVBQUUsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7UUFFRCx1R0FBdUc7UUFDdkcsSUFBSSxJQUFJLENBQUMsNkJBQTZCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLDZCQUE2QixHQUFHLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsdUVBQXVFO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUN0RSxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUVyQyxPQUFPLElBQUksc0NBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ3BDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWM7WUFDL0MsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxjQUFjLEVBQUU7Z0JBQ2QsVUFBVSxFQUFFLGtCQUFrQjthQUMvQjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBdkNILDhEQXdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExhbWJkYUludm9rZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfSBmcm9tICcuL2Jhc2UtZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nLCBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHMgfSBmcm9tICcuL2JlZHJvY2stZG9jdW1lbnQtcHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBCYXRjaEFnZW50LCBCYXRjaEFnZW50UHJvcHMgfSBmcm9tICcuLi9mcmFtZXdvcmsnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRpY0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIGV4dGVuZHMgQmVkcm9ja0RvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoaXMgcGFyYW1ldGVyIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogYHByb2Nlc3NpbmdCZWRyb2NrTW9kZWxgIHBhcmFtZXRlci5cbiAgICovXG4gIHJlYWRvbmx5IHByb2Nlc3NpbmdBZ2VudFBhcmFtZXRlcnM6IEJhdGNoQWdlbnRQcm9wcztcbn1cblxuZXhwb3J0IGNsYXNzIEFnZW50aWNEb2N1bWVudFByb2Nlc3NpbmcgZXh0ZW5kcyBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nIHtcbiAgLyoqIENhY2hlZCBiYXRjaCBhZ2VudCB0byBhdm9pZCBkdXBsaWNhdGUgcmVzb3VyY2UgY3JlYXRpb24gKi9cbiAgcHJpdmF0ZSBfYmF0Y2hBZ2VudD86IEJhdGNoQWdlbnQ7XG4gIC8qKiBDb3VudGVyIGZvciBnZW5lcmF0aW5nIHVuaXF1ZSBwcm9jZXNzaW5nIHN0ZXAgSURzICovXG4gIHByaXZhdGUgX2FnZW50aWNQcm9jZXNzaW5nU3RlcENvdW50ZXI/OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFnZW50aWNEb2N1bWVudFByb2Nlc3NpbmdQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHtcbiAgICAvLyBDcmVhdGUgQmF0Y2hBZ2VudCBvbmx5IG9uY2VcbiAgICBpZiAoIXRoaXMuX2JhdGNoQWdlbnQpIHtcbiAgICAgIGNvbnN0IGFnZW50UHJvcHMgPSB0aGlzLmJlZHJvY2tEb2N1bWVudFByb2Nlc3NpbmdQcm9wcyBhcyBBZ2VudGljRG9jdW1lbnRQcm9jZXNzaW5nUHJvcHM7XG4gICAgICBjb25zdCBwcm9jZXNzaW5nQWdlbnRQcm9wcyA9IGFnZW50UHJvcHMucHJvY2Vzc2luZ0FnZW50UGFyYW1ldGVycztcbiAgICAgIHRoaXMuX2JhdGNoQWdlbnQgPSBuZXcgQmF0Y2hBZ2VudCh0aGlzLCAnSURQQmF0Y2hBZ2VudCcsIHByb2Nlc3NpbmdBZ2VudFByb3BzKTtcblxuICAgICAgY29uc3QgYWRhcHRlclBvbGljeVN0YXRlbWVudHMgPSB0aGlzLmluZ3Jlc3NBZGFwdGVyLmdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKCk7XG4gICAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhZGFwdGVyUG9saWN5U3RhdGVtZW50cykge1xuICAgICAgICB0aGlzLl9iYXRjaEFnZW50LmFnZW50Um9sZS5hZGRUb1ByaW5jaXBhbFBvbGljeShzdGF0ZW1lbnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluaXRpYWxpemUgY291bnRlciBpZiBub3QgeWV0IHNldCAoaGFuZGxlcyBjYXNlIHdoZXJlIG1ldGhvZCBpcyBjYWxsZWQgYmVmb3JlIGNvbnN0cnVjdG9yIGNvbXBsZXRlcylcbiAgICBpZiAodGhpcy5fYWdlbnRpY1Byb2Nlc3NpbmdTdGVwQ291bnRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9hZ2VudGljUHJvY2Vzc2luZ1N0ZXBDb3VudGVyID0gMDtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgY3JlYXRlIGEgbmV3IExhbWJkYUludm9rZSB0YXNrIHRvIGFsbG93IHByb3BlciBzdGF0ZSBjaGFpbmluZ1xuICAgIGNvbnN0IHN0ZXBJZCA9IGBQcm9jZXNzaW5nU3RlcC0ke3RoaXMuX2FnZW50aWNQcm9jZXNzaW5nU3RlcENvdW50ZXJ9YDtcbiAgICB0aGlzLl9hZ2VudGljUHJvY2Vzc2luZ1N0ZXBDb3VudGVyKys7XG5cbiAgICByZXR1cm4gbmV3IExhbWJkYUludm9rZSh0aGlzLCBzdGVwSWQsIHtcbiAgICAgIGxhbWJkYUZ1bmN0aW9uOiB0aGlzLl9iYXRjaEFnZW50LmFnZW50RnVuY3Rpb24hLFxuICAgICAgcmVzdWx0UGF0aDogJyQucHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICByZXN1bHRTZWxlY3Rvcjoge1xuICAgICAgICAncmVzdWx0LiQnOiAnJC5QYXlsb2FkLnJlc3VsdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG59Il19
|
|
@@ -377,5 +377,5 @@ class BaseDocumentProcessing extends constructs_1.Construct {
|
|
|
377
377
|
}
|
|
378
378
|
exports.BaseDocumentProcessing = BaseDocumentProcessing;
|
|
379
379
|
_a = JSII_RTTI_SYMBOL_1;
|
|
380
|
-
BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.12.
|
|
380
|
+
BaseDocumentProcessing[_a] = { fqn: "@cdklabs/cdk-appmod-catalog-blueprints.BaseDocumentProcessing", version: "1.12.1" };
|
|
381
381
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdXNlLWNhc2VzL2RvY3VtZW50LXByb2Nlc3NpbmcvYmFzZS1kb2N1bWVudC1wcm9jZXNzaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUVBQXFFO0FBQ3JFLHNDQUFzQztBQUV0Qyw2Q0FBeUU7QUFFekUsMkRBQThGO0FBQzlGLGlEQUFxRTtBQUNyRSxpREFBc0c7QUFDdEcsaURBQTBDO0FBQzFDLHFFQUEySTtBQUMzSSxpRkFBMks7QUFDM0ssMkNBQXVDO0FBQ3ZDLHVDQUFzRDtBQUN0RCw2RkFBdUY7QUFHdkYsNENBQXdGO0FBQ3hGLDBHQUFxRztBQUNyRyw4SEFBd0g7QUFFeEgsNElBQXFJO0FBNkRySTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJHO0FBQ0gsTUFBc0Isc0JBQXVCLFNBQVEsc0JBQVM7SUFnQjVEOzs7Ozs7Ozs7T0FTRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBa0M7UUFDMUUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSx5QkFBZSxFQUFFLENBQUM7UUFFcEUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsd0NBQThCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDL0YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsd0NBQThCLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0YsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDOUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIs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Q2pHLHlCQUF5QixFQUFFO2dCQUN6QixZQUFZLEVBQUUsOENBQW9CLENBQUMsVUFBVSxDQUFDLHlCQUF5QixDQUFDO2dCQUN4RSx1QkFBdUIsRUFBRSw4Q0FBb0IsQ0FBQyxVQUFVLENBQUMsNEJBQVEsQ0FBQyxZQUFZLENBQUMsNEJBQVEsQ0FBQyxRQUFRLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDO2FBQzdIO1lBQ0QsVUFBVSxFQUFFLDRCQUFRLENBQUMsT0FBTztTQUM3QixDQUFDLENBQ0g7YUFDQSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFekIsT0FBTyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDOztBQWhiSCx3REF5ZEMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG5cbmltcG9ydCB7IER1cmF0aW9uLCBQcm9wZXJ0eUluamVjdG9ycywgUmVtb3ZhbFBvbGljeSB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElNZXRyaWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaCc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVUeXBlLCBCaWxsaW5nTW9kZSwgVGFibGUsIFRhYmxlRW5jcnlwdGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1keW5hbW9kYic7XG5pbXBvcnQgeyBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCB7IEVmZmVjdCwgUG9saWN5RG9jdW1lbnQsIFBvbGljeVN0YXRlbWVudCwgUm9sZSwgU2VydmljZVByaW5jaXBhbCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgS2V5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBDdXN0b21lck1hbmFnZWRFbmNyeXB0aW9uQ29uZmlndXJhdGlvbiwgRGVmaW5pdGlvbkJvZHksIElDaGFpbmFibGUsIEpzb25QYXRoLCBTdGF0ZU1hY2hpbmUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9ucyc7XG5pbXBvcnQgeyBCZWRyb2NrSW52b2tlTW9kZWwsIER5bmFtb0F0dHJpYnV0ZVZhbHVlLCBEeW5hbW9QdXRJdGVtLCBEeW5hbW9VcGRhdGVJdGVtLCBMYW1iZGFJbnZva2UsIFN0ZXBGdW5jdGlvbnNTdGFydEV4ZWN1dGlvbiB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgSUFkYXB0ZXIsIFF1ZXVlZFMzQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcic7XG5pbXBvcnQgeyBEZWZhdWx0RG9jdW1lbnRQcm9jZXNzaW5nQ29uZmlnIH0gZnJvbSAnLi9kZWZhdWx0LWRvY3VtZW50LXByb2Nlc3NpbmctY29uZmlnJztcbmltcG9ydCB7IE5ldHdvcmsgfSBmcm9tICcuLi9mcmFtZXdvcmsnO1xuaW1wb3J0IHsgRXZlbnRicmlkZ2VCcm9rZXIgfSBmcm9tICcuLi9mcmFtZXdvcmsvZm91bmRhdGlvbi9ldmVudGJyaWRnZS1icm9rZXInO1xuaW1wb3J0IHsgTG9nR3JvdXBEYXRhUHJvdGVjdGlvblByb3BzLCBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMgfSBmcm9tICcuLi91dGlsaXRpZXMnO1xuaW1wb3J0IHsgRGVmYXVsdE9ic2VydmFiaWxpdHlDb25maWcgfSBmcm9tICcuLi91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9kZWZhdWx0LW9ic2VydmFiaWxpdHktY29uZmlnJztcbmltcG9ydCB7IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yIH0gZnJvbSAnLi4vdXRpbGl0aWVzL29ic2VydmFiaWxpdHkvbGFtYmRhLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuaW1wb3J0IHsgSU9ic2VydmFibGUsIE9ic2VydmFibGVQcm9wcyB9IGZyb20gJy4uL3V0aWxpdGllcy9vYnNlcnZhYmlsaXR5L29ic2VydmFibGUnO1xuaW1wb3J0IHsgU3RhdGVNYWNoaW5lT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IgfSBmcm9tICcuLi91dGlsaXRpZXMvb2JzZXJ2YWJpbGl0eS9zdGF0ZS1tYWNoaW5lLW9ic2VydmFiaWxpdHktcHJvcGVydHktaW5qZWN0b3InO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBmb3IgQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3QuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzIGV4dGVuZHMgT2JzZXJ2YWJsZVByb3BzIHtcblxuICAvKipcbiAgICogQWRhcHRlciB0aGF0IGRlZmluZXMgaG93IHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHdvcmtmbG93IGlzIHRyaWdnZXJlZFxuICAgKlxuICAgKiBAZGVmYXVsdCBRdWV1ZWRTM0FkYXB0ZXJcbiAgICovXG4gIHJlYWRvbmx5IGluZ3Jlc3NBZGFwdGVyPzogSUFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIER5bmFtb0RCIHRhYmxlIGZvciBzdG9yaW5nIGRvY3VtZW50IHByb2Nlc3NpbmcgbWV0YWRhdGEgYW5kIHdvcmtmbG93IHN0YXRlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIGEgbmV3IHRhYmxlIHdpbGwgYmUgY3JlYXRlZCB3aXRoIERvY3VtZW50SWQgYXMgcGFydGl0aW9uIGtleS5cbiAgICovXG4gIHJlYWRvbmx5IGRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlPzogVGFibGU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gZXhlY3V0aW9uIHRpbWUgZm9yIHRoZSBTdGVwIEZ1bmN0aW9ucyB3b3JrZmxvdy5cbiAgICogQGRlZmF1bHQgRHVyYXRpb24ubWludXRlcygzMClcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93VGltZW91dD86IER1cmF0aW9uO1xuICAvKipcbiAgICogUmVtb3ZhbCBwb2xpY3kgZm9yIGNyZWF0ZWQgcmVzb3VyY2VzIChidWNrZXQsIHRhYmxlLCBxdWV1ZSkuXG4gICAqIEBkZWZhdWx0IFJlbW92YWxQb2xpY3kuREVTVFJPWVxuICAgKi9cbiAgcmVhZG9ubHkgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3k7XG4gIC8qKlxuICAgKiBPcHRpb25hbCBFdmVudEJyaWRnZSBicm9rZXIgZm9yIHB1Ymxpc2hpbmcgY3VzdG9tIGV2ZW50cyBkdXJpbmcgcHJvY2Vzc2luZy5cbiAgICogSWYgbm90IHByb3ZpZGVkLCBubyBjdXN0b20gZXZlbnRzIHdpbGwgYmUgc2VudCBvdXQuXG4gICAqL1xuICByZWFkb25seSBldmVudGJyaWRnZUJyb2tlcj86IEV2ZW50YnJpZGdlQnJva2VyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgbG9nZ2luZyBhbmQgdHJhY2luZyBmb3IgYWxsIHN1cHBvcnRpbmcgcmVzb3VyY2VcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZU9ic2VydmFiaWxpdHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCBjYW4gcnVuIGluc2lkZSBhIFZQQyB3aWxsIGZvbGxvdyB0aGUgcHJvdmlkZWQgbmV0d29yayBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IHJlc291cmNlcyB3aWxsIHJ1biBvdXRzaWRlIG9mIGEgVlBDXG4gICAqL1xuICByZWFkb25seSBuZXR3b3JrPzogTmV0d29yaztcblxuICAvKipcbiAgICogS01TIGtleSB0byBiZSB1c2VkLlxuICAgKiBAZGVmYXVsdCBBIG5ldyBrZXkgd291bGQgYmUgY3JlYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleT86IEtleTtcbn1cblxuLyoqXG4gKiBVbmlvbiB0eXBlIGZvciBTdGVwIEZ1bmN0aW9ucyB0YXNrcyB0aGF0IGNhbiBiZSB1c2VkIGluIGRvY3VtZW50IHByb2Nlc3Npbmcgd29ya2Zsb3dzLlxuICogU3VwcG9ydHMgQmVkcm9jayBtb2RlbCBpbnZvY2F0aW9uLCBMYW1iZGEgZnVuY3Rpb24gaW52b2NhdGlvbiwgYW5kIG5lc3RlZCBTdGVwIEZ1bmN0aW9ucyBleGVjdXRpb24uXG4gKi9cbmV4cG9ydCB0eXBlIERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlID0gQmVkcm9ja0ludm9rZU1vZGVsIHwgTGFtYmRhSW52b2tlIHwgU3RlcEZ1bmN0aW9uc1N0YXJ0RXhlY3V0aW9uO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHNlcnZlcmxlc3MgZG9jdW1lbnQgcHJvY2Vzc2luZyB3b3JrZmxvd3MuXG4gKlxuICogUHJvdmlkZXMgYSBjb21wbGV0ZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lIHdpdGg6XG4gKiAtICoqUzMgU3RvcmFnZSoqOiBPcmdhbml6ZWQgd2l0aCBwcmVmaXhlcyAocmF3LywgcHJvY2Vzc2VkLywgZmFpbGVkLykgZm9yIGRvY3VtZW50IGxpZmVjeWNsZSBtYW5hZ2VtZW50XG4gKiAtICoqU1FTIFF1ZXVlKio6IFJlbGlhYmxlIG1lc3NhZ2UgcHJvY2Vzc2luZyB3aXRoIGNvbmZpZ3VyYWJsZSB2aXNpYmlsaXR5IHRpbWVvdXQgYW5kIGRlYWQgbGV0dGVyIHF1ZXVlXG4gKiAtICoqRHluYW1vREIgVGFibGUqKjogV29ya2Zsb3cgbWV0YWRhdGEgdHJhY2tpbmcgd2l0aCBEb2N1bWVudElkIGFzIHBhcnRpdGlvbiBrZXlcbiAqIC0gKipTdGVwIEZ1bmN0aW9ucyoqOiBPcmNoZXN0cmF0ZWQgd29ya2Zsb3cgd2l0aCBhdXRvbWF0aWMgZmlsZSBtb3ZlbWVudCBiYXNlZCBvbiBwcm9jZXNzaW5nIG91dGNvbWVcbiAqIC0gKipBdXRvLXRyaWdnZXJpbmcqKjogUzMgZXZlbnQgbm90aWZpY2F0aW9ucyBhdXRvbWF0aWNhbGx5IHN0YXJ0IHByb2Nlc3Npbmcgd2hlbiBmaWxlcyBhcmUgdXBsb2FkZWQgdG8gcmF3LyBwcmVmaXhcbiAqIC0gKipFcnJvciBIYW5kbGluZyoqOiBGYWlsZWQgZG9jdW1lbnRzIGFyZSBtb3ZlZCB0byBmYWlsZWQvIHByZWZpeCB3aXRoIGVycm9yIGRldGFpbHMgc3RvcmVkIGluIER5bmFtb0RCXG4gKiAtICoqRXZlbnRCcmlkZ2UgSW50ZWdyYXRpb24qKjogT3B0aW9uYWwgY3VzdG9tIGV2ZW50IHB1Ymxpc2hpbmcgZm9yIHdvcmtmbG93IHN0YXRlIGNoYW5nZXNcbiAqXG4gKiAjIyBBcmNoaXRlY3R1cmUgRmxvd1xuICogUzMgVXBsb2FkIChyYXcvKSDihpIgU1FTIOKGkiBMYW1iZGEgQ29uc3VtZXIg4oaSIFN0ZXAgRnVuY3Rpb25zIOKGkiBQcm9jZXNzaW5nIFN0ZXBzIOKGkiBTMyAocHJvY2Vzc2VkL2ZhaWxlZC8pXG4gKlxuICogIyMgSW1wbGVtZW50YXRpb24gUmVxdWlyZW1lbnRzXG4gKiBTdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IGZvdXIgYWJzdHJhY3QgbWV0aG9kcyB0byBkZWZpbmUgdGhlIHByb2Nlc3Npbmcgd29ya2Zsb3c6XG4gKiAtIGBjbGFzc2lmaWNhdGlvblN0ZXAoKWA6IERvY3VtZW50IHR5cGUgY2xhc3NpZmljYXRpb25cbiAqIC0gYGV4dHJhY3Rpb25TdGVwKClgOiBEYXRhIGV4dHJhY3Rpb24gZnJvbSBkb2N1bWVudHNcbiAqIC0gYGVucmljaG1lbnRTdGVwKClgOiBPcHRpb25hbCBkYXRhIGVucmljaG1lbnQgKHJldHVybiB1bmRlZmluZWQgdG8gc2tpcClcbiAqIC0gYHBvc3RQcm9jZXNzaW5nU3RlcCgpYDogT3B0aW9uYWwgcG9zdC1wcm9jZXNzaW5nIChyZXR1cm4gdW5kZWZpbmVkIHRvIHNraXApXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRG9jdW1lbnRQcm9jZXNzaW5nIGV4dGVuZHMgQ29uc3RydWN0IGltcGxlbWVudHMgSU9ic2VydmFibGUge1xuICAvKiogQnVzaW5lc3MgbWV0cmljIHNlcnZpY2UgbmFtZS4gVGhpcyBpcyBwYXJ0IG9mIHRoZSBpbml0aWFsIHNlcnZpY2UgZGltZW5zaW9uICovXG4gIHJlYWRvbmx5IG1ldHJpY1NlcnZpY2VOYW1lOiBzdHJpbmc7XG4gIC8qKiBCdXNpbmVzcyBtZXRyaWMgbmFtZXNwYWNlLiAqL1xuICByZWFkb25seSBtZXRyaWNOYW1lc3BhY2U6IHN0cmluZztcbiAgLyoqIGxvZyBncm91cCBkYXRhIHByb3RlY3Rpb24gY29uZmlndXJhdGlvbiAqL1xuICByZWFkb25seSBsb2dHcm91cERhdGFQcm90ZWN0aW9uOiBMb2dHcm91cERhdGFQcm90ZWN0aW9uUHJvcHM7XG4gIC8qKiBEeW5hbW9EQiB0YWJsZSBmb3Igc3RvcmluZyBkb2N1bWVudCBwcm9jZXNzaW5nIG1ldGFkYXRhIGFuZCB3b3JrZmxvdyBzdGF0ZSAqL1xuICByZWFkb25seSBkb2N1bWVudFByb2Nlc3NpbmdUYWJsZTogVGFibGU7XG4gIC8qKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcHM6IEJhc2VEb2N1bWVudFByb2Nlc3NpbmdQcm9wcztcbiAgLyoqIEtNUyBrZXkgKi9cbiAgcmVhZG9ubHkgZW5jcnlwdGlvbktleTogS2V5O1xuICAvKiogSW5ncmVzcyBhZGFwdGVyLCByZXNwb25zaWJsZSBmb3IgdHJpZ2dlcmluZyB3b3JrZmxvdyAqL1xuICByZWFkb25seSBpbmdyZXNzQWRhcHRlcjogSUFkYXB0ZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgQmFzZURvY3VtZW50UHJvY2Vzc2luZyBjb25zdHJ1Y3QuXG4gICAqXG4gICAqIEluaXRpYWxpemVzIHRoZSBjb21wbGV0ZSBkb2N1bWVudCBwcm9jZXNzaW5nIGluZnJhc3RydWN0dXJlIGluY2x1ZGluZyBTMyBidWNrZXQsXG4gICAqIFNRUyBxdWV1ZSwgRHluYW1vREIgdGFibGUsIGFuZCBzZXRzIHVwIFMzIGV2ZW50IG5vdGlmaWNhdGlvbnMgdG8gdHJpZ2dlciBwcm9jZXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICAqIEBwYXJhbSBpZCAtIFRoZSBzY29wZWQgY29uc3RydWN0IElELiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIHNjb3BlLlxuICAgKiBAcGFyYW0gcHJvcHMgLSBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgZm9yIHRoZSBkb2N1bWVudCBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQmFzZURvY3VtZW50UHJvY2Vzc2luZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5pbmdyZXNzQWRhcHRlciA9IHByb3BzLmluZ3Jlc3NBZGFwdGVyIHx8IG5ldyBRdWV1ZWRTM0FkYXB0ZXIoKTtcblxuICAgIGlmIChwcm9wcy5uZXR3b3JrKSB7XG4gICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1zZm4nLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuU1RFUF9GVU5DVElPTlMpO1xuICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtZWInLCBJbnRlcmZhY2VWcGNFbmRwb2ludEF3c1NlcnZpY2UuRVZFTlRCUklER0UpO1xuICAgICAgaWYgKHByb3BzLmVuYWJsZU9ic2VydmFiaWxpdHkpIHtcbiAgICAgICAgcHJvcHMubmV0d29yay5jcmVhdGVTZXJ2aWNlRW5kcG9pbnQoJ3ZwY2UtbG9ncycsIEludGVyZmFjZVZwY0VuZHBvaW50QXdzU2VydmljZS5DTE9VRFdBVENIX0xPR1MpO1xuICAgICAgICBwcm9wcy5uZXR3b3JrLmNyZWF0ZVNlcnZpY2VFbmRwb2ludCgndnBjZS1tZXRyaWNzJywgSW50ZXJmYWNlVnBjRW5kcG9pbnRBd3NTZXJ2aWNlLkNMT1VEV0FUQ0hfTU9OSVRPUklORyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5pbmdyZXNzQWRhcHRlci5pbml0KHRoaXMsIHByb3BzKTtcblxuICAgIHRoaXMuZW5jcnlwdGlvbktleSA9IHByb3BzLmVuY3J5cHRpb25LZXkgfHwgbmV3IEtleSh0aGlzLCAnSURQRW5jcnlwdGlvbktleScsIHtcbiAgICAgIGVuYWJsZUtleVJvdGF0aW9uOiB0cnVlLFxuICAgICAgcmVtb3ZhbFBvbGljeTogcHJvcHMucmVtb3ZhbFBvbGljeSB8fCBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICB0aGlzLmxvZ0dyb3VwRGF0YVByb3RlY3Rpb24gPSBMb2dHcm91cERhdGFQcm90ZWN0aW9uVXRpbHMuaGFuZGxlRGVmYXVsdCh0aGlzLCBwcm9wcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uLCBwcm9wcy5yZW1vdmFsUG9saWN5KTtcblxuICAgIHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUgPSBwcm9wcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSB8fCBuZXcgVGFibGUodGhpcywgJ0RvY3VtZW50UHJvY2Vzc2luZ1RhYmxlJywge1xuICAgICAgcGFydGl0aW9uS2V5OiB7XG4gICAgICAgIG5hbWU6ICdEb2N1bWVudElkJyxcbiAgICAgICAgdHlwZTogQXR0cmlidXRlVHlwZS5TVFJJTkcsXG4gICAgICB9LFxuICAgICAgYmlsbGluZ01vZGU6IEJpbGxpbmdNb2RlLlBBWV9QRVJfUkVRVUVTVCxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLnJlbW92YWxQb2xpY3kgfHwgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeVNwZWNpZmljYXRpb246IHtcbiAgICAgICAgcG9pbnRJblRpbWVSZWNvdmVyeUVuYWJsZWQ6IHRydWUsXG4gICAgICB9LFxuICAgICAgZW5jcnlwdGlvbjogVGFibGVFbmNyeXB0aW9uLkNVU1RPTUVSX01BTkFHRUQsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmVuY3J5cHRpb25LZXksXG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMuZW5hYmxlT2JzZXJ2YWJpbGl0eSkge1xuICAgICAgUHJvcGVydHlJbmplY3RvcnMub2YodGhpcykuYWRkKFxuICAgICAgICBuZXcgU3RhdGVNYWNoaW5lT2JzZXJ2YWJpbGl0eVByb3BlcnR5SW5qZWN0b3IodGhpcy5sb2dHcm91cERhdGFQcm90ZWN0aW9uKSxcbiAgICAgICAgbmV3IExhbWJkYU9ic2VydmFiaWxpdHlQcm9wZXJ0eUluamVjdG9yKHRoaXMubG9nR3JvdXBEYXRhUHJvdGVjdGlvbiksXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMubWV0cmljTmFtZXNwYWNlID0gcHJvcHMubWV0cmljTmFtZXNwYWNlIHx8IERlZmF1bHRPYnNlcnZhYmlsaXR5Q29uZmlnLkRFRkFVTFRfTUVUUklDX05BTUVTUEFDRTtcbiAgICB0aGlzLm1ldHJpY1NlcnZpY2VOYW1lID0gcHJvcHMubWV0cmljU2VydmljZU5hbWUgfHwgRGVmYXVsdERvY3VtZW50UHJvY2Vzc2luZ0NvbmZpZy5ERUZBVUxUX09CU0VSVkFCSUxJVFlfTUVUUklDX1NWQ19OQU1FO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgaGFuZGxlU3RhdGVNYWNoaW5lQ3JlYXRpb24oc3RhdGVNYWNoaW5lSWQ6IHN0cmluZykge1xuICAgIC8vIENoZWNrIGlmIHByZXByb2Nlc3NpbmcgaXMgbmVlZGVkIChlLmcuLCBmb3IgY2h1bmtpbmcgbGFyZ2UgZG9jdW1lbnRzKVxuICAgIGNvbnN0IHByZXByb2Nlc3NpbmdTdGVwID0gdGhpcy5wcmVwcm9jZXNzaW5nU3RlcCgpO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBtZXRhZGF0YSBlbnRyeSBpbiBEeW5hbW9EQlxuICAgIC8vIEJhc2UgY2xhc3Mgb25seSBrbm93cyBhYm91dCBjb3JlIGRvY3VtZW50IGZpZWxkc1xuICAgIGNvbnN0IGJhc2VJdGVtOiBSZWNvcmQ8c3RyaW5nLCBEeW5hbW9BdHRyaWJ1dGVWYWx1ZT4gPSB7XG4gICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICBDb250ZW50VHlwZTogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50VHlwZScpKSxcbiAgICAgIENvbnRlbnQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLmNvbnRlbnQnKSkpLFxuICAgICAgV29ya2Zsb3dTdGF0dXM6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3BlbmRpbmcnKSxcbiAgICAgIFN0YXRlTWFjaGluZUV4ZWNJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJCQuRXhlY3V0aW9uLklkJykpLFxuICAgIH07XG5cbiAgICAvLyBBbGxvdyBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgdG8gYWRkIHByZXByb2Nlc3Npbmctc3BlY2lmaWMgbWV0YWRhdGFcbiAgICAvLyBUaGlzIGlzIGEgaG9vayBmb3Igc3ViY2xhc3NlcyB0byBleHRlbmQgdGhlIHNjaGVtYSB3aXRob3V0IGJhc2UgY2xhc3Mga25vd2luZyB0aGUgZGV0YWlsc1xuICAgIGNvbnN0IGFkZGl0aW9uYWxNZXRhZGF0YSA9IHRoaXMucHJlcHJvY2Vzc2luZ01ldGFkYXRhKCk7XG4gICAgT2JqZWN0LmFzc2lnbihiYXNlSXRlbSwgYWRkaXRpb25hbE1ldGFkYXRhKTtcblxuICAgIGNvbnN0IGluaXRNZXRhZGF0YUVudHJ5ID0gbmV3IER5bmFtb1B1dEl0ZW0odGhpcywgJ0luaXRNZXRhZGF0YUVudHJ5Jywge1xuICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICBpdGVtOiBiYXNlSXRlbSxcbiAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgfSk7XG5cbiAgICAvLyBCdWlsZCB3b3JrZmxvdzogaWYgcHJlcHJvY2Vzc2luZyBleGlzdHMsIGNoYWluIGl0IGJlZm9yZSB0aGUgbWFpbiB3b3JrZmxvd1xuICAgIGxldCB3b3JrZmxvd0RlZmluaXRpb246IElDaGFpbmFibGU7XG4gICAgaWYgKHByZXByb2Nlc3NpbmdTdGVwKSB7XG4gICAgICAvLyBQcmVwcm9jZXNzaW5nIOKGkiBJbml0TWV0YWRhdGEg4oaSIEN1c3RvbSBQcm9jZXNzaW5nIFdvcmtmbG93XG4gICAgICB3b3JrZmxvd0RlZmluaXRpb24gPSBwcmVwcm9jZXNzaW5nU3RlcFxuICAgICAgICAubmV4dChpbml0TWV0YWRhdGFFbnRyeSlcbiAgICAgICAgLm5leHQodGhpcy5jcmVhdGVQcm9jZXNzaW5nV29ya2Zsb3coKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluaXRNZXRhZGF0YSDihpIgU3RhbmRhcmQgUHJvY2Vzc2luZyBXb3JrZmxvdyAoYmFja3dhcmQgY29tcGF0aWJsZSlcbiAgICAgIHdvcmtmbG93RGVmaW5pdGlvbiA9IGluaXRNZXRhZGF0YUVudHJ5XG4gICAgICAgIC5uZXh0KHRoaXMuY3JlYXRlU3RhbmRhcmRQcm9jZXNzaW5nV29ya2Zsb3coKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgcm9sZSA9IHRoaXMuY3JlYXRlU3RhdGVNYWNoaW5lUm9sZSgpO1xuICAgIHRoaXMuZW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHREZWNyeXB0KHJvbGUpO1xuXG4gICAgY29uc3Qgc3RhdGVNYWNoaW5lID0gbmV3IFN0YXRlTWFjaGluZSh0aGlzLCBzdGF0ZU1hY2hpbmVJZCwge1xuICAgICAgZGVmaW5pdGlvbkJvZHk6IERlZmluaXRpb25Cb2R5LmZyb21DaGFpbmFibGUod29ya2Zsb3dEZWZpbml0aW9uKSxcbiAgICAgIHRpbWVvdXQ6IHRoaXMucHJvcHMud29ya2Zsb3dUaW1lb3V0IHx8IER1cmF0aW9uLm1pbnV0ZXMoMTUpLFxuICAgICAgcm9sZSxcbiAgICAgIGVuY3J5cHRpb25Db25maWd1cmF0aW9uOiBuZXcgQ3VzdG9tZXJNYW5hZ2VkRW5jcnlwdGlvbkNvbmZpZ3VyYXRpb24odGhpcy5lbmNyeXB0aW9uS2V5KSxcbiAgICB9KTtcblxuICAgIHRoaXMuaW5ncmVzc0FkYXB0ZXIuY3JlYXRlSW5ncmVzc1RyaWdnZXIodGhpcywgc3RhdGVNYWNoaW5lLCB0aGlzLnByb3BzKTtcblxuICAgIHJldHVybiBzdGF0ZU1hY2hpbmU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVN0YXRlTWFjaGluZVJvbGUoKTogUm9sZSB7XG4gICAgcmV0dXJuIG5ldyBSb2xlKHRoaXMsICdTdGF0ZU1hY2hpbmVSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbCgnc3RhdGVzLmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFN0YXRlTWFjaGluZUV4ZWN1dGlvblBvbGljeTogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbXG4gICAgICAgICAgICAuLi50aGlzLmluZ3Jlc3NBZGFwdGVyLmdlbmVyYXRlQWRhcHRlcklBTVBvbGljaWVzKCksXG4gICAgICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICAgICAgICAgIGFjdGlvbnM6IFsnZHluYW1vZGI6UHV0SXRlbScsICdkeW5hbW9kYjpVcGRhdGVJdGVtJ10sXG4gICAgICAgICAgICAgIHJlc291cmNlczogW3RoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUudGFibGVBcm5dLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNb3ZlVG9GYWlsZWRDaGFpbihpZFByZWZpeD86IHN0cmluZykge1xuICAgIGNvbnN0IGZhaWxlZENoYWluID0gdGhpcy5pbmdyZXNzQWRhcHRlci5jcmVhdGVGYWlsZWRDaGFpbih0aGlzLCBpZFByZWZpeCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlcikge1xuICAgICAgY29uc3QgZWJDaGFpbiA9IHRoaXMucHJvcHMuZXZlbnRicmlkZ2VCcm9rZXIuc2VuZFZpYVNmbkNoYWluKFxuICAgICAgICAnZG9jdW1lbnQtcHJvY2Vzc2luZy1mYWlsZWQnLFxuICAgICAgICB7XG4gICAgICAgICAgZG9jdW1lbnRJZDogSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpLFxuICAgICAgICAgIGNvbnRlbnRUeXBlOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5jb250ZW50VHlwZScpLFxuICAgICAgICAgIGNvbnRlbnQ6IEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5jb250ZW50JykpLFxuICAgICAgICB9LFxuICAgICAgKTtcblxuICAgICAgZmFpbGVkQ2hhaW4ubmV4dChlYkNoYWluKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFpbGVkQ2hhaW47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1vdmVUb1Byb2Nlc3NlZENoYWluKGlkUHJlZml4Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvY2Vzc2VkQ2hhaW4gPSB0aGlzLmluZ3Jlc3NBZGFwdGVyLmNyZWF0ZVN1Y2Nlc3NDaGFpbih0aGlzLCBpZFByZWZpeCk7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlcikge1xuICAgICAgcHJvY2Vzc2VkQ2hhaW4ubmV4dChcbiAgICAgICAgdGhpcy5wcm9wcy5ldmVudGJyaWRnZUJyb2tlci5zZW5kVmlhU2ZuQ2hhaW4oXG4gICAgICAgICAgJ2RvY3VtZW50LXByb2Nlc3NlZC1zdWNjZXNzZnVsJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkb2N1bWVudElkOiBKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJyksXG4gICAgICAgICAgICBjb250ZW50VHlwZTogSnNvblBhdGguc3RyaW5nQXQoJyQuY29udGVudFR5cGUnKSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5jb250ZW50JykpLFxuICAgICAgICAgICAgY2xhc3NpZmljYXRpb246IEpzb25QYXRoLnN0cmluZ0F0KCckLmNsYXNzaWZpY2F0aW9uUmVzdWx0LmRvY3VtZW50Q2xhc3NpZmljYXRpb24nKSxcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2Vzc2VkQ2hhaW47XG4gIH1cblxuICBwdWJsaWMgbWV0cmljcygpOiBJTWV0cmljW10ge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBvcHRpb25hbCBwcmVwcm9jZXNzaW5nIHN0ZXAgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiBUaGlzIHN0ZXAgcnVucyBCRUZPUkUgSW5pdCBNZXRhZGF0YSBhbmQgY2FuIGJlIHVzZWQgZm9yOlxuICAgKiAtIERvY3VtZW50IGNodW5raW5nIGZvciBsYXJnZSBmaWxlc1xuICAgKiAtIERvY3VtZW50IHZhbGlkYXRpb25cbiAgICogLSBGb3JtYXQgY29udmVyc2lvblxuICAgKiAtIEFueSBvdGhlciBwcmVwcm9jZXNzaW5nIG5lZWRlZCBiZWZvcmUgY2xhc3NpZmljYXRpb25cbiAgICpcbiAgICogQ29uY3JldGUgaW1wbGVtZW50YXRpb25zIGNhbiByZXR1cm4gdW5kZWZpbmVkIHRvIHNraXAgcHJlcHJvY2Vzc2luZyxcbiAgICogbWFpbnRhaW5pbmcgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHdvcmtmbG93cy5cbiAgICpcbiAgICogQHJldHVybnMgU3RlcCBGdW5jdGlvbnMgdGFzayBmb3IgcHJlcHJvY2Vzc2luZywgb3IgdW5kZWZpbmVkIHRvIHNraXAgdGhpcyBzdGVwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJlcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEhvb2sgZm9yIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyB0byBhZGQgcHJlcHJvY2Vzc2luZy1zcGVjaWZpYyBtZXRhZGF0YSB0byBEeW5hbW9EQi5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIGR1cmluZyBJbml0TWV0YWRhdGEgY3JlYXRpb24gYW5kIGFsbG93cyBzdWJjbGFzc2VzIHRvIGV4dGVuZFxuICAgKiB0aGUgRHluYW1vREIgc2NoZW1hIHdpdGggdGhlaXIgb3duIGZpZWxkcyB3aXRob3V0IHRoZSBiYXNlIGNsYXNzIGtub3dpbmcgdGhlIGRldGFpbHMuXG4gICAqXG4gICAqIFRoZSBiYXNlIGNsYXNzIHByb3ZpZGVzIHRoZSBjb3JlIGRvY3VtZW50IGZpZWxkcyAoRG9jdW1lbnRJZCwgQ29udGVudFR5cGUsIGV0Yy4pLFxuICAgKiBhbmQgc3ViY2xhc3NlcyBjYW4gYWRkIHRoZWlyIG93biBmaWVsZHMgKGUuZy4sIGNodW5raW5nIG1ldGFkYXRhKSBieSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kLlxuICAgKlxuICAgKiBAcmV0dXJucyBSZWNvcmQgb2YgYWRkaXRpb25hbCBEeW5hbW9EQiBhdHRyaWJ1dGUgdmFsdWVzIHRvIGluY2x1ZGUgaW4gSW5pdE1ldGFkYXRhXG4gICAqIEBkZWZhdWx0IHt9IChubyBhZGRpdGlvbmFsIG1ldGFkYXRhKVxuICAgKi9cbiAgcHJvdGVjdGVkIHByZXByb2Nlc3NpbmdNZXRhZGF0YSgpOiBSZWNvcmQ8c3RyaW5nLCBEeW5hbW9BdHRyaWJ1dGVWYWx1ZT4ge1xuICAgIC8vIERlZmF1bHQ6IG5vIGFkZGl0aW9uYWwgbWV0YWRhdGFcbiAgICAvLyBTdWJjbGFzc2VzIG92ZXJyaWRlIHRoaXMgdG8gYWRkIHRoZWlyIG93biBwcmVwcm9jZXNzaW5nLXNwZWNpZmljIGZpZWxkc1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwcm9jZXNzaW5nIHdvcmtmbG93IGFmdGVyIHByZXByb2Nlc3NpbmcgYW5kIGluaXRpYWxpemF0aW9uLlxuICAgKlxuICAgKiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMgY2FuIGN1c3RvbWl6ZSB0aGlzIHRvIGhhbmRsZSBwcmVwcm9jZXNzaW5nIHJlc3VsdHMuXG4gICAqIEZvciBleGFtcGxlLCBCZWRyb2NrRG9jdW1lbnRQcm9jZXNzaW5nIHVzZXMgdGhpcyB0byBhZGQgY29uZGl0aW9uYWwgYnJhbmNoaW5nXG4gICAqIGZvciBjaHVua2VkIHZzIG5vbi1jaHVua2VkIGRvY3VtZW50cy5cbiAgICpcbiAgICogSW1wbGVtZW50YXRpb25zIGNhbiBjYWxsIGBjcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdygpYCB0byByZXVzZSB0aGVcbiAgICogc3RhbmRhcmQgcHJvY2Vzc2luZyBmbG93IChDbGFzc2lmaWNhdGlvbiDihpIgUHJvY2Vzc2luZyDihpIgRW5yaWNobWVudCDihpIgUG9zdFByb2Nlc3NpbmcpLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyBjaGFpbiBmb3IgcHJvY2Vzc2luZyB0aGUgZG9jdW1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBjcmVhdGVQcm9jZXNzaW5nV29ya2Zsb3coKTogSUNoYWluYWJsZTtcblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgc3RhbmRhcmQgcHJvY2Vzc2luZyB3b3JrZmxvdyAobm8gcHJlcHJvY2Vzc2luZyBjdXN0b21pemF0aW9uKS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgZXhpc3Rpbmcgd29ya2Zsb3c6IENsYXNzaWZpY2F0aW9uIOKGkiBQcm9jZXNzaW5nIOKGkiBFbnJpY2htZW50IOKGkiBQb3N0UHJvY2Vzc2luZ1xuICAgKiBDb25jcmV0ZSBjbGFzc2VzIGNhbiBjYWxsIHRoaXMgbWV0aG9kIHRvIHJldXNlIHRoZSBzdGFuZGFyZCBmbG93IHdoZW4gdGhleSBkb24ndFxuICAgKiBuZWVkIGN1c3RvbSB3b3JrZmxvdyBicmFuY2hpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBpZFByZWZpeCBPcHRpb25hbCBwcmVmaXggZm9yIGNvbnN0cnVjdCBJRHMgdG8gZW5zdXJlIHVuaXF1ZW5lc3Mgd2hlbiBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAgICogQHJldHVybnMgU3RlcCBGdW5jdGlvbnMgY2hhaW4gZm9yIHN0YW5kYXJkIHByb2Nlc3NpbmdcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVTdGFuZGFyZFByb2Nlc3NpbmdXb3JrZmxvdyhpZFByZWZpeD86IHN0cmluZyk6IElDaGFpbmFibGUge1xuICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uU3RlcCA9IHRoaXMuY2xhc3NpZmljYXRpb25TdGVwKCk7XG4gICAgY29uc3QgcHJvY2Vzc2luZ1N0ZXAgPSB0aGlzLnByb2Nlc3NpbmdTdGVwKCk7XG4gICAgY29uc3QgZW5yaWNobWVudFN0ZXAgPSB0aGlzLmVucmljaG1lbnRTdGVwKCk7XG4gICAgY29uc3QgcG9zdFByb2Nlc3NpbmdTdGVwID0gdGhpcy5wb3N0UHJvY2Vzc2luZ1N0ZXAoKTtcblxuICAgIC8vIEZpbGUgbW92ZW1lbnQgb3BlcmF0aW9uc1xuICAgIGNvbnN0IG1vdmVUb0ZhaWxlZCA9IHRoaXMuY3JlYXRlTW92ZVRvRmFpbGVkQ2hhaW4oaWRQcmVmaXgpO1xuICAgIGNvbnN0IG1vdmVUb1Byb2Nlc3NlZCA9IHRoaXMuY3JlYXRlTW92ZVRvUHJvY2Vzc2VkQ2hhaW4oaWRQcmVmaXgpO1xuXG4gICAgY29uc3QgcHJlZml4ID0gaWRQcmVmaXggPyBgJHtpZFByZWZpeH0tYCA6ICcnO1xuXG4gICAgY29uc3QgcHJvY2Vzc2luZ0NoYWluID0gcHJvY2Vzc2luZ1N0ZXBcbiAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9UHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICBrZXk6IHtcbiAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgIH0sXG4gICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICc6bmV3U3RhdHVzJzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZygncHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pXG4gICAgICAubmV4dChcbiAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVByb2Nlc3NpbmdTdWNjZXNzVXBkYXRlYCwge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIFByb2Nlc3NpbmdSZXN1bHQgPSA6cHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwcm9jZXNzaW5nLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAnOnByb2Nlc3NpbmdSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5wcm9jZXNzaW5nUmVzdWx0JykpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIC8vIEJ1aWxkIHRoZSBjb21wbGV0ZSBjaGFpbiBpbmNsdWRpbmcgb3B0aW9uYWwgc3RlcHNcbiAgICBpZiAoZW5yaWNobWVudFN0ZXApIHtcbiAgICAgIGNvbnN0IGVucmljaG1lbnRDaGFpbiA9IGVucmljaG1lbnRTdGVwXG4gICAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9RW5yaWNobWVudEZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWZhaWx1cmUnKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pLm5leHQobW92ZVRvRmFpbGVkKSwge1xuICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgIH0pXG4gICAgICAgIC5uZXh0KFxuICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1FbnJpY2htZW50U3VjY2Vzc1VwZGF0ZWAsIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cywgRW5yaWNobWVudFJlc3VsdCA9IDplbnJpY2htZW50UmVzdWx0JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBwb3N0UHJvY2Vzc2luZ1N0ZXAgPyBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdlbnJpY2htZW50LWNvbXBsZXRlJykgOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgICAgICAnOmVucmljaG1lbnRSZXN1bHQnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLmpzb25Ub1N0cmluZyhKc29uUGF0aC5vYmplY3RBdCgnJC5lbnJpY2hlZFJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgcHJvY2Vzc2luZ0NoYWluLm5leHQoZW5yaWNobWVudENoYWluKTtcblxuICAgICAgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgICBjb25zdCBwb3N0UHJvY2Vzc2luZ0NoYWluID0gcG9zdFByb2Nlc3NpbmdTdGVwXG4gICAgICAgICAgLmFkZENhdGNoKG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1Qb3N0UHJvY2Vzc2luZ0ZhaWxEREJVcGRhdGVgLCB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMnLFxuICAgICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ3Bvc3QtcHJvY2Vzc2luZy1mYWlsdXJlJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KS5uZXh0KG1vdmVUb0ZhaWxlZCksIHtcbiAgICAgICAgICAgIHJlc3VsdFBhdGg6IEpzb25QYXRoLkRJU0NBUkQsXG4gICAgICAgICAgfSlcbiAgICAgICAgICAubmV4dChcbiAgICAgICAgICAgIG5ldyBEeW5hbW9VcGRhdGVJdGVtKHRoaXMsIGAke3ByZWZpeH1Qb3N0UHJvY2Vzc2luZ1N1Y2Nlc3NVcGRhdGVgLCB7XG4gICAgICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzLCBQb3N0UHJvY2Vzc2luZ1Jlc3VsdCA9IDpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCcsXG4gICAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NvbXBsZXRlJyksXG4gICAgICAgICAgICAgICAgJzpwb3N0UHJvY2Vzc2luZ1Jlc3VsdCc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguanNvblRvU3RyaW5nKEpzb25QYXRoLm9iamVjdEF0KCckLnBvc3RQcm9jZXNzZWRSZXN1bHQnKSkpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICAgICAgfSkubmV4dChtb3ZlVG9Qcm9jZXNzZWQpLFxuICAgICAgICAgICk7XG4gICAgICAgIGVucmljaG1lbnRDaGFpbi5uZXh0KHBvc3RQcm9jZXNzaW5nQ2hhaW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5yaWNobWVudENoYWluLm5leHQobW92ZVRvUHJvY2Vzc2VkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHBvc3RQcm9jZXNzaW5nU3RlcCkge1xuICAgICAgY29uc3QgcG9zdFByb2Nlc3NpbmdDaGFpbiA9IHBvc3RQcm9jZXNzaW5nU3RlcFxuICAgICAgICAuYWRkQ2F0Y2gobmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVBvc3RQcm9jZXNzaW5nRmFpbEREQlVwZGF0ZTJgLCB7XG4gICAgICAgICAgdGFibGU6IHRoaXMuZG9jdW1lbnRQcm9jZXNzaW5nVGFibGUsXG4gICAgICAgICAga2V5OiB7XG4gICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgICAgZXhwcmVzc2lvbkF0dHJpYnV0ZVZhbHVlczoge1xuICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdwb3N0LXByb2Nlc3NpbmctZmFpbHVyZScpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSkubmV4dChtb3ZlVG9GYWlsZWQpLCB7XG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSlcbiAgICAgICAgLm5leHQoXG4gICAgICAgICAgbmV3IER5bmFtb1VwZGF0ZUl0ZW0odGhpcywgYCR7cHJlZml4fVBvc3RQcm9jZXNzaW5nU3VjY2Vzc1VwZGF0ZTJgLCB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgICBEb2N1bWVudElkOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKEpzb25QYXRoLnN0cmluZ0F0KCckLmRvY3VtZW50SWQnKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIFBvc3RQcm9jZXNzaW5nUmVzdWx0ID0gOnBvc3RQcm9jZXNzaW5nUmVzdWx0JyxcbiAgICAgICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgJzpuZXdTdGF0dXMnOiBEeW5hbW9BdHRyaWJ1dGVWYWx1ZS5mcm9tU3RyaW5nKCdjb21wbGV0ZScpLFxuICAgICAgICAgICAgICAnOnBvc3RQcm9jZXNzaW5nUmVzdWx0JzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQucG9zdFByb2Nlc3NlZFJlc3VsdCcpKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgICB9KS5uZXh0KG1vdmVUb1Byb2Nlc3NlZCksXG4gICAgICAgICk7XG4gICAgICBwcm9jZXNzaW5nQ2hhaW4ubmV4dChwb3N0UHJvY2Vzc2luZ0NoYWluKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gb3B0aW9uYWwgc3RlcHMgLSBtYXJrIGFzIGNvbXBsZXRlIGFmdGVyIGV4dHJhY3Rpb25cbiAgICAgIHByb2Nlc3NpbmdDaGFpbi5uZXh0KFxuICAgICAgICBuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9V29ya2Zsb3dDb21wbGV0ZVVwZGF0ZWAsIHtcbiAgICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAgICBrZXk6IHtcbiAgICAgICAgICAgIERvY3VtZW50SWQ6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoSnNvblBhdGguc3RyaW5nQXQoJyQuZG9jdW1lbnRJZCcpKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHVwZGF0ZUV4cHJlc3Npb246ICdTRVQgV29ya2Zsb3dTdGF0dXMgPSA6bmV3U3RhdHVzJyxcbiAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NvbXBsZXRlJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgICB9KS5uZXh0KG1vdmVUb1Byb2Nlc3NlZCksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzaWZpY2F0aW9uQ2hhaW4gPSBjbGFzc2lmaWNhdGlvblN0ZXBcbiAgICAgIC5hZGRDYXRjaChuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9Q2xhc3NpZmljYXRpb25GYWlsRERCVXBkYXRlYCwge1xuICAgICAgICB0YWJsZTogdGhpcy5kb2N1bWVudFByb2Nlc3NpbmdUYWJsZSxcbiAgICAgICAga2V5OiB7XG4gICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGVFeHByZXNzaW9uOiAnU0VUIFdvcmtmbG93U3RhdHVzID0gOm5ld1N0YXR1cycsXG4gICAgICAgIGV4cHJlc3Npb25BdHRyaWJ1dGVWYWx1ZXM6IHtcbiAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NsYXNzaWZpY2F0aW9uLWZhaWx1cmUnKSxcbiAgICAgICAgfSxcbiAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgIH0pLm5leHQobW92ZVRvRmFpbGVkKSwge1xuICAgICAgICByZXN1bHRQYXRoOiBKc29uUGF0aC5ESVNDQVJELFxuICAgICAgfSlcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgRHluYW1vVXBkYXRlSXRlbSh0aGlzLCBgJHtwcmVmaXh9Q2xhc3NpZmljYXRpb25TdWNjZXNzVXBkYXRlYCwge1xuICAgICAgICAgIHRhYmxlOiB0aGlzLmRvY3VtZW50UHJvY2Vzc2luZ1RhYmxlLFxuICAgICAgICAgIGtleToge1xuICAgICAgICAgICAgRG9jdW1lbnRJZDogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5zdHJpbmdBdCgnJC5kb2N1bWVudElkJykpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdXBkYXRlRXhwcmVzc2lvbjogJ1NFVCBXb3JrZmxvd1N0YXR1cyA9IDpuZXdTdGF0dXMsIENsYXNzaWZpY2F0aW9uUmVzdWx0ID0gOmNsYXNzaWZpY2F0aW9uUmVzdWx0JyxcbiAgICAgICAgICBleHByZXNzaW9uQXR0cmlidXRlVmFsdWVzOiB7XG4gICAgICAgICAgICAnOm5ld1N0YXR1cyc6IER5bmFtb0F0dHJpYnV0ZVZhbHVlLmZyb21TdHJpbmcoJ2NsYXNzaWZpY2F0aW9uLWNvbXBsZXRlJyksXG4gICAgICAgICAgICAnOmNsYXNzaWZpY2F0aW9uUmVzdWx0JzogRHluYW1vQXR0cmlidXRlVmFsdWUuZnJvbVN0cmluZyhKc29uUGF0aC5qc29uVG9TdHJpbmcoSnNvblBhdGgub2JqZWN0QXQoJyQuY2xhc3NpZmljYXRpb25SZXN1bHQnKSkpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzdWx0UGF0aDogSnNvblBhdGguRElTQ0FSRCxcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAubmV4dChwcm9jZXNzaW5nQ2hhaW4pO1xuXG4gICAgcmV0dXJuIGNsYXNzaWZpY2F0aW9uQ2hhaW47XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgY2xhc3NpZmljYXRpb24gc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogTXVzdCBzZXQgYG91dHB1dFBhdGhgIHRvIHByZXNlcnZlIHdvcmtmbG93IHN0YXRlIGZvciBzdWJzZXF1ZW50IHN0ZXBzLlxuICAgKiBUaGUgY2xhc3NpZmljYXRpb24gcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuY2xhc3NpZmljYXRpb25SZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBjbGFzc2lmaWNhdGlvblxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGNsYXNzaWZpY2F0aW9uU3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZTtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgZG9jdW1lbnQgcHJvY2Vzc2luZyBzdGVwIG9mIHRoZSB3b3JrZmxvdy5cbiAgICpcbiAgICogKipDUklUSUNBTCoqOiBNdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUgZm9yIHN1YnNlcXVlbnQgc3RlcHMuXG4gICAqIFRoZSBleHRyYWN0aW9uIHJlc3VsdCBzaG91bGQgYmUgYXZhaWxhYmxlIGF0IGAkLnByb2Nlc3NpbmdSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBleHRyYWN0aW9uXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcHJvY2Vzc2luZ1N0ZXAoKTogRG9jdW1lbnRQcm9jZXNzaW5nU3RlcFR5cGU7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIG9wdGlvbmFsIGRvY3VtZW50IGVucmljaG1lbnQgc3RlcCBvZiB0aGUgd29ya2Zsb3cuXG4gICAqXG4gICAqICoqQ1JJVElDQUwqKjogSWYgaW1wbGVtZW50ZWQsIG11c3Qgc2V0IGBvdXRwdXRQYXRoYCB0byBwcmVzZXJ2ZSB3b3JrZmxvdyBzdGF0ZS5cbiAgICogVGhlIGVucmljaG1lbnQgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQuZW5yaWNoZWRSZXN1bHRgIGZvciBEeW5hbW9EQiBzdG9yYWdlLlxuICAgKlxuICAgKiBAcmV0dXJucyBTdGVwIEZ1bmN0aW9ucyB0YXNrIGZvciBkb2N1bWVudCBlbnJpY2htZW50LCBvciB1bmRlZmluZWQgdG8gc2tpcCB0aGlzIHN0ZXBcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBlbnJpY2htZW50U3RlcCgpOiBEb2N1bWVudFByb2Nlc3NpbmdTdGVwVHlwZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgb3B0aW9uYWwgcG9zdC1wcm9jZXNzaW5nIHN0ZXAgb2YgdGhlIHdvcmtmbG93LlxuICAgKlxuICAgKiAqKkNSSVRJQ0FMKio6IElmIGltcGxlbWVudGVkLCBtdXN0IHNldCBgb3V0cHV0UGF0aGAgdG8gcHJlc2VydmUgd29ya2Zsb3cgc3RhdGUuXG4gICAqIFRoZSBwb3N0LXByb2Nlc3NpbmcgcmVzdWx0IHNob3VsZCBiZSBhdmFpbGFibGUgYXQgYCQucG9zdFByb2Nlc3NlZFJlc3VsdGAgZm9yIER5bmFtb0RCIHN0b3JhZ2UuXG4gICAqXG4gICAqIEByZXR1cm5zIFN0ZXAgRnVuY3Rpb25zIHRhc2sgZm9yIHBvc3QtcHJvY2Vzc2luZywgb3IgdW5kZWZpbmVkIHRvIHNraXAgdGhpcyBzdGVwXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcG9zdFByb2Nlc3NpbmdTdGVwKCk6IERvY3VtZW50UHJvY2Vzc2luZ1N0ZXBUeXBlIHwgdW5kZWZpbmVkO1xufVxuIl19
|