@rio-cloud/cdk-v2-constructs 6.3.2 → 6.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -4331,8 +4331,8 @@
4331
4331
  "stability": "stable"
4332
4332
  },
4333
4333
  "locationInModule": {
4334
- "filename": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
4335
- "line": 61
4334
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
4335
+ "line": 77
4336
4336
  },
4337
4337
  "parameters": [
4338
4338
  {
@@ -4357,11 +4357,29 @@
4357
4357
  },
4358
4358
  "kind": "class",
4359
4359
  "locationInModule": {
4360
- "filename": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
4361
- "line": 60
4360
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
4361
+ "line": 73
4362
4362
  },
4363
4363
  "name": "AwsEcsAbruptlyStoppedMonitor",
4364
- "symbolId": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor:AwsEcsAbruptlyStoppedMonitor"
4364
+ "properties": [
4365
+ {
4366
+ "const": true,
4367
+ "docs": {
4368
+ "stability": "stable"
4369
+ },
4370
+ "immutable": true,
4371
+ "locationInModule": {
4372
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
4373
+ "line": 75
4374
+ },
4375
+ "name": "DEFAULT_LOG_FORWARDER_ARN",
4376
+ "static": true,
4377
+ "type": {
4378
+ "primitive": "string"
4379
+ }
4380
+ }
4381
+ ],
4382
+ "symbolId": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor:AwsEcsAbruptlyStoppedMonitor"
4365
4383
  },
4366
4384
  "@rio-cloud/cdk-v2-constructs.BackupPolicy": {
4367
4385
  "assembly": "@rio-cloud/cdk-v2-constructs",
@@ -5936,8 +5954,8 @@
5936
5954
  "fqn": "@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps",
5937
5955
  "kind": "interface",
5938
5956
  "locationInModule": {
5939
- "filename": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
5940
- "line": 5
5957
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
5958
+ "line": 8
5941
5959
  },
5942
5960
  "name": "EcsAbruptlyStoppedMonitorProps",
5943
5961
  "properties": [
@@ -5950,8 +5968,8 @@
5950
5968
  },
5951
5969
  "immutable": true,
5952
5970
  "locationInModule": {
5953
- "filename": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
5954
- "line": 12
5971
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
5972
+ "line": 15
5955
5973
  },
5956
5974
  "name": "serviceName",
5957
5975
  "type": {
@@ -5967,8 +5985,8 @@
5967
5985
  },
5968
5986
  "immutable": true,
5969
5987
  "locationInModule": {
5970
- "filename": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
5971
- "line": 36
5988
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
5989
+ "line": 39
5972
5990
  },
5973
5991
  "name": "clusterArn",
5974
5992
  "optional": true,
@@ -5976,6 +5994,25 @@
5976
5994
  "primitive": "string"
5977
5995
  }
5978
5996
  },
5997
+ {
5998
+ "abstract": true,
5999
+ "docs": {
6000
+ "default": "{@link AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN }",
6001
+ "remarks": "Currently, two values are know to be exported by the account modules:\n* datadog-forwarder-ForwarderArn: exported by the 3rd party account modules [Datadog-forwarder](https://github.com/DataDog/datadog-serverless-functions/releases)\n* custom-resource-datadog-logforwarder-function-arn: exported by the deprecated custom account module [datadog-integration](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse).",
6002
+ "stability": "stable",
6003
+ "summary": "ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog."
6004
+ },
6005
+ "immutable": true,
6006
+ "locationInModule": {
6007
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
6008
+ "line": 49
6009
+ },
6010
+ "name": "datadogLogForwarderLambdaArn",
6011
+ "optional": true,
6012
+ "type": {
6013
+ "primitive": "string"
6014
+ }
6015
+ },
5979
6016
  {
5980
6017
  "abstract": true,
5981
6018
  "docs": {
@@ -5986,8 +6023,8 @@
5986
6023
  },
5987
6024
  "immutable": true,
5988
6025
  "locationInModule": {
5989
- "filename": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
5990
- "line": 22
6026
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
6027
+ "line": 25
5991
6028
  },
5992
6029
  "name": "notification",
5993
6030
  "optional": true,
@@ -6004,8 +6041,8 @@
6004
6041
  },
6005
6042
  "immutable": true,
6006
6043
  "locationInModule": {
6007
- "filename": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
6008
- "line": 30
6044
+ "filename": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor.ts",
6045
+ "line": 33
6009
6046
  },
6010
6047
  "name": "priority",
6011
6048
  "optional": true,
@@ -6014,7 +6051,7 @@
6014
6051
  }
6015
6052
  }
6016
6053
  ],
6017
- "symbolId": "src/contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor:EcsAbruptlyStoppedMonitorProps"
6054
+ "symbolId": "src/contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor/aws-ecs-abruptly-stopped-monitor:EcsAbruptlyStoppedMonitorProps"
6018
6055
  },
6019
6056
  "@rio-cloud/cdk-v2-constructs.FargateTaskDefinitionProps": {
6020
6057
  "assembly": "@rio-cloud/cdk-v2-constructs",
@@ -16738,5 +16775,5 @@
16738
16775
  }
16739
16776
  },
16740
16777
  "version": "0.0.0",
16741
- "fingerprint": "7aOJX3OOcV0Z+rzppHBCsMo8MLH7Jc1xPvW0NMDaIf4="
16778
+ "fingerprint": "/P1ERhP+AKj4S9Pvf5/OQ+hLGUcS5iNPzBDZhUUSJCM="
16742
16779
  }
package/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [6.4.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.4.0&sourceBranch=refs%2Ftags%2Fv6.4.1) (2024-08-06)
6
+
7
+ ## [6.4.0](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.3.2&sourceBranch=refs%2Ftags%2Fv6.4.0) (2024-08-02)
8
+
9
+
10
+ ### Features
11
+
12
+ * Allow the configuration of the datadog log forwarder ([1a938d6](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/1a938d637f337e6f9e6811cb8dc06b3a6852399c))
13
+ * Allow the configuration of the datadog log forwarder ([031b00d](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/031b00d96b36840bd7789fae9847f7f1998afcf1))
14
+ * Allow the configuration of the datadog log forwarder ([301a9e7](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/commits/301a9e783572476a403a79236d9589de6f71a208))
15
+
5
16
  ## [6.3.2](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.3.1&sourceBranch=refs%2Ftags%2Fv6.3.2) (2024-08-01)
6
17
 
7
18
  ## [6.3.1](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.3.0&sourceBranch=refs%2Ftags%2Fv6.3.1) (2024-08-01)
package/docs/API.md CHANGED
@@ -737,6 +737,23 @@ The tree node.
737
737
 
738
738
  ---
739
739
 
740
+ #### Constants <a name="Constants" id="Constants"></a>
741
+
742
+ | **Name** | **Type** | **Description** |
743
+ | --- | --- | --- |
744
+ | <code><a href="#@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor.property.DEFAULT_LOG_FORWARDER_ARN">DEFAULT_LOG_FORWARDER_ARN</a></code> | <code>string</code> | *No description.* |
745
+
746
+ ---
747
+
748
+ ##### `DEFAULT_LOG_FORWARDER_ARN`<sup>Required</sup> <a name="DEFAULT_LOG_FORWARDER_ARN" id="@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor.property.DEFAULT_LOG_FORWARDER_ARN"></a>
749
+
750
+ ```typescript
751
+ public readonly DEFAULT_LOG_FORWARDER_ARN: string;
752
+ ```
753
+
754
+ - *Type:* string
755
+
756
+ ---
740
757
 
741
758
  ### Claidometer <a name="Claidometer" id="@rio-cloud/cdk-v2-constructs.Claidometer"></a>
742
759
 
@@ -9693,6 +9710,7 @@ const ecsAbruptlyStoppedMonitorProps: EcsAbruptlyStoppedMonitorProps = { ... }
9693
9710
  | --- | --- | --- |
9694
9711
  | <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.serviceName">serviceName</a></code> | <code>string</code> | The name of the service to which the monitor belongs. |
9695
9712
  | <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.clusterArn">clusterArn</a></code> | <code>string</code> | ARN of the cluster that should be monitored, consuming only ECS events belonging to the cluster. |
9713
+ | <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.datadogLogForwarderLambdaArn">datadogLogForwarderLambdaArn</a></code> | <code>string</code> | ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog. |
9696
9714
  | <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.notification">notification</a></code> | <code>@rio-cloud/cdk-v2-constructs.datadogv2.INotification</code> | To explicitly disable notifications use {@link NoNotification }. |
9697
9715
  | <code><a href="#@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.priority">priority</a></code> | <code>number</code> | The alert priority of the monitor. |
9698
9716
 
@@ -9726,6 +9744,23 @@ If no cluster is provided, the monitor will consume ECS events for all clusters
9726
9744
 
9727
9745
  ---
9728
9746
 
9747
+ ##### `datadogLogForwarderLambdaArn`<sup>Optional</sup> <a name="datadogLogForwarderLambdaArn" id="@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.datadogLogForwarderLambdaArn"></a>
9748
+
9749
+ ```typescript
9750
+ public readonly datadogLogForwarderLambdaArn: string;
9751
+ ```
9752
+
9753
+ - *Type:* string
9754
+ - *Default:* {@link AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN }
9755
+
9756
+ ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog.
9757
+
9758
+ Currently, two values are know to be exported by the account modules:
9759
+ * datadog-forwarder-ForwarderArn: exported by the 3rd party account modules [Datadog-forwarder](https://github.com/DataDog/datadog-serverless-functions/releases)
9760
+ * custom-resource-datadog-logforwarder-function-arn: exported by the deprecated custom account module [datadog-integration](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse).
9761
+
9762
+ ---
9763
+
9729
9764
  ##### `notification`<sup>Optional</sup> <a name="notification" id="@rio-cloud/cdk-v2-constructs.EcsAbruptlyStoppedMonitorProps.property.notification"></a>
9730
9765
 
9731
9766
  ```typescript
@@ -196,7 +196,7 @@ class RunnerRoles extends constructs_1.Construct {
196
196
  ],
197
197
  Effect: 'Allow',
198
198
  Resource: [
199
- `${props.env.account}.dkr.ecr.${props.env.region}.amazonaws.com/*`,
199
+ `arn:aws:ecr:${props.env.region}:${props.env.account}:repository/*`,
200
200
  ],
201
201
  },
202
202
  ],
@@ -251,6 +251,7 @@ class RunnerRoles extends constructs_1.Construct {
251
251
  'cloudformation:DescribeStackEvents',
252
252
  'cloudformation:DeleteChangeSet',
253
253
  'cloudformation:GetTemplate',
254
+ 'cloudformation:ValidateTemplate',
254
255
  ],
255
256
  Resource: [
256
257
  `arn:aws:cloudformation:${props.env.region}:${props.env.account}:stack/*`,
@@ -349,4 +350,4 @@ class RunnerRoles extends constructs_1.Construct {
349
350
  exports.RunnerRoles = RunnerRoles;
350
351
  _a = JSII_RTTI_SYMBOL_1;
351
352
  RunnerRoles[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.RunnerRoles", version: "0.0.0" };
352
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLXJvbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9ydW5uZXItcm9sZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBZ0U7QUFDaEUsaURBQXNFO0FBQ3RFLGlEQU82QjtBQUM3QiwrQ0FBNEM7QUFDNUMsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBMkQ7QUFNM0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFFeEMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxvQkFBb0IsR0FBRyxpQ0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE1BQU0saUJBQWlCLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRSxNQUFNLG1CQUFtQixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ2pFLElBQUksRUFDSixxQkFBcUIsRUFDckIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLDBCQUEwQixHQUM5Qix5QkFBZSxDQUFDLDZCQUE2QixDQUMzQyxJQUFJLEVBQ0osNEJBQTRCLEVBQzVCO1lBQ0UsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUNGLENBQUM7UUFDSixNQUFNLGlCQUFpQixHQUFHLGVBQU0sQ0FBQyxjQUFjLENBQzdDLElBQUksRUFDSixtQkFBbUIsRUFDbkIsMEJBQTBCLENBQUMsV0FBVyxDQUN2QyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FDakUsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLGFBQWEsRUFBRSx5Q0FBeUM7U0FDekQsQ0FDRixDQUFDO1FBQ0YsTUFBTSxXQUFXLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FDL0QsSUFBSSxFQUNKLGtCQUFrQixFQUNsQjtZQUNFLGFBQWEsRUFBRSxzQ0FBc0M7U0FDdEQsQ0FDRixDQUFDO1FBRUYsTUFBTSxzQkFBc0IsR0FBRyx1QkFBYSxDQUFDLG9CQUFvQixDQUMvRCxJQUFJLEVBQ0osd0JBQXdCLEVBQ3hCLGdCQUFFLENBQUMsV0FBVyxDQUFDLDhCQUE4QixDQUFDLENBQy9DLENBQUM7UUFFRixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksY0FBSSxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUN4RCxTQUFTLEVBQUUsSUFBSSwwQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDeEQsY0FBYyxFQUFFO2dCQUNkLGNBQWMsRUFBRSx3QkFBYyxDQUFDLFFBQVEsQ0FBQztvQkFDdEMsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxNQUFNLEVBQUUsT0FBTzs0QkFDZixNQUFNLEVBQUUsQ0FBQyxZQUFZLEVBQUUsZUFBZSxFQUFFLHNCQUFzQixDQUFDOzRCQUMvRCxRQUFRLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQzt5QkFDeEM7d0JBQ0Q7NEJBQ0UsR0FBRyxFQUFFLFlBQVk7NEJBQ2pCLE1BQU0sRUFBRSxPQUFPOzRCQUNmLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQzs0QkFDMUMsUUFBUSxFQUFFO2dDQUNSLHNDQUFzQztnQ0FDdEMsaURBQWlEOzZCQUNsRDt5QkFDRjt3QkFDRDs0QkFDRSxHQUFHLEVBQUUsZUFBZTs0QkFDcEIsTUFBTSxFQUFFLE9BQU87NEJBQ2YsTUFBTSxFQUFFO2dDQUNOLGlDQUFpQztnQ0FDakMsbUJBQW1CO2dDQUNuQixvQkFBb0I7Z0NBQ3BCLDBCQUEwQjtnQ0FDMUIsNEJBQTRCOzZCQUM3Qjs0QkFDRCxRQUFRLEVBQUU7Z0NBQ1IsZUFBZSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sZUFBZTs2QkFDcEU7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBd0IsQ0FBQyxpQkFBaUIsQ0FDbEUsbUJBQW1CLENBQ3BCLENBQUM7UUFDRixtQkFBbUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELDBCQUEwQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsaUJBQWlCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN0RCxvQkFBb0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsYUFBYSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDN0MsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDM0MseUNBQStCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUvRCxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBSSxDQUNwQyxJQUFJLEVBQ0osZ0NBQWdDLEVBQ2hDO1lBQ0UsUUFBUSxFQUFFLHNDQUFzQztZQUNoRCxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsY0FBYyxFQUFFO2dCQUNkLHFCQUFxQixFQUFFLHdCQUFjLENBQUMsUUFBUSxDQUFDO29CQUM3QyxPQUFPLEVBQUUsWUFBWTtvQkFDckIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE1BQU0sRUFBRSxPQUFPOzRCQUNmLE1BQU0sRUFBRTtnQ0FDTixXQUFXO2dDQUNYLGtCQUFrQjtnQ0FDbEIsZUFBZTtnQ0FDZixlQUFlO2dDQUNmLFVBQVU7Z0NBQ1YsY0FBYztnQ0FDZCx1QkFBdUI7Z0NBQ3ZCLHVCQUF1QjtnQ0FDdkIscUJBQXFCO2dDQUNyQiw0QkFBNEI7NkJBQzdCOzRCQUNELFFBQVEsRUFBRSxDQUFDLGdCQUFnQixDQUFDO3lCQUM3Qjt3QkFDRDs0QkFDRSxNQUFNLEVBQUU7Z0NBQ04sd0JBQXdCO2dDQUN4QixrQkFBa0I7Z0NBQ2xCLHlCQUF5QjtnQ0FDekIsbUJBQW1CO2dDQUNuQix5QkFBeUI7NkJBQzFCOzRCQUNELE1BQU0sRUFBRSxPQUFPOzRCQUNmLFFBQVEsRUFBRTtnQ0FDUixlQUFlLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxxQkFBcUI7Z0NBQ3pFLGVBQWUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLHFCQUFxQjs2QkFDMUU7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FDRixDQUFDO1FBQ0QscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQXdCLENBQUMsaUJBQWlCLENBQ3BFLGdDQUFnQyxDQUNqQyxDQUFDO1FBRUYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7WUFDeEUsUUFBUSxFQUFFLDZDQUE2QztZQUN2RCxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsY0FBYyxFQUFFO2dCQUNkLDBCQUEwQixFQUFFLHdCQUFjLENBQUMsUUFBUSxDQUFDO29CQUNsRCxPQUFPLEVBQUUsWUFBWTtvQkFDckIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE1BQU0sRUFBRTtnQ0FDTix3QkFBd0I7Z0NBQ3hCLGtCQUFrQjtnQ0FDbEIseUJBQXlCO2dDQUN6QixtQkFBbUI7Z0NBQ25CLHlCQUF5Qjs2QkFDMUI7NEJBQ0QsTUFBTSxFQUFFLE9BQU87NEJBQ2YsUUFBUSxFQUFFO2dDQUNSLGVBQWUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLHFCQUFxQjtnQ0FDekUsZUFBZSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8scUJBQXFCOzZCQUMxRTt5QkFDRjtxQkFDRjtpQkFDRixDQUFDO2dCQUNGLDBCQUEwQixFQUFFLHdCQUFjLENBQUMsUUFBUSxDQUFDO29CQUNsRCxPQUFPLEVBQUUsWUFBWTtvQkFDckIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE1BQU0sRUFBRTtnQ0FDTiwrQkFBK0I7Z0NBQy9CLCtCQUErQjtnQ0FDL0Isa0NBQWtDO2dDQUNsQyxxQ0FBcUM7NkJBQ3RDOzRCQUNELE1BQU0sRUFBRSxPQUFPOzRCQUNmLFFBQVEsRUFBRTtnQ0FDUiwwQkFBMEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLG9EQUFvRDtnQ0FDbkgsMEJBQTBCLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyw2Q0FBNkM7Z0NBQzVHLDBCQUEwQixLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sb0RBQW9EO2dDQUNuSCwwQkFBMEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLDZDQUE2Qzs2QkFDN0c7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQzthQUNIO1lBQ0QsZUFBZSxFQUFFLENBQUMsc0JBQXNCLENBQUM7U0FDMUMsQ0FBQyxDQUFDO1FBQ0gsb0JBQW9CLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbEQsaUJBQWlCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNoRCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsWUFBd0IsQ0FBQyxpQkFBaUIsQ0FDaEUsK0JBQStCLENBQ2hDLENBQUM7UUFFRixNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsdUJBQXVCLEVBQUU7WUFDNUQsUUFBUSxFQUFFLDhCQUE4QjtZQUN4QyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsY0FBYyxFQUFFO2dCQUNkLFdBQVcsRUFBRSx3QkFBYyxDQUFDLFFBQVEsQ0FBQztvQkFDbkMsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLFNBQVMsRUFBRTt3QkFDVDs0QkFDRSxNQUFNLEVBQUU7Z0NBQ04saUNBQWlDO2dDQUNqQyxtQkFBbUI7Z0NBQ25CLHlCQUF5QjtnQ0FDekIsNEJBQTRCO2dDQUM1Qix5QkFBeUI7Z0NBQ3pCLGNBQWM7Z0NBQ2QscUJBQXFCO2dDQUNyQiwyQkFBMkI7Z0NBQzNCLDBCQUEwQjs2QkFDM0I7NEJBQ0QsTUFBTSxFQUFFLE9BQU87NEJBQ2YsUUFBUSxFQUFFO2dDQUNSLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLFlBQVksS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLGtCQUFrQjs2QkFDbkU7eUJBQ0Y7cUJBQ0Y7aUJBQ0YsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gseUNBQStCLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBd0IsQ0FBQyxpQkFBaUIsQ0FDNUQsdUJBQXVCLENBQ3hCLENBQUM7UUFFRixNQUFNLFlBQVksR0FBRyxJQUFJLHlCQUFlLENBQUM7WUFDdkMsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDO1lBQ3hCLFNBQVMsRUFBRTtnQkFDVCxrQ0FBa0M7Z0JBQ2xDLGlCQUFpQixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sUUFBUTthQUMzQztZQUNELFVBQVUsRUFBRTtnQkFDVix3QkFBd0IsRUFBRTtvQkFDeEIscUJBQXFCLEVBQUUsMEJBQTBCO2lCQUNsRDthQUNGO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLHlCQUFlLENBQUM7WUFDbkQsT0FBTyxFQUFFLENBQUMsdUJBQXVCLENBQUM7WUFDbEMsU0FBUyxFQUFFO2dCQUNULDRCQUE0QixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8saUNBQWlDO2FBQy9FO1NBQ0YsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDcEUsUUFBUSxFQUFFLCtCQUErQjtZQUN6QyxTQUFTLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDOUIsY0FBYyxFQUFFO2dCQUNkLGFBQWEsRUFBRSxJQUFJLHdCQUFjLENBQUM7b0JBQ2hDLFVBQVUsRUFBRSxDQUFDLFlBQVksRUFBRSx3QkFBd0IsQ0FBQztpQkFDckQsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUFDO1FBQ0YsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQXdCLENBQUMsaUJBQWlCLENBQ2hFLDJCQUEyQixDQUM1QixDQUFDO1FBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxjQUFJLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQ3pELFFBQVEsRUFBRSwyQkFBMkI7WUFDckMsU0FBUyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQzlCLGVBQWUsRUFBRSxDQUFDLHNCQUFzQixDQUFDLEVBQUUsaUZBQWlGO1lBQzVILGNBQWMsRUFBRTtnQkFDZCxTQUFTLEVBQUUsd0JBQWMsQ0FBQyxRQUFRLENBQUM7b0JBQ2pDLE9BQU8sRUFBRSxZQUFZO29CQUNyQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsTUFBTSxFQUFFLE9BQU87NEJBQ2YsTUFBTSxFQUFFO2dDQUNOLCtCQUErQjtnQ0FDL0IsZ0NBQWdDO2dDQUNoQyxrQ0FBa0M7Z0NBQ2xDLGlDQUFpQztnQ0FDakMsb0NBQW9DO2dDQUNwQyxnQ0FBZ0M7Z0NBQ2hDLDRCQUE0Qjs2QkFDN0I7NEJBQ0QsUUFBUSxFQUFFO2dDQUNSLDBCQUEwQixLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sVUFBVTs2QkFDMUU7eUJBQ0Y7d0JBQ0Q7NEJBQ0UsTUFBTSxFQUFFLE9BQU87NEJBQ2YsTUFBTSxFQUFFLENBQUMsWUFBWSxFQUFFLGVBQWUsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDL0QsUUFBUSxFQUFFLENBQUMsMkJBQTJCLENBQUM7eUJBQ3hDO3dCQUNEOzRCQUNFLEdBQUcsRUFBRSxZQUFZOzRCQUNqQixNQUFNLEVBQUUsT0FBTzs0QkFDZixNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUM7NEJBQzFDLFFBQVEsRUFBRTtnQ0FDUixzQ0FBc0M7Z0NBQ3RDLGlEQUFpRDtnQ0FDakQscURBQXFEO2dDQUNyRCxpREFBaUQ7NkJBQ2xEO3lCQUNGO3FCQUNGO2lCQUNGLENBQUM7Z0JBQ0YsU0FBUyxFQUFFLHdCQUFjLENBQUMsUUFBUSxDQUFDO29CQUNqQyxPQUFPLEVBQUUsWUFBWTtvQkFDckIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE1BQU0sRUFBRSxPQUFPOzRCQUNmLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQzs0QkFDYixRQUFRLEVBQUU7Z0NBQ1IsMEJBQTBCLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxVQUFVOzZCQUMxRTs0QkFDRCxTQUFTLEVBQUU7Z0NBQ1QsMEJBQTBCLEVBQUU7b0NBQzFCLGVBQWUsRUFBRSw4QkFBOEI7aUNBQ2hEOzZCQUNGO3lCQUNGO3FCQUNGO2lCQUNGLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUNGLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBd0IsQ0FBQyxpQkFBaUIsQ0FDekQsdUJBQXVCLENBQ3hCLENBQUM7UUFFRixNQUFNLHdCQUF3QixHQUFHLElBQUksdUJBQVMsQ0FDNUMsS0FBSyxFQUNMLDBCQUEwQixFQUMxQjtZQUNFLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTztZQUN6QixVQUFVLEVBQUUsK0JBQStCO1NBQzVDLENBQ0YsQ0FBQztRQUNGLHdCQUF3QixDQUFDLGlCQUFpQixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFDdkUsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLHVCQUFTLENBQzdDLEtBQUssRUFDTCwyQkFBMkIsRUFDM0I7WUFDRSxLQUFLLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDMUIsVUFBVSxFQUFFLGdDQUFnQztTQUM3QyxDQUNGLENBQUM7UUFDRix5QkFBeUIsQ0FBQyxpQkFBaUIsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBRXpFLE1BQU0sb0NBQW9DLEdBQUcsSUFBSSx1QkFBUyxDQUN4RCxLQUFLLEVBQ0wsc0NBQXNDLEVBQ3RDO1lBQ0UsS0FBSyxFQUFFLGlCQUFpQixDQUFDLFFBQVE7WUFDakMsVUFBVSxFQUFFLGtEQUFrRDtTQUMvRCxDQUNGLENBQUM7UUFDRixvQ0FBb0MsQ0FBQyxpQkFBaUIsQ0FDcEQsc0NBQXNDLENBQ3ZDLENBQUM7UUFDRixNQUFNLG1DQUFtQyxHQUFHLElBQUksdUJBQVMsQ0FDdkQsS0FBSyxFQUNMLHFDQUFxQyxFQUNyQztZQUNFLEtBQUssRUFBRSxpQkFBaUIsQ0FBQyxPQUFPO1lBQ2hDLFVBQVUsRUFBRSxpREFBaUQ7U0FDOUQsQ0FDRixDQUFDO1FBQ0YsbUNBQW1DLENBQUMsaUJBQWlCLENBQ25ELHFDQUFxQyxDQUN0QyxDQUFDO1FBRUYsTUFBTSxvQ0FBb0MsR0FBRyxJQUFJLHVCQUFTLENBQ3hELEtBQUssRUFDTCxzQ0FBc0MsRUFDdEM7WUFDRSxLQUFLLEVBQUUscUJBQXFCLENBQUMsUUFBUTtZQUNyQyxVQUFVLEVBQUUsbURBQW1EO1NBQ2hFLENBQ0YsQ0FBQztRQUNGLG9DQUFvQyxDQUFDLGlCQUFpQixDQUNwRCxzQ0FBc0MsQ0FDdkMsQ0FBQztRQUNGLE1BQU0sbUNBQW1DLEdBQUcsSUFBSSx1QkFBUyxDQUN2RCxLQUFLLEVBQ0wscUNBQXFDLEVBQ3JDO1lBQ0UsS0FBSyxFQUFFLHFCQUFxQixDQUFDLE9BQU87WUFDcEMsVUFBVSxFQUFFLGtEQUFrRDtTQUMvRCxDQUNGLENBQUM7UUFDRixtQ0FBbUMsQ0FBQyxpQkFBaUIsQ0FDbkQscUNBQXFDLENBQ3RDLENBQUM7UUFFRixNQUFNLDhCQUE4QixHQUFHLElBQUksdUJBQVMsQ0FDbEQsS0FBSyxFQUNMLGdDQUFnQyxFQUNoQztZQUNFLEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTtZQUM3QixVQUFVLEVBQUUsdUNBQXVDO1NBQ3BELENBQ0YsQ0FBQztRQUNGLDhCQUE4QixDQUFDLGlCQUFpQixDQUM5QyxnQ0FBZ0MsQ0FDakMsQ0FBQztRQUNGLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSx1QkFBUyxDQUNqRCxLQUFLLEVBQ0wsK0JBQStCLEVBQy9CO1lBQ0UsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPO1lBQzVCLFVBQVUsRUFBRSxzQ0FBc0M7U0FDbkQsQ0FDRixDQUFDO1FBQ0YsNkJBQTZCLENBQUMsaUJBQWlCLENBQzdDLCtCQUErQixDQUNoQyxDQUFDO1FBRUYsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLHVCQUFTLENBQ3BELEtBQUssRUFDTCxrQ0FBa0MsRUFDbEM7WUFDRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUNqQyxVQUFVLEVBQUUsd0NBQXdDO1NBQ3JELENBQ0YsQ0FBQztRQUNGLGdDQUFnQyxDQUFDLGlCQUFpQixDQUNoRCxrQ0FBa0MsQ0FDbkMsQ0FBQztRQUNGLE1BQU0sK0JBQStCLEdBQUcsSUFBSSx1QkFBUyxDQUNuRCxLQUFLLEVBQ0wsaUNBQWlDLEVBQ2pDO1lBQ0UsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE9BQU87WUFDaEMsVUFBVSxFQUFFLHVDQUF1QztTQUNwRCxDQUNGLENBQUM7UUFDRiwrQkFBK0IsQ0FBQyxpQkFBaUIsQ0FDL0MsaUNBQWlDLENBQ2xDLENBQUM7SUFDSixDQUFDOztBQXJiSCxrQ0FzYkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIEVudmlyb25tZW50LCBGbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQge1xuICBDZm5Sb2xlLFxuICBNYW5hZ2VkUG9saWN5LFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUmlvTGFuZGluZ1pvbmUgfSBmcm9tICcuLi8uLi8uLi9yaW8tbGFuZGluZy16b25lJztcblxuZXhwb3J0IGludGVyZmFjZSBSdW5uZXJSb2xlUHJvcHMge1xuICByZWFkb25seSBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIFRoaXMgY29uc3RydWN0IHByb3ZpZGVzIGEgc2V0IG9mIGJhc2Ugcm9sZXMgZm9yIGdpdGxhYiBydW5uZXJzIGluIG9yZGVyIHRvIGJ1aWxkLCB0ZXN0LCB2YWxpZGF0ZSBhbmQgZGVwbG95IGFwcGxpY2F0aW9uc1xuICogb24gUklPLiBUaGUgcm9sZXMgbmVlZCB0byBiZSBhc3N1bWVkIGR1cmluZyBqb2IgcnVudGltZSB0byBwZXJmb3JtIG1vcmUgcGVybWlzc2l2ZSBhY3Rpb25zLCBzdWNoIGFzIGNyZWF0aW5nIGNlcnRpZmljYXRlcyB0b1xuICogYXV0aGVudGljYXRlIHRvd2FyZHMgdGhlIFJJTyBNU0ssIHB1c2hpbmcgZG9ja2VyIGltYWdlcyB0byBFQ1IsIHBlcmZvcm1pbmcgYSBzZWNyZXRzIGJhY2t1cCwgZGVwbG95aW5nIHN0YWNrcyxcbiAqIG9yIHRvIHB1Ymxpc2ggYW4gU1BBIHRvIGEgUzMgYnVja2V0LiBEbyBub3QgYXNzdW1lIHRoZSBkZXBsb3ltZW50IHJvbGUgdW5sZXNzIG5lZWRlZC5cbiAqIFRoZSBiYXNlIHJvbGUgY2FuIGJlIHRoZSBkZWZhdWx0IHJvbGUgYXR0YWNoZWQgdG8gR2l0TGFiIHJ1bm5lcnMuXG4gKiBUaGUgcm9sZSBhbGxvd3MgdG8gcmVhZCB2YXJpb3VzIGJhc2ljIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgTklTVCBkYXRhIG1pcnJvciwgdGhlIE9TUyBsaWNlbnNlIGJ1Y2tldCwgRGF0YURvZyBrZXlzXG4gKiBhbmQgdG8gcHVsbCBFQ1IgaW1hZ2VzIGZvcm0gcHVibGljIEdhbGxlcnkgb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50IGluIHRoZSBlbnZpcm9ubWVudC5cbiAqIFRoZSBSb2xlIEFSTnMgYXJlIGV4cG9ydCB1c2luZyBDRk5PdXRwdXRzLiBVc2UgdGhlIG91dHB1dHMgdG8gY29uZmlndXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB5b3VyIEdpdExhYiBncm91cC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lclJvbGVzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgcnVubmVyQmFzZVJvbGU6IFJvbGU7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bm5lclJvbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgYWNjb3VudE5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcihzY29wZSk7XG4gICAgY29uc3QgdGVhbU5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcihzY29wZSk7XG5cbiAgICBjb25zdCBuaXN0TWlycm9yUGFyYW1ldGVyID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdOaXN0TWlycm9yUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICApO1xuXG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPVxuICAgICAgU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnT3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXInLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICk7XG5cbiAgICBjb25zdCBkZEFwaUtleVBhcmFtID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdEYXRhRG9nQXBpS2V5UGFyYW0nLFxuICAgICAge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiAnL3Jpby9jb25maWcvZGF0YWRvZy1pbnRlZ3JhdGlvbi9hcGkta2V5JyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBkZFNpdGVQYXJhbSA9IFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICAgIHRoaXMsXG4gICAgICAnRGF0YURvZ1NpdGVQYXJhbScsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL3NpdGUnLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3Qga2Fma2FJbnRlZ3JhdGlvblBvbGljeSA9IE1hbmFnZWRQb2xpY3kuZnJvbU1hbmFnZWRQb2xpY3lBcm4oXG4gICAgICB0aGlzLFxuICAgICAgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knLFxuICAgICAgRm4uaW1wb3J0VmFsdWUoJ2thZmthLWludGVncmF0aW9uLXBvbGljeS1hcm4nKSxcbiAgICApO1xuXG4gICAgdGhpcy5ydW5uZXJCYXNlUm9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckJ1aWxkUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJywge30pLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQ2RrU3ludGhMb29rVXA6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3MzOipPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCcsICdzMzpHZXRCdWNrZXRMb2NhdGlvbiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6Y2RrdG9vbGtpdC0qJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTaWQ6ICdhc3N1bWVyb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnc3RzOkFzc3VtZVJvbGUnLCAnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLXJlYWRPbmx5Um9sZScsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0qJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNpZDogJ3B1bGxFY3JJbWFnZXMnLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5JyxcbiAgICAgICAgICAgICAgICAnZWNyOkJhdGNoR2V0SW1hZ2UnLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZXMnLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6ZWNyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cmVwb3NpdG9yeS8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgICh0aGlzLnJ1bm5lckJhc2VSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQnVpbGRSb2xlJyxcbiAgICApO1xuICAgIG5pc3RNaXJyb3JQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgdGVhbU5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIGRkQXBpS2V5UGFyYW0uZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIGRkU2l0ZVBhcmFtLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcblxuICAgIGNvbnN0IHdlYkNvbnRlbnRQdWJsaXNoUm9sZSA9IG5ldyBSb2xlKFxuICAgICAgdGhpcyxcbiAgICAgICdHbFJ1bm5lclMzV2ViQ29udGVudERlcGxveVJvbGUnLFxuICAgICAge1xuICAgICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci13ZWItY29udGVudC1zMy1kZXBsb3ktcm9sZScsXG4gICAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICBQdWJsaXNoV2ViQ29udGVudE9uUzM6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICAgJ3MzOkFib3J0KicsXG4gICAgICAgICAgICAgICAgICAnczM6RGVsZXRlT2JqZWN0KicsXG4gICAgICAgICAgICAgICAgICAnczM6R2V0QnVja2V0KicsXG4gICAgICAgICAgICAgICAgICAnczM6R2V0T2JqZWN0KicsXG4gICAgICAgICAgICAgICAgICAnczM6TGlzdConLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdCcsXG4gICAgICAgICAgICAgICAgICAnczM6UHV0T2JqZWN0TGVnYWxIb2xkJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RSZXRlbnRpb24nLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdFRhZ2dpbmcnLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdFZlcnNpb25UYWdnaW5nJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6czM6OjoqJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAgICdzc206RGVzY3JpYmVQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVySGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cGFyYW1ldGVyL2NvbmZpZy8qYCxcbiAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9zZWNyZXQvKmAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgKHdlYkNvbnRlbnRQdWJsaXNoUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lclMzV2ViQ29udGVudERlcGxveVJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBjcmVhdGVNU0tDZXJ0Um9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckNyZWF0ZUFuZFNpZ25DZXJ0Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWNyZWF0ZS1hbmQtc2lnbi1yaW8tbXNrLWNlcnQtcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBQYXJhbWV0ZXJTdG9yZVJlYWRLZXlTdG9yZTogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ3NzbTpEZXNjcmliZVBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9jb25maWcvKmAsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cGFyYW1ldGVyL3NlY3JldC8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICAgIFNlY3JldHNNYW5hZ2VyUmVhZEtleVN0b3JlOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6RGVzY3JpYmVTZWNyZXQnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkdldFJlc291cmNlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6TGlzdFNlY3JldFZlcnNpb25JZHMnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L3NlY3JldC8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQtPz8/Pz8/YCxcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnNlY3JldDovc2VjcmV0Lyovc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L2NvbmZpZy8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQtPz8/Pz8/YCxcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnNlY3JldDovY29uZmlnLyovc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2thZmthSW50ZWdyYXRpb25Qb2xpY3ldLFxuICAgIH0pO1xuICAgIGFjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChjcmVhdGVNU0tDZXJ0Um9sZSk7XG4gICAgdGVhbU5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIChjcmVhdGVNU0tDZXJ0Um9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNyZWF0ZUFuZFNpZ25DZXJ0Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGVjckRlcGxveVJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJFQ1JEZXBsb3lSb2xlJywge1xuICAgICAgcm9sZU5hbWU6ICdnbC1ydW5uZXItZGVwbG95LXRvLWVjci1yb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIERlcGxveVRvRUNSOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAnZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eScsXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAgICAgICAnZWNyOkNvbXBsZXRlTGF5ZXJVcGxvYWQnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgICAgICAgJ2VjcjpJbml0aWF0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAgICAgICAnZWNyOlB1dEltYWdlJyxcbiAgICAgICAgICAgICAgICAnZWNyOlVwbG9hZExheWVyUGFydCcsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYCR7cHJvcHMuZW52LmFjY291bnR9LmRrci5lY3IuJHtwcm9wcy5lbnYucmVnaW9ufS5hbWF6b25hd3MuY29tLypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgUHVibGljR2FsbGVyeUF1dGhvcml6YXRpb25Ub2tlbi5ncmFudFJlYWQoZWNyRGVwbG95Um9sZSk7XG4gICAgKGVjckRlcGxveVJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJFQ1JEZXBsb3lSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgaWFtUG9saWN5S01TID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ2ttczpEZWNyeXB0J10sXG4gICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgJ2Fybjphd3M6a21zOio6OTAzNDA0Mzg2NTUwOmtleS8qJyxcbiAgICAgICAgYGFybjphd3M6a21zOio6JHtwcm9wcy5lbnYuYWNjb3VudH06a2V5LypgLFxuICAgICAgXSxcbiAgICAgIGNvbmRpdGlvbnM6IHtcbiAgICAgICAgJ0ZvckFueVZhbHVlOlN0cmluZ0xpa2UnOiB7XG4gICAgICAgICAgJ2ttczpSZXNvdXJjZUFsaWFzZXMnOiAnYWxpYXMvcmlvLWx6LWJhY2t1cC1rZXkqJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgaWFtUG9saWN5TGFtYmRhRXhlY3V0aW9uID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBhY3Rpb25zOiBbJ2xhbWJkYTpJbnZva2VGdW5jdGlvbiddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgIGBhcm46YXdzOmxhbWJkYTpldS13ZXN0LTE6JHtwcm9wcy5lbnYuYWNjb3VudH06ZnVuY3Rpb246U2VjcmV0c1Jlc3RvcmVIYW5kbGVyYCxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgY29uc3Qgc2VjcmV0c0JhY2tVcFJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJTZWNyZXRzQmFja3VwUm9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLXNlY3JldHMtYmFja3VwLXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgU2VjcmV0c0JhY2t1cDogbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICBzdGF0ZW1lbnRzOiBbaWFtUG9saWN5S01TLCBpYW1Qb2xpY3lMYW1iZGFFeGVjdXRpb25dLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKHNlY3JldHNCYWNrVXBSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyU2VjcmV0c0JhY2t1cFJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBkZXBsb3lSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtrYWZrYUludGVncmF0aW9uUG9saWN5XSwgLy8gcmVxdWlyZWQgdG8gY3JlYXRlIEthZmthIHRvcGljcyBhbmQgcHVibGlzaCBldmVudCBzcGVjaWZpY2F0aW9uIGluIGRlcGxveSBqb2JzXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBDZGtEZXBsb3k6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246Q3JlYXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpFeGVjdXRlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RGVzY3JpYmVTdGFja0V2ZW50cycsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlbGV0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkdldFRlbXBsYXRlJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnN0YWNrLypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnczM6Kk9iamVjdCcsICdzMzpMaXN0QnVja2V0JywgJ3MzOkdldEJ1Y2tldExvY2F0aW9uJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6czM6OjpjZGt0b29sa2l0LSonXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNpZDogJ2Fzc3VtZXJvbGUnLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWydzdHM6QXNzdW1lUm9sZScsICdpYW06UGFzc1JvbGUnXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstcmVhZE9ubHlSb2xlJyxcbiAgICAgICAgICAgICAgICAnYXJuOmF3czppYW06Oio6cm9sZS9jZGstaG5iNjU5ZmRzLWRlcGxveS1yb2xlLSonLFxuICAgICAgICAgICAgICAgICdhcm46YXdzOmlhbTo6Kjpyb2xlL2Nkay1obmI2NTlmZHMtZmlsZS1wdWJsaXNoaW5nLSonLFxuICAgICAgICAgICAgICAgICdhcm46YXdzOmlhbTo6Kjpyb2xlL2Nkay1obmI2NTlmZHMtbG9va3VwLXJvbGUtKicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgICBDZm5EZXBsb3k6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJyonXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFtcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpjbG91ZGZvcm1hdGlvbjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnN0YWNrLypgLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBDb25kaXRpb246IHtcbiAgICAgICAgICAgICAgICAnRm9yQW55VmFsdWU6U3RyaW5nRXF1YWxzJzoge1xuICAgICAgICAgICAgICAgICAgJ2F3czpDYWxsZWRWaWEnOiAnY2xvdWRmb3JtYXRpb24uYW1hem9uYXdzLmNvbScsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIChkZXBsb3lSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95Um9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogZGVwbG95Um9sZS5yb2xlQXJuLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJDREtEZXBsb3lSb2xlQXJuJyk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGRlcGxveVJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95Um9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoJ0dsUnVubmVyQ0RLRGVwbG95Um9sZU5hbWUnKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrQ3JlYXRlQW5kU2lnbkNlcnRSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogY3JlYXRlTVNLQ2VydFJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWNyZWF0ZS1hbmQtc2lnbi1tc2stY2VydC1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrQ3JlYXRlQW5kU2lnbkNlcnRSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZU5hbWUnLFxuICAgICk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtDcmVhdGVBbmRTaWduQ2VydFJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogY3JlYXRlTVNLQ2VydFJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstY3JlYXRlLWFuZC1zaWduLW1zay1jZXJ0LXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybicsXG4gICAgKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogd2ViQ29udGVudFB1Ymxpc2hSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1wdWJsaXNoLXdlYi1jb250ZW50LW9uLXMzLXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka1B1Ymxpc2hXZWJDb250ZW50Um9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZUFybicsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB3ZWJDb250ZW50UHVibGlzaFJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstcHVibGlzaC13ZWItY29udGVudC1vbi1zMy1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVBcm4nLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZU5hbWUgPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lUb0VjclJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGVjckRlcGxveVJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS10by1lY3Itcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lUb0VjclJvbGVOYW1lJyxcbiAgICApO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95VG9FY3JSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IGVjckRlcGxveVJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXRvLWVjci1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtEZXBsb3lUb0VjclJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lUb0VjclJvbGVBcm4nLFxuICAgICk7XG5cbiAgICBjb25zdCBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBzZWNyZXRzQmFja1VwUm9sZS5yb2xlTmFtZSxcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstc2VjcmV0cy1iYWNrdXAtcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlTmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka1NlY3JldHNCYWNrdXBSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLU2VjcmV0c0JhY2t1cFJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogc2VjcmV0c0JhY2tVcFJvbGUucm9sZUFybixcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstc2VjcmV0cy1iYWNrdXAtcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVBcm4ub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZUFybicsXG4gICAgKTtcbiAgfVxufVxuIl19
353
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmVyLXJvbGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lci9ydW5uZXItcm9sZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FBZ0U7QUFDaEUsaURBQXNFO0FBQ3RFLGlEQU82QjtBQUM3QiwrQ0FBNEM7QUFDNUMsaURBQXNEO0FBQ3RELDJDQUF1QztBQUN2QyxnRUFBMkQ7QUFNM0Q7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBYSxXQUFZLFNBQVEsc0JBQVM7SUFFeEMsWUFBWSxLQUFZLEVBQUUsRUFBVSxFQUFFLEtBQXNCO1FBQzFELEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxvQkFBb0IsR0FBRyxpQ0FBYyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLE1BQU0saUJBQWlCLEdBQUcsaUNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUzRSxNQUFNLG1CQUFtQixHQUFHLHlCQUFlLENBQUMsdUJBQXVCLENBQ2pFLElBQUksRUFDSixxQkFBcUIsRUFDckIsOEJBQThCLENBQy9CLENBQUM7UUFFRixNQUFNLDBCQUEwQixHQUM5Qix5QkFBZSxDQUFDLDZCQUE2QixDQUMzQyxJQUFJLEVBQ0osNEJBQTRCLEVBQzVCO1lBQ0UsYUFBYSxFQUFFLGtDQUFrQztTQUNsRCxDQUNGLENBQUM7UUFDSixNQUFNLGlCQUFpQixHQUFHLGVBQU0sQ0FBQyxjQUFjLENBQzdDLElBQUksRUFDSixtQkFBbUIsRUFDbkIsMEJBQTBCLENBQUMsV0FBVyxDQUN2QyxDQUFDO1FBRUYsTUFBTSxhQUFhLEdBQUcseUJBQWUsQ0FBQyw2QkFBNkIsQ0FDakUsSUFBSSxFQUNKLG9CQUFvQixFQUNwQjtZQUNFLGFBQWEsRUFBRSx5Q0FBeUM7U0FDekQsQ0FDRixDQUFDO1FB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QUFNLDhCQUE4QixHQUFHLElBQUksdUJBQVMsQ0FDbEQsS0FBSyxFQUNMLGdDQUFnQyxFQUNoQztZQUNFLEtBQUssRUFBRSxhQUFhLENBQUMsUUFBUTtZQUM3QixVQUFVLEVBQUUsdUNBQXVDO1NBQ3BELENBQ0YsQ0FBQztRQUNGLDhCQUE4QixDQUFDLGlCQUFpQixDQUM5QyxnQ0FBZ0MsQ0FDakMsQ0FBQztRQUNGLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSx1QkFBUyxDQUNqRCxLQUFLLEVBQ0wsK0JBQStCLEVBQy9CO1lBQ0UsS0FBSyxFQUFFLGFBQWEsQ0FBQyxPQUFPO1lBQzVCLFVBQVUsRUFBRSxzQ0FBc0M7U0FDbkQsQ0FDRixDQUFDO1FBQ0YsNkJBQTZCLENBQUMsaUJBQWlCLENBQzdDLCtCQUErQixDQUNoQyxDQUFDO1FBRUYsTUFBTSxnQ0FBZ0MsR0FBRyxJQUFJLHVCQUFTLENBQ3BELEtBQUssRUFDTCxrQ0FBa0MsRUFDbEM7WUFDRSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsUUFBUTtZQUNqQyxVQUFVLEVBQUUsd0NBQXdDO1NBQ3JELENBQ0YsQ0FBQztRQUNGLGdDQUFnQyxDQUFDLGlCQUFpQixDQUNoRCxrQ0FBa0MsQ0FDbkMsQ0FBQztRQUNGLE1BQU0sK0JBQStCLEdBQUcsSUFBSSx1QkFBUyxDQUNuRCxLQUFLLEVBQ0wsaUNBQWlDLEVBQ2pDO1lBQ0UsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE9BQU87WUFDaEMsVUFBVSxFQUFFLHVDQUF1QztTQUNwRCxDQUNGLENBQUM7UUFDRiwrQkFBK0IsQ0FBQyxpQkFBaUIsQ0FDL0MsaUNBQWlDLENBQ2xDLENBQUM7SUFDSixDQUFDOztBQXRiSCxrQ0F1YkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIEVudmlyb25tZW50LCBGbiwgU3RhY2sgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQge1xuICBDZm5Sb2xlLFxuICBNYW5hZ2VkUG9saWN5LFxuICBQb2xpY3lEb2N1bWVudCxcbiAgUG9saWN5U3RhdGVtZW50LFxuICBSb2xlLFxuICBTZXJ2aWNlUHJpbmNpcGFsLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IEJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgUmlvTGFuZGluZ1pvbmUgfSBmcm9tICcuLi8uLi8uLi9yaW8tbGFuZGluZy16b25lJztcblxuZXhwb3J0IGludGVyZmFjZSBSdW5uZXJSb2xlUHJvcHMge1xuICByZWFkb25seSBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIFRoaXMgY29uc3RydWN0IHByb3ZpZGVzIGEgc2V0IG9mIGJhc2Ugcm9sZXMgZm9yIGdpdGxhYiBydW5uZXJzIGluIG9yZGVyIHRvIGJ1aWxkLCB0ZXN0LCB2YWxpZGF0ZSBhbmQgZGVwbG95IGFwcGxpY2F0aW9uc1xuICogb24gUklPLiBUaGUgcm9sZXMgbmVlZCB0byBiZSBhc3N1bWVkIGR1cmluZyBqb2IgcnVudGltZSB0byBwZXJmb3JtIG1vcmUgcGVybWlzc2l2ZSBhY3Rpb25zLCBzdWNoIGFzIGNyZWF0aW5nIGNlcnRpZmljYXRlcyB0b1xuICogYXV0aGVudGljYXRlIHRvd2FyZHMgdGhlIFJJTyBNU0ssIHB1c2hpbmcgZG9ja2VyIGltYWdlcyB0byBFQ1IsIHBlcmZvcm1pbmcgYSBzZWNyZXRzIGJhY2t1cCwgZGVwbG95aW5nIHN0YWNrcyxcbiAqIG9yIHRvIHB1Ymxpc2ggYW4gU1BBIHRvIGEgUzMgYnVja2V0LiBEbyBub3QgYXNzdW1lIHRoZSBkZXBsb3ltZW50IHJvbGUgdW5sZXNzIG5lZWRlZC5cbiAqIFRoZSBiYXNlIHJvbGUgY2FuIGJlIHRoZSBkZWZhdWx0IHJvbGUgYXR0YWNoZWQgdG8gR2l0TGFiIHJ1bm5lcnMuXG4gKiBUaGUgcm9sZSBhbGxvd3MgdG8gcmVhZCB2YXJpb3VzIGJhc2ljIHBhcmFtZXRlcnMgc3VjaCBhcyB0aGUgTklTVCBkYXRhIG1pcnJvciwgdGhlIE9TUyBsaWNlbnNlIGJ1Y2tldCwgRGF0YURvZyBrZXlzXG4gKiBhbmQgdG8gcHVsbCBFQ1IgaW1hZ2VzIGZvcm0gcHVibGljIEdhbGxlcnkgb3IgdGhlIHNwZWNpZmllZCBhY2NvdW50IGluIHRoZSBlbnZpcm9ubWVudC5cbiAqIFRoZSBSb2xlIEFSTnMgYXJlIGV4cG9ydCB1c2luZyBDRk5PdXRwdXRzLiBVc2UgdGhlIG91dHB1dHMgdG8gY29uZmlndXJlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbiB5b3VyIEdpdExhYiBncm91cC5cbiAqL1xuZXhwb3J0IGNsYXNzIFJ1bm5lclJvbGVzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgcnVubmVyQmFzZVJvbGU6IFJvbGU7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBTdGFjaywgaWQ6IHN0cmluZywgcHJvcHM6IFJ1bm5lclJvbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgYWNjb3VudE5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRBY2NvdW50TmFtZVBhcmFtZXRlcihzY29wZSk7XG4gICAgY29uc3QgdGVhbU5hbWVQYXJhbWV0ZXIgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtSWRlbnRpZmllclBhcmFtZXRlcihzY29wZSk7XG5cbiAgICBjb25zdCBuaXN0TWlycm9yUGFyYW1ldGVyID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdOaXN0TWlycm9yUGFyYW1ldGVyJyxcbiAgICAgICcvY29uZmlnL25pc3QtZGF0YS1taXJyb3IvdXJsJyxcbiAgICApO1xuXG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXIgPVxuICAgICAgU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgICB0aGlzLFxuICAgICAgICAnT3NzTGljZW5zZXNCdWNrZXRQYXJhbWV0ZXInLFxuICAgICAgICB7XG4gICAgICAgICAgcGFyYW1ldGVyTmFtZTogJy9jb25maWcvb3NzLWxpY2Vuc2VzL2J1Y2tldC1uYW1lJyxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgY29uc3Qgb3NzTGljZW5zZXNCdWNrZXQgPSBCdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICB0aGlzLFxuICAgICAgJ09zc0xpY2Vuc2VzQnVja2V0JyxcbiAgICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgICk7XG5cbiAgICBjb25zdCBkZEFwaUtleVBhcmFtID0gU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJBdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdEYXRhRG9nQXBpS2V5UGFyYW0nLFxuICAgICAge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiAnL3Jpby9jb25maWcvZGF0YWRvZy1pbnRlZ3JhdGlvbi9hcGkta2V5JyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBjb25zdCBkZFNpdGVQYXJhbSA9IFN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyQXR0cmlidXRlcyhcbiAgICAgIHRoaXMsXG4gICAgICAnRGF0YURvZ1NpdGVQYXJhbScsXG4gICAgICB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6ICcvcmlvL2NvbmZpZy9kYXRhZG9nLWludGVncmF0aW9uL3NpdGUnLFxuICAgICAgfSxcbiAgICApO1xuXG4gICAgY29uc3Qga2Fma2FJbnRlZ3JhdGlvblBvbGljeSA9IE1hbmFnZWRQb2xpY3kuZnJvbU1hbmFnZWRQb2xpY3lBcm4oXG4gICAgICB0aGlzLFxuICAgICAgJ0thZmthSW50ZWdyYXRpb25Qb2xpY3knLFxuICAgICAgRm4uaW1wb3J0VmFsdWUoJ2thZmthLWludGVncmF0aW9uLXBvbGljeS1hcm4nKSxcbiAgICApO1xuXG4gICAgdGhpcy5ydW5uZXJCYXNlUm9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckJ1aWxkUm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IFNlcnZpY2VQcmluY2lwYWwoJ2VjMi5hbWF6b25hd3MuY29tJywge30pLFxuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQ2RrU3ludGhMb29rVXA6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICBWZXJzaW9uOiAnMjAxMi0xMC0xNycsXG4gICAgICAgICAgU3RhdGVtZW50OiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3MzOipPYmplY3QnLCAnczM6TGlzdEJ1Y2tldCcsICdzMzpHZXRCdWNrZXRMb2NhdGlvbiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogWydhcm46YXdzOnMzOjo6Y2RrdG9vbGtpdC0qJ10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTaWQ6ICdhc3N1bWVyb2xlJyxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnc3RzOkFzc3VtZVJvbGUnLCAnaWFtOlBhc3NSb2xlJ10sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLXJlYWRPbmx5Um9sZScsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0qJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFNpZDogJ3B1bGxFY3JJbWFnZXMnLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdlY3I6QmF0Y2hDaGVja0xheWVyQXZhaWxhYmlsaXR5JyxcbiAgICAgICAgICAgICAgICAnZWNyOkJhdGNoR2V0SW1hZ2UnLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVJbWFnZXMnLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6ZWNyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cmVwb3NpdG9yeS8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgICh0aGlzLnJ1bm5lckJhc2VSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQnVpbGRSb2xlJyxcbiAgICApO1xuICAgIG5pc3RNaXJyb3JQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIG9zc0xpY2Vuc2VzQnVja2V0UGFyYW1ldGVyLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBvc3NMaWNlbnNlc0J1Y2tldC5ncmFudFJlYWRXcml0ZSh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBhY2NvdW50TmFtZVBhcmFtZXRlci5ncmFudFJlYWQodGhpcy5ydW5uZXJCYXNlUm9sZSk7XG4gICAgdGVhbU5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIGRkQXBpS2V5UGFyYW0uZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIGRkU2l0ZVBhcmFtLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcbiAgICBQdWJsaWNHYWxsZXJ5QXV0aG9yaXphdGlvblRva2VuLmdyYW50UmVhZCh0aGlzLnJ1bm5lckJhc2VSb2xlKTtcblxuICAgIGNvbnN0IHdlYkNvbnRlbnRQdWJsaXNoUm9sZSA9IG5ldyBSb2xlKFxuICAgICAgdGhpcyxcbiAgICAgICdHbFJ1bm5lclMzV2ViQ29udGVudERlcGxveVJvbGUnLFxuICAgICAge1xuICAgICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci13ZWItY29udGVudC1zMy1kZXBsb3ktcm9sZScsXG4gICAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgICBQdWJsaXNoV2ViQ29udGVudE9uUzM6IFBvbGljeURvY3VtZW50LmZyb21Kc29uKHtcbiAgICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICAgJ3MzOkFib3J0KicsXG4gICAgICAgICAgICAgICAgICAnczM6RGVsZXRlT2JqZWN0KicsXG4gICAgICAgICAgICAgICAgICAnczM6R2V0QnVja2V0KicsXG4gICAgICAgICAgICAgICAgICAnczM6R2V0T2JqZWN0KicsXG4gICAgICAgICAgICAgICAgICAnczM6TGlzdConLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdCcsXG4gICAgICAgICAgICAgICAgICAnczM6UHV0T2JqZWN0TGVnYWxIb2xkJyxcbiAgICAgICAgICAgICAgICAgICdzMzpQdXRPYmplY3RSZXRlbnRpb24nLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdFRhZ2dpbmcnLFxuICAgICAgICAgICAgICAgICAgJ3MzOlB1dE9iamVjdFZlcnNpb25UYWdnaW5nJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFJlc291cmNlOiBbJ2Fybjphd3M6czM6OjoqJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAgICdzc206RGVzY3JpYmVQYXJhbWV0ZXJzJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVySGlzdG9yeScsXG4gICAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cGFyYW1ldGVyL2NvbmZpZy8qYCxcbiAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9zZWNyZXQvKmAsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICk7XG4gICAgKHdlYkNvbnRlbnRQdWJsaXNoUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lclMzV2ViQ29udGVudERlcGxveVJvbGUnLFxuICAgICk7XG5cbiAgICBjb25zdCBjcmVhdGVNU0tDZXJ0Um9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckNyZWF0ZUFuZFNpZ25DZXJ0Um9sZScsIHtcbiAgICAgIHJvbGVOYW1lOiAnZ2wtcnVubmVyLWNyZWF0ZS1hbmQtc2lnbi1yaW8tbXNrLWNlcnQtcm9sZScsXG4gICAgICBhc3N1bWVkQnk6IHRoaXMucnVubmVyQmFzZVJvbGUsXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBQYXJhbWV0ZXJTdG9yZVJlYWRLZXlTdG9yZTogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgQWN0aW9uOiBbXG4gICAgICAgICAgICAgICAgJ3NzbTpEZXNjcmliZVBhcmFtZXRlcnMnLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVyJyxcbiAgICAgICAgICAgICAgICAnc3NtOkdldFBhcmFtZXRlckhpc3RvcnknLFxuICAgICAgICAgICAgICAgICdzc206R2V0UGFyYW1ldGVycycsXG4gICAgICAgICAgICAgICAgJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnBhcmFtZXRlci9jb25maWcvKmAsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cGFyYW1ldGVyL3NlY3JldC8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICAgIFNlY3JldHNNYW5hZ2VyUmVhZEtleVN0b3JlOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6RGVzY3JpYmVTZWNyZXQnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRTZWNyZXRWYWx1ZScsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkdldFJlc291cmNlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6TGlzdFNlY3JldFZlcnNpb25JZHMnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L3NlY3JldC8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQtPz8/Pz8/YCxcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnNlY3JldDovc2VjcmV0Lyovc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICAgICAgICAgICAgYGFybjphd3M6c2VjcmV0c21hbmFnZXI6JHtwcm9wcy5lbnYucmVnaW9ufToke3Byb3BzLmVudi5hY2NvdW50fTpzZWNyZXQ6L2NvbmZpZy8qL3NlcnZpY2Uta2V5c3RvcmUtcGFzc3dvcmQtPz8/Pz8/YCxcbiAgICAgICAgICAgICAgICBgYXJuOmF3czpzZWNyZXRzbWFuYWdlcjoke3Byb3BzLmVudi5yZWdpb259OiR7cHJvcHMuZW52LmFjY291bnR9OnNlY3JldDovY29uZmlnLyovc2VydmljZS1rZXlzdG9yZS1wYXNzd29yZGAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW2thZmthSW50ZWdyYXRpb25Qb2xpY3ldLFxuICAgIH0pO1xuICAgIGFjY291bnROYW1lUGFyYW1ldGVyLmdyYW50UmVhZChjcmVhdGVNU0tDZXJ0Um9sZSk7XG4gICAgdGVhbU5hbWVQYXJhbWV0ZXIuZ3JhbnRSZWFkKHRoaXMucnVubmVyQmFzZVJvbGUpO1xuICAgIChjcmVhdGVNU0tDZXJ0Um9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNyZWF0ZUFuZFNpZ25DZXJ0Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGVjckRlcGxveVJvbGUgPSBuZXcgUm9sZSh0aGlzLCAnR2xSdW5uZXJFQ1JEZXBsb3lSb2xlJywge1xuICAgICAgcm9sZU5hbWU6ICdnbC1ydW5uZXItZGVwbG95LXRvLWVjci1yb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIERlcGxveVRvRUNSOiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBBY3Rpb246IFtcbiAgICAgICAgICAgICAgICAnZWNyOkJhdGNoQ2hlY2tMYXllckF2YWlsYWJpbGl0eScsXG4gICAgICAgICAgICAgICAgJ2VjcjpCYXRjaEdldEltYWdlJyxcbiAgICAgICAgICAgICAgICAnZWNyOkNvbXBsZXRlTGF5ZXJVcGxvYWQnLFxuICAgICAgICAgICAgICAgICdlY3I6R2V0RG93bmxvYWRVcmxGb3JMYXllcicsXG4gICAgICAgICAgICAgICAgJ2VjcjpJbml0aWF0ZUxheWVyVXBsb2FkJyxcbiAgICAgICAgICAgICAgICAnZWNyOlB1dEltYWdlJyxcbiAgICAgICAgICAgICAgICAnZWNyOlVwbG9hZExheWVyUGFydCcsXG4gICAgICAgICAgICAgICAgJ2VjcjpHZXRBdXRob3JpemF0aW9uVG9rZW4nLFxuICAgICAgICAgICAgICAgICdlY3I6RGVzY3JpYmVSZXBvc2l0b3JpZXMnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIFJlc291cmNlOiBbXG4gICAgICAgICAgICAgICAgYGFybjphd3M6ZWNyOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06cmVwb3NpdG9yeS8qYCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIFB1YmxpY0dhbGxlcnlBdXRob3JpemF0aW9uVG9rZW4uZ3JhbnRSZWFkKGVjckRlcGxveVJvbGUpO1xuICAgIChlY3JEZXBsb3lSb2xlLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmblJvbGUpLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyRUNSRGVwbG95Um9sZScsXG4gICAgKTtcblxuICAgIGNvbnN0IGlhbVBvbGljeUtNUyA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogWydrbXM6RGVjcnlwdCddLFxuICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICdhcm46YXdzOmttczoqOjkwMzQwNDM4NjU1MDprZXkvKicsXG4gICAgICAgIGBhcm46YXdzOmttczoqOiR7cHJvcHMuZW52LmFjY291bnR9OmtleS8qYCxcbiAgICAgIF0sXG4gICAgICBjb25kaXRpb25zOiB7XG4gICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdMaWtlJzoge1xuICAgICAgICAgICdrbXM6UmVzb3VyY2VBbGlhc2VzJzogJ2FsaWFzL3Jpby1sei1iYWNrdXAta2V5KicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGlhbVBvbGljeUxhbWJkYUV4ZWN1dGlvbiA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgYWN0aW9uczogWydsYW1iZGE6SW52b2tlRnVuY3Rpb24nXSxcbiAgICAgIHJlc291cmNlczogW1xuICAgICAgICBgYXJuOmF3czpsYW1iZGE6ZXUtd2VzdC0xOiR7cHJvcHMuZW52LmFjY291bnR9OmZ1bmN0aW9uOlNlY3JldHNSZXN0b3JlSGFuZGxlcmAsXG4gICAgICBdLFxuICAgIH0pO1xuICAgIGNvbnN0IHNlY3JldHNCYWNrVXBSb2xlID0gbmV3IFJvbGUodGhpcywgJ0dsUnVubmVyU2VjcmV0c0JhY2t1cFJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1zZWNyZXRzLWJhY2t1cC1yb2xlJyxcbiAgICAgIGFzc3VtZWRCeTogdGhpcy5ydW5uZXJCYXNlUm9sZSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIFNlY3JldHNCYWNrdXA6IG5ldyBQb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW2lhbVBvbGljeUtNUywgaWFtUG9saWN5TGFtYmRhRXhlY3V0aW9uXSxcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH0pO1xuICAgIChzZWNyZXRzQmFja1VwUm9sZS5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Sb2xlKS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lclNlY3JldHNCYWNrdXBSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgZGVwbG95Um9sZSA9IG5ldyBSb2xlKHRoaXMsICdHbFJ1bm5lckNES0RlcGxveVJvbGUnLCB7XG4gICAgICByb2xlTmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXJvbGUnLFxuICAgICAgYXNzdW1lZEJ5OiB0aGlzLnJ1bm5lckJhc2VSb2xlLFxuICAgICAgbWFuYWdlZFBvbGljaWVzOiBba2Fma2FJbnRlZ3JhdGlvblBvbGljeV0sIC8vIHJlcXVpcmVkIHRvIGNyZWF0ZSBLYWZrYSB0b3BpY3MgYW5kIHB1Ymxpc2ggZXZlbnQgc3BlY2lmaWNhdGlvbiBpbiBkZXBsb3kgam9ic1xuICAgICAgaW5saW5lUG9saWNpZXM6IHtcbiAgICAgICAgQ2RrRGVwbG95OiBQb2xpY3lEb2N1bWVudC5mcm9tSnNvbih7XG4gICAgICAgICAgVmVyc2lvbjogJzIwMTItMTAtMTcnLFxuICAgICAgICAgIFN0YXRlbWVudDogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogW1xuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZXNjcmliZVN0YWNrcycsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkNyZWF0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlQ2hhbmdlU2V0JyxcbiAgICAgICAgICAgICAgICAnY2xvdWRmb3JtYXRpb246RXhlY3V0ZUNoYW5nZVNldCcsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tFdmVudHMnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpEZWxldGVDaGFuZ2VTZXQnLFxuICAgICAgICAgICAgICAgICdjbG91ZGZvcm1hdGlvbjpHZXRUZW1wbGF0ZScsXG4gICAgICAgICAgICAgICAgJ2Nsb3VkZm9ybWF0aW9uOlZhbGlkYXRlVGVtcGxhdGUnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c3RhY2svKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBFZmZlY3Q6ICdBbGxvdycsXG4gICAgICAgICAgICAgIEFjdGlvbjogWydzMzoqT2JqZWN0JywgJ3MzOkxpc3RCdWNrZXQnLCAnczM6R2V0QnVja2V0TG9jYXRpb24nXSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IFsnYXJuOmF3czpzMzo6OmNka3Rvb2xraXQtKiddLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgU2lkOiAnYXNzdW1lcm9sZScsXG4gICAgICAgICAgICAgIEVmZmVjdDogJ0FsbG93JyxcbiAgICAgICAgICAgICAgQWN0aW9uOiBbJ3N0czpBc3N1bWVSb2xlJywgJ2lhbTpQYXNzUm9sZSddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgICdhcm46YXdzOmlhbTo6Kjpyb2xlL2Nkay1yZWFkT25seVJvbGUnLFxuICAgICAgICAgICAgICAgICdhcm46YXdzOmlhbTo6Kjpyb2xlL2Nkay1obmI2NTlmZHMtZGVwbG95LXJvbGUtKicsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1maWxlLXB1Ymxpc2hpbmctKicsXG4gICAgICAgICAgICAgICAgJ2Fybjphd3M6aWFtOjoqOnJvbGUvY2RrLWhuYjY1OWZkcy1sb29rdXAtcm9sZS0qJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSksXG4gICAgICAgIENmbkRlcGxveTogUG9saWN5RG9jdW1lbnQuZnJvbUpzb24oe1xuICAgICAgICAgIFZlcnNpb246ICcyMDEyLTEwLTE3JyxcbiAgICAgICAgICBTdGF0ZW1lbnQ6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgRWZmZWN0OiAnQWxsb3cnLFxuICAgICAgICAgICAgICBBY3Rpb246IFsnKiddLFxuICAgICAgICAgICAgICBSZXNvdXJjZTogW1xuICAgICAgICAgICAgICAgIGBhcm46YXdzOmNsb3VkZm9ybWF0aW9uOiR7cHJvcHMuZW52LnJlZ2lvbn06JHtwcm9wcy5lbnYuYWNjb3VudH06c3RhY2svKmAsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIENvbmRpdGlvbjoge1xuICAgICAgICAgICAgICAgICdGb3JBbnlWYWx1ZTpTdHJpbmdFcXVhbHMnOiB7XG4gICAgICAgICAgICAgICAgICAnYXdzOkNhbGxlZFZpYSc6ICdjbG91ZGZvcm1hdGlvbi5hbWF6b25hd3MuY29tJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgKGRlcGxveVJvbGUubm9kZS5kZWZhdWx0Q2hpbGQgYXMgQ2ZuUm9sZSkub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lSb2xlJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZUFybicsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBkZXBsb3lSb2xlLnJvbGVBcm4sXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLWRlcGxveS1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtEZXBsb3lSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKCdHbFJ1bm5lckNES0RlcGxveVJvbGVBcm4nKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka0RlcGxveVJvbGVOYW1lID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLRGVwbG95Um9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogZGVwbG95Um9sZS5yb2xlTmFtZSxcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtEZXBsb3lSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZCgnR2xSdW5uZXJDREtEZXBsb3lSb2xlTmFtZScpO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLQ3JlYXRlQW5kU2lnbkNlcnRSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBjcmVhdGVNU0tDZXJ0Um9sZS5yb2xlTmFtZSxcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstY3JlYXRlLWFuZC1zaWduLW1zay1jZXJ0LXJvbGUtbmFtZScsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtDcmVhdGVBbmRTaWduQ2VydFJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLQ3JlYXRlQW5kU2lnbkNlcnRSb2xlTmFtZScsXG4gICAgKTtcbiAgICBjb25zdCBnbFJ1bm5lckNka0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybiA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0NyZWF0ZUFuZFNpZ25DZXJ0Um9sZUFybicsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBjcmVhdGVNU0tDZXJ0Um9sZS5yb2xlQXJuLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1jcmVhdGUtYW5kLXNpZ24tbXNrLWNlcnQtcm9sZS1hcm4nLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrQ3JlYXRlQW5kU2lnbkNlcnRSb2xlQXJuLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLQ3JlYXRlQW5kU2lnbkNlcnRSb2xlQXJuJyxcbiAgICApO1xuXG4gICAgY29uc3QgZ2xSdW5uZXJDZGtQdWJsaXNoV2ViQ29udGVudFJvbGVOYW1lID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLUHVibGlzaFdlYkNvbnRlbnRSb2xlTmFtZScsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiB3ZWJDb250ZW50UHVibGlzaFJvbGUucm9sZU5hbWUsXG4gICAgICAgIGV4cG9ydE5hbWU6ICdnbC1ydW5uZXItY2RrLXB1Ymxpc2gtd2ViLWNvbnRlbnQtb24tczMtcm9sZS1uYW1lJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka1B1Ymxpc2hXZWJDb250ZW50Um9sZU5hbWUub3ZlcnJpZGVMb2dpY2FsSWQoXG4gICAgICAnR2xSdW5uZXJDREtQdWJsaXNoV2ViQ29udGVudFJvbGVOYW1lJyxcbiAgICApO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrUHVibGlzaFdlYkNvbnRlbnRSb2xlQXJuID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLUHVibGlzaFdlYkNvbnRlbnRSb2xlQXJuJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHdlYkNvbnRlbnRQdWJsaXNoUm9sZS5yb2xlQXJuLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1wdWJsaXNoLXdlYi1jb250ZW50LW9uLXMzLXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka1B1Ymxpc2hXZWJDb250ZW50Um9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES1B1Ymxpc2hXZWJDb250ZW50Um9sZUFybicsXG4gICAgKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlTmFtZSA9IG5ldyBDZm5PdXRwdXQoXG4gICAgICBzY29wZSxcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVRvRWNyUm9sZU5hbWUnLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogZWNyRGVwbG95Um9sZS5yb2xlTmFtZSxcbiAgICAgICAgZXhwb3J0TmFtZTogJ2dsLXJ1bm5lci1jZGstZGVwbG95LXRvLWVjci1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrRGVwbG95VG9FY3JSb2xlTmFtZS5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVRvRWNyUm9sZU5hbWUnLFxuICAgICk7XG4gICAgY29uc3QgZ2xSdW5uZXJDZGtEZXBsb3lUb0VjclJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtEZXBsb3lUb0VjclJvbGVBcm4nLFxuICAgICAge1xuICAgICAgICB2YWx1ZTogZWNyRGVwbG95Um9sZS5yb2xlQXJuLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1kZXBsb3ktdG8tZWNyLXJvbGUtYXJuJyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBnbFJ1bm5lckNka0RlcGxveVRvRWNyUm9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES0RlcGxveVRvRWNyUm9sZUFybicsXG4gICAgKTtcblxuICAgIGNvbnN0IGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVOYW1lID0gbmV3IENmbk91dHB1dChcbiAgICAgIHNjb3BlLFxuICAgICAgJ0dsUnVubmVyQ0RLU2VjcmV0c0JhY2t1cFJvbGVOYW1lJyxcbiAgICAgIHtcbiAgICAgICAgdmFsdWU6IHNlY3JldHNCYWNrVXBSb2xlLnJvbGVOYW1lLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1zZWNyZXRzLWJhY2t1cC1yb2xlLW5hbWUnLFxuICAgICAgfSxcbiAgICApO1xuICAgIGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVOYW1lLm92ZXJyaWRlTG9naWNhbElkKFxuICAgICAgJ0dsUnVubmVyQ0RLU2VjcmV0c0JhY2t1cFJvbGVOYW1lJyxcbiAgICApO1xuICAgIGNvbnN0IGdsUnVubmVyQ2RrU2VjcmV0c0JhY2t1cFJvbGVBcm4gPSBuZXcgQ2ZuT3V0cHV0KFxuICAgICAgc2NvcGUsXG4gICAgICAnR2xSdW5uZXJDREtTZWNyZXRzQmFja3VwUm9sZUFybicsXG4gICAgICB7XG4gICAgICAgIHZhbHVlOiBzZWNyZXRzQmFja1VwUm9sZS5yb2xlQXJuLFxuICAgICAgICBleHBvcnROYW1lOiAnZ2wtcnVubmVyLWNkay1zZWNyZXRzLWJhY2t1cC1yb2xlLWFybicsXG4gICAgICB9LFxuICAgICk7XG4gICAgZ2xSdW5uZXJDZGtTZWNyZXRzQmFja3VwUm9sZUFybi5vdmVycmlkZUxvZ2ljYWxJZChcbiAgICAgICdHbFJ1bm5lckNES1NlY3JldHNCYWNrdXBSb2xlQXJuJyxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -26,6 +26,15 @@ export interface EcsAbruptlyStoppedMonitorProps {
26
26
  * If no cluster is provided, the monitor will consume ECS events for all clusters within the account.
27
27
  */
28
28
  readonly clusterArn?: string;
29
+ /**
30
+ * ARN of the Datadog forwarder Lambda function used to forward the CloudWatch logs to Datadog.
31
+ * Currently, two values are know to be exported by the account modules:
32
+ * * datadog-forwarder-ForwarderArn: exported by the 3rd party account modules [Datadog-forwarder](https://github.com/DataDog/datadog-serverless-functions/releases)
33
+ * * custom-resource-datadog-logforwarder-function-arn: exported by the deprecated custom account module [datadog-integration](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/datadog-integration/browse).
34
+ *
35
+ * @defaultValue {@link AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN}
36
+ */
37
+ readonly datadogLogForwarderLambdaArn?: string;
29
38
  }
30
39
  /**
31
40
  * # WARNING: This construct is still in the beta phase.
@@ -49,5 +58,6 @@ export interface EcsAbruptlyStoppedMonitorProps {
49
58
  * {@link https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html}.
50
59
  */
51
60
  export declare class AwsEcsAbruptlyStoppedMonitor extends Construct {
61
+ static readonly DEFAULT_LOG_FORWARDER_ARN = "datadog-forwarder-ForwarderArn";
52
62
  constructor(scope: Construct, id: string, props: EcsAbruptlyStoppedMonitorProps);
53
63
  }
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.AwsEcsAbruptlyStoppedMonitor = void 0;
5
+ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
+ const path = require("path");
7
+ const cdk = require("aws-cdk-lib");
8
+ const constructs_1 = require("constructs");
9
+ const datadogv2_1 = require("../../../datadogv2");
10
+ const rio_claidometer_1 = require("../../../rio-claidometer");
11
+ /**
12
+ * # WARNING: This construct is still in the beta phase.
13
+ *
14
+ * The construct creates monitoring for detecting ECS containers that were stopped abruptly by AWS for reasons such as,
15
+ * out of memory, or failed health checks.
16
+ *
17
+ * This monitor adds transparency to such cases, which otherwise would happen without being noticed and could escalate
18
+ * to bigger issues, like a service that requires more resources to run properly.
19
+ *
20
+ * The construct will consume the ECS events and send them to a CloudWatch log group, which are forwarded to Datadog,
21
+ * allowing better analyses since AWS keeps the stopped task details for only one hour and will be used to create a
22
+ * monitor.
23
+ *
24
+ * Contributions are more than welcome, please get in touch with Team Outbound to ensure compatibility.
25
+ *
26
+ * This construct was based on an AWS blog post about ECS anomaly detection, see here:
27
+ * {@link https://aws.amazon.com/blogs/containers/amazon-elastic-container-service-anomaly-detection-using-amazon-eventbridge/}.
28
+ *
29
+ * More details on the AWS ECS events can be found here:
30
+ * {@link https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html}.
31
+ */
32
+ class AwsEcsAbruptlyStoppedMonitor extends constructs_1.Construct {
33
+ constructor(scope, id, props) {
34
+ super(scope, id);
35
+ const ecsStateChangeLogGroup = new cdk.aws_logs.LogGroup(this, 'EcsStateChangeLogGroup');
36
+ new cdk.aws_logs.LogRetention(this, 'EcsStateChangeLogRetention', {
37
+ logGroupName: ecsStateChangeLogGroup.logGroupName,
38
+ retention: 3,
39
+ });
40
+ // Rule to cover all clusters status changes
41
+ new cdk.aws_events.Rule(this, 'EcsStateChangeRule', {
42
+ eventPattern: {
43
+ source: ['aws.ecs'],
44
+ detailType: ['ECS Task State Change', 'ECS Container Instance State Change', 'ECS Service Action'],
45
+ detail: {
46
+ desiredStatus: ['STOPPED'],
47
+ lastStatus: ['STOPPED'],
48
+ ...(props.clusterArn && { clusterArn: [props.clusterArn] }),
49
+ },
50
+ },
51
+ targets: [new cdk.aws_events_targets.CloudWatchLogGroup(ecsStateChangeLogGroup)],
52
+ });
53
+ const logForwarderLambda = cdk.aws_lambda.Function.fromFunctionAttributes(this, 'EcsStateChangeLogForwarderLambda', {
54
+ functionArn: cdk.Fn.importValue(props.datadogLogForwarderLambdaArn ?? AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN),
55
+ sameEnvironment: true,
56
+ });
57
+ new cdk.aws_logs.SubscriptionFilter(this, 'EcsStateChangeLogFilter', {
58
+ destination: new cdk.aws_logs_destinations.LambdaDestination(logForwarderLambda),
59
+ filterPattern: cdk.aws_logs.FilterPattern.anyTerm('Container killed due to', 'Task failed container health checks'),
60
+ logGroup: ecsStateChangeLogGroup,
61
+ });
62
+ // After being migrated to the new version it can be added to the CLAID construct repository
63
+ new datadogv2_1.DatadogMonitor(this, 'EcsStateChangeLogGroupMonitor', {
64
+ name: 'Unexpected ECS status changes',
65
+ serviceName: props.serviceName,
66
+ monitorType: datadogv2_1.DatadogMonitorQueryAlertType.LOG_ALERT,
67
+ query: `logs("account_id:${cdk.Stack.of(this).account} @aws.awslogs.logGroup:\"${ecsStateChangeLogGroup.logGroupName}\"").index("*").rollup("count").last("5m") >= 1`,
68
+ message: '{{#is_alert}}There are unexpected ECS status changes in the account ' +
69
+ '{{log.tags.account_id}}, more details here {{log.link}} {{/is_alert}}',
70
+ priority: props.priority ?? datadogv2_1.DatadogMonitor.DEFAULT_PRIORITY,
71
+ notification: props.notification,
72
+ });
73
+ addClaidometer(this);
74
+ }
75
+ }
76
+ exports.AwsEcsAbruptlyStoppedMonitor = AwsEcsAbruptlyStoppedMonitor;
77
+ _a = JSII_RTTI_SYMBOL_1;
78
+ AwsEcsAbruptlyStoppedMonitor[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor", version: "0.0.0" };
79
+ AwsEcsAbruptlyStoppedMonitor.DEFAULT_LOG_FORWARDER_ARN = 'datadog-forwarder-ForwarderArn';
80
+ function addClaidometer(scope) {
81
+ const [feature, packageName] = __dirname.split(path.sep).reverse();
82
+ new rio_claidometer_1.Claidometer(scope, 'Claidometer', {
83
+ product: rio_claidometer_1.ClaidometerProduct.CDK_CONTRIBUTION,
84
+ packageName,
85
+ feature,
86
+ version: '0.0.3',
87
+ });
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLW91dGJvdW5kLW9yZGVyLWJvb2svYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IvYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsbUNBQW1DO0FBQ25DLDJDQUF1QztBQUV2QyxrREFBaUc7QUFDakcsOERBQTJFO0FBOEMzRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxNQUFhLDRCQUE2QixTQUFRLHNCQUFTO0lBSXpELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBcUM7UUFDN0UsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLHNCQUFzQixHQUFHLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLHdCQUF3QixDQUFDLENBQUM7UUFFekYsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsNEJBQTRCLEVBQUU7WUFDaEUsWUFBWSxFQUFFLHNCQUFzQixDQUFDLFlBQVk7WUFDakQsU0FBUyxFQUFFLENBQUM7U0FDYixDQUFDLENBQUM7UUFFSCw0Q0FBNEM7UUFDNUMsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDbEQsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxDQUFDLFNBQVMsQ0FBQztnQkFDbkIsVUFBVSxFQUFFLENBQUMsdUJBQXVCLEVBQUUscUNBQXFDLEVBQUUsb0JBQW9CLENBQUM7Z0JBQ2xHLE1BQU0sRUFBRTtvQkFDTixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUM7b0JBQzFCLFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDdkIsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztpQkFDNUQ7YUFDRjtZQUNELE9BQU8sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDakYsQ0FBQyxDQUFDO1FBRUgsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FDdkUsSUFBSSxFQUNKLGtDQUFrQyxFQUNsQztZQUNFLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLElBQUksNEJBQTRCLENBQUMseUJBQXlCLENBQUM7WUFDN0gsZUFBZSxFQUFFLElBQUk7U0FDdEIsQ0FDRixDQUFDO1FBRUYsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUNuRSxXQUFXLEVBQUUsSUFBSSxHQUFHLENBQUMscUJBQXFCLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUM7WUFDaEYsYUFBYSxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FDL0MseUJBQXlCLEVBQ3pCLHFDQUFxQyxDQUN0QztZQUNELFFBQVEsRUFBRSxzQkFBc0I7U0FDakMsQ0FBQyxDQUFDO1FBRUgsNEZBQTRGO1FBQzVGLElBQUksMEJBQWMsQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7WUFDeEQsSUFBSSxFQUFFLCtCQUErQjtZQUNyQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsV0FBVyxFQUFFLHdDQUE0QixDQUFDLFNBQVM7WUFDbkQsS0FBSyxFQUFFLG9CQUFvQixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLDRCQUNuRCxzQkFBc0IsQ0FBQyxZQUN6QixpREFBaUQ7WUFDakQsT0FBTyxFQUFFLHNFQUFzRTtnQkFDckUsdUVBQXVFO1lBQ2pGLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLDBCQUFjLENBQUMsZ0JBQWdCO1lBQzNELFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtTQUNqQyxDQUFDLENBQUM7UUFFSCxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkIsQ0FBQzs7QUE3REgsb0VBOERDOzs7QUE1RGlCLHNEQUF5QixHQUFHLGdDQUFnQyxDQUFDO0FBOEQvRSxTQUFTLGNBQWMsQ0FBQyxLQUEyQjtJQUNqRCxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25FLElBQUksNkJBQVcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFO1FBQ3BDLE9BQU8sRUFBRSxvQ0FBa0IsQ0FBQyxnQkFBZ0I7UUFDNUMsV0FBVztRQUNYLE9BQU87UUFDUCxPQUFPLEVBQUUsT0FBTztLQUNqQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZSwgSU5vdGlmaWNhdGlvbiB9IGZyb20gJy4uLy4uLy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgeyBDbGFpZG9tZXRlciwgQ2xhaWRvbWV0ZXJQcm9kdWN0IH0gZnJvbSAnLi4vLi4vLi4vcmlvLWNsYWlkb21ldGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBFY3NBYnJ1cHRseVN0b3BwZWRNb25pdG9yUHJvcHMge1xuXG4gIC8qKlxuICAgICAqIFRoZSBuYW1lIG9mIHRoZSBzZXJ2aWNlIHRvIHdoaWNoIHRoZSBtb25pdG9yIGJlbG9uZ3MuXG4gICAgICpcbiAgICAgKiBVc2VkIHRvIGdlbmVyYXRlIHRoZSBtb25pdG9yIG5hbWUgYXMgd2VsbCBhIGFwcGx5IHRoZSBgc2VydmljZWAgdGFnLlxuICAgICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgICAqIFRvIGV4cGxpY2l0bHkgZGlzYWJsZSBub3RpZmljYXRpb25zIHVzZSB7QGxpbmsgTm9Ob3RpZmljYXRpb259LlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSB7QGxpbmsgRGVmYXVsdFNsYWNrTm90aWZpY2F0aW9ufVxuICAgICAqXG4gICAgICogQHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9tb25pdG9ycy9ub3RpZnlcbiAgICAgKi9cblxuICByZWFkb25seSBub3RpZmljYXRpb24/OiBJTm90aWZpY2F0aW9uO1xuXG4gIC8qKlxuICAgICAqIFRoZSBhbGVydCBwcmlvcml0eSBvZiB0aGUgbW9uaXRvclxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSB7QGxpbmsgRGF0YWRvZ01vbml0b3IuREVGQVVMVF9QUklPUklUWX1cbiAgICAgKi9cblxuICByZWFkb25seSBwcmlvcml0eT86IG51bWJlcjtcblxuICAvKipcbiAgICAgKiBBUk4gb2YgdGhlIGNsdXN0ZXIgdGhhdCBzaG91bGQgYmUgbW9uaXRvcmVkLCBjb25zdW1pbmcgb25seSBFQ1MgZXZlbnRzIGJlbG9uZ2luZyB0byB0aGUgY2x1c3Rlci5cbiAgICAgKiBJZiBubyBjbHVzdGVyIGlzIHByb3ZpZGVkLCB0aGUgbW9uaXRvciB3aWxsIGNvbnN1bWUgRUNTIGV2ZW50cyBmb3IgYWxsIGNsdXN0ZXJzIHdpdGhpbiB0aGUgYWNjb3VudC5cbiAgICAgKi9cbiAgcmVhZG9ubHkgY2x1c3RlckFybj86IHN0cmluZztcblxuICAvKipcbiAgICAgKiBBUk4gb2YgdGhlIERhdGFkb2cgZm9yd2FyZGVyIExhbWJkYSBmdW5jdGlvbiB1c2VkIHRvIGZvcndhcmQgdGhlIENsb3VkV2F0Y2ggbG9ncyB0byBEYXRhZG9nLlxuICAgICAqIEN1cnJlbnRseSwgdHdvIHZhbHVlcyBhcmUga25vdyB0byBiZSBleHBvcnRlZCBieSB0aGUgYWNjb3VudCBtb2R1bGVzOlxuICAgICAqICogZGF0YWRvZy1mb3J3YXJkZXItRm9yd2FyZGVyQXJuOiBleHBvcnRlZCBieSB0aGUgM3JkIHBhcnR5IGFjY291bnQgbW9kdWxlcyBbRGF0YWRvZy1mb3J3YXJkZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9EYXRhRG9nL2RhdGFkb2ctc2VydmVybGVzcy1mdW5jdGlvbnMvcmVsZWFzZXMpXG4gICAgICogKiBjdXN0b20tcmVzb3VyY2UtZGF0YWRvZy1sb2dmb3J3YXJkZXItZnVuY3Rpb24tYXJuOiBleHBvcnRlZCBieSB0aGUgZGVwcmVjYXRlZCBjdXN0b20gYWNjb3VudCBtb2R1bGUgW2RhdGFkb2ctaW50ZWdyYXRpb25dKGh0dHBzOi8vYml0YnVja2V0LmNvbGxhYm9yYXRpb24tbWFuLmNvbS9wcm9qZWN0cy9SSU9ERVYvcmVwb3MvZGF0YWRvZy1pbnRlZ3JhdGlvbi9icm93c2UpLlxuICAgICAqXG4gICAgICogQGRlZmF1bHRWYWx1ZSB7QGxpbmsgQXdzRWNzQWJydXB0bHlTdG9wcGVkTW9uaXRvci5ERUZBVUxUX0xPR19GT1JXQVJERVJfQVJOfVxuICAgICAqL1xuICByZWFkb25seSBkYXRhZG9nTG9nRm9yd2FyZGVyTGFtYmRhQXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqICMgV0FSTklORzogVGhpcyBjb25zdHJ1Y3QgaXMgc3RpbGwgaW4gdGhlIGJldGEgcGhhc2UuXG4gKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGVzIG1vbml0b3JpbmcgZm9yIGRldGVjdGluZyBFQ1MgY29udGFpbmVycyB0aGF0IHdlcmUgc3RvcHBlZCBhYnJ1cHRseSBieSBBV1MgZm9yIHJlYXNvbnMgc3VjaCBhcyxcbiAqIG91dCBvZiBtZW1vcnksIG9yIGZhaWxlZCBoZWFsdGggY2hlY2tzLlxuICpcbiAqIFRoaXMgbW9uaXRvciBhZGRzIHRyYW5zcGFyZW5jeSB0byBzdWNoIGNhc2VzLCB3aGljaCBvdGhlcndpc2Ugd291bGQgaGFwcGVuIHdpdGhvdXQgYmVpbmcgbm90aWNlZCBhbmQgY291bGQgZXNjYWxhdGVcbiAqIHRvIGJpZ2dlciBpc3N1ZXMsIGxpa2UgYSBzZXJ2aWNlIHRoYXQgcmVxdWlyZXMgbW9yZSByZXNvdXJjZXMgdG8gcnVuIHByb3Blcmx5LlxuICpcbiAqIFRoZSBjb25zdHJ1Y3Qgd2lsbCBjb25zdW1lIHRoZSBFQ1MgZXZlbnRzIGFuZCBzZW5kIHRoZW0gdG8gYSBDbG91ZFdhdGNoIGxvZyBncm91cCwgd2hpY2ggYXJlIGZvcndhcmRlZCB0byBEYXRhZG9nLFxuICogYWxsb3dpbmcgYmV0dGVyIGFuYWx5c2VzIHNpbmNlIEFXUyBrZWVwcyB0aGUgc3RvcHBlZCB0YXNrIGRldGFpbHMgZm9yIG9ubHkgb25lIGhvdXIgYW5kIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYVxuICogbW9uaXRvci5cbiAqXG4gKiBDb250cmlidXRpb25zIGFyZSBtb3JlIHRoYW4gd2VsY29tZSwgcGxlYXNlIGdldCBpbiB0b3VjaCB3aXRoIFRlYW0gT3V0Ym91bmQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgd2FzIGJhc2VkIG9uIGFuIEFXUyBibG9nIHBvc3QgYWJvdXQgRUNTIGFub21hbHkgZGV0ZWN0aW9uLCBzZWUgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL2NvbnRhaW5lcnMvYW1hem9uLWVsYXN0aWMtY29udGFpbmVyLXNlcnZpY2UtYW5vbWFseS1kZXRlY3Rpb24tdXNpbmctYW1hem9uLWV2ZW50YnJpZGdlL30uXG4gKlxuICogTW9yZSBkZXRhaWxzIG9uIHRoZSBBV1MgRUNTIGV2ZW50cyBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3NfY3dlX2V2ZW50cy5odG1sfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0Vjc0FicnVwdGx5U3RvcHBlZE1vbml0b3IgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0xPR19GT1JXQVJERVJfQVJOID0gJ2RhdGFkb2ctZm9yd2FyZGVyLUZvcndhcmRlckFybic7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVjc0FicnVwdGx5U3RvcHBlZE1vbml0b3JQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBlY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwID0gbmV3IGNkay5hd3NfbG9ncy5Mb2dHcm91cCh0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dHcm91cCcpO1xuXG4gICAgbmV3IGNkay5hd3NfbG9ncy5Mb2dSZXRlbnRpb24odGhpcywgJ0Vjc1N0YXRlQ2hhbmdlTG9nUmV0ZW50aW9uJywge1xuICAgICAgbG9nR3JvdXBOYW1lOiBlY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSxcbiAgICAgIHJldGVudGlvbjogMyxcbiAgICB9KTtcblxuICAgIC8vIFJ1bGUgdG8gY292ZXIgYWxsIGNsdXN0ZXJzIHN0YXR1cyBjaGFuZ2VzXG4gICAgbmV3IGNkay5hd3NfZXZlbnRzLlJ1bGUodGhpcywgJ0Vjc1N0YXRlQ2hhbmdlUnVsZScsIHtcbiAgICAgIGV2ZW50UGF0dGVybjoge1xuICAgICAgICBzb3VyY2U6IFsnYXdzLmVjcyddLFxuICAgICAgICBkZXRhaWxUeXBlOiBbJ0VDUyBUYXNrIFN0YXRlIENoYW5nZScsICdFQ1MgQ29udGFpbmVyIEluc3RhbmNlIFN0YXRlIENoYW5nZScsICdFQ1MgU2VydmljZSBBY3Rpb24nXSxcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgZGVzaXJlZFN0YXR1czogWydTVE9QUEVEJ10sXG4gICAgICAgICAgbGFzdFN0YXR1czogWydTVE9QUEVEJ10sXG4gICAgICAgICAgLi4uKHByb3BzLmNsdXN0ZXJBcm4gJiYgeyBjbHVzdGVyQXJuOiBbcHJvcHMuY2x1c3RlckFybl0gfSksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdGFyZ2V0czogW25ldyBjZGsuYXdzX2V2ZW50c190YXJnZXRzLkNsb3VkV2F0Y2hMb2dHcm91cChlY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwKV0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBsb2dGb3J3YXJkZXJMYW1iZGEgPSBjZGsuYXdzX2xhbWJkYS5GdW5jdGlvbi5mcm9tRnVuY3Rpb25BdHRyaWJ1dGVzKFxuICAgICAgdGhpcyxcbiAgICAgICdFY3NTdGF0ZUNoYW5nZUxvZ0ZvcndhcmRlckxhbWJkYScsXG4gICAgICB7XG4gICAgICAgIGZ1bmN0aW9uQXJuOiBjZGsuRm4uaW1wb3J0VmFsdWUocHJvcHMuZGF0YWRvZ0xvZ0ZvcndhcmRlckxhbWJkYUFybiA/PyBBd3NFY3NBYnJ1cHRseVN0b3BwZWRNb25pdG9yLkRFRkFVTFRfTE9HX0ZPUldBUkRFUl9BUk4pLFxuICAgICAgICBzYW1lRW52aXJvbm1lbnQ6IHRydWUsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICBuZXcgY2RrLmF3c19sb2dzLlN1YnNjcmlwdGlvbkZpbHRlcih0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dGaWx0ZXInLCB7XG4gICAgICBkZXN0aW5hdGlvbjogbmV3IGNkay5hd3NfbG9nc19kZXN0aW5hdGlvbnMuTGFtYmRhRGVzdGluYXRpb24obG9nRm9yd2FyZGVyTGFtYmRhKSxcbiAgICAgIGZpbHRlclBhdHRlcm46IGNkay5hd3NfbG9ncy5GaWx0ZXJQYXR0ZXJuLmFueVRlcm0oXG4gICAgICAgICdDb250YWluZXIga2lsbGVkIGR1ZSB0bycsXG4gICAgICAgICdUYXNrIGZhaWxlZCBjb250YWluZXIgaGVhbHRoIGNoZWNrcycsXG4gICAgICApLFxuICAgICAgbG9nR3JvdXA6IGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAsXG4gICAgfSk7XG5cbiAgICAvLyBBZnRlciBiZWluZyBtaWdyYXRlZCB0byB0aGUgbmV3IHZlcnNpb24gaXQgY2FuIGJlIGFkZGVkIHRvIHRoZSBDTEFJRCBjb25zdHJ1Y3QgcmVwb3NpdG9yeVxuICAgIG5ldyBEYXRhZG9nTW9uaXRvcih0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dHcm91cE1vbml0b3InLCB7XG4gICAgICBuYW1lOiAnVW5leHBlY3RlZCBFQ1Mgc3RhdHVzIGNoYW5nZXMnLFxuICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuTE9HX0FMRVJULFxuICAgICAgcXVlcnk6IGBsb2dzKFwiYWNjb3VudF9pZDoke2Nkay5TdGFjay5vZih0aGlzKS5hY2NvdW50fSBAYXdzLmF3c2xvZ3MubG9nR3JvdXA6XFxcIiR7XG4gICAgICAgIGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAubG9nR3JvdXBOYW1lXG4gICAgICB9XFxcIlwiKS5pbmRleChcIipcIikucm9sbHVwKFwiY291bnRcIikubGFzdChcIjVtXCIpID49IDFgLFxuICAgICAgbWVzc2FnZTogJ3t7I2lzX2FsZXJ0fX1UaGVyZSBhcmUgdW5leHBlY3RlZCBFQ1Mgc3RhdHVzIGNoYW5nZXMgaW4gdGhlIGFjY291bnQgJyArXG4gICAgICAgICAgICAgICAgJ3t7bG9nLnRhZ3MuYWNjb3VudF9pZH19LCBtb3JlIGRldGFpbHMgaGVyZSB7e2xvZy5saW5rfX0ge3svaXNfYWxlcnR9fScsXG4gICAgICBwcmlvcml0eTogcHJvcHMucHJpb3JpdHkgPz8gRGF0YWRvZ01vbml0b3IuREVGQVVMVF9QUklPUklUWSxcbiAgICAgIG5vdGlmaWNhdGlvbjogcHJvcHMubm90aWZpY2F0aW9uLFxuICAgIH0pO1xuXG4gICAgYWRkQ2xhaWRvbWV0ZXIodGhpcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQ2xhaWRvbWV0ZXIoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0KSB7XG4gIGNvbnN0IFtmZWF0dXJlLCBwYWNrYWdlTmFtZV0gPSBfX2Rpcm5hbWUuc3BsaXQocGF0aC5zZXApLnJldmVyc2UoKTtcbiAgbmV3IENsYWlkb21ldGVyKHNjb3BlLCAnQ2xhaWRvbWV0ZXInLCB7XG4gICAgcHJvZHVjdDogQ2xhaWRvbWV0ZXJQcm9kdWN0LkNES19DT05UUklCVVRJT04sXG4gICAgcGFja2FnZU5hbWUsXG4gICAgZmVhdHVyZSxcbiAgICB2ZXJzaW9uOiAnMC4wLjMnLFxuICB9KTtcbn1cbiJdfQ==
@@ -15,4 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./aws-ecs-abruptly-stopped-monitor"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLW91Ym91dC1vcmRlci1ib29rL2F3cy1lY3MtYWJydXB0bHktc3RvcHBlZC1tb25pdG9yL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxRUFBbUQiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2F3cy1lY3MtYWJydXB0bHktc3RvcHBlZC1tb25pdG9yJztcbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLW91dGJvdW5kLW9yZGVyLWJvb2svYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHFFQUFtRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3InO1xuIl19
package/lib/index.d.ts CHANGED
@@ -18,7 +18,7 @@ export * from './contributions/team-transport-two/datadog';
18
18
  export * from './contributions/team-transport-two/pipeline';
19
19
  export * from './contributions/team-claid/aws-backup-monitoring';
20
20
  export * from './contributions/team-claid/datadog-usage-monitoring';
21
- export * from './contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor';
21
+ export * from './contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor';
22
22
  export * from './backup';
23
23
  export * as backup from './backup';
24
24
  export * from './contributions/smart-route/gitlab-runner';
package/lib/index.js CHANGED
@@ -35,8 +35,8 @@ __exportStar(require("./contributions/team-transport-two/datadog"), exports);
35
35
  __exportStar(require("./contributions/team-transport-two/pipeline"), exports);
36
36
  __exportStar(require("./contributions/team-claid/aws-backup-monitoring"), exports);
37
37
  __exportStar(require("./contributions/team-claid/datadog-usage-monitoring"), exports);
38
- __exportStar(require("./contributions/team-oubout-order-book/aws-ecs-abruptly-stopped-monitor"), exports);
38
+ __exportStar(require("./contributions/team-outbound-order-book/aws-ecs-abruptly-stopped-monitor"), exports);
39
39
  __exportStar(require("./backup"), exports);
40
40
  exports.backup = require("./backup");
41
41
  __exportStar(require("./contributions/smart-route/gitlab-runner"), exports);
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkI7QUFFM0IsNkNBQTJDO0FBRTNDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsb0RBQWtDO0FBRWxDLGdFQUE4QztBQUM5Qyx1Q0FBcUM7QUFFckMseUVBQXVEO0FBQ3ZELDhFQUE0RDtBQUM1RCwrREFBNkM7QUFFN0MsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUVqQyw0Q0FBMEI7QUFDMUIsdUNBQXFDO0FBQ3JDLDJDQUF5QztBQUV6QywwRUFBd0Q7QUFFeEQsNkVBQTJEO0FBQzNELDhFQUE0RDtBQUU1RCxtRkFBaUU7QUFDakUsc0ZBQW9FO0FBRXBFLDBHQUF3RjtBQUV4RiwyQ0FBeUI7QUFDekIscUNBQW1DO0FBRW5DLDRFQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwnO1xuXG5leHBvcnQgKiBhcyB3YXRjaGZ1bHYyIGZyb20gJy4vd2F0Y2hmdWx2Mic7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxhbmRpbmctem9uZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jpby1sb2FkLWJhbGFuY2VyJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWNsYWlkb21ldGVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuZXhwb3J0ICogYXMgZmFyZ2F0ZSBmcm9tICcuL2ZhcmdhdGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iaXRidWNrZXQtc291cmNlLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iYWNrdXAtc2VjcmV0cy1yZXN0b3JlLXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLXBpcGVsaW5lLXR5cGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2thZmthJztcbmV4cG9ydCAqIGFzIGthZmthIGZyb20gJy4va2Fma2EnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZ3YyIGZyb20gJy4vZGF0YWRvZ3YyJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL2NvcC1mcm9udGVuZC9jbG91ZGZyb250JztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9kYXRhZG9nJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS1jbGFpZC9hd3MtYmFja3VwLW1vbml0b3JpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tY2xhaWQvZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tb3Vib3V0LW9yZGVyLWJvb2svYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3InO1xuXG5leHBvcnQgKiBmcm9tICcuL2JhY2t1cCc7XG5leHBvcnQgKiBhcyBiYWNrdXAgZnJvbSAnLi9iYWNrdXAnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvc21hcnQtcm91dGUvZ2l0bGFiLXJ1bm5lcic7XG4iXX0=
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkI7QUFFM0IsNkNBQTJDO0FBRTNDLHFEQUFtQztBQUNuQyxzREFBb0M7QUFDcEMsb0RBQWtDO0FBRWxDLGdFQUE4QztBQUM5Qyx1Q0FBcUM7QUFFckMseUVBQXVEO0FBQ3ZELDhFQUE0RDtBQUM1RCwrREFBNkM7QUFFN0MsMENBQXdCO0FBQ3hCLG1DQUFpQztBQUVqQyw0Q0FBMEI7QUFDMUIsdUNBQXFDO0FBQ3JDLDJDQUF5QztBQUV6QywwRUFBd0Q7QUFFeEQsNkVBQTJEO0FBQzNELDhFQUE0RDtBQUU1RCxtRkFBaUU7QUFDakUsc0ZBQW9FO0FBRXBFLDRHQUEwRjtBQUUxRiwyQ0FBeUI7QUFDekIscUNBQW1DO0FBRW5DLDRFQUEwRCIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vd2F0Y2hmdWwnO1xuXG5leHBvcnQgKiBhcyB3YXRjaGZ1bHYyIGZyb20gJy4vd2F0Y2hmdWx2Mic7XG5cbmV4cG9ydCAqIGZyb20gJy4vcmlvLWxhbmRpbmctem9uZSc7XG5leHBvcnQgKiBmcm9tICcuL3Jpby1sb2FkLWJhbGFuY2VyJztcbmV4cG9ydCAqIGZyb20gJy4vcmlvLWNsYWlkb21ldGVyJztcblxuZXhwb3J0ICogZnJvbSAnLi9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UnO1xuZXhwb3J0ICogYXMgZmFyZ2F0ZSBmcm9tICcuL2ZhcmdhdGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iaXRidWNrZXQtc291cmNlLWFjdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVsaW5lL3Jpby1iYWNrdXAtc2VjcmV0cy1yZXN0b3JlLXN0YWdlJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZWxpbmUvcmlvLXBpcGVsaW5lLXR5cGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2thZmthJztcbmV4cG9ydCAqIGFzIGthZmthIGZyb20gJy4va2Fma2EnO1xuXG5leHBvcnQgKiBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuZXhwb3J0ICogYXMgZGF0YWRvZ3YyIGZyb20gJy4vZGF0YWRvZ3YyJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL2NvcC1mcm9udGVuZC9jbG91ZGZyb250JztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tdHJhbnNwb3J0LXR3by9kYXRhZG9nJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy90ZWFtLXRyYW5zcG9ydC10d28vcGlwZWxpbmUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2NvbnRyaWJ1dGlvbnMvdGVhbS1jbGFpZC9hd3MtYmFja3VwLW1vbml0b3JpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tY2xhaWQvZGF0YWRvZy11c2FnZS1tb25pdG9yaW5nJztcblxuZXhwb3J0ICogZnJvbSAnLi9jb250cmlidXRpb25zL3RlYW0tb3V0Ym91bmQtb3JkZXItYm9vay9hd3MtZWNzLWFicnVwdGx5LXN0b3BwZWQtbW9uaXRvcic7XG5cbmV4cG9ydCAqIGZyb20gJy4vYmFja3VwJztcbmV4cG9ydCAqIGFzIGJhY2t1cCBmcm9tICcuL2JhY2t1cCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vY29udHJpYnV0aW9ucy9zbWFydC1yb3V0ZS9naXRsYWItcnVubmVyJztcbiJdfQ==
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  ],
16
16
  "main": "lib/index.js",
17
17
  "license": "Apache-2.0",
18
- "version": "6.3.2",
18
+ "version": "6.4.1",
19
19
  "types": "lib/index.d.ts",
20
20
  "stability": "stable",
21
21
  "exports": {
package/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "6.3.2"
2
+ "version": "6.4.1"
3
3
  }
@@ -1,76 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.AwsEcsAbruptlyStoppedMonitor = void 0;
5
- const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const cdk = require("aws-cdk-lib");
7
- const constructs_1 = require("constructs");
8
- const datadogv2_1 = require("../../../datadogv2");
9
- /**
10
- * # WARNING: This construct is still in the beta phase.
11
- *
12
- * The construct creates monitoring for detecting ECS containers that were stopped abruptly by AWS for reasons such as,
13
- * out of memory, or failed health checks.
14
- *
15
- * This monitor adds transparency to such cases, which otherwise would happen without being noticed and could escalate
16
- * to bigger issues, like a service that requires more resources to run properly.
17
- *
18
- * The construct will consume the ECS events and send them to a CloudWatch log group, which are forwarded to Datadog,
19
- * allowing better analyses since AWS keeps the stopped task details for only one hour and will be used to create a
20
- * monitor.
21
- *
22
- * Contributions are more than welcome, please get in touch with Team Outbound to ensure compatibility.
23
- *
24
- * This construct was based on an AWS blog post about ECS anomaly detection, see here:
25
- * {@link https://aws.amazon.com/blogs/containers/amazon-elastic-container-service-anomaly-detection-using-amazon-eventbridge/}.
26
- *
27
- * More details on the AWS ECS events can be found here:
28
- * {@link https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs_cwe_events.html}.
29
- */
30
- class AwsEcsAbruptlyStoppedMonitor extends constructs_1.Construct {
31
- constructor(scope, id, props) {
32
- super(scope, id);
33
- const ecsStateChangeLogGroup = new cdk.aws_logs.LogGroup(this, 'EcsStateChangeLogGroup');
34
- new cdk.aws_logs.LogRetention(this, 'EcsStateChangeLogRetention', {
35
- logGroupName: ecsStateChangeLogGroup.logGroupName,
36
- retention: 3,
37
- });
38
- // Rule to cover all clusters status changes
39
- new cdk.aws_events.Rule(this, 'EcsStateChangeRule', {
40
- eventPattern: {
41
- source: ['aws.ecs'],
42
- detailType: ['ECS Task State Change', 'ECS Container Instance State Change', 'ECS Service Action'],
43
- detail: {
44
- desiredStatus: ['STOPPED'],
45
- lastStatus: ['STOPPED'],
46
- ...(props.clusterArn && { clusterArn: [props.clusterArn] }),
47
- },
48
- },
49
- targets: [new cdk.aws_events_targets.CloudWatchLogGroup(ecsStateChangeLogGroup)],
50
- });
51
- const logForwarderLambda = cdk.aws_lambda.Function.fromFunctionAttributes(this, 'EcsStateChangeLogForwarderLambda', {
52
- functionArn: cdk.Fn.importValue('datadog-forwarder-ForwarderArn'),
53
- sameEnvironment: true,
54
- });
55
- new cdk.aws_logs.SubscriptionFilter(this, 'EcsStateChangeLogFilter', {
56
- destination: new cdk.aws_logs_destinations.LambdaDestination(logForwarderLambda),
57
- filterPattern: cdk.aws_logs.FilterPattern.anyTerm('Container killed due to', 'Task failed container health checks'),
58
- logGroup: ecsStateChangeLogGroup,
59
- });
60
- // After being migrated to the new version it can be added to the CLAID construct repository
61
- new datadogv2_1.DatadogMonitor(this, 'EcsStateChangeLogGroupMonitor', {
62
- name: 'Unexpected ECS status changes',
63
- serviceName: props.serviceName,
64
- monitorType: datadogv2_1.DatadogMonitorQueryAlertType.LOG_ALERT,
65
- query: `logs("account_id:${cdk.Stack.of(this).account} @aws.awslogs.logGroup:\"${ecsStateChangeLogGroup.logGroupName}\"").index("*").rollup("count").last("5m") >= 1`,
66
- message: '{{#is_alert}}There are unexpected ECS status changes in the account ' +
67
- '{{log.tags.account_id}}, more details here {{log.link}} {{/is_alert}}',
68
- priority: props.priority ?? datadogv2_1.DatadogMonitor.DEFAULT_PRIORITY,
69
- notification: props.notification,
70
- });
71
- }
72
- }
73
- exports.AwsEcsAbruptlyStoppedMonitor = AwsEcsAbruptlyStoppedMonitor;
74
- _a = JSII_RTTI_SYMBOL_1;
75
- AwsEcsAbruptlyStoppedMonitor[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.AwsEcsAbruptlyStoppedMonitor", version: "0.0.0" };
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWVjcy1hYnJ1cHRseS1zdG9wcGVkLW1vbml0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29udHJpYnV0aW9ucy90ZWFtLW91Ym91dC1vcmRlci1ib29rL2F3cy1lY3MtYWJydXB0bHktc3RvcHBlZC1tb25pdG9yL2F3cy1lY3MtYWJydXB0bHktc3RvcHBlZC1tb25pdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBQ25DLDJDQUF1QztBQUN2QyxrREFBaUc7QUFvQ2pHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQWEsNEJBQTZCLFNBQVEsc0JBQVM7SUFDekQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFxQztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztRQUV6RixJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSw0QkFBNEIsRUFBRTtZQUNoRSxZQUFZLEVBQUUsc0JBQXNCLENBQUMsWUFBWTtZQUNqRCxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUMsQ0FBQztRQUVILDRDQUE0QztRQUM1QyxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUNsRCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUNuQixVQUFVLEVBQUUsQ0FBQyx1QkFBdUIsRUFBRSxxQ0FBcUMsRUFBRSxvQkFBb0IsQ0FBQztnQkFDbEcsTUFBTSxFQUFFO29CQUNOLGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQztvQkFDMUIsVUFBVSxFQUFFLENBQUMsU0FBUyxDQUFDO29CQUN2QixHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO2lCQUM1RDthQUNGO1lBQ0QsT0FBTyxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCLENBQUMsQ0FBQztTQUNqRixDQUFDLENBQUM7UUFFSCxNQUFNLGtCQUFrQixHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUN2RSxJQUFJLEVBQ0osa0NBQWtDLEVBQ2xDO1lBQ0UsV0FBVyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLGdDQUFnQyxDQUFDO1lBQ2pFLGVBQWUsRUFBRSxJQUFJO1NBQ3RCLENBQ0YsQ0FBQztRQUVGLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUseUJBQXlCLEVBQUU7WUFDbkUsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDLHFCQUFxQixDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDO1lBQ2hGLGFBQWEsRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQy9DLHlCQUF5QixFQUN6QixxQ0FBcUMsQ0FDdEM7WUFDRCxRQUFRLEVBQUUsc0JBQXNCO1NBQ2pDLENBQUMsQ0FBQztRQUVILDRGQUE0RjtRQUM1RixJQUFJLDBCQUFjLENBQUMsSUFBSSxFQUFFLCtCQUErQixFQUFFO1lBQ3hELElBQUksRUFBRSwrQkFBK0I7WUFDckMsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO1lBQzlCLFdBQVcsRUFBRSx3Q0FBNEIsQ0FBQyxTQUFTO1lBQ25ELEtBQUssRUFBRSxvQkFBb0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyw0QkFDbkQsc0JBQXNCLENBQUMsWUFDekIsaURBQWlEO1lBQ2pELE9BQU8sRUFBRSxzRUFBc0U7Z0JBQ3JFLHVFQUF1RTtZQUNqRixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSwwQkFBYyxDQUFDLGdCQUFnQjtZQUMzRCxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7U0FDakMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF4REgsb0VBeURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgRGF0YWRvZ01vbml0b3IsIERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUsIElOb3RpZmljYXRpb24gfSBmcm9tICcuLi8uLi8uLi9kYXRhZG9ndjInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVjc0FicnVwdGx5U3RvcHBlZE1vbml0b3JQcm9wcyB7XG5cbiAgLyoqXG4gICAgICogVGhlIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gd2hpY2ggdGhlIG1vbml0b3IgYmVsb25ncy5cbiAgICAgKlxuICAgICAqIFVzZWQgdG8gZ2VuZXJhdGUgdGhlIG1vbml0b3IgbmFtZSBhcyB3ZWxsIGEgYXBwbHkgdGhlIGBzZXJ2aWNlYCB0YWcuXG4gICAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAgICogVG8gZXhwbGljaXRseSBkaXNhYmxlIG5vdGlmaWNhdGlvbnMgdXNlIHtAbGluayBOb05vdGlmaWNhdGlvbn0uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIHtAbGluayBEZWZhdWx0U2xhY2tOb3RpZmljYXRpb259XG4gICAgICpcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL21vbml0b3JzL25vdGlmeVxuICAgICAqL1xuXG4gIHJlYWRvbmx5IG5vdGlmaWNhdGlvbj86IElOb3RpZmljYXRpb247XG5cbiAgLyoqXG4gICAgICogVGhlIGFsZXJ0IHByaW9yaXR5IG9mIHRoZSBtb25pdG9yXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdFZhbHVlIHtAbGluayBEYXRhZG9nTW9uaXRvci5ERUZBVUxUX1BSSU9SSVRZfVxuICAgICAqL1xuXG4gIHJlYWRvbmx5IHByaW9yaXR5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgICAqIEFSTiBvZiB0aGUgY2x1c3RlciB0aGF0IHNob3VsZCBiZSBtb25pdG9yZWQsIGNvbnN1bWluZyBvbmx5IEVDUyBldmVudHMgYmVsb25naW5nIHRvIHRoZSBjbHVzdGVyLlxuICAgICAqIElmIG5vIGNsdXN0ZXIgaXMgcHJvdmlkZWQsIHRoZSBtb25pdG9yIHdpbGwgY29uc3VtZSBFQ1MgZXZlbnRzIGZvciBhbGwgY2x1c3RlcnMgd2l0aGluIHRoZSBhY2NvdW50LlxuICAgICAqL1xuICByZWFkb25seSBjbHVzdGVyQXJuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqICMgV0FSTklORzogVGhpcyBjb25zdHJ1Y3QgaXMgc3RpbGwgaW4gdGhlIGJldGEgcGhhc2UuXG4gKlxuICogVGhlIGNvbnN0cnVjdCBjcmVhdGVzIG1vbml0b3JpbmcgZm9yIGRldGVjdGluZyBFQ1MgY29udGFpbmVycyB0aGF0IHdlcmUgc3RvcHBlZCBhYnJ1cHRseSBieSBBV1MgZm9yIHJlYXNvbnMgc3VjaCBhcyxcbiAqIG91dCBvZiBtZW1vcnksIG9yIGZhaWxlZCBoZWFsdGggY2hlY2tzLlxuICpcbiAqIFRoaXMgbW9uaXRvciBhZGRzIHRyYW5zcGFyZW5jeSB0byBzdWNoIGNhc2VzLCB3aGljaCBvdGhlcndpc2Ugd291bGQgaGFwcGVuIHdpdGhvdXQgYmVpbmcgbm90aWNlZCBhbmQgY291bGQgZXNjYWxhdGVcbiAqIHRvIGJpZ2dlciBpc3N1ZXMsIGxpa2UgYSBzZXJ2aWNlIHRoYXQgcmVxdWlyZXMgbW9yZSByZXNvdXJjZXMgdG8gcnVuIHByb3Blcmx5LlxuICpcbiAqIFRoZSBjb25zdHJ1Y3Qgd2lsbCBjb25zdW1lIHRoZSBFQ1MgZXZlbnRzIGFuZCBzZW5kIHRoZW0gdG8gYSBDbG91ZFdhdGNoIGxvZyBncm91cCwgd2hpY2ggYXJlIGZvcndhcmRlZCB0byBEYXRhZG9nLFxuICogYWxsb3dpbmcgYmV0dGVyIGFuYWx5c2VzIHNpbmNlIEFXUyBrZWVwcyB0aGUgc3RvcHBlZCB0YXNrIGRldGFpbHMgZm9yIG9ubHkgb25lIGhvdXIgYW5kIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgYVxuICogbW9uaXRvci5cbiAqXG4gKiBDb250cmlidXRpb25zIGFyZSBtb3JlIHRoYW4gd2VsY29tZSwgcGxlYXNlIGdldCBpbiB0b3VjaCB3aXRoIFRlYW0gT3V0Ym91bmQgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkuXG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgd2FzIGJhc2VkIG9uIGFuIEFXUyBibG9nIHBvc3QgYWJvdXQgRUNTIGFub21hbHkgZGV0ZWN0aW9uLCBzZWUgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2F3cy5hbWF6b24uY29tL2Jsb2dzL2NvbnRhaW5lcnMvYW1hem9uLWVsYXN0aWMtY29udGFpbmVyLXNlcnZpY2UtYW5vbWFseS1kZXRlY3Rpb24tdXNpbmctYW1hem9uLWV2ZW50YnJpZGdlL30uXG4gKlxuICogTW9yZSBkZXRhaWxzIG9uIHRoZSBBV1MgRUNTIGV2ZW50cyBjYW4gYmUgZm91bmQgaGVyZTpcbiAqIHtAbGluayBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9lY3NfY3dlX2V2ZW50cy5odG1sfS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF3c0Vjc0FicnVwdGx5U3RvcHBlZE1vbml0b3IgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRWNzQWJydXB0bHlTdG9wcGVkTW9uaXRvclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAgPSBuZXcgY2RrLmF3c19sb2dzLkxvZ0dyb3VwKHRoaXMsICdFY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwJyk7XG5cbiAgICBuZXcgY2RrLmF3c19sb2dzLkxvZ1JldGVudGlvbih0aGlzLCAnRWNzU3RhdGVDaGFuZ2VMb2dSZXRlbnRpb24nLCB7XG4gICAgICBsb2dHcm91cE5hbWU6IGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXAubG9nR3JvdXBOYW1lLFxuICAgICAgcmV0ZW50aW9uOiAzLFxuICAgIH0pO1xuXG4gICAgLy8gUnVsZSB0byBjb3ZlciBhbGwgY2x1c3RlcnMgc3RhdHVzIGNoYW5nZXNcbiAgICBuZXcgY2RrLmF3c19ldmVudHMuUnVsZSh0aGlzLCAnRWNzU3RhdGVDaGFuZ2VSdWxlJywge1xuICAgICAgZXZlbnRQYXR0ZXJuOiB7XG4gICAgICAgIHNvdXJjZTogWydhd3MuZWNzJ10sXG4gICAgICAgIGRldGFpbFR5cGU6IFsnRUNTIFRhc2sgU3RhdGUgQ2hhbmdlJywgJ0VDUyBDb250YWluZXIgSW5zdGFuY2UgU3RhdGUgQ2hhbmdlJywgJ0VDUyBTZXJ2aWNlIEFjdGlvbiddLFxuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBkZXNpcmVkU3RhdHVzOiBbJ1NUT1BQRUQnXSxcbiAgICAgICAgICBsYXN0U3RhdHVzOiBbJ1NUT1BQRUQnXSxcbiAgICAgICAgICAuLi4ocHJvcHMuY2x1c3RlckFybiAmJiB7IGNsdXN0ZXJBcm46IFtwcm9wcy5jbHVzdGVyQXJuXSB9KSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRzOiBbbmV3IGNkay5hd3NfZXZlbnRzX3RhcmdldHMuQ2xvdWRXYXRjaExvZ0dyb3VwKGVjc1N0YXRlQ2hhbmdlTG9nR3JvdXApXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZ0ZvcndhcmRlckxhbWJkYSA9IGNkay5hd3NfbGFtYmRhLkZ1bmN0aW9uLmZyb21GdW5jdGlvbkF0dHJpYnV0ZXMoXG4gICAgICB0aGlzLFxuICAgICAgJ0Vjc1N0YXRlQ2hhbmdlTG9nRm9yd2FyZGVyTGFtYmRhJyxcbiAgICAgIHtcbiAgICAgICAgZnVuY3Rpb25Bcm46IGNkay5Gbi5pbXBvcnRWYWx1ZSgnZGF0YWRvZy1mb3J3YXJkZXItRm9yd2FyZGVyQXJuJyksXG4gICAgICAgIHNhbWVFbnZpcm9ubWVudDogdHJ1ZSxcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIG5ldyBjZGsuYXdzX2xvZ3MuU3Vic2NyaXB0aW9uRmlsdGVyKHRoaXMsICdFY3NTdGF0ZUNoYW5nZUxvZ0ZpbHRlcicsIHtcbiAgICAgIGRlc3RpbmF0aW9uOiBuZXcgY2RrLmF3c19sb2dzX2Rlc3RpbmF0aW9ucy5MYW1iZGFEZXN0aW5hdGlvbihsb2dGb3J3YXJkZXJMYW1iZGEpLFxuICAgICAgZmlsdGVyUGF0dGVybjogY2RrLmF3c19sb2dzLkZpbHRlclBhdHRlcm4uYW55VGVybShcbiAgICAgICAgJ0NvbnRhaW5lciBraWxsZWQgZHVlIHRvJyxcbiAgICAgICAgJ1Rhc2sgZmFpbGVkIGNvbnRhaW5lciBoZWFsdGggY2hlY2tzJyxcbiAgICAgICksXG4gICAgICBsb2dHcm91cDogZWNzU3RhdGVDaGFuZ2VMb2dHcm91cCxcbiAgICB9KTtcblxuICAgIC8vIEFmdGVyIGJlaW5nIG1pZ3JhdGVkIHRvIHRoZSBuZXcgdmVyc2lvbiBpdCBjYW4gYmUgYWRkZWQgdG8gdGhlIENMQUlEIGNvbnN0cnVjdCByZXBvc2l0b3J5XG4gICAgbmV3IERhdGFkb2dNb25pdG9yKHRoaXMsICdFY3NTdGF0ZUNoYW5nZUxvZ0dyb3VwTW9uaXRvcicsIHtcbiAgICAgIG5hbWU6ICdVbmV4cGVjdGVkIEVDUyBzdGF0dXMgY2hhbmdlcycsXG4gICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICBtb25pdG9yVHlwZTogRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZS5MT0dfQUxFUlQsXG4gICAgICBxdWVyeTogYGxvZ3MoXCJhY2NvdW50X2lkOiR7Y2RrLlN0YWNrLm9mKHRoaXMpLmFjY291bnR9IEBhd3MuYXdzbG9ncy5sb2dHcm91cDpcXFwiJHtcbiAgICAgICAgZWNzU3RhdGVDaGFuZ2VMb2dHcm91cC5sb2dHcm91cE5hbWVcbiAgICAgIH1cXFwiXCIpLmluZGV4KFwiKlwiKS5yb2xsdXAoXCJjb3VudFwiKS5sYXN0KFwiNW1cIikgPj0gMWAsXG4gICAgICBtZXNzYWdlOiAne3sjaXNfYWxlcnR9fVRoZXJlIGFyZSB1bmV4cGVjdGVkIEVDUyBzdGF0dXMgY2hhbmdlcyBpbiB0aGUgYWNjb3VudCAnICtcbiAgICAgICAgICAgICAgICAne3tsb2cudGFncy5hY2NvdW50X2lkfX0sIG1vcmUgZGV0YWlscyBoZXJlIHt7bG9nLmxpbmt9fSB7ey9pc19hbGVydH19JyxcbiAgICAgIHByaW9yaXR5OiBwcm9wcy5wcmlvcml0eSA/PyBEYXRhZG9nTW9uaXRvci5ERUZBVUxUX1BSSU9SSVRZLFxuICAgICAgbm90aWZpY2F0aW9uOiBwcm9wcy5ub3RpZmljYXRpb24sXG4gICAgfSk7XG4gIH1cbn1cblxuIl19