@aws-cdk/aws-bedrock-agentcore-alpha 2.253.0-alpha.0 → 2.254.0-alpha.0
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 +17116 -11830
- package/.jsii.tabl.json.gz +0 -0
- package/README.md +140 -10
- package/lib/evaluation/custom-evaluator.d.ts +9 -0
- package/lib/evaluation/custom-evaluator.js +8 -2
- package/lib/evaluation/data-source.js +1 -1
- package/lib/evaluation/evaluator-base.js +1 -1
- package/lib/evaluation/evaluator-config.js +2 -2
- package/lib/evaluation/evaluator.js +1 -1
- package/lib/evaluation/online-evaluation-base.js +1 -1
- package/lib/evaluation/online-evaluation.d.ts +9 -0
- package/lib/evaluation/online-evaluation.js +8 -2
- package/lib/evaluation/types.js +5 -5
- package/lib/evaluation/validation-helpers.d.ts +8 -0
- package/lib/evaluation/validation-helpers.js +62 -1
- package/lib/gateway/gateway-base.js +1 -1
- package/lib/gateway/gateway.d.ts +3 -2
- package/lib/gateway/gateway.js +3 -3
- package/lib/gateway/inbound-auth/authorizer.js +4 -4
- package/lib/gateway/inbound-auth/custom-claim.js +1 -1
- package/lib/gateway/interceptor.js +1 -1
- package/lib/gateway/outbound-auth/api-key.d.ts +13 -4
- package/lib/gateway/outbound-auth/api-key.js +63 -21
- package/lib/gateway/outbound-auth/credential-provider.d.ts +48 -4
- package/lib/gateway/outbound-auth/credential-provider.js +49 -2
- package/lib/gateway/outbound-auth/iam-role.d.ts +4 -3
- package/lib/gateway/outbound-auth/iam-role.js +3 -5
- package/lib/gateway/outbound-auth/oauth.d.ts +11 -3
- package/lib/gateway/outbound-auth/oauth.js +70 -20
- package/lib/gateway/perms.d.ts +15 -3
- package/lib/gateway/perms.js +24 -9
- package/lib/gateway/protocol.js +2 -2
- package/lib/gateway/targets/schema/api-schema.js +4 -4
- package/lib/gateway/targets/schema/tool-schema.js +4 -4
- package/lib/gateway/targets/target-base.js +1 -1
- package/lib/gateway/targets/target-configuration.js +6 -6
- package/lib/gateway/targets/target.js +3 -3
- package/lib/identity/api-key-credential-provider.d.ts +217 -0
- package/lib/identity/api-key-credential-provider.js +249 -0
- package/lib/identity/grant-helpers.d.ts +74 -0
- package/lib/identity/grant-helpers.js +132 -0
- package/lib/identity/oauth2-credential-provider.d.ts +679 -0
- package/lib/identity/oauth2-credential-provider.js +863 -0
- package/lib/identity/perms.d.ts +119 -0
- package/lib/identity/perms.js +178 -0
- package/lib/identity/validation-helpers.d.ts +61 -0
- package/lib/identity/validation-helpers.js +156 -0
- package/lib/identity/workload-identity.d.ts +186 -0
- package/lib/identity/workload-identity.js +212 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +8 -1
- package/lib/memory/memory-strategy.js +1 -1
- package/lib/memory/memory.js +2 -2
- package/lib/memory/strategies/managed-strategy.js +1 -1
- package/lib/memory/strategies/self-managed-strategy.js +1 -1
- package/lib/memory/validation-helpers.js +2 -2
- package/lib/network/network-configuration.js +4 -4
- package/lib/policy/policy-base.js +1 -1
- package/lib/policy/policy-engine-base.js +1 -1
- package/lib/policy/policy-engine.js +1 -1
- package/lib/policy/policy-statement.d.ts +2 -1
- package/lib/policy/policy-statement.js +14 -12
- package/lib/policy/policy-types.js +1 -1
- package/lib/policy/policy.js +1 -1
- package/lib/runtime/inbound-auth/custom-claim.js +1 -1
- package/lib/runtime/inbound-auth/runtime-authorizer-configuration.js +1 -1
- package/lib/runtime/observability.js +2 -2
- package/lib/runtime/runtime-artifact.d.ts +11 -3
- package/lib/runtime/runtime-artifact.js +12 -4
- package/lib/runtime/runtime-base.js +1 -1
- package/lib/runtime/runtime-endpoint-base.js +1 -1
- package/lib/runtime/runtime-endpoint.js +1 -1
- package/lib/runtime/runtime.js +1 -1
- package/lib/runtime/types.d.ts +7 -1
- package/lib/runtime/types.js +7 -1
- package/lib/tools/browser.js +2 -2
- package/lib/tools/code-interpreter.js +2 -2
- package/package.json +18 -10
package/.jsii.tabl.json.gz
CHANGED
|
Binary file
|
package/README.md
CHANGED
|
@@ -98,6 +98,8 @@ This construct library facilitates the deployment of Bedrock AgentCore primitive
|
|
|
98
98
|
- [Tools schema For Lambda target](#tools-schema-for-lambda-target)
|
|
99
99
|
- [Api schema For OpenAPI and Smithy target](#api-schema-for-openapi-and-smithy-target)
|
|
100
100
|
- [Outbound auth](#outbound-auth)
|
|
101
|
+
- [Token Vault credential providers](#token-vault-credential-providers)
|
|
102
|
+
- [Workload identities](#workload-identities)
|
|
101
103
|
- [Basic Gateway Target Creation](#basic-gateway-target-creation)
|
|
102
104
|
- [Using addTarget methods (Recommended)](#using-addtarget-methods-recommended)
|
|
103
105
|
- [Using static factory methods](#using-static-factory-methods)
|
|
@@ -1517,7 +1519,7 @@ credential provider attached enabling you to securely access targets whether the
|
|
|
1517
1519
|
| `description` | `string` | No | Optional description for the gateway target. Maximum 200 characters |
|
|
1518
1520
|
| `gateway` | `IGateway` | Yes | The gateway this target belongs to |
|
|
1519
1521
|
| `targetConfiguration` | `ITargetConfiguration` | Yes | The target configuration (Lambda, OpenAPI, Smithy, or API Gateway). **Note:** Users typically don't create this directly. When using convenience methods like `GatewayTarget.forLambda()`, `GatewayTarget.forOpenApi()`, `GatewayTarget.forSmithy()`, `GatewayTarget.forApiGateway()`, `GatewayTarget.forMcpServer()` or the gateway's `addLambdaTarget()`, `addOpenApiTarget()`, `addSmithyTarget()`, `addApiGatewayTarget()`, `addMcpServerTarget()` methods, this configuration is created internally for you. Only needed when using the GatewayTarget constructor directly for [advanced scenarios](#advanced-usage-direct-configuration-for-gateway-target). |
|
|
1520
|
-
| `credentialProviderConfigurations` | `IGatewayCredentialProvider[]` | No | Credential providers for authentication. Defaults to `[GatewayCredentialProvider.fromIamRole()]`.
|
|
1522
|
+
| `credentialProviderConfigurations` | `IGatewayCredentialProvider[]` | No | Credential providers for authentication. Defaults to `[GatewayCredentialProvider.fromIamRole()]`. With Token Vault L2 constructs, prefer `GatewayCredentialProvider.fromApiKeyIdentity()` / `fromOauthIdentity()`; otherwise use `fromApiKeyIdentityArn()` / `fromOauthIdentityArn()`, or `fromIamRole()` |
|
|
1521
1523
|
| `validateOpenApiSchema` | `boolean` | No | (OpenAPI targets only) Whether to validate the OpenAPI schema at synthesis time. Defaults to `true`. Only applies to inline and local asset schemas. For more information refer here <https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-schema-openapi.html> |
|
|
1522
1524
|
|
|
1523
1525
|
This approach gives you full control over the configuration but is typically not necessary for most use cases.
|
|
@@ -1724,6 +1726,93 @@ The gateway authenticates on its own behalf, not on behalf of a user.
|
|
|
1724
1726
|
|
|
1725
1727
|
**Note > You need to set up the outbound identity before you can create a gateway target.
|
|
1726
1728
|
|
|
1729
|
+
#### Token Vault credential providers
|
|
1730
|
+
|
|
1731
|
+
AgentCore stores outbound **API key** and **OAuth2** client credentials in Token Vault. This module includes L2 constructs that create those resources and connect them to gateway targets.
|
|
1732
|
+
|
|
1733
|
+
**Shared OAuth2 fields** — Every `OAuth2CredentialProvider` factory accepts the same **`clientId`** and **`clientSecret`**, plus optional **`oAuth2CredentialProviderName`** and **`tags`**. Extra properties appear only when an IdP needs them (for example **`tenantId`** for Microsoft, or **`issuer`** / endpoint overrides for Okta and other *included* configurations).
|
|
1734
|
+
|
|
1735
|
+
**Vendor factories** — Prefer `OAuth2CredentialProvider.usingSlack`, `.usingGithub`, `.usingGoogle`, `.usingMicrosoft`, `.usingOkta`, `.usingAuth0`, `.usingCognito`, and the other `using*` helpers for known providers. Each maps to the matching CloudFormation *included* provider configuration.
|
|
1736
|
+
|
|
1737
|
+
**Custom OAuth2 (`usingCustom`)** — Supply **exactly one** of:
|
|
1738
|
+
|
|
1739
|
+
- **`discoveryUrl`** — OIDC/OAuth2 discovery document URL (for example `https://idp.example.com/.well-known/openid-configuration`), or
|
|
1740
|
+
- **`authorizationServerMetadata`** — Manual authorization server metadata (`issuer`, `authorizationEndpoint`, `tokenEndpoint`, and other fields supported by the `AWS::BedrockAgentCore::OAuth2CredentialProvider` resource).
|
|
1741
|
+
|
|
1742
|
+
Do not pass both. The construct validates this at synthesis time when values are known; if you use CDK tokens, ensure the resolved template still satisfies the service rules.
|
|
1743
|
+
|
|
1744
|
+
**Wiring to gateway targets** — After you create a provider in CDK, pass the construct to **`GatewayCredentialProvider.fromOauthIdentity()`** or **`fromApiKeyIdentity()`** (optional API key header/query settings go in the second argument for API keys). Alternatively, call **`bindForGatewayOAuthTarget`** / **`bindForGatewayApiKeyTarget`** on the provider and pass that object to **`fromOauthIdentityArn`** / **`fromApiKeyIdentityArn`**. You can still pass raw ARNs from the console or API when the provider already exists.
|
|
1745
|
+
|
|
1746
|
+
**Example: GitHub OAuth2 and an MCP target**
|
|
1747
|
+
|
|
1748
|
+
```typescript fixture=default
|
|
1749
|
+
const gateway = new agentcore.Gateway(this, "MyGateway", {
|
|
1750
|
+
gatewayName: "my-gateway",
|
|
1751
|
+
});
|
|
1752
|
+
|
|
1753
|
+
const oauth = agentcore.OAuth2CredentialProvider.usingGithub(this, "GhOAuth", {
|
|
1754
|
+
oAuth2CredentialProviderName: "github-oauth",
|
|
1755
|
+
clientId: "your-client-id",
|
|
1756
|
+
clientSecret: cdk.SecretValue.unsafePlainText("your-client-secret"),
|
|
1757
|
+
});
|
|
1758
|
+
|
|
1759
|
+
gateway.addMcpServerTarget("Mcp", {
|
|
1760
|
+
gatewayTargetName: "mcp-server",
|
|
1761
|
+
description: "MCP with GitHub OAuth",
|
|
1762
|
+
endpoint: "https://my-mcp-server.example.com",
|
|
1763
|
+
credentialProviderConfigurations: [
|
|
1764
|
+
agentcore.GatewayCredentialProvider.fromOauthIdentity(oauth, {
|
|
1765
|
+
scopes: ["read:user"],
|
|
1766
|
+
}),
|
|
1767
|
+
],
|
|
1768
|
+
});
|
|
1769
|
+
```
|
|
1770
|
+
|
|
1771
|
+
**Example: custom IdP with a discovery URL**
|
|
1772
|
+
|
|
1773
|
+
```typescript fixture=default
|
|
1774
|
+
agentcore.OAuth2CredentialProvider.usingCustom(this, "CustomOAuth", {
|
|
1775
|
+
oAuth2CredentialProviderName: "custom-idp",
|
|
1776
|
+
clientId: "your-client-id",
|
|
1777
|
+
clientSecret: cdk.SecretValue.unsafePlainText("your-client-secret"),
|
|
1778
|
+
discoveryUrl: "https://idp.example.com/.well-known/openid-configuration",
|
|
1779
|
+
});
|
|
1780
|
+
```
|
|
1781
|
+
|
|
1782
|
+
**Example: custom IdP with explicit authorization server metadata**
|
|
1783
|
+
|
|
1784
|
+
```typescript fixture=default
|
|
1785
|
+
agentcore.OAuth2CredentialProvider.usingCustom(this, "CustomOAuthMeta", {
|
|
1786
|
+
clientId: "your-client-id",
|
|
1787
|
+
clientSecret: cdk.SecretValue.unsafePlainText("your-client-secret"),
|
|
1788
|
+
authorizationServerMetadata: {
|
|
1789
|
+
issuer: "https://idp.example.com",
|
|
1790
|
+
authorizationEndpoint: "https://idp.example.com/oauth2/authorize",
|
|
1791
|
+
tokenEndpoint: "https://idp.example.com/oauth2/token",
|
|
1792
|
+
},
|
|
1793
|
+
});
|
|
1794
|
+
```
|
|
1795
|
+
|
|
1796
|
+
#### Workload identities
|
|
1797
|
+
|
|
1798
|
+
A **workload identity** is the stable identity of an agent in your AWS account within the AgentCore Identity model. It ties together IAM roles, OAuth2 flows, API keys, and workload access tokens so agents can authenticate consistently across environments. For conceptual background, see [Understanding workload identities](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/understanding-agent-identities.html).
|
|
1799
|
+
|
|
1800
|
+
**Agent identity directory** — Each account has a single logical directory that holds every workload identity, whether it was created by AgentCore Runtime, AgentCore Gateway, or manually (for example through CloudFormation or the control-plane API). The directory is created automatically when the first workload identity exists. Resource ARNs follow the pattern described in [Understanding the agent identity directory](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agent-identity-directory.html) (`workload-identity-directory/default` and child `workload-identity/<name>` entries).
|
|
1801
|
+
|
|
1802
|
+
**When to create one in CDK** — Runtime and Gateway can create workload identities for you during deployment. Use the **`WorkloadIdentity`** L2 when you need a **manually defined** identity (custom name, allowed OAuth2 return URLs, tags) or when integrating workloads that are not driven by those services.
|
|
1803
|
+
|
|
1804
|
+
**Construct** — `WorkloadIdentity` maps to **`AWS::BedrockAgentCore::WorkloadIdentity`**. It exposes `workloadIdentityArn`, `workloadIdentityName`, and `workloadIdentityRef` for wiring into IAM or other AgentCore resources. Import an existing identity with **`WorkloadIdentity.fromWorkloadIdentityAttributes`**. Grant helpers (`grantRead`, `grantAdmin`, `grantFullAccess`) align with [directory-level IAM patterns](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/agent-identity-directory.html#directory-access-control-and-permissions) such as listing identities on the directory resource and scoping mutations to specific identity ARNs.
|
|
1805
|
+
|
|
1806
|
+
**Example**
|
|
1807
|
+
|
|
1808
|
+
```typescript fixture=default
|
|
1809
|
+
new agentcore.WorkloadIdentity(this, "MyWorkloadIdentity", {
|
|
1810
|
+
workloadIdentityName: "customer-support-agent-prod",
|
|
1811
|
+
allowedResourceOauth2ReturnUrls: ["https://app.example.com/oauth/callback"],
|
|
1812
|
+
tags: { team: "agents", env: "prod" },
|
|
1813
|
+
});
|
|
1814
|
+
```
|
|
1815
|
+
|
|
1727
1816
|
### Basic Gateway Target Creation
|
|
1728
1817
|
|
|
1729
1818
|
You can create targets in two ways: using the static factory methods on `GatewayTarget` or using the convenient `addTarget` methods on the gateway instance.
|
|
@@ -1776,21 +1865,54 @@ const lambdaTarget = gateway.addLambdaTarget("MyLambdaTarget", {
|
|
|
1776
1865
|
});
|
|
1777
1866
|
```
|
|
1778
1867
|
|
|
1779
|
-
- OpenAPI Target
|
|
1868
|
+
- OpenAPI Target (using Token Vault L2 construct — preferred)
|
|
1780
1869
|
|
|
1781
1870
|
``` typescript
|
|
1782
1871
|
const gateway = new agentcore.Gateway(this, "MyGateway", {
|
|
1783
1872
|
gatewayName: "my-gateway",
|
|
1784
1873
|
});
|
|
1785
1874
|
|
|
1786
|
-
//
|
|
1875
|
+
// Create an API key credential provider in Token Vault
|
|
1876
|
+
const apiKeyProvider = new agentcore.ApiKeyCredentialProvider(this, "MyApiKeyProvider", {
|
|
1877
|
+
apiKeyCredentialProviderName: "my-apikey",
|
|
1878
|
+
});
|
|
1879
|
+
|
|
1880
|
+
const bucket = s3.Bucket.fromBucketName(this, "ExistingBucket", "my-schema-bucket");
|
|
1881
|
+
const s3mySchema = agentcore.ApiSchema.fromS3File(bucket, "schemas/myschema.yaml");
|
|
1882
|
+
|
|
1883
|
+
// Add an OpenAPI target using the L2 construct directly
|
|
1884
|
+
const target = gateway.addOpenApiTarget("MyTarget", {
|
|
1885
|
+
gatewayTargetName: "my-api-target",
|
|
1886
|
+
description: "Target for external API integration",
|
|
1887
|
+
apiSchema: s3mySchema,
|
|
1888
|
+
credentialProviderConfigurations: [
|
|
1889
|
+
agentcore.GatewayCredentialProvider.fromApiKeyIdentity(apiKeyProvider, {
|
|
1890
|
+
credentialLocation: agentcore.ApiKeyCredentialLocation.header({
|
|
1891
|
+
credentialParameterName: "X-API-Key",
|
|
1892
|
+
}),
|
|
1893
|
+
}),
|
|
1894
|
+
],
|
|
1895
|
+
});
|
|
1896
|
+
|
|
1897
|
+
// This makes sure your s3 bucket is available before target
|
|
1898
|
+
target.node.addDependency(bucket);
|
|
1899
|
+
```
|
|
1900
|
+
|
|
1901
|
+
- OpenAPI Target (using ARNs — for providers created outside of CDK)
|
|
1902
|
+
|
|
1903
|
+
``` typescript
|
|
1904
|
+
const gateway = new agentcore.Gateway(this, "MyGateway", {
|
|
1905
|
+
gatewayName: "my-gateway",
|
|
1906
|
+
});
|
|
1907
|
+
|
|
1908
|
+
// ARNs from the console/API, or from ApiKeyCredentialProvider + bindForGatewayApiKeyTarget
|
|
1787
1909
|
const apiKeyProviderArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/apikeycredentialprovider/my-apikey"
|
|
1788
1910
|
const apiKeySecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-apikey-secret-abc123"
|
|
1789
1911
|
|
|
1790
1912
|
const bucket = s3.Bucket.fromBucketName(this, "ExistingBucket", "my-schema-bucket");
|
|
1791
1913
|
const s3mySchema = agentcore.ApiSchema.fromS3File(bucket, "schemas/myschema.yaml");
|
|
1792
1914
|
|
|
1793
|
-
// Add an OpenAPI target
|
|
1915
|
+
// Add an OpenAPI target using ARNs directly
|
|
1794
1916
|
const target = gateway.addOpenApiTarget("MyTarget", {
|
|
1795
1917
|
gatewayTargetName: "my-api-target",
|
|
1796
1918
|
description: "Target for external API integration",
|
|
@@ -1806,7 +1928,7 @@ const target = gateway.addOpenApiTarget("MyTarget", {
|
|
|
1806
1928
|
],
|
|
1807
1929
|
});
|
|
1808
1930
|
|
|
1809
|
-
// This
|
|
1931
|
+
// This makes sure your s3 bucket is available before target
|
|
1810
1932
|
target.node.addDependency(bucket);
|
|
1811
1933
|
```
|
|
1812
1934
|
|
|
@@ -1838,8 +1960,7 @@ const gateway = new agentcore.Gateway(this, "MyGateway", {
|
|
|
1838
1960
|
gatewayName: "my-gateway",
|
|
1839
1961
|
});
|
|
1840
1962
|
|
|
1841
|
-
// OAuth2
|
|
1842
|
-
// Note: Create the OAuth provider using AWS console or Identity L2 construct when available
|
|
1963
|
+
// OAuth2 (recommended): use OAuth2CredentialProvider + bindForGatewayOAuthTarget, or ARNs from console/API
|
|
1843
1964
|
const oauthProviderArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/oauth2credentialprovider/my-oauth";
|
|
1844
1965
|
const oauthSecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-oauth-secret-abc123";
|
|
1845
1966
|
|
|
@@ -1948,7 +2069,7 @@ const gateway = new agentcore.Gateway(this, "MyGateway", {
|
|
|
1948
2069
|
gatewayName: "my-gateway",
|
|
1949
2070
|
});
|
|
1950
2071
|
|
|
1951
|
-
//
|
|
2072
|
+
// Outbound auth: ApiKeyCredentialProvider + bindForGatewayApiKeyTarget, or ARNs from console/API
|
|
1952
2073
|
const apiKeyIdentityArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/apikeycredentialprovider/my-apikey"
|
|
1953
2074
|
const apiKeySecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-apikey-secret-abc123"
|
|
1954
2075
|
|
|
@@ -2001,8 +2122,7 @@ const gateway = new agentcore.Gateway(this, "MyGateway", {
|
|
|
2001
2122
|
gatewayName: "my-gateway",
|
|
2002
2123
|
});
|
|
2003
2124
|
|
|
2004
|
-
// OAuth2
|
|
2005
|
-
// Note: Create the OAuth provider using AWS console or Identity L2 construct when available
|
|
2125
|
+
// OAuth2 (recommended): use OAuth2CredentialProvider + bindForGatewayOAuthTarget, or ARNs from console/API
|
|
2006
2126
|
const oauthProviderArn = "arn:aws:bedrock-agentcore:us-east-1:123456789012:token-vault/abc123/oauth2credentialprovider/my-oauth";
|
|
2007
2127
|
const oauthSecretArn = "arn:aws:secretsmanager:us-east-1:123456789012:secret:my-oauth-secret-abc123";
|
|
2008
2128
|
|
|
@@ -3009,6 +3129,15 @@ policyEngine.grantEvaluate(lambdaRole);
|
|
|
3009
3129
|
|
|
3010
3130
|
The Online Evaluation construct enables continuous monitoring and assessment of your agent's performance using live traffic. It automatically samples agent traces from CloudWatch Logs or Agent Endpoints and applies built-in evaluators to assess quality metrics like helpfulness, correctness, and safety.
|
|
3011
3131
|
|
|
3132
|
+
### Prerequisites
|
|
3133
|
+
|
|
3134
|
+
Before creating an `OnlineEvaluationConfig`, ensure the following are configured in your account:
|
|
3135
|
+
|
|
3136
|
+
- **CloudWatch Transaction Search** enabled — this creates the `aws/spans` log group required by the evaluation service. See [Enable Transaction Search](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/observability-configure.html).
|
|
3137
|
+
- **AWS Distro for OpenTelemetry (ADOT) SDK** instrumenting your agent to emit traces.
|
|
3138
|
+
|
|
3139
|
+
For full details, see [AgentCore Evaluations Prerequisites](https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/evaluations-prerequisites.html).
|
|
3140
|
+
|
|
3012
3141
|
### Online Evaluation Properties
|
|
3013
3142
|
|
|
3014
3143
|
| Name | Type | Required | Description |
|
|
@@ -3103,6 +3232,7 @@ Custom evaluators let you define evaluation logic tailored to your specific use
|
|
|
3103
3232
|
| `evaluatorConfig` | `EvaluatorConfig` | Yes | Configuration defining how the evaluator assesses performance |
|
|
3104
3233
|
| `level` | `EvaluationLevel` | Yes | The level at which the evaluator operates: `TOOL_CALL`, `TRACE`, or `SESSION` |
|
|
3105
3234
|
| `description` | `string` | No | Description of the evaluator. Maximum 200 characters |
|
|
3235
|
+
| `tags` | `{ [key: string]: string }` | No | Tags for the evaluator. A list of key:value pairs to apply to this Evaluator resource |
|
|
3106
3236
|
|
|
3107
3237
|
#### LLM-as-a-Judge Evaluator
|
|
3108
3238
|
|
|
@@ -48,6 +48,15 @@ export interface EvaluatorProps {
|
|
|
48
48
|
* @maxLength 200
|
|
49
49
|
*/
|
|
50
50
|
readonly description?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Tags for the evaluator.
|
|
53
|
+
* A list of key:value pairs of tags to apply to this Evaluator resource.
|
|
54
|
+
*
|
|
55
|
+
* @default - No tags
|
|
56
|
+
*/
|
|
57
|
+
readonly tags?: {
|
|
58
|
+
[key: string]: string;
|
|
59
|
+
};
|
|
51
60
|
}
|
|
52
61
|
/**
|
|
53
62
|
* A custom evaluator for Amazon Bedrock AgentCore.
|
|
@@ -110,7 +110,7 @@ let Evaluator = (() => {
|
|
|
110
110
|
Evaluator = _classThis = _classDescriptor.value;
|
|
111
111
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
112
112
|
}
|
|
113
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Evaluator", version: "2.
|
|
113
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.Evaluator", version: "2.254.0-alpha.0" };
|
|
114
114
|
/** Uniquely identifies this class. */
|
|
115
115
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.Evaluator';
|
|
116
116
|
/**
|
|
@@ -223,12 +223,18 @@ let Evaluator = (() => {
|
|
|
223
223
|
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
224
224
|
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateEvaluatorName, props.evaluatorName, this);
|
|
225
225
|
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateDescription, props.description, this);
|
|
226
|
+
if (props.tags) {
|
|
227
|
+
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateEvaluatorTags, props.tags, this);
|
|
228
|
+
}
|
|
226
229
|
this.evaluatorName = this.physicalName;
|
|
227
230
|
const resource = new bedrockagentcore.CfnEvaluator(this, 'Resource', {
|
|
228
231
|
evaluatorName: this.physicalName,
|
|
229
232
|
evaluatorConfig: props.evaluatorConfig._bind(),
|
|
230
233
|
level: props.level.value,
|
|
231
234
|
description: props.description,
|
|
235
|
+
tags: props.tags && Object.keys(props.tags).length > 0
|
|
236
|
+
? Object.entries(props.tags).map(([key, value]) => ({ key, value }))
|
|
237
|
+
: undefined,
|
|
232
238
|
});
|
|
233
239
|
// If code-based, grant the bedrock-agentcore service permission to invoke
|
|
234
240
|
// the Lambda function, scoped to this specific evaluator for confused deputy prevention.
|
|
@@ -253,4 +259,4 @@ let Evaluator = (() => {
|
|
|
253
259
|
return Evaluator = _classThis;
|
|
254
260
|
})();
|
|
255
261
|
exports.Evaluator = Evaluator;
|
|
256
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImN1c3RvbS1ldmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw2Q0FBb0Q7QUFDcEQscUVBQXFFO0FBQ3JFLDJDQUEyQztBQUMzQyw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLHFEQUFrRTtBQUdsRSw2REFJOEI7QUF5QzlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7SUFFVSxTQUFTOzRCQURyQixvQ0FBa0I7Ozs7c0JBQ1ksOEJBQWE7eUJBQXJCLFNBQVEsV0FBYTs7OztZQUE1Qyw2S0F5SkM7Ozs7O1FBeEpDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQzFDLGdEQUFnRCxDQUFDO1FBRW5EOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMsZUFBZSxDQUMzQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsV0FBbUI7WUFFbkIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxZQUFZLEdBQUcsaUJBQUcsQ0FBQyxNQUFNLENBQzdCO2dCQUNFLE9BQU8sRUFBRSxtQkFBbUI7Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixZQUFZLEVBQUUsV0FBVzthQUMxQixFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxTQUFTLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbEQsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7UUFFRDs7Ozs7OztXQU9HO1FBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUM1QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsWUFBb0I7WUFFcEIsTUFBTSxRQUFRLEdBQUcsaUJB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QUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1NBQ3pDOztZQXhKVSx1REFBUzs7Ozs7QUFBVCw4QkFBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHR5cGUgSUV2YWx1YXRvciwgRXZhbHVhdG9yQmFzZSB9IGZyb20gJy4vZXZhbHVhdG9yLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0b3JDb25maWcgfSBmcm9tICcuL2V2YWx1YXRvci1jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0aW9uTGV2ZWwsIEV2YWx1YXRvckF0dHJpYnV0ZXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIHRocm93SWZJbnZhbGlkLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvck5hbWUsXG59IGZyb20gJy4vdmFsaWRhdGlvbi1oZWxwZXJzJztcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhbiBFdmFsdWF0b3IuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZhbHVhdG9yUHJvcHMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGV2YWx1YXRvci5cbiAgICpcbiAgICogTXVzdCBiZSB1bmlxdWUgd2l0aGluIHlvdXIgYWNjb3VudC4gVmFsaWQgY2hhcmFjdGVycyBhcmUgYS16LCBBLVosIDAtOSwgXyAodW5kZXJzY29yZSkuXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciBhbmQgY2FuIGJlIHVwIHRvIDQ4IGNoYXJhY3RlcnMgbG9uZy5cbiAgICpcbiAgICogQHBhdHRlcm4gXlthLXpBLVpdW2EtekEtWjAtOV9dezAsNDd9JFxuICAgKi9cbiAgcmVhZG9ubHkgZXZhbHVhdG9yTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZmlndXJhdGlvbiB0aGF0IGRlZmluZXMgaG93IHRoZSBldmFsdWF0b3IgYXNzZXNzZXMgYWdlbnQgcGVyZm9ybWFuY2UuXG4gICAqXG4gICAqIFVzZSBgRXZhbHVhdG9yQ29uZmlnLmxsbUFzQUp1ZGdlKClgIGZvciBtb2RlbC1iYXNlZCBldmFsdWF0aW9uIG9yXG4gICAqIGBFdmFsdWF0b3JDb25maWcuY29kZUJhc2VkKClgIGZvciBMYW1iZGEtYmFzZWQgZXZhbHVhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGV2YWx1YXRvckNvbmZpZzogRXZhbHVhdG9yQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBUaGUgbGV2ZWwgYXQgd2hpY2ggdGhlIGV2YWx1YXRvciBhc3Nlc3NlcyBhZ2VudCBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogRGV0ZXJtaW5lcyB3aGF0IGdyYW51bGFyaXR5IG9mIGRhdGEgdGhlIGV2YWx1YXRvciBvcGVyYXRlcyBvbjpcbiAgICogdG9vbCBjYWxsLCB0cmFjZSAoc2luZ2xlIHJlcXVlc3QtcmVzcG9uc2UpLCBvciBzZXNzaW9uIChmdWxsIGNvbnZlcnNhdGlvbikuXG4gICAqL1xuICByZWFkb25seSBsZXZlbDogRXZhbHVhdGlvbkxldmVsO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGV2YWx1YXRvci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBkZXNjcmlwdGlvblxuICAgKiBAbWF4TGVuZ3RoIDIwMFxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBjdXN0b20gZXZhbHVhdG9yIGZvciBBbWF6b24gQmVkcm9jayBBZ2VudENvcmUuXG4gKlxuICogQ3VzdG9tIGV2YWx1YXRvcnMgZW5hYmxlIHlvdSB0byBkZWZpbmUgZXZhbHVhdGlvbiBsb2dpYyB0YWlsb3JlZCB0byB5b3VyIHNwZWNpZmljXG4gKiB1c2UgY2FzZXMuIFN1cHBvcnRzIHR3byBldmFsdWF0aW9uIHN0cmF0ZWdpZXM6XG4gKiAtICoqTExNLWFzLWEtSnVkZ2UqKjogVXNlcyBhIGZvdW5kYXRpb24gbW9kZWwgd2l0aCBjdXN0b20gaW5zdHJ1Y3Rpb25zIGFuZCBhIHJhdGluZyBzY2FsZS5cbiAqIC0gKipDb2RlLWJhc2VkKio6IFVzZXMgYSBMYW1iZGEgZnVuY3Rpb24gZm9yIGN1c3RvbSBldmFsdWF0aW9uIGxvZ2ljLlxuICpcbiAqIEN1c3RvbSBldmFsdWF0b3JzIGFyZSB1c2VkIHdpdGggYE9ubGluZUV2YWx1YXRpb25Db25maWdgIHZpYSBgRXZhbHVhdG9yUmVmZXJlbmNlLmN1c3RvbSgpYC5cbiAqXG4gKiBAcmVzb3VyY2UgQVdTOjpCZWRyb2NrQWdlbnRDb3JlOjpFdmFsdWF0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgY3VzdG9tIExMTS1hcy1hLUp1ZGdlIGV2YWx1YXRvclxuICogY29uc3QgZXZhbHVhdG9yID0gbmV3IGFnZW50Y29yZS5FdmFsdWF0b3IodGhpcywgJ015RXZhbHVhdG9yJywge1xuICogICBldmFsdWF0b3JOYW1lOiAnbXlfY3VzdG9tX2V2YWx1YXRvcicsXG4gKiAgIGxldmVsOiBhZ2VudGNvcmUuRXZhbHVhdGlvbkxldmVsLlNFU1NJT04sXG4gKiAgIGV2YWx1YXRvckNvbmZpZzogYWdlbnRjb3JlLkV2YWx1YXRvckNvbmZpZy5sbG1Bc0FKdWRnZSh7XG4gKiAgICAgaW5zdHJ1Y3Rpb25zOiAnRXZhbHVhdGUgd2hldGhlciB0aGUgYWdlbnQgcmVzcG9uc2UgaXMgaGVscGZ1bCBhbmQgYWNjdXJhdGUuJyxcbiAqICAgICBtb2RlbElkOiAndXMuYW50aHJvcGljLmNsYXVkZS1zb25uZXQtNC02JyxcbiAqICAgICByYXRpbmdTY2FsZTogYWdlbnRjb3JlLkV2YWx1YXRvclJhdGluZ1NjYWxlLmNhdGVnb3JpY2FsKFtcbiAqICAgICAgIHsgbGFiZWw6ICdHb29kJywgZGVmaW5pdGlvbjogJ1RoZSByZXNwb25zZSBpcyBoZWxwZnVsIGFuZCBhY2N1cmF0ZS4nIH0sXG4gKiAgICAgICB7IGxhYmVsOiAnQmFkJywgZGVmaW5pdGlvbjogJ1RoZSByZXNwb25zZSBpcyBub3QgaGVscGZ1bCBvciBjb250YWlucyBlcnJvcnMuJyB9LFxuICogICAgIF0pLFxuICogICB9KSxcbiAqIH0pO1xuICpcbiAqIC8vIFVzZSB0aGUgY3VzdG9tIGV2YWx1YXRvciBpbiBhbiBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uXG4gKiBuZXcgYWdlbnRjb3JlLk9ubGluZUV2YWx1YXRpb25Db25maWcodGhpcywgJ015RXZhbHVhdGlvbicsIHtcbiAqICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6ICdteV9ldmFsdWF0aW9uJyxcbiAqICAgZXZhbHVhdG9yczogW1xuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5IRUxQRlVMTkVTUyksXG4gKiAgICAgYWdlbnRjb3JlLkV2YWx1YXRvclJlZmVyZW5jZS5jdXN0b20oZXZhbHVhdG9yKSxcbiAqICAgXSxcbiAqICAgZGF0YVNvdXJjZTogYWdlbnRjb3JlLkRhdGFTb3VyY2VDb25maWcuZnJvbUNsb3VkV2F0Y2hMb2dzKHtcbiAqICAgICBsb2dHcm91cE5hbWVzOiBbJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvbXktYWdlbnQnXSxcbiAqICAgICBzZXJ2aWNlTmFtZXM6IFsnbXktYWdlbnQuZGVmYXVsdCddLFxuICogICB9KSxcbiAqIH0pO1xuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgRXZhbHVhdG9yQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPVxuICAgICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuRXZhbHVhdG9yJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEV2YWx1YXRvciBieSBpdHMgSUQuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGV2YWx1YXRvcklkIC0gVGhlIGV2YWx1YXRvciBJRCB0byBpbXBvcnRcbiAgICogQHJldHVybnMgQW4gSUV2YWx1YXRvciByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUV2YWx1YXRvcklkKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBldmFsdWF0b3JJZDogc3RyaW5nLFxuICApOiBJRXZhbHVhdG9yIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHNjb3BlKTtcbiAgICBjb25zdCBldmFsdWF0b3JBcm4gPSBBcm4uZm9ybWF0KFxuICAgICAge1xuICAgICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgICByZXNvdXJjZTogJ2V2YWx1YXRvcicsXG4gICAgICAgIHJlc291cmNlTmFtZTogZXZhbHVhdG9ySWQsXG4gICAgICB9LFxuICAgICAgc3RhY2ssXG4gICAgKTtcblxuICAgIHJldHVybiBFdmFsdWF0b3IuZnJvbUV2YWx1YXRvckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBldmFsdWF0b3JBcm4sXG4gICAgICBldmFsdWF0b3JJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgRXZhbHVhdG9yIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGV2YWx1YXRvckFybiAtIFRoZSBldmFsdWF0b3IgQVJOIHRvIGltcG9ydFxuICAgKiBAcmV0dXJucyBBbiBJRXZhbHVhdG9yIHJlZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRXZhbHVhdG9yQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBldmFsdWF0b3JBcm46IHN0cmluZyxcbiAgKTogSUV2YWx1YXRvciB7XG4gICAgY29uc3QgYXJuUGFydHMgPSBBcm4uc3BsaXQoZXZhbHVhdG9yQXJuLCBBcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSk7XG4gICAgY29uc3QgZXZhbHVhdG9ySWQgPSBhcm5QYXJ0cy5yZXNvdXJjZU5hbWUhO1xuXG4gICAgcmV0dXJuIEV2YWx1YXRvci5mcm9tRXZhbHVhdG9yQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIGV2YWx1YXRvckFybixcbiAgICAgIGV2YWx1YXRvcklkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBFdmFsdWF0b3IgZnJvbSBpdHMgYXR0cmlidXRlcy5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gYXR0cnMgLSBUaGUgZXZhbHVhdG9yIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgQW4gSUV2YWx1YXRvciByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUV2YWx1YXRvckF0dHJpYnV0ZXMoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIGF0dHJzOiBFdmFsdWF0b3JBdHRyaWJ1dGVzLFxuICApOiBJRXZhbHVhdG9yIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBFdmFsdWF0b3JCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JBcm4gPSBhdHRycy5ldmFsdWF0b3JBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9ySWQgPSBhdHRycy5ldmFsdWF0b3JJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JOYW1lID0gYXR0cnMuZXZhbHVhdG9yTmFtZSA/PyBhdHRycy5ldmFsdWF0b3JJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGV2YWx1YXRvci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV2YWx1YXRvckFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGV2YWx1YXRvci5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV2YWx1YXRvcklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgc3RhdHVzIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgZXZhbHVhdG9yIHdhcyBjcmVhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGV2YWx1YXRvciB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBFdmFsdWF0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOiBwcm9wcy5ldmFsdWF0b3JOYW1lLFxuICAgIH0pO1xuXG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVFdmFsdWF0b3JOYW1lLCBwcm9wcy5ldmFsdWF0b3JOYW1lLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZURlc2NyaXB0aW9uLCBwcm9wcy5kZXNjcmlwdGlvbiwgdGhpcyk7XG5cbiAgICB0aGlzLmV2YWx1YXRvck5hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuRXZhbHVhdG9yKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIGV2YWx1YXRvck5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgZXZhbHVhdG9yQ29uZmlnOiBwcm9wcy5ldmFsdWF0b3JDb25maWcuX2JpbmQoKSxcbiAgICAgIGxldmVsOiBwcm9wcy5sZXZlbC52YWx1ZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICB9KTtcblxuICAgIC8vIElmIGNvZGUtYmFzZWQsIGdyYW50IHRoZSBiZWRyb2NrLWFnZW50Y29yZSBzZXJ2aWNlIHBlcm1pc3Npb24gdG8gaW52b2tlXG4gICAgLy8gdGhlIExhbWJkYSBmdW5jdGlvbiwgc2NvcGVkIHRvIHRoaXMgc3BlY2lmaWMgZXZhbHVhdG9yIGZvciBjb25mdXNlZCBkZXB1dHkgcHJldmVudGlvbi5cbiAgICBpZiAocHJvcHMuZXZhbHVhdG9yQ29uZmlnLmxhbWJkYUZ1bmN0aW9uKSB7XG4gICAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgICAgcHJvcHMuZXZhbHVhdG9yQ29uZmlnLmxhbWJkYUZ1bmN0aW9uLmFkZFBlcm1pc3Npb24oJ0JlZHJvY2tBZ2VudENvcmVFdmFsdWF0b3JJbnZva2UnLCB7XG4gICAgICAgIHByaW5jaXBhbDogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJyksXG4gICAgICAgIHNvdXJjZUFjY291bnQ6IHN0YWNrLmFjY291bnQsXG4gICAgICAgIHNvdXJjZUFybjogcmVzb3VyY2UuYXR0ckV2YWx1YXRvckFybixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuZXZhbHVhdG9yQXJuID0gcmVzb3VyY2UuYXR0ckV2YWx1YXRvckFybjtcbiAgICB0aGlzLmV2YWx1YXRvcklkID0gcmVzb3VyY2UuYXR0ckV2YWx1YXRvcklkO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHJlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSByZXNvdXJjZS5hdHRyVXBkYXRlZEF0O1xuICB9XG59XG4iXX0=
|
|
262
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWV2YWx1YXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImN1c3RvbS1ldmFsdWF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7QUFFSCw2Q0FBb0Q7QUFDcEQscUVBQXFFO0FBQ3JFLDJDQUEyQztBQUMzQyw4RUFBOEU7QUFDOUUsMEVBQTBFO0FBRTFFLHFEQUFrRTtBQUdsRSw2REFLOEI7QUFpRDlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Q0c7SUFFVSxTQUFTOzRCQURyQixvQ0FBa0I7Ozs7c0JBQ1ksOEJBQWE7eUJBQXJCLFNBQVEsV0FBYTs7OztZQUE1Qyw2S0FnS0M7Ozs7O1FBL0pDLHNDQUFzQztRQUMvQixNQUFNLENBQVUscUJBQXFCLEdBQzFDLGdEQUFnRCxDQUFDO1FBRW5EOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMsZUFBZSxDQUMzQixLQUFnQixFQUNoQixFQUFVLEVBQ1YsV0FBbUI7WUFFbkIsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsTUFBTSxZQUFZLEdBQUcsaUJBQUcsQ0FBQyxNQUFNLENBQzdCO2dCQUNFLE9BQU8sRUFBRSxtQkFBbUI7Z0JBQzVCLFFBQVEsRUFBRSxXQUFXO2dCQUNyQixZQUFZLEVBQUUsV0FBVzthQUMxQixFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxTQUFTLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDbEQsWUFBWTtnQkFDWixXQUFXO2FBQ1osQ0FBQyxDQUFDO1NBQ0o7UUFFRDs7Ozs7OztXQU9HO1FBQ0ksTUFBTSxDQUFDLGdCQUFnQixDQUM1QixLQUFnQixFQUNoQixFQUFVLEVBQ1YsWUFBb0I7WUFFcEIsTUFBTSxRQUFRLEdBQUcsaUJB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QUFjLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLEtBQUssQ0FBQyxlQUFlLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxpQ0FBaUMsRUFBRTtvQkFDcEYsU0FBUyxFQUFFLElBQUksR0FBRyxDQUFDLGdCQUFnQixDQUFDLGlDQUFpQyxDQUFDO29CQUN0RSxhQUFhLEVBQUUsS0FBSyxDQUFDLE9BQU87b0JBQzVCLFNBQVMsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO2lCQUNyQyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLFlBQVksR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7WUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQzVDLElBQUksQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1NBQ3pDOztZQS9KVSx1REFBUzs7Ozs7QUFBVCw4QkFBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGJlZHJvY2thZ2VudGNvcmUgZnJvbSAnYXdzLWNkay1saWIvYXdzLWJlZHJvY2thZ2VudGNvcmUnO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHR5cGUgSUV2YWx1YXRvciwgRXZhbHVhdG9yQmFzZSB9IGZyb20gJy4vZXZhbHVhdG9yLWJhc2UnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0b3JDb25maWcgfSBmcm9tICcuL2V2YWx1YXRvci1jb25maWcnO1xuaW1wb3J0IHR5cGUgeyBFdmFsdWF0aW9uTGV2ZWwsIEV2YWx1YXRvckF0dHJpYnV0ZXMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIHRocm93SWZJbnZhbGlkLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvck5hbWUsXG4gIHZhbGlkYXRlRXZhbHVhdG9yVGFncyxcbn0gZnJvbSAnLi92YWxpZGF0aW9uLWhlbHBlcnMnO1xuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGFuIEV2YWx1YXRvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsdWF0b3JQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKlxuICAgKiBNdXN0IGJlIHVuaXF1ZSB3aXRoaW4geW91ciBhY2NvdW50LiBWYWxpZCBjaGFyYWN0ZXJzIGFyZSBhLXosIEEtWiwgMC05LCBfICh1bmRlcnNjb3JlKS5cbiAgICogTXVzdCBzdGFydCB3aXRoIGEgbGV0dGVyIGFuZCBjYW4gYmUgdXAgdG8gNDggY2hhcmFjdGVycyBsb25nLlxuICAgKlxuICAgKiBAcGF0dGVybiBeW2EtekEtWl1bYS16QS1aMC05X117MCw0N30kXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHRoYXQgZGVmaW5lcyBob3cgdGhlIGV2YWx1YXRvciBhc3Nlc3NlcyBhZ2VudCBwZXJmb3JtYW5jZS5cbiAgICpcbiAgICogVXNlIGBFdmFsdWF0b3JDb25maWcubGxtQXNBSnVkZ2UoKWAgZm9yIG1vZGVsLWJhc2VkIGV2YWx1YXRpb24gb3JcbiAgICogYEV2YWx1YXRvckNvbmZpZy5jb2RlQmFzZWQoKWAgZm9yIExhbWJkYS1iYXNlZCBldmFsdWF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZXZhbHVhdG9yQ29uZmlnOiBFdmFsdWF0b3JDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoZSBsZXZlbCBhdCB3aGljaCB0aGUgZXZhbHVhdG9yIGFzc2Vzc2VzIGFnZW50IHBlcmZvcm1hbmNlLlxuICAgKlxuICAgKiBEZXRlcm1pbmVzIHdoYXQgZ3JhbnVsYXJpdHkgb2YgZGF0YSB0aGUgZXZhbHVhdG9yIG9wZXJhdGVzIG9uOlxuICAgKiB0b29sIGNhbGwsIHRyYWNlIChzaW5nbGUgcmVxdWVzdC1yZXNwb25zZSksIG9yIHNlc3Npb24gKGZ1bGwgY29udmVyc2F0aW9uKS5cbiAgICovXG4gIHJlYWRvbmx5IGxldmVsOiBFdmFsdWF0aW9uTGV2ZWw7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIGRlc2NyaXB0aW9uXG4gICAqIEBtYXhMZW5ndGggMjAwXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGFncyBmb3IgdGhlIGV2YWx1YXRvci5cbiAgICogQSBsaXN0IG9mIGtleTp2YWx1ZSBwYWlycyBvZiB0YWdzIHRvIGFwcGx5IHRvIHRoaXMgRXZhbHVhdG9yIHJlc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIEEgY3VzdG9tIGV2YWx1YXRvciBmb3IgQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlLlxuICpcbiAqIEN1c3RvbSBldmFsdWF0b3JzIGVuYWJsZSB5b3UgdG8gZGVmaW5lIGV2YWx1YXRpb24gbG9naWMgdGFpbG9yZWQgdG8geW91ciBzcGVjaWZpY1xuICogdXNlIGNhc2VzLiBTdXBwb3J0cyB0d28gZXZhbHVhdGlvbiBzdHJhdGVnaWVzOlxuICogLSAqKkxMTS1hcy1hLUp1ZGdlKio6IFVzZXMgYSBmb3VuZGF0aW9uIG1vZGVsIHdpdGggY3VzdG9tIGluc3RydWN0aW9ucyBhbmQgYSByYXRpbmcgc2NhbGUuXG4gKiAtICoqQ29kZS1iYXNlZCoqOiBVc2VzIGEgTGFtYmRhIGZ1bmN0aW9uIGZvciBjdXN0b20gZXZhbHVhdGlvbiBsb2dpYy5cbiAqXG4gKiBDdXN0b20gZXZhbHVhdG9ycyBhcmUgdXNlZCB3aXRoIGBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnYCB2aWEgYEV2YWx1YXRvclJlZmVyZW5jZS5jdXN0b20oKWAuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6RXZhbHVhdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyZWF0ZSBhIGN1c3RvbSBMTE0tYXMtYS1KdWRnZSBldmFsdWF0b3JcbiAqIGNvbnN0IGV2YWx1YXRvciA9IG5ldyBhZ2VudGNvcmUuRXZhbHVhdG9yKHRoaXMsICdNeUV2YWx1YXRvcicsIHtcbiAqICAgZXZhbHVhdG9yTmFtZTogJ215X2N1c3RvbV9ldmFsdWF0b3InLFxuICogICBsZXZlbDogYWdlbnRjb3JlLkV2YWx1YXRpb25MZXZlbC5TRVNTSU9OLFxuICogICBldmFsdWF0b3JDb25maWc6IGFnZW50Y29yZS5FdmFsdWF0b3JDb25maWcubGxtQXNBSnVkZ2Uoe1xuICogICAgIGluc3RydWN0aW9uczogJ0V2YWx1YXRlIHdoZXRoZXIgdGhlIGFnZW50IHJlc3BvbnNlIGlzIGhlbHBmdWwgYW5kIGFjY3VyYXRlLicsXG4gKiAgICAgbW9kZWxJZDogJ3VzLmFudGhyb3BpYy5jbGF1ZGUtc29ubmV0LTQtNicsXG4gKiAgICAgcmF0aW5nU2NhbGU6IGFnZW50Y29yZS5FdmFsdWF0b3JSYXRpbmdTY2FsZS5jYXRlZ29yaWNhbChbXG4gKiAgICAgICB7IGxhYmVsOiAnR29vZCcsIGRlZmluaXRpb246ICdUaGUgcmVzcG9uc2UgaXMgaGVscGZ1bCBhbmQgYWNjdXJhdGUuJyB9LFxuICogICAgICAgeyBsYWJlbDogJ0JhZCcsIGRlZmluaXRpb246ICdUaGUgcmVzcG9uc2UgaXMgbm90IGhlbHBmdWwgb3IgY29udGFpbnMgZXJyb3JzLicgfSxcbiAqICAgICBdKSxcbiAqICAgfSksXG4gKiB9KTtcbiAqXG4gKiAvLyBVc2UgdGhlIGN1c3RvbSBldmFsdWF0b3IgaW4gYW4gb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvblxuICogbmV3IGFnZW50Y29yZS5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnKHRoaXMsICdNeUV2YWx1YXRpb24nLCB7XG4gKiAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiAnbXlfZXZhbHVhdGlvbicsXG4gKiAgIGV2YWx1YXRvcnM6IFtcbiAqICAgICBhZ2VudGNvcmUuRXZhbHVhdG9yUmVmZXJlbmNlLmJ1aWx0aW4oYWdlbnRjb3JlLkJ1aWx0aW5FdmFsdWF0b3IuSEVMUEZVTE5FU1MpLFxuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuY3VzdG9tKGV2YWx1YXRvciksXG4gKiAgIF0sXG4gKiAgIGRhdGFTb3VyY2U6IGFnZW50Y29yZS5EYXRhU291cmNlQ29uZmlnLmZyb21DbG91ZFdhdGNoTG9ncyh7XG4gKiAgICAgbG9nR3JvdXBOYW1lczogWycvYXdzL2JlZHJvY2stYWdlbnRjb3JlL215LWFnZW50J10sXG4gKiAgICAgc2VydmljZU5hbWVzOiBbJ215LWFnZW50LmRlZmF1bHQnXSxcbiAqICAgfSksXG4gKiB9KTtcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIEV2YWx1YXRvckJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID1cbiAgICAnQGF3cy1jZGsuYXdzLWJlZHJvY2stYWdlbnRjb3JlLWFscGhhLkV2YWx1YXRvcic7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBFdmFsdWF0b3IgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBldmFsdWF0b3JJZCAtIFRoZSBldmFsdWF0b3IgSUQgdG8gaW1wb3J0XG4gICAqIEByZXR1cm5zIEFuIElFdmFsdWF0b3IgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FdmFsdWF0b3JJZChcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZXZhbHVhdG9ySWQ6IHN0cmluZyxcbiAgKTogSUV2YWx1YXRvciB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZXZhbHVhdG9yQXJuID0gQXJuLmZvcm1hdChcbiAgICAgIHtcbiAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdldmFsdWF0b3InLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGV2YWx1YXRvcklkLFxuICAgICAgfSxcbiAgICAgIHN0YWNrLFxuICAgICk7XG5cbiAgICByZXR1cm4gRXZhbHVhdG9yLmZyb21FdmFsdWF0b3JBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgZXZhbHVhdG9yQXJuLFxuICAgICAgZXZhbHVhdG9ySWQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIEV2YWx1YXRvciBieSBpdHMgQVJOLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBldmFsdWF0b3JBcm4gLSBUaGUgZXZhbHVhdG9yIEFSTiB0byBpbXBvcnRcbiAgICogQHJldHVybnMgQW4gSUV2YWx1YXRvciByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUV2YWx1YXRvckFybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZXZhbHVhdG9yQXJuOiBzdHJpbmcsXG4gICk6IElFdmFsdWF0b3Ige1xuICAgIGNvbnN0IGFyblBhcnRzID0gQXJuLnNwbGl0KGV2YWx1YXRvckFybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuICAgIGNvbnN0IGV2YWx1YXRvcklkID0gYXJuUGFydHMucmVzb3VyY2VOYW1lITtcblxuICAgIHJldHVybiBFdmFsdWF0b3IuZnJvbUV2YWx1YXRvckF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBldmFsdWF0b3JBcm4sXG4gICAgICBldmFsdWF0b3JJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgRXZhbHVhdG9yIGZyb20gaXRzIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGF0dHJzIC0gVGhlIGV2YWx1YXRvciBhdHRyaWJ1dGVzXG4gICAqIEByZXR1cm5zIEFuIElFdmFsdWF0b3IgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FdmFsdWF0b3JBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogRXZhbHVhdG9yQXR0cmlidXRlcyxcbiAgKTogSUV2YWx1YXRvciB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgRXZhbHVhdG9yQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9yQXJuID0gYXR0cnMuZXZhbHVhdG9yQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV2YWx1YXRvcklkID0gYXR0cnMuZXZhbHVhdG9ySWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9yTmFtZSA9IGF0dHJzLmV2YWx1YXRvck5hbWUgPz8gYXR0cnMuZXZhbHVhdG9ySWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBldmFsdWF0b3IuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBldmFsdWF0b3JJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXZhbHVhdG9yTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlmZWN5Y2xlIHN0YXR1cyBvZiB0aGUgZXZhbHVhdG9yLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGV2YWx1YXRvciB3YXMgY3JlYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBldmFsdWF0b3Igd2FzIGxhc3QgdXBkYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdD86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRXZhbHVhdG9yUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMuZXZhbHVhdG9yTmFtZSxcbiAgICB9KTtcblxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdG9yTmFtZSwgcHJvcHMuZXZhbHVhdG9yTmFtZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVEZXNjcmlwdGlvbiwgcHJvcHMuZGVzY3JpcHRpb24sIHRoaXMpO1xuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdG9yVGFncywgcHJvcHMudGFncywgdGhpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5ldmFsdWF0b3JOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG5cbiAgICBjb25zdCByZXNvdXJjZSA9IG5ldyBiZWRyb2NrYWdlbnRjb3JlLkNmbkV2YWx1YXRvcih0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBldmFsdWF0b3JOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGV2YWx1YXRvckNvbmZpZzogcHJvcHMuZXZhbHVhdG9yQ29uZmlnLl9iaW5kKCksXG4gICAgICBsZXZlbDogcHJvcHMubGV2ZWwudmFsdWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICB0YWdzOiBwcm9wcy50YWdzICYmIE9iamVjdC5rZXlzKHByb3BzLnRhZ3MpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBPYmplY3QuZW50cmllcyhwcm9wcy50YWdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBJZiBjb2RlLWJhc2VkLCBncmFudCB0aGUgYmVkcm9jay1hZ2VudGNvcmUgc2VydmljZSBwZXJtaXNzaW9uIHRvIGludm9rZVxuICAgIC8vIHRoZSBMYW1iZGEgZnVuY3Rpb24sIHNjb3BlZCB0byB0aGlzIHNwZWNpZmljIGV2YWx1YXRvciBmb3IgY29uZnVzZWQgZGVwdXR5IHByZXZlbnRpb24uXG4gICAgaWYgKHByb3BzLmV2YWx1YXRvckNvbmZpZy5sYW1iZGFGdW5jdGlvbikge1xuICAgICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICAgIHByb3BzLmV2YWx1YXRvckNvbmZpZy5sYW1iZGFGdW5jdGlvbi5hZGRQZXJtaXNzaW9uKCdCZWRyb2NrQWdlbnRDb3JlRXZhbHVhdG9ySW52b2tlJywge1xuICAgICAgICBwcmluY2lwYWw6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnYmVkcm9jay1hZ2VudGNvcmUuYW1hem9uYXdzLmNvbScpLFxuICAgICAgICBzb3VyY2VBY2NvdW50OiBzdGFjay5hY2NvdW50LFxuICAgICAgICBzb3VyY2VBcm46IHJlc291cmNlLmF0dHJFdmFsdWF0b3JBcm4sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmV2YWx1YXRvckFybiA9IHJlc291cmNlLmF0dHJFdmFsdWF0b3JBcm47XG4gICAgdGhpcy5ldmFsdWF0b3JJZCA9IHJlc291cmNlLmF0dHJFdmFsdWF0b3JJZDtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSByZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgfVxufVxuIl19
|
|
@@ -31,7 +31,7 @@ const validation_helpers_1 = require("./validation-helpers");
|
|
|
31
31
|
* });
|
|
32
32
|
*/
|
|
33
33
|
class DataSourceConfig {
|
|
34
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.DataSourceConfig", version: "2.
|
|
34
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.DataSourceConfig", version: "2.254.0-alpha.0" };
|
|
35
35
|
/**
|
|
36
36
|
* Creates a CloudWatch Logs data source configuration.
|
|
37
37
|
*
|
|
@@ -21,7 +21,7 @@ const iam = require("aws-cdk-lib/aws-iam");
|
|
|
21
21
|
* Contains methods and attributes valid for evaluators either created with CDK or imported.
|
|
22
22
|
*/
|
|
23
23
|
class EvaluatorBase extends aws_cdk_lib_1.Resource {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorBase", version: "2.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorBase", version: "2.254.0-alpha.0" };
|
|
25
25
|
constructor(scope, id, props = {}) {
|
|
26
26
|
super(scope, id, props);
|
|
27
27
|
}
|
|
@@ -25,7 +25,7 @@ const validation_helpers_1 = require("./validation-helpers");
|
|
|
25
25
|
* ]);
|
|
26
26
|
*/
|
|
27
27
|
class EvaluatorRatingScale {
|
|
28
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorRatingScale", version: "2.
|
|
28
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorRatingScale", version: "2.254.0-alpha.0" };
|
|
29
29
|
/**
|
|
30
30
|
* Creates a categorical rating scale.
|
|
31
31
|
*
|
|
@@ -88,7 +88,7 @@ exports.EvaluatorRatingScale = EvaluatorRatingScale;
|
|
|
88
88
|
* });
|
|
89
89
|
*/
|
|
90
90
|
class EvaluatorConfig {
|
|
91
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorConfig", version: "2.
|
|
91
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorConfig", version: "2.254.0-alpha.0" };
|
|
92
92
|
/**
|
|
93
93
|
* Creates an LLM-as-a-Judge evaluator configuration.
|
|
94
94
|
*
|
|
@@ -19,7 +19,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
19
19
|
* const custom = agentcore.EvaluatorReference.custom(myCustomEvaluator);
|
|
20
20
|
*/
|
|
21
21
|
class EvaluatorReference {
|
|
22
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorReference", version: "2.
|
|
22
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.EvaluatorReference", version: "2.254.0-alpha.0" };
|
|
23
23
|
/**
|
|
24
24
|
* Creates a reference to a built-in evaluator.
|
|
25
25
|
*
|
|
@@ -21,7 +21,7 @@ const iam = require("aws-cdk-lib/aws-iam");
|
|
|
21
21
|
* Contains methods and attributes valid for configurations either created with CDK or imported.
|
|
22
22
|
*/
|
|
23
23
|
class OnlineEvaluationBase extends aws_cdk_lib_1.Resource {
|
|
24
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationBase", version: "2.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationBase", version: "2.254.0-alpha.0" };
|
|
25
25
|
constructor(scope, id, props = {}) {
|
|
26
26
|
super(scope, id, props);
|
|
27
27
|
}
|
|
@@ -33,6 +33,15 @@ export interface OnlineEvaluationConfigProps extends OnlineEvaluationBaseProps {
|
|
|
33
33
|
* The data source configuration that specifies where to read agent traces from.
|
|
34
34
|
*/
|
|
35
35
|
readonly dataSource: DataSourceConfig;
|
|
36
|
+
/**
|
|
37
|
+
* Tags for the online evaluation configuration.
|
|
38
|
+
* A list of key:value pairs of tags to apply to this OnlineEvaluationConfig resource.
|
|
39
|
+
*
|
|
40
|
+
* @default - No tags
|
|
41
|
+
*/
|
|
42
|
+
readonly tags?: {
|
|
43
|
+
[key: string]: string;
|
|
44
|
+
};
|
|
36
45
|
}
|
|
37
46
|
/**
|
|
38
47
|
* Online evaluation configuration for Amazon Bedrock AgentCore.
|
|
@@ -93,7 +93,7 @@ let OnlineEvaluationConfig = (() => {
|
|
|
93
93
|
OnlineEvaluationConfig = _classThis = _classDescriptor.value;
|
|
94
94
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
95
95
|
}
|
|
96
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationConfig", version: "2.
|
|
96
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-bedrock-agentcore-alpha.OnlineEvaluationConfig", version: "2.254.0-alpha.0" };
|
|
97
97
|
/** Uniquely identifies this class. */
|
|
98
98
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-bedrock-agentcore-alpha.OnlineEvaluationConfig';
|
|
99
99
|
/**
|
|
@@ -233,6 +233,9 @@ let OnlineEvaluationConfig = (() => {
|
|
|
233
233
|
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateSamplingPercentage, props.samplingPercentage, this);
|
|
234
234
|
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateFilters, props.filters, this);
|
|
235
235
|
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateSessionTimeout, props.sessionTimeout?.toMinutes(), this);
|
|
236
|
+
if (props.tags) {
|
|
237
|
+
(0, validation_helpers_1.throwIfInvalid)(validation_helpers_1.validateEvaluationTags, props.tags, this);
|
|
238
|
+
}
|
|
236
239
|
this.onlineEvaluationConfigName = this.physicalName;
|
|
237
240
|
this.executionRole = props.executionRole ?? this.createExecutionRole(props.dataSource);
|
|
238
241
|
this.grantPrincipal = this.executionRole;
|
|
@@ -244,6 +247,9 @@ let OnlineEvaluationConfig = (() => {
|
|
|
244
247
|
rule: this.buildRuleConfig(props),
|
|
245
248
|
description: props.description,
|
|
246
249
|
executionStatus: props.executionStatus?.value,
|
|
250
|
+
tags: props.tags && Object.keys(props.tags).length > 0
|
|
251
|
+
? Object.entries(props.tags).map(([key, value]) => ({ key, value }))
|
|
252
|
+
: undefined,
|
|
247
253
|
});
|
|
248
254
|
// Ensure the execution role's policies are created before the L1 resource,
|
|
249
255
|
// because BedrockAgentCore validates role permissions at create time.
|
|
@@ -385,4 +391,4 @@ let OnlineEvaluationConfig = (() => {
|
|
|
385
391
|
return OnlineEvaluationConfig = _classThis;
|
|
386
392
|
})();
|
|
387
393
|
exports.OnlineEvaluationConfig = OnlineEvaluationConfig;
|
|
388
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25saW5lLWV2YWx1YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvbmxpbmUtZXZhbHVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILDZDQUF5RDtBQUN6RCxxRUFBcUU7QUFDckUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFJMUUscUVBQThGO0FBQzlGLG1DQU1pQjtBQUtqQiw2REFROEI7QUFzQjlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7SUFFVSxzQkFBc0I7NEJBRGxDLG9DQUFrQjs7OztzQkFDeUIsNkNBQW9CO3NDQUE1QixTQUFRLFdBQW9COzs7O1lBQWhFLDZLQWdXQzs7Ozs7UUEvVkMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FDMUMsNkRBQTZELENBQUM7UUFFaEU7Ozs7Ozs7V0FPRztRQUNJLE1BQU0sQ0FBQyw0QkFBNEIsQ0FDeEMsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLHdCQUFnQztZQUVoQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLFNBQVMsR0FBRyxpQkFBRyxDQUFDLE1BQU0sQ0FDMUI7Z0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsWUFBWSxFQUFFLHdCQUF3QjthQUN2QyxFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUM1RSx5QkFBeUIsRUFBRSxTQUFTO2dCQUNwQyx3QkFBd0IsRUFBRSx3QkFBd0I7Z0JBQ2xELDBCQUEwQixFQUFFLHdCQUF3QjthQUNyRCxDQUFDLENBQUM7U0FDSjtRQUVEOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMsNkJBQTZCLENBQ3pDLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVix5QkFBaUM7WUFFakMsTUFBTSxRQUFRLEdBQUcsaUJBQUcsQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1lBQ3JGLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxZQUFhLENBQUM7WUFFeEMsT0FBTyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUM1RSx5QkFBeUIsRUFBRSx5QkFBeUI7Z0JBQ3BELHdCQUF3QixFQUFFLFFBQVE7Z0JBQ2xDLDBCQUEwQixFQUFFLFFBQVE7YUFDckMsQ0FBQyxDQUFDO1NBQ0o7UUFFRDs7Ozs7OztXQU9HO1FBQ0ksTUFBTSxDQUFDLG9DQUFvQyxDQUNoRCxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBdUM7Ozs7Ozs7Ozs7WUFFdkMsTUFBTSxNQUFPLFNBQVEsNkNBQW9CO2dCQUN2Qix5QkFBeUIsR0FBRyxLQUFLLENBQUMseUJBQXlCLENBQUM7Z0JBQzVELHdCQUF3QixHQUFHLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztnQkFDMUQsMEJBQTBCLEdBQUcsS0FBSyxDQUFDLDBCQUEwQixDQUFDO2dCQUM5RCxhQUFhLEdBQUcsS0FBSyxDQUFDLGdCQUFnQjtvQkFDcEQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDbEUsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDRSxNQUFNLEdBQUcsU0FBUyxDQUFDO2dCQUNuQixlQUFlLEdBQUcsU0FBUyxDQUFDO2dCQUM1QixTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUN0QixjQUFjLENBQWlCO2dCQUUvQyxZQUFZLENBQVksRUFBRSxDQUFTO29CQUNqQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNaLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRixDQUFDO2FBQ0Y7WUFFRCxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM5QjtRQUVEOzs7V0FHRztRQUNhLHlCQUF5QixDQUFTO1FBRWxEOzs7V0FHRztRQUNhLHdCQUF3QixDQUFTO1FBRWpEOzs7V0FHRztRQUNhLDBCQUEwQixDQUFTO1FBRW5EOztXQUVHO1FBQ2EsYUFBYSxDQUFhO1FBRTFDOzs7V0FHRztRQUNhLE1BQU0sQ0FBVTtRQUVoQzs7V0FFRztRQUNhLGVBQWUsQ0FBVTtRQUV6Qzs7O1dBR0c7UUFDYSxTQUFTLENBQVU7UUFFbkM7OztXQUdHO1FBQ2EsU0FBUyxDQUFVO1FBRW5DOztXQUVHO1FBQ2EsY0FBYyxDQUFpQjtRQUUvQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtDO1lBQzFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNmLFlBQVksRUFBRSxLQUFLLENBQUMsMEJBQTBCO2FBQy9DLENBQUMsQ0FBQzs7Ozs7O21EQW5KTSxzQkFBc0I7Ozs7WUFxSi9CLElBQUEsd0NBQW9CLEVBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRWxDLElBQUEsbUNBQWMsRUFBQyx1Q0FBa0IsRUFBRSxLQUFLLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0UsSUFBQSxtQ0FBYyxFQUFDLHdDQUFtQixFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0QsSUFBQSxtQ0FBYyxFQUFDLHVDQUFrQixFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDM0QsSUFBQSxtQ0FBYyxFQUFDLCtDQUEwQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUMzRSxJQUFBLG1DQUFjLEVBQUMsb0NBQWUsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JELElBQUEsbUNBQWMsRUFBQywyQ0FBc0IsRUFBRSxLQUFLLENBQUMsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRWhGLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ3BELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUV6QyxNQUFNLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBQ2hGLDBCQUEwQixFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUM3QyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDakQsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxhQUFjLENBQUMsT0FBTztnQkFDdkQsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDO2dCQUNqQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzlCLGVBQWUsRUFBRSxLQUFLLENBQUMsZUFBZSxFQUFFLEtBQUs7YUFDOUMsQ0FBQyxDQUFDO1lBRUgsMkVBQTJFO1lBQzNFLHNFQUFzRTtZQUN0RSxJQUFJLElBQUksQ0FBQyxhQUFhLFlBQVksR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbkYsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELENBQUM7WUFFRCxJQUFJLENBQUMseUJBQXlCLEdBQUcsUUFBUSxDQUFDLDZCQUE2QixDQUFDO1lBQ3hFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxRQUFRLENBQUMsNEJBQTRCLENBQUM7WUFDdEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztZQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDO1NBQ3pDO1FBRU8sbUJBQW1CLENBQUMsVUFBNEI7WUFDdEQsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQy9DLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsRUFBRTtvQkFDckUsVUFBVSxFQUFFO3dCQUNWLFlBQVksRUFBRTs0QkFDWixtQkFBbUIsRUFBRSxLQUFLLENBQUMsT0FBTzs0QkFDbEMscUJBQXFCLEVBQUUsS0FBSyxDQUFDLE9BQU87eUJBQ3JDO3dCQUNELE9BQU8sRUFBRTs0QkFDUCxlQUFlLEVBQUU7Z0NBQ2YsaUJBQUcsQ0FBQyxNQUFNLENBQ1I7b0NBQ0UsT0FBTyxFQUFFLG1CQUFtQjtvQ0FDNUIsUUFBUSxFQUFFLFdBQVc7b0NBQ3JCLFlBQVksRUFBRSxHQUFHO2lDQUNsQixFQUNELEtBQUssQ0FDTjtnQ0FDRCxpQkFBRyxDQUFDLE1BQU0sQ0FDUjtvQ0FDRSxPQUFPLEVBQUUsbUJBQW1CO29DQUM1QixRQUFRLEVBQUUsMEJBQTBCO29DQUNwQyxZQUFZLEVBQUUsR0FBRztpQ0FDbEIsRUFDRCxLQUFLLENBQ047NkJBQ0Y7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQztnQkFDRixXQUFXLEVBQUUsd0RBQXdEO2FBQ3RFLENBQUMsQ0FBQztZQUVILHlFQUF5RTtZQUN6RSxrRUFBa0U7WUFDbEUsTUFBTSxZQUFZLEdBQUc7Z0JBQ25CLEdBQUcsVUFBVSxDQUFDLG9CQUFvQixDQUFDLGFBQWE7Z0JBQ2hELFdBQVc7YUFDWixDQUFDLE9BQU8sQ0FDUCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ1IsaUJBQUcsQ0FBQyxNQUFNLENBQ1I7b0JBQ0UsT0FBTyxFQUFFLE1BQU07b0JBQ2YsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFlBQVksRUFBRSxJQUFJO29CQUNsQixTQUFTLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUI7aUJBQ3pDLEVBQ0QsS0FBSyxDQUNOO2dCQUNELGlCQUFHLENBQUMsTUFBTSxDQUNSO29CQUNFLE9BQU8sRUFBRSxNQUFNO29CQUNmLFFBQVEsRUFBRSxXQUFXO29CQUNyQixZQUFZLEVBQUUsR0FBRyxJQUFJLElBQUk7b0JBQ3pCLFNBQVMsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQjtpQkFDekMsRUFDRCxLQUFLLENBQ047YUFDRixDQUNGLENBQUM7WUFFRixzRUFBc0U7WUFDdEUsd0VBQXdFO1lBQ3hFLHlHQUF5RztZQUN6RyxJQUFJLENBQUMsV0FBVyxDQUNkLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztnQkFDdEIsR0FBRyxFQUFFLGdDQUFnQztnQkFDckMsT0FBTyxFQUFFLGlEQUF5QztnQkFDbEQsU0FBUyxFQUFFLENBQUMsR0FBRyxDQUFDO2FBQ2pCLENBQUMsQ0FDSCxDQUFDO1lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FDZCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RCLEdBQUcsRUFBRSw2QkFBNkI7Z0JBQ2xDLE9BQU8sRUFBRSw4Q0FBc0M7Z0JBQy9DLFNBQVMsRUFBRSxZQUFZO2FBQ3hCLENBQUMsQ0FDSCxDQUFDO1lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FDZCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RCLEdBQUcsRUFBRSw2QkFBNkI7Z0JBQ2xDLE9BQU8sRUFBRSw4Q0FBc0M7Z0JBQy9DLFNBQVMsRUFBRTtvQkFDVCxpQkFBRyxDQUFDLE1BQU0sQ0FDUjt3QkFDRSxPQUFPLEVBQUUsTUFBTTt3QkFDZixRQUFRLEVBQUUsV0FBVzt3QkFDckIsWUFBWSxFQUFFLHNDQUFzQzt3QkFDcEQsU0FBUyxFQUFFLHVCQUFTLENBQUMsbUJBQW1CO3FCQUN6QyxFQUNELEtBQUssQ0FDTjtpQkFDRjthQUNGLENBQUMsQ0FDSCxDQUFDO1lBRUYsSUFBSSxDQUFDLFdBQVcsQ0FDZCxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7Z0JBQ3RCLEdBQUcsRUFBRSxnQ0FBZ0M7Z0JBQ3JDLE9BQU8sRUFBRSxnREFBd0M7Z0JBQ2pELFNBQVMsRUFBRTtvQkFDVCxpQkFBRyxDQUFDLE1BQU0sQ0FDUjt3QkFDRSxPQUFPLEVBQUUsTUFBTTt3QkFDZixRQUFRLEVBQUUsV0FBVzt3QkFDckIsWUFBWSxFQUFFLFdBQVc7d0JBQ3pCLFNBQVMsRUFBRSx1QkFBUyxDQUFDLG1CQUFtQjtxQkFDekMsRUFDRCxLQUFLLENBQ047b0JBQ0QsaUJBQUcsQ0FBQyxNQUFNLENBQ1I7d0JBQ0UsT0FBTyxFQUFFLE1BQU07d0JBQ2YsUUFBUSxFQUFFLFdBQVc7d0JBQ3JCLFlBQVksRUFBRSxhQUFhO3dCQUMzQixTQUFTLEVBQUUsdUJBQVMsQ0FBQyxtQkFBbUI7cUJBQ3pDLEVBQ0QsS0FBSyxDQUNOO2lCQUNGO2FBQ0YsQ0FBQyxDQUNILENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUNkLElBQUksR0FBRyxDQUFDLGVBQWUsQ0FBQztnQkFDdEIsR0FBRyxFQUFFLHdCQUF3QjtnQkFDN0IsT0FBTyxFQUFFLHNDQUE4QjtnQkFDdkMsU0FBUyxFQUFFO29CQUNULE9BQU8saUJBQUcsQ0FBQyxTQUFTLGdDQUFnQztvQkFDcEQsaUJBQUcsQ0FBQyxNQUFNLENBQ1I7d0JBQ0UsT0FBTyxFQUFFLFNBQVM7d0JBQ2xCLFFBQVEsRUFBRSxtQkFBbUI7d0JBQzdCLFlBQVksRUFBRSxHQUFHO3dCQUNqQixNQUFNLEVBQUUsR0FBRztxQkFDWixFQUNELEtBQUssQ0FDTjtpQkFDRjthQUNGLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVPLGVBQWUsQ0FBQyxLQUFrQztZQUN4RCxPQUFPO2dCQUNMLGNBQWMsRUFBRTtvQkFDZCxrQkFBa0IsRUFBRSxLQUFLLENBQUMsa0JBQWtCLElBQUksRUFBRTtpQkFDbkQ7Z0JBQ0QsYUFBYSxFQUFFO29CQUNiLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRTtpQkFDL0Q7Z0JBQ0QsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDOUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7d0JBQ1YsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSzt3QkFDMUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO3FCQUN2QixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztTQUNIOztZQS9WVSx1REFBc0I7Ozs7O0FBQXRCLHdEQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBBd3MsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhU291cmNlQ29uZmlnIH0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRvclJlZmVyZW5jZSB9IGZyb20gJy4vZXZhbHVhdG9yJztcbmltcG9ydCB7IHR5cGUgSU9ubGluZUV2YWx1YXRpb25Db25maWcsIE9ubGluZUV2YWx1YXRpb25CYXNlIH0gZnJvbSAnLi9vbmxpbmUtZXZhbHVhdGlvbi1iYXNlJztcbmltcG9ydCB7XG4gIEVWQUxVQVRJT05fQkVEUk9DS19NT0RFTF9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0lOREVYX1BPTElDWV9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfREVTQ1JJQkVfUEVSTVMsXG4gIEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQge1xuICB0eXBlIE9ubGluZUV2YWx1YXRpb25CYXNlUHJvcHMsXG4gIHR5cGUgT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdmFsaWRhdGVDb25maWdOYW1lLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvcnMsXG4gIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlLFxuICB2YWxpZGF0ZUZpbHRlcnMsXG4gIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsXG4gIHRocm93SWZJbnZhbGlkLFxufSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gT25saW5lRXZhbHVhdGlvbkNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGV2YWx1YXRvcnMgdG8gYXBwbHkgZHVyaW5nIG9ubGluZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBDYW4gaW5jbHVkZSBib3RoIGJ1aWx0LWluIGV2YWx1YXRvcnMgYW5kIGN1c3RvbSBldmFsdWF0b3JzLlxuICAgKlxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JzOiBFdmFsdWF0b3JSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgc291cmNlIGNvbmZpZ3VyYXRpb24gdGhhdCBzcGVjaWZpZXMgd2hlcmUgdG8gcmVhZCBhZ2VudCB0cmFjZXMgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U6IERhdGFTb3VyY2VDb25maWc7XG59XG5cbi8qKlxuICogT25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbiBmb3IgQW1hem9uIEJlZHJvY2sgQWdlbnRDb3JlLlxuICpcbiAqIEVuYWJsZXMgY29udGludW91cyBldmFsdWF0aW9uIG9mIGFnZW50IHBlcmZvcm1hbmNlIHVzaW5nIGJ1aWx0LWluIG9yIGN1c3RvbSBldmFsdWF0b3JzLlxuICogU3VwcG9ydHMgQ2xvdWRXYXRjaCBMb2dzIGFuZCBBZ2VudCBFbmRwb2ludCBkYXRhIHNvdXJjZXMuXG4gKlxuICogQHJlc291cmNlIEFXUzo6QmVkcm9ja0FnZW50Q29yZTo6T25saW5lRXZhbHVhdGlvbkNvbmZpZ1xuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBCYXNpYyB1c2FnZSB3aXRoIGJ1aWx0LWluIGV2YWx1YXRvcnNcbiAqIGNvbnN0IGV2YWx1YXRpb24gPSBuZXcgYWdlbnRjb3JlLk9ubGluZUV2YWx1YXRpb25Db25maWcodGhpcywgJ015RXZhbHVhdGlvbicsIHtcbiAqICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6ICdteV9ldmFsdWF0aW9uJyxcbiAqICAgZXZhbHVhdG9yczogW1xuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5IRUxQRlVMTkVTUyksXG4gKiAgICAgYWdlbnRjb3JlLkV2YWx1YXRvclJlZmVyZW5jZS5idWlsdGluKGFnZW50Y29yZS5CdWlsdGluRXZhbHVhdG9yLkNPUlJFQ1RORVNTKSxcbiAqICAgXSxcbiAqICAgZGF0YVNvdXJjZTogYWdlbnRjb3JlLkRhdGFTb3VyY2VDb25maWcuZnJvbUNsb3VkV2F0Y2hMb2dzKHtcbiAqICAgICBsb2dHcm91cE5hbWVzOiBbJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvbXktYWdlbnQnXSxcbiAqICAgICBzZXJ2aWNlTmFtZXM6IFsnbXktYWdlbnQuZGVmYXVsdCddLFxuICogICB9KSxcbiAqIH0pO1xuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgT25saW5lRXZhbHVhdGlvbkNvbmZpZyBleHRlbmRzIE9ubGluZUV2YWx1YXRpb25CYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9XG4gICAgJ0Bhd3MtY2RrLmF3cy1iZWRyb2NrLWFnZW50Y29yZS1hbHBoYS5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIE9ubGluZUV2YWx1YXRpb25Db25maWcgYnkgaXRzIElELlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQgLSBUaGUgY29uZmlndXJhdGlvbiBJRCB0byBpbXBvcnRcbiAgICogQHJldHVybnMgQW4gSU9ubGluZUV2YWx1YXRpb25Db25maWcgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdJZDogc3RyaW5nLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgY29uZmlnQXJuID0gQXJuLmZvcm1hdChcbiAgICAgIHtcbiAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgcmVzb3VyY2U6ICdvbmxpbmUtZXZhbHVhdGlvbi1jb25maWcnLFxuICAgICAgICByZXNvdXJjZU5hbWU6IG9ubGluZUV2YWx1YXRpb25Db25maWdJZCxcbiAgICAgIH0sXG4gICAgICBzdGFjayxcbiAgICApO1xuXG4gICAgcmV0dXJuIE9ubGluZUV2YWx1YXRpb25Db25maWcuZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzKHNjb3BlLCBpZCwge1xuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybjogY29uZmlnQXJuLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQsXG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZTogb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4gLSBUaGUgY29uZmlndXJhdGlvbiBBUk4gdG8gaW1wb3J0XG4gICAqIEByZXR1cm5zIEFuIElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0Fybjogc3RyaW5nLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY29uc3QgYXJuUGFydHMgPSBBcm4uc3BsaXQob25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuICAgIGNvbnN0IGNvbmZpZ0lkID0gYXJuUGFydHMucmVzb3VyY2VOYW1lITtcblxuICAgIHJldHVybiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnLmZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4sXG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQ6IGNvbmZpZ0lkLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IGNvbmZpZ0lkLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGZyb20gaXRzIGF0dHJpYnV0ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSAtIFRoZSBjb25zdHJ1Y3Qgc2NvcGVcbiAgICogQHBhcmFtIGlkIC0gQ29uc3RydWN0IGlkZW50aWZpZXJcbiAgICogQHBhcmFtIGF0dHJzIC0gVGhlIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlc1xuICAgKiBAcmV0dXJucyBBbiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG4gICk6IElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiA9IGF0dHJzLm9ubGluZUV2YWx1YXRpb25Db25maWdBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkID0gYXR0cnMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lID0gYXR0cnMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZSA9IGF0dHJzLmV4ZWN1dGlvblJvbGVBcm5cbiAgICAgICAgPyBpYW0uUm9sZS5mcm9tUm9sZUFybihzY29wZSwgYCR7aWR9Um9sZWAsIGF0dHJzLmV4ZWN1dGlvblJvbGVBcm4pXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHN0YXR1cyA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25TdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlZEF0ID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHVwZGF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBncmFudFByaW5jaXBhbDogaWFtLklQcmluY2lwYWw7XG5cbiAgICAgIGNvbnN0cnVjdG9yKHM6IENvbnN0cnVjdCwgaTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHMsIGkpO1xuICAgICAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlID8/IG5ldyBpYW0uVW5rbm93blByaW5jaXBhbCh7IHJlc291cmNlOiB0aGlzIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElBTSBleGVjdXRpb24gcm9sZSBmb3IgdGhlIGV2YWx1YXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZT86IGlhbS5JUm9sZTtcblxuICAvKipcbiAgICogVGhlIGxpZmVjeWNsZSBzdGF0dXMgb2YgdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleGVjdXRpb24gc3RhdHVzIG9mIHRoZSBldmFsdWF0aW9uIChFTkFCTEVEIG9yIERJU0FCTEVEKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBleGVjdXRpb25TdGF0dXM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgY3JlYXRlZC5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRpbWVzdGFtcCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIHdhcyBsYXN0IHVwZGF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwcmluY2lwYWwgdG8gZ3JhbnQgcGVybWlzc2lvbnMgdG8uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHtcbiAgICAgIHBoeXNpY2FsTmFtZTogcHJvcHMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWUsXG4gICAgfSk7XG5cbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUNvbmZpZ05hbWUsIHByb3BzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZURlc2NyaXB0aW9uLCBwcm9wcy5kZXNjcmlwdGlvbiwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVFdmFsdWF0b3JzLCBwcm9wcy5ldmFsdWF0b3JzLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZVNhbXBsaW5nUGVyY2VudGFnZSwgcHJvcHMuc2FtcGxpbmdQZXJjZW50YWdlLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZUZpbHRlcnMsIHByb3BzLmZpbHRlcnMsIHRoaXMpO1xuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsIHByb3BzLnNlc3Npb25UaW1lb3V0Py50b01pbnV0ZXMoKSwgdGhpcyk7XG5cbiAgICB0aGlzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lID0gdGhpcy5waHlzaWNhbE5hbWU7XG4gICAgdGhpcy5leGVjdXRpb25Sb2xlID0gcHJvcHMuZXhlY3V0aW9uUm9sZSA/PyB0aGlzLmNyZWF0ZUV4ZWN1dGlvblJvbGUocHJvcHMuZGF0YVNvdXJjZSk7XG4gICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZTtcblxuICAgIGNvbnN0IHJlc291cmNlID0gbmV3IGJlZHJvY2thZ2VudGNvcmUuQ2ZuT25saW5lRXZhbHVhdGlvbkNvbmZpZyh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICBldmFsdWF0b3JzOiBwcm9wcy5ldmFsdWF0b3JzLm1hcCgoZSkgPT4gZS5iaW5kKCkpLFxuICAgICAgZGF0YVNvdXJjZUNvbmZpZzogcHJvcHMuZGF0YVNvdXJjZS5iaW5kKCksXG4gICAgICBldmFsdWF0aW9uRXhlY3V0aW9uUm9sZUFybjogdGhpcy5leGVjdXRpb25Sb2xlIS5yb2xlQXJuLFxuICAgICAgcnVsZTogdGhpcy5idWlsZFJ1bGVDb25maWcocHJvcHMpLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZXhlY3V0aW9uU3RhdHVzOiBwcm9wcy5leGVjdXRpb25TdGF0dXM/LnZhbHVlLFxuICAgIH0pO1xuXG4gICAgLy8gRW5zdXJlIHRoZSBleGVjdXRpb24gcm9sZSdzIHBvbGljaWVzIGFyZSBjcmVhdGVkIGJlZm9yZSB0aGUgTDEgcmVzb3VyY2UsXG4gICAgLy8gYmVjYXVzZSBCZWRyb2NrQWdlbnRDb3JlIHZhbGlkYXRlcyByb2xlIHBlcm1pc3Npb25zIGF0IGNyZWF0ZSB0aW1lLlxuICAgIGlmICh0aGlzLmV4ZWN1dGlvblJvbGUgaW5zdGFuY2VvZiBpYW0uUm9sZSAmJiB0aGlzLmV4ZWN1dGlvblJvbGUubm9kZS5kZWZhdWx0Q2hpbGQpIHtcbiAgICAgIHJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeSh0aGlzLmV4ZWN1dGlvblJvbGUpO1xuICAgIH1cblxuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0FybiA9IHJlc291cmNlLmF0dHJPbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuO1xuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkID0gcmVzb3VyY2UuYXR0ck9ubGluZUV2YWx1YXRpb25Db25maWdJZDtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc291cmNlLmF0dHJTdGF0dXM7XG4gICAgdGhpcy5leGVjdXRpb25TdGF0dXMgPSByZXNvdXJjZS5leGVjdXRpb25TdGF0dXM7XG4gICAgdGhpcy5jcmVhdGVkQXQgPSByZXNvdXJjZS5hdHRyQ3JlYXRlZEF0O1xuICAgIHRoaXMudXBkYXRlZEF0ID0gcmVzb3VyY2UuYXR0clVwZGF0ZWRBdDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRXhlY3V0aW9uUm9sZShkYXRhU291cmNlOiBEYXRhU291cmNlQ29uZmlnKTogaWFtLklSb2xlIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuXG4gICAgY29uc3Qgcm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAnRXhlY3V0aW9uUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdiZWRyb2NrLWFnZW50Y29yZS5hbWF6b25hd3MuY29tJywge1xuICAgICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICAgU3RyaW5nRXF1YWxzOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICAgICAgJ2F3czpSZXNvdXJjZUFjY291bnQnOiBzdGFjay5hY2NvdW50LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgQXJuTGlrZToge1xuICAgICAgICAgICAgJ2F3czpTb3VyY2VBcm4nOiBbXG4gICAgICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnZXZhbHVhdG9yJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2stYWdlbnRjb3JlJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlOiAnb25saW5lLWV2YWx1YXRpb24tY29uZmlnJyxcbiAgICAgICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICAgIGRlc2NyaXB0aW9uOiAnRXhlY3V0aW9uIHJvbGUgZm9yIEJlZHJvY2sgQWdlbnRDb3JlIE9ubGluZSBFdmFsdWF0aW9uJyxcbiAgICB9KTtcblxuICAgIC8vIFRoZSBzZXJ2aWNlIHJlcXVpcmVzIHF1ZXJ5IGFjY2VzcyB0byB1c2VyLXNwZWNpZmllZCBsb2cgZ3JvdXBzIEFORCB0aGVcbiAgICAvLyBpbXBsaWNpdCBhd3Mvc3BhbnMgbG9nIGdyb3VwIGl0IHVzZXMgaW50ZXJuYWxseSBmb3IgdHJhY2UgZGF0YS5cbiAgICBjb25zdCBsb2dHcm91cEFybnMgPSBbXG4gICAgICAuLi5kYXRhU291cmNlLmNsb3VkV2F0Y2hMb2dzQ29uZmlnLmxvZ0dyb3VwTmFtZXMsXG4gICAgICAnYXdzL3NwYW5zJyxcbiAgICBdLmZsYXRNYXAoXG4gICAgICAobmFtZSkgPT4gW1xuICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogbmFtZSxcbiAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFjayxcbiAgICAgICAgKSxcbiAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IGAke25hbWV9OipgLFxuICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICApLFxuICAgICAgXSxcbiAgICApO1xuXG4gICAgLy8gbG9nczpEZXNjcmliZUxvZ0dyb3VwcyBkb2VzIG5vdCBzdXBwb3J0IHJlc291cmNlLWxldmVsIHBlcm1pc3Npb25zLlxuICAgIC8vIFRoZSByZXNvdXJjZSBtdXN0IGJlICcqJyBwZXIgdGhlIElBTSBzZXJ2aWNlIGF1dGhvcml6YXRpb24gcmVmZXJlbmNlLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3NlcnZpY2UtYXV0aG9yaXphdGlvbi9sYXRlc3QvcmVmZXJlbmNlL2xpc3RfYW1hem9uY2xvdWR3YXRjaGxvZ3MuaHRtbFxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dEZXNjcmliZVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX0RFU0NSSUJFX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFsnKiddLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dRdWVyeVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IGxvZ0dyb3VwQXJucyxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDbG91ZFdhdGNoTG9nV3JpdGVTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJy9hd3MvYmVkcm9jay1hZ2VudGNvcmUvZXZhbHVhdGlvbnMvKicsXG4gICAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdDbG91ZFdhdGNoSW5kZXhQb2xpY3lTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfSU5ERVhfUE9MSUNZX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnYXdzL3NwYW5zJyxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdsb2ctZ3JvdXAnLFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICdhd3Mvc3BhbnM6KicsXG4gICAgICAgICAgICAgIGFybkZvcm1hdDogQXJuRm9ybWF0LkNPTE9OX1JFU09VUkNFX05BTUUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RhY2ssXG4gICAgICAgICAgKSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByb2xlLmFkZFRvUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6ICdCZWRyb2NrSW52b2tlU3RhdGVtZW50JyxcbiAgICAgICAgYWN0aW9uczogRVZBTFVBVElPTl9CRURST0NLX01PREVMX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBgYXJuOiR7QXdzLlBBUlRJVElPTn06YmVkcm9jazoqOjpmb3VuZGF0aW9uLW1vZGVsLypgLFxuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdiZWRyb2NrJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdpbmZlcmVuY2UtcHJvZmlsZScsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJyonLFxuICAgICAgICAgICAgICByZWdpb246ICcqJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiByb2xlO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFJ1bGVDb25maWcocHJvcHM6IE9ubGluZUV2YWx1YXRpb25Db25maWdQcm9wcyk6IGJlZHJvY2thZ2VudGNvcmUuQ2ZuT25saW5lRXZhbHVhdGlvbkNvbmZpZy5SdWxlUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBzYW1wbGluZ0NvbmZpZzoge1xuICAgICAgICBzYW1wbGluZ1BlcmNlbnRhZ2U6IHByb3BzLnNhbXBsaW5nUGVyY2VudGFnZSA/PyAxMCxcbiAgICAgIH0sXG4gICAgICBzZXNzaW9uQ29uZmlnOiB7XG4gICAgICAgIHNlc3Npb25UaW1lb3V0TWludXRlczogcHJvcHMuc2Vzc2lvblRpbWVvdXQ/LnRvTWludXRlcygpID8/IDE1LFxuICAgICAgfSxcbiAgICAgIC4uLihwcm9wcy5maWx0ZXJzICYmIHByb3BzLmZpbHRlcnMubGVuZ3RoID4gMCA/IHtcbiAgICAgICAgZmlsdGVyczogcHJvcHMuZmlsdGVycy5tYXAoKGYpID0+ICh7XG4gICAgICAgICAga2V5OiBmLmtleSxcbiAgICAgICAgICBvcGVyYXRvcjogZi5vcGVyYXRvci52YWx1ZSxcbiAgICAgICAgICB2YWx1ZTogZi52YWx1ZS5fYmluZCgpLFxuICAgICAgICB9KSksXG4gICAgICB9IDoge30pLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25saW5lLWV2YWx1YXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvbmxpbmUtZXZhbHVhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7Ozs7Ozs7Ozs7R0FXRztBQUVILDZDQUF5RDtBQUN6RCxxRUFBcUU7QUFDckUsMkNBQTJDO0FBQzNDLDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFJMUUscUVBQThGO0FBQzlGLG1DQU1pQjtBQUtqQiw2REFTOEI7QUE4QjlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQkc7SUFFVSxzQkFBc0I7NEJBRGxDLG9DQUFrQjs7OztzQkFDeUIsNkNBQW9CO3NDQUE1QixTQUFRLFdBQW9COzs7O1lBQWhFLDZLQXVXQzs7Ozs7UUF0V0Msc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FDMUMsNkRBQTZELENBQUM7UUFFaEU7Ozs7Ozs7V0FPRztRQUNJLE1BQU0sQ0FBQyw0QkFBNEIsQ0FDeEMsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLHdCQUFnQztZQUVoQyxNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixNQUFNLFNBQVMsR0FBRyxpQkFBRyxDQUFDLE1BQU0sQ0FDMUI7Z0JBQ0UsT0FBTyxFQUFFLG1CQUFtQjtnQkFDNUIsUUFBUSxFQUFFLDBCQUEwQjtnQkFDcEMsWUFBWSxFQUFFLHdCQUF3QjthQUN2QyxFQUNELEtBQUssQ0FDTixDQUFDO1lBRUYsT0FBTyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUM1RSx5QkFBeUIsRUFBRSxTQUFTO2dCQUNwQyx3QkFBd0IsRUFBRSx3QkFBd0I7Z0JBQ2xELDBCQUEwQixFQUFFLHdCQUF3QjthQUNyRCxDQUFDLENBQUM7U0FDSjtRQUVEOzs7Ozs7O1dBT0c7UUFDSSxNQUFNLENBQUMs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O3dCQUNqQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUc7d0JBQ1YsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSzt3QkFDMUIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFO3FCQUN2QixDQUFDLENBQUM7aUJBQ0osQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1IsQ0FBQztTQUNIOztZQXRXVSx1REFBc0I7Ozs7O0FBQXRCLHdEQUFzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlXG4gKiAgd2l0aCB0aGUgTGljZW5zZS4gQSBjb3B5IG9mIHRoZSBMaWNlbnNlIGlzIGxvY2F0ZWQgYXRcbiAqXG4gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBvciBpbiB0aGUgJ2xpY2Vuc2UnIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgZmlsZS4gVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFU1xuICogIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXG4gKiAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IEFybiwgQXJuRm9ybWF0LCBBd3MsIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgYmVkcm9ja2FnZW50Y29yZSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtYmVkcm9ja2FnZW50Y29yZSc7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBEYXRhU291cmNlQ29uZmlnIH0gZnJvbSAnLi9kYXRhLXNvdXJjZSc7XG5pbXBvcnQgdHlwZSB7IEV2YWx1YXRvclJlZmVyZW5jZSB9IGZyb20gJy4vZXZhbHVhdG9yJztcbmltcG9ydCB7IHR5cGUgSU9ubGluZUV2YWx1YXRpb25Db25maWcsIE9ubGluZUV2YWx1YXRpb25CYXNlIH0gZnJvbSAnLi9vbmxpbmUtZXZhbHVhdGlvbi1iYXNlJztcbmltcG9ydCB7XG4gIEVWQUxVQVRJT05fQkVEUk9DS19NT0RFTF9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0lOREVYX1BPTElDWV9QRVJNUyxcbiAgRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfREVTQ1JJQkVfUEVSTVMsXG4gIEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1FVRVJZX1BFUk1TLFxuICBFVkFMVUFUSU9OX0NMT1VEV0FUQ0hfTE9HU19XUklURV9QRVJNUyxcbn0gZnJvbSAnLi9wZXJtcyc7XG5pbXBvcnQge1xuICB0eXBlIE9ubGluZUV2YWx1YXRpb25CYXNlUHJvcHMsXG4gIHR5cGUgT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgdmFsaWRhdGVDb25maWdOYW1lLFxuICB2YWxpZGF0ZURlc2NyaXB0aW9uLFxuICB2YWxpZGF0ZUV2YWx1YXRvcnMsXG4gIHZhbGlkYXRlU2FtcGxpbmdQZXJjZW50YWdlLFxuICB2YWxpZGF0ZUZpbHRlcnMsXG4gIHZhbGlkYXRlU2Vzc2lvblRpbWVvdXQsXG4gIHZhbGlkYXRlRXZhbHVhdGlvblRhZ3MsXG4gIHRocm93SWZJbnZhbGlkLFxufSBmcm9tICcuL3ZhbGlkYXRpb24taGVscGVycyc7XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYW4gT25saW5lRXZhbHVhdGlvbkNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnUHJvcHMgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGV2YWx1YXRvcnMgdG8gYXBwbHkgZHVyaW5nIG9ubGluZSBldmFsdWF0aW9uLlxuICAgKlxuICAgKiBDYW4gaW5jbHVkZSBib3RoIGJ1aWx0LWluIGV2YWx1YXRvcnMgYW5kIGN1c3RvbSBldmFsdWF0b3JzLlxuICAgKlxuICAgKiBAbWluaW11bSAxXG4gICAqIEBtYXhpbXVtIDEwXG4gICAqL1xuICByZWFkb25seSBldmFsdWF0b3JzOiBFdmFsdWF0b3JSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIGRhdGEgc291cmNlIGNvbmZpZ3VyYXRpb24gdGhhdCBzcGVjaWZpZXMgd2hlcmUgdG8gcmVhZCBhZ2VudCB0cmFjZXMgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2U6IERhdGFTb3VyY2VDb25maWc7XG5cbiAgLyoqXG4gICAqIFRhZ3MgZm9yIHRoZSBvbmxpbmUgZXZhbHVhdGlvbiBjb25maWd1cmF0aW9uLlxuICAgKiBBIGxpc3Qgb2Yga2V5OnZhbHVlIHBhaXJzIG9mIHRhZ3MgdG8gYXBwbHkgdG8gdGhpcyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlc291cmNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIE9ubGluZSBldmFsdWF0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIEFtYXpvbiBCZWRyb2NrIEFnZW50Q29yZS5cbiAqXG4gKiBFbmFibGVzIGNvbnRpbnVvdXMgZXZhbHVhdGlvbiBvZiBhZ2VudCBwZXJmb3JtYW5jZSB1c2luZyBidWlsdC1pbiBvciBjdXN0b20gZXZhbHVhdG9ycy5cbiAqIFN1cHBvcnRzIENsb3VkV2F0Y2ggTG9ncyBhbmQgQWdlbnQgRW5kcG9pbnQgZGF0YSBzb3VyY2VzLlxuICpcbiAqIEByZXNvdXJjZSBBV1M6OkJlZHJvY2tBZ2VudENvcmU6Ok9ubGluZUV2YWx1YXRpb25Db25maWdcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQmFzaWMgdXNhZ2Ugd2l0aCBidWlsdC1pbiBldmFsdWF0b3JzXG4gKiBjb25zdCBldmFsdWF0aW9uID0gbmV3IGFnZW50Y29yZS5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnKHRoaXMsICdNeUV2YWx1YXRpb24nLCB7XG4gKiAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiAnbXlfZXZhbHVhdGlvbicsXG4gKiAgIGV2YWx1YXRvcnM6IFtcbiAqICAgICBhZ2VudGNvcmUuRXZhbHVhdG9yUmVmZXJlbmNlLmJ1aWx0aW4oYWdlbnRjb3JlLkJ1aWx0aW5FdmFsdWF0b3IuSEVMUEZVTE5FU1MpLFxuICogICAgIGFnZW50Y29yZS5FdmFsdWF0b3JSZWZlcmVuY2UuYnVpbHRpbihhZ2VudGNvcmUuQnVpbHRpbkV2YWx1YXRvci5DT1JSRUNUTkVTUyksXG4gKiAgIF0sXG4gKiAgIGRhdGFTb3VyY2U6IGFnZW50Y29yZS5EYXRhU291cmNlQ29uZmlnLmZyb21DbG91ZFdhdGNoTG9ncyh7XG4gKiAgICAgbG9nR3JvdXBOYW1lczogWycvYXdzL2JlZHJvY2stYWdlbnRjb3JlL215LWFnZW50J10sXG4gKiAgICAgc2VydmljZU5hbWVzOiBbJ215LWFnZW50LmRlZmF1bHQnXSxcbiAqICAgfSksXG4gKiB9KTtcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIE9ubGluZUV2YWx1YXRpb25Db25maWcgZXh0ZW5kcyBPbmxpbmVFdmFsdWF0aW9uQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPVxuICAgICdAYXdzLWNkay5hd3MtYmVkcm9jay1hZ2VudGNvcmUtYWxwaGEuT25saW5lRXZhbHVhdGlvbkNvbmZpZyc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIGJ5IGl0cyBJRC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgLSBDb25zdHJ1Y3QgaWRlbnRpZmllclxuICAgKiBAcGFyYW0gb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkIC0gVGhlIGNvbmZpZ3VyYXRpb24gSUQgdG8gaW1wb3J0XG4gICAqIEByZXR1cm5zIEFuIElPbmxpbmVFdmFsdWF0aW9uQ29uZmlnIHJlZmVyZW5jZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tT25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQ6IHN0cmluZyxcbiAgKTogSU9ubGluZUV2YWx1YXRpb25Db25maWcge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGNvbnN0IGNvbmZpZ0FybiA9IEFybi5mb3JtYXQoXG4gICAgICB7XG4gICAgICAgIHNlcnZpY2U6ICdiZWRyb2NrLWFnZW50Y29yZScsXG4gICAgICAgIHJlc291cmNlOiAnb25saW5lLWV2YWx1YXRpb24tY29uZmlnJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQsXG4gICAgICB9LFxuICAgICAgc3RhY2ssXG4gICAgKTtcblxuICAgIHJldHVybiBPbmxpbmVFdmFsdWF0aW9uQ29uZmlnLmZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXR0cmlidXRlcyhzY29wZSwgaWQsIHtcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IGNvbmZpZ0FybixcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdJZDogb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWU6IG9ubGluZUV2YWx1YXRpb25Db25maWdJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgT25saW5lRXZhbHVhdGlvbkNvbmZpZyBieSBpdHMgQVJOLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuIC0gVGhlIGNvbmZpZ3VyYXRpb24gQVJOIHRvIGltcG9ydFxuICAgKiBAcmV0dXJucyBBbiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyByZWZlcmVuY2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbU9ubGluZUV2YWx1YXRpb25Db25maWdBcm4oXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdBcm46IHN0cmluZyxcbiAgKTogSU9ubGluZUV2YWx1YXRpb25Db25maWcge1xuICAgIGNvbnN0IGFyblBhcnRzID0gQXJuLnNwbGl0KG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4sIEFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FKTtcbiAgICBjb25zdCBjb25maWdJZCA9IGFyblBhcnRzLnJlc291cmNlTmFtZSE7XG5cbiAgICByZXR1cm4gT25saW5lRXZhbHVhdGlvbkNvbmZpZy5mcm9tT25saW5lRXZhbHVhdGlvbkNvbmZpZ0F0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7XG4gICAgICBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuOiBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuLFxuICAgICAgb25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkOiBjb25maWdJZCxcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiBjb25maWdJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gZXhpc3RpbmcgT25saW5lRXZhbHVhdGlvbkNvbmZpZyBmcm9tIGl0cyBhdHRyaWJ1dGVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCAtIENvbnN0cnVjdCBpZGVudGlmaWVyXG4gICAqIEBwYXJhbSBhdHRycyAtIFRoZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXNcbiAgICogQHJldHVybnMgQW4gSU9ubGluZUV2YWx1YXRpb25Db25maWcgcmVmZXJlbmNlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21PbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IE9ubGluZUV2YWx1YXRpb25Db25maWdBdHRyaWJ1dGVzLFxuICApOiBJT25saW5lRXZhbHVhdGlvbkNvbmZpZyB7XG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgT25saW5lRXZhbHVhdGlvbkJhc2Uge1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdBcm4gPSBhdHRycy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdJZCA9IGF0dHJzLm9ubGluZUV2YWx1YXRpb25Db25maWdJZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZSA9IGF0dHJzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGUgPSBhdHRycy5leGVjdXRpb25Sb2xlQXJuXG4gICAgICAgID8gaWFtLlJvbGUuZnJvbVJvbGVBcm4oc2NvcGUsIGAke2lkfVJvbGVgLCBhdHRycy5leGVjdXRpb25Sb2xlQXJuKVxuICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzdGF0dXMgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uU3RhdHVzID0gdW5kZWZpbmVkO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNyZWF0ZWRBdCA9IHVuZGVmaW5lZDtcbiAgICAgIHB1YmxpYyByZWFkb25seSB1cGRhdGVkQXQgPSB1bmRlZmluZWQ7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZ3JhbnRQcmluY2lwYWw6IGlhbS5JUHJpbmNpcGFsO1xuXG4gICAgICBjb25zdHJ1Y3RvcihzOiBDb25zdHJ1Y3QsIGk6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzLCBpKTtcbiAgICAgICAgdGhpcy5ncmFudFByaW5jaXBhbCA9IHRoaXMuZXhlY3V0aW9uUm9sZSA/PyBuZXcgaWFtLlVua25vd25QcmluY2lwYWwoeyByZXNvdXJjZTogdGhpcyB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIG9ubGluZSBldmFsdWF0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBvbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgb25saW5lIGV2YWx1YXRpb24gY29uZmlndXJhdGlvbi5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBJQU0gZXhlY3V0aW9uIHJvbGUgZm9yIHRoZSBldmFsdWF0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBsaWZlY3ljbGUgc3RhdHVzIG9mIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhlY3V0aW9uIHN0YXR1cyBvZiB0aGUgZXZhbHVhdGlvbiAoRU5BQkxFRCBvciBESVNBQkxFRCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZXhlY3V0aW9uU3RhdHVzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZXN0YW1wIHdoZW4gdGhlIGNvbmZpZ3VyYXRpb24gd2FzIGNyZWF0ZWQuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjcmVhdGVkQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lc3RhbXAgd2hlbiB0aGUgY29uZmlndXJhdGlvbiB3YXMgbGFzdCB1cGRhdGVkLlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBkYXRlZEF0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcHJpbmNpcGFsIHRvIGdyYW50IHBlcm1pc3Npb25zIHRvLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyYW50UHJpbmNpcGFsOiBpYW0uSVByaW5jaXBhbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogT25saW5lRXZhbHVhdGlvbkNvbmZpZ1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6IHByb3BzLm9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lLFxuICAgIH0pO1xuXG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVDb25maWdOYW1lLCBwcm9wcy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnTmFtZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVEZXNjcmlwdGlvbiwgcHJvcHMuZGVzY3JpcHRpb24sIHRoaXMpO1xuICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdG9ycywgcHJvcHMuZXZhbHVhdG9ycywgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVTYW1wbGluZ1BlcmNlbnRhZ2UsIHByb3BzLnNhbXBsaW5nUGVyY2VudGFnZSwgdGhpcyk7XG4gICAgdGhyb3dJZkludmFsaWQodmFsaWRhdGVGaWx0ZXJzLCBwcm9wcy5maWx0ZXJzLCB0aGlzKTtcbiAgICB0aHJvd0lmSW52YWxpZCh2YWxpZGF0ZVNlc3Npb25UaW1lb3V0LCBwcm9wcy5zZXNzaW9uVGltZW91dD8udG9NaW51dGVzKCksIHRoaXMpO1xuXG4gICAgaWYgKHByb3BzLnRhZ3MpIHtcbiAgICAgIHRocm93SWZJbnZhbGlkKHZhbGlkYXRlRXZhbHVhdGlvblRhZ3MsIHByb3BzLnRhZ3MsIHRoaXMpO1xuICAgIH1cblxuICAgIHRoaXMub25saW5lRXZhbHVhdGlvbkNvbmZpZ05hbWUgPSB0aGlzLnBoeXNpY2FsTmFtZTtcbiAgICB0aGlzLmV4ZWN1dGlvblJvbGUgPSBwcm9wcy5leGVjdXRpb25Sb2xlID8/IHRoaXMuY3JlYXRlRXhlY3V0aW9uUm9sZShwcm9wcy5kYXRhU291cmNlKTtcbiAgICB0aGlzLmdyYW50UHJpbmNpcGFsID0gdGhpcy5leGVjdXRpb25Sb2xlO1xuXG4gICAgY29uc3QgcmVzb3VyY2UgPSBuZXcgYmVkcm9ja2FnZW50Y29yZS5DZm5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG9ubGluZUV2YWx1YXRpb25Db25maWdOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGV2YWx1YXRvcnM6IHByb3BzLmV2YWx1YXRvcnMubWFwKChlKSA9PiBlLmJpbmQoKSksXG4gICAgICBkYXRhU291cmNlQ29uZmlnOiBwcm9wcy5kYXRhU291cmNlLmJpbmQoKSxcbiAgICAgIGV2YWx1YXRpb25FeGVjdXRpb25Sb2xlQXJuOiB0aGlzLmV4ZWN1dGlvblJvbGUhLnJvbGVBcm4sXG4gICAgICBydWxlOiB0aGlzLmJ1aWxkUnVsZUNvbmZpZyhwcm9wcyksXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgICBleGVjdXRpb25TdGF0dXM6IHByb3BzLmV4ZWN1dGlvblN0YXR1cz8udmFsdWUsXG4gICAgICB0YWdzOiBwcm9wcy50YWdzICYmIE9iamVjdC5rZXlzKHByb3BzLnRhZ3MpLmxlbmd0aCA+IDBcbiAgICAgICAgPyBPYmplY3QuZW50cmllcyhwcm9wcy50YWdzKS5tYXAoKFtrZXksIHZhbHVlXSkgPT4gKHsga2V5LCB2YWx1ZSB9KSlcbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSk7XG5cbiAgICAvLyBFbnN1cmUgdGhlIGV4ZWN1dGlvbiByb2xlJ3MgcG9saWNpZXMgYXJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBMMSByZXNvdXJjZSxcbiAgICAvLyBiZWNhdXNlIEJlZHJvY2tBZ2VudENvcmUgdmFsaWRhdGVzIHJvbGUgcGVybWlzc2lvbnMgYXQgY3JlYXRlIHRpbWUuXG4gICAgaWYgKHRoaXMuZXhlY3V0aW9uUm9sZSBpbnN0YW5jZW9mIGlhbS5Sb2xlICYmIHRoaXMuZXhlY3V0aW9uUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCkge1xuICAgICAgcmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMuZXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuXG4gICAgdGhpcy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnQXJuID0gcmVzb3VyY2UuYXR0ck9ubGluZUV2YWx1YXRpb25Db25maWdBcm47XG4gICAgdGhpcy5vbmxpbmVFdmFsdWF0aW9uQ29uZmlnSWQgPSByZXNvdXJjZS5hdHRyT25saW5lRXZhbHVhdGlvbkNvbmZpZ0lkO1xuICAgIHRoaXMuc3RhdHVzID0gcmVzb3VyY2UuYXR0clN0YXR1cztcbiAgICB0aGlzLmV4ZWN1dGlvblN0YXR1cyA9IHJlc291cmNlLmV4ZWN1dGlvblN0YXR1cztcbiAgICB0aGlzLmNyZWF0ZWRBdCA9IHJlc291cmNlLmF0dHJDcmVhdGVkQXQ7XG4gICAgdGhpcy51cGRhdGVkQXQgPSByZXNvdXJjZS5hdHRyVXBkYXRlZEF0O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVFeGVjdXRpb25Sb2xlKGRhdGFTb3VyY2U6IERhdGFTb3VyY2VDb25maWcpOiBpYW0uSVJvbGUge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG5cbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdFeGVjdXRpb25Sb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ2JlZHJvY2stYWdlbnRjb3JlLmFtYXpvbmF3cy5jb20nLCB7XG4gICAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgICBTdHJpbmdFcXVhbHM6IHtcbiAgICAgICAgICAgICdhd3M6U291cmNlQWNjb3VudCc6IHN0YWNrLmFjY291bnQsXG4gICAgICAgICAgICAnYXdzOlJlc291cmNlQWNjb3VudCc6IHN0YWNrLmFjY291bnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBBcm5MaWtlOiB7XG4gICAgICAgICAgICAnYXdzOlNvdXJjZUFybic6IFtcbiAgICAgICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6ICdldmFsdWF0b3InLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzZXJ2aWNlOiAnYmVkcm9jay1hZ2VudGNvcmUnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6ICdvbmxpbmUtZXZhbHVhdGlvbi1jb25maWcnLFxuICAgICAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pLFxuICAgICAgZGVzY3JpcHRpb246ICdFeGVjdXRpb24gcm9sZSBmb3IgQmVkcm9jayBBZ2VudENvcmUgT25saW5lIEV2YWx1YXRpb24nLFxuICAgIH0pO1xuXG4gICAgLy8gVGhlIHNlcnZpY2UgcmVxdWlyZXMgcXVlcnkgYWNjZXNzIHRvIHVzZXItc3BlY2lmaWVkIGxvZyBncm91cHMgQU5EIHRoZVxuICAgIC8vIGltcGxpY2l0IGF3cy9zcGFucyBsb2cgZ3JvdXAgaXQgdXNlcyBpbnRlcm5hbGx5IGZvciB0cmFjZSBkYXRhLlxuICAgIGNvbnN0IGxvZ0dyb3VwQXJucyA9IFtcbiAgICAgIC4uLmRhdGFTb3VyY2UuY2xvdWRXYXRjaExvZ3NDb25maWcubG9nR3JvdXBOYW1lcyxcbiAgICAgICdhd3Mvc3BhbnMnLFxuICAgIF0uZmxhdE1hcChcbiAgICAgIChuYW1lKSA9PiBbXG4gICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgcmVzb3VyY2U6ICdsb2ctZ3JvdXAnLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBuYW1lLFxuICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YWNrLFxuICAgICAgICApLFxuICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogYCR7bmFtZX06KmAsXG4gICAgICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhY2ssXG4gICAgICAgICksXG4gICAgICBdLFxuICAgICk7XG5cbiAgICAvLyBsb2dzOkRlc2NyaWJlTG9nR3JvdXBzIGRvZXMgbm90IHN1cHBvcnQgcmVzb3VyY2UtbGV2ZWwgcGVybWlzc2lvbnMuXG4gICAgLy8gVGhlIHJlc291cmNlIG11c3QgYmUgJyonIHBlciB0aGUgSUFNIHNlcnZpY2UgYXV0aG9yaXphdGlvbiByZWZlcmVuY2UuXG4gICAgLy8gU2VlOiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VydmljZS1hdXRob3JpemF0aW9uL2xhdGVzdC9yZWZlcmVuY2UvbGlzdF9hbWF6b25jbG91ZHdhdGNobG9ncy5odG1sXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiAnQ2xvdWRXYXRjaExvZ0Rlc2NyaWJlU3RhdGVtZW50JyxcbiAgICAgICAgYWN0aW9uczogRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfREVTQ1JJQkVfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcm9sZS5hZGRUb1BvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiAnQ2xvdWRXYXRjaExvZ1F1ZXJ5U3RhdGVtZW50JyxcbiAgICAgICAgYWN0aW9uczogRVZBTFVBVElPTl9DTE9VRFdBVENIX0xPR1NfUVVFUllfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogbG9nR3JvdXBBcm5zLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hMb2dXcml0ZVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9MT0dTX1dSSVRFX1BFUk1TLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBBcm4uZm9ybWF0KFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBzZXJ2aWNlOiAnbG9ncycsXG4gICAgICAgICAgICAgIHJlc291cmNlOiAnbG9nLWdyb3VwJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnL2F3cy9iZWRyb2NrLWFnZW50Y29yZS9ldmFsdWF0aW9ucy8qJyxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0Nsb3VkV2F0Y2hJbmRleFBvbGljeVN0YXRlbWVudCcsXG4gICAgICAgIGFjdGlvbnM6IEVWQUxVQVRJT05fQ0xPVURXQVRDSF9JTkRFWF9QT0xJQ1lfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIEFybi5mb3JtYXQoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNlcnZpY2U6ICdsb2dzJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2U6ICdsb2ctZ3JvdXAnLFxuICAgICAgICAgICAgICByZXNvdXJjZU5hbWU6ICdhd3Mvc3BhbnMnLFxuICAgICAgICAgICAgICBhcm5Gb3JtYXQ6IEFybkZvcm1hdC5DT0xPTl9SRVNPVVJDRV9OQU1FLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICksXG4gICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2xvZ3MnLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJ2xvZy1ncm91cCcsXG4gICAgICAgICAgICAgIHJlc291cmNlTmFtZTogJ2F3cy9zcGFuczoqJyxcbiAgICAgICAgICAgICAgYXJuRm9ybWF0OiBBcm5Gb3JtYXQuQ09MT05fUkVTT1VSQ0VfTkFNRSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdGFjayxcbiAgICAgICAgICApLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJvbGUuYWRkVG9Qb2xpY3koXG4gICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogJ0JlZHJvY2tJbnZva2VTdGF0ZW1lbnQnLFxuICAgICAgICBhY3Rpb25zOiBFVkFMVUFUSU9OX0JFRFJPQ0tfTU9ERUxfUEVSTVMsXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIGBhcm46JHtBd3MuUEFSVElUSU9OfTpiZWRyb2NrOio6OmZvdW5kYXRpb24tbW9kZWwvKmAsXG4gICAgICAgICAgQXJuLmZvcm1hdChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgc2VydmljZTogJ2JlZHJvY2snLFxuICAgICAgICAgICAgICByZXNvdXJjZTogJ2luZmVyZW5jZS1wcm9maWxlJyxcbiAgICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiAnKicsXG4gICAgICAgICAgICAgIHJlZ2lvbjogJyonLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0YWNrLFxuICAgICAgICAgICksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHJvbGU7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUnVsZUNvbmZpZyhwcm9wczogT25saW5lRXZhbHVhdGlvbkNvbmZpZ1Byb3BzKTogYmVkcm9ja2FnZW50Y29yZS5DZm5PbmxpbmVFdmFsdWF0aW9uQ29uZmlnLlJ1bGVQcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNhbXBsaW5nQ29uZmlnOiB7XG4gICAgICAgIHNhbXBsaW5nUGVyY2VudGFnZTogcHJvcHMuc2FtcGxpbmdQZXJjZW50YWdlID8/IDEwLFxuICAgICAgfSxcbiAgICAgIHNlc3Npb25Db25maWc6IHtcbiAgICAgICAgc2Vzc2lvblRpbWVvdXRNaW51dGVzOiBwcm9wcy5zZXNzaW9uVGltZW91dD8udG9NaW51dGVzKCkgPz8gMTUsXG4gICAgICB9LFxuICAgICAgLi4uKHByb3BzLmZpbHRlcnMgJiYgcHJvcHMuZmlsdGVycy5sZW5ndGggPiAwID8ge1xuICAgICAgICBmaWx0ZXJzOiBwcm9wcy5maWx0ZXJzLm1hcCgoZikgPT4gKHtcbiAgICAgICAgICBrZXk6IGYua2V5LFxuICAgICAgICAgIG9wZXJhdG9yOiBmLm9wZXJhdG9yLnZhbHVlLFxuICAgICAgICAgIHZhbHVlOiBmLnZhbHVlLl9iaW5kKCksXG4gICAgICAgIH0pKSxcbiAgICAgIH0gOiB7fSksXG4gICAgfTtcbiAgfVxufVxuIl19
|