@rio-cloud/cdk-v2-constructs 6.16.2 → 6.16.3

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
@@ -11563,7 +11563,7 @@
11563
11563
  "assembly": "@rio-cloud/cdk-v2-constructs",
11564
11564
  "base": "constructs.Construct",
11565
11565
  "docs": {
11566
- "remarks": "This construct sets up observability for SES as defined by [ADR - SES domain reputation observability](https://confluence.collaboration-man.com/display/MAN/ADR+-+SES+domain+reputation+observability).\n\n# Warning\nThis construct results in logging all sent emails including the recipient address into CloudWatch logs.\nAs this is considered **PII**, this information MUST be handled accordingly.\nIn particular, logs **MUST NOT** be sent to further third party services (e.g. Datadog) and the retention period for logs **MUST NOT** be extended.\n\n# Usage\n## Default Configuration Set for Identity\n\n```typescript\nconst rioSesObservability = new RioSesObservability(this, 'ConfigurationSet', {})\nconst identity = new EmailIdentity(this, 'EmailIdentity', {\n identity: Identity.domain('example.com'),\n configurationSet: rioSesObservability.configurationSet,\n});\n```\n\n## Specifically using the configuration set per request\n\nThis is ideal if you want to try out the construct first one some specific emails (e.g. during initial migration).\nThe configuration set name is exported as an SSM parameter `/rio/config/ses-observability/configuration-set-name`.\nThus, you can easily make it available as environment variable in your code.\n\n```kotlin\nimport com.amazonaws.services.simpleemail.model.SendEmailRequest\n\nval request = SendEmailRequest()\n .withConfigurationSetName(SSM_CONFIGURATION_SSM_PARAMETER_VALUE)\n ...\n```\n\n## Automated event processing\n\nIf you have specific needs for which you'd like to process the SNS events directly\n(e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.\nTo enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.",
11566
+ "remarks": "This construct sets up observability for SES as defined by [ADR - SES domain reputation observability](https://confluence.collaboration-man.com/display/MAN/ADR+-+SES+domain+reputation+observability).\n\n# Warning\nThis construct results in logging all sent emails including the recipient address into CloudWatch logs.\nAs this is considered **PII**, this information MUST be handled accordingly.\nIn particular, logs **MUST NOT** be sent to further third party services (e.g. Datadog) and the retention period for logs **MUST NOT** be extended.\n\n# Usage\n## Default Configuration Set for Identity\n\n```typescript\nconst rioSesObservability = new RioSesObservability(this, 'ConfigurationSet', {})\nconst identity = new EmailIdentity(this, 'EmailIdentity', {\n identity: Identity.domain('example.com'),\n configurationSet: rioSesObservability.configurationSet,\n});\n```\n\n## Specifically using the configuration set per request\n\nThis is ideal if you want to try out the construct first one some specific emails (e.g. during initial migration).\nThe configuration set name is exported as an SSM parameter `/rio/config/ses-observability/configuration-set-name`.\nThus, you can easily make it available as environment variable in your code.\n\n```kotlin\nimport com.amazonaws.services.simpleemail.model.SendEmailRequest\n\nval request = SendEmailRequest()\n .withConfigurationSetName(SSM_CONFIGURATION_SSM_PARAMETER_VALUE)\n ...\n```\n\n## Automated event processing\n\nIf you have specific needs for which you'd like to process the SNS events directly\n(e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.\nTo enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.\n\n# Notes\n## Add necessary permissions for fargate task to enable using ses configuration set\nMake sure you have the following permissions in the task role of the fargate task, e.g.:\n```typescript\n service.taskDefinition.taskRole.addToPrincipalPolicy(\n new iam.PolicyStatement({\n actions: ['ses:sendEmail', 'ses:sendRawEmail'],\n resources: [`arn:aws:ses:<your_region>:<your_account>:configuration-set/<your_configuration_set_name>`],\n }));\n```\n\n## Watchful\nIt might be helpful to add watchful to your stack to\nget notified if the ses-logger lambda fails.",
11567
11567
  "stability": "stable",
11568
11568
  "summary": "RioSesObservability."
11569
11569
  },
@@ -11574,7 +11574,7 @@
11574
11574
  },
11575
11575
  "locationInModule": {
11576
11576
  "filename": "src/ses/ses-observability.ts",
11577
- "line": 74
11577
+ "line": 89
11578
11578
  },
