@liflig/cdk 3.22.18 → 3.23.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,176 @@
1
+ version = 1
2
+ revision = 3
3
+ requires-python = ">=3.14"
4
+
5
+ [[package]]
6
+ name = "boto3"
7
+ version = "1.42.84"
8
+ source = { registry = "https://pypi.org/simple" }
9
+ dependencies = [
10
+ { name = "botocore" },
11
+ { name = "jmespath" },
12
+ { name = "s3transfer" },
13
+ ]
14
+ sdist = { url = "https://files.pythonhosted.org/packages/88/89/2d647bd717da55a8cc68602b197f53a5fa36fb95a2f9e76c4aff11a9cfd1/boto3-1.42.84.tar.gz", hash = "sha256:6a84b3293a5d8b3adf827a54588e7dcffcf0a85410d7dadca615544f97d27579", size = 112816, upload-time = "2026-04-06T19:39:07.585Z" }
15
+ wheels = [
16
+ { url = "https://files.pythonhosted.org/packages/2d/31/cdf4326841613d1d181a77b3038a988800fb3373ca50de1639fba9fa87de/boto3-1.42.84-py3-none-any.whl", hash = "sha256:4d03ad3211832484037337292586f71f48707141288d9ac23049c04204f4ab03", size = 140555, upload-time = "2026-04-06T19:39:06.009Z" },
17
+ ]
18
+
19
+ [[package]]
20
+ name = "botocore"
21
+ version = "1.42.84"
22
+ source = { registry = "https://pypi.org/simple" }
23
+ dependencies = [
24
+ { name = "jmespath" },
25
+ { name = "python-dateutil" },
26
+ { name = "urllib3" },
27
+ ]
28
+ sdist = { url = "https://files.pythonhosted.org/packages/b4/b7/1c03423843fb0d1795b686511c00ee63fed1234c2400f469aeedfd42212f/botocore-1.42.84.tar.gz", hash = "sha256:234064604c80d9272a5e9f6b3566d260bcaa053a5e05246db90d7eca1c2cf44b", size = 15148615, upload-time = "2026-04-06T19:38:56.673Z" }
29
+ wheels = [
30
+ { url = "https://files.pythonhosted.org/packages/e3/37/0c0c90361c8a1b9e6c75222ca24ae12996a298c0e18822a72ab229c37207/botocore-1.42.84-py3-none-any.whl", hash = "sha256:15f3fe07dfa6545e46a60c4b049fe2bdf63803c595ae4a4eec90e8f8172764f3", size = 14827061, upload-time = "2026-04-06T19:38:53.613Z" },
31
+ ]
32
+
33
+ [[package]]
34
+ name = "colorama"
35
+ version = "0.4.6"
36
+ source = { registry = "https://pypi.org/simple" }
37
+ sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
38
+ wheels = [
39
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
40
+ ]
41
+
42
+ [[package]]
43
+ name = "iniconfig"
44
+ version = "2.3.0"
45
+ source = { registry = "https://pypi.org/simple" }
46
+ sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" }
47
+ wheels = [
48
+ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" },
49
+ ]
50
+
51
+ [[package]]
52
+ name = "jmespath"
53
+ version = "1.1.0"
54
+ source = { registry = "https://pypi.org/simple" }
55
+ sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" }
56
+ wheels = [
57
+ { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" },
58
+ ]
59
+
60
+ [[package]]
61
+ name = "packaging"
62
+ version = "26.0"
63
+ source = { registry = "https://pypi.org/simple" }
64
+ sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" }
65
+ wheels = [
66
+ { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" },
67
+ ]
68
+
69
+ [[package]]
70
+ name = "pluggy"
71
+ version = "1.6.0"
72
+ source = { registry = "https://pypi.org/simple" }
73
+ sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" }
74
+ wheels = [
75
+ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
76
+ ]
77
+
78
+ [[package]]
79
+ name = "pygments"
80
+ version = "2.20.0"
81
+ source = { registry = "https://pypi.org/simple" }
82
+ sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
83
+ wheels = [
84
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
85
+ ]
86
+
87
+ [[package]]
88
+ name = "pytest"
89
+ version = "9.0.2"
90
+ source = { registry = "https://pypi.org/simple" }
91
+ dependencies = [
92
+ { name = "colorama", marker = "sys_platform == 'win32'" },
93
+ { name = "iniconfig" },
94
+ { name = "packaging" },
95
+ { name = "pluggy" },
96
+ { name = "pygments" },
97
+ ]
98
+ sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" }
99
+ wheels = [
100
+ { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" },
101
+ ]
102
+
103
+ [[package]]
104
+ name = "pytest-mock"
105
+ version = "3.15.1"
106
+ source = { registry = "https://pypi.org/simple" }
107
+ dependencies = [
108
+ { name = "pytest" },
109
+ ]
110
+ sdist = { url = "https://files.pythonhosted.org/packages/68/14/eb014d26be205d38ad5ad20d9a80f7d201472e08167f0bb4361e251084a9/pytest_mock-3.15.1.tar.gz", hash = "sha256:1849a238f6f396da19762269de72cb1814ab44416fa73a8686deac10b0d87a0f", size = 34036, upload-time = "2025-09-16T16:37:27.081Z" }
111
+ wheels = [
112
+ { url = "https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl", hash = "sha256:0a25e2eb88fe5168d535041d09a4529a188176ae608a6d249ee65abc0949630d", size = 10095, upload-time = "2025-09-16T16:37:25.734Z" },
113
+ ]
114
+
115
+ [[package]]
116
+ name = "python-dateutil"
117
+ version = "2.9.0.post0"
118
+ source = { registry = "https://pypi.org/simple" }
119
+ dependencies = [
120
+ { name = "six" },
121
+ ]
122
+ sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
123
+ wheels = [
124
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
125
+ ]
126
+
127
+ [[package]]
128
+ name = "s3transfer"
129
+ version = "0.16.0"
130
+ source = { registry = "https://pypi.org/simple" }
131
+ dependencies = [
132
+ { name = "botocore" },
133
+ ]
134
+ sdist = { url = "https://files.pythonhosted.org/packages/05/04/74127fc843314818edfa81b5540e26dd537353b123a4edc563109d8f17dd/s3transfer-0.16.0.tar.gz", hash = "sha256:8e990f13268025792229cd52fa10cb7163744bf56e719e0b9cb925ab79abf920", size = 153827, upload-time = "2025-12-01T02:30:59.114Z" }
135
+ wheels = [
136
+ { url = "https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl", hash = "sha256:18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe", size = 86830, upload-time = "2025-12-01T02:30:57.729Z" },
137
+ ]
138
+
139
+ [[package]]
140
+ name = "six"
141
+ version = "1.17.0"
142
+ source = { registry = "https://pypi.org/simple" }
143
+ sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
144
+ wheels = [
145
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
146
+ ]
147
+
148
+ [[package]]
149
+ name = "slack-error-log-handler-lambda"
150
+ version = "0.0.0"
151
+ source = { virtual = "." }
152
+
153
+ [package.dev-dependencies]
154
+ dev = [
155
+ { name = "boto3" },
156
+ { name = "pytest" },
157
+ { name = "pytest-mock" },
158
+ ]
159
+
160
+ [package.metadata]
161
+
162
+ [package.metadata.requires-dev]
163
+ dev = [
164
+ { name = "boto3", specifier = ">=1.26" },
165
+ { name = "pytest", specifier = ">=7.0" },
166
+ { name = "pytest-mock", specifier = ">=3.0" },
167
+ ]
168
+
169
+ [[package]]
170
+ name = "urllib3"
171
+ version = "2.6.3"
172
+ source = { registry = "https://pypi.org/simple" }
173
+ sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
174
+ wheels = [
175
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
176
+ ]
@@ -4,15 +4,22 @@ import type * as ec2 from "aws-cdk-lib/aws-ec2";
4
4
  import * as constructs from "constructs";
5
5
  export interface DatabaseAlarmsProps {
6
6
  /**
7
- * The default action to use for CloudWatch alarm state changes
7
+ * The action to use for alarms sent to "alarms" Slack channel,
8
+ * e.g., critical alerts.
8
9
  */
9
- action: cloudwatch.IAlarmAction;
10
+ alarmAction: cloudwatch.IAlarmAction;
11
+ /**
12
+ * The action to use for alarms sent to "warning" Slack channel,
13
+ * e.g., less critical alerts.
14
+ */
15
+ warningAction: cloudwatch.IAlarmAction;
10
16
  instanceIdentifier: string;
11
17
  instanceType: ec2.InstanceType;
12
18
  allocatedStorage: cdk.Size;
13
19
  }
14
20
  export declare class DatabaseAlarms extends constructs.Construct {
15
- private readonly action;
21
+ private readonly alarmAction;
22
+ private readonly warningAction;
16
23
  private readonly databaseInstanceIdentifier;
17
24
  private readonly instanceType;
18
25
  private readonly allocatedStorage;
@@ -44,6 +51,10 @@ export declare class DatabaseAlarms extends constructs.Construct {
44
51
  * @default 10% of the maximum earned CPU credits for the instance type.
45
52
  */
46
53
  threshold?: number;
54
+ /**
55
+ * @default true
56
+ */
57
+ enableOkAlarm?: boolean;
47
58
  /**
48
59
  * Add extra information to the alarm description, like Runbook URL or steps to triage.
49
60
  */
@@ -52,22 +63,18 @@ export declare class DatabaseAlarms extends constructs.Construct {
52
63
  /**
53
64
  * Sets up two CloudWatch Alarms for monitoring disk storage space:
54
65
  * 1) one that triggers if the available disk storage space is low.
55
- * 2) one that triggers if the available disk storage space is critcally low.
66
+ * 2) one that triggers if the available disk storage space is critically low.
56
67
  *
57
68
  * You may want to use different alarm actions for the two alarms, e.g., one can be
58
69
  * categorized as a "warning", while the other one can be considered an "alarm".
59
70
  */
60
71
  addStorageSpaceAlarms(props?: {
61
72
  /**
62
- * Configuration for an alarm.
63
- *
64
- * @default Configured with sane defaults.
73
+ * Set to `false` to disable both storage space alarms (low + critically low).
74
+ * @default true
65
75
  */
76
+ enabled?: boolean;
66
77
  lowStorageSpaceAlarm?: {
67
- /**
68
- * @default true
69
- */
70
- enabled?: boolean;
71
78
  /**
72
79
  * An action to use for CloudWatch alarm state changes instead of the default action
73
80
  */
@@ -76,17 +83,15 @@ export declare class DatabaseAlarms extends constructs.Construct {
76
83
  * @default 25% of the allocated storage.
77
84
  */
78
85
  threshold?: cdk.Size;
86
+ /**
87
+ * Whether to attach OK actions for this alarm. @default true
88
+ */
89
+ enableOkAlarm?: boolean;
79
90
  };
80
91
  /**
81
- * Configuration for an alarm.
82
- *
83
- * @default Configured with sane defaults.
92
+ * Configuration for critically low storage alarm.
84
93
  */
85
94
  criticallyLowStorageSpaceAlarm?: {
86
- /**
87
- * @default true
88
- */
89
- enabled?: boolean;
90
95
  /**
91
96
  * An action to use for CloudWatch alarm state changes instead of the default action
92
97
  */
@@ -95,6 +100,10 @@ export declare class DatabaseAlarms extends constructs.Construct {
95
100
  * @default 5% of the allocated storage.
96
101
  */
97
102
  threshold?: cdk.Size;
103
+ /**
104
+ * Whether to attach OK actions for this alarm. @default true
105
+ */
106
+ enableOkAlarm?: boolean;
98
107
  };
99
108
  /**
100
109
  * Add extra information to the alarm description, like Runbook URL or steps to triage.
@@ -129,6 +138,10 @@ export declare class DatabaseAlarms extends constructs.Construct {
129
138
  * @default 2 minutes
130
139
  */
131
140
  period?: cdk.Duration;
141
+ /**
142
+ * Whether to attach OK actions for this alarm. @default true
143
+ */
144
+ enableOkAlarm?: boolean;
132
145
  /**
133
146
  * Add extra information to the alarm description, like Runbook URL or steps to triage.
134
147
  */
@@ -33,13 +33,15 @@ const cpuCreditBalanceByInstanceType = {
33
33
  "t4g.2xlarge": 4608,
34
34
  };
35
35
  export class DatabaseAlarms extends constructs.Construct {
36
- action;
36
+ alarmAction;
37
+ warningAction;
37
38
  databaseInstanceIdentifier;
38
39
  instanceType;
39
40
  allocatedStorage;
40
41
  constructor(scope, id, props) {
41
42
  super(scope, id);
42
- this.action = props.action;
43
+ this.alarmAction = props.alarmAction;
44
+ this.warningAction = props.warningAction;
43
45
  this.databaseInstanceIdentifier = props.instanceIdentifier;
44
46
  this.instanceType = props.instanceType;
45
47
  this.allocatedStorage = props.allocatedStorage;
@@ -59,15 +61,18 @@ export class DatabaseAlarms extends constructs.Construct {
59
61
  * @default Configured with sane defaults.
60
62
  */
61
63
  props) {
64
+ // CPU credits alarms are only applicable to burstable instance types.
65
+ // Explicitly throw if a caller tries to create this alarm for a
66
+ // non-burstable instance.
62
67
  if (!this.instanceType.isBurstable()) {
63
- throw new Error("CPU credits are only relevant for burstable instance types.");
68
+ throw new Error(`addCpuCreditsAlarm: instance type '${this.instanceType.toString()}' is not burstable; this alarm is only applicable to burstable instance types.`);
64
69
  }
65
70
  const defaultThreshold = cpuCreditBalanceByInstanceType[this.instanceType.toString()] * 0.1;
66
71
  const threshold = props?.threshold ?? defaultThreshold;
67
72
  if (!threshold) {
68
73
  throw new Error(`No threshold supplied, and unable to determine a default value for instance type '${this.instanceType.toString()}'`);
69
74
  }
70
- new cloudwatch.Metric({
75
+ const creditsAlarm = new cloudwatch.Metric({
71
76
  metricName: "CPUCreditBalance",
72
77
  namespace: "AWS/RDS",
73
78
  statistic: "Minimum",
@@ -75,8 +80,7 @@ export class DatabaseAlarms extends constructs.Construct {
75
80
  dimensionsMap: {
76
81
  DBInstanceIdentifier: this.databaseInstanceIdentifier,
77
82
  },
78
- })
79
- .createAlarm(this, "CreditsAlarm", {
83
+ }).createAlarm(this, "CreditsAlarm", {
80
84
  alarmDescription: `Less than ${threshold} CPU credits remaining for RDS database '${this.databaseInstanceIdentifier}'. ${this.instanceType.toString().startsWith("t2.")
81
85
  ? "If this reaches 0, the instance will be limited to a baseline CPU utilization."
82
86
  : "If the balance is depleted, AWS adds additional charges."} ${props?.appendToAlarmDescription ?? ""}`,
@@ -84,18 +88,26 @@ export class DatabaseAlarms extends constructs.Construct {
84
88
  evaluationPeriods: 1,
85
89
  threshold: threshold,
86
90
  treatMissingData: cloudwatch.TreatMissingData.IGNORE,
87
- })
88
- .addAlarmAction(this.action);
91
+ });
92
+ // Default to the alarm action
93
+ creditsAlarm.addAlarmAction(props?.action ?? this.alarmAction);
94
+ if (props?.enableOkAlarm ?? true) {
95
+ creditsAlarm.addOkAction(props?.action ?? this.alarmAction);
96
+ }
89
97
  }
90
98
  /**
91
99
  * Sets up two CloudWatch Alarms for monitoring disk storage space:
92
100
  * 1) one that triggers if the available disk storage space is low.
93
- * 2) one that triggers if the available disk storage space is critcally low.
101
+ * 2) one that triggers if the available disk storage space is critically low.
94
102
  *
95
103
  * You may want to use different alarm actions for the two alarms, e.g., one can be
96
104
  * categorized as a "warning", while the other one can be considered an "alarm".
97
105
  */
98
106
  addStorageSpaceAlarms(props) {
107
+ // If the top-level enabled flag is explicitly false, do nothing
108
+ if (props?.enabled === false)
109
+ return;
110
+ // Create Low Storage Space alarm
99
111
  const lowStorageSpaceAlarm = new cloudwatch.Metric({
100
112
  metricName: "FreeStorageSpace",
101
113
  namespace: "AWS/RDS",
@@ -112,10 +124,13 @@ export class DatabaseAlarms extends constructs.Construct {
112
124
  this.allocatedStorage.toBytes() * 0.25,
113
125
  treatMissingData: cloudwatch.TreatMissingData.IGNORE,
114
126
  });
115
- if (props?.lowStorageSpaceAlarm?.enabled ?? true) {
116
- lowStorageSpaceAlarm.addAlarmAction(props?.lowStorageSpaceAlarm?.action || this.action);
117
- lowStorageSpaceAlarm.addOkAction(props?.lowStorageSpaceAlarm?.action || this.action);
127
+ // Default to the warning action
128
+ const lowAction = props?.lowStorageSpaceAlarm?.action ?? this.warningAction;
129
+ lowStorageSpaceAlarm.addAlarmAction(lowAction);
130
+ if (props?.lowStorageSpaceAlarm?.enableOkAlarm ?? true) {
131
+ lowStorageSpaceAlarm.addOkAction(lowAction);
118
132
  }
133
+ // Create Critically Low Storage Space alarm
119
134
  const criticallyLowStorageSpaceAlarm = new cloudwatch.Metric({
120
135
  metricName: "FreeStorageSpace",
121
136
  namespace: "AWS/RDS",
@@ -132,9 +147,11 @@ export class DatabaseAlarms extends constructs.Construct {
132
147
  this.allocatedStorage.toBytes() * 0.05,
133
148
  treatMissingData: cloudwatch.TreatMissingData.IGNORE,
134
149
  });
135
- if (props?.criticallyLowStorageSpaceAlarm?.enabled ?? true) {
136
- criticallyLowStorageSpaceAlarm.addAlarmAction(props?.criticallyLowStorageSpaceAlarm?.action || this.action);
137
- criticallyLowStorageSpaceAlarm.addOkAction(props?.criticallyLowStorageSpaceAlarm?.action || this.action);
150
+ // Default to the alarm action
151
+ const criticalAction = props?.criticallyLowStorageSpaceAlarm?.action ?? this.alarmAction;
152
+ criticallyLowStorageSpaceAlarm.addAlarmAction(criticalAction);
153
+ if (props?.criticallyLowStorageSpaceAlarm?.enableOkAlarm ?? true) {
154
+ criticallyLowStorageSpaceAlarm.addOkAction(criticalAction);
138
155
  }
139
156
  }
140
157
  /**
@@ -163,8 +180,12 @@ export class DatabaseAlarms extends constructs.Construct {
163
180
  threshold: props?.threshold ?? 80,
164
181
  treatMissingData: cloudwatch.TreatMissingData.IGNORE,
165
182
  });
166
- alarm.addAlarmAction(props?.action ?? this.action);
167
- alarm.addOkAction(props?.action ?? this.action);
183
+ // Default to the warning action
184
+ const cpuAction = props?.action ?? this.warningAction;
185
+ alarm.addAlarmAction(cpuAction);
186
+ if (props?.enableOkAlarm ?? true) {
187
+ alarm.addOkAction(cpuAction);
188
+ }
168
189
  }
169
190
  }
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtYWxhcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtcy9kYXRhYmFzZS1hbGFybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxLQUFLLFVBQVUsTUFBTSw0QkFBNEIsQ0FBQTtBQUV4RCxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQVl4Qyw0SEFBNEg7QUFDNUgsTUFBTSw4QkFBOEIsR0FFaEM7SUFDRixTQUFTLEVBQUUsRUFBRTtJQUNiLFVBQVUsRUFBRSxHQUFHO0lBQ2YsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsR0FBRztJQUNoQixVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFlBQVksRUFBRSxNQUFNO0lBQ3BCLFNBQVMsRUFBRSxHQUFHO0lBQ2QsVUFBVSxFQUFFLEdBQUc7SUFDZixVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLElBQUk7SUFDakIsWUFBWSxFQUFFLElBQUk7SUFDbEIsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsR0FBRztJQUNoQixXQUFXLEVBQUUsR0FBRztJQUNoQixZQUFZLEVBQUUsR0FBRztJQUNqQixXQUFXLEVBQUUsR0FBRztJQUNoQixZQUFZLEVBQUUsSUFBSTtJQUNsQixhQUFhLEVBQUUsSUFBSTtJQUNuQixVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFdBQVcsRUFBRSxHQUFHO0lBQ2hCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLGFBQWEsRUFBRSxJQUFJO0NBQ3BCLENBQUE7QUFFRCxNQUFNLE9BQU8sY0FBZSxTQUFRLFVBQVUsQ0FBQyxT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eEUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixJQUFJLENBQUM7WUFDaEQsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLElBQUksRUFBRTtZQUNqQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZ0JBQWdCLENBQUMsTUFBTTtTQUNyRCxDQUFDLENBQUE7UUFDRixLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2xELEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDakQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiXG5pbXBvcnQgKiBhcyBjbG91ZHdhdGNoIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWR3YXRjaFwiXG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiXG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCJcblxuZXhwb3J0IGludGVyZmFjZSBEYXRhYmFzZUFsYXJtc1Byb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlc1xuICAgKi9cbiAgYWN0aW9uOiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICBpbnN0YW5jZUlkZW50aWZpZXI6IHN0cmluZ1xuICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGVcbiAgYWxsb2NhdGVkU3RvcmFnZTogY2RrLlNpemVcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1jcmVkaXRzLWJhc2VsaW5lLWNvbmNlcHRzLmh0bWwjZWFybmluZy1DUFUtY3JlZGl0c1xuY29uc3QgY3B1Q3JlZGl0QmFsYW5jZUJ5SW5zdGFuY2VUeXBlOiB7XG4gIFtpbnN0YW5jZVR5cGU6IHN0cmluZ106IG51bWJlclxufSA9IHtcbiAgXCJ0Mi5uYW5vXCI6IDcyLFxuICBcInQyLm1pY3JvXCI6IDE0NCxcbiAgXCJ0Mi5zbWFsbFwiOiAyODgsXG4gIFwidDIubWVkaXVtXCI6IDU3NixcbiAgXCJ0Mi5sYXJnZVwiOiA4NjQsXG4gIFwidDIueGxhcmdlXCI6IDEyOTYsXG4gIFwidDIuMnhsYXJnZVwiOiAxOTU4LjQsXG4gIFwidDMubmFub1wiOiAxNDQsXG4gIFwidDMubWljcm9cIjogMjg4LFxuICBcInQzLnNtYWxsXCI6IDU3NixcbiAgXCJ0My5tZWRpdW1cIjogNTc2LFxuICBcInQzLmxhcmdlXCI6IDg2NCxcbiAgXCJ0My54bGFyZ2VcIjogMjMwNCxcbiAgXCJ0My4yeGxhcmdlXCI6IDQ2MDgsXG4gIFwidDNhLm5hbm9cIjogMTQ0LFxuICBcInQzYS5taWNyb1wiOiAyODgsXG4gIFwidDNhLnNtYWxsXCI6IDU3NixcbiAgXCJ0M2EubWVkaXVtXCI6IDU3NixcbiAgXCJ0M2EubGFyZ2VcIjogODY0LFxuICBcInQzYS54bGFyZ2VcIjogMjMwNCxcbiAgXCJ0M2EuMnhsYXJnZVwiOiA0NjA4LFxuICBcInQ0Zy5uYW5vXCI6IDE0NCxcbiAgXCJ0NGcubWljcm9cIjogMjg4LFxuICBcInQ0Zy5zbWFsbFwiOiA1NzYsXG4gIFwidDRnLm1lZGl1bVwiOiA1NzYsXG4gIFwidDRnLmxhcmdlXCI6IDg2NCxcbiAgXCJ0NGcueGxhcmdlXCI6IDIzMDQsXG4gIFwidDRnLjJ4bGFyZ2VcIjogNDYwOCxcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlQWxhcm1zIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGFjdGlvbjogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcjogc3RyaW5nXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VUeXBlOiBlYzIuSW5zdGFuY2VUeXBlXG4gIHByaXZhdGUgcmVhZG9ubHkgYWxsb2NhdGVkU3RvcmFnZTogY2RrLlNpemVcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogRGF0YWJhc2VBbGFybXNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgdGhpcy5hY3Rpb24gPSBwcm9wcy5hY3Rpb25cbiAgICB0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyID0gcHJvcHMuaW5zdGFuY2VJZGVudGlmaWVyXG4gICAgdGhpcy5pbnN0YW5jZVR5cGUgPSBwcm9wcy5pbnN0YW5jZVR5cGVcbiAgICB0aGlzLmFsbG9jYXRlZFN0b3JhZ2UgPSBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBhIENsb3VkV2F0Y2ggQWxhcm0gdGhhdCB0cmlnZ2VycyBpZiB0aGUgQ1BVIGNyZWRpdCBiYWxhbmNlIGZvclxuICAgKiBhIGJ1cnN0YWJsZSBpbnN0YW5jZSBicmVhY2ggYSBjZXJ0YWluIHRocmVzaG9sZC5cbiAgICpcbiAgICogTk9URTogVGhpcyBhbGFybSBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIGJ1cnN0YWJsZSBpbnN0YW5jZXMsIGFuZCBhIGJhbGFuY2Ugb2YgMCBjcmVkaXRzIHdpbGwgb25seSBoYXZlIHBlcmZvcm1hbmNlXG4gICAqIGltcGxpY2F0aW9ucyBmb3IgVDIgaW5zdGFuY2VzLiBUMyBhbmQgVDRnIGluc3RhbmNlcyB3aWxsIGluc3RlYWQgY29zdCBtb3JlIGZvciBwcm9sb25nZWQgaGlnaCBDUFUgdXRpbGl6YXRpb24gYWZ0ZXJcbiAgICogdGhlIGJhbGFuY2UgaXMgZGVwbGV0ZWQuXG4gICAqL1xuICBhZGRDcHVDcmVkaXRzQWxhcm0oXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgYW4gYWxhcm0uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBDb25maWd1cmVkIHdpdGggc2FuZSBkZWZhdWx0cy5cbiAgICAgKi9cbiAgICBwcm9wcz86IHtcbiAgICAgIC8qKlxuICAgICAgICogQW4gYWN0aW9uIHRvIHVzZSBmb3IgQ2xvdWRXYXRjaCBhbGFybSBzdGF0ZSBjaGFuZ2VzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYWN0aW9uXG4gICAgICAgKi9cbiAgICAgIGFjdGlvbj86IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBDbG91ZFdhdGNoIEFsYXJtIHdpbGwgY2hhbmdlIGl0cyBzdGF0ZSB0byBBTEFSTSBpZiB0aGUgbnVtYmVyIG9mIENQVSBjcmVkaXRzIGRyb3BzIGJlbG93IHRoaXMgdGhyZXNob2xkLlxuICAgICAgICpcbiAgICAgICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLWNyZWRpdHMtYmFzZWxpbmUtY29uY2VwdHMuaHRtbCNlYXJuaW5nLUNQVS1jcmVkaXRzIGZvciBhbiBvdmVydmlldyBvZiBtYXhpbXVtIENQVSBjcmVkaXRzIGZvciB2YXJpb3VzIGluc3RhbmNlIHR5cGVzLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IDEwJSBvZiB0aGUgbWF4aW11bSBlYXJuZWQgQ1BVIGNyZWRpdHMgZm9yIHRoZSBpbnN0YW5jZSB0eXBlLlxuICAgICAgICovXG4gICAgICB0aHJlc2hvbGQ/OiBudW1iZXJcbiAgICAgIC8qKlxuICAgICAgICogQWRkIGV4dHJhIGluZm9ybWF0aW9uIHRvIHRoZSBhbGFybSBkZXNjcmlwdGlvbiwgbGlrZSBSdW5ib29rIFVSTCBvciBzdGVwcyB0byB0cmlhZ2UuXG4gICAgICAgKi9cbiAgICAgIGFwcGVuZFRvQWxhcm1EZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pbnN0YW5jZVR5cGUuaXNCdXJzdGFibGUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkNQVSBjcmVkaXRzIGFyZSBvbmx5IHJlbGV2YW50IGZvciBidXJzdGFibGUgaW5zdGFuY2UgdHlwZXMuXCIsXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdFRocmVzaG9sZCA9XG4gICAgICBjcHVDcmVkaXRCYWxhbmNlQnlJbnN0YW5jZVR5cGVbdGhpcy5pbnN0YW5jZVR5cGUudG9TdHJpbmcoKV0gKiAwLjFcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBwcm9wcz8udGhyZXNob2xkID8/IGRlZmF1bHRUaHJlc2hvbGRcbiAgICBpZiAoIXRocmVzaG9sZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTm8gdGhyZXNob2xkIHN1cHBsaWVkLCBhbmQgdW5hYmxlIHRvIGRldGVybWluZSBhIGRlZmF1bHQgdmFsdWUgZm9yIGluc3RhbmNlIHR5cGUgJyR7dGhpcy5pbnN0YW5jZVR5cGUudG9TdHJpbmcoKX0nYCxcbiAgICAgIClcbiAgICB9XG4gICAgbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWU6IFwiQ1BVQ3JlZGl0QmFsYW5jZVwiLFxuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9SRFNcIixcbiAgICAgIHN0YXRpc3RpYzogXCJNaW5pbXVtXCIsXG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogdGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcixcbiAgICAgIH0sXG4gICAgfSlcbiAgICAgIC5jcmVhdGVBbGFybSh0aGlzLCBcIkNyZWRpdHNBbGFybVwiLCB7XG4gICAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBMZXNzIHRoYW4gJHt0aHJlc2hvbGR9IENQVSBjcmVkaXRzIHJlbWFpbmluZyBmb3IgUkRTIGRhdGFiYXNlICcke1xuICAgICAgICAgIHRoaXMuZGF0YWJhc2VJbnN0YW5jZUlkZW50aWZpZXJcbiAgICAgICAgfScuICR7XG4gICAgICAgICAgdGhpcy5pbnN0YW5jZVR5cGUudG9TdHJpbmcoKS5zdGFydHNXaXRoKFwidDIuXCIpXG4gICAgICAgICAgICA/IFwiSWYgdGhpcyByZWFjaGVzIDAsIHRoZSBpbnN0YW5jZSB3aWxsIGJlIGxpbWl0ZWQgdG8gYSBiYXNlbGluZSBDUFUgdXRpbGl6YXRpb24uXCJcbiAgICAgICAgICAgIDogXCJJZiB0aGUgYmFsYW5jZSBpcyBkZXBsZXRlZCwgQVdTIGFkZHMgYWRkaXRpb25hbCBjaGFyZ2VzLlwiXG4gICAgICAgIH0gJHtwcm9wcz8uYXBwZW5kVG9BbGFybURlc2NyaXB0aW9uID8/IFwiXCJ9YCxcbiAgICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5MRVNTX1RIQU5fVEhSRVNIT0xELFxuICAgICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgICAgdGhyZXNob2xkOiB0aHJlc2hvbGQsXG4gICAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgICB9KVxuICAgICAgLmFkZEFsYXJtQWN0aW9uKHRoaXMuYWN0aW9uKVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdHdvIENsb3VkV2F0Y2ggQWxhcm1zIGZvciBtb25pdG9yaW5nIGRpc2sgc3RvcmFnZSBzcGFjZTpcbiAgICogMSkgb25lIHRoYXQgdHJpZ2dlcnMgaWYgdGhlIGF2YWlsYWJsZSBkaXNrIHN0b3JhZ2Ugc3BhY2UgaXMgbG93LlxuICAgKiAyKSBvbmUgdGhhdCB0cmlnZ2VycyBpZiB0aGUgYXZhaWxhYmxlIGRpc2sgc3RvcmFnZSBzcGFjZSBpcyBjcml0Y2FsbHkgbG93LlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gdXNlIGRpZmZlcmVudCBhbGFybSBhY3Rpb25zIGZvciB0aGUgdHdvIGFsYXJtcywgZS5nLiwgb25lIGNhbiBiZVxuICAgKiBjYXRlZ29yaXplZCBhcyBhIFwid2FybmluZ1wiLCB3aGlsZSB0aGUgb3RoZXIgb25lIGNhbiBiZSBjb25zaWRlcmVkIGFuIFwiYWxhcm1cIi5cbiAgICovXG4gIGFkZFN0b3JhZ2VTcGFjZUFsYXJtcyhwcm9wcz86IHtcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBhbiBhbGFybS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IENvbmZpZ3VyZWQgd2l0aCBzYW5lIGRlZmF1bHRzLlxuICAgICAqL1xuICAgIGxvd1N0b3JhZ2VTcGFjZUFsYXJtPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICAgKi9cbiAgICAgIGVuYWJsZWQ/OiBib29sZWFuXG4gICAgICAvKipcbiAgICAgICAqIEFuIGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgICAgICovXG4gICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCAyNSUgb2YgdGhlIGFsbG9jYXRlZCBzdG9yYWdlLlxuICAgICAgICovXG4gICAgICB0aHJlc2hvbGQ/OiBjZGsuU2l6ZVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBhbiBhbGFybS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IENvbmZpZ3VyZWQgd2l0aCBzYW5lIGRlZmF1bHRzLlxuICAgICAqL1xuICAgIGNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybT86IHtcbiAgICAgIC8qKlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBlbmFibGVkPzogYm9vbGVhblxuICAgICAgLyoqXG4gICAgICAgKiBBbiBhY3Rpb24gdG8gdXNlIGZvciBDbG91ZFdhdGNoIGFsYXJtIHN0YXRlIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICAgICAqL1xuICAgICAgYWN0aW9uPzogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgICAgIC8qKlxuICAgICAgICogQGRlZmF1bHQgNSUgb2YgdGhlIGFsbG9jYXRlZCBzdG9yYWdlLlxuICAgICAgICovXG4gICAgICB0aHJlc2hvbGQ/OiBjZGsuU2l6ZVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBZGQgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIGFsYXJtIGRlc2NyaXB0aW9uLCBsaWtlIFJ1bmJvb2sgVVJMIG9yIHN0ZXBzIHRvIHRyaWFnZS5cbiAgICAgKi9cbiAgICBhcHBlbmRUb0FsYXJtRGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgfSk6IHZvaWQge1xuICAgIGNvbnN0IGxvd1N0b3JhZ2VTcGFjZUFsYXJtID0gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWU6IFwiRnJlZVN0b3JhZ2VTcGFjZVwiLFxuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9SRFNcIixcbiAgICAgIHN0YXRpc3RpYzogXCJNaW5pbXVtXCIsXG4gICAgICBwZXJpb2Q6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogdGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcixcbiAgICAgIH0sXG4gICAgfSkuY3JlYXRlQWxhcm0odGhpcywgXCJMb3dTdG9yYWdlU3BhY2VBbGFybVwiLCB7XG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBgTG93IHN0b3JhZ2Ugc3BhY2UgYXZhaWxhYmxlIG9uIFJEUyBkYXRhYmFzZSAnJHt0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyfScuICR7cHJvcHM/LmFwcGVuZFRvQWxhcm1EZXNjcmlwdGlvbiA/PyBcIlwifWAsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIHRocmVzaG9sZDpcbiAgICAgICAgcHJvcHM/Lmxvd1N0b3JhZ2VTcGFjZUFsYXJtPy50aHJlc2hvbGQ/LnRvQnl0ZXMoKSA/P1xuICAgICAgICB0aGlzLmFsbG9jYXRlZFN0b3JhZ2UudG9CeXRlcygpICogMC4yNSxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgfSlcbiAgICBpZiAocHJvcHM/Lmxvd1N0b3JhZ2VTcGFjZUFsYXJtPy5lbmFibGVkID8/IHRydWUpIHtcbiAgICAgIGxvd1N0b3JhZ2VTcGFjZUFsYXJtLmFkZEFsYXJtQWN0aW9uKFxuICAgICAgICBwcm9wcz8ubG93U3RvcmFnZVNwYWNlQWxhcm0/LmFjdGlvbiB8fCB0aGlzLmFjdGlvbixcbiAgICAgIClcbiAgICAgIGxvd1N0b3JhZ2VTcGFjZUFsYXJtLmFkZE9rQWN0aW9uKFxuICAgICAgICBwcm9wcz8ubG93U3RvcmFnZVNwYWNlQWxhcm0/LmFjdGlvbiB8fCB0aGlzLmFjdGlvbixcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBjcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogXCJGcmVlU3RvcmFnZVNwYWNlXCIsXG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL1JEU1wiLFxuICAgICAgc3RhdGlzdGljOiBcIk1pbmltdW1cIixcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiB0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCBcIkNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybVwiLCB7XG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBgQ3JpdGljYWxseSBsb3cgc3RvcmFnZSBzcGFjZSBhdmFpbGFibGUgb24gUkRTIGRhdGFiYXNlICcke3RoaXMuZGF0YWJhc2VJbnN0YW5jZUlkZW50aWZpZXJ9Jy4gJHtwcm9wcz8uYXBwZW5kVG9BbGFybURlc2NyaXB0aW9uID8/IFwiXCJ9YCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuTEVTU19USEFOX1RIUkVTSE9MRCxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiAxLFxuICAgICAgdGhyZXNob2xkOlxuICAgICAgICBwcm9wcz8uY3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtPy50aHJlc2hvbGQ/LnRvQnl0ZXMoKSA/P1xuICAgICAgICB0aGlzLmFsbG9jYXRlZFN0b3JhZ2UudG9CeXRlcygpICogMC4wNSxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgfSlcbiAgICBpZiAocHJvcHM/LmNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybT8uZW5hYmxlZCA/PyB0cnVlKSB7XG4gICAgICBjcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm0uYWRkQWxhcm1BY3Rpb24oXG4gICAgICAgIHByb3BzPy5jcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm0/LmFjdGlvbiB8fCB0aGlzLmFjdGlvbixcbiAgICAgIClcbiAgICAgIGNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybS5hZGRPa0FjdGlvbihcbiAgICAgICAgcHJvcHM/LmNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybT8uYWN0aW9uIHx8IHRoaXMuYWN0aW9uLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGEgQ2xvdWRXYXRjaCBBbGFybSB0aGF0IHRyaWdnZXJzIGlmIHRoZSBhdmVyYWdlIENQVSB1dGlsaXphdGlvbiBmb3JcbiAgICogdGhlIFJEUyBpbnN0YW5jZSBleGNlZWRzIGEgZ2l2ZW4gdGhyZXNob2xkLlxuICAgKi9cbiAgYWRkQ3B1VXRpbGl6YXRpb25BbGFybShcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBhbiBhbGFybS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IENvbmZpZ3VyZWQgd2l0aCBzYW5lIGRlZmF1bHRzLlxuICAgICAqL1xuICAgIHByb3BzPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBBbiBhY3Rpb24gdG8gdXNlIGZvciBDbG91ZFdhdGNoIGFsYXJtIHN0YXRlIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICAgICAqL1xuICAgICAgYWN0aW9uPzogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRocmVzaG9sZCBkZWZpbmVkIGFzIGEgcGVyY2VudGFnZSB0aGF0IGRldGVybWluZXMgaWYgQ1BVIHV0aWxpemF0aW9uIHNob3VsZCB0cmlnZ2VyIGFuIGFsYXJtIG9yIG5vdC5cbiAgICAgICAqIEBkZWZhdWx0IDgwXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IG51bWJlclxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCA1XG4gICAgICAgKi9cbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDIgbWludXRlc1xuICAgICAgICovXG4gICAgICBwZXJpb2Q/OiBjZGsuRHVyYXRpb25cbiAgICAgIC8qKlxuICAgICAgICogQWRkIGV4dHJhIGluZm9ybWF0aW9uIHRvIHRoZSBhbGFybSBkZXNjcmlwdGlvbiwgbGlrZSBSdW5ib29rIFVSTCBvciBzdGVwcyB0byB0cmlhZ2UuXG4gICAgICAgKi9cbiAgICAgIGFwcGVuZFRvQWxhcm1EZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgIH0sXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGFsYXJtID0gbmV3IGNsb3Vkd2F0Y2guTWV0cmljKHtcbiAgICAgIG1ldHJpY05hbWU6IFwiQ1BVVXRpbGl6YXRpb25cIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvUkRTXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiQXZlcmFnZVwiLFxuICAgICAgcGVyaW9kOiBwcm9wcz8ucGVyaW9kID8/IGNkay5EdXJhdGlvbi5taW51dGVzKDIpLFxuICAgICAgZGltZW5zaW9uc01hcDoge1xuICAgICAgICBEQkluc3RhbmNlSWRlbnRpZmllcjogdGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcixcbiAgICAgIH0sXG4gICAgfSkuY3JlYXRlQWxhcm0odGhpcywgXCJDcHVVdGlsaXphdGlvbkFsYXJtXCIsIHtcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBSRFMgZGF0YWJhc2UgJyR7dGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcn0nIGhhcyBhIGhpZ2hlciB0aGFuIGV4cGVjdGVkIENQVSB1dGlsaXphdGlvbi4gJHtwcm9wcz8uYXBwZW5kVG9BbGFybURlc2NyaXB0aW9uID8/IFwiXCJ9YCxcbiAgICAgIGNvbXBhcmlzb25PcGVyYXRvcjogY2xvdWR3YXRjaC5Db21wYXJpc29uT3BlcmF0b3IuR1JFQVRFUl9USEFOX1RIUkVTSE9MRCxcbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzOiBwcm9wcz8uZXZhbHVhdGlvblBlcmlvZHMgPz8gNSxcbiAgICAgIHRocmVzaG9sZDogcHJvcHM/LnRocmVzaG9sZCA/PyA4MCxcbiAgICAgIHRyZWF0TWlzc2luZ0RhdGE6IGNsb3Vkd2F0Y2guVHJlYXRNaXNzaW5nRGF0YS5JR05PUkUsXG4gICAgfSlcbiAgICBhbGFybS5hZGRBbGFybUFjdGlvbihwcm9wcz8uYWN0aW9uID8/IHRoaXMuYWN0aW9uKVxuICAgIGFsYXJtLmFkZE9rQWN0aW9uKHByb3BzPy5hY3Rpb24gPz8gdGhpcy5hY3Rpb24pXG4gIH1cbn1cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YWJhc2UtYWxhcm1zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FsYXJtcy9kYXRhYmFzZS1hbGFybXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLEdBQUcsTUFBTSxhQUFhLENBQUE7QUFDbEMsT0FBTyxLQUFLLFVBQVUsTUFBTSw0QkFBNEIsQ0FBQTtBQUV4RCxPQUFPLEtBQUssVUFBVSxNQUFNLFlBQVksQ0FBQTtBQWtCeEMsNEhBQTRIO0FBQzVILE1BQU0sOEJBQThCLEdBRWhDO0lBQ0YsU0FBUyxFQUFFLEVBQUU7SUFDYixVQUFVLEVBQUUsR0FBRztJQUNmLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEdBQUc7SUFDaEIsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsSUFBSTtJQUNqQixZQUFZLEVBQUUsTUFBTTtJQUNwQixTQUFTLEVBQUUsR0FBRztJQUNkLFVBQVUsRUFBRSxHQUFHO0lBQ2YsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsR0FBRztJQUNoQixVQUFVLEVBQUUsR0FBRztJQUNmLFdBQVcsRUFBRSxJQUFJO0lBQ2pCLFlBQVksRUFBRSxJQUFJO0lBQ2xCLFVBQVUsRUFBRSxHQUFHO0lBQ2YsV0FBVyxFQUFFLEdBQUc7SUFDaEIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsWUFBWSxFQUFFLEdBQUc7SUFDakIsV0FBVyxFQUFFLEdBQUc7SUFDaEIsWUFBWSxFQUFFLElBQUk7SUFDbEIsYUFBYSxFQUFFLElBQUk7SUFDbkIsVUFBVSxFQUFFLEdBQUc7SUFDZixXQUFXLEVBQUUsR0FBRztJQUNoQixXQUFXLEVBQUUsR0FBRztJQUNoQixZQUFZLEVBQUUsR0FBRztJQUNqQixXQUFXLEVBQUUsR0FBRztJQUNoQixZQUFZLEVBQUUsSUFBSTtJQUNsQixhQUFhLEVBQUUsSUFBSTtDQUNwQixDQUFBO0FBRUQsTUFBTSxPQUFPLGNBQWUsU0FBUSxVQUFVLENBQUMs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RCxNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDbEMsVUFBVSxFQUFFLGdCQUFnQjtZQUM1QixTQUFTLEVBQUUsU0FBUztZQUNwQixTQUFTLEVBQUUsU0FBUztZQUNwQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDaEQsYUFBYSxFQUFFO2dCQUNiLG9CQUFvQixFQUFFLElBQUksQ0FBQywwQkFBMEI7YUFDdEQ7U0FDRixDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUMxQyxnQkFBZ0IsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLDBCQUEwQixpREFBaUQsS0FBSyxFQUFFLHdCQUF3QixJQUFJLEVBQUUsRUFBRTtZQUMxSixrQkFBa0IsRUFBRSxVQUFVLENBQUMsa0JBQWtCLENBQUMsc0JBQXNCO1lBQ3hFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxpQkFBaUIsSUFBSSxDQUFDO1lBQ2hELFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxJQUFJLEVBQUU7WUFDakMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU07U0FDckQsQ0FBQyxDQUFBO1FBQ0YsZ0NBQWdDO1FBQ2hDLE1BQU0sU0FBUyxHQUFHLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQTtRQUNyRCxLQUFLLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQy9CLElBQUksS0FBSyxFQUFFLGFBQWEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzlCLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCJcbmltcG9ydCAqIGFzIGNsb3Vkd2F0Y2ggZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZHdhdGNoXCJcbmltcG9ydCB0eXBlICogYXMgZWMyIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCJcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlQWxhcm1zUHJvcHMge1xuICAvKipcbiAgICogVGhlIGFjdGlvbiB0byB1c2UgZm9yIGFsYXJtcyBzZW50IHRvIFwiYWxhcm1zXCIgU2xhY2sgY2hhbm5lbCxcbiAgICogZS5nLiwgY3JpdGljYWwgYWxlcnRzLlxuICAgKi9cbiAgYWxhcm1BY3Rpb246IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gIC8qKlxuICAgKiBUaGUgYWN0aW9uIHRvIHVzZSBmb3IgYWxhcm1zIHNlbnQgdG8gXCJ3YXJuaW5nXCIgU2xhY2sgY2hhbm5lbCxcbiAgICogZS5nLiwgbGVzcyBjcml0aWNhbCBhbGVydHMuXG4gICAqL1xuICB3YXJuaW5nQWN0aW9uOiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICBpbnN0YW5jZUlkZW50aWZpZXI6IHN0cmluZ1xuICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGVcbiAgYWxsb2NhdGVkU3RvcmFnZTogY2RrLlNpemVcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2J1cnN0YWJsZS1jcmVkaXRzLWJhc2VsaW5lLWNvbmNlcHRzLmh0bWwjZWFybmluZy1DUFUtY3JlZGl0c1xuY29uc3QgY3B1Q3JlZGl0QmFsYW5jZUJ5SW5zdGFuY2VUeXBlOiB7XG4gIFtpbnN0YW5jZVR5cGU6IHN0cmluZ106IG51bWJlclxufSA9IHtcbiAgXCJ0Mi5uYW5vXCI6IDcyLFxuICBcInQyLm1pY3JvXCI6IDE0NCxcbiAgXCJ0Mi5zbWFsbFwiOiAyODgsXG4gIFwidDIubWVkaXVtXCI6IDU3NixcbiAgXCJ0Mi5sYXJnZVwiOiA4NjQsXG4gIFwidDIueGxhcmdlXCI6IDEyOTYsXG4gIFwidDIuMnhsYXJnZVwiOiAxOTU4LjQsXG4gIFwidDMubmFub1wiOiAxNDQsXG4gIFwidDMubWljcm9cIjogMjg4LFxuICBcInQzLnNtYWxsXCI6IDU3NixcbiAgXCJ0My5tZWRpdW1cIjogNTc2LFxuICBcInQzLmxhcmdlXCI6IDg2NCxcbiAgXCJ0My54bGFyZ2VcIjogMjMwNCxcbiAgXCJ0My4yeGxhcmdlXCI6IDQ2MDgsXG4gIFwidDNhLm5hbm9cIjogMTQ0LFxuICBcInQzYS5taWNyb1wiOiAyODgsXG4gIFwidDNhLnNtYWxsXCI6IDU3NixcbiAgXCJ0M2EubWVkaXVtXCI6IDU3NixcbiAgXCJ0M2EubGFyZ2VcIjogODY0LFxuICBcInQzYS54bGFyZ2VcIjogMjMwNCxcbiAgXCJ0M2EuMnhsYXJnZVwiOiA0NjA4LFxuICBcInQ0Zy5uYW5vXCI6IDE0NCxcbiAgXCJ0NGcubWljcm9cIjogMjg4LFxuICBcInQ0Zy5zbWFsbFwiOiA1NzYsXG4gIFwidDRnLm1lZGl1bVwiOiA1NzYsXG4gIFwidDRnLmxhcmdlXCI6IDg2NCxcbiAgXCJ0NGcueGxhcmdlXCI6IDIzMDQsXG4gIFwidDRnLjJ4bGFyZ2VcIjogNDYwOCxcbn1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlQWxhcm1zIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IGFsYXJtQWN0aW9uOiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICBwcml2YXRlIHJlYWRvbmx5IHdhcm5pbmdBY3Rpb246IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YWJhc2VJbnN0YW5jZUlkZW50aWZpZXI6IHN0cmluZ1xuICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlVHlwZTogZWMyLkluc3RhbmNlVHlwZVxuICBwcml2YXRlIHJlYWRvbmx5IGFsbG9jYXRlZFN0b3JhZ2U6IGNkay5TaXplXG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IERhdGFiYXNlQWxhcm1zUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZClcblxuICAgIHRoaXMuYWxhcm1BY3Rpb24gPSBwcm9wcy5hbGFybUFjdGlvblxuICAgIHRoaXMud2FybmluZ0FjdGlvbiA9IHByb3BzLndhcm5pbmdBY3Rpb25cbiAgICB0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyID0gcHJvcHMuaW5zdGFuY2VJZGVudGlmaWVyXG4gICAgdGhpcy5pbnN0YW5jZVR5cGUgPSBwcm9wcy5pbnN0YW5jZVR5cGVcbiAgICB0aGlzLmFsbG9jYXRlZFN0b3JhZ2UgPSBwcm9wcy5hbGxvY2F0ZWRTdG9yYWdlXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBhIENsb3VkV2F0Y2ggQWxhcm0gdGhhdCB0cmlnZ2VycyBpZiB0aGUgQ1BVIGNyZWRpdCBiYWxhbmNlIGZvclxuICAgKiBhIGJ1cnN0YWJsZSBpbnN0YW5jZSBicmVhY2ggYSBjZXJ0YWluIHRocmVzaG9sZC5cbiAgICpcbiAgICogTk9URTogVGhpcyBhbGFybSBpcyBvbmx5IGFwcGxpY2FibGUgZm9yIGJ1cnN0YWJsZSBpbnN0YW5jZXMsIGFuZCBhIGJhbGFuY2Ugb2YgMCBjcmVkaXRzIHdpbGwgb25seSBoYXZlIHBlcmZvcm1hbmNlXG4gICAqIGltcGxpY2F0aW9ucyBmb3IgVDIgaW5zdGFuY2VzLiBUMyBhbmQgVDRnIGluc3RhbmNlcyB3aWxsIGluc3RlYWQgY29zdCBtb3JlIGZvciBwcm9sb25nZWQgaGlnaCBDUFUgdXRpbGl6YXRpb24gYWZ0ZXJcbiAgICogdGhlIGJhbGFuY2UgaXMgZGVwbGV0ZWQuXG4gICAqL1xuICBhZGRDcHVDcmVkaXRzQWxhcm0oXG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgYW4gYWxhcm0uXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBDb25maWd1cmVkIHdpdGggc2FuZSBkZWZhdWx0cy5cbiAgICAgKi9cbiAgICBwcm9wcz86IHtcbiAgICAgIC8qKlxuICAgICAgICogQW4gYWN0aW9uIHRvIHVzZSBmb3IgQ2xvdWRXYXRjaCBhbGFybSBzdGF0ZSBjaGFuZ2VzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYWN0aW9uXG4gICAgICAgKi9cbiAgICAgIGFjdGlvbj86IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gICAgICAvKipcbiAgICAgICAqIFRoZSBDbG91ZFdhdGNoIEFsYXJtIHdpbGwgY2hhbmdlIGl0cyBzdGF0ZSB0byBBTEFSTSBpZiB0aGUgbnVtYmVyIG9mIENQVSBjcmVkaXRzIGRyb3BzIGJlbG93IHRoaXMgdGhyZXNob2xkLlxuICAgICAgICpcbiAgICAgICAqIFNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9Vc2VyR3VpZGUvYnVyc3RhYmxlLWNyZWRpdHMtYmFzZWxpbmUtY29uY2VwdHMuaHRtbCNlYXJuaW5nLUNQVS1jcmVkaXRzIGZvciBhbiBvdmVydmlldyBvZiBtYXhpbXVtIENQVSBjcmVkaXRzIGZvciB2YXJpb3VzIGluc3RhbmNlIHR5cGVzLlxuICAgICAgICpcbiAgICAgICAqIEBkZWZhdWx0IDEwJSBvZiB0aGUgbWF4aW11bSBlYXJuZWQgQ1BVIGNyZWRpdHMgZm9yIHRoZSBpbnN0YW5jZSB0eXBlLlxuICAgICAgICovXG4gICAgICB0aHJlc2hvbGQ/OiBudW1iZXJcbiAgICAgIC8qKlxuICAgICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBlbmFibGVPa0FsYXJtPzogYm9vbGVhblxuICAgICAgLyoqXG4gICAgICAgKiBBZGQgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIGFsYXJtIGRlc2NyaXB0aW9uLCBsaWtlIFJ1bmJvb2sgVVJMIG9yIHN0ZXBzIHRvIHRyaWFnZS5cbiAgICAgICAqL1xuICAgICAgYXBwZW5kVG9BbGFybURlc2NyaXB0aW9uPzogc3RyaW5nXG4gICAgfSxcbiAgKTogdm9pZCB7XG4gICAgLy8gQ1BVIGNyZWRpdHMgYWxhcm1zIGFyZSBvbmx5IGFwcGxpY2FibGUgdG8gYnVyc3RhYmxlIGluc3RhbmNlIHR5cGVzLlxuICAgIC8vIEV4cGxpY2l0bHkgdGhyb3cgaWYgYSBjYWxsZXIgdHJpZXMgdG8gY3JlYXRlIHRoaXMgYWxhcm0gZm9yIGFcbiAgICAvLyBub24tYnVyc3RhYmxlIGluc3RhbmNlLlxuICAgIGlmICghdGhpcy5pbnN0YW5jZVR5cGUuaXNCdXJzdGFibGUoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgYWRkQ3B1Q3JlZGl0c0FsYXJtOiBpbnN0YW5jZSB0eXBlICcke3RoaXMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCl9JyBpcyBub3QgYnVyc3RhYmxlOyB0aGlzIGFsYXJtIGlzIG9ubHkgYXBwbGljYWJsZSB0byBidXJzdGFibGUgaW5zdGFuY2UgdHlwZXMuYCxcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBkZWZhdWx0VGhyZXNob2xkID1cbiAgICAgIGNwdUNyZWRpdEJhbGFuY2VCeUluc3RhbmNlVHlwZVt0aGlzLmluc3RhbmNlVHlwZS50b1N0cmluZygpXSAqIDAuMVxuICAgIGNvbnN0IHRocmVzaG9sZCA9IHByb3BzPy50aHJlc2hvbGQgPz8gZGVmYXVsdFRocmVzaG9sZFxuICAgIGlmICghdGhyZXNob2xkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBObyB0aHJlc2hvbGQgc3VwcGxpZWQsIGFuZCB1bmFibGUgdG8gZGV0ZXJtaW5lIGEgZGVmYXVsdCB2YWx1ZSBmb3IgaW5zdGFuY2UgdHlwZSAnJHt0aGlzLmluc3RhbmNlVHlwZS50b1N0cmluZygpfSdgLFxuICAgICAgKVxuICAgIH1cbiAgICBjb25zdCBjcmVkaXRzQWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogXCJDUFVDcmVkaXRCYWxhbmNlXCIsXG4gICAgICBuYW1lc3BhY2U6IFwiQVdTL1JEU1wiLFxuICAgICAgc3RhdGlzdGljOiBcIk1pbmltdW1cIixcbiAgICAgIHBlcmlvZDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiB0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCBcIkNyZWRpdHNBbGFybVwiLCB7XG4gICAgICBhbGFybURlc2NyaXB0aW9uOiBgTGVzcyB0aGFuICR7dGhyZXNob2xkfSBDUFUgY3JlZGl0cyByZW1haW5pbmcgZm9yIFJEUyBkYXRhYmFzZSAnJHt0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyfScuICR7XG4gICAgICAgIHRoaXMuaW5zdGFuY2VUeXBlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aChcInQyLlwiKVxuICAgICAgICAgID8gXCJJZiB0aGlzIHJlYWNoZXMgMCwgdGhlIGluc3RhbmNlIHdpbGwgYmUgbGltaXRlZCB0byBhIGJhc2VsaW5lIENQVSB1dGlsaXphdGlvbi5cIlxuICAgICAgICAgIDogXCJJZiB0aGUgYmFsYW5jZSBpcyBkZXBsZXRlZCwgQVdTIGFkZHMgYWRkaXRpb25hbCBjaGFyZ2VzLlwiXG4gICAgICB9ICR7cHJvcHM/LmFwcGVuZFRvQWxhcm1EZXNjcmlwdGlvbiA/PyBcIlwifWAsXG4gICAgICBjb21wYXJpc29uT3BlcmF0b3I6IGNsb3Vkd2F0Y2guQ29tcGFyaXNvbk9wZXJhdG9yLkxFU1NfVEhBTl9USFJFU0hPTEQsXG4gICAgICBldmFsdWF0aW9uUGVyaW9kczogMSxcbiAgICAgIHRocmVzaG9sZDogdGhyZXNob2xkLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KVxuXG4gICAgLy8gRGVmYXVsdCB0byB0aGUgYWxhcm0gYWN0aW9uXG4gICAgY3JlZGl0c0FsYXJtLmFkZEFsYXJtQWN0aW9uKHByb3BzPy5hY3Rpb24gPz8gdGhpcy5hbGFybUFjdGlvbilcbiAgICBpZiAocHJvcHM/LmVuYWJsZU9rQWxhcm0gPz8gdHJ1ZSkge1xuICAgICAgY3JlZGl0c0FsYXJtLmFkZE9rQWN0aW9uKHByb3BzPy5hY3Rpb24gPz8gdGhpcy5hbGFybUFjdGlvbilcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0d28gQ2xvdWRXYXRjaCBBbGFybXMgZm9yIG1vbml0b3JpbmcgZGlzayBzdG9yYWdlIHNwYWNlOlxuICAgKiAxKSBvbmUgdGhhdCB0cmlnZ2VycyBpZiB0aGUgYXZhaWxhYmxlIGRpc2sgc3RvcmFnZSBzcGFjZSBpcyBsb3cuXG4gICAqIDIpIG9uZSB0aGF0IHRyaWdnZXJzIGlmIHRoZSBhdmFpbGFibGUgZGlzayBzdG9yYWdlIHNwYWNlIGlzIGNyaXRpY2FsbHkgbG93LlxuICAgKlxuICAgKiBZb3UgbWF5IHdhbnQgdG8gdXNlIGRpZmZlcmVudCBhbGFybSBhY3Rpb25zIGZvciB0aGUgdHdvIGFsYXJtcywgZS5nLiwgb25lIGNhbiBiZVxuICAgKiBjYXRlZ29yaXplZCBhcyBhIFwid2FybmluZ1wiLCB3aGlsZSB0aGUgb3RoZXIgb25lIGNhbiBiZSBjb25zaWRlcmVkIGFuIFwiYWxhcm1cIi5cbiAgICovXG4gIGFkZFN0b3JhZ2VTcGFjZUFsYXJtcyhwcm9wcz86IHtcbiAgICAvKipcbiAgICAgKiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGJvdGggc3RvcmFnZSBzcGFjZSBhbGFybXMgKGxvdyArIGNyaXRpY2FsbHkgbG93KS5cbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW5cbiAgICBsb3dTdG9yYWdlU3BhY2VBbGFybT86IHtcbiAgICAgIC8qKlxuICAgICAgICogQW4gYWN0aW9uIHRvIHVzZSBmb3IgQ2xvdWRXYXRjaCBhbGFybSBzdGF0ZSBjaGFuZ2VzIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYWN0aW9uXG4gICAgICAgKi9cbiAgICAgIGFjdGlvbj86IGNsb3Vkd2F0Y2guSUFsYXJtQWN0aW9uXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDI1JSBvZiB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UuXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IGNkay5TaXplXG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gYXR0YWNoIE9LIGFjdGlvbnMgZm9yIHRoaXMgYWxhcm0uIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgZW5hYmxlT2tBbGFybT86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgY3JpdGljYWxseSBsb3cgc3RvcmFnZSBhbGFybS5cbiAgICAgKi9cbiAgICBjcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm0/OiB7XG4gICAgICAvKipcbiAgICAgICAqIEFuIGFjdGlvbiB0byB1c2UgZm9yIENsb3VkV2F0Y2ggYWxhcm0gc3RhdGUgY2hhbmdlcyBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGFjdGlvblxuICAgICAgICovXG4gICAgICBhY3Rpb24/OiBjbG91ZHdhdGNoLklBbGFybUFjdGlvblxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCA1JSBvZiB0aGUgYWxsb2NhdGVkIHN0b3JhZ2UuXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IGNkay5TaXplXG4gICAgICAvKipcbiAgICAgICAqIFdoZXRoZXIgdG8gYXR0YWNoIE9LIGFjdGlvbnMgZm9yIHRoaXMgYWxhcm0uIEBkZWZhdWx0IHRydWVcbiAgICAgICAqL1xuICAgICAgZW5hYmxlT2tBbGFybT86IGJvb2xlYW5cbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkIGV4dHJhIGluZm9ybWF0aW9uIHRvIHRoZSBhbGFybSBkZXNjcmlwdGlvbiwgbGlrZSBSdW5ib29rIFVSTCBvciBzdGVwcyB0byB0cmlhZ2UuXG4gICAgICovXG4gICAgYXBwZW5kVG9BbGFybURlc2NyaXB0aW9uPzogc3RyaW5nXG4gIH0pOiB2b2lkIHtcbiAgICAvLyBJZiB0aGUgdG9wLWxldmVsIGVuYWJsZWQgZmxhZyBpcyBleHBsaWNpdGx5IGZhbHNlLCBkbyBub3RoaW5nXG4gICAgaWYgKHByb3BzPy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuXG5cbiAgICAvLyBDcmVhdGUgTG93IFN0b3JhZ2UgU3BhY2UgYWxhcm1cbiAgICBjb25zdCBsb3dTdG9yYWdlU3BhY2VBbGFybSA9IG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lOiBcIkZyZWVTdG9yYWdlU3BhY2VcIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvUkRTXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiTWluaW11bVwiLFxuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IHRoaXMuZGF0YWJhc2VJbnN0YW5jZUlkZW50aWZpZXIsXG4gICAgICB9LFxuICAgIH0pLmNyZWF0ZUFsYXJtKHRoaXMsIFwiTG93U3RvcmFnZVNwYWNlQWxhcm1cIiwge1xuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYExvdyBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZSBvbiBSRFMgZGF0YWJhc2UgJyR7dGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcn0nLiAke3Byb3BzPy5hcHBlbmRUb0FsYXJtRGVzY3JpcHRpb24gPz8gXCJcIn1gLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5MRVNTX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICB0aHJlc2hvbGQ6XG4gICAgICAgIHByb3BzPy5sb3dTdG9yYWdlU3BhY2VBbGFybT8udGhyZXNob2xkPy50b0J5dGVzKCkgPz9cbiAgICAgICAgdGhpcy5hbGxvY2F0ZWRTdG9yYWdlLnRvQnl0ZXMoKSAqIDAuMjUsXG4gICAgICB0cmVhdE1pc3NpbmdEYXRhOiBjbG91ZHdhdGNoLlRyZWF0TWlzc2luZ0RhdGEuSUdOT1JFLFxuICAgIH0pXG5cbiAgICAvLyBEZWZhdWx0IHRvIHRoZSB3YXJuaW5nIGFjdGlvblxuICAgIGNvbnN0IGxvd0FjdGlvbiA9IHByb3BzPy5sb3dTdG9yYWdlU3BhY2VBbGFybT8uYWN0aW9uID8/IHRoaXMud2FybmluZ0FjdGlvblxuICAgIGxvd1N0b3JhZ2VTcGFjZUFsYXJtLmFkZEFsYXJtQWN0aW9uKGxvd0FjdGlvbilcbiAgICBpZiAocHJvcHM/Lmxvd1N0b3JhZ2VTcGFjZUFsYXJtPy5lbmFibGVPa0FsYXJtID8/IHRydWUpIHtcbiAgICAgIGxvd1N0b3JhZ2VTcGFjZUFsYXJtLmFkZE9rQWN0aW9uKGxvd0FjdGlvbilcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgQ3JpdGljYWxseSBMb3cgU3RvcmFnZSBTcGFjZSBhbGFybVxuICAgIGNvbnN0IGNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybSA9IG5ldyBjbG91ZHdhdGNoLk1ldHJpYyh7XG4gICAgICBtZXRyaWNOYW1lOiBcIkZyZWVTdG9yYWdlU3BhY2VcIixcbiAgICAgIG5hbWVzcGFjZTogXCJBV1MvUkRTXCIsXG4gICAgICBzdGF0aXN0aWM6IFwiTWluaW11bVwiLFxuICAgICAgcGVyaW9kOiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgIGRpbWVuc2lvbnNNYXA6IHtcbiAgICAgICAgREJJbnN0YW5jZUlkZW50aWZpZXI6IHRoaXMuZGF0YWJhc2VJbnN0YW5jZUlkZW50aWZpZXIsXG4gICAgICB9LFxuICAgIH0pLmNyZWF0ZUFsYXJtKHRoaXMsIFwiQ3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtXCIsIHtcbiAgICAgIGFsYXJtRGVzY3JpcHRpb246IGBDcml0aWNhbGx5IGxvdyBzdG9yYWdlIHNwYWNlIGF2YWlsYWJsZSBvbiBSRFMgZGF0YWJhc2UgJyR7dGhpcy5kYXRhYmFzZUluc3RhbmNlSWRlbnRpZmllcn0nLiAke3Byb3BzPy5hcHBlbmRUb0FsYXJtRGVzY3JpcHRpb24gPz8gXCJcIn1gLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5MRVNTX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IDEsXG4gICAgICB0aHJlc2hvbGQ6XG4gICAgICAgIHByb3BzPy5jcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm0/LnRocmVzaG9sZD8udG9CeXRlcygpID8/XG4gICAgICAgIHRoaXMuYWxsb2NhdGVkU3RvcmFnZS50b0J5dGVzKCkgKiAwLjA1LFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KVxuXG4gICAgLy8gRGVmYXVsdCB0byB0aGUgYWxhcm0gYWN0aW9uXG4gICAgY29uc3QgY3JpdGljYWxBY3Rpb24gPVxuICAgICAgcHJvcHM/LmNyaXRpY2FsbHlMb3dTdG9yYWdlU3BhY2VBbGFybT8uYWN0aW9uID8/IHRoaXMuYWxhcm1BY3Rpb25cbiAgICBjcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm0uYWRkQWxhcm1BY3Rpb24oY3JpdGljYWxBY3Rpb24pXG4gICAgaWYgKHByb3BzPy5jcml0aWNhbGx5TG93U3RvcmFnZVNwYWNlQWxhcm0/LmVuYWJsZU9rQWxhcm0gPz8gdHJ1ZSkge1xuICAgICAgY3JpdGljYWxseUxvd1N0b3JhZ2VTcGFjZUFsYXJtLmFkZE9rQWN0aW9uKGNyaXRpY2FsQWN0aW9uKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGEgQ2xvdWRXYXRjaCBBbGFybSB0aGF0IHRyaWdnZXJzIGlmIHRoZSBhdmVyYWdlIENQVSB1dGlsaXphdGlvbiBmb3JcbiAgICogdGhlIFJEUyBpbnN0YW5jZSBleGNlZWRzIGEgZ2l2ZW4gdGhyZXNob2xkLlxuICAgKi9cbiAgYWRkQ3B1VXRpbGl6YXRpb25BbGFybShcbiAgICAvKipcbiAgICAgKiBDb25maWd1cmF0aW9uIGZvciBhbiBhbGFybS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IENvbmZpZ3VyZWQgd2l0aCBzYW5lIGRlZmF1bHRzLlxuICAgICAqL1xuICAgIHByb3BzPzoge1xuICAgICAgLyoqXG4gICAgICAgKiBBbiBhY3Rpb24gdG8gdXNlIGZvciBDbG91ZFdhdGNoIGFsYXJtIHN0YXRlIGNoYW5nZXMgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBhY3Rpb25cbiAgICAgICAqL1xuICAgICAgYWN0aW9uPzogY2xvdWR3YXRjaC5JQWxhcm1BY3Rpb25cbiAgICAgIC8qKlxuICAgICAgICogVGhlIHRocmVzaG9sZCBkZWZpbmVkIGFzIGEgcGVyY2VudGFnZSB0aGF0IGRldGVybWluZXMgaWYgQ1BVIHV0aWxpemF0aW9uIHNob3VsZCB0cmlnZ2VyIGFuIGFsYXJtIG9yIG5vdC5cbiAgICAgICAqIEBkZWZhdWx0IDgwXG4gICAgICAgKi9cbiAgICAgIHRocmVzaG9sZD86IG51bWJlclxuICAgICAgLyoqXG4gICAgICAgKiBAZGVmYXVsdCA1XG4gICAgICAgKi9cbiAgICAgIGV2YWx1YXRpb25QZXJpb2RzPzogbnVtYmVyXG4gICAgICAvKipcbiAgICAgICAqIEBkZWZhdWx0IDIgbWludXRlc1xuICAgICAgICovXG4gICAgICBwZXJpb2Q/OiBjZGsuRHVyYXRpb25cbiAgICAgIC8qKlxuICAgICAgICogV2hldGhlciB0byBhdHRhY2ggT0sgYWN0aW9ucyBmb3IgdGhpcyBhbGFybS4gQGRlZmF1bHQgdHJ1ZVxuICAgICAgICovXG4gICAgICBlbmFibGVPa0FsYXJtPzogYm9vbGVhblxuICAgICAgLyoqXG4gICAgICAgKiBBZGQgZXh0cmEgaW5mb3JtYXRpb24gdG8gdGhlIGFsYXJtIGRlc2NyaXB0aW9uLCBsaWtlIFJ1bmJvb2sgVVJMIG9yIHN0ZXBzIHRvIHRyaWFnZS5cbiAgICAgICAqL1xuICAgICAgYXBwZW5kVG9BbGFybURlc2NyaXB0aW9uPzogc3RyaW5nXG4gICAgfSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgYWxhcm0gPSBuZXcgY2xvdWR3YXRjaC5NZXRyaWMoe1xuICAgICAgbWV0cmljTmFtZTogXCJDUFVVdGlsaXphdGlvblwiLFxuICAgICAgbmFtZXNwYWNlOiBcIkFXUy9SRFNcIixcbiAgICAgIHN0YXRpc3RpYzogXCJBdmVyYWdlXCIsXG4gICAgICBwZXJpb2Q6IHByb3BzPy5wZXJpb2QgPz8gY2RrLkR1cmF0aW9uLm1pbnV0ZXMoMiksXG4gICAgICBkaW1lbnNpb25zTWFwOiB7XG4gICAgICAgIERCSW5zdGFuY2VJZGVudGlmaWVyOiB0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyLFxuICAgICAgfSxcbiAgICB9KS5jcmVhdGVBbGFybSh0aGlzLCBcIkNwdVV0aWxpemF0aW9uQWxhcm1cIiwge1xuICAgICAgYWxhcm1EZXNjcmlwdGlvbjogYFJEUyBkYXRhYmFzZSAnJHt0aGlzLmRhdGFiYXNlSW5zdGFuY2VJZGVudGlmaWVyfScgaGFzIGEgaGlnaGVyIHRoYW4gZXhwZWN0ZWQgQ1BVIHV0aWxpemF0aW9uLiAke3Byb3BzPy5hcHBlbmRUb0FsYXJtRGVzY3JpcHRpb24gPz8gXCJcIn1gLFxuICAgICAgY29tcGFyaXNvbk9wZXJhdG9yOiBjbG91ZHdhdGNoLkNvbXBhcmlzb25PcGVyYXRvci5HUkVBVEVSX1RIQU5fVEhSRVNIT0xELFxuICAgICAgZXZhbHVhdGlvblBlcmlvZHM6IHByb3BzPy5ldmFsdWF0aW9uUGVyaW9kcyA/PyA1LFxuICAgICAgdGhyZXNob2xkOiBwcm9wcz8udGhyZXNob2xkID8/IDgwLFxuICAgICAgdHJlYXRNaXNzaW5nRGF0YTogY2xvdWR3YXRjaC5UcmVhdE1pc3NpbmdEYXRhLklHTk9SRSxcbiAgICB9KVxuICAgIC8vIERlZmF1bHQgdG8gdGhlIHdhcm5pbmcgYWN0aW9uXG4gICAgY29uc3QgY3B1QWN0aW9uID0gcHJvcHM/LmFjdGlvbiA/PyB0aGlzLndhcm5pbmdBY3Rpb25cbiAgICBhbGFybS5hZGRBbGFybUFjdGlvbihjcHVBY3Rpb24pXG4gICAgaWYgKHByb3BzPy5lbmFibGVPa0FsYXJtID8/IHRydWUpIHtcbiAgICAgIGFsYXJtLmFkZE9rQWN0aW9uKGNwdUFjdGlvbilcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -2,6 +2,8 @@ export type { DatabaseAlarmsProps } from "./database-alarms";
2
2
  export { DatabaseAlarms } from "./database-alarms";
3
3
  export type { LambdaAlarmsProps } from "./lambda-alarms";
4
4
  export { LambdaAlarms } from "./lambda-alarms";
5
+ export type { QueueAlarmsProps } from "./queue-alarms";
6
+ export { QueueAlarms } from "./queue-alarms";
5
7
  export type { ServiceAlarmsProps } from "./service-alarms";
6
8
  export { ServiceAlarms } from "./service-alarms";
7
9
  export type { SlackAlarmProps } from "./slack-alarm";
@@ -1,5 +1,6 @@
1
1
  export { DatabaseAlarms } from "./database-alarms";
2
2
  export { LambdaAlarms } from "./lambda-alarms";
3
+ export { QueueAlarms } from "./queue-alarms";
3
4
  export { ServiceAlarms } from "./service-alarms";
4
5
  export { SlackAlarm } from "./slack-alarm";
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFBO0FBRWhELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IERhdGFiYXNlQWxhcm1zUHJvcHMgfSBmcm9tIFwiLi9kYXRhYmFzZS1hbGFybXNcIlxuZXhwb3J0IHsgRGF0YWJhc2VBbGFybXMgfSBmcm9tIFwiLi9kYXRhYmFzZS1hbGFybXNcIlxuZXhwb3J0IHR5cGUgeyBMYW1iZGFBbGFybXNQcm9wcyB9IGZyb20gXCIuL2xhbWJkYS1hbGFybXNcIlxuZXhwb3J0IHsgTGFtYmRhQWxhcm1zIH0gZnJvbSBcIi4vbGFtYmRhLWFsYXJtc1wiXG5leHBvcnQgdHlwZSB7IFNlcnZpY2VBbGFybXNQcm9wcyB9IGZyb20gXCIuL3NlcnZpY2UtYWxhcm1zXCJcbmV4cG9ydCB7IFNlcnZpY2VBbGFybXMgfSBmcm9tIFwiLi9zZXJ2aWNlLWFsYXJtc1wiXG5leHBvcnQgdHlwZSB7IFNsYWNrQWxhcm1Qcm9wcyB9IGZyb20gXCIuL3NsYWNrLWFsYXJtXCJcbmV4cG9ydCB7IFNsYWNrQWxhcm0gfSBmcm9tIFwiLi9zbGFjay1hbGFybVwiXG4iXX0=
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYWxhcm1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUVsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFFOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRTVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUVoRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgeyBEYXRhYmFzZUFsYXJtc1Byb3BzIH0gZnJvbSBcIi4vZGF0YWJhc2UtYWxhcm1zXCJcbmV4cG9ydCB7IERhdGFiYXNlQWxhcm1zIH0gZnJvbSBcIi4vZGF0YWJhc2UtYWxhcm1zXCJcbmV4cG9ydCB0eXBlIHsgTGFtYmRhQWxhcm1zUHJvcHMgfSBmcm9tIFwiLi9sYW1iZGEtYWxhcm1zXCJcbmV4cG9ydCB7IExhbWJkYUFsYXJtcyB9IGZyb20gXCIuL2xhbWJkYS1hbGFybXNcIlxuZXhwb3J0IHR5cGUgeyBRdWV1ZUFsYXJtc1Byb3BzIH0gZnJvbSBcIi4vcXVldWUtYWxhcm1zXCJcbmV4cG9ydCB7IFF1ZXVlQWxhcm1zIH0gZnJvbSBcIi4vcXVldWUtYWxhcm1zXCJcbmV4cG9ydCB0eXBlIHsgU2VydmljZUFsYXJtc1Byb3BzIH0gZnJvbSBcIi4vc2VydmljZS1hbGFybXNcIlxuZXhwb3J0IHsgU2VydmljZUFsYXJtcyB9IGZyb20gXCIuL3NlcnZpY2UtYWxhcm1zXCJcbmV4cG9ydCB0eXBlIHsgU2xhY2tBbGFybVByb3BzIH0gZnJvbSBcIi4vc2xhY2stYWxhcm1cIlxuZXhwb3J0IHsgU2xhY2tBbGFybSB9IGZyb20gXCIuL3NsYWNrLWFsYXJtXCJcbiJdfQ==