@cloudsnorkel/cdk-github-runners 0.15.0 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.jsii +533 -327
  2. package/API.md +384 -174
  3. package/README.md +1 -1
  4. package/assets/delete-failed-runner.lambda/index.js +23 -6
  5. package/assets/idle-runner-repear.lambda/index.js +23 -6
  6. package/assets/setup.lambda/index.html +7 -7
  7. package/assets/setup.lambda/index.js +23 -6
  8. package/assets/status.lambda/index.js +23 -6
  9. package/assets/token-retriever.lambda/index.js +23 -6
  10. package/assets/warm-runner-manager.lambda/index.js +23 -6
  11. package/assets/webhook-handler.lambda/index.js +23 -6
  12. package/assets/webhook-redelivery.lambda/index.js +23 -6
  13. package/lib/access.js +1 -1
  14. package/lib/image-builders/api.js +1 -1
  15. package/lib/image-builders/aws-image-builder/base-image.js +2 -2
  16. package/lib/image-builders/aws-image-builder/builder.js +1 -1
  17. package/lib/image-builders/aws-image-builder/deprecated/ami.js +1 -1
  18. package/lib/image-builders/aws-image-builder/deprecated/container.js +1 -1
  19. package/lib/image-builders/aws-image-builder/deprecated/linux-components.js +1 -1
  20. package/lib/image-builders/aws-image-builder/deprecated/windows-components.js +1 -1
  21. package/lib/image-builders/codebuild-deprecated.js +1 -1
  22. package/lib/image-builders/components.js +1 -1
  23. package/lib/image-builders/static.js +1 -1
  24. package/lib/providers/codebuild.d.ts +2 -2
  25. package/lib/providers/codebuild.js +3 -3
  26. package/lib/providers/common.d.ts +47 -3
  27. package/lib/providers/common.js +29 -5
  28. package/lib/providers/composite.js +14 -19
  29. package/lib/providers/ec2.d.ts +4 -2
  30. package/lib/providers/ec2.js +58 -30
  31. package/lib/providers/ecs.d.ts +2 -2
  32. package/lib/providers/ecs.js +8 -8
  33. package/lib/providers/fargate.d.ts +2 -2
  34. package/lib/providers/fargate.js +13 -8
  35. package/lib/providers/lambda.d.ts +2 -2
  36. package/lib/providers/lambda.js +3 -3
  37. package/lib/runner.d.ts +6 -1
  38. package/lib/runner.js +54 -31
  39. package/lib/secrets.js +1 -1
  40. package/lib/warm-runner.d.ts +15 -7
  41. package/lib/warm-runner.js +19 -12
  42. package/package.json +15 -15
@@ -29,8 +29,9 @@ export interface WarmRunnerBaseProps {
29
29
  readonly owner: string;
30
30
  /**
31
31
  * Registration level — must match how your runners are set up in GitHub. Choose
32
- * 'org' for org-wide runners, 'repo' for repo-level. See the setup wizard or
33
- * {@link SETUP_GITHUB.md} for choosing repo vs org.
32
+ * 'org' for org-wide runners, 'repo' for repo-level. See the setup wizard for choosing repo vs org.
33
+ *
34
+ * @see https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md
34
35
  *
35
36
  * @default 'repo'
36
37
  */
@@ -64,7 +65,9 @@ export interface ScheduledWarmRunnerProps extends WarmRunnerBaseProps {
64
65
  *
65
66
  * Runners will be provisioned using the specified provider and registered in the specified repository or organization.
66
67
  *
67
- * Registration level must match the one selected during setup. See {@link SETUP_GITHUB.md} for more information on the selection.
68
+ * Registration level must match the one selected during setup.
69
+ *
70
+ * @see https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md
68
71
  *
69
72
  * ## Limitations
70
73
  *
@@ -76,7 +79,7 @@ export interface ScheduledWarmRunnerProps extends WarmRunnerBaseProps {
76
79
  * gap in coverage until the retry succeeds. Current retry mechanism has built-in back-off rate and
77
80
  * can be tweaked using `retryOptions`. This will be improved in the future.
78
81
  *
79
- * @example
82
+ * ```typescript
80
83
  * new AlwaysOnWarmRunner(stack, 'AlwaysOnLinux', {
81
84
  * runners,
82
85
  * provider: myProvider,
@@ -84,6 +87,7 @@ export interface ScheduledWarmRunnerProps extends WarmRunnerBaseProps {
84
87
  * owner: 'my-org',
85
88
  * repo: 'my-repo',
86
89
  * });
90
+ * ```
87
91
  */
88
92
  export declare class AlwaysOnWarmRunner extends Construct {
89
93
  /**
@@ -98,7 +102,9 @@ export declare class AlwaysOnWarmRunner extends Construct {
98
102
  *
99
103
  * Runners will be provisioned using the specified provider and registered in the specified repository or organization.
100
104
  *
101
- * Registration level must match the one selected during setup. See {@link SETUP_GITHUB.md} for more information on the selection.
105
+ * Registration level must match the one selected during setup.
106
+ *
107
+ * @see https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md
102
108
  *
103
109
  * ## Limitations
104
110
  *
@@ -113,7 +119,7 @@ export declare class AlwaysOnWarmRunner extends Construct {
113
119
  * gap in coverage until the retry succeeds. Current retry mechanism has built-in back-off rate and
114
120
  * can be tweaked using `retryOptions`. This will be improved in the future.
115
121
  *
116
- * @example
122
+ * ```typescript
117
123
  * // Cron: fill at 1pm on weekdays
118
124
  * new ScheduledWarmRunner(stack, 'Business Hours', {
119
125
  * runners,
@@ -124,8 +130,9 @@ export declare class AlwaysOnWarmRunner extends Construct {
124
130
  * schedule: events.Schedule.cron({ hour: '13', minute: '0', weekDay: 'MON-FRI' }),
125
131
  * duration: cdk.Duration.hours(2),
126
132
  * });
133
+ * ```
127
134
  *
128
- * @example
135
+ * ```typescript
129
136
  * // Rate: fill every 12 hours
130
137
  * new ScheduledWarmRunner(stack, 'Every 12 Hours', {
131
138
  * runners,
@@ -136,6 +143,7 @@ export declare class AlwaysOnWarmRunner extends Construct {
136
143
  * schedule: events.Schedule.rate(cdk.Duration.hours(5)),
137
144
  * duration: cdk.Duration.hours(12),
138
145
  * });
146
+ * ```
139
147
  */
140
148
  export declare class ScheduledWarmRunner extends Construct {
141
149
  /**
@@ -11,17 +11,17 @@ const cron_parser_1 = require("cron-parser");
11
11
  function buildWarmRunner(scope, props, schedule, duration, createInitialFill) {
12
12
  const registrationLevel = props.registrationLevel ?? 'repo';
13
13
  if (registrationLevel === 'org' && props.repo) {
14
- throw new Error('Do not specify repo when registrationLevel is \'org\'');
14
+ cdk.Annotations.of(scope).addError('Do not specify repo when registrationLevel is \'org\'');
15
15
  }
16
16
  if (registrationLevel === 'repo' && !props.repo) {
17
- throw new Error('repo is required when registrationLevel is \'repo\'');
17
+ cdk.Annotations.of(scope).addError('repo is required when registrationLevel is \'repo\'');
18
18
  }
19
19
  const providerPath = props.provider.node.path;
20
20
  if (!props.runners.providers.some(p => p.node.path === providerPath)) {
21
- throw new Error(`Provider ${providerPath} is not in the providers list of the GitHubRunners construct`);
21
+ cdk.Annotations.of(scope).addError(`Provider ${providerPath} is not in the providers list of the GitHubRunners construct`);
22
22
  }
23
23
  const labels = props.provider.labels;
24
- const repo = registrationLevel === 'repo' ? props.repo : '';
24
+ const repo = registrationLevel === 'repo' ? (props.repo ?? '') : '';
25
25
  const configHash = crypto.createHash('sha256')
26
26
  .update(JSON.stringify({ providerPath, providerLabels: labels, count: props.count, duration, owner: props.owner, repo }))
27
27
  .digest('hex')
@@ -61,7 +61,9 @@ function buildWarmRunner(scope, props, schedule, duration, createInitialFill) {
61
61
  *
62
62
  * Runners will be provisioned using the specified provider and registered in the specified repository or organization.
63
63
  *
64
- * Registration level must match the one selected during setup. See {@link SETUP_GITHUB.md} for more information on the selection.
64
+ * Registration level must match the one selected during setup.
65
+ *
66
+ * @see https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md
65
67
  *
66
68
  * ## Limitations
67
69
  *
@@ -73,7 +75,7 @@ function buildWarmRunner(scope, props, schedule, duration, createInitialFill) {
73
75
  * gap in coverage until the retry succeeds. Current retry mechanism has built-in back-off rate and
74
76
  * can be tweaked using `retryOptions`. This will be improved in the future.
75
77
  *
76
- * @example
78
+ * ```typescript
77
79
  * new AlwaysOnWarmRunner(stack, 'AlwaysOnLinux', {
78
80
  * runners,
79
81
  * provider: myProvider,
@@ -81,6 +83,7 @@ function buildWarmRunner(scope, props, schedule, duration, createInitialFill) {
81
83
  * owner: 'my-org',
82
84
  * repo: 'my-repo',
83
85
  * });
86
+ * ```
84
87
  */
85
88
  class AlwaysOnWarmRunner extends constructs_1.Construct {
86
89
  constructor(scope, id, props) {
@@ -90,7 +93,7 @@ class AlwaysOnWarmRunner extends constructs_1.Construct {
90
93
  }
91
94
  exports.AlwaysOnWarmRunner = AlwaysOnWarmRunner;
92
95
  _a = JSII_RTTI_SYMBOL_1;
93
- AlwaysOnWarmRunner[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.AlwaysOnWarmRunner", version: "0.15.0" };
96
+ AlwaysOnWarmRunner[_a] = { fqn: "@cloudsnorkel/cdk-github-runners.AlwaysOnWarmRunner", version: "0.15.1" };
94
97
  /**
95
98
  * Convert AWS EventBridge cron format to cron-parser format.
96
99
  * AWS: cron(min hour dom month dow year), cron-parser: sec min hour dom month dow
@@ -150,7 +153,9 @@ function getScheduleIntervalSeconds(expressionString) {
150
153
  *
151
154
  * Runners will be provisioned using the specified provider and registered in the specified repository or organization.
152
155
  *
153
- * Registration level must match the one selected during setup. See {@link SETUP_GITHUB.md} for more information on the selection.
156
+ * Registration level must match the one selected during setup.
157
+ *
158
+ * @see https://github.com/CloudSnorkel/cdk-github-runners/blob/main/SETUP_GITHUB.md
154
159
  *
155
160
  * ## Limitations
156
161
  *
@@ -165,7 +170,7 @@ function getScheduleIntervalSeconds(expressionString) {
165
170
  * gap in coverage until the retry succeeds. Current retry mechanism has built-in back-off rate and
166
171
  * can be tweaked using `retryOptions`. This will be improved in the future.
167
172
  *
168
- * @example
173
+ * ```typescript
169
174
  * // Cron: fill at 1pm on weekdays
170
175
  * new ScheduledWarmRunner(stack, 'Business Hours', {
171
176
  * runners,
@@ -176,8 +181,9 @@ function getScheduleIntervalSeconds(expressionString) {
176
181
  * schedule: events.Schedule.cron({ hour: '13', minute: '0', weekDay: 'MON-FRI' }),
177
182
  * duration: cdk.Duration.hours(2),
178
183
  * });
184
+ * ```
179
185
  *
180
- * @example
186
+ * ```typescript
181
187
  * // Rate: fill every 12 hours
182
188
  * new ScheduledWarmRunner(stack, 'Every 12 Hours', {
183
189
  * runners,
@@ -188,6 +194,7 @@ function getScheduleIntervalSeconds(expressionString) {
188
194
  * schedule: events.Schedule.rate(cdk.Duration.hours(5)),
189
195
  * duration: cdk.Duration.hours(12),
190
196
  * });
197
+ * ```
191
198
  */
192
199
  class ScheduledWarmRunner extends constructs_1.Construct {
193
200
  constructor(scope, id, props) {
@@ -206,5 +213,5 @@ class ScheduledWarmRunner extends constructs_1.Construct {
206
213
  }
207
214
  exports.ScheduledWarmRunner = ScheduledWarmRunner;
208
215
  _b = JSII_RTTI_SYMBOL_1;
209
- ScheduledWarmRunner[_b] = { fqn: "@cloudsnorkel/cdk-github-runners.ScheduledWarmRunner", version: "0.15.0" };
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybS1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd2FybS1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLDZDQUdxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsNkNBQW1EO0FBb0VuRCxTQUFTLGVBQWUsQ0FBQyxLQUFnQixFQUFFLEtBQTBCLEVBQUUsUUFBeUIsRUFBRSxRQUFnQixFQUFFLGlCQUEwQjtJQUM1SSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLENBQUM7SUFDNUQsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQ0QsSUFBSSxpQkFBaUIsS0FBSyxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDOUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxFQUFFLENBQUM7UUFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLFlBQVksOERBQThELENBQUMsQ0FBQztJQUMxRyxDQUFDO0lBRUQsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7SUFFckMsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDN0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDM0MsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN4SCxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ2IsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUVoQixNQUFNLFdBQVcsR0FBMEI7UUFDekMsTUFBTSxFQUFFLE1BQWU7UUFDdkIsWUFBWTtRQUNaLGNBQWMsRUFBRSxNQUFNO1FBQ3RCLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztRQUNsQixRQUFRO1FBQ1IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1FBQ2xCLElBQUk7UUFDSixVQUFVO0tBQ1gsQ0FBQztJQUVGLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUM1RSxLQUFLLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBRWxELGdIQUFnSDtJQUNoSCxJQUFJLHdCQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUU7UUFDakMsUUFBUTtRQUNSLE9BQU8sRUFBRSxDQUFDLElBQUksZ0NBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFO2dCQUMzQyxPQUFPLEVBQUUsd0JBQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQzthQUN4RCxDQUFDLENBQUM7S0FDSixDQUFDLENBQUM7SUFFSCxzRUFBc0U7SUFDdEUsa0dBQWtHO0lBQ2xHLElBQUksaUJBQWlCLEVBQUUsQ0FBQztRQUN0QixJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRTtZQUM1QyxZQUFZLEVBQUUsU0FBUyxDQUFDLFdBQVc7WUFDbkMsWUFBWSxFQUFFLHdCQUF3QjtZQUN0QyxVQUFVLEVBQUUsV0FBVztTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBeUJHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxzQkFBUztJQU8vQyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSx3QkFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdJLENBQUM7O0FBVkgsZ0RBV0M7OztBQUVEOzs7R0FHRztBQUNILFNBQVMscUJBQXFCLENBQUMsZ0JBQXdCO0lBQ3JELE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZELElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxnQkFBZ0IsQ0FBQztJQUNwQyxNQUFNLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDeEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sZ0JBQWdCLENBQUM7SUFDaEQsTUFBTSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDOUMsT0FBTyxLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxnQkFBd0I7SUFDakQsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxDQUFDLENBQUM7SUFDaEcsSUFBSSxDQUFDLEtBQUs7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUM3QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDakMsTUFBTSxjQUFjLEdBQTJCO1FBQzdDLE1BQU0sRUFBRSxFQUFFO1FBQ1YsT0FBTyxFQUFFLEVBQUU7UUFDWCxJQUFJLEVBQUUsSUFBSTtRQUNWLEtBQUssRUFBRSxJQUFJO1FBQ1gsR0FBRyxFQUFFLEtBQUs7UUFDVixJQUFJLEVBQUUsS0FBSztLQUNaLENBQUM7SUFDRixPQUFPLEtBQUssR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsMEJBQTBCLENBQUMsZ0JBQXdCO0lBQzFELE1BQU0sWUFBWSxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekQsSUFBSSxZQUFZLEtBQUssU0FBUztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBRXBELElBQUksQ0FBQztRQUNILE1BQU0sY0FBYyxHQUFHLGtDQUFvQixDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDM0YsTUFBTSxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN4RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRztBQUNILE1BQWEsbUJBQW9CLFNBQVEsc0JBQVM7SUFPaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUErQjtRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLCtGQUErRjtRQUMvRixNQUFNLFFBQVEsR0FBRywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDN0UsSUFBSSxRQUFRLEtBQUssU0FBUyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDcEUsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxnQ0FBZ0MsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsYUFBYSxFQUFFLG9JQUFvSSxDQUFDLENBQUM7UUFDdFQsQ0FBQztRQUVELDBCQUEwQjtRQUMxQixJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDM0UsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUNuQyx1RUFBdUUsRUFDdkUsZ0NBQWdDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSwyRUFBMkUsQ0FDMUosQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RyxDQUFDOztBQXpCSCxrREEwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBhd3NfZXZlbnRzIGFzIGV2ZW50cyxcbiAgYXdzX2V2ZW50c190YXJnZXRzIGFzIGV2ZW50c190YXJnZXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENyb25FeHByZXNzaW9uUGFyc2VyIH0gZnJvbSAnY3Jvbi1wYXJzZXInO1xuaW1wb3J0IHsgSUNvbXBvc2l0ZVByb3ZpZGVyLCBJUnVubmVyUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBHaXRIdWJSdW5uZXJzIH0gZnJvbSAnLi9ydW5uZXInO1xuaW1wb3J0IHsgV2FybVJ1bm5lckZpbGxQYXlsb2FkIH0gZnJvbSAnLi93YXJtLXJ1bm5lci1tYW5hZ2VyLmxhbWJkYSc7XG5cbi8qKlxuICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIHdhcm0gcnVubmVyIGNvbnN0cnVjdHMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FybVJ1bm5lckJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViUnVubmVycyBjb25zdHJ1Y3QgdGhhdCBvd25zIHRoZSBzaGFyZWQgd2FybSBydW5uZXIgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqL1xuICByZWFkb25seSBydW5uZXJzOiBHaXRIdWJSdW5uZXJzO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlciB0byB1c2UuIFdhcm0gcnVubmVycyBieXBhc3MgdGhlIHByb3ZpZGVyIHNlbGVjdG9yIOKAlCB0aGV5IGFsd2F5cyB1c2VcbiAgICogdGhpcyBwcm92aWRlciwgcmVnYXJkbGVzcyBvZiBqb2IgY2hhcmFjdGVyaXN0aWNzLiBMYWJlbHMgY2Fubm90IGJlIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IElSdW5uZXJQcm92aWRlciB8IElDb21wb3NpdGVQcm92aWRlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHdhcm0gcnVubmVycyB0byBtYWludGFpbi5cbiAgICovXG4gIHJlYWRvbmx5IGNvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBvd25lciB3aGVyZSBydW5uZXJzIHdpbGwgYmUgcmVnaXN0ZXJlZCAob3JnIG9yIHVzZXIgbG9naW4pLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI6IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaXN0cmF0aW9uIGxldmVsIOKAlCBtdXN0IG1hdGNoIGhvdyB5b3VyIHJ1bm5lcnMgYXJlIHNldCB1cCBpbiBHaXRIdWIuIENob29zZVxuICAgKiAnb3JnJyBmb3Igb3JnLXdpZGUgcnVubmVycywgJ3JlcG8nIGZvciByZXBvLWxldmVsLiBTZWUgdGhlIHNldHVwIHdpemFyZCBvclxuICAgKiB7QGxpbmsgU0VUVVBfR0lUSFVCLm1kfSBmb3IgY2hvb3NpbmcgcmVwbyB2cyBvcmcuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdyZXBvJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVnaXN0cmF0aW9uTGV2ZWw/OiAnb3JnJyB8ICdyZXBvJztcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBuYW1lICh3aXRob3V0IG93bmVyKSB3aGVyZSBydW5uZXJzIHdpbGwgYmUgcmVnaXN0ZXJlZC4gUmVxdWlyZWQgd2hlbiBgcmVnaXN0cmF0aW9uTGV2ZWxgIGlzICdyZXBvJy5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG8/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgYWx3YXlzIG9uIHdhcm0gcnVubmVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbHdheXNPbldhcm1SdW5uZXJQcm9wcyBleHRlbmRzIFdhcm1SdW5uZXJCYXNlUHJvcHMgeyB9XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3Igc2NoZWR1bGVkIHdhcm0gcnVubmVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlZHVsZWRXYXJtUnVubmVyUHJvcHMgZXh0ZW5kcyBXYXJtUnVubmVyQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFdoZW4gdG8gc3RhcnQgZmlsbGluZyB0aGUgcG9vbCAoZS5nLiBzdGFydCBvZiBidXNpbmVzcyBob3VycykuXG4gICAqL1xuICByZWFkb25seSBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlO1xuXG4gIC8qKlxuICAgKiBIb3cgbG9uZyB0aGUgd2FybSBydW5uZXJzIHNob3VsZCBiZSBtYWludGFpbmVkIGZyb20gdGhlIGZpbGwgdGltZSAoc2NoZWR1bGUpLiBEZWZpbmVzIHRoZSBlbmQgb2YgdGhlXG4gICAqIHdpbmRvdyAoc2NoZWR1bGUgdGltZSArIGR1cmF0aW9uKS5cbiAgICovXG4gIHJlYWRvbmx5IGR1cmF0aW9uOiBjZGsuRHVyYXRpb247XG59XG5cbmZ1bmN0aW9uIGJ1aWxkV2FybVJ1bm5lcihzY29wZTogQ29uc3RydWN0LCBwcm9wczogV2FybVJ1bm5lckJhc2VQcm9wcywgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZSwgZHVyYXRpb246IG51bWJlciwgY3JlYXRlSW5pdGlhbEZpbGw6IGJvb2xlYW4pIHtcbiAgY29uc3QgcmVnaXN0cmF0aW9uTGV2ZWwgPSBwcm9wcy5yZWdpc3RyYXRpb25MZXZlbCA/PyAncmVwbyc7XG4gIGlmIChyZWdpc3RyYXRpb25MZXZlbCA9PT0gJ29yZycgJiYgcHJvcHMucmVwbykge1xuICAgIHRocm93IG5ldyBFcnJvcignRG8gbm90IHNwZWNpZnkgcmVwbyB3aGVuIHJlZ2lzdHJhdGlvbkxldmVsIGlzIFxcJ29yZ1xcJycpO1xuICB9XG4gIGlmIChyZWdpc3RyYXRpb25MZXZlbCA9PT0gJ3JlcG8nICYmICFwcm9wcy5yZXBvKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXBvIGlzIHJlcXVpcmVkIHdoZW4gcmVnaXN0cmF0aW9uTGV2ZWwgaXMgXFwncmVwb1xcJycpO1xuICB9XG5cbiAgY29uc3QgcHJvdmlkZXJQYXRoID0gcHJvcHMucHJvdmlkZXIubm9kZS5wYXRoO1xuICBpZiAoIXByb3BzLnJ1bm5lcnMucHJvdmlkZXJzLnNvbWUocCA9PiBwLm5vZGUucGF0aCA9PT0gcHJvdmlkZXJQYXRoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgJHtwcm92aWRlclBhdGh9IGlzIG5vdCBpbiB0aGUgcHJvdmlkZXJzIGxpc3Qgb2YgdGhlIEdpdEh1YlJ1bm5lcnMgY29uc3RydWN0YCk7XG4gIH1cblxuICBjb25zdCBsYWJlbHMgPSBwcm9wcy5wcm92aWRlci5sYWJlbHM7XG5cbiAgY29uc3QgcmVwbyA9IHJlZ2lzdHJhdGlvbkxldmVsID09PSAncmVwbycgPyBwcm9wcy5yZXBvISA6ICcnO1xuICBjb25zdCBjb25maWdIYXNoID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTI1NicpXG4gICAgLnVwZGF0ZShKU09OLnN0cmluZ2lmeSh7IHByb3ZpZGVyUGF0aCwgcHJvdmlkZXJMYWJlbHM6IGxhYmVscywgY291bnQ6IHByb3BzLmNvdW50LCBkdXJhdGlvbiwgb3duZXI6IHByb3BzLm93bmVyLCByZXBvIH0pKVxuICAgIC5kaWdlc3QoJ2hleCcpXG4gICAgLnNsaWNlKDAsIDE2KTtcblxuICBjb25zdCBmaWxsUGF5bG9hZDogV2FybVJ1bm5lckZpbGxQYXlsb2FkID0ge1xuICAgIGFjdGlvbjogJ2ZpbGwnIGFzIGNvbnN0LFxuICAgIHByb3ZpZGVyUGF0aCxcbiAgICBwcm92aWRlckxhYmVsczogbGFiZWxzLFxuICAgIGNvdW50OiBwcm9wcy5jb3VudCxcbiAgICBkdXJhdGlvbixcbiAgICBvd25lcjogcHJvcHMub3duZXIsXG4gICAgcmVwbyxcbiAgICBjb25maWdIYXNoLFxuICB9O1xuXG4gIGNvbnN0IHsgbGFtYmRhOiBtYW5hZ2VyRm4sIHF1ZXVlIH0gPSBwcm9wcy5ydW5uZXJzLl9lbnN1cmVXYXJtUnVubmVySW5mcmEoKTtcbiAgcHJvcHMucnVubmVycy5fcmVnaXN0ZXJXYXJtQ29uZmlnSGFzaChjb25maWdIYXNoKTtcblxuICAvLyBTY2hlZHVsZSB0byBmaWxsIHRoZSB3YXJtIHBvb2wgKHVzdWFsbHkgZGFpbHkpLiBTZW5kcyB0byBTUVMgc28gd2UgZ2V0IHN0YWJsZSBtZXNzYWdlSWQgZm9yIGlkZW1wb3RlbnQgZmlsbHMuXG4gIG5ldyBldmVudHMuUnVsZShzY29wZSwgJ1NjaGVkdWxlJywge1xuICAgIHNjaGVkdWxlLFxuICAgIHRhcmdldHM6IFtuZXcgZXZlbnRzX3RhcmdldHMuU3FzUXVldWUocXVldWUsIHtcbiAgICAgIG1lc3NhZ2U6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdChmaWxsUGF5bG9hZCksXG4gICAgfSldLFxuICB9KTtcblxuICAvLyBGaWxsIHRoZSB3YXJtIHBvb2wgaW1tZWRpYXRlbHkgb24gZGVwbG95IChBbHdheXNPbldhcm1SdW5uZXIgb25seSkuXG4gIC8vIFNjaGVkdWxlZFdhcm1SdW5uZXIgZG9lcyBub3QgZ2V0IGRlcGxveW1lbnQtZmlsbC4gRmlyc3QgZmlsbCBoYXBwZW5zIGF0IHRoZSBuZXh0IHNjaGVkdWxlIGZpcmUuXG4gIGlmIChjcmVhdGVJbml0aWFsRmlsbCkge1xuICAgIG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2Uoc2NvcGUsICdJbml0aWFsIEZpbGwnLCB7XG4gICAgICBzZXJ2aWNlVG9rZW46IG1hbmFnZXJGbi5mdW5jdGlvbkFybixcbiAgICAgIHJlc291cmNlVHlwZTogJ0N1c3RvbTo6V2FybVJ1bm5lckZpbGwnLFxuICAgICAgcHJvcGVydGllczogZmlsbFBheWxvYWQsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZmlsbFBheWxvYWQ7XG59XG5cbi8qKlxuICogV2FybSBydW5uZXJzIHRoYXQgcnVuIDI0LzcuIEZpbGxzIGF0IG1pZG5pZ2h0IFVUQyBhbmQgZWFjaCBydW5uZXIgc3RheXMgYWxpdmUgZm9yIDI0IGhvdXJzLlxuICpcbiAqIFJ1bm5lcnMgd2lsbCBiZSBwcm92aXNpb25lZCB1c2luZyB0aGUgc3BlY2lmaWVkIHByb3ZpZGVyIGFuZCByZWdpc3RlcmVkIGluIHRoZSBzcGVjaWZpZWQgcmVwb3NpdG9yeSBvciBvcmdhbml6YXRpb24uXG4gKlxuICogUmVnaXN0cmF0aW9uIGxldmVsIG11c3QgbWF0Y2ggdGhlIG9uZSBzZWxlY3RlZCBkdXJpbmcgc2V0dXAuIFNlZSB7QGxpbmsgU0VUVVBfR0lUSFVCLm1kfSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgc2VsZWN0aW9uLlxuICpcbiAqICMjIExpbWl0YXRpb25zXG4gKlxuICogLSBKb2JzIHdpbGwgc3RpbGwgdHJpZ2dlciBwcm92aXNpb25pbmcgb2Ygb24tZGVtYW5kIHJ1bm5lcnMsIGV2ZW4gaWYgYSB3YXJtIHJ1bm5lciBlbmRzIHVwIGJlaW5nIHVzZWQuXG4gKiAtIFlvdSBtYXkgYnJpZWZseSBzZWUgbW9yZSB0aGFuIGBjb3VudGAgcnVubmVycyB3aGVuIGNoYW5naW5nIGNvbmZpZyBvciBhdCByb3RhdGlvbi5cbiAqIC0gVG8gcmVtb3ZlOiBzZXQgYGNvdW50YCB0byAwLCBkZXBsb3ksIHdhaXQgZm9yIHdhcm0gcnVubmVycyB0byBzdG9wLCB0aGVuIHJlbW92ZSBhbmQgZGVwbG95IGFnYWluLlxuICogICBJZiB5b3UgZG9uJ3QgZm9sbG93IHRoaXMgcHJvY2VkdXJlLCB3YXJtIHJ1bm5lcnMgbWF5IGxpbmdlciB1bnRpbCB0aGV5IGV4cGlyZS5cbiAqIC0gUHJvdmlkZXIgZmFpbHVyZXMgb3IgdGltZW91dHMgKGxpa2UgTGFtYmRhIHByb3ZpZGVyIHRpbWluZyBvdXQgYWZ0ZXIgMTUgbWludXRlcykgd2lsbCByZXN1bHQgaW4gYVxuICogICBnYXAgaW4gY292ZXJhZ2UgdW50aWwgdGhlIHJldHJ5IHN1Y2NlZWRzLiBDdXJyZW50IHJldHJ5IG1lY2hhbmlzbSBoYXMgYnVpbHQtaW4gYmFjay1vZmYgcmF0ZSBhbmRcbiAqICAgY2FuIGJlIHR3ZWFrZWQgdXNpbmcgYHJldHJ5T3B0aW9uc2AuIFRoaXMgd2lsbCBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBuZXcgQWx3YXlzT25XYXJtUnVubmVyKHN0YWNrLCAnQWx3YXlzT25MaW51eCcsIHtcbiAqICAgcnVubmVycyxcbiAqICAgcHJvdmlkZXI6IG15UHJvdmlkZXIsXG4gKiAgIGNvdW50OiAzLFxuICogICBvd25lcjogJ215LW9yZycsXG4gKiAgIHJlcG86ICdteS1yZXBvJyxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgQWx3YXlzT25XYXJtUnVubmVyIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgLyoqXG4gICAqIFRoZSBmaWxsIHBheWxvYWQgZm9yIHRoaXMgd2FybSBydW5uZXIgY29uZmlndXJhdGlvbi5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX2ZpbGxQYXlsb2FkOiBXYXJtUnVubmVyRmlsbFBheWxvYWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEFsd2F5c09uV2FybVJ1bm5lclByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLl9maWxsUGF5bG9hZCA9IGJ1aWxkV2FybVJ1bm5lcih0aGlzLCBwcm9wcywgZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiAnMCcsIG1pbnV0ZTogJzAnIH0pLCBjZGsuRHVyYXRpb24uZGF5cygxKS50b1NlY29uZHMoKSwgdHJ1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IEFXUyBFdmVudEJyaWRnZSBjcm9uIGZvcm1hdCB0byBjcm9uLXBhcnNlciBmb3JtYXQuXG4gKiBBV1M6IGNyb24obWluIGhvdXIgZG9tIG1vbnRoIGRvdyB5ZWFyKSwgY3Jvbi1wYXJzZXI6IHNlYyBtaW4gaG91ciBkb20gbW9udGggZG93XG4gKi9cbmZ1bmN0aW9uIGF3c0Nyb25Ub1BhcnNlckZvcm1hdChleHByZXNzaW9uU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IGV4cHJlc3Npb25TdHJpbmcubWF0Y2goL15jcm9uXFwoKC4rKVxcKSQvKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIGV4cHJlc3Npb25TdHJpbmc7XG4gIGNvbnN0IFssIGlubmVyXSA9IG1hdGNoO1xuICBjb25zdCBwYXJ0cyA9IGlubmVyLnRyaW0oKS5zcGxpdCgvXFxzKy8pO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSA2KSByZXR1cm4gZXhwcmVzc2lvblN0cmluZztcbiAgY29uc3QgW21pbnV0ZSwgaG91ciwgZG9tLCBtb250aCwgZG93XSA9IHBhcnRzO1xuICByZXR1cm4gYDAgJHttaW51dGV9ICR7aG91cn0gJHtkb219ICR7bW9udGh9ICR7ZG93fWA7XG59XG5cbi8qKlxuICogUGFyc2UgQVdTIEV2ZW50QnJpZGdlIHJhdGUgZXhwcmVzc2lvbiBhbmQgcmV0dXJuIGludGVydmFsIGluIHNlY29uZHMuXG4gKiBGb3JtYXQ6IHJhdGUodmFsdWUgdW5pdCkgZS5nLiByYXRlKDIgaG91cnMpLCByYXRlKDUgbWludXRlcyksIHJhdGUoMSBkYXkpXG4gKi9cbmZ1bmN0aW9uIHBhcnNlUmF0ZUludGVydmFsKGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoID0gZXhwcmVzc2lvblN0cmluZy5tYXRjaCgvXnJhdGVcXCgoXFxkKylcXHMrKG1pbnV0ZXxtaW51dGVzfGhvdXJ8aG91cnN8ZGF5fGRheXMpXFwpJC9pKTtcbiAgaWYgKCFtYXRjaCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgdmFsdWUgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICBjb25zdCB1bml0ID0gbWF0Y2hbMl0udG9Mb3dlckNhc2UoKTtcbiAgaWYgKHZhbHVlIDw9IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IHNlY29uZHNQZXJVbml0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge1xuICAgIG1pbnV0ZTogNjAsXG4gICAgbWludXRlczogNjAsXG4gICAgaG91cjogMzYwMCxcbiAgICBob3VyczogMzYwMCxcbiAgICBkYXk6IDg2NDAwLFxuICAgIGRheXM6IDg2NDAwLFxuICB9O1xuICByZXR1cm4gdmFsdWUgKiBzZWNvbmRzUGVyVW5pdFt1bml0XTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIGludGVydmFsIGJldHdlZW4gc2NoZWR1bGUgb2NjdXJyZW5jZXMgaW4gc2Vjb25kcy5cbiAqIFN1cHBvcnRzIGJvdGggY3JvbiBhbmQgcmF0ZSBleHByZXNzaW9ucy5cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZWR1bGVJbnRlcnZhbFNlY29uZHMoZXhwcmVzc2lvblN0cmluZzogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcmF0ZUludGVydmFsID0gcGFyc2VSYXRlSW50ZXJ2YWwoZXhwcmVzc2lvblN0cmluZyk7XG4gIGlmIChyYXRlSW50ZXJ2YWwgIT09IHVuZGVmaW5lZCkgcmV0dXJuIHJhdGVJbnRlcnZhbDtcblxuICB0cnkge1xuICAgIGNvbnN0IGNyb25FeHByZXNzaW9uID0gQ3JvbkV4cHJlc3Npb25QYXJzZXIucGFyc2UoYXdzQ3JvblRvUGFyc2VyRm9ybWF0KGV4cHJlc3Npb25TdHJpbmcpKTtcbiAgICBjb25zdCBuZXh0ID0gY3JvbkV4cHJlc3Npb24udGFrZSgyKTtcbiAgICByZXR1cm4gKG5leHRbMV0uZ2V0VGltZSgpIC0gbmV4dFswXS5nZXRUaW1lKCkpIC8gMTAwMDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFdhcm0gcnVubmVycyBhY3RpdmUgZHVyaW5nIGEgdGltZSB3aW5kb3cgc3BlY2lmaWVkIGJ5IHN0YXJ0IHRpbWUgKGBzY2hlZHVsZWApIGFuZCBkdXJhdGlvbiAoYGR1cmF0aW9uYCkuXG4gKlxuICogUnVubmVycyB3aWxsIGJlIHByb3Zpc2lvbmVkIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvdmlkZXIgYW5kIHJlZ2lzdGVyZWQgaW4gdGhlIHNwZWNpZmllZCByZXBvc2l0b3J5IG9yIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBSZWdpc3RyYXRpb24gbGV2ZWwgbXVzdCBtYXRjaCB0aGUgb25lIHNlbGVjdGVkIGR1cmluZyBzZXR1cC4gU2VlIHtAbGluayBTRVRVUF9HSVRIVUIubWR9IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBzZWxlY3Rpb24uXG4gKlxuICogIyMgTGltaXRhdGlvbnNcbiAqXG4gKiAtICoqTm8gZGVwbG95bWVudC1maWxsKio6IFVubGlrZSBgQWx3YXlzT25XYXJtUnVubmVyYCwgc2NoZWR1bGVkIHdhcm0gcnVubmVycyBkbyBub3QgZ2V0IGFuIGluaXRpYWxcbiAqICAgZmlsbCBvbiBkZXBsb3kuIFRoZSBmaXJzdCBmaWxsIGhhcHBlbnMgYXQgdGhlIG5leHQgc2NoZWR1bGUgb2NjdXJyZW5jZS4gSWYgeW91IGRlcGxveSBhdCAxcG0gZm9yXG4gKiAgIGEgMnBtIHNjaGVkdWxlLCBydW5uZXJzIHdpbGwgbm90IGFwcGVhciB1bnRpbCAycG0uXG4gKiAtIEpvYnMgd2lsbCBzdGlsbCB0cmlnZ2VyIHByb3Zpc2lvbmluZyBvZiBvbi1kZW1hbmQgcnVubmVycywgZXZlbiBpZiBhIHdhcm0gcnVubmVyIGVuZHMgdXAgYmVpbmcgdXNlZC5cbiAqIC0gWW91IG1heSBicmllZmx5IHNlZSBtb3JlIHRoYW4gYGNvdW50YCBydW5uZXJzIHdoZW4gY2hhbmdpbmcgY29uZmlnIG9yIGF0IHJvdGF0aW9uLlxuICogLSBUbyByZW1vdmU6IHNldCBgY291bnRgIHRvIDAsIGRlcGxveSwgd2FpdCBmb3Igd2FybSBydW5uZXJzIHRvIHN0b3AsIHRoZW4gcmVtb3ZlIGFuZCBkZXBsb3kgYWdhaW4uXG4gKiAgIElmIHlvdSBkb24ndCBmb2xsb3cgdGhpcyBwcm9jZWR1cmUsIHdhcm0gcnVubmVycyBtYXkgbGluZ2VyIHVudGlsIHRoZXkgZXhwaXJlLlxuICogLSBQcm92aWRlciBmYWlsdXJlcyBvciB0aW1lb3V0cyAobGlrZSBMYW1iZGEgcHJvdmlkZXIgdGltaW5nIG91dCBhZnRlciAxNSBtaW51dGVzKSB3aWxsIHJlc3VsdCBpbiBhXG4gKiAgIGdhcCBpbiBjb3ZlcmFnZSB1bnRpbCB0aGUgcmV0cnkgc3VjY2VlZHMuIEN1cnJlbnQgcmV0cnkgbWVjaGFuaXNtIGhhcyBidWlsdC1pbiBiYWNrLW9mZiByYXRlIGFuZFxuICogICBjYW4gYmUgdHdlYWtlZCB1c2luZyBgcmV0cnlPcHRpb25zYC4gVGhpcyB3aWxsIGJlIGltcHJvdmVkIGluIHRoZSBmdXR1cmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIENyb246IGZpbGwgYXQgMXBtIG9uIHdlZWtkYXlzXG4gKiBuZXcgU2NoZWR1bGVkV2FybVJ1bm5lcihzdGFjaywgJ0J1c2luZXNzIEhvdXJzJywge1xuICogICBydW5uZXJzLFxuICogICBwcm92aWRlcjogbXlQcm92aWRlcixcbiAqICAgY291bnQ6IDMsXG4gKiAgIG93bmVyOiAnbXktb3JnJyxcbiAqICAgcmVwbzogJ215LXJlcG8nLFxuICogICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiAnMTMnLCBtaW51dGU6ICcwJywgd2Vla0RheTogJ01PTi1GUkknIH0pLFxuICogICBkdXJhdGlvbjogY2RrLkR1cmF0aW9uLmhvdXJzKDIpLFxuICogfSk7XG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIFJhdGU6IGZpbGwgZXZlcnkgMTIgaG91cnNcbiAqIG5ldyBTY2hlZHVsZWRXYXJtUnVubmVyKHN0YWNrLCAnRXZlcnkgMTIgSG91cnMnLCB7XG4gKiAgIHJ1bm5lcnMsXG4gKiAgIHByb3ZpZGVyOiBteVByb3ZpZGVyLFxuICogICBjb3VudDogMixcbiAqICAgb3duZXI6ICdteS1vcmcnLFxuICogICByZXBvOiAnbXktcmVwbycsXG4gKiAgIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUucmF0ZShjZGsuRHVyYXRpb24uaG91cnMoNSkpLFxuICogICBkdXJhdGlvbjogY2RrLkR1cmF0aW9uLmhvdXJzKDEyKSxcbiAqIH0pO1xuICovXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVkV2FybVJ1bm5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgZmlsbCBwYXlsb2FkIGZvciB0aGlzIHdhcm0gcnVubmVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9maWxsUGF5bG9hZDogV2FybVJ1bm5lckZpbGxQYXlsb2FkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTY2hlZHVsZWRXYXJtUnVubmVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBkdXJhdGlvbiBpcyBub3QgbG9uZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gbmV4dCB0d28gc2NoZWR1bGUgb2NjdXJyZW5jZXNcbiAgICBjb25zdCBpbnRlcnZhbCA9IGdldFNjaGVkdWxlSW50ZXJ2YWxTZWNvbmRzKHByb3BzLnNjaGVkdWxlLmV4cHJlc3Npb25TdHJpbmcpO1xuICAgIGlmIChpbnRlcnZhbCAhPT0gdW5kZWZpbmVkICYmIGludGVydmFsIDwgcHJvcHMuZHVyYXRpb24udG9TZWNvbmRzKCkpIHtcbiAgICAgIGNkay5Bbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRFcnJvcihgU2NoZWR1bGVkV2FybVJ1bm5lciBkdXJhdGlvbiAke3Byb3BzLmR1cmF0aW9uLnRvSHVtYW5TdHJpbmcoKX0gaXMgbG9uZ2VyIHRoYW4gdGhlIGludGVydmFsICR7Y2RrLkR1cmF0aW9uLnNlY29uZHMoaW50ZXJ2YWwpLnRvSHVtYW5TdHJpbmcoKX0gYmV0d2VlbiBuZXh0IHR3byBzY2hlZHVsZSBvY2N1cnJlbmNlcy4gVGhpcyB3aWxsIHJlc3VsdCBpbiBvdmVybGFwcGluZyB3YXJtIHJ1bm5lcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHNjaGVkdWxlIG9jY3VycmVuY2UuYCk7XG4gICAgfVxuXG4gICAgLy8gd2FybiBmb3Igc2hvcnQgaW50ZXJ2YWxcbiAgICBpZiAoaW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJiBpbnRlcnZhbCA8IGNkay5EdXJhdGlvbi5ob3VycygxKS50b1NlY29uZHMoKSkge1xuICAgICAgY2RrLkFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgICAgICAgJ0BjbG91ZHNub3JrZWwvY2RrLWdpdGh1Yi1ydW5uZXJzOlNjaGVkdWxlZFdhcm1SdW5uZXIuaW50ZXJ2YWxUb29TaG9ydCcsXG4gICAgICAgIGBTY2hlZHVsZWRXYXJtUnVubmVyIGludGVydmFsICR7Y2RrLkR1cmF0aW9uLnNlY29uZHMoaW50ZXJ2YWwpLnRvSHVtYW5TdHJpbmcoKX0gaXMgbGVzcyB0aGFuIDEgaG91ciwgd2hpY2ggbWF5IHJlc3VsdCBpbiBtb3JlIHdhcm0gcnVubmVycyB0aGFuIGV4cGVjdGVkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsbFBheWxvYWQgPSBidWlsZFdhcm1SdW5uZXIodGhpcywgcHJvcHMsIHByb3BzLnNjaGVkdWxlLCBwcm9wcy5kdXJhdGlvbi50b1NlY29uZHMoKSwgZmFsc2UpO1xuICB9XG59XG4iXX0=
216
+ ScheduledWarmRunner[_b] = { fqn: "@cloudsnorkel/cdk-github-runners.ScheduledWarmRunner", version: "0.15.1" };
217
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FybS1ydW5uZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd2FybS1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLDZDQUdxQjtBQUNyQiwyQ0FBdUM7QUFDdkMsNkNBQW1EO0FBcUVuRCxTQUFTLGVBQWUsQ0FBQyxLQUFnQixFQUFFLEtBQTBCLEVBQUUsUUFBeUIsRUFBRSxRQUFnQixFQUFFLGlCQUEwQjtJQUM1SSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsSUFBSSxNQUFNLENBQUM7SUFDNUQsSUFBSSxpQkFBaUIsS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO0lBQzlGLENBQUM7SUFDRCxJQUFJLGlCQUFpQixLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMscURBQXFELENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzlDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3JFLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLFlBQVksOERBQThELENBQUMsQ0FBQztJQUM3SCxDQUFDO0lBRUQsTUFB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QixJQUFJLFFBQVEsS0FBSyxTQUFTLElBQUksUUFBUSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDM0UsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUNuQyx1RUFBdUUsRUFDdkUsZ0NBQWdDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLGFBQWEsRUFBRSwyRUFBMkUsQ0FDMUosQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN0RyxDQUFDOztBQXpCSCxrREEwQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQge1xuICBhd3NfZXZlbnRzIGFzIGV2ZW50cyxcbiAgYXdzX2V2ZW50c190YXJnZXRzIGFzIGV2ZW50c190YXJnZXRzLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IENyb25FeHByZXNzaW9uUGFyc2VyIH0gZnJvbSAnY3Jvbi1wYXJzZXInO1xuaW1wb3J0IHsgSUNvbXBvc2l0ZVByb3ZpZGVyLCBJUnVubmVyUHJvdmlkZXIgfSBmcm9tICcuL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBHaXRIdWJSdW5uZXJzIH0gZnJvbSAnLi9ydW5uZXInO1xuaW1wb3J0IHsgV2FybVJ1bm5lckZpbGxQYXlsb2FkIH0gZnJvbSAnLi93YXJtLXJ1bm5lci1tYW5hZ2VyLmxhbWJkYSc7XG5cbi8qKlxuICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIHdhcm0gcnVubmVyIGNvbnN0cnVjdHMuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2FybVJ1bm5lckJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgR2l0SHViUnVubmVycyBjb25zdHJ1Y3QgdGhhdCBvd25zIHRoZSBzaGFyZWQgd2FybSBydW5uZXIgaW5mcmFzdHJ1Y3R1cmUuXG4gICAqL1xuICByZWFkb25seSBydW5uZXJzOiBHaXRIdWJSdW5uZXJzO1xuXG4gIC8qKlxuICAgKiBQcm92aWRlciB0byB1c2UuIFdhcm0gcnVubmVycyBieXBhc3MgdGhlIHByb3ZpZGVyIHNlbGVjdG9yIOKAlCB0aGV5IGFsd2F5cyB1c2VcbiAgICogdGhpcyBwcm92aWRlciwgcmVnYXJkbGVzcyBvZiBqb2IgY2hhcmFjdGVyaXN0aWNzLiBMYWJlbHMgY2Fubm90IGJlIG1vZGlmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXI6IElSdW5uZXJQcm92aWRlciB8IElDb21wb3NpdGVQcm92aWRlcjtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHdhcm0gcnVubmVycyB0byBtYWludGFpbi5cbiAgICovXG4gIHJlYWRvbmx5IGNvdW50OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBvd25lciB3aGVyZSBydW5uZXJzIHdpbGwgYmUgcmVnaXN0ZXJlZCAob3JnIG9yIHVzZXIgbG9naW4pLlxuICAgKi9cbiAgcmVhZG9ubHkgb3duZXI6IHN0cmluZztcblxuICAvKipcbiAgICogUmVnaXN0cmF0aW9uIGxldmVsIOKAlCBtdXN0IG1hdGNoIGhvdyB5b3VyIHJ1bm5lcnMgYXJlIHNldCB1cCBpbiBHaXRIdWIuIENob29zZVxuICAgKiAnb3JnJyBmb3Igb3JnLXdpZGUgcnVubmVycywgJ3JlcG8nIGZvciByZXBvLWxldmVsLiBTZWUgdGhlIHNldHVwIHdpemFyZCBmb3IgY2hvb3NpbmcgcmVwbyB2cyBvcmcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0Nsb3VkU25vcmtlbC9jZGstZ2l0aHViLXJ1bm5lcnMvYmxvYi9tYWluL1NFVFVQX0dJVEhVQi5tZFxuICAgKlxuICAgKiBAZGVmYXVsdCAncmVwbydcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbkxldmVsPzogJ29yZycgfCAncmVwbyc7XG5cbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgbmFtZSAod2l0aG91dCBvd25lcikgd2hlcmUgcnVubmVycyB3aWxsIGJlIHJlZ2lzdGVyZWQuIFJlcXVpcmVkIHdoZW4gYHJlZ2lzdHJhdGlvbkxldmVsYCBpcyAncmVwbycuXG4gICAqL1xuICByZWFkb25seSByZXBvPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGFsd2F5cyBvbiB3YXJtIHJ1bm5lcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQWx3YXlzT25XYXJtUnVubmVyUHJvcHMgZXh0ZW5kcyBXYXJtUnVubmVyQmFzZVByb3BzIHsgfVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIHNjaGVkdWxlZCB3YXJtIHJ1bm5lcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVkV2FybVJ1bm5lclByb3BzIGV4dGVuZHMgV2FybVJ1bm5lckJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGVuIHRvIHN0YXJ0IGZpbGxpbmcgdGhlIHBvb2wgKGUuZy4gc3RhcnQgb2YgYnVzaW5lc3MgaG91cnMpLlxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU6IGV2ZW50cy5TY2hlZHVsZTtcblxuICAvKipcbiAgICogSG93IGxvbmcgdGhlIHdhcm0gcnVubmVycyBzaG91bGQgYmUgbWFpbnRhaW5lZCBmcm9tIHRoZSBmaWxsIHRpbWUgKHNjaGVkdWxlKS4gRGVmaW5lcyB0aGUgZW5kIG9mIHRoZVxuICAgKiB3aW5kb3cgKHNjaGVkdWxlIHRpbWUgKyBkdXJhdGlvbikuXG4gICAqL1xuICByZWFkb25seSBkdXJhdGlvbjogY2RrLkR1cmF0aW9uO1xufVxuXG5mdW5jdGlvbiBidWlsZFdhcm1SdW5uZXIoc2NvcGU6IENvbnN0cnVjdCwgcHJvcHM6IFdhcm1SdW5uZXJCYXNlUHJvcHMsIHNjaGVkdWxlOiBldmVudHMuU2NoZWR1bGUsIGR1cmF0aW9uOiBudW1iZXIsIGNyZWF0ZUluaXRpYWxGaWxsOiBib29sZWFuKSB7XG4gIGNvbnN0IHJlZ2lzdHJhdGlvbkxldmVsID0gcHJvcHMucmVnaXN0cmF0aW9uTGV2ZWwgPz8gJ3JlcG8nO1xuICBpZiAocmVnaXN0cmF0aW9uTGV2ZWwgPT09ICdvcmcnICYmIHByb3BzLnJlcG8pIHtcbiAgICBjZGsuQW5ub3RhdGlvbnMub2Yoc2NvcGUpLmFkZEVycm9yKCdEbyBub3Qgc3BlY2lmeSByZXBvIHdoZW4gcmVnaXN0cmF0aW9uTGV2ZWwgaXMgXFwnb3JnXFwnJyk7XG4gIH1cbiAgaWYgKHJlZ2lzdHJhdGlvbkxldmVsID09PSAncmVwbycgJiYgIXByb3BzLnJlcG8pIHtcbiAgICBjZGsuQW5ub3RhdGlvbnMub2Yoc2NvcGUpLmFkZEVycm9yKCdyZXBvIGlzIHJlcXVpcmVkIHdoZW4gcmVnaXN0cmF0aW9uTGV2ZWwgaXMgXFwncmVwb1xcJycpO1xuICB9XG5cbiAgY29uc3QgcHJvdmlkZXJQYXRoID0gcHJvcHMucHJvdmlkZXIubm9kZS5wYXRoO1xuICBpZiAoIXByb3BzLnJ1bm5lcnMucHJvdmlkZXJzLnNvbWUocCA9PiBwLm5vZGUucGF0aCA9PT0gcHJvdmlkZXJQYXRoKSkge1xuICAgIGNkay5Bbm5vdGF0aW9ucy5vZihzY29wZSkuYWRkRXJyb3IoYFByb3ZpZGVyICR7cHJvdmlkZXJQYXRofSBpcyBub3QgaW4gdGhlIHByb3ZpZGVycyBsaXN0IG9mIHRoZSBHaXRIdWJSdW5uZXJzIGNvbnN0cnVjdGApO1xuICB9XG5cbiAgY29uc3QgbGFiZWxzID0gcHJvcHMucHJvdmlkZXIubGFiZWxzO1xuXG4gIGNvbnN0IHJlcG8gPSByZWdpc3RyYXRpb25MZXZlbCA9PT0gJ3JlcG8nID8gKHByb3BzLnJlcG8gPz8gJycpIDogJyc7XG4gIGNvbnN0IGNvbmZpZ0hhc2ggPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMjU2JylcbiAgICAudXBkYXRlKEpTT04uc3RyaW5naWZ5KHsgcHJvdmlkZXJQYXRoLCBwcm92aWRlckxhYmVsczogbGFiZWxzLCBjb3VudDogcHJvcHMuY291bnQsIGR1cmF0aW9uLCBvd25lcjogcHJvcHMub3duZXIsIHJlcG8gfSkpXG4gICAgLmRpZ2VzdCgnaGV4JylcbiAgICAuc2xpY2UoMCwgMTYpO1xuXG4gIGNvbnN0IGZpbGxQYXlsb2FkOiBXYXJtUnVubmVyRmlsbFBheWxvYWQgPSB7XG4gICAgYWN0aW9uOiAnZmlsbCcgYXMgY29uc3QsXG4gICAgcHJvdmlkZXJQYXRoLFxuICAgIHByb3ZpZGVyTGFiZWxzOiBsYWJlbHMsXG4gICAgY291bnQ6IHByb3BzLmNvdW50LFxuICAgIGR1cmF0aW9uLFxuICAgIG93bmVyOiBwcm9wcy5vd25lcixcbiAgICByZXBvLFxuICAgIGNvbmZpZ0hhc2gsXG4gIH07XG5cbiAgY29uc3QgeyBsYW1iZGE6IG1hbmFnZXJGbiwgcXVldWUgfSA9IHByb3BzLnJ1bm5lcnMuX2Vuc3VyZVdhcm1SdW5uZXJJbmZyYSgpO1xuICBwcm9wcy5ydW5uZXJzLl9yZWdpc3Rlcldhcm1Db25maWdIYXNoKGNvbmZpZ0hhc2gpO1xuXG4gIC8vIFNjaGVkdWxlIHRvIGZpbGwgdGhlIHdhcm0gcG9vbCAodXN1YWxseSBkYWlseSkuIFNlbmRzIHRvIFNRUyBzbyB3ZSBnZXQgc3RhYmxlIG1lc3NhZ2VJZCBmb3IgaWRlbXBvdGVudCBmaWxscy5cbiAgbmV3IGV2ZW50cy5SdWxlKHNjb3BlLCAnU2NoZWR1bGUnLCB7XG4gICAgc2NoZWR1bGUsXG4gICAgdGFyZ2V0czogW25ldyBldmVudHNfdGFyZ2V0cy5TcXNRdWV1ZShxdWV1ZSwge1xuICAgICAgbWVzc2FnZTogZXZlbnRzLlJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KGZpbGxQYXlsb2FkKSxcbiAgICB9KV0sXG4gIH0pO1xuXG4gIC8vIEZpbGwgdGhlIHdhcm0gcG9vbCBpbW1lZGlhdGVseSBvbiBkZXBsb3kgKEFsd2F5c09uV2FybVJ1bm5lciBvbmx5KS5cbiAgLy8gU2NoZWR1bGVkV2FybVJ1bm5lciBkb2VzIG5vdCBnZXQgZGVwbG95bWVudC1maWxsLiBGaXJzdCBmaWxsIGhhcHBlbnMgYXQgdGhlIG5leHQgc2NoZWR1bGUgZmlyZS5cbiAgaWYgKGNyZWF0ZUluaXRpYWxGaWxsKSB7XG4gICAgbmV3IGNkay5DdXN0b21SZXNvdXJjZShzY29wZSwgJ0luaXRpYWwgRmlsbCcsIHtcbiAgICAgIHNlcnZpY2VUb2tlbjogbWFuYWdlckZuLmZ1bmN0aW9uQXJuLFxuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpXYXJtUnVubmVyRmlsbCcsXG4gICAgICBwcm9wZXJ0aWVzOiBmaWxsUGF5bG9hZCxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBmaWxsUGF5bG9hZDtcbn1cblxuLyoqXG4gKiBXYXJtIHJ1bm5lcnMgdGhhdCBydW4gMjQvNy4gRmlsbHMgYXQgbWlkbmlnaHQgVVRDIGFuZCBlYWNoIHJ1bm5lciBzdGF5cyBhbGl2ZSBmb3IgMjQgaG91cnMuXG4gKlxuICogUnVubmVycyB3aWxsIGJlIHByb3Zpc2lvbmVkIHVzaW5nIHRoZSBzcGVjaWZpZWQgcHJvdmlkZXIgYW5kIHJlZ2lzdGVyZWQgaW4gdGhlIHNwZWNpZmllZCByZXBvc2l0b3J5IG9yIG9yZ2FuaXphdGlvbi5cbiAqXG4gKiBSZWdpc3RyYXRpb24gbGV2ZWwgbXVzdCBtYXRjaCB0aGUgb25lIHNlbGVjdGVkIGR1cmluZyBzZXR1cC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9DbG91ZFNub3JrZWwvY2RrLWdpdGh1Yi1ydW5uZXJzL2Jsb2IvbWFpbi9TRVRVUF9HSVRIVUIubWRcbiAqXG4gKiAjIyBMaW1pdGF0aW9uc1xuICpcbiAqIC0gSm9icyB3aWxsIHN0aWxsIHRyaWdnZXIgcHJvdmlzaW9uaW5nIG9mIG9uLWRlbWFuZCBydW5uZXJzLCBldmVuIGlmIGEgd2FybSBydW5uZXIgZW5kcyB1cCBiZWluZyB1c2VkLlxuICogLSBZb3UgbWF5IGJyaWVmbHkgc2VlIG1vcmUgdGhhbiBgY291bnRgIHJ1bm5lcnMgd2hlbiBjaGFuZ2luZyBjb25maWcgb3IgYXQgcm90YXRpb24uXG4gKiAtIFRvIHJlbW92ZTogc2V0IGBjb3VudGAgdG8gMCwgZGVwbG95LCB3YWl0IGZvciB3YXJtIHJ1bm5lcnMgdG8gc3RvcCwgdGhlbiByZW1vdmUgYW5kIGRlcGxveSBhZ2Fpbi5cbiAqICAgSWYgeW91IGRvbid0IGZvbGxvdyB0aGlzIHByb2NlZHVyZSwgd2FybSBydW5uZXJzIG1heSBsaW5nZXIgdW50aWwgdGhleSBleHBpcmUuXG4gKiAtIFByb3ZpZGVyIGZhaWx1cmVzIG9yIHRpbWVvdXRzIChsaWtlIExhbWJkYSBwcm92aWRlciB0aW1pbmcgb3V0IGFmdGVyIDE1IG1pbnV0ZXMpIHdpbGwgcmVzdWx0IGluIGFcbiAqICAgZ2FwIGluIGNvdmVyYWdlIHVudGlsIHRoZSByZXRyeSBzdWNjZWVkcy4gQ3VycmVudCByZXRyeSBtZWNoYW5pc20gaGFzIGJ1aWx0LWluIGJhY2stb2ZmIHJhdGUgYW5kXG4gKiAgIGNhbiBiZSB0d2Vha2VkIHVzaW5nIGByZXRyeU9wdGlvbnNgLiBUaGlzIHdpbGwgYmUgaW1wcm92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBuZXcgQWx3YXlzT25XYXJtUnVubmVyKHN0YWNrLCAnQWx3YXlzT25MaW51eCcsIHtcbiAqICAgcnVubmVycyxcbiAqICAgcHJvdmlkZXI6IG15UHJvdmlkZXIsXG4gKiAgIGNvdW50OiAzLFxuICogICBvd25lcjogJ215LW9yZycsXG4gKiAgIHJlcG86ICdteS1yZXBvJyxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBbHdheXNPbldhcm1SdW5uZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICAvKipcbiAgICogVGhlIGZpbGwgcGF5bG9hZCBmb3IgdGhpcyB3YXJtIHJ1bm5lciBjb25maWd1cmF0aW9uLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBfZmlsbFBheWxvYWQ6IFdhcm1SdW5uZXJGaWxsUGF5bG9hZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogQWx3YXlzT25XYXJtUnVubmVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuX2ZpbGxQYXlsb2FkID0gYnVpbGRXYXJtUnVubmVyKHRoaXMsIHByb3BzLCBldmVudHMuU2NoZWR1bGUuY3Jvbih7IGhvdXI6ICcwJywgbWludXRlOiAnMCcgfSksIGNkay5EdXJhdGlvbi5kYXlzKDEpLnRvU2Vjb25kcygpLCB0cnVlKTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlcnQgQVdTIEV2ZW50QnJpZGdlIGNyb24gZm9ybWF0IHRvIGNyb24tcGFyc2VyIGZvcm1hdC5cbiAqIEFXUzogY3JvbihtaW4gaG91ciBkb20gbW9udGggZG93IHllYXIpLCBjcm9uLXBhcnNlcjogc2VjIG1pbiBob3VyIGRvbSBtb250aCBkb3dcbiAqL1xuZnVuY3Rpb24gYXdzQ3JvblRvUGFyc2VyRm9ybWF0KGV4cHJlc3Npb25TdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gZXhwcmVzc2lvblN0cmluZy5tYXRjaCgvXmNyb25cXCgoLispXFwpJC8pO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gZXhwcmVzc2lvblN0cmluZztcbiAgY29uc3QgWywgaW5uZXJdID0gbWF0Y2g7XG4gIGNvbnN0IHBhcnRzID0gaW5uZXIudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDYpIHJldHVybiBleHByZXNzaW9uU3RyaW5nO1xuICBjb25zdCBbbWludXRlLCBob3VyLCBkb20sIG1vbnRoLCBkb3ddID0gcGFydHM7XG4gIHJldHVybiBgMCAke21pbnV0ZX0gJHtob3VyfSAke2RvbX0gJHttb250aH0gJHtkb3d9YDtcbn1cblxuLyoqXG4gKiBQYXJzZSBBV1MgRXZlbnRCcmlkZ2UgcmF0ZSBleHByZXNzaW9uIGFuZCByZXR1cm4gaW50ZXJ2YWwgaW4gc2Vjb25kcy5cbiAqIEZvcm1hdDogcmF0ZSh2YWx1ZSB1bml0KSBlLmcuIHJhdGUoMiBob3VycyksIHJhdGUoNSBtaW51dGVzKSwgcmF0ZSgxIGRheSlcbiAqL1xuZnVuY3Rpb24gcGFyc2VSYXRlSW50ZXJ2YWwoZXhwcmVzc2lvblN0cmluZzogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSBleHByZXNzaW9uU3RyaW5nLm1hdGNoKC9ecmF0ZVxcKChcXGQrKVxccysobWludXRlfG1pbnV0ZXN8aG91cnxob3Vyc3xkYXl8ZGF5cylcXCkkL2kpO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KG1hdGNoWzFdLCAxMCk7XG4gIGNvbnN0IHVuaXQgPSBtYXRjaFsyXS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodmFsdWUgPD0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3Qgc2Vjb25kc1BlclVuaXQ6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICAgbWludXRlOiA2MCxcbiAgICBtaW51dGVzOiA2MCxcbiAgICBob3VyOiAzNjAwLFxuICAgIGhvdXJzOiAzNjAwLFxuICAgIGRheTogODY0MDAsXG4gICAgZGF5czogODY0MDAsXG4gIH07XG4gIHJldHVybiB2YWx1ZSAqIHNlY29uZHNQZXJVbml0W3VuaXRdO1xufVxuXG4vKipcbiAqIEdldCB0aGUgaW50ZXJ2YWwgYmV0d2VlbiBzY2hlZHVsZSBvY2N1cnJlbmNlcyBpbiBzZWNvbmRzLlxuICogU3VwcG9ydHMgYm90aCBjcm9uIGFuZCByYXRlIGV4cHJlc3Npb25zLlxuICovXG5mdW5jdGlvbiBnZXRTY2hlZHVsZUludGVydmFsU2Vjb25kcyhleHByZXNzaW9uU3RyaW5nOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBjb25zdCByYXRlSW50ZXJ2YWwgPSBwYXJzZVJhdGVJbnRlcnZhbChleHByZXNzaW9uU3RyaW5nKTtcbiAgaWYgKHJhdGVJbnRlcnZhbCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gcmF0ZUludGVydmFsO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY3JvbkV4cHJlc3Npb24gPSBDcm9uRXhwcmVzc2lvblBhcnNlci5wYXJzZShhd3NDcm9uVG9QYXJzZXJGb3JtYXQoZXhwcmVzc2lvblN0cmluZykpO1xuICAgIGNvbnN0IG5leHQgPSBjcm9uRXhwcmVzc2lvbi50YWtlKDIpO1xuICAgIHJldHVybiAobmV4dFsxXS5nZXRUaW1lKCkgLSBuZXh0WzBdLmdldFRpbWUoKSkgLyAxMDAwO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogV2FybSBydW5uZXJzIGFjdGl2ZSBkdXJpbmcgYSB0aW1lIHdpbmRvdyBzcGVjaWZpZWQgYnkgc3RhcnQgdGltZSAoYHNjaGVkdWxlYCkgYW5kIGR1cmF0aW9uIChgZHVyYXRpb25gKS5cbiAqXG4gKiBSdW5uZXJzIHdpbGwgYmUgcHJvdmlzaW9uZWQgdXNpbmcgdGhlIHNwZWNpZmllZCBwcm92aWRlciBhbmQgcmVnaXN0ZXJlZCBpbiB0aGUgc3BlY2lmaWVkIHJlcG9zaXRvcnkgb3Igb3JnYW5pemF0aW9uLlxuICpcbiAqIFJlZ2lzdHJhdGlvbiBsZXZlbCBtdXN0IG1hdGNoIHRoZSBvbmUgc2VsZWN0ZWQgZHVyaW5nIHNldHVwLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL0Nsb3VkU25vcmtlbC9jZGstZ2l0aHViLXJ1bm5lcnMvYmxvYi9tYWluL1NFVFVQX0dJVEhVQi5tZFxuICpcbiAqICMjIExpbWl0YXRpb25zXG4gKlxuICogLSAqKk5vIGRlcGxveW1lbnQtZmlsbCoqOiBVbmxpa2UgYEFsd2F5c09uV2FybVJ1bm5lcmAsIHNjaGVkdWxlZCB3YXJtIHJ1bm5lcnMgZG8gbm90IGdldCBhbiBpbml0aWFsXG4gKiAgIGZpbGwgb24gZGVwbG95LiBUaGUgZmlyc3QgZmlsbCBoYXBwZW5zIGF0IHRoZSBuZXh0IHNjaGVkdWxlIG9jY3VycmVuY2UuIElmIHlvdSBkZXBsb3kgYXQgMXBtIGZvclxuICogICBhIDJwbSBzY2hlZHVsZSwgcnVubmVycyB3aWxsIG5vdCBhcHBlYXIgdW50aWwgMnBtLlxuICogLSBKb2JzIHdpbGwgc3RpbGwgdHJpZ2dlciBwcm92aXNpb25pbmcgb2Ygb24tZGVtYW5kIHJ1bm5lcnMsIGV2ZW4gaWYgYSB3YXJtIHJ1bm5lciBlbmRzIHVwIGJlaW5nIHVzZWQuXG4gKiAtIFlvdSBtYXkgYnJpZWZseSBzZWUgbW9yZSB0aGFuIGBjb3VudGAgcnVubmVycyB3aGVuIGNoYW5naW5nIGNvbmZpZyBvciBhdCByb3RhdGlvbi5cbiAqIC0gVG8gcmVtb3ZlOiBzZXQgYGNvdW50YCB0byAwLCBkZXBsb3ksIHdhaXQgZm9yIHdhcm0gcnVubmVycyB0byBzdG9wLCB0aGVuIHJlbW92ZSBhbmQgZGVwbG95IGFnYWluLlxuICogICBJZiB5b3UgZG9uJ3QgZm9sbG93IHRoaXMgcHJvY2VkdXJlLCB3YXJtIHJ1bm5lcnMgbWF5IGxpbmdlciB1bnRpbCB0aGV5IGV4cGlyZS5cbiAqIC0gUHJvdmlkZXIgZmFpbHVyZXMgb3IgdGltZW91dHMgKGxpa2UgTGFtYmRhIHByb3ZpZGVyIHRpbWluZyBvdXQgYWZ0ZXIgMTUgbWludXRlcykgd2lsbCByZXN1bHQgaW4gYVxuICogICBnYXAgaW4gY292ZXJhZ2UgdW50aWwgdGhlIHJldHJ5IHN1Y2NlZWRzLiBDdXJyZW50IHJldHJ5IG1lY2hhbmlzbSBoYXMgYnVpbHQtaW4gYmFjay1vZmYgcmF0ZSBhbmRcbiAqICAgY2FuIGJlIHR3ZWFrZWQgdXNpbmcgYHJldHJ5T3B0aW9uc2AuIFRoaXMgd2lsbCBiZSBpbXByb3ZlZCBpbiB0aGUgZnV0dXJlLlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIENyb246IGZpbGwgYXQgMXBtIG9uIHdlZWtkYXlzXG4gKiBuZXcgU2NoZWR1bGVkV2FybVJ1bm5lcihzdGFjaywgJ0J1c2luZXNzIEhvdXJzJywge1xuICogICBydW5uZXJzLFxuICogICBwcm92aWRlcjogbXlQcm92aWRlcixcbiAqICAgY291bnQ6IDMsXG4gKiAgIG93bmVyOiAnbXktb3JnJyxcbiAqICAgcmVwbzogJ215LXJlcG8nLFxuICogICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLmNyb24oeyBob3VyOiAnMTMnLCBtaW51dGU6ICcwJywgd2Vla0RheTogJ01PTi1GUkknIH0pLFxuICogICBkdXJhdGlvbjogY2RrLkR1cmF0aW9uLmhvdXJzKDIpLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBSYXRlOiBmaWxsIGV2ZXJ5IDEyIGhvdXJzXG4gKiBuZXcgU2NoZWR1bGVkV2FybVJ1bm5lcihzdGFjaywgJ0V2ZXJ5IDEyIEhvdXJzJywge1xuICogICBydW5uZXJzLFxuICogICBwcm92aWRlcjogbXlQcm92aWRlcixcbiAqICAgY291bnQ6IDIsXG4gKiAgIG93bmVyOiAnbXktb3JnJyxcbiAqICAgcmVwbzogJ215LXJlcG8nLFxuICogICBzY2hlZHVsZTogZXZlbnRzLlNjaGVkdWxlLnJhdGUoY2RrLkR1cmF0aW9uLmhvdXJzKDUpKSxcbiAqICAgZHVyYXRpb246IGNkay5EdXJhdGlvbi5ob3VycygxMiksXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgU2NoZWR1bGVkV2FybVJ1bm5lciBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgZmlsbCBwYXlsb2FkIGZvciB0aGlzIHdhcm0gcnVubmVyIGNvbmZpZ3VyYXRpb24uXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9maWxsUGF5bG9hZDogV2FybVJ1bm5lckZpbGxQYXlsb2FkO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBTY2hlZHVsZWRXYXJtUnVubmVyUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgLy8gbWFrZSBzdXJlIHRoZSBkdXJhdGlvbiBpcyBub3QgbG9uZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gbmV4dCB0d28gc2NoZWR1bGUgb2NjdXJyZW5jZXNcbiAgICBjb25zdCBpbnRlcnZhbCA9IGdldFNjaGVkdWxlSW50ZXJ2YWxTZWNvbmRzKHByb3BzLnNjaGVkdWxlLmV4cHJlc3Npb25TdHJpbmcpO1xuICAgIGlmIChpbnRlcnZhbCAhPT0gdW5kZWZpbmVkICYmIGludGVydmFsIDwgcHJvcHMuZHVyYXRpb24udG9TZWNvbmRzKCkpIHtcbiAgICAgIGNkay5Bbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRFcnJvcihgU2NoZWR1bGVkV2FybVJ1bm5lciBkdXJhdGlvbiAke3Byb3BzLmR1cmF0aW9uLnRvSHVtYW5TdHJpbmcoKX0gaXMgbG9uZ2VyIHRoYW4gdGhlIGludGVydmFsICR7Y2RrLkR1cmF0aW9uLnNlY29uZHMoaW50ZXJ2YWwpLnRvSHVtYW5TdHJpbmcoKX0gYmV0d2VlbiBuZXh0IHR3byBzY2hlZHVsZSBvY2N1cnJlbmNlcy4gVGhpcyB3aWxsIHJlc3VsdCBpbiBvdmVybGFwcGluZyB3YXJtIHJ1bm5lcnMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHNjaGVkdWxlIG9jY3VycmVuY2UuYCk7XG4gICAgfVxuXG4gICAgLy8gd2FybiBmb3Igc2hvcnQgaW50ZXJ2YWxcbiAgICBpZiAoaW50ZXJ2YWwgIT09IHVuZGVmaW5lZCAmJiBpbnRlcnZhbCA8IGNkay5EdXJhdGlvbi5ob3VycygxKS50b1NlY29uZHMoKSkge1xuICAgICAgY2RrLkFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgICAgICAgJ0BjbG91ZHNub3JrZWwvY2RrLWdpdGh1Yi1ydW5uZXJzOlNjaGVkdWxlZFdhcm1SdW5uZXIuaW50ZXJ2YWxUb29TaG9ydCcsXG4gICAgICAgIGBTY2hlZHVsZWRXYXJtUnVubmVyIGludGVydmFsICR7Y2RrLkR1cmF0aW9uLnNlY29uZHMoaW50ZXJ2YWwpLnRvSHVtYW5TdHJpbmcoKX0gaXMgbGVzcyB0aGFuIDEgaG91ciwgd2hpY2ggbWF5IHJlc3VsdCBpbiBtb3JlIHdhcm0gcnVubmVycyB0aGFuIGV4cGVjdGVkYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fZmlsbFBheWxvYWQgPSBidWlsZFdhcm1SdW5uZXIodGhpcywgcHJvcHMsIHByb3BzLnNjaGVkdWxlLCBwcm9wcy5kdXJhdGlvbi50b1NlY29uZHMoKSwgZmFsc2UpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -72,17 +72,17 @@
72
72
  "organization": false
73
73
  },
74
74
  "devDependencies": {
75
- "@aws-sdk/client-cloudformation": "^3.1000.0",
76
- "@aws-sdk/client-codebuild": "^3.1000.0",
77
- "@aws-sdk/client-ec2": "^3.1000.0",
78
- "@aws-sdk/client-ecr": "^3.1000.0",
79
- "@aws-sdk/client-imagebuilder": "^3.1000.0",
80
- "@aws-sdk/client-lambda": "^3.1000.0",
81
- "@aws-sdk/client-secrets-manager": "^3.1000.0",
82
- "@aws-sdk/client-sfn": "^3.1000.0",
83
- "@aws-sdk/client-sns": "^3.1000.0",
84
- "@aws-sdk/client-sqs": "^3.1004.0",
85
- "@aws-sdk/client-ssm": "^3.1000.0",
75
+ "@aws-sdk/client-cloudformation": "^3.1014.0",
76
+ "@aws-sdk/client-codebuild": "^3.1014.0",
77
+ "@aws-sdk/client-ec2": "^3.1014.0",
78
+ "@aws-sdk/client-ecr": "^3.1014.0",
79
+ "@aws-sdk/client-imagebuilder": "^3.1014.0",
80
+ "@aws-sdk/client-lambda": "^3.1014.0",
81
+ "@aws-sdk/client-secrets-manager": "^3.1014.0",
82
+ "@aws-sdk/client-sfn": "^3.1014.0",
83
+ "@aws-sdk/client-sns": "^3.1014.0",
84
+ "@aws-sdk/client-sqs": "^3.1014.0",
85
+ "@aws-sdk/client-ssm": "^3.1014.0",
86
86
  "@octokit/auth-app": "^8.2.0",
87
87
  "@octokit/core": "^7.0.6",
88
88
  "@octokit/request-error": "^7.1.0",
@@ -92,7 +92,7 @@
92
92
  "@tsconfig/svelte": "^5",
93
93
  "@types/aws-lambda": "^8.10.161",
94
94
  "@types/jest": "^29",
95
- "@types/node": "^25.3.3",
95
+ "@types/node": "^25.5.0",
96
96
  "@typescript-eslint/eslint-plugin": "^8",
97
97
  "@typescript-eslint/parser": "^8",
98
98
  "aws-cdk": "^2",
@@ -100,7 +100,7 @@
100
100
  "bootstrap": "^5.2.0",
101
101
  "commit-and-tag-version": "^12",
102
102
  "constructs": "10.5.1",
103
- "esbuild": "^0.27.3",
103
+ "esbuild": "^0.27.4",
104
104
  "eslint": "^9",
105
105
  "eslint-import-resolver-typescript": "^2.7.1",
106
106
  "eslint-plugin-import": "^2.32.0",
@@ -112,7 +112,7 @@
112
112
  "jsii-docgen": "^10.5.0",
113
113
  "jsii-pacmak": "^1.127.0",
114
114
  "jsii-rosetta": "~5.9.0",
115
- "projen": "^0.99.17",
115
+ "projen": "^0.99.21",
116
116
  "sass": "^1.54.0",
117
117
  "svelte": "^5",
118
118
  "svelte-check": "^4",
@@ -150,7 +150,7 @@
150
150
  "publishConfig": {
151
151
  "access": "public"
152
152
  },
153
- "version": "0.15.0",
153
+ "version": "0.15.1",
154
154
  "jest": {
155
155
  "coverageProvider": "v8",
156
156
  "testMatch": [