11579
11579
  "parameters": [
11580
11580
  {
@@ -11600,7 +11600,7 @@
11600
11600
  "kind": "class",
11601
11601
  "locationInModule": {
11602
11602
  "filename": "src/ses/ses-observability.ts",
11603
- "line": 67
11603
+ "line": 82
11604
11604
  },
11605
11605
  "name": "SesObservability",
11606
11606
  "properties": [
@@ -11612,7 +11612,7 @@
11612
11612
  "immutable": true,
11613
11613
  "locationInModule": {
11614
11614
  "filename": "src/ses/ses-observability.ts",
11615
- "line": 69
11615
+ "line": 84
11616
11616
  },
11617
11617
  "name": "CONFIGURATION_SET_NAME_SSM_PARAMETER",
11618
11618
  "static": true,
@@ -11628,7 +11628,7 @@
11628
11628
  "immutable": true,
11629
11629
  "locationInModule": {
11630
11630
  "filename": "src/ses/ses-observability.ts",
11631
- "line": 70
11631
+ "line": 85
11632
11632
  },
11633
11633
  "name": "SNS_TOPIC_ARN_EXPORT_NAME",
11634
11634
  "static": true,
@@ -11643,7 +11643,7 @@
11643
11643
  "immutable": true,
11644
11644
  "locationInModule": {
11645
11645
  "filename": "src/ses/ses-observability.ts",
11646
- "line": 72
11646
+ "line": 87
11647
11647
  },
11648
11648
  "name": "configurationSet",
11649
11649
  "type": {
@@ -11657,7 +11657,7 @@
11657
11657
  "immutable": true,
11658
11658
  "locationInModule": {
11659
11659
  "filename": "src/ses/ses-observability.ts",
11660
- "line": 71
11660
+ "line": 86
11661
11661
  },
11662
11662
  "name": "snsTopic",
11663
11663
  "type": {
@@ -20037,7 +20037,7 @@
20037
20037
  "assembly": "@rio-cloud/cdk-v2-constructs",
20038
20038
  "base": "constructs.Construct",
20039
20039
  "docs": {
20040
- "remarks": "This construct sets up observability for SES as defined by [ADR - SES domain reputation observability](https://confluence.collaboration-man.com/display/MAN/ADR+-+SES+domain+reputation+observability).\n\n# Warning\nThis construct results in logging all sent emails including the recipient address into CloudWatch logs.\nAs this is considered **PII**, this information MUST be handled accordingly.\nIn particular, logs **MUST NOT** be sent to further third party services (e.g. Datadog) and the retention period for logs **MUST NOT** be extended.\n\n# Usage\n## Default Configuration Set for Identity\n\n```typescript\nconst rioSesObservability = new RioSesObservability(this, 'ConfigurationSet', {})\nconst identity = new EmailIdentity(this, 'EmailIdentity', {\n identity: Identity.domain('example.com'),\n configurationSet: rioSesObservability.configurationSet,\n});\n```\n\n## Specifically using the configuration set per request\n\nThis is ideal if you want to try out the construct first one some specific emails (e.g. during initial migration).\nThe configuration set name is exported as an SSM parameter `/rio/config/ses-observability/configuration-set-name`.\nThus, you can easily make it available as environment variable in your code.\n\n```kotlin\nimport com.amazonaws.services.simpleemail.model.SendEmailRequest\n\nval request = SendEmailRequest()\n .withConfigurationSetName(SSM_CONFIGURATION_SSM_PARAMETER_VALUE)\n ...\n```\n\n## Automated event processing\n\nIf you have specific needs for which you'd like to process the SNS events directly\n(e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.\nTo enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.",
20040
+ "remarks": "This construct sets up observability for SES as defined by [ADR - SES domain reputation observability](https://confluence.collaboration-man.com/display/MAN/ADR+-+SES+domain+reputation+observability).\n\n# Warning\nThis construct results in logging all sent emails including the recipient address into CloudWatch logs.\nAs this is considered **PII**, this information MUST be handled accordingly.\nIn particular, logs **MUST NOT** be sent to further third party services (e.g. Datadog) and the retention period for logs **MUST NOT** be extended.\n\n# Usage\n## Default Configuration Set for Identity\n\n```typescript\nconst rioSesObservability = new RioSesObservability(this, 'ConfigurationSet', {})\nconst identity = new EmailIdentity(this, 'EmailIdentity', {\n identity: Identity.domain('example.com'),\n configurationSet: rioSesObservability.configurationSet,\n});\n```\n\n## Specifically using the configuration set per request\n\nThis is ideal if you want to try out the construct first one some specific emails (e.g. during initial migration).\nThe configuration set name is exported as an SSM parameter `/rio/config/ses-observability/configuration-set-name`.\nThus, you can easily make it available as environment variable in your code.\n\n```kotlin\nimport com.amazonaws.services.simpleemail.model.SendEmailRequest\n\nval request = SendEmailRequest()\n .withConfigurationSetName(SSM_CONFIGURATION_SSM_PARAMETER_VALUE)\n ...\n```\n\n## Automated event processing\n\nIf you have specific needs for which you'd like to process the SNS events directly\n(e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.\nTo enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.\n\n# Notes\n## Add necessary permissions for fargate task to enable using ses configuration set\nMake sure you have the following permissions in the task role of the fargate task, e.g.:\n```typescript\n service.taskDefinition.taskRole.addToPrincipalPolicy(\n new iam.PolicyStatement({\n actions: ['ses:sendEmail', 'ses:sendRawEmail'],\n resources: [`arn:aws:ses:<your_region>:<your_account>:configuration-set/<your_configuration_set_name>`],\n }));\n```\n\n## Watchful\nIt might be helpful to add watchful to your stack to\nget notified if the ses-logger lambda fails.",
20041
20041
  "stability": "stable",
20042
20042
  "summary": "RioSesObservability."
20043
20043
  },
@@ -20048,7 +20048,7 @@
20048
20048
  },
20049
20049
  "locationInModule": {
20050
20050
  "filename": "src/ses/ses-observability.ts",
20051
- "line": 74
20051
+ "line": 89
20052
20052
  },
20053
20053
  "parameters": [
20054
20054
  {
@@ -20074,7 +20074,7 @@
20074
20074
  "kind": "class",
20075
20075
  "locationInModule": {
20076
20076
  "filename": "src/ses/ses-observability.ts",
20077
- "line": 67
20077
+ "line": 82
20078
20078
  },
20079
20079
  "name": "SesObservability",
20080
20080
  "namespace": "ses",
@@ -20087,7 +20087,7 @@
20087
20087
  "immutable": true,
20088
20088
  "locationInModule": {
20089
20089
  "filename": "src/ses/ses-observability.ts",
20090
- "line": 69
20090
+ "line": 84
20091
20091
  },
20092
20092
  "name": "CONFIGURATION_SET_NAME_SSM_PARAMETER",
20093
20093
  "static": true,
@@ -20103,7 +20103,7 @@
20103
20103
  "immutable": true,
20104
20104
  "locationInModule": {
20105
20105
  "filename": "src/ses/ses-observability.ts",
20106
- "line": 70
20106
+ "line": 85
20107
20107
  },
20108
20108
  "name": "SNS_TOPIC_ARN_EXPORT_NAME",
20109
20109
  "static": true,
@@ -20118,7 +20118,7 @@
20118
20118
  "immutable": true,
20119
20119
  "locationInModule": {
20120
20120
  "filename": "src/ses/ses-observability.ts",
20121
- "line": 72
20121
+ "line": 87
20122
20122
  },
20123
20123
  "name": "configurationSet",
20124
20124
  "type": {
@@ -20132,7 +20132,7 @@
20132
20132
  "immutable": true,
20133
20133
  "locationInModule": {
20134
20134
  "filename": "src/ses/ses-observability.ts",
20135
- "line": 71
20135
+ "line": 86
20136
20136
  },
20137
20137
  "name": "snsTopic",
20138
20138
  "type": {
@@ -20574,5 +20574,5 @@
20574
20574
  }
20575
20575
  },
20576
20576
  "version": "0.0.0",
20577
- "fingerprint": "dE2N/8PIEf6Kfek1j6u+VQPND9PxzEcxYdKNpdiCGQw="
20577
+ "fingerprint": "N7iGFoxgZa8RhCRzeiVg/6/2q7WLz2faRiJrlTzFYpI="
20578
20578
  }
package/docs/API.md CHANGED
@@ -6210,6 +6210,21 @@ If you have specific needs for which you'd like to process the SNS events direct
6210
6210
  (e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.
6211
6211
  To enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.
6212
6212
 
6213
+ # Notes
6214
+ ## Add necessary permissions for fargate task to enable using ses configuration set
6215
+ Make sure you have the following permissions in the task role of the fargate task, e.g.:
6216
+ ```typescript
6217
+ service.taskDefinition.taskRole.addToPrincipalPolicy(
6218
+ new iam.PolicyStatement({
6219
+ actions: ['ses:sendEmail', 'ses:sendRawEmail'],
6220
+ resources: [`arn:aws:ses:<your_region>:<your_account>:configuration-set/<your_configuration_set_name>`],
6221
+ }));
6222
+ ```
6223
+
6224
+ ## Watchful
6225
+ It might be helpful to add watchful to your stack to
6226
+ get notified if the ses-logger lambda fails.
6227
+
6213
6228
  #### Initializers <a name="Initializers" id="@rio-cloud/cdk-v2-constructs.SesObservability.Initializer"></a>
6214
6229
 
6215
6230
  ```typescript
@@ -6413,6 +6428,21 @@ If you have specific needs for which you'd like to process the SNS events direct
6413
6428
  (e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.
6414
6429
  To enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.
6415
6430
 
6431
+ # Notes
6432
+ ## Add necessary permissions for fargate task to enable using ses configuration set
6433
+ Make sure you have the following permissions in the task role of the fargate task, e.g.:
6434
+ ```typescript
6435
+ service.taskDefinition.taskRole.addToPrincipalPolicy(
6436
+ new iam.PolicyStatement({
6437
+ actions: ['ses:sendEmail', 'ses:sendRawEmail'],
6438
+ resources: [`arn:aws:ses:<your_region>:<your_account>:configuration-set/<your_configuration_set_name>`],
6439
+ }));
6440
+ ```
6441
+
6442
+ ## Watchful
6443
+ It might be helpful to add watchful to your stack to
6444
+ get notified if the ses-logger lambda fails.
6445
+
6416
6446
  #### Initializers <a name="Initializers" id="@rio-cloud/cdk-v2-constructs.ses.SesObservability.Initializer"></a>
6417
6447
 
6418
6448
  ```typescript
package/docs/changelog.md CHANGED
@@ -2,6 +2,8 @@
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.16.3](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.16.2&sourceBranch=refs%2Ftags%2Fv6.16.3) (2024-12-10)
6
+
5
7
  ## [6.16.2](https://bitbucket.collaboration-man.com/projects/RIODEV/repos/cdk-v2-constructs/compare/commits?targetBranch=refs%2Ftags%2Fv6.16.1&sourceBranch=refs%2Ftags%2Fv6.16.2) (2024-12-04)
6
8
 
7
9
 
@@ -49,6 +49,21 @@ export interface SesObservabilityProps {
49
49
  * If you have specific needs for which you'd like to process the SNS events directly
50
50
  * (e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.
51
51
  * To enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.
52
+ *
53
+ * # Notes
54
+ * ## Add necessary permissions for fargate task to enable using ses configuration set
55
+ * Make sure you have the following permissions in the task role of the fargate task, e.g.:
56
+ * ```typescript
57
+ * service.taskDefinition.taskRole.addToPrincipalPolicy(
58
+ * new iam.PolicyStatement({
59
+ * actions: ['ses:sendEmail', 'ses:sendRawEmail'],
60
+ * resources: [`arn:aws:ses:<your_region>:<your_account>:configuration-set/<your_configuration_set_name>`],
61
+ * }));
62
+ * ```
63
+ *
64
+ * ## Watchful
65
+ * It might be helpful to add watchful to your stack to
66
+ * get notified if the ses-logger lambda fails.
52
67
  */
53
68
  export declare class SesObservability extends Construct {
54
69
  static readonly CONFIGURATION_SET_NAME_SSM_PARAMETER = "/rio/config/ses-observability/configuration-set-name";
@@ -56,6 +56,21 @@ const rio_landing_zone_1 = require("../rio-landing-zone");
56
56
  * If you have specific needs for which you'd like to process the SNS events directly
57
57
  * (e.g. automatically creating a suppression list from bounces), you can subscribe to the SNS topic.
58
58
  * To enable this the SNS topic ARN is exported via Cloudformation as `RioSesObservabilityTopicArn`.
59
+ *
60
+ * # Notes
61
+ * ## Add necessary permissions for fargate task to enable using ses configuration set
62
+ * Make sure you have the following permissions in the task role of the fargate task, e.g.:
63
+ * ```typescript
64
+ * service.taskDefinition.taskRole.addToPrincipalPolicy(
65
+ * new iam.PolicyStatement({
66
+ * actions: ['ses:sendEmail', 'ses:sendRawEmail'],
67
+ * resources: [`arn:aws:ses:<your_region>:<your_account>:configuration-set/<your_configuration_set_name>`],
68
+ * }));
69
+ * ```
70
+ *
71
+ * ## Watchful
72
+ * It might be helpful to add watchful to your stack to
73
+ * get notified if the ses-logger lambda fails.
59
74
  */
60
75
  class SesObservability extends constructs_1.Construct {
61
76
  constructor(scope, id, props) {
@@ -99,7 +114,7 @@ class SesObservability extends constructs_1.Construct {
99
114
  value: this.snsTopic.topicArn,
100
115
  exportName: SesObservability.SNS_TOPIC_ARN_EXPORT_NAME,
101
116
  });
102
- const notificationHandle = rio_landing_zone_1.RioLandingZone.getTeamAlertSlackChannelParameter(this);
117
+ const notificationHandle = rio_landing_zone_1.RioLandingZone.getTeamAlertSlackChannelParameter(this).stringValue;
103
118
  new datadogv2_1.DatadogMonitor(this, 'QuotaMonitor', {
104
119
  name: `${accountName} SES quota almost reached`,
105
120
  serviceName: 'aws-ses',
@@ -121,6 +136,7 @@ class SesObservability extends constructs_1.Construct {
121
136
  },
122
137
  evaluationDelay: 900,
123
138
  },
139
+ notification: new datadogv2_1.NoNotification(),
124
140
  });
125
141
  new datadogv2_1.DatadogMonitor(this, 'EmailRejectedMonitor', {
126
142
  name: `${accountName} SES Email Rejected`,
@@ -141,6 +157,7 @@ class SesObservability extends constructs_1.Construct {
141
157
  },
142
158
  evaluationDelay: 900,
143
159
  },
160
+ notification: new datadogv2_1.NoNotification(),
144
161
  });
145
162
  new datadogv2_1.DatadogMonitor(this, 'ComplaintRateMonitor', {
146
163
  name: `${accountName} SES reputation endangered: Complaint rate High`,
@@ -167,6 +184,7 @@ class SesObservability extends constructs_1.Construct {
167
184
  },
168
185
  evaluationDelay: 900,
169
186
  },
187
+ notification: new datadogv2_1.NoNotification(),
170
188
  });
171
189
  new datadogv2_1.DatadogMonitor(this, 'BounceRateMonitor', {
172
190
  name: `${accountName} SES reputation endangered: Bounce Rate High`,
@@ -193,6 +211,7 @@ class SesObservability extends constructs_1.Construct {
193
211
  },
194
212
  evaluationDelay: 900,
195
213
  },
214
+ notification: new datadogv2_1.NoNotification(),
196
215
  });
197
216
  }
198
217
  /**
@@ -222,4 +241,4 @@ SesObservability[_a] = { fqn: "@rio-cloud/cdk-v2-constructs.SesObservability", v
222
241
  // ! changing these values is a breaking change for users
223
242
  SesObservability.CONFIGURATION_SET_NAME_SSM_PARAMETER = '/rio/config/ses-observability/configuration-set-name';
224
243
  SesObservability.SNS_TOPIC_ARN_EXPORT_NAME = 'RioSesObservabilityTopicArn';
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VzLW9ic2VydmFiaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VzL3Nlcy1vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLDZDQUFvQztBQUNwQyxpREFBaUQ7QUFFakQsbURBQTRFO0FBQzVFLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0Msc0VBQXNFO0FBQ3RFLDJDQUEyQztBQUMzQyx3Q0FBd0M7QUFDeEMsMkNBQXVDO0FBQ3ZDLHFDQUFzQztBQUN0Qyw0Q0FBNEU7QUFDNUUsMERBQXFEO0FBWXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUztJQU83QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxTQUFTLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLGlDQUFjLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUN0RSxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsb0NBQW9DO1lBQ3BFLFdBQVcsRUFBRSx5Q0FBeUM7U0FDdkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM5QyxTQUFTLEVBQUUsNkJBQTZCO1NBQ3pDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVB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LE9BQU8sRUFBRSxJQUFJO2lCQUNkO2dCQUNELGVBQWUsRUFBRSxHQUFHO2FBQ3JCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ssNENBQTRDLENBQUMsV0FBMkI7UUFDOUUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDdkIsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7Z0JBQzVCLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUNsQyxJQUFJLElBQUksWUFBWSxnQ0FBcUIsRUFBRSxDQUFDO3dCQUMxQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUN2QyxJQUFJLFlBQVksS0FBSyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDOzRCQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7d0JBQzFGLENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFoTEgsNENBaUxDOzs7QUFoTEMseURBQXlEO0FBQ3pDLHFEQUFvQyxHQUFHLHNEQUFzRCxDQUFDO0FBQzlGLDBDQUF5QixHQUFHLDZCQUE2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgeyBDZm5TdWJzY3JpcHRpb25GaWx0ZXIsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzZXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlcyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgKiBhcyBzbnNTdWJzY3JpcHRpb25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMtc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHRyaW1JbmRlbnQgfSBmcm9tICcuL2hlbHBlcic7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZSB9IGZyb20gJy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgeyBSaW9MYW5kaW5nWm9uZSB9IGZyb20gJy4uL3Jpby1sYW5kaW5nLXpvbmUnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VzT2JzZXJ2YWJpbGl0eVByb3BzIHtcbiAgLyoqXG4gICAgICogVGhlIFNFUyBldmVudHMgdG8gbG9nLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgW0VtYWlsU2VuZGluZ0V2ZW50LkRFTElWRVJZLCBFbWFpbFNlbmRpbmdFdmVudC5CT1VOQ0UsIEVtYWlsU2VuZGluZ0V2ZW50LkNPTVBMQUlOVCwgRW1haWxTZW5kaW5nRXZlbnQuUkVKRUNUXVxuICAgICAqL1xuICByZWFkb25seSBsb2dnZWRTZXNFdmVudHM/OiBzZXMuRW1haWxTZW5kaW5nRXZlbnRbXTtcbn1cblxuLyoqXG4gKiBSaW9TZXNPYnNlcnZhYmlsaXR5XG4gKlxuICogVGhpcyBjb25zdHJ1Y3Qgc2V0cyB1cCBvYnNlcnZhYmlsaXR5IGZvciBTRVMgYXMgZGVmaW5lZCBieSBbQURSIC0gU0VTIGRvbWFpbiByZXB1dGF0aW9uIG9ic2VydmFiaWxpdHldKGh0dHBzOi8vY29uZmx1ZW5jZS5jb2xsYWJvcmF0aW9uLW1hbi5jb20vZGlzcGxheS9NQU4vQURSKy0rU0VTK2RvbWFpbityZXB1dGF0aW9uK29ic2VydmFiaWxpdHkpLlxuICpcbiAqICMgV2FybmluZ1xuICogVGhpcyBjb25zdHJ1Y3QgcmVzdWx0cyBpbiBsb2dnaW5nIGFsbCBzZW50IGVtYWlscyBpbmNsdWRpbmcgdGhlIHJlY2lwaWVudCBhZGRyZXNzIGludG8gQ2xvdWRXYXRjaCBsb2dzLlxuICogQXMgdGhpcyBpcyBjb25zaWRlcmVkICoqUElJKiosIHRoaXMgaW5mb3JtYXRpb24gTVVTVCBiZSBoYW5kbGVkIGFjY29yZGluZ2x5LlxuICogSW4gcGFydGljdWxhciwgbG9ncyAqKk1VU1QgTk9UKiogYmUgc2VudCB0byBmdXJ0aGVyIHRoaXJkIHBhcnR5IHNlcnZpY2VzIChlLmcuIERhdGFkb2cpIGFuZCB0aGUgcmV0ZW50aW9uIHBlcmlvZCBmb3IgbG9ncyAqKk1VU1QgTk9UKiogYmUgZXh0ZW5kZWQuXG4gKlxuICogIyBVc2FnZVxuICogIyMgRGVmYXVsdCBDb25maWd1cmF0aW9uIFNldCBmb3IgSWRlbnRpdHlcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCByaW9TZXNPYnNlcnZhYmlsaXR5ID0gbmV3IFJpb1Nlc09ic2VydmFiaWxpdHkodGhpcywgJ0NvbmZpZ3VyYXRpb25TZXQnLCB7fSlcbiAqIGNvbnN0IGlkZW50aXR5ID0gbmV3IEVtYWlsSWRlbnRpdHkodGhpcywgJ0VtYWlsSWRlbnRpdHknLCB7XG4gKiAgICAgaWRlbnRpdHk6IElkZW50aXR5LmRvbWFpbignZXhhbXBsZS5jb20nKSxcbiAqICAgICBjb25maWd1cmF0aW9uU2V0OiByaW9TZXNPYnNlcnZhYmlsaXR5LmNvbmZpZ3VyYXRpb25TZXQsXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqICMjIFNwZWNpZmljYWxseSB1c2luZyB0aGUgY29uZmlndXJhdGlvbiBzZXQgcGVyIHJlcXVlc3RcbiAqXG4gKiBUaGlzIGlzIGlkZWFsIGlmIHlvdSB3YW50IHRvIHRyeSBvdXQgdGhlIGNvbnN0cnVjdCBmaXJzdCBvbmUgc29tZSBzcGVjaWZpYyBlbWFpbHMgKGUuZy4gZHVyaW5nIGluaXRpYWwgbWlncmF0aW9uKS5cbiAqIFRoZSBjb25maWd1cmF0aW9uIHNldCBuYW1lIGlzIGV4cG9ydGVkIGFzIGFuIFNTTSBwYXJhbWV0ZXIgYC9yaW8vY29uZmlnL3Nlcy1vYnNlcnZhYmlsaXR5L2NvbmZpZ3VyYXRpb24tc2V0LW5hbWVgLlxuICogVGh1cywgeW91IGNhbiBlYXNpbHkgbWFrZSBpdCBhdmFpbGFibGUgYXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4geW91ciBjb2RlLlxuICpcbiAqIGBgYGtvdGxpblxuICogaW1wb3J0IGNvbS5hbWF6b25hd3Muc2VydmljZXMuc2ltcGxlZW1haWwubW9kZWwuU2VuZEVtYWlsUmVxdWVzdFxuICpcbiAqIHZhbCByZXF1ZXN0ID0gU2VuZEVtYWlsUmVxdWVzdCgpXG4gKiAgICAgICAgICAgICAgICAgLndpdGhDb25maWd1cmF0aW9uU2V0TmFtZShTU01fQ09ORklHVVJBVElPTl9TU01fUEFSQU1FVEVSX1ZBTFVFKVxuICogICAgICAgICAgICAgICAgIC4uLlxuICogYGBgXG4gKlxuICogIyMgQXV0b21hdGVkIGV2ZW50IHByb2Nlc3NpbmdcbiAqXG4gKiBJZiB5b3UgaGF2ZSBzcGVjaWZpYyBuZWVkcyBmb3Igd2hpY2ggeW91J2QgbGlrZSB0byBwcm9jZXNzIHRoZSBTTlMgZXZlbnRzIGRpcmVjdGx5XG4gKiAoZS5nLiBhdXRvbWF0aWNhbGx5IGNyZWF0aW5nIGEgc3VwcHJlc3Npb24gbGlzdCBmcm9tIGJvdW5jZXMpLCB5b3UgY2FuIHN1YnNjcmliZSB0byB0aGUgU05TIHRvcGljLlxuICogVG8gZW5hYmxlIHRoaXMgdGhlIFNOUyB0b3BpYyBBUk4gaXMgZXhwb3J0ZWQgdmlhIENsb3VkZm9ybWF0aW9uIGFzIGBSaW9TZXNPYnNlcnZhYmlsaXR5VG9waWNBcm5gLlxuICovXG5leHBvcnQgY2xhc3MgU2VzT2JzZXJ2YWJpbGl0eSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8vICEgY2hhbmdpbmcgdGhlc2UgdmFsdWVzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIGZvciB1c2Vyc1xuICBzdGF0aWMgcmVhZG9ubHkgQ09ORklHVVJBVElPTl9TRVRfTkFNRV9TU01fUEFSQU1FVEVSID0gJy9yaW8vY29uZmlnL3Nlcy1vYnNlcnZhYmlsaXR5L2NvbmZpZ3VyYXRpb24tc2V0LW5hbWUnO1xuICBzdGF0aWMgcmVhZG9ubHkgU05TX1RPUElDX0FSTl9FWFBPUlRfTkFNRSA9ICdSaW9TZXNPYnNlcnZhYmlsaXR5VG9waWNBcm4nO1xuICByZWFkb25seSBzbnNUb3BpYzogc25zLlRvcGljO1xuICByZWFkb25seSBjb25maWd1cmF0aW9uU2V0OiBzZXMuQ29uZmlndXJhdGlvblNldDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogU2VzT2JzZXJ2YWJpbGl0eVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBjb25zdCBhY2NvdW50SWQgPSBTdGFjay5vZih0aGlzKS5hY2NvdW50O1xuICAgIGNvbnN0IGFjY291bnROYW1lID0gUmlvTGFuZGluZ1pvbmUuZ2V0QWNjb3VudE5hbWVQYXJhbWV0ZXIodGhpcyk7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBuZXcgc3NtLlN0cmluZ1BhcmFtZXRlcih0aGlzLCAnQ29uZmlndXJhdGlvblNldE5hbWUnLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBTZXNPYnNlcnZhYmlsaXR5LkNPTkZJR1VSQVRJT05fU0VUX05BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgIHN0cmluZ1ZhbHVlOiAncmlvLXNlcy1vYnNlcnZhYmlsaXR5LWNvbmZpZ3VyYXRpb24tc2V0JyxcbiAgICB9KTtcblxuICAgIHRoaXMuc25zVG9waWMgPSBuZXcgc25zLlRvcGljKHRoaXMsICdTbnNUb3BpYycsIHtcbiAgICAgIHRvcGljTmFtZTogJ3Jpby1zZXMtb2JzZXJ2YWJpbGl0eS10b3BpYycsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXQgPSBuZXcgc2VzLkNvbmZpZ3VyYXRpb25TZXQodGhpcywgJ0NvbmZpZ3VyYXRpb25TZXQnLCB7XG4gICAgICBjb25maWd1cmF0aW9uU2V0TmFtZTogcGFyYW1ldGVyLnN0cmluZ1ZhbHVlLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2V0LmFkZEV2ZW50RGVzdGluYXRpb24oJ0V2ZW50RGVzdGluYXRpb24nLCB7XG4gICAgICBjb25maWd1cmF0aW9uU2V0RXZlbnREZXN0aW5hdGlvbk5hbWU6ICdyaW8tc2VzLW9ic2VydmFiaWxpdHktZXZlbnQtZGVzdGluYXRpb24nLFxuICAgICAgZGVzdGluYXRpb246IHNlcy5FdmVudERlc3RpbmF0aW9uLnNuc1RvcGljKHRoaXMuc25zVG9waWMpLFxuICAgICAgZXZlbnRzOiBwcm9wcy5sb2dnZWRTZXNFdmVudHMgPz8gW1xuICAgICAgICBzZXMuRW1haWxTZW5kaW5nRXZlbnQuREVMSVZFUlksXG4gICAgICAgIHNlcy5FbWFpbFNlbmRpbmdFdmVudC5CT1VOQ0UsXG4gICAgICAgIHNlcy5FbWFpbFNlbmRpbmdFdmVudC5DT01QTEFJTlQsXG4gICAgICAgIHNlcy5FbWFpbFNlbmRpbmdFdmVudC5SRUpFQ1QsXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgY29uc3QgbG9nRnVuY3Rpb24gPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdMb2dGdW5jdGlvbicsIHtcbiAgICAgIGZ1bmN0aW9uTmFtZTogJ3Jpby1zZXMtb2JzZXJ2YWJpbGl0eS1sb2ctZnVuY3Rpb24nLFxuICAgICAgcnVudGltZTogbGFtYmRhLlJ1bnRpbWUuTk9ERUpTXzIwX1gsXG4gICAgICBoYW5kbGVyOiAnc2VzLWxvZ2dlci5oYW5kbGVyJyxcbiAgICAgIGxvZ1JldGVudGlvbjogUmV0ZW50aW9uRGF5cy5USFJFRV9NT05USFMsXG4gICAgICBzeXN0ZW1Mb2dMZXZlbFYyOiBsYW1iZGEuU3lzdGVtTG9nTGV2ZWwuV0FSTixcbiAgICAgIGxvZ2dpbmdGb3JtYXQ6IGxhbWJkYS5Mb2dnaW5nRm9ybWF0LkpTT04sXG4gICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2xhbWJkYScpLCB7XG4gICAgICAgIGV4Y2x1ZGU6IFsnKi5qcycsICcqLmQudHMnXSxcbiAgICAgIH0pLFxuICAgIH0pO1xuICAgIHRoaXMuZW5zdXJlTm9TdWJzY3JpcHRpb25GaWx0ZXJzT25MYW1iZGFzTG9nR3JvdXAobG9nRnVuY3Rpb24pO1xuXG4gICAgdGhpcy5zbnNUb3BpYy5hZGRTdWJzY3JpcHRpb24obmV3IHNuc1N1YnNjcmlwdGlvbnMuTGFtYmRhU3Vic2NyaXB0aW9uKGxvZ0Z1bmN0aW9uKSk7XG5cbiAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnU25zVG9waWNBcm4nLCB7XG4gICAgICB2YWx1ZTogdGhpcy5zbnNUb3BpYy50b3BpY0FybixcbiAgICAgIGV4cG9ydE5hbWU6IFNlc09ic2VydmFiaWxpdHkuU05TX1RPUElDX0FSTl9FWFBPUlRfTkFNRSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbkhhbmRsZSA9IFJpb0xhbmRpbmdab25lLmdldFRlYW1BbGVydFNsYWNrQ2hhbm5lbFBhcmFtZXRlcih0aGlzKTtcblxuICAgIG5ldyBEYXRhZG9nTW9uaXRvcih0aGlzLCAnUXVvdGFNb25pdG9yJywge1xuICAgICAgbmFtZTogYCR7YWNjb3VudE5hbWV9IFNFUyBxdW90YSBhbG1vc3QgcmVhY2hlZGAsXG4gICAgICBzZXJ2aWNlTmFtZTogJ2F3cy1zZXMnLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuUVVFUllfQUxFUlQsXG4gICAgICBxdWVyeTogYG1heChsYXN0XzFoKTptYXg6YXdzLnNlcy5zZW50X2xhc3RfMjRfaG91cnN7YWNjb3VudF9pZDoke2FjY291bnRJZH19IC8gbWF4OmF3cy5zZXMubWF4XzI0X2hvdXJfc2VuZHthY2NvdW50X2lkOiR7YWNjb3VudElkfX0gPiAwLjhgLFxuICAgICAgbWVzc2FnZTogdHJpbUluZGVudGBcbiAgICAgICAgWW91IGFyZSBhbG1vc3QgdXNpbmcgdXAgeW91J3JlIG1heGltdW0gZW1haWwgc2VuZGluZyBxdW90YSBwZXIgMjRoLiBcbiAgICAgICAgRWl0aGVyIFtyZXF1ZXN0IGFuIGluY3JlYXNlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vc2VzL2xhdGVzdC9kZy9tYW5hZ2Utc2VuZGluZy1xdW90YXMtcmVxdWVzdC1pbmNyZWFzZS5odG1sKSBmb3IgeW91ciBxdW90YSBieSBBV1Mgb3IgcmVkdWNlIHRoZSBhbW91bnQgb2YgZW1haWxzIHNlbnQuXG4gICAgICAgIFlvdSBjYW4gZmluZCBsb2dzIGFib3V0IGFsbCBtYWlscyBzZW50IGF0IFxcYCR7bG9nRnVuY3Rpb24ubG9nR3JvdXAubG9nR3JvdXBOYW1lfVxcYC5cbiAgICAgICAgXG4gICAgICAgIHt7I2lzX2FsZXJ0fX1Ac2xhY2stJHtub3RpZmljYXRpb25IYW5kbGV9e3svaXNfYWxlcnR9fVxuICAgICAgICB7eyNpc19hbGVydF9yZWNvdmVyeX19QHNsYWNrLSR7bm90aWZpY2F0aW9uSGFuZGxlfXt7L2lzX2FsZXJ0X3JlY292ZXJ5fX1cbiAgICAgICAgYCxcbiAgICAgIHByaW9yaXR5OiA0LFxuICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgICBjcml0aWNhbDogMC44LFxuICAgICAgICAgIHdhcm5pbmc6IDAuNyxcbiAgICAgICAgfSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiA5MDAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgbmV3IERhdGFkb2dNb25pdG9yKHRoaXMsICdFbWFpbFJlamVjdGVkTW9uaXRvcicsIHtcbiAgICAgIG5hbWU6IGAke2FjY291bnROYW1lfSBTRVMgRW1haWwgUmVqZWN0ZWRgLFxuICAgICAgc2VydmljZU5hbWU6ICdhd3Mtc2VzJyxcbiAgICAgIG1vbml0b3JUeXBlOiBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLlFVRVJZX0FMRVJULFxuICAgICAgcXVlcnk6IGBzdW0obGFzdF8xaCk6bWF4OmF3cy5zZXMucmVqZWN0c3thY2NvdW50X2lkOiR7YWNjb3VudElkfX0gPiAwYCxcbiAgICAgIG1lc3NhZ2U6IHRyaW1JbmRlbnRgXG4gICAgICAgIFNFUyBbcmVqZWN0ZWRdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9zZXMvbGF0ZXN0L2RnL21vbml0b3Itc2VuZGluZy1hY3Rpdml0eS5odG1sKSBzZW5kaW5nIGF0IGxlYXN0IG9uZSBlbWFpbC5cbiAgICAgICAgUGxlYXNlIGludmVzdGlnYXRlIHRoZSByb290IGNhc2UsIGFzIHRoaXMgaXMgbm90IGV4cGVjdGVkIHRvIGhhcHBlbiBpbiBwcm9kdWN0aW9uIGV2ZXIuXG4gICAgICAgIFlvdSBjYW4gZmluZCBsb2dzIGFib3V0IGFsbCBtYWlscyBzZW50IGF0IFxcYCR7bG9nRnVuY3Rpb24ubG9nR3JvdXAubG9nR3JvdXBOYW1lfVxcYC5cbiAgICAgICAgXG4gICAgICAgIHt7I2lzX2FsZXJ0fX1Ac2xhY2stJHtub3RpZmljYXRpb25IYW5kbGV9e3svaXNfYWxlcnR9fVxuICAgICAgICBgLFxuICAgICAgcHJpb3JpdHk6IDMsXG4gICAgICBvcHRpb25PdmVycmlkZXM6IHtcbiAgICAgICAgdGhyZXNob2xkczoge1xuICAgICAgICAgIGNyaXRpY2FsOiAwLFxuICAgICAgICB9LFxuICAgICAgICBldmFsdWF0aW9uRGVsYXk6IDkwMCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YWRvZ01vbml0b3IodGhpcywgJ0NvbXBsYWludFJhdGVNb25pdG9yJywge1xuICAgICAgbmFtZTogYCR7YWNjb3VudE5hbWV9IFNFUyByZXB1dGF0aW9uIGVuZGFuZ2VyZWQ6IENvbXBsYWludCByYXRlIEhpZ2hgLFxuICAgICAgc2VydmljZU5hbWU6ICdhd3Mtc2VzJyxcbiAgICAgIG1vbml0b3JUeXBlOiBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLlFVRVJZX0FMRVJULFxuICAgICAgcXVlcnk6IGBtYXgobGFzdF8xaCk6bWF4OmF3cy5zZXMucmVwdXRhdGlvbl9jb21wbGFpbnRfcmF0ZXthY2NvdW50X2lkOiR7YWNjb3VudElkfSBhbmQgbm90IHNlczoqfSA+IDAuMDAxYCxcbiAgICAgIG1lc3NhZ2U6IHRyaW1JbmRlbnRgXG4gICAgICAgIFdhcm5pbmcgVGhyZXNob2xkIGZvciBDb21wbGFpbnQgcmF0ZSB7eyNpc193YXJuaW5nfX1hbG1vc3Qge3svaXNfd2FybmluZ319cmVhY2hlZCAoYXMgZGVmaW5lZCBpbiBBV1MpLlxuICAgICAgICBcbiAgICAgICAgUGxlYXNlIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNvbXBsYWludHMgcmVjZWl2ZWQgZm9yIEUtbWFpbHMgc2VudCBieSB5b3VyIEFjY291bnQuXG4gICAgICAgIElmIHRoaXMgbWV0cmljIHJlYWNoZXMgXFxgMC41JVxcYCB0aGUgZW1haWwgc2VuZGluZyBjYXBhYmlsaXR5IG9mIHlvdXIgYWNjb3VudCB3aWxsIGJlIGRpc2FibGVkIGJ5IEFXUy5cbiAgICAgICAgWW91IGNhbiBmaW5kIGxvZ3MgYWJvdXQgYWxsIG1haWxzIHNlbnQgYXQgXFxgJHtsb2dGdW5jdGlvbi5sb2dHcm91cC5sb2dHcm91cE5hbWV9XFxgLlxuICAgICAgICBTZWUgW0FEUiAtIFNFUyBkb21haW4gcmVwdXRhdGlvbiBvYnNlcnZhYmlsaXR5XShodHRwczovL2NvbmZsdWVuY2UuY29sbGFib3JhdGlvbi1tYW4uY29tL2Rpc3BsYXkvTUFOL0FEUistK1NFUytkb21haW4rcmVwdXRhdGlvbitvYnNlcnZhYmlsaXR5KS5cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICB7eyNpc19hbGVydH19QHNsYWNrLSR7bm90aWZpY2F0aW9uSGFuZGxlfXt7L2lzX2FsZXJ0fX1cbiAgICAgICAge3sjaXNfYWxlcnRfcmVjb3Zlcnl9fUBzbGFjay0ke25vdGlmaWNhdGlvbkhhbmRsZX17ey9pc19hbGVydF9yZWNvdmVyeX19XG4gICAgICAgIGAsXG4gICAgICBwcmlvcml0eTogMixcbiAgICAgIG9wdGlvbk92ZXJyaWRlczoge1xuICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgY3JpdGljYWw6IDAuMDAxLFxuICAgICAgICAgIHdhcm5pbmc6IDAuMDAwOCxcbiAgICAgICAgfSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiA5MDAsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgbmV3IERhdGFkb2dNb25pdG9yKHRoaXMsICdCb3VuY2VSYXRlTW9uaXRvcicsIHtcbiAgICAgIG5hbWU6IGAke2FjY291bnROYW1lfSBTRVMgcmVwdXRhdGlvbiBlbmRhbmdlcmVkOiBCb3VuY2UgUmF0ZSBIaWdoYCxcbiAgICAgIHNlcnZpY2VOYW1lOiAnYXdzLXNlcycsXG4gICAgICBtb25pdG9yVHlwZTogRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZS5RVUVSWV9BTEVSVCxcbiAgICAgIHF1ZXJ5OiBgbWF4KGxhc3RfMWgpOm1heDphd3Muc2VzLnJlcHV0YXRpb25fYm91bmNlX3JhdGV7YWNjb3VudF9pZDoke2FjY291bnRJZH0gYW5kIG5vdCBzZXM6Kn0gPiAwLjA1YCxcbiAgICAgIG1lc3NhZ2U6IHRyaW1JbmRlbnRgXG4gICAgICAgIFdhcm5pbmcgVGhyZXNob2xkIGZvciBCb3VuY2UgcmF0ZSB7eyNpc193YXJuaW5nfX1hbG1vc3Qge3svaXNfd2FybmluZ319cmVhY2hlZCAoYXMgZGVmaW5lZCBpbiBBV1MpLlxuICAgICAgICBcbiAgICAgICAgUGxlYXNlIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGJvdW5jZXMgZm9yIEUtbWFpbHMgc2VudCBieSB5b3VyIEFjY291bnQuXG4gICAgICAgIElmIHRoaXMgbWV0cmljIHJlYWNoZXMgXFxgMTAlXFxgIHRoZSBlbWFpbCBzZW5kaW5nIGNhcGFiaWxpdHkgb2YgeW91ciBhY2NvdW50IHdpbGwgYmUgZGlzYWJsZWQgYnkgQVdTLlxuICAgICAgICBZb3UgY2FuIGZpbmQgbG9ncyBhYm91dCBhbGwgbWFpbHMgc2VudCBhdCBcXGAke2xvZ0Z1bmN0aW9uLmxvZ0dyb3VwLmxvZ0dyb3VwTmFtZX1cXGAuXG4gICAgICAgIFNlZSBbQURSIC0gU0VTIGRvbWFpbiByZXB1dGF0aW9uIG9ic2VydmFiaWxpdHldKGh0dHBzOi8vY29uZmx1ZW5jZS5jb2xsYWJvcmF0aW9uLW1hbi5jb20vZGlzcGxheS9NQU4vQURSKy0rU0VTK2RvbWFpbityZXB1dGF0aW9uK29ic2VydmFiaWxpdHkpLlxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHt7I2lzX2FsZXJ0fX1Ac2xhY2stJHtub3RpZmljYXRpb25IYW5kbGV9e3svaXNfYWxlcnR9fVxuICAgICAgICB7eyNpc19hbGVydF9yZWNvdmVyeX19QHNsYWNrLSR7bm90aWZpY2F0aW9uSGFuZGxlfXt7L2lzX2FsZXJ0X3JlY292ZXJ5fX1cbiAgICAgICAgYCxcbiAgICAgIHByaW9yaXR5OiAyLFxuICAgICAgb3B0aW9uT3ZlcnJpZGVzOiB7XG4gICAgICAgIHRocmVzaG9sZHM6IHtcbiAgICAgICAgICBjcml0aWNhbDogMC4wNSxcbiAgICAgICAgICB3YXJuaW5nOiAwLjA0LFxuICAgICAgICB9LFxuICAgICAgICBldmFsdWF0aW9uRGVsYXk6IDkwMCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBmdW5jdGlvbiBlbnN1cmVzIHRoYXQgbm8gUElJIGlzIGxlYWtlZCB0byBEYXRhZG9nIGJ5IGFkZGluZyBhIHN1YnNjcmlwdGlvbiBmaWx0ZXIgdG8gdGhlIGxvZyBncm91cCBvZiB0aGUgbGFtYmRhLlxuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVOb1N1YnNjcmlwdGlvbkZpbHRlcnNPbkxhbWJkYXNMb2dHcm91cChsb2dGdW5jdGlvbjogTm9kZWpzRnVuY3Rpb24pIHtcbiAgICBjb25zdCBzdGFjayA9IGNkay5TdGFjay5vZih0aGlzKTtcbiAgICBzdGFjay5ub2RlLmFkZFZhbGlkYXRpb24oe1xuICAgICAgdmFsaWRhdGU6ICgpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBzdGFjay5ub2RlLmZpbmRBbGwoKS5mb3JFYWNoKG5vZGUgPT4ge1xuICAgICAgICAgIGlmIChub2RlIGluc3RhbmNlb2YgQ2ZuU3Vic2NyaXB0aW9uRmlsdGVyKSB7XG4gICAgICAgICAgICBjb25zdCBsb2dHcm91cE5hbWUgPSBub2RlLmxvZ0dyb3VwTmFtZTtcbiAgICAgICAgICAgIGlmIChsb2dHcm91cE5hbWUgPT09IGxvZ0Z1bmN0aW9uLmxvZ0dyb3VwLmxvZ0dyb3VwTmFtZSkge1xuICAgICAgICAgICAgICBlcnJvcnMucHVzaCgnU3Vic2NyaXB0aW9uIGZpbHRlcnMgYXJlIG5vdCBhbGxvd2VkIHNlcy1vYnNlcnZhYmlsaXR5IGxhbWJkYXMgbG9nIGdyb3VwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn0iXX0=
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VzLW9ic2VydmFiaWxpdHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VzL3Nlcy1vYnNlcnZhYmlsaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkJBQTZCO0FBQzdCLDZDQUFvQztBQUNwQyxpREFBaUQ7QUFFakQsbURBQTRFO0FBQzVFLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0Msc0VBQXNFO0FBQ3RFLDJDQUEyQztBQUMzQyx3Q0FBd0M7QUFDeEMsMkNBQXVDO0FBQ3ZDLHFDQUFzQztBQUN0Qyw0Q0FBNEY7QUFDNUYsMERBQXFEO0FBWXJEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdURHO0FBQ0gsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUztJQU83QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTRCO1FBQ3BFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsTUFBTSxTQUFTLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3pDLE1BQU0sV0FBVyxHQUFHLGlDQUFjLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFakUsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxzQkFBc0IsRUFBRTtZQUN0RSxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsb0NBQW9DO1lBQ3BFLFdBQVcsRUFBRSx5Q0FBeUM7U0FDdkQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUM5QyxTQUFTLEVBQUUsNkJBQTZCO1NBQ3pDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxnQkFB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ICdwYXRoJztcbmltcG9ydCB7IFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgTm9kZWpzRnVuY3Rpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgeyBDZm5TdWJzY3JpcHRpb25GaWx0ZXIsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzZXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlcyc7XG5pbXBvcnQgKiBhcyBzbnMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXNucyc7XG5pbXBvcnQgKiBhcyBzbnNTdWJzY3JpcHRpb25zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zbnMtc3Vic2NyaXB0aW9ucyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IHRyaW1JbmRlbnQgfSBmcm9tICcuL2hlbHBlcic7XG5pbXBvcnQgeyBEYXRhZG9nTW9uaXRvciwgRGF0YWRvZ01vbml0b3JRdWVyeUFsZXJ0VHlwZSwgTm9Ob3RpZmljYXRpb24gfSBmcm9tICcuLi9kYXRhZG9ndjInO1xuaW1wb3J0IHsgUmlvTGFuZGluZ1pvbmUgfSBmcm9tICcuLi9yaW8tbGFuZGluZy16b25lJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIFNlc09ic2VydmFiaWxpdHlQcm9wcyB7XG4gIC8qKlxuICAgICAqIFRoZSBTRVMgZXZlbnRzIHRvIGxvZy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IFtFbWFpbFNlbmRpbmdFdmVudC5ERUxJVkVSWSwgRW1haWxTZW5kaW5nRXZlbnQuQk9VTkNFLCBFbWFpbFNlbmRpbmdFdmVudC5DT01QTEFJTlQsIEVtYWlsU2VuZGluZ0V2ZW50LlJFSkVDVF1cbiAgICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2VkU2VzRXZlbnRzPzogc2VzLkVtYWlsU2VuZGluZ0V2ZW50W107XG59XG5cbi8qKlxuICogUmlvU2VzT2JzZXJ2YWJpbGl0eVxuICpcbiAqIFRoaXMgY29uc3RydWN0IHNldHMgdXAgb2JzZXJ2YWJpbGl0eSBmb3IgU0VTIGFzIGRlZmluZWQgYnkgW0FEUiAtIFNFUyBkb21haW4gcmVwdXRhdGlvbiBvYnNlcnZhYmlsaXR5XShodHRwczovL2NvbmZsdWVuY2UuY29sbGFib3JhdGlvbi1tYW4uY29tL2Rpc3BsYXkvTUFOL0FEUistK1NFUytkb21haW4rcmVwdXRhdGlvbitvYnNlcnZhYmlsaXR5KS5cbiAqXG4gKiAjIFdhcm5pbmdcbiAqIFRoaXMgY29uc3RydWN0IHJlc3VsdHMgaW4gbG9nZ2luZyBhbGwgc2VudCBlbWFpbHMgaW5jbHVkaW5nIHRoZSByZWNpcGllbnQgYWRkcmVzcyBpbnRvIENsb3VkV2F0Y2ggbG9ncy5cbiAqIEFzIHRoaXMgaXMgY29uc2lkZXJlZCAqKlBJSSoqLCB0aGlzIGluZm9ybWF0aW9uIE1VU1QgYmUgaGFuZGxlZCBhY2NvcmRpbmdseS5cbiAqIEluIHBhcnRpY3VsYXIsIGxvZ3MgKipNVVNUIE5PVCoqIGJlIHNlbnQgdG8gZnVydGhlciB0aGlyZCBwYXJ0eSBzZXJ2aWNlcyAoZS5nLiBEYXRhZG9nKSBhbmQgdGhlIHJldGVudGlvbiBwZXJpb2QgZm9yIGxvZ3MgKipNVVNUIE5PVCoqIGJlIGV4dGVuZGVkLlxuICpcbiAqICMgVXNhZ2VcbiAqICMjIERlZmF1bHQgQ29uZmlndXJhdGlvbiBTZXQgZm9yIElkZW50aXR5XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmlvU2VzT2JzZXJ2YWJpbGl0eSA9IG5ldyBSaW9TZXNPYnNlcnZhYmlsaXR5KHRoaXMsICdDb25maWd1cmF0aW9uU2V0Jywge30pXG4gKiBjb25zdCBpZGVudGl0eSA9IG5ldyBFbWFpbElkZW50aXR5KHRoaXMsICdFbWFpbElkZW50aXR5Jywge1xuICogICAgIGlkZW50aXR5OiBJZGVudGl0eS5kb21haW4oJ2V4YW1wbGUuY29tJyksXG4gKiAgICAgY29uZmlndXJhdGlvblNldDogcmlvU2VzT2JzZXJ2YWJpbGl0eS5jb25maWd1cmF0aW9uU2V0LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiAjIyBTcGVjaWZpY2FsbHkgdXNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHBlciByZXF1ZXN0XG4gKlxuICogVGhpcyBpcyBpZGVhbCBpZiB5b3Ugd2FudCB0byB0cnkgb3V0IHRoZSBjb25zdHJ1Y3QgZmlyc3Qgb25lIHNvbWUgc3BlY2lmaWMgZW1haWxzIChlLmcuIGR1cmluZyBpbml0aWFsIG1pZ3JhdGlvbikuXG4gKiBUaGUgY29uZmlndXJhdGlvbiBzZXQgbmFtZSBpcyBleHBvcnRlZCBhcyBhbiBTU00gcGFyYW1ldGVyIGAvcmlvL2NvbmZpZy9zZXMtb2JzZXJ2YWJpbGl0eS9jb25maWd1cmF0aW9uLXNldC1uYW1lYC5cbiAqIFRodXMsIHlvdSBjYW4gZWFzaWx5IG1ha2UgaXQgYXZhaWxhYmxlIGFzIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHlvdXIgY29kZS5cbiAqXG4gKiBgYGBrb3RsaW5cbiAqIGltcG9ydCBjb20uYW1hem9uYXdzLnNlcnZpY2VzLnNpbXBsZWVtYWlsLm1vZGVsLlNlbmRFbWFpbFJlcXVlc3RcbiAqXG4gKiB2YWwgcmVxdWVzdCA9IFNlbmRFbWFpbFJlcXVlc3QoKVxuICogICAgICAgICAgICAgICAgIC53aXRoQ29uZmlndXJhdGlvblNldE5hbWUoU1NNX0NPTkZJR1VSQVRJT05fU1NNX1BBUkFNRVRFUl9WQUxVRSlcbiAqICAgICAgICAgICAgICAgICAuLi5cbiAqIGBgYFxuICpcbiAqICMjIEF1dG9tYXRlZCBldmVudCBwcm9jZXNzaW5nXG4gKlxuICogSWYgeW91IGhhdmUgc3BlY2lmaWMgbmVlZHMgZm9yIHdoaWNoIHlvdSdkIGxpa2UgdG8gcHJvY2VzcyB0aGUgU05TIGV2ZW50cyBkaXJlY3RseVxuICogKGUuZy4gYXV0b21hdGljYWxseSBjcmVhdGluZyBhIHN1cHByZXNzaW9uIGxpc3QgZnJvbSBib3VuY2VzKSwgeW91IGNhbiBzdWJzY3JpYmUgdG8gdGhlIFNOUyB0b3BpYy5cbiAqIFRvIGVuYWJsZSB0aGlzIHRoZSBTTlMgdG9waWMgQVJOIGlzIGV4cG9ydGVkIHZpYSBDbG91ZGZvcm1hdGlvbiBhcyBgUmlvU2VzT2JzZXJ2YWJpbGl0eVRvcGljQXJuYC5cbiAqXG4gKiAjIE5vdGVzXG4gKiAjIyBBZGQgbmVjZXNzYXJ5IHBlcm1pc3Npb25zIGZvciBmYXJnYXRlIHRhc2sgdG8gZW5hYmxlIHVzaW5nIHNlcyBjb25maWd1cmF0aW9uIHNldFxuICogTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbnMgaW4gdGhlIHRhc2sgcm9sZSBvZiB0aGUgZmFyZ2F0ZSB0YXNrLCBlLmcuOlxuICogYGBgdHlwZXNjcmlwdFxuICogICAgIHNlcnZpY2UudGFza0RlZmluaXRpb24udGFza1JvbGUuYWRkVG9QcmluY2lwYWxQb2xpY3koXG4gKiAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gKiAgICAgICAgIGFjdGlvbnM6IFsnc2VzOnNlbmRFbWFpbCcsICdzZXM6c2VuZFJhd0VtYWlsJ10sXG4gKiAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOnNlczo8eW91cl9yZWdpb24+Ojx5b3VyX2FjY291bnQ+OmNvbmZpZ3VyYXRpb24tc2V0Lzx5b3VyX2NvbmZpZ3VyYXRpb25fc2V0X25hbWU+YF0sXG4gKiAgICAgICB9KSk7XG4gKiBgYGBcbiAqXG4gKiAjIyBXYXRjaGZ1bFxuICogSXQgbWlnaHQgYmUgaGVscGZ1bCB0byBhZGQgd2F0Y2hmdWwgdG8geW91ciBzdGFjayB0b1xuICogZ2V0IG5vdGlmaWVkIGlmIHRoZSBzZXMtbG9nZ2VyIGxhbWJkYSBmYWlscy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNlc09ic2VydmFiaWxpdHkgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvLyAhIGNoYW5naW5nIHRoZXNlIHZhbHVlcyBpcyBhIGJyZWFraW5nIGNoYW5nZSBmb3IgdXNlcnNcbiAgc3RhdGljIHJlYWRvbmx5IENPTkZJR1VSQVRJT05fU0VUX05BTUVfU1NNX1BBUkFNRVRFUiA9ICcvcmlvL2NvbmZpZy9zZXMtb2JzZXJ2YWJpbGl0eS9jb25maWd1cmF0aW9uLXNldC1uYW1lJztcbiAgc3RhdGljIHJlYWRvbmx5IFNOU19UT1BJQ19BUk5fRVhQT1JUX05BTUUgPSAnUmlvU2VzT2JzZXJ2YWJpbGl0eVRvcGljQXJuJztcbiAgcmVhZG9ubHkgc25zVG9waWM6IHNucy5Ub3BpYztcbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvblNldDogc2VzLkNvbmZpZ3VyYXRpb25TZXQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlc09ic2VydmFiaWxpdHlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgY29uc3QgYWNjb3VudElkID0gU3RhY2sub2YodGhpcykuYWNjb3VudDtcbiAgICBjb25zdCBhY2NvdW50TmFtZSA9IFJpb0xhbmRpbmdab25lLmdldEFjY291bnROYW1lUGFyYW1ldGVyKHRoaXMpO1xuXG4gICAgY29uc3QgcGFyYW1ldGVyID0gbmV3IHNzbS5TdHJpbmdQYXJhbWV0ZXIodGhpcywgJ0NvbmZpZ3VyYXRpb25TZXROYW1lJywge1xuICAgICAgcGFyYW1ldGVyTmFtZTogU2VzT2JzZXJ2YWJpbGl0eS5DT05GSUdVUkFUSU9OX1NFVF9OQU1FX1NTTV9QQVJBTUVURVIsXG4gICAgICBzdHJpbmdWYWx1ZTogJ3Jpby1zZXMtb2JzZXJ2YWJpbGl0eS1jb25maWd1cmF0aW9uLXNldCcsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNuc1RvcGljID0gbmV3IHNucy5Ub3BpYyh0aGlzLCAnU25zVG9waWMnLCB7XG4gICAgICB0b3BpY05hbWU6ICdyaW8tc2VzLW9ic2VydmFiaWxpdHktdG9waWMnLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25maWd1cmF0aW9uU2V0ID0gbmV3IHNlcy5Db25maWd1cmF0aW9uU2V0KHRoaXMsICdDb25maWd1cmF0aW9uU2V0Jywge1xuICAgICAgY29uZmlndXJhdGlvblNldE5hbWU6IHBhcmFtZXRlci5zdHJpbmdWYWx1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29uZmlndXJhdGlvblNldC5hZGRFdmVudERlc3RpbmF0aW9uKCdFdmVudERlc3RpbmF0aW9uJywge1xuICAgICAgY29uZmlndXJhdGlvblNldEV2ZW50RGVzdGluYXRpb25OYW1lOiAncmlvLXNlcy1vYnNlcnZhYmlsaXR5LWV2ZW50LWRlc3RpbmF0aW9uJyxcbiAgICAgIGRlc3RpbmF0aW9uOiBzZXMuRXZlbnREZXN0aW5hdGlvbi5zbnNUb3BpYyh0aGlzLnNuc1RvcGljKSxcbiAgICAgIGV2ZW50czogcHJvcHMubG9nZ2VkU2VzRXZlbnRzID8/IFtcbiAgICAgICAgc2VzLkVtYWlsU2VuZGluZ0V2ZW50LkRFTElWRVJZLFxuICAgICAgICBzZXMuRW1haWxTZW5kaW5nRXZlbnQuQk9VTkNFLFxuICAgICAgICBzZXMuRW1haWxTZW5kaW5nRXZlbnQuQ09NUExBSU5ULFxuICAgICAgICBzZXMuRW1haWxTZW5kaW5nRXZlbnQuUkVKRUNULFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGNvbnN0IGxvZ0Z1bmN0aW9uID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnTG9nRnVuY3Rpb24nLCB7XG4gICAgICBmdW5jdGlvbk5hbWU6ICdyaW8tc2VzLW9ic2VydmFiaWxpdHktbG9nLWZ1bmN0aW9uJyxcbiAgICAgIHJ1bnRpbWU6IGxhbWJkYS5SdW50aW1lLk5PREVKU18yMF9YLFxuICAgICAgaGFuZGxlcjogJ3Nlcy1sb2dnZXIuaGFuZGxlcicsXG4gICAgICBsb2dSZXRlbnRpb246IFJldGVudGlvbkRheXMuVEhSRUVfTU9OVEhTLFxuICAgICAgc3lzdGVtTG9nTGV2ZWxWMjogbGFtYmRhLlN5c3RlbUxvZ0xldmVsLldBUk4sXG4gICAgICBsb2dnaW5nRm9ybWF0OiBsYW1iZGEuTG9nZ2luZ0Zvcm1hdC5KU09OLFxuICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICdsYW1iZGEnKSwge1xuICAgICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgICB9KSxcbiAgICB9KTtcbiAgICB0aGlzLmVuc3VyZU5vU3Vic2NyaXB0aW9uRmlsdGVyc09uTGFtYmRhc0xvZ0dyb3VwKGxvZ0Z1bmN0aW9uKTtcblxuICAgIHRoaXMuc25zVG9waWMuYWRkU3Vic2NyaXB0aW9uKG5ldyBzbnNTdWJzY3JpcHRpb25zLkxhbWJkYVN1YnNjcmlwdGlvbihsb2dGdW5jdGlvbikpO1xuXG4gICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ1Nuc1RvcGljQXJuJywge1xuICAgICAgdmFsdWU6IHRoaXMuc25zVG9waWMudG9waWNBcm4sXG4gICAgICBleHBvcnROYW1lOiBTZXNPYnNlcnZhYmlsaXR5LlNOU19UT1BJQ19BUk5fRVhQT1JUX05BTUUsXG4gICAgfSk7XG5cbiAgICBjb25zdCBub3RpZmljYXRpb25IYW5kbGUgPSBSaW9MYW5kaW5nWm9uZS5nZXRUZWFtQWxlcnRTbGFja0NoYW5uZWxQYXJhbWV0ZXIodGhpcykuc3RyaW5nVmFsdWU7XG5cbiAgICBuZXcgRGF0YWRvZ01vbml0b3IodGhpcywgJ1F1b3RhTW9uaXRvcicsIHtcbiAgICAgIG5hbWU6IGAke2FjY291bnROYW1lfSBTRVMgcXVvdGEgYWxtb3N0IHJlYWNoZWRgLFxuICAgICAgc2VydmljZU5hbWU6ICdhd3Mtc2VzJyxcbiAgICAgIG1vbml0b3JUeXBlOiBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLlFVRVJZX0FMRVJULFxuICAgICAgcXVlcnk6IGBtYXgobGFzdF8xaCk6bWF4OmF3cy5zZXMuc2VudF9sYXN0XzI0X2hvdXJze2FjY291bnRfaWQ6JHthY2NvdW50SWR9fSAvIG1heDphd3Muc2VzLm1heF8yNF9ob3VyX3NlbmR7YWNjb3VudF9pZDoke2FjY291bnRJZH19ID4gMC44YCxcbiAgICAgIG1lc3NhZ2U6IHRyaW1JbmRlbnRgXG4gICAgICAgIFlvdSBhcmUgYWxtb3N0IHVzaW5nIHVwIHlvdSdyZSBtYXhpbXVtIGVtYWlsIHNlbmRpbmcgcXVvdGEgcGVyIDI0aC4gXG4gICAgICAgIEVpdGhlciBbcmVxdWVzdCBhbiBpbmNyZWFzZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nlcy9sYXRlc3QvZGcvbWFuYWdlLXNlbmRpbmctcXVvdGFzLXJlcXVlc3QtaW5jcmVhc2UuaHRtbCkgZm9yIHlvdXIgcXVvdGEgYnkgQVdTIG9yIHJlZHVjZSB0aGUgYW1vdW50IG9mIGVtYWlscyBzZW50LlxuICAgICAgICBZb3UgY2FuIGZpbmQgbG9ncyBhYm91dCBhbGwgbWFpbHMgc2VudCBhdCBcXGAke2xvZ0Z1bmN0aW9uLmxvZ0dyb3VwLmxvZ0dyb3VwTmFtZX1cXGAuXG4gICAgICAgIFxuICAgICAgICB7eyNpc19hbGVydH19QHNsYWNrLSR7bm90aWZpY2F0aW9uSGFuZGxlfXt7L2lzX2FsZXJ0fX1cbiAgICAgICAge3sjaXNfYWxlcnRfcmVjb3Zlcnl9fUBzbGFjay0ke25vdGlmaWNhdGlvbkhhbmRsZX17ey9pc19hbGVydF9yZWNvdmVyeX19XG4gICAgICAgIGAsXG4gICAgICBwcmlvcml0eTogNCxcbiAgICAgIG9wdGlvbk92ZXJyaWRlczoge1xuICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgY3JpdGljYWw6IDAuOCxcbiAgICAgICAgICB3YXJuaW5nOiAwLjcsXG4gICAgICAgIH0sXG4gICAgICAgIGV2YWx1YXRpb25EZWxheTogOTAwLFxuICAgICAgfSxcbiAgICAgIG5vdGlmaWNhdGlvbjogbmV3IE5vTm90aWZpY2F0aW9uKCksXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YWRvZ01vbml0b3IodGhpcywgJ0VtYWlsUmVqZWN0ZWRNb25pdG9yJywge1xuICAgICAgbmFtZTogYCR7YWNjb3VudE5hbWV9IFNFUyBFbWFpbCBSZWplY3RlZGAsXG4gICAgICBzZXJ2aWNlTmFtZTogJ2F3cy1zZXMnLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuUVVFUllfQUxFUlQsXG4gICAgICBxdWVyeTogYHN1bShsYXN0XzFoKTptYXg6YXdzLnNlcy5yZWplY3Rze2FjY291bnRfaWQ6JHthY2NvdW50SWR9fSA+IDBgLFxuICAgICAgbWVzc2FnZTogdHJpbUluZGVudGBcbiAgICAgICAgU0VTIFtyZWplY3RlZF0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL3Nlcy9sYXRlc3QvZGcvbW9uaXRvci1zZW5kaW5nLWFjdGl2aXR5Lmh0bWwpIHNlbmRpbmcgYXQgbGVhc3Qgb25lIGVtYWlsLlxuICAgICAgICBQbGVhc2UgaW52ZXN0aWdhdGUgdGhlIHJvb3QgY2FzZSwgYXMgdGhpcyBpcyBub3QgZXhwZWN0ZWQgdG8gaGFwcGVuIGluIHByb2R1Y3Rpb24gZXZlci5cbiAgICAgICAgWW91IGNhbiBmaW5kIGxvZ3MgYWJvdXQgYWxsIG1haWxzIHNlbnQgYXQgXFxgJHtsb2dGdW5jdGlvbi5sb2dHcm91cC5sb2dHcm91cE5hbWV9XFxgLlxuICAgICAgICBcbiAgICAgICAge3sjaXNfYWxlcnR9fUBzbGFjay0ke25vdGlmaWNhdGlvbkhhbmRsZX17ey9pc19hbGVydH19XG4gICAgICAgIGAsXG4gICAgICBwcmlvcml0eTogMyxcbiAgICAgIG9wdGlvbk92ZXJyaWRlczoge1xuICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgY3JpdGljYWw6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIGV2YWx1YXRpb25EZWxheTogOTAwLFxuICAgICAgfSxcbiAgICAgIG5vdGlmaWNhdGlvbjogbmV3IE5vTm90aWZpY2F0aW9uKCksXG4gICAgfSk7XG5cbiAgICBuZXcgRGF0YWRvZ01vbml0b3IodGhpcywgJ0NvbXBsYWludFJhdGVNb25pdG9yJywge1xuICAgICAgbmFtZTogYCR7YWNjb3VudE5hbWV9IFNFUyByZXB1dGF0aW9uIGVuZGFuZ2VyZWQ6IENvbXBsYWludCByYXRlIEhpZ2hgLFxuICAgICAgc2VydmljZU5hbWU6ICdhd3Mtc2VzJyxcbiAgICAgIG1vbml0b3JUeXBlOiBEYXRhZG9nTW9uaXRvclF1ZXJ5QWxlcnRUeXBlLlFVRVJZX0FMRVJULFxuICAgICAgcXVlcnk6IGBtYXgobGFzdF8xaCk6bWF4OmF3cy5zZXMucmVwdXRhdGlvbl9jb21wbGFpbnRfcmF0ZXthY2NvdW50X2lkOiR7YWNjb3VudElkfSBhbmQgbm90IHNlczoqfSA+IDAuMDAxYCxcbiAgICAgIG1lc3NhZ2U6IHRyaW1JbmRlbnRgXG4gICAgICAgIFdhcm5pbmcgVGhyZXNob2xkIGZvciBDb21wbGFpbnQgcmF0ZSB7eyNpc193YXJuaW5nfX1hbG1vc3Qge3svaXNfd2FybmluZ319cmVhY2hlZCAoYXMgZGVmaW5lZCBpbiBBV1MpLlxuICAgICAgICBcbiAgICAgICAgUGxlYXNlIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGNvbXBsYWludHMgcmVjZWl2ZWQgZm9yIEUtbWFpbHMgc2VudCBieSB5b3VyIEFjY291bnQuXG4gICAgICAgIElmIHRoaXMgbWV0cmljIHJlYWNoZXMgXFxgMC41JVxcYCB0aGUgZW1haWwgc2VuZGluZyBjYXBhYmlsaXR5IG9mIHlvdXIgYWNjb3VudCB3aWxsIGJlIGRpc2FibGVkIGJ5IEFXUy5cbiAgICAgICAgWW91IGNhbiBmaW5kIGxvZ3MgYWJvdXQgYWxsIG1haWxzIHNlbnQgYXQgXFxgJHtsb2dGdW5jdGlvbi5sb2dHcm91cC5sb2dHcm91cE5hbWV9XFxgLlxuICAgICAgICBTZWUgW0FEUiAtIFNFUyBkb21haW4gcmVwdXRhdGlvbiBvYnNlcnZhYmlsaXR5XShodHRwczovL2NvbmZsdWVuY2UuY29sbGFib3JhdGlvbi1tYW4uY29tL2Rpc3BsYXkvTUFOL0FEUistK1NFUytkb21haW4rcmVwdXRhdGlvbitvYnNlcnZhYmlsaXR5KS5cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICB7eyNpc19hbGVydH19QHNsYWNrLSR7bm90aWZpY2F0aW9uSGFuZGxlfXt7L2lzX2FsZXJ0fX1cbiAgICAgICAge3sjaXNfYWxlcnRfcmVjb3Zlcnl9fUBzbGFjay0ke25vdGlmaWNhdGlvbkhhbmRsZX17ey9pc19hbGVydF9yZWNvdmVyeX19XG4gICAgICAgIGAsXG4gICAgICBwcmlvcml0eTogMixcbiAgICAgIG9wdGlvbk92ZXJyaWRlczoge1xuICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgY3JpdGljYWw6IDAuMDAxLFxuICAgICAgICAgIHdhcm5pbmc6IDAuMDAwOCxcbiAgICAgICAgfSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiA5MDAsXG4gICAgICB9LFxuICAgICAgbm90aWZpY2F0aW9uOiBuZXcgTm9Ob3RpZmljYXRpb24oKSxcbiAgICB9KTtcblxuICAgIG5ldyBEYXRhZG9nTW9uaXRvcih0aGlzLCAnQm91bmNlUmF0ZU1vbml0b3InLCB7XG4gICAgICBuYW1lOiBgJHthY2NvdW50TmFtZX0gU0VTIHJlcHV0YXRpb24gZW5kYW5nZXJlZDogQm91bmNlIFJhdGUgSGlnaGAsXG4gICAgICBzZXJ2aWNlTmFtZTogJ2F3cy1zZXMnLFxuICAgICAgbW9uaXRvclR5cGU6IERhdGFkb2dNb25pdG9yUXVlcnlBbGVydFR5cGUuUVVFUllfQUxFUlQsXG4gICAgICBxdWVyeTogYG1heChsYXN0XzFoKTptYXg6YXdzLnNlcy5yZXB1dGF0aW9uX2JvdW5jZV9yYXRle2FjY291bnRfaWQ6JHthY2NvdW50SWR9IGFuZCBub3Qgc2VzOip9ID4gMC4wNWAsXG4gICAgICBtZXNzYWdlOiB0cmltSW5kZW50YFxuICAgICAgICBXYXJuaW5nIFRocmVzaG9sZCBmb3IgQm91bmNlIHJhdGUge3sjaXNfd2FybmluZ319YWxtb3N0IHt7L2lzX3dhcm5pbmd9fXJlYWNoZWQgKGFzIGRlZmluZWQgaW4gQVdTKS5cbiAgICAgICAgXG4gICAgICAgIFBsZWFzZSByZWR1Y2UgdGhlIG51bWJlciBvZiBib3VuY2VzIGZvciBFLW1haWxzIHNlbnQgYnkgeW91ciBBY2NvdW50LlxuICAgICAgICBJZiB0aGlzIG1ldHJpYyByZWFjaGVzIFxcYDEwJVxcYCB0aGUgZW1haWwgc2VuZGluZyBjYXBhYmlsaXR5IG9mIHlvdXIgYWNjb3VudCB3aWxsIGJlIGRpc2FibGVkIGJ5IEFXUy5cbiAgICAgICAgWW91IGNhbiBmaW5kIGxvZ3MgYWJvdXQgYWxsIG1haWxzIHNlbnQgYXQgXFxgJHtsb2dGdW5jdGlvbi5sb2dHcm91cC5sb2dHcm91cE5hbWV9XFxgLlxuICAgICAgICBTZWUgW0FEUiAtIFNFUyBkb21haW4gcmVwdXRhdGlvbiBvYnNlcnZhYmlsaXR5XShodHRwczovL2NvbmZsdWVuY2UuY29sbGFib3JhdGlvbi1tYW4uY29tL2Rpc3BsYXkvTUFOL0FEUistK1NFUytkb21haW4rcmVwdXRhdGlvbitvYnNlcnZhYmlsaXR5KS5cbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICB7eyNpc19hbGVydH19QHNsYWNrLSR7bm90aWZpY2F0aW9uSGFuZGxlfXt7L2lzX2FsZXJ0fX1cbiAgICAgICAge3sjaXNfYWxlcnRfcmVjb3Zlcnl9fUBzbGFjay0ke25vdGlmaWNhdGlvbkhhbmRsZX17ey9pc19hbGVydF9yZWNvdmVyeX19XG4gICAgICAgIGAsXG4gICAgICBwcmlvcml0eTogMixcbiAgICAgIG9wdGlvbk92ZXJyaWRlczoge1xuICAgICAgICB0aHJlc2hvbGRzOiB7XG4gICAgICAgICAgY3JpdGljYWw6IDAuMDUsXG4gICAgICAgICAgd2FybmluZzogMC4wNCxcbiAgICAgICAgfSxcbiAgICAgICAgZXZhbHVhdGlvbkRlbGF5OiA5MDAsXG4gICAgICB9LFxuICAgICAgbm90aWZpY2F0aW9uOiBuZXcgTm9Ob3RpZmljYXRpb24oKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBubyBQSUkgaXMgbGVha2VkIHRvIERhdGFkb2cgYnkgYWRkaW5nIGEgc3Vic2NyaXB0aW9uIGZpbHRlciB0byB0aGUgbG9nIGdyb3VwIG9mIHRoZSBsYW1iZGEuXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZU5vU3Vic2NyaXB0aW9uRmlsdGVyc09uTGFtYmRhc0xvZ0dyb3VwKGxvZ0Z1bmN0aW9uOiBOb2RlanNGdW5jdGlvbikge1xuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKHRoaXMpO1xuICAgIHN0YWNrLm5vZGUuYWRkVmFsaWRhdGlvbih7XG4gICAgICB2YWxpZGF0ZTogKCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIHN0YWNrLm5vZGUuZmluZEFsbCgpLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDZm5TdWJzY3JpcHRpb25GaWx0ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZSA9IG5vZGUubG9nR3JvdXBOYW1lO1xuICAgICAgICAgICAgaWYgKGxvZ0dyb3VwTmFtZSA9PT0gbG9nRnVuY3Rpb24ubG9nR3JvdXAubG9nR3JvdXBOYW1lKSB7XG4gICAgICAgICAgICAgIGVycm9ycy5wdXNoKCdTdWJzY3JpcHRpb24gZmlsdGVycyBhcmUgbm90IGFsbG93ZWQgc2VzLW9ic2VydmFiaWxpdHkgbGFtYmRhcyBsb2cgZ3JvdXAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxufSJdfQ==
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.16.2",
18
+ "version": "6.16.3",
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.16.2"
2
+ "version": "6.16.3"
3
3
  }