awscdk-construct-mediaconnect-flow 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -8,7 +8,7 @@
8
8
  },
9
9
  "dependencies": {
10
10
  "aws-cdk-lib": "^2.203.1",
11
- "awscdk-construct-medialive-channel": "^0.0.8",
11
+ "awscdk-construct-medialive-channel": "^0.0.9",
12
12
  "constructs": "^10.0.5"
13
13
  },
14
14
  "dependencyClosure": {
@@ -4054,6 +4054,135 @@
4054
4054
  }
4055
4055
  },
4056
4056
  "types": {
4057
+ "awscdk-construct-mediaconnect-flow.EncoderSettings": {
4058
+ "assembly": "awscdk-construct-mediaconnect-flow",
4059
+ "datatype": true,
4060
+ "docs": {
4061
+ "stability": "stable"
4062
+ },
4063
+ "fqn": "awscdk-construct-mediaconnect-flow.EncoderSettings",
4064
+ "kind": "interface",
4065
+ "locationInModule": {
4066
+ "filename": "src/LiveFeedFromFile.ts",
4067
+ "line": 28
4068
+ },
4069
+ "name": "EncoderSettings",
4070
+ "properties": [
4071
+ {
4072
+ "abstract": true,
4073
+ "docs": {
4074
+ "stability": "stable"
4075
+ },
4076
+ "immutable": true,
4077
+ "locationInModule": {
4078
+ "filename": "src/LiveFeedFromFile.ts",
4079
+ "line": 32
4080
+ },
4081
+ "name": "framerateDenominator",
4082
+ "optional": true,
4083
+ "type": {
4084
+ "primitive": "number"
4085
+ }
4086
+ },
4087
+ {
4088
+ "abstract": true,
4089
+ "docs": {
4090
+ "stability": "stable"
4091
+ },
4092
+ "immutable": true,
4093
+ "locationInModule": {
4094
+ "filename": "src/LiveFeedFromFile.ts",
4095
+ "line": 31
4096
+ },
4097
+ "name": "framerateNumerator",
4098
+ "optional": true,
4099
+ "type": {
4100
+ "primitive": "number"
4101
+ }
4102
+ },
4103
+ {
4104
+ "abstract": true,
4105
+ "docs": {
4106
+ "stability": "stable"
4107
+ },
4108
+ "immutable": true,
4109
+ "locationInModule": {
4110
+ "filename": "src/LiveFeedFromFile.ts",
4111
+ "line": 29
4112
+ },
4113
+ "name": "gopLengthInSeconds",
4114
+ "optional": true,
4115
+ "type": {
4116
+ "primitive": "number"
4117
+ }
4118
+ },
4119
+ {
4120
+ "abstract": true,
4121
+ "docs": {
4122
+ "stability": "stable"
4123
+ },
4124
+ "immutable": true,
4125
+ "locationInModule": {
4126
+ "filename": "src/LiveFeedFromFile.ts",
4127
+ "line": 35
4128
+ },
4129
+ "name": "height",
4130
+ "optional": true,
4131
+ "type": {
4132
+ "primitive": "number"
4133
+ }
4134
+ },
4135
+ {
4136
+ "abstract": true,
4137
+ "docs": {
4138
+ "stability": "stable"
4139
+ },
4140
+ "immutable": true,
4141
+ "locationInModule": {
4142
+ "filename": "src/LiveFeedFromFile.ts",
4143
+ "line": 33
4144
+ },
4145
+ "name": "scanType",
4146
+ "optional": true,
4147
+ "type": {
4148
+ "primitive": "string"
4149
+ }
4150
+ },
4151
+ {
4152
+ "abstract": true,
4153
+ "docs": {
4154
+ "stability": "stable"
4155
+ },
4156
+ "immutable": true,
4157
+ "locationInModule": {
4158
+ "filename": "src/LiveFeedFromFile.ts",
4159
+ "line": 30
4160
+ },
4161
+ "name": "timecodeBurninPrefix",
4162
+ "optional": true,
4163
+ "type": {
4164
+ "primitive": "string"
4165
+ }
4166
+ },
4167
+ {
4168
+ "abstract": true,
4169
+ "docs": {
4170
+ "stability": "stable"
4171
+ },
4172
+ "immutable": true,
4173
+ "locationInModule": {
4174
+ "filename": "src/LiveFeedFromFile.ts",
4175
+ "line": 34
4176
+ },
4177
+ "name": "width",
4178
+ "optional": true,
4179
+ "type": {
4180
+ "primitive": "number"
4181
+ }
4182
+ }
4183
+ ],
4184
+ "symbolId": "src/LiveFeedFromFile:EncoderSettings"
4185
+ },
4057
4186
  "awscdk-construct-mediaconnect-flow.FileSpec": {
4058
4187
  "assembly": "awscdk-construct-mediaconnect-flow",
4059
4188
  "datatype": true,
@@ -4115,7 +4244,7 @@
4115
4244
  },
4116
4245
  "locationInModule": {
4117
4246
  "filename": "src/LiveFeedFromFile.ts",
4118
- "line": 43
4247
+ "line": 54
4119
4248
  },
4120
4249
  "parameters": [
4121
4250
  {
@@ -4141,7 +4270,7 @@
4141
4270
  "kind": "class",
4142
4271
  "locationInModule": {
4143
4272
  "filename": "src/LiveFeedFromFile.ts",
4144
- "line": 39
4273
+ "line": 50
4145
4274
  },
4146
4275
  "name": "LiveFeedFromFile",
4147
4276
  "properties": [
@@ -4152,7 +4281,7 @@
4152
4281
  "immutable": true,
4153
4282
  "locationInModule": {
4154
4283
  "filename": "src/LiveFeedFromFile.ts",
4155
- "line": 40
4284
+ "line": 51
4156
4285
  },
4157
4286
  "name": "flow",
4158
4287
  "type": {
@@ -4166,7 +4295,7 @@
4166
4295
  "immutable": true,
4167
4296
  "locationInModule": {
4168
4297
  "filename": "src/LiveFeedFromFile.ts",
4169
- "line": 41
4298
+ "line": 52
4170
4299
  },
4171
4300
  "name": "vpc",
4172
4301
  "optional": true,
@@ -4187,7 +4316,7 @@
4187
4316
  "kind": "interface",
4188
4317
  "locationInModule": {
4189
4318
  "filename": "src/LiveFeedFromFile.ts",
4190
- "line": 28
4319
+ "line": 38
4191
4320
  },
4192
4321
  "name": "LiveFeedFromFileProps",
4193
4322
  "properties": [
@@ -4199,7 +4328,7 @@
4199
4328
  "immutable": true,
4200
4329
  "locationInModule": {
4201
4330
  "filename": "src/LiveFeedFromFile.ts",
4202
- "line": 29
4331
+ "line": 39
4203
4332
  },
4204
4333
  "name": "file",
4205
4334
  "type": {
@@ -4214,7 +4343,7 @@
4214
4343
  "immutable": true,
4215
4344
  "locationInModule": {
4216
4345
  "filename": "src/LiveFeedFromFile.ts",
4217
- "line": 32
4346
+ "line": 43
4218
4347
  },
4219
4348
  "name": "autoStart",
4220
4349
  "optional": true,
@@ -4230,7 +4359,23 @@
4230
4359
  "immutable": true,
4231
4360
  "locationInModule": {
4232
4361
  "filename": "src/LiveFeedFromFile.ts",
4233
- "line": 30
4362
+ "line": 40
4363
+ },
4364
+ "name": "encoderSpec",
4365
+ "optional": true,
4366
+ "type": {
4367
+ "fqn": "awscdk-construct-mediaconnect-flow.EncoderSettings"
4368
+ }
4369
+ },
4370
+ {
4371
+ "abstract": true,
4372
+ "docs": {
4373
+ "stability": "stable"
4374
+ },
4375
+ "immutable": true,
4376
+ "locationInModule": {
4377
+ "filename": "src/LiveFeedFromFile.ts",
4378
+ "line": 41
4234
4379
  },
4235
4380
  "name": "source",
4236
4381
  "optional": true,
@@ -4246,7 +4391,7 @@
4246
4391
  "immutable": true,
4247
4392
  "locationInModule": {
4248
4393
  "filename": "src/LiveFeedFromFile.ts",
4249
- "line": 31
4394
+ "line": 42
4250
4395
  },
4251
4396
  "name": "vpcConfig",
4252
4397
  "optional": true,
@@ -4385,6 +4530,6 @@
4385
4530
  "symbolId": "src/LiveFeedFromFile:VpcConfig"
4386
4531
  }
4387
4532
  },
4388
- "version": "0.0.3",
4389
- "fingerprint": "Kh+wqxE5w/5VHfSoW3NXwlkvItT+QAjn0sc34rHn8So="
4533
+ "version": "0.0.5",
4534
+ "fingerprint": "lm4KUq7yE7NFMsw05iHpG7CQh+flibDyMpbbrl8y39A="
4390
4535
  }
package/API.md CHANGED
@@ -139,6 +139,100 @@ public readonly vpc: IVpc;
139
139
 
140
140
  ## Structs <a name="Structs" id="Structs"></a>
141
141
 
142
+ ### EncoderSettings <a name="EncoderSettings" id="awscdk-construct-mediaconnect-flow.EncoderSettings"></a>
143
+
144
+ #### Initializer <a name="Initializer" id="awscdk-construct-mediaconnect-flow.EncoderSettings.Initializer"></a>
145
+
146
+ ```typescript
147
+ import { EncoderSettings } from 'awscdk-construct-mediaconnect-flow'
148
+
149
+ const encoderSettings: EncoderSettings = { ... }
150
+ ```
151
+
152
+ #### Properties <a name="Properties" id="Properties"></a>
153
+
154
+ | **Name** | **Type** | **Description** |
155
+ | --- | --- | --- |
156
+ | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings.property.framerateDenominator">framerateDenominator</a></code> | <code>number</code> | *No description.* |
157
+ | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings.property.framerateNumerator">framerateNumerator</a></code> | <code>number</code> | *No description.* |
158
+ | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings.property.gopLengthInSeconds">gopLengthInSeconds</a></code> | <code>number</code> | *No description.* |
159
+ | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings.property.height">height</a></code> | <code>number</code> | *No description.* |
160
+ | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings.property.scanType">scanType</a></code> | <code>string</code> | *No description.* |
161
+ | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings.property.timecodeBurninPrefix">timecodeBurninPrefix</a></code> | <code>string</code> | *No description.* |
162
+ | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings.property.width">width</a></code> | <code>number</code> | *No description.* |
163
+
164
+ ---
165
+
166
+ ##### `framerateDenominator`<sup>Optional</sup> <a name="framerateDenominator" id="awscdk-construct-mediaconnect-flow.EncoderSettings.property.framerateDenominator"></a>
167
+
168
+ ```typescript
169
+ public readonly framerateDenominator: number;
170
+ ```
171
+
172
+ - *Type:* number
173
+
174
+ ---
175
+
176
+ ##### `framerateNumerator`<sup>Optional</sup> <a name="framerateNumerator" id="awscdk-construct-mediaconnect-flow.EncoderSettings.property.framerateNumerator"></a>
177
+
178
+ ```typescript
179
+ public readonly framerateNumerator: number;
180
+ ```
181
+
182
+ - *Type:* number
183
+
184
+ ---
185
+
186
+ ##### `gopLengthInSeconds`<sup>Optional</sup> <a name="gopLengthInSeconds" id="awscdk-construct-mediaconnect-flow.EncoderSettings.property.gopLengthInSeconds"></a>
187
+
188
+ ```typescript
189
+ public readonly gopLengthInSeconds: number;
190
+ ```
191
+
192
+ - *Type:* number
193
+
194
+ ---
195
+
196
+ ##### `height`<sup>Optional</sup> <a name="height" id="awscdk-construct-mediaconnect-flow.EncoderSettings.property.height"></a>
197
+
198
+ ```typescript
199
+ public readonly height: number;
200
+ ```
201
+
202
+ - *Type:* number
203
+
204
+ ---
205
+
206
+ ##### `scanType`<sup>Optional</sup> <a name="scanType" id="awscdk-construct-mediaconnect-flow.EncoderSettings.property.scanType"></a>
207
+
208
+ ```typescript
209
+ public readonly scanType: string;
210
+ ```
211
+
212
+ - *Type:* string
213
+
214
+ ---
215
+
216
+ ##### `timecodeBurninPrefix`<sup>Optional</sup> <a name="timecodeBurninPrefix" id="awscdk-construct-mediaconnect-flow.EncoderSettings.property.timecodeBurninPrefix"></a>
217
+
218
+ ```typescript
219
+ public readonly timecodeBurninPrefix: string;
220
+ ```
221
+
222
+ - *Type:* string
223
+
224
+ ---
225
+
226
+ ##### `width`<sup>Optional</sup> <a name="width" id="awscdk-construct-mediaconnect-flow.EncoderSettings.property.width"></a>
227
+
228
+ ```typescript
229
+ public readonly width: number;
230
+ ```
231
+
232
+ - *Type:* number
233
+
234
+ ---
235
+
142
236
  ### FileSpec <a name="FileSpec" id="awscdk-construct-mediaconnect-flow.FileSpec"></a>
143
237
 
144
238
  #### Initializer <a name="Initializer" id="awscdk-construct-mediaconnect-flow.FileSpec.Initializer"></a>
@@ -194,6 +288,7 @@ const liveFeedFromFileProps: LiveFeedFromFileProps = { ... }
194
288
  | --- | --- | --- |
195
289
  | <code><a href="#awscdk-construct-mediaconnect-flow.LiveFeedFromFileProps.property.file">file</a></code> | <code><a href="#awscdk-construct-mediaconnect-flow.FileSpec">FileSpec</a></code> | *No description.* |
196
290
  | <code><a href="#awscdk-construct-mediaconnect-flow.LiveFeedFromFileProps.property.autoStart">autoStart</a></code> | <code>boolean</code> | *No description.* |
291
+ | <code><a href="#awscdk-construct-mediaconnect-flow.LiveFeedFromFileProps.property.encoderSpec">encoderSpec</a></code> | <code><a href="#awscdk-construct-mediaconnect-flow.EncoderSettings">EncoderSettings</a></code> | *No description.* |
197
292
  | <code><a href="#awscdk-construct-mediaconnect-flow.LiveFeedFromFileProps.property.source">source</a></code> | <code><a href="#awscdk-construct-mediaconnect-flow.LiveSourceSpec">LiveSourceSpec</a></code> | *No description.* |
198
293
  | <code><a href="#awscdk-construct-mediaconnect-flow.LiveFeedFromFileProps.property.vpcConfig">vpcConfig</a></code> | <code><a href="#awscdk-construct-mediaconnect-flow.VpcConfig">VpcConfig</a></code> | *No description.* |
199
294
 
@@ -219,6 +314,16 @@ public readonly autoStart: boolean;
219
314
 
220
315
  ---
221
316
 
317
+ ##### `encoderSpec`<sup>Optional</sup> <a name="encoderSpec" id="awscdk-construct-mediaconnect-flow.LiveFeedFromFileProps.property.encoderSpec"></a>
318
+
319
+ ```typescript
320
+ public readonly encoderSpec: EncoderSettings;
321
+ ```
322
+
323
+ - *Type:* <a href="#awscdk-construct-mediaconnect-flow.EncoderSettings">EncoderSettings</a>
324
+
325
+ ---
326
+
222
327
  ##### `source`<sup>Optional</sup> <a name="source" id="awscdk-construct-mediaconnect-flow.LiveFeedFromFileProps.property.source"></a>
223
328
 
224
329
  ```typescript
@@ -15,8 +15,18 @@ export interface VpcConfig {
15
15
  readonly subnetId?: string;
16
16
  readonly enableNDI?: boolean;
17
17
  }
18
+ export interface EncoderSettings {
19
+ readonly gopLengthInSeconds?: number;
20
+ readonly timecodeBurninPrefix?: string;
21
+ readonly framerateNumerator?: number;
22
+ readonly framerateDenominator?: number;
23
+ readonly scanType?: 'PROGRESSIVE' | 'INTERLACED';
24
+ readonly width?: number;
25
+ readonly height?: number;
26
+ }
18
27
  export interface LiveFeedFromFileProps {
19
28
  readonly file: FileSpec;
29
+ readonly encoderSpec?: EncoderSettings;
20
30
  readonly source?: LiveSourceSpec;
21
31
  readonly vpcConfig?: VpcConfig;
22
32
  readonly autoStart?: boolean;
@@ -19,7 +19,15 @@ const VPC_INTERFACE_NAME = 'vpcInterfaceName';
19
19
  class LiveFeedFromFile extends constructs_1.Construct {
20
20
  constructor(scope, id, props) {
21
21
  super(scope, id);
22
- const { file, source = {
22
+ const { file, encoderSpec = {
23
+ gopLengthInSeconds: 2,
24
+ timecodeBurninPrefix: 'Ch',
25
+ framerateNumerator: 30,
26
+ framerateDenominator: 1,
27
+ scanType: 'PROGRESSIVE',
28
+ width: 1920,
29
+ height: 1080,
30
+ }, source = {
23
31
  protocol: 'SRT',
24
32
  type: 'STANDARD-SOURCE',
25
33
  }, vpcConfig, autoStart = true, } = props;
@@ -163,8 +171,13 @@ class LiveFeedFromFile extends constructs_1.Construct {
163
171
  },
164
172
  },
165
173
  }],
166
- gopLengthInSeconds: 2, // The length of the GOP in seconds.
167
- timecodeBurninPrefix: 'Ch', // The prefix for the timecode burn-in.
174
+ gopLengthInSeconds: encoderSpec.gopLengthInSeconds ?? 2,
175
+ timecodeBurninPrefix: encoderSpec.timecodeBurninPrefix,
176
+ framerateNumerator: encoderSpec.framerateNumerator,
177
+ framerateDenominator: encoderSpec.framerateDenominator,
178
+ scanType: encoderSpec.scanType,
179
+ width: encoderSpec.width,
180
+ height: encoderSpec.height,
168
181
  },
169
182
  vpc: source.type === 'VPC-SOURCE' && vpc ? {
170
183
  publicAddressAllocationIds: [eip.attrAllocationId],
@@ -181,7 +194,7 @@ class LiveFeedFromFile extends constructs_1.Construct {
181
194
  }
182
195
  exports.LiveFeedFromFile = LiveFeedFromFile;
183
196
  _a = JSII_RTTI_SYMBOL_1;
184
- LiveFeedFromFile[_a] = { fqn: "awscdk-construct-mediaconnect-flow.LiveFeedFromFile", version: "0.0.3" };
197
+ LiveFeedFromFile[_a] = { fqn: "awscdk-construct-mediaconnect-flow.LiveFeedFromFile", version: "0.0.5" };
185
198
  function createNdiDiscoveryServer(scope, vpc) {
186
199
  const description = 'Allow NDI Discovery Service';
187
200
  const sg = new ec2.SecurityGroup(scope, 'NDISecurityGroup', {
@@ -298,4 +311,4 @@ function startFlow(scope, id, flowArn) {
298
311
  });
299
312
  return new Date();
300
313
  }
301
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGl2ZUZlZWRGcm9tRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9MaXZlRmVlZEZyb21GaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUF5VUEsOEJBNkJDOztBQXRXRCxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsbUVBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCxtRUFBOEc7QUFDOUcsMkZBQTZFO0FBQzdFLDJDQUF1QztBQTBCdkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFDakMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUU5QyxNQUFhLGdCQUFpQixTQUFRLHNCQUFTO0lBSTdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQ0osSUFBSSxFQUNKLE1BQU0sR0FBRztZQUNQLFFBQVEsRUFBRSxLQUFLO1lBQ2YsSUFBSSxFQUFFLGlCQUFpQjtTQUN4QixFQUNELFNBQVMsRUFDVCxTQUFTLEdBQUcsSUFBSSxHQUNqQixHQUFHLEtBQUssQ0FBQztRQUVWLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDckIsUUFBUSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3hCLEtBQUssS0FBSztvQkFDUixPQUFPLEtBQUssQ0FBQztnQkFDZixLQUFLLFNBQVM7b0JBQ1osT0FBTyxTQUFTLENBQUM7Z0JBQ25CLEtBQUssS0FBSyxDQUFDO2dCQUNYO29CQUNFLE9BQU8sY0FBYyxDQUFDO1lBQzFCLENBQUM7UUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRUwsZUFBZTtR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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5GbG93IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgKiBhcyBhc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlLCBBd3NDdXN0b21SZXNvdXJjZVBvbGljeSwgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBNZWRpYUxpdmUsIHN0YXJ0Q2hhbm5lbCB9IGZyb20gJ2F3c2Nkay1jb25zdHJ1Y3QtbWVkaWFsaXZlLWNoYW5uZWwnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNwZWMge1xuICByZWFkb25seSB0eXBlPzogJ01QNF9GSUxFJyB8ICdUU19GSUxFJzsgLy8gVHlwZSBvZiB0aGUgaW5wdXQgZmlsZVxuICByZWFkb25seSB1cmw6IHN0cmluZzsgLy8gUzMgVVJMIG9mIHRoZSBpbnB1dCBmaWxlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZVNvdXJjZVNwZWMge1xuICByZWFkb25seSBwcm90b2NvbDogJ1JUUCcgfCAnUlRQLUZFQycgfCAnU1JUJzsgLy8gUHJvdG9jb2wgb2YgdGhlIGxpdmUgc291cmNlXG4gIHJlYWRvbmx5IHR5cGU6ICdTVEFOREFSRC1TT1VSQ0UnIHwgJ1ZQQy1TT1VSQ0UnOyAvLyBUeXBlIG9mIHRoZSBsaXZlIHNvdXJjZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NvbmZpZyB7XG4gIHJlYWRvbmx5IHByb3BzOiBlYzIuVnBjUHJvcHM7XG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN1Ym5ldElkPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVOREk/OiBib29sZWFuOyAvLyBTZXR0aW5ncyBmb3IgTkRJIG91dHB1dFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVGZWVkRnJvbUZpbGVQcm9wcyB7XG4gIHJlYWRvbmx5IGZpbGU6IEZpbGVTcGVjOyAvLyBGaWxlIHNwZWNpZmljYXRpb25cbiAgcmVhZG9ubHkgc291cmNlPzogTGl2ZVNvdXJjZVNwZWM7IC8vIE9wdGlvbmFsIGxpdmUgc291cmNlIHNwZWNpZmljYXRpb25cbiAgcmVhZG9ubHkgdnBjQ29uZmlnPzogVnBjQ29uZmlnOyAvLyBTZXR0aW5ncyBmb3IgVlBDLiBSZXF1aXJlZCB3aGVuIHRoZSBzb3VyY2UgdHlwZSBpcyBWUEMtU09VUkNFIGFuZC9vciBWUEMgb3V0cHV0cyB3aWxsIGJlIGFkZGVkIHRvIHRoaXMgZmxvdy5cbiAgcmVhZG9ubHkgYXV0b1N0YXJ0PzogYm9vbGVhbjsgLy8gV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IHN0YXJ0IHRoZSBNZWRpYUxpdmUgY2hhbm5lbCBhbmQgTWVkaWFDb25uZWN0IGZsb3dcbn1cblxuY29uc3Qgc291cmNlSW5nZXN0UG9ydCA9IDUwMDA7XG5jb25zdCBkaXNjb3ZlcnlTZXJ2ZXJQb3J0ID0gNTk1OTtcbmNvbnN0IFZQQ19JTlRFUkZBQ0VfTkFNRSA9ICd2cGNJbnRlcmZhY2VOYW1lJztcblxuZXhwb3J0IGNsYXNzIExpdmVGZWVkRnJvbUZpbGUgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgcmVhZG9ubHkgZmxvdzogQ2ZuRmxvdztcbiAgcHVibGljIHJlYWRvbmx5IHZwYz86IGVjMi5JVnBjO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBMaXZlRmVlZEZyb21GaWxlUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qge1xuICAgICAgZmlsZSxcbiAgICAgIHNvdXJjZSA9IHtcbiAgICAgICAgcHJvdG9jb2w6ICdTUlQnLFxuICAgICAgICB0eXBlOiAnU1RBTkRBUkQtU09VUkNFJyxcbiAgICAgIH0sXG4gICAgICB2cGNDb25maWcsXG4gICAgICBhdXRvU3RhcnQgPSB0cnVlLFxuICAgIH0gPSBwcm9wcztcblxuICAgIGNvbnN0IHV1aWQgPSBgJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWA7XG4gICAgY29uc3QgcHJvdG9jb2wgPSAoKCkgPT4ge1xuICAgICAgc3dpdGNoIChzb3VyY2UucHJvdG9jb2wpIHtcbiAgICAgICAgY2FzZSAnUlRQJzpcbiAgICAgICAgICByZXR1cm4gJ3J0cCc7XG4gICAgICAgIGNhc2UgJ1JUUC1GRUMnOlxuICAgICAgICAgIHJldHVybiAncnRwLWZlYyc7XG4gICAgICAgIGNhc2UgJ1NSVCc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICdzcnQtbGlzdGVuZXInO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICAvLyBDcmVhdGUgYSBWUENcbiAgICBjb25zdCB2cGMgPSB2cGNDb25maWcgPyBuZXcgZWMyLlZwYyh0aGlzLCAnVlBDJywgdnBjQ29uZmlnLnByb3BzKSA6IHVuZGVmaW5lZDtcbiAgICB2cGMgJiYgdnBjLmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgIC8vIEFsbG9jYXRlIGFuIEVsYXN0aWMgSVAgZm9yIHRoZSBWUEMgaW50ZXJmYWNlXG4gICAgY29uc3QgZWlwID0gdnBjID8gbmV3IGVjMi5DZm5FSVAodGhpcywgJ0VJUCcsIHtcbiAgICAgIGRvbWFpbjogJ3ZwYycsIC8vIEVuc3VyZSB0aGUgRUlQIGlzIGFsbG9jYXRlZCBpbiB0aGUgVlBDXG4gICAgfSkgOiB1bmRlZmluZWQ7XG5cbiAgICAvLyBDcmVhdGUgYSBzZWN1cml0eSBncm91cCB0byBhbGxvdyBwdXNoIGlucHV0XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSAnQWxsb3cgUHVzaCBpbnB1dCBmcm9tIE1lZGlhTGl2ZSc7XG4gICAgY29uc3Qgc2cgPSB2cGMgPyBuZXcgZWMyLlNlY3VyaXR5R3JvdXAodGhpcywgJ1NlY3VyaXR5R3JvdXAnLCB7XG4gICAgICB2cGMsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gICAgfSk6IHVuZGVmaW5lZDtcbiAgICBzZyAmJiBzZy5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG4gICAgc2cgJiYgc2cuYWRkSW5ncmVzc1J1bGUoXG4gICAgICBlYzIuUGVlci5hbnlJcHY0KCksXG4gICAgICBlYzIuUG9ydC51ZHAoc291cmNlSW5nZXN0UG9ydCksXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICApO1xuXG4gICAgLy8gQ3JlYXRlIGFuIE5ESSBkaXNjb3Zlcnkgc2VydmVyXG4gICAgbGV0IG5kaUNvbmZpZzogQ2ZuRmxvdy5OZGlDb25maWdQcm9wZXJ0eSB8IHVuZGVmaW5lZDtcbiAgICBpZiAodnBjICYmIHZwY0NvbmZpZz8uZW5hYmxlTkRJKSB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IGNyZWF0ZU5kaURpc2NvdmVyeVNlcnZlcih0aGlzLCB2cGMpO1xuICAgICAgbmRpQ29uZmlnID0ge1xuICAgICAgICBuZGlEaXNjb3ZlcnlTZXJ2ZXJzOiBbe1xuICAgICAgICAgIGRpc2NvdmVyeVNlcnZlckFkZHJlc3M6IGluc3RhbmNlLmluc3RhbmNlUHJpdmF0ZUlwLCAvLyBVc2UgdGhlIHByaXZhdGUgSVAgb2YgdGhlIE5ESSBEaXNjb3ZlcnkgU2VydmVyXG4gICAgICAgICAgdnBjSW50ZXJmYWNlQWRhcHRlcjogVlBDX0lOVEVSRkFDRV9OQU1FLFxuICAgICAgICAgIGRpc2NvdmVyeVNlcnZlclBvcnQsXG4gICAgICAgIH1dLFxuICAgICAgICBuZGlTdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgfTtcbiAgICAgIHNnICYmIHNnLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgICBlYzIuUGVlci5hbnlJcHY0KCksXG4gICAgICAgIGVjMi5Qb3J0LnRjcFJhbmdlKDU5NjEsIDY1NTM1KSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhIHNlY3JldFxuICAgIGNvbnN0IHJhbmRvbXN0cmluZyA9IE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKC04KTtcbiAgICBjb25zdCBzb3VyY2VQYXNzd29yZCA9IG5ldyBhc20uU2VjcmV0KHRoaXMsICdTb3VyY2VQYXNzd29yZCcsIHtcbiAgICAgIHNlY3JldE5hbWU6IGBzZWNyZXQtJHt1dWlkfWAsXG4gICAgICBnZW5lcmF0ZVNlY3JldFN0cmluZzoge1xuICAgICAgICBzZWNyZXRTdHJpbmdUZW1wbGF0ZTogSlNPTi5zdHJpbmdpZnkoeyBwYXNzd29yZDogcmFuZG9tc3RyaW5nIH0pLFxuICAgICAgICBnZW5lcmF0ZVN0cmluZ0tleTogJ3Bhc3N3b3JkJyxcbiAgICAgICAgZXhjbHVkZVB1bmN0dWF0aW9uOiB0cnVlLFxuICAgICAgfSxcbiAgICAgIHJlbW92YWxQb2xpY3k6IGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYW4gSUFNIHJvbGUgZm9yIE1lZGlhQ29ubmVjdCB0byBhY2Nlc3MgdGhlIFZQQ1xuICAgIGNvbnN0IHJvbGUgPSBuZXcgaWFtLlJvbGUodGhpcywgJ01lZGlhQ29ubmVjdFJvbGUnLCB7XG4gICAgICBhc3N1bWVkQnk6IG5ldyBpYW0uU2VydmljZVByaW5jaXBhbCgnbWVkaWFjb25uZWN0LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIGlubGluZVBvbGljaWVzOiB7XG4gICAgICAgIHBvbGljeTogbmV3IGlhbS5Qb2xpY3lEb2N1bWVudCh7XG4gICAgICAgICAgc3RhdGVtZW50czogW1xuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICByZXNvdXJjZXM6IFtzb3VyY2VQYXNzd29yZC5zZWNyZXRBcm5dLFxuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkdldFJlc291cmNlUG9saWN5JyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6R2V0U2VjcmV0VmFsdWUnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpEZXNjcmliZVNlY3JldCcsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkxpc3RTZWNyZXRWZXJzaW9uSWRzJyxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0FtYXpvblZQQ0Z1bGxBY2Nlc3MnKSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICAvLyBDcmVhdGUgYSBNZWRpYUNvbm5lY3QgZmxvd1xuICAgIGNvbnN0IGZsb3cgPSBuZXcgQ2ZuRmxvdyh0aGlzLCAnTXlDZm5GbG93Jywge1xuICAgICAgbmFtZTogYGxjcC1kZW1vLSR7dXVpZH1gLFxuICAgICAgc291cmNlOiB7XG4gICAgICAgIG5hbWU6IGBsY3AtZGVtby1zb3VyY2UtJHt1dWlkfWAsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICAvLyBtYXhMYXRlbmN5OiAyMDAwLFxuICAgICAgICAvLyBtaW5MYXRlbmN5OiAxMDAwLFxuICAgICAgICAvLyB2cGNJbnRlcmZhY2VOYW1lOiBWUENfSU5URVJGQUNFX05BTUUsXG4gICAgICAgIHdoaXRlbGlzdENpZHI6IHNvdXJjZS50eXBlID09PSAnU1RBTkRBUkQtU09VUkNFJyA/ICcwLjAuMC4wLzAnIDogdW5kZWZpbmVkLFxuICAgICAgICBkZWNyeXB0aW9uOiB7XG4gICAgICAgICAgLy8gYWxnb3JpdGhtOiAnYWVzMTI4JyxcbiAgICAgICAgICByb2xlQXJuOiByb2xlLnJvbGVBcm4sXG4gICAgICAgICAgc2VjcmV0QXJuOiBzb3VyY2VQYXNzd29yZC5zZWNyZXRBcm4sXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHNvdXJjZUluZ2VzdFBvcnQ6IGAke3NvdXJjZUluZ2VzdFBvcnR9YCxcbiAgICAgICAgdnBjSW50ZXJmYWNlTmFtZTogc291cmNlLnR5cGUgPT09ICdWUEMtU09VUkNFJyA/IFZQQ19JTlRFUkZBQ0VfTkFNRSA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgICBhdmFpbGFiaWxpdHlab25lOiB2cGNDb25maWc/LmF2YWlsYWJpbGl0eVpvbmUgPz8gdnBjPy5hdmFpbGFiaWxpdHlab25lc1swXSxcbiAgICAgIGZsb3dTaXplOiB2cGNDb25maWc/LmVuYWJsZU5ESSA/ICdMQVJHRScgOiAnTUVESVVNJyxcbiAgICAgIG5kaUNvbmZpZyxcbiAgICAgIHNvdXJjZU1vbml0b3JpbmdDb25maWc6IHtcbiAgICAgICAgdGh1bWJuYWlsU3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgICAgY29udGVudFF1YWxpdHlBbmFseXNpc1N0YXRlOiAnRU5BQkxFRCcsXG4gICAgICB9LFxuICAgICAgdnBjSW50ZXJmYWNlczogdnBjID8gW3tcbiAgICAgICAgbmFtZTogVlBDX0lOVEVSRkFDRV9OQU1FLFxuICAgICAgICByb2xlQXJuOiByb2xlLnJvbGVBcm4sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IFtzZyEuc2VjdXJpdHlHcm91cElkXSxcbiAgICAgICAgc3VibmV0SWQ6IHZwY0NvbmZpZz8uc3VibmV0SWQgPz8gdnBjLnByaXZhdGVTdWJuZXRzWzBdLnN1Ym5ldElkLFxuICAgICAgfV0gOiBbXSxcbiAgICB9KTtcbiAgICBmbG93LmFwcGx5UmVtb3ZhbFBvbGljeShjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZKTtcblxuICAgIC8vIFN0YXJ0IHRoZSBNZWRpYUNvbm5lY3QgRmxvd1xuICAgIGF1dG9TdGFydCAmJiBzdGFydEZsb3codGhpcywgJ1N0YXJ0TWVkaWFDb25uZWN0RmxvdycsIGZsb3cuYXR0ckZsb3dBcm4pO1xuXG4gICAgLy8gQ3JlYXRlIE1lZGlhTGl2ZSBjaGFubmVsXG4gICAgY29uc3QgZW1sID0gbmV3IE1lZGlhTGl2ZSh0aGlzLCAnTWVkaWFMaXZlJywge1xuICAgICAgc291cmNlczogW3sgdXJsOiBmaWxlLnVybC5yZXBsYWNlKCdzMzovLycsICdzM3NzbDovLycpLCB0eXBlOiBmaWxlLnR5cGUgPz8gJ01QNF9GSUxFJyB9XSxcbiAgICAgIGRlc3RpbmF0aW9uczogW3tcbiAgICAgICAgaWQ6ICdTUlQnLFxuICAgICAgICBzcnRTZXR0aW5nczogW3tcbiAgICAgICAgICB1cmw6IGBzcnQ6Ly8ke2Zsb3cuYXR0clNvdXJjZUluZ2VzdElwfToke2Zsb3cuYXR0clNvdXJjZVNvdXJjZUluZ2VzdFBvcnR9YCwgLy8gVXNlIHRoZSBNZWRpYUNvbm5lY3QgRmxvdyBVUkxcbiAgICAgICAgICBlbmNyeXB0aW9uUGFzc3BocmFzZVNlY3JldEFybjogc291cmNlUGFzc3dvcmQuc2VjcmV0QXJuLFxuICAgICAgICB9XSxcbiAgICAgIH1dLFxuICAgICAgY2hhbm5lbENsYXNzOiAnU0lOR0xFX1BJUEVMSU5FJyxcbiAgICAgIGVuY29kZXJTcGVjOiB7XG4gICAgICAgIG91dHB1dEdyb3VwU2V0dGluZ3NMaXN0OiBbe1xuICAgICAgICAgIHNydEdyb3VwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGlucHV0TG9zc0FjdGlvbjogJ0RST1BfVFMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH1dLFxuICAgICAgICBvdXRwdXRTZXR0aW5nc0xpc3Q6IFt7XG4gICAgICAgICAgLy8gQWRkIHZhbGlkIE91dHB1dFNldHRpbmdzUHJvcGVydHkgZmllbGRzIGhlcmUgaWYgbmVlZGVkXG4gICAgICAgICAgc3J0T3V0cHV0U2V0dGluZ3M6IHtcbiAgICAgICAgICAgIGxhdGVuY3k6IDIwMDAsIC8vIExhdGVuY3kgaW4gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBkZXN0aW5hdGlvbjoge1xuICAgICAgICAgICAgICBkZXN0aW5hdGlvblJlZklkOiAnU1JUJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlbmNyeXB0aW9uVHlwZTogJ0FFUzEyOCcsIC8vIEVuY3J5cHRpb24gdHlwZVxuICAgICAgICAgICAgY29udGFpbmVyU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgbTJUc1NldHRpbmdzOiB7fSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfV0sXG4gICAgICAgIGdvcExlbmd0aEluU2Vjb25kczogMiwgLy8gVGhlIGxlbmd0aCBvZiB0aGUgR09QIGluIHNlY29uZHMuXG4gICAgICAgIHRpbWVjb2RlQnVybmluUHJlZml4OiAnQ2gnLCAvLyBUaGUgcHJlZml4IGZvciB0aGUgdGltZWNvZGUgYnVybi1pbi5cbiAgICAgIH0sXG4gICAgICB2cGM6IHNvdXJjZS50eXBlID09PSAnVlBDLVNPVVJDRScgJiYgdnBjID8ge1xuICAgICAgICBwdWJsaWNBZGRyZXNzQWxsb2NhdGlvbklkczogW2VpcCEuYXR0ckFsbG9jYXRpb25JZF0sXG4gICAgICAgIHN1Ym5ldElkczogW3ZwYy5wcml2YXRlU3VibmV0c1swXS5zdWJuZXRJZF0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IFtzZyEuc2VjdXJpdHlHcm91cElkXSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICBzZWNyZXQ6IHNvdXJjZVBhc3N3b3JkLFxuICAgIH0pO1xuXG4gICAgLy8gU3RhcnQgdGhlIE1lZGlhTGl2ZSBjaGFubmVsXG4gICAgYXV0b1N0YXJ0ICYmIHN0YXJ0Q2hhbm5lbCh0aGlzLCAnU3RhcnRNZWRpYUxpdmVDaGFubmVsJywgZW1sLmNoYW5uZWwucmVmKTtcblxuICAgIHRoaXMuZmxvdyA9IGZsb3c7XG4gICAgdGhpcy52cGMgPSB2cGM7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTmRpRGlzY292ZXJ5U2VydmVyKHNjb3BlOiBDb25zdHJ1Y3QsIHZwYzogZWMyLklWcGMpOiBlYzIuSW5zdGFuY2Uge1xuICBjb25zdCBkZXNjcmlwdGlvbiA9ICdBbGxvdyBOREkgRGlzY292ZXJ5IFNlcnZpY2UnO1xuICBjb25zdCBzZyA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cChzY29wZSwgJ05ESVNlY3VyaXR5R3JvdXAnLCB7XG4gICAgdnBjLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gIH0pO1xuICBzZy5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG4gIHNnLmFkZEluZ3Jlc3NSdWxlKFxuICAgIGVjMi5QZWVyLmFueUlwdjQoKSxcbiAgICBlYzIuUG9ydC50Y3AoZGlzY292ZXJ5U2VydmVyUG9ydCksXG4gICAgZGVzY3JpcHRpb24sXG4gICk7XG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZShzY29wZSwgJ0luc3RhbmNlJywge1xuICAgIHZwYyxcbiAgICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFMywgZWMyLkluc3RhbmNlU2l6ZS5NSUNSTyksXG4gICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4MjAyMygpLFxuICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9LFxuICAgIHNlY3VyaXR5R3JvdXA6IHNnLFxuICB9KTtcbiAgaW5zdGFuY2UuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAvLyBHZXQgdGhlIENsb3VkRm9ybWF0aW9uIGxvZ2ljYWwgSUQgZm9yIHRoZSBpbnN0YW5jZVxuICBjb25zdCBjZm5JbnN0YW5jZSA9IGluc3RhbmNlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNkay5DZm5SZXNvdXJjZTtcbiAgY29uc3QgbG9naWNhbElkID0gY2ZuSW5zdGFuY2UubG9naWNhbElkO1xuICBpbnN0YW5jZS5hcHBseUNsb3VkRm9ybWF0aW9uSW5pdChlYzIuQ2xvdWRGb3JtYXRpb25Jbml0LmZyb21Db25maWdTZXRzKHtcbiAgICBjb25maWdTZXRzOiB7XG4gICAgICAvLyBBcHBsaWVzIHRoZSBjb25maWdzIGJlbG93IGluIHRoaXMgb3JkZXJcbiAgICAgIGRlZmF1bHQ6IFsnY29uZmlnSW5zdGFuY2UnLCAnZmluYWxpemUnXSxcbiAgICB9LFxuICAgIGNvbmZpZ3M6IHtcbiAgICAgIGNvbmZpZ0luc3RhbmNlOiBuZXcgZWMyLkluaXRDb25maWcoW1xuICAgICAgICAvLyBOREkgRGlzY292ZXJ5IFNlcnZpY2Ugc2NyaXB0XG4gICAgICAgIGVjMi5Jbml0RmlsZS5mcm9tU3RyaW5nKFxuICAgICAgICAgICcvZXRjL3N5c3RlbWQvbmRpLWRpc2NvdmVyeS5zZXJ2aWNlJyxcbiAgICAgICAgICBgW1VuaXRdXG4gICAgICAgICAgRGVzY3JpcHRpb249TkRJIERpc2NvdmVyeSBTZXJ2aWNlXG4gICAgICAgICAgXG4gICAgICAgICAgW1NlcnZpY2VdXG4gICAgICAgICAgRXhlY1N0YXJ0UHJlPS9iaW4vc2xlZXAgMzBcbiAgICAgICAgICBVc2VyPWVjMi11c2VyXG4gICAgICAgICAgV29ya2luZ0RpcmVjdG9yeT0vaG9tZS9lYzItdXNlci9iaW4veDg2XzY0LWxpbnV4LWdudVxuICAgICAgICAgIEV4ZWNTdGFydD0vaG9tZS9lYzItdXNlci9iaW4veDg2XzY0LWxpbnV4LWdudS9uZGktZGlzY292ZXJ5LXNlcnZlclxuICAgICAgICAgIFJlc3RhcnQ9YWx3YXlzXG5cbiAgICAgICAgICBbSW5zdGFsbF1cbiAgICAgICAgICBXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuICAgICAgICBgKSxcbiAgICAgICAgLy8gTkRJIERpc2NvdmVyeSBTZXJ2ZXIgSW5zdGFsbGF0aW9uIHNjcmlwdFxuICAgICAgICBlYzIuSW5pdEZpbGUuZnJvbVN0cmluZyhcbiAgICAgICAgICAnL3RtcC9pbnN0YWxsLW5kaS1kaXNjb3Zlcnkuc2gnLFxuICAgICAgICAgIGAjIS9iaW4vYmFzaCAteGVcbiAgICAgICAgICBjZCAvaG9tZS9lYzItdXNlclxuXG4gICAgICAgICAgI0luc3RhbGwgdXBkYXRlc1xuICAgICAgICAgIHl1bSB1cGRhdGUgLXlcblxuICAgICAgICAgICNEb3dubG9hZCB0aGUgTkRJIExpbnV4IFNESyBhbmQgZXh0cmFjdCBpdCBhbmQgcnVuIHRoZSBpbnN0YWxsIHNjcmlwdFxuICAgICAgICAgIHdnZXQgaHR0cHM6Ly9kb3dubG9hZHMubmRpLnR2L1NESy9ORElfU0RLX0xpbnV4L0luc3RhbGxfTkRJX1NES192Nl9MaW51eC50YXIuZ3pcbiAgICAgICAgICB0YXIgLXh6ZiBJbnN0YWxsX05ESV9TREtfdjZfTGludXgudGFyLmd6XG4gICAgICAgICAgeWVzIHwgc3VkbyAuL0luc3RhbGxfTkRJX1NES192Nl9MaW51eC5zaFxuXG4gICAgICAgICAgI0NsZWFuIHVwIGFuZCBwcmVwYXJlIGRpcmVjdG9yaWVzXG4gICAgICAgICAgcm0gLWYgSW5zdGFsbF9ORElfU0RLX3Y2X0xpbnV4LnRhci5nelxuICAgICAgICAgIHJtIC1mIEluc3RhbGxfTkRJX1NES192Nl9MaW51eC5zaFxuICAgICAgICAgIGNwIC1yICdOREkgU0RLIGZvciBMaW51eCcvKiAuL1xuICAgICAgICAgIHJtIC1yICdOREkgU0RLIGZvciBMaW51eCcvXG4gICAgICAgIGApLFxuICAgICAgICAvLyBJbnN0YWxsIHRoZSBOREkgRGlzY292ZXJ5IFNlcnZpY2VcbiAgICAgICAgZWMyLkluaXRDb21tYW5kLnNoZWxsQ29tbWFuZCgnc3VkbyBiYXNoIC90bXAvaW5zdGFsbC1uZGktZGlzY292ZXJ5LnNoJyksXG4gICAgICAgIC8vIFJ1biB0aGUgTkRJIERpc2NvdmVyeSBTZXJ2aWNlXG4gICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoJ3N1ZG8gc3lzdGVtY3RsIGVuYWJsZSAvZXRjL3N5c3RlbWQvbmRpLWRpc2NvdmVyeS5zZXJ2aWNlJyksXG4gICAgICBdKSxcbiAgICAgIGZpbmFsaXplOiBuZXcgZWMyLkluaXRDb25maWcoW1xuICAgICAgICAvLyBTdGFydCB0aGUgTkRJIERpc2NvdmVyeSBTZXJ2aWNlXG4gICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoXG4gICAgICAgICAgY2RrLkZuLnN1YignL29wdC9hd3MvYmluL2Nmbi1zaWduYWwgLWUgJD8gLS1zdGFjayAke1N0YWNrTmFtZX0gLS1yZXNvdXJjZSAke1Jlc291cmNlfSAtLXJlZ2lvbiAke1JlZ2lvbn0nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTdGFja05hbWU6IGNkay5Bd3MuU1RBQ0tfTkFNRSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IGxvZ2ljYWxJZCxcbiAgICAgICAgICAgICAgUmVnaW9uOiBjZGsuQXdzLlJFR0lPTixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgfSxcbiAgfSkpO1xuICBpbnN0YW5jZS5hZGRVc2VyRGF0YShjZGsuRm4uc3ViKGBcbiAgICAjIS9iaW4vYmFzaCAteGVcbiAgICB5dW0gaW5zdGFsbCAteSBhd3MtY2ZuLWJvb3RzdHJhcFxuICAgIHN1ZG8gL29wdC9hd3MvYmluL2Nmbi1pbml0IC0tY29uZmlnc2V0cyBkZWZhdWx0IC12IC0tc3RhY2sgXFwke1N0YWNrTmFtZX0gLS1yZXNvdXJjZSBcXCR7UmVzb3VyY2V9IC0tcmVnaW9uIFxcJHtSZWdpb259XG4gICAgc3VkbyByZWJvb3RcbiAgYCwge1xuICAgIFN0YWNrTmFtZTogY2RrLkF3cy5TVEFDS19OQU1FLFxuICAgIFJlc291cmNlOiBsb2dpY2FsSWQsXG4gICAgUmVnaW9uOiBjZGsuQXdzLlJFR0lPTixcbiAgfSkpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEZsb3coc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZmxvd0Fybjogc3RyaW5nKTogRGF0ZSB7XG4gIC8vIFN0YXJ0IGNoYW5uZWxcbiAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHNjb3BlLCBpZCwge1xuICAgIG9uQ3JlYXRlOiB7XG4gICAgICBzZXJ2aWNlOiAnTWVkaWFDb25uZWN0JyxcbiAgICAgIGFjdGlvbjogJ1N0YXJ0RmxvdycsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEZsb3dBcm46IGZsb3dBcm4sXG4gICAgICB9LFxuICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoYCR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gKSxcbiAgICAgIC8vIGlnbm9yZUVycm9yQ29kZXNNYXRjaGluZzogJyonLFxuICAgICAgb3V0cHV0UGF0aHM6IFsnRmxvd0FybicsICdTdGF0dXMnXSxcbiAgICB9LFxuICAgIG9uRGVsZXRlOiB7XG4gICAgICBzZXJ2aWNlOiAnTWVkaWFDb25uZWN0JyxcbiAgICAgIGFjdGlvbjogJ1N0b3BGbG93JyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRmxvd0FybjogZmxvd0FybixcbiAgICAgIH0sXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihgJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWApLFxuICAgICAgLy8gaWdub3JlRXJyb3JDb2Rlc01hdGNoaW5nOiAnKicsXG4gICAgICBvdXRwdXRQYXRoczogWydGbG93QXJuJywgJ1N0YXR1cyddLFxuICAgIH0sXG4gICAgLy9XaWxsIGlnbm9yZSBhbnkgcmVzb3VyY2UgYW5kIHVzZSB0aGUgYXNzdW1lZFJvbGVBcm4gYXMgcmVzb3VyY2UgYW5kICdzdHM6QXNzdW1lUm9sZScgZm9yIHNlcnZpY2U6YWN0aW9uXG4gICAgcG9saWN5OiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgcmVzb3VyY2VzOiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0UsXG4gICAgfSksXG4gIH0pO1xuICByZXR1cm4gbmV3IERhdGUoKTtcbn1cbiJdfQ==
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGl2ZUZlZWRGcm9tRmlsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9MaXZlRmVlZEZyb21GaWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFrV0EsOEJBNkJDOztBQS9YRCxpQ0FBaUM7QUFDakMsbUNBQW1DO0FBQ25DLDJDQUEyQztBQUMzQywyQ0FBMkM7QUFDM0MsbUVBQXVEO0FBQ3ZELHNEQUFzRDtBQUN0RCxtRUFBOEc7QUFDOUcsMkZBQTZFO0FBQzdFLDJDQUF1QztBQXFDdkMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7QUFDOUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFDakMsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztBQUU5QyxNQUFhLGdCQUFpQixTQUFRLHNCQUFTO0lBSTdDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQ0osSUFBSSxFQUNKLFdBQVcsR0FBRztZQUNaLGtCQUFrQixFQUFFLENBQUM7WUFDckIsb0JBQW9CLEVBQUUsSUFBSTtZQUMxQixrQkFBa0IsRUFBRSxFQUFFO1lBQ3RCLG9CQUFvQixFQUFFLENBQUM7WUFDdkIsUUFBUSxFQUFFLGFBQWE7WUFDdkIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsSUFBSTtTQUNiLEVBQ0QsTUFBTSxHQUFHO1lBQ1AsUUFBUSxFQUFFLEtBQUs7WUFDZixJQUFJLEVBQUUsaUJBQWlCO1NBQ3hCLEVBQ0QsU0FBUyxFQUNULFNBQVMsR0FBRyxJQUFJLEdBQ2pCLEdBQUcsS0FBSyxDQUFDO1FBRVYsTUFBTSxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUN0QyxNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FB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QUFFLGNBQWM7WUFDdkIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsVUFBVSxFQUFFO2dCQUNWLE9BQU8sRUFBRSxPQUFPO2FBQ2pCO1lBQ0Qsa0JBQWtCLEVBQUUscUNBQWtCLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDbkUsaUNBQWlDO1lBQ2pDLFdBQVcsRUFBRSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUM7U0FDbkM7UUFDRCx5R0FBeUc7UUFDekcsTUFBTSxFQUFFLDBDQUF1QixDQUFDLFlBQVksQ0FBQztZQUMzQyxTQUFTLEVBQUUsMENBQXVCLENBQUMsWUFBWTtTQUNoRCxDQUFDO0tBQ0gsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjcnlwdG8gZnJvbSAnY3J5cHRvJztcbmltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5GbG93IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLW1lZGlhY29ubmVjdCc7XG5pbXBvcnQgKiBhcyBhc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyJztcbmltcG9ydCB7IEF3c0N1c3RvbVJlc291cmNlLCBBd3NDdXN0b21SZXNvdXJjZVBvbGljeSwgUGh5c2ljYWxSZXNvdXJjZUlkIH0gZnJvbSAnYXdzLWNkay1saWIvY3VzdG9tLXJlc291cmNlcyc7XG5pbXBvcnQgeyBNZWRpYUxpdmUsIHN0YXJ0Q2hhbm5lbCB9IGZyb20gJ2F3c2Nkay1jb25zdHJ1Y3QtbWVkaWFsaXZlLWNoYW5uZWwnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVNwZWMge1xuICByZWFkb25seSB0eXBlPzogJ01QNF9GSUxFJyB8ICdUU19GSUxFJzsgLy8gVHlwZSBvZiB0aGUgaW5wdXQgZmlsZVxuICByZWFkb25seSB1cmw6IHN0cmluZzsgLy8gUzMgVVJMIG9mIHRoZSBpbnB1dCBmaWxlXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGl2ZVNvdXJjZVNwZWMge1xuICByZWFkb25seSBwcm90b2NvbDogJ1JUUCcgfCAnUlRQLUZFQycgfCAnU1JUJzsgLy8gUHJvdG9jb2wgb2YgdGhlIGxpdmUgc291cmNlXG4gIHJlYWRvbmx5IHR5cGU6ICdTVEFOREFSRC1TT1VSQ0UnIHwgJ1ZQQy1TT1VSQ0UnOyAvLyBUeXBlIG9mIHRoZSBsaXZlIHNvdXJjZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFZwY0NvbmZpZyB7XG4gIHJlYWRvbmx5IHByb3BzOiBlYzIuVnBjUHJvcHM7XG4gIHJlYWRvbmx5IGF2YWlsYWJpbGl0eVpvbmU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN1Ym5ldElkPzogc3RyaW5nO1xuICByZWFkb25seSBlbmFibGVOREk/OiBib29sZWFuOyAvLyBTZXR0aW5ncyBmb3IgTkRJIG91dHB1dFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEVuY29kZXJTZXR0aW5ncyB7XG4gIHJlYWRvbmx5IGdvcExlbmd0aEluU2Vjb25kcz86IG51bWJlcjsgLy8gVGhlIGxlbmd0aCBvZiB0aGUgR09QIGluIHNlY29uZHMuXG4gIHJlYWRvbmx5IHRpbWVjb2RlQnVybmluUHJlZml4Pzogc3RyaW5nOyAvLyBUaGUgcHJlZml4IGZvciB0aGUgdGltZWNvZGUgYnVybi1pbi5cbiAgcmVhZG9ubHkgZnJhbWVyYXRlTnVtZXJhdG9yPzogbnVtYmVyOyAvLyBUaGUgbnVtZXJhdG9yIGZvciB0aGUgZnJhbWVyYXRlLlxuICByZWFkb25seSBmcmFtZXJhdGVEZW5vbWluYXRvcj86IG51bWJlcjsgLy8gVGhlIGRlbm9taW5hdG9yIGZvciB0aGUgZnJhbWVyYXRlLlxuICByZWFkb25seSBzY2FuVHlwZT86ICdQUk9HUkVTU0lWRScgfCAnSU5URVJMQUNFRCc7IC8vIFRoZSBzY2FuIHR5cGUuXG4gIHJlYWRvbmx5IHdpZHRoPzogbnVtYmVyOyAvLyBUaGUgd2lkdGggb2YgdGhlIHZpZGVvLlxuICByZWFkb25seSBoZWlnaHQ/OiBudW1iZXI7IC8vIFRoZSBoZWlnaHQgb2YgdGhlIHZpZGVvLlxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpdmVGZWVkRnJvbUZpbGVQcm9wcyB7XG4gIHJlYWRvbmx5IGZpbGU6IEZpbGVTcGVjOyAvLyBGaWxlIHNwZWNpZmljYXRpb25cbiAgcmVhZG9ubHkgZW5jb2RlclNwZWM/OiBFbmNvZGVyU2V0dGluZ3M7IC8vIE9wdGlvbmFsIGVuY29kZXIgc2V0dGluZ3MgZm9yIE1lZGlhTGl2ZVxuICByZWFkb25seSBzb3VyY2U/OiBMaXZlU291cmNlU3BlYzsgLy8gT3B0aW9uYWwgbGl2ZSBzb3VyY2Ugc3BlY2lmaWNhdGlvblxuICByZWFkb25seSB2cGNDb25maWc/OiBWcGNDb25maWc7IC8vIFNldHRpbmdzIGZvciBWUEMuIFJlcXVpcmVkIHdoZW4gdGhlIHNvdXJjZSB0eXBlIGlzIFZQQy1TT1VSQ0UgYW5kL29yIFZQQyBvdXRwdXRzIHdpbGwgYmUgYWRkZWQgdG8gdGhpcyBmbG93LlxuICByZWFkb25seSBhdXRvU3RhcnQ/OiBib29sZWFuOyAvLyBXaGV0aGVyIHRvIGF1dG9tYXRpY2FsbHkgc3RhcnQgdGhlIE1lZGlhTGl2ZSBjaGFubmVsIGFuZCBNZWRpYUNvbm5lY3QgZmxvd1xufVxuXG5jb25zdCBzb3VyY2VJbmdlc3RQb3J0ID0gNTAwMDtcbmNvbnN0IGRpc2NvdmVyeVNlcnZlclBvcnQgPSA1OTU5O1xuY29uc3QgVlBDX0lOVEVSRkFDRV9OQU1FID0gJ3ZwY0ludGVyZmFjZU5hbWUnO1xuXG5leHBvcnQgY2xhc3MgTGl2ZUZlZWRGcm9tRmlsZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHB1YmxpYyByZWFkb25seSBmbG93OiBDZm5GbG93O1xuICBwdWJsaWMgcmVhZG9ubHkgdnBjPzogZWMyLklWcGM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IExpdmVGZWVkRnJvbUZpbGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBmaWxlLFxuICAgICAgZW5jb2RlclNwZWMgPSB7XG4gICAgICAgIGdvcExlbmd0aEluU2Vjb25kczogMixcbiAgICAgICAgdGltZWNvZGVCdXJuaW5QcmVmaXg6ICdDaCcsXG4gICAgICAgIGZyYW1lcmF0ZU51bWVyYXRvcjogMzAsXG4gICAgICAgIGZyYW1lcmF0ZURlbm9taW5hdG9yOiAxLFxuICAgICAgICBzY2FuVHlwZTogJ1BST0dSRVNTSVZFJyxcbiAgICAgICAgd2lkdGg6IDE5MjAsXG4gICAgICAgIGhlaWdodDogMTA4MCxcbiAgICAgIH0sXG4gICAgICBzb3VyY2UgPSB7XG4gICAgICAgIHByb3RvY29sOiAnU1JUJyxcbiAgICAgICAgdHlwZTogJ1NUQU5EQVJELVNPVVJDRScsXG4gICAgICB9LFxuICAgICAgdnBjQ29uZmlnLFxuICAgICAgYXV0b1N0YXJ0ID0gdHJ1ZSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCB1dWlkID0gYCR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gO1xuICAgIGNvbnN0IHByb3RvY29sID0gKCgpID0+IHtcbiAgICAgIHN3aXRjaCAoc291cmNlLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ1JUUCc6XG4gICAgICAgICAgcmV0dXJuICdydHAnO1xuICAgICAgICBjYXNlICdSVFAtRkVDJzpcbiAgICAgICAgICByZXR1cm4gJ3J0cC1mZWMnO1xuICAgICAgICBjYXNlICdTUlQnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnc3J0LWxpc3RlbmVyJztcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgLy8gQ3JlYXRlIGEgVlBDXG4gICAgY29uc3QgdnBjID0gdnBjQ29uZmlnID8gbmV3IGVjMi5WcGModGhpcywgJ1ZQQycsIHZwY0NvbmZpZy5wcm9wcykgOiB1bmRlZmluZWQ7XG4gICAgdnBjICYmIHZwYy5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG5cbiAgICAvLyBBbGxvY2F0ZSBhbiBFbGFzdGljIElQIGZvciB0aGUgVlBDIGludGVyZmFjZVxuICAgIGNvbnN0IGVpcCA9IHZwYyA/IG5ldyBlYzIuQ2ZuRUlQKHRoaXMsICdFSVAnLCB7XG4gICAgICBkb21haW46ICd2cGMnLCAvLyBFbnN1cmUgdGhlIEVJUCBpcyBhbGxvY2F0ZWQgaW4gdGhlIFZQQ1xuICAgIH0pIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gQ3JlYXRlIGEgc2VjdXJpdHkgZ3JvdXAgdG8gYWxsb3cgcHVzaCBpbnB1dFxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gJ0FsbG93IFB1c2ggaW5wdXQgZnJvbSBNZWRpYUxpdmUnO1xuICAgIGNvbnN0IHNnID0gdnBjID8gbmV3IGVjMi5TZWN1cml0eUdyb3VwKHRoaXMsICdTZWN1cml0eUdyb3VwJywge1xuICAgICAgdnBjLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBhbGxvd0FsbE91dGJvdW5kOiB0cnVlLFxuICAgIH0pOiB1bmRlZmluZWQ7XG4gICAgc2cgJiYgc2cuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAgIHNnICYmIHNnLmFkZEluZ3Jlc3NSdWxlKFxuICAgICAgZWMyLlBlZXIuYW55SXB2NCgpLFxuICAgICAgZWMyLlBvcnQudWRwKHNvdXJjZUluZ2VzdFBvcnQpLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBhbiBOREkgZGlzY292ZXJ5IHNlcnZlclxuICAgIGxldCBuZGlDb25maWc6IENmbkZsb3cuTmRpQ29uZmlnUHJvcGVydHkgfCB1bmRlZmluZWQ7XG4gICAgaWYgKHZwYyAmJiB2cGNDb25maWc/LmVuYWJsZU5ESSkge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBjcmVhdGVOZGlEaXNjb3ZlcnlTZXJ2ZXIodGhpcywgdnBjKTtcbiAgICAgIG5kaUNvbmZpZyA9IHtcbiAgICAgICAgbmRpRGlzY292ZXJ5U2VydmVyczogW3tcbiAgICAgICAgICBkaXNjb3ZlcnlTZXJ2ZXJBZGRyZXNzOiBpbnN0YW5jZS5pbnN0YW5jZVByaXZhdGVJcCwgLy8gVXNlIHRoZSBwcml2YXRlIElQIG9mIHRoZSBOREkgRGlzY292ZXJ5IFNlcnZlclxuICAgICAgICAgIHZwY0ludGVyZmFjZUFkYXB0ZXI6IFZQQ19JTlRFUkZBQ0VfTkFNRSxcbiAgICAgICAgICBkaXNjb3ZlcnlTZXJ2ZXJQb3J0LFxuICAgICAgICB9XSxcbiAgICAgICAgbmRpU3RhdGU6ICdFTkFCTEVEJyxcbiAgICAgIH07XG4gICAgICBzZyAmJiBzZy5hZGRJbmdyZXNzUnVsZShcbiAgICAgICAgZWMyLlBlZXIuYW55SXB2NCgpLFxuICAgICAgICBlYzIuUG9ydC50Y3BSYW5nZSg1OTYxLCA2NTUzNSksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYSBzZWNyZXRcbiAgICBjb25zdCByYW5kb21zdHJpbmcgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgtOCk7XG4gICAgY29uc3Qgc291cmNlUGFzc3dvcmQgPSBuZXcgYXNtLlNlY3JldCh0aGlzLCAnU291cmNlUGFzc3dvcmQnLCB7XG4gICAgICBzZWNyZXROYW1lOiBgc2VjcmV0LSR7dXVpZH1gLFxuICAgICAgZ2VuZXJhdGVTZWNyZXRTdHJpbmc6IHtcbiAgICAgICAgc2VjcmV0U3RyaW5nVGVtcGxhdGU6IEpTT04uc3RyaW5naWZ5KHsgcGFzc3dvcmQ6IHJhbmRvbXN0cmluZyB9KSxcbiAgICAgICAgZ2VuZXJhdGVTdHJpbmdLZXk6ICdwYXNzd29yZCcsXG4gICAgICAgIGV4Y2x1ZGVQdW5jdHVhdGlvbjogdHJ1ZSxcbiAgICAgIH0sXG4gICAgICByZW1vdmFsUG9saWN5OiBjZGsuUmVtb3ZhbFBvbGljeS5ERVNUUk9ZLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGFuIElBTSByb2xlIGZvciBNZWRpYUNvbm5lY3QgdG8gYWNjZXNzIHRoZSBWUENcbiAgICBjb25zdCByb2xlID0gbmV3IGlhbS5Sb2xlKHRoaXMsICdNZWRpYUNvbm5lY3RSb2xlJywge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgaWFtLlNlcnZpY2VQcmluY2lwYWwoJ21lZGlhY29ubmVjdC5hbWF6b25hd3MuY29tJyksXG4gICAgICBpbmxpbmVQb2xpY2llczoge1xuICAgICAgICBwb2xpY3k6IG5ldyBpYW0uUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgIHN0YXRlbWVudHM6IFtcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbc291cmNlUGFzc3dvcmQuc2VjcmV0QXJuXSxcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpHZXRSZXNvdXJjZVBvbGljeScsXG4gICAgICAgICAgICAgICAgJ3NlY3JldHNtYW5hZ2VyOkdldFNlY3JldFZhbHVlJyxcbiAgICAgICAgICAgICAgICAnc2VjcmV0c21hbmFnZXI6RGVzY3JpYmVTZWNyZXQnLFxuICAgICAgICAgICAgICAgICdzZWNyZXRzbWFuYWdlcjpMaXN0U2VjcmV0VmVyc2lvbklkcycsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBdLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgaWFtLk1hbmFnZWRQb2xpY3kuZnJvbUF3c01hbmFnZWRQb2xpY3lOYW1lKCdBbWF6b25WUENGdWxsQWNjZXNzJyksXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIGEgTWVkaWFDb25uZWN0IGZsb3dcbiAgICBjb25zdCBmbG93ID0gbmV3IENmbkZsb3codGhpcywgJ015Q2ZuRmxvdycsIHtcbiAgICAgIG5hbWU6IGBsY3AtZGVtby0ke3V1aWR9YCxcbiAgICAgIHNvdXJjZToge1xuICAgICAgICBuYW1lOiBgbGNwLWRlbW8tc291cmNlLSR7dXVpZH1gLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgLy8gbWF4TGF0ZW5jeTogMjAwMCxcbiAgICAgICAgLy8gbWluTGF0ZW5jeTogMTAwMCxcbiAgICAgICAgLy8gdnBjSW50ZXJmYWNlTmFtZTogVlBDX0lOVEVSRkFDRV9OQU1FLFxuICAgICAgICB3aGl0ZWxpc3RDaWRyOiBzb3VyY2UudHlwZSA9PT0gJ1NUQU5EQVJELVNPVVJDRScgPyAnMC4wLjAuMC8wJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgZGVjcnlwdGlvbjoge1xuICAgICAgICAgIC8vIGFsZ29yaXRobTogJ2FlczEyOCcsXG4gICAgICAgICAgcm9sZUFybjogcm9sZS5yb2xlQXJuLFxuICAgICAgICAgIHNlY3JldEFybjogc291cmNlUGFzc3dvcmQuc2VjcmV0QXJuLFxuICAgICAgICB9LFxuICAgICAgICAvLyBzb3VyY2VJbmdlc3RQb3J0OiBgJHtzb3VyY2VJbmdlc3RQb3J0fWAsXG4gICAgICAgIHZwY0ludGVyZmFjZU5hbWU6IHNvdXJjZS50eXBlID09PSAnVlBDLVNPVVJDRScgPyBWUENfSU5URVJGQUNFX05BTUUgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgYXZhaWxhYmlsaXR5Wm9uZTogdnBjQ29uZmlnPy5hdmFpbGFiaWxpdHlab25lID8/IHZwYz8uYXZhaWxhYmlsaXR5Wm9uZXNbMF0sXG4gICAgICBmbG93U2l6ZTogdnBjQ29uZmlnPy5lbmFibGVOREkgPyAnTEFSR0UnIDogJ01FRElVTScsXG4gICAgICBuZGlDb25maWcsXG4gICAgICBzb3VyY2VNb25pdG9yaW5nQ29uZmlnOiB7XG4gICAgICAgIHRodW1ibmFpbFN0YXRlOiAnRU5BQkxFRCcsXG4gICAgICAgIGNvbnRlbnRRdWFsaXR5QW5hbHlzaXNTdGF0ZTogJ0VOQUJMRUQnLFxuICAgICAgfSxcbiAgICAgIHZwY0ludGVyZmFjZXM6IHZwYyA/IFt7XG4gICAgICAgIG5hbWU6IFZQQ19JTlRFUkZBQ0VfTkFNRSxcbiAgICAgICAgcm9sZUFybjogcm9sZS5yb2xlQXJuLFxuICAgICAgICBzZWN1cml0eUdyb3VwSWRzOiBbc2chLnNlY3VyaXR5R3JvdXBJZF0sXG4gICAgICAgIHN1Ym5ldElkOiB2cGNDb25maWc/LnN1Ym5ldElkID8/IHZwYy5wcml2YXRlU3VibmV0c1swXS5zdWJuZXRJZCxcbiAgICAgIH1dIDogW10sXG4gICAgfSk7XG4gICAgZmxvdy5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG5cbiAgICAvLyBTdGFydCB0aGUgTWVkaWFDb25uZWN0IEZsb3dcbiAgICBhdXRvU3RhcnQgJiYgc3RhcnRGbG93KHRoaXMsICdTdGFydE1lZGlhQ29ubmVjdEZsb3cnLCBmbG93LmF0dHJGbG93QXJuKTtcblxuICAgIC8vIENyZWF0ZSBNZWRpYUxpdmUgY2hhbm5lbFxuICAgIGNvbnN0IGVtbCA9IG5ldyBNZWRpYUxpdmUodGhpcywgJ01lZGlhTGl2ZScsIHtcbiAgICAgIHNvdXJjZXM6IFt7IHVybDogZmlsZS51cmwucmVwbGFjZSgnczM6Ly8nLCAnczNzc2w6Ly8nKSwgdHlwZTogZmlsZS50eXBlID8/ICdNUDRfRklMRScgfV0sXG4gICAgICBkZXN0aW5hdGlvbnM6IFt7XG4gICAgICAgIGlkOiAnU1JUJyxcbiAgICAgICAgc3J0U2V0dGluZ3M6IFt7XG4gICAgICAgICAgdXJsOiBgc3J0Oi8vJHtmbG93LmF0dHJTb3VyY2VJbmdlc3RJcH06JHtmbG93LmF0dHJTb3VyY2VTb3VyY2VJbmdlc3RQb3J0fWAsIC8vIFVzZSB0aGUgTWVkaWFDb25uZWN0IEZsb3cgVVJMXG4gICAgICAgICAgZW5jcnlwdGlvblBhc3NwaHJhc2VTZWNyZXRBcm46IHNvdXJjZVBhc3N3b3JkLnNlY3JldEFybixcbiAgICAgICAgfV0sXG4gICAgICB9XSxcbiAgICAgIGNoYW5uZWxDbGFzczogJ1NJTkdMRV9QSVBFTElORScsXG4gICAgICBlbmNvZGVyU3BlYzoge1xuICAgICAgICBvdXRwdXRHcm91cFNldHRpbmdzTGlzdDogW3tcbiAgICAgICAgICBzcnRHcm91cFNldHRpbmdzOiB7XG4gICAgICAgICAgICBpbnB1dExvc3NBY3Rpb246ICdEUk9QX1RTJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9XSxcbiAgICAgICAgb3V0cHV0U2V0dGluZ3NMaXN0OiBbe1xuICAgICAgICAgIC8vIEFkZCB2YWxpZCBPdXRwdXRTZXR0aW5nc1Byb3BlcnR5IGZpZWxkcyBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgIHNydE91dHB1dFNldHRpbmdzOiB7XG4gICAgICAgICAgICBsYXRlbmN5OiAyMDAwLCAvLyBMYXRlbmN5IGluIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgZGVzdGluYXRpb246IHtcbiAgICAgICAgICAgICAgZGVzdGluYXRpb25SZWZJZDogJ1NSVCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZW5jcnlwdGlvblR5cGU6ICdBRVMxMjgnLCAvLyBFbmNyeXB0aW9uIHR5cGVcbiAgICAgICAgICAgIGNvbnRhaW5lclNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIG0yVHNTZXR0aW5nczoge30sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH1dLFxuICAgICAgICBnb3BMZW5ndGhJblNlY29uZHM6IGVuY29kZXJTcGVjLmdvcExlbmd0aEluU2Vjb25kcyA/PyAyLFxuICAgICAgICB0aW1lY29kZUJ1cm5pblByZWZpeDogZW5jb2RlclNwZWMudGltZWNvZGVCdXJuaW5QcmVmaXgsXG4gICAgICAgIGZyYW1lcmF0ZU51bWVyYXRvcjogZW5jb2RlclNwZWMuZnJhbWVyYXRlTnVtZXJhdG9yLFxuICAgICAgICBmcmFtZXJhdGVEZW5vbWluYXRvcjogZW5jb2RlclNwZWMuZnJhbWVyYXRlRGVub21pbmF0b3IsXG4gICAgICAgIHNjYW5UeXBlOiBlbmNvZGVyU3BlYy5zY2FuVHlwZSxcbiAgICAgICAgd2lkdGg6IGVuY29kZXJTcGVjLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGVuY29kZXJTcGVjLmhlaWdodCxcbiAgICAgIH0sXG4gICAgICB2cGM6IHNvdXJjZS50eXBlID09PSAnVlBDLVNPVVJDRScgJiYgdnBjID8ge1xuICAgICAgICBwdWJsaWNBZGRyZXNzQWxsb2NhdGlvbklkczogW2VpcCEuYXR0ckFsbG9jYXRpb25JZF0sXG4gICAgICAgIHN1Ym5ldElkczogW3ZwYy5wcml2YXRlU3VibmV0c1swXS5zdWJuZXRJZF0sXG4gICAgICAgIHNlY3VyaXR5R3JvdXBJZHM6IFtzZyEuc2VjdXJpdHlHcm91cElkXSxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICBzZWNyZXQ6IHNvdXJjZVBhc3N3b3JkLFxuICAgIH0pO1xuXG4gICAgLy8gU3RhcnQgdGhlIE1lZGlhTGl2ZSBjaGFubmVsXG4gICAgYXV0b1N0YXJ0ICYmIHN0YXJ0Q2hhbm5lbCh0aGlzLCAnU3RhcnRNZWRpYUxpdmVDaGFubmVsJywgZW1sLmNoYW5uZWwucmVmKTtcblxuICAgIHRoaXMuZmxvdyA9IGZsb3c7XG4gICAgdGhpcy52cGMgPSB2cGM7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTmRpRGlzY292ZXJ5U2VydmVyKHNjb3BlOiBDb25zdHJ1Y3QsIHZwYzogZWMyLklWcGMpOiBlYzIuSW5zdGFuY2Uge1xuICBjb25zdCBkZXNjcmlwdGlvbiA9ICdBbGxvdyBOREkgRGlzY292ZXJ5IFNlcnZpY2UnO1xuICBjb25zdCBzZyA9IG5ldyBlYzIuU2VjdXJpdHlHcm91cChzY29wZSwgJ05ESVNlY3VyaXR5R3JvdXAnLCB7XG4gICAgdnBjLFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGFsbG93QWxsT3V0Ym91bmQ6IHRydWUsXG4gIH0pO1xuICBzZy5hcHBseVJlbW92YWxQb2xpY3koY2RrLlJlbW92YWxQb2xpY3kuREVTVFJPWSk7XG4gIHNnLmFkZEluZ3Jlc3NSdWxlKFxuICAgIGVjMi5QZWVyLmFueUlwdjQoKSxcbiAgICBlYzIuUG9ydC50Y3AoZGlzY292ZXJ5U2VydmVyUG9ydCksXG4gICAgZGVzY3JpcHRpb24sXG4gICk7XG4gIGNvbnN0IGluc3RhbmNlID0gbmV3IGVjMi5JbnN0YW5jZShzY29wZSwgJ0luc3RhbmNlJywge1xuICAgIHZwYyxcbiAgICBpbnN0YW5jZVR5cGU6IGVjMi5JbnN0YW5jZVR5cGUub2YoZWMyLkluc3RhbmNlQ2xhc3MuQlVSU1RBQkxFMywgZWMyLkluc3RhbmNlU2l6ZS5NSUNSTyksXG4gICAgbWFjaGluZUltYWdlOiBlYzIuTWFjaGluZUltYWdlLmxhdGVzdEFtYXpvbkxpbnV4MjAyMygpLFxuICAgIHZwY1N1Ym5ldHM6IHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9LFxuICAgIHNlY3VyaXR5R3JvdXA6IHNnLFxuICB9KTtcbiAgaW5zdGFuY2UuYXBwbHlSZW1vdmFsUG9saWN5KGNkay5SZW1vdmFsUG9saWN5LkRFU1RST1kpO1xuICAvLyBHZXQgdGhlIENsb3VkRm9ybWF0aW9uIGxvZ2ljYWwgSUQgZm9yIHRoZSBpbnN0YW5jZVxuICBjb25zdCBjZm5JbnN0YW5jZSA9IGluc3RhbmNlLm5vZGUuZGVmYXVsdENoaWxkIGFzIGNkay5DZm5SZXNvdXJjZTtcbiAgY29uc3QgbG9naWNhbElkID0gY2ZuSW5zdGFuY2UubG9naWNhbElkO1xuICBpbnN0YW5jZS5hcHBseUNsb3VkRm9ybWF0aW9uSW5pdChlYzIuQ2xvdWRGb3JtYXRpb25Jbml0LmZyb21Db25maWdTZXRzKHtcbiAgICBjb25maWdTZXRzOiB7XG4gICAgICAvLyBBcHBsaWVzIHRoZSBjb25maWdzIGJlbG93IGluIHRoaXMgb3JkZXJcbiAgICAgIGRlZmF1bHQ6IFsnY29uZmlnSW5zdGFuY2UnLCAnZmluYWxpemUnXSxcbiAgICB9LFxuICAgIGNvbmZpZ3M6IHtcbiAgICAgIGNvbmZpZ0luc3RhbmNlOiBuZXcgZWMyLkluaXRDb25maWcoW1xuICAgICAgICAvLyBOREkgRGlzY292ZXJ5IFNlcnZpY2Ugc2NyaXB0XG4gICAgICAgIGVjMi5Jbml0RmlsZS5mcm9tU3RyaW5nKFxuICAgICAgICAgICcvZXRjL3N5c3RlbWQvbmRpLWRpc2NvdmVyeS5zZXJ2aWNlJyxcbiAgICAgICAgICBgW1VuaXRdXG4gICAgICAgICAgRGVzY3JpcHRpb249TkRJIERpc2NvdmVyeSBTZXJ2aWNlXG4gICAgICAgICAgXG4gICAgICAgICAgW1NlcnZpY2VdXG4gICAgICAgICAgRXhlY1N0YXJ0UHJlPS9iaW4vc2xlZXAgMzBcbiAgICAgICAgICBVc2VyPWVjMi11c2VyXG4gICAgICAgICAgV29ya2luZ0RpcmVjdG9yeT0vaG9tZS9lYzItdXNlci9iaW4veDg2XzY0LWxpbnV4LWdudVxuICAgICAgICAgIEV4ZWNTdGFydD0vaG9tZS9lYzItdXNlci9iaW4veDg2XzY0LWxpbnV4LWdudS9uZGktZGlzY292ZXJ5LXNlcnZlclxuICAgICAgICAgIFJlc3RhcnQ9YWx3YXlzXG5cbiAgICAgICAgICBbSW5zdGFsbF1cbiAgICAgICAgICBXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuICAgICAgICBgKSxcbiAgICAgICAgLy8gTkRJIERpc2NvdmVyeSBTZXJ2ZXIgSW5zdGFsbGF0aW9uIHNjcmlwdFxuICAgICAgICBlYzIuSW5pdEZpbGUuZnJvbVN0cmluZyhcbiAgICAgICAgICAnL3RtcC9pbnN0YWxsLW5kaS1kaXNjb3Zlcnkuc2gnLFxuICAgICAgICAgIGAjIS9iaW4vYmFzaCAteGVcbiAgICAgICAgICBjZCAvaG9tZS9lYzItdXNlclxuXG4gICAgICAgICAgI0luc3RhbGwgdXBkYXRlc1xuICAgICAgICAgIHl1bSB1cGRhdGUgLXlcblxuICAgICAgICAgICNEb3dubG9hZCB0aGUgTkRJIExpbnV4IFNESyBhbmQgZXh0cmFjdCBpdCBhbmQgcnVuIHRoZSBpbnN0YWxsIHNjcmlwdFxuICAgICAgICAgIHdnZXQgaHR0cHM6Ly9kb3dubG9hZHMubmRpLnR2L1NESy9ORElfU0RLX0xpbnV4L0luc3RhbGxfTkRJX1NES192Nl9MaW51eC50YXIuZ3pcbiAgICAgICAgICB0YXIgLXh6ZiBJbnN0YWxsX05ESV9TREtfdjZfTGludXgudGFyLmd6XG4gICAgICAgICAgeWVzIHwgc3VkbyAuL0luc3RhbGxfTkRJX1NES192Nl9MaW51eC5zaFxuXG4gICAgICAgICAgI0NsZWFuIHVwIGFuZCBwcmVwYXJlIGRpcmVjdG9yaWVzXG4gICAgICAgICAgcm0gLWYgSW5zdGFsbF9ORElfU0RLX3Y2X0xpbnV4LnRhci5nelxuICAgICAgICAgIHJtIC1mIEluc3RhbGxfTkRJX1NES192Nl9MaW51eC5zaFxuICAgICAgICAgIGNwIC1yICdOREkgU0RLIGZvciBMaW51eCcvKiAuL1xuICAgICAgICAgIHJtIC1yICdOREkgU0RLIGZvciBMaW51eCcvXG4gICAgICAgIGApLFxuICAgICAgICAvLyBJbnN0YWxsIHRoZSBOREkgRGlzY292ZXJ5IFNlcnZpY2VcbiAgICAgICAgZWMyLkluaXRDb21tYW5kLnNoZWxsQ29tbWFuZCgnc3VkbyBiYXNoIC90bXAvaW5zdGFsbC1uZGktZGlzY292ZXJ5LnNoJyksXG4gICAgICAgIC8vIFJ1biB0aGUgTkRJIERpc2NvdmVyeSBTZXJ2aWNlXG4gICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoJ3N1ZG8gc3lzdGVtY3RsIGVuYWJsZSAvZXRjL3N5c3RlbWQvbmRpLWRpc2NvdmVyeS5zZXJ2aWNlJyksXG4gICAgICBdKSxcbiAgICAgIGZpbmFsaXplOiBuZXcgZWMyLkluaXRDb25maWcoW1xuICAgICAgICAvLyBTdGFydCB0aGUgTkRJIERpc2NvdmVyeSBTZXJ2aWNlXG4gICAgICAgIGVjMi5Jbml0Q29tbWFuZC5zaGVsbENvbW1hbmQoXG4gICAgICAgICAgY2RrLkZuLnN1YignL29wdC9hd3MvYmluL2Nmbi1zaWduYWwgLWUgJD8gLS1zdGFjayAke1N0YWNrTmFtZX0gLS1yZXNvdXJjZSAke1Jlc291cmNlfSAtLXJlZ2lvbiAke1JlZ2lvbn0nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBTdGFja05hbWU6IGNkay5Bd3MuU1RBQ0tfTkFNRSxcbiAgICAgICAgICAgICAgUmVzb3VyY2U6IGxvZ2ljYWxJZCxcbiAgICAgICAgICAgICAgUmVnaW9uOiBjZGsuQXdzLlJFR0lPTixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICAgXSksXG4gICAgfSxcbiAgfSkpO1xuICBpbnN0YW5jZS5hZGRVc2VyRGF0YShjZGsuRm4uc3ViKGBcbiAgICAjIS9iaW4vYmFzaCAteGVcbiAgICB5dW0gaW5zdGFsbCAteSBhd3MtY2ZuLWJvb3RzdHJhcFxuICAgIHN1ZG8gL29wdC9hd3MvYmluL2Nmbi1pbml0IC0tY29uZmlnc2V0cyBkZWZhdWx0IC12IC0tc3RhY2sgXFwke1N0YWNrTmFtZX0gLS1yZXNvdXJjZSBcXCR7UmVzb3VyY2V9IC0tcmVnaW9uIFxcJHtSZWdpb259XG4gICAgc3VkbyByZWJvb3RcbiAgYCwge1xuICAgIFN0YWNrTmFtZTogY2RrLkF3cy5TVEFDS19OQU1FLFxuICAgIFJlc291cmNlOiBsb2dpY2FsSWQsXG4gICAgUmVnaW9uOiBjZGsuQXdzLlJFR0lPTixcbiAgfSkpO1xuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdGFydEZsb3coc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZmxvd0Fybjogc3RyaW5nKTogRGF0ZSB7XG4gIC8vIFN0YXJ0IGNoYW5uZWxcbiAgbmV3IEF3c0N1c3RvbVJlc291cmNlKHNjb3BlLCBpZCwge1xuICAgIG9uQ3JlYXRlOiB7XG4gICAgICBzZXJ2aWNlOiAnTWVkaWFDb25uZWN0JyxcbiAgICAgIGFjdGlvbjogJ1N0YXJ0RmxvdycsXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEZsb3dBcm46IGZsb3dBcm4sXG4gICAgICB9LFxuICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoYCR7Y3J5cHRvLnJhbmRvbVVVSUQoKX1gKSxcbiAgICAgIC8vIGlnbm9yZUVycm9yQ29kZXNNYXRjaGluZzogJyonLFxuICAgICAgb3V0cHV0UGF0aHM6IFsnRmxvd0FybicsICdTdGF0dXMnXSxcbiAgICB9LFxuICAgIG9uRGVsZXRlOiB7XG4gICAgICBzZXJ2aWNlOiAnTWVkaWFDb25uZWN0JyxcbiAgICAgIGFjdGlvbjogJ1N0b3BGbG93JyxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgRmxvd0FybjogZmxvd0FybixcbiAgICAgIH0sXG4gICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZihgJHtjcnlwdG8ucmFuZG9tVVVJRCgpfWApLFxuICAgICAgLy8gaWdub3JlRXJyb3JDb2Rlc01hdGNoaW5nOiAnKicsXG4gICAgICBvdXRwdXRQYXRoczogWydGbG93QXJuJywgJ1N0YXR1cyddLFxuICAgIH0sXG4gICAgLy9XaWxsIGlnbm9yZSBhbnkgcmVzb3VyY2UgYW5kIHVzZSB0aGUgYXNzdW1lZFJvbGVBcm4gYXMgcmVzb3VyY2UgYW5kICdzdHM6QXNzdW1lUm9sZScgZm9yIHNlcnZpY2U6YWN0aW9uXG4gICAgcG9saWN5OiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgcmVzb3VyY2VzOiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5BTllfUkVTT1VSQ0UsXG4gICAgfSksXG4gIH0pO1xuICByZXR1cm4gbmV3IERhdGUoKTtcbn1cbiJdfQ==
package/package.json CHANGED
@@ -36,14 +36,14 @@
36
36
  "devDependencies": {
37
37
  "@stylistic/eslint-plugin": "^2",
38
38
  "@types/jest": "^30.0.0",
39
- "@types/node": "^24.0.8",
39
+ "@types/node": "^24.0.10",
40
40
  "@typescript-eslint/eslint-plugin": "^8",
41
41
  "@typescript-eslint/parser": "^8",
42
42
  "commit-and-tag-version": "^12",
43
43
  "eslint": "^9",
44
44
  "eslint-import-resolver-typescript": "^4.4.4",
45
45
  "eslint-plugin-import": "^2.32.0",
46
- "jest": "^30.0.3",
46
+ "jest": "^30.0.4",
47
47
  "jest-junit": "^16",
48
48
  "jsii": "~5.8.10",
49
49
  "jsii-diff": "^1.112.0",
@@ -61,7 +61,7 @@
61
61
  },
62
62
  "dependencies": {
63
63
  "aws-cdk-lib": "^2.203.1",
64
- "awscdk-construct-medialive-channel": "^0.0.8",
64
+ "awscdk-construct-medialive-channel": "^0.0.9",
65
65
  "constructs": "^10.4.2"
66
66
  },
67
67
  "keywords": [
@@ -74,7 +74,7 @@
74
74
  "publishConfig": {
75
75
  "access": "public"
76
76
  },
77
- "version": "0.0.3",
77
+ "version": "0.0.5",
78
78
  "jest": {
79
79
  "coverageProvider": "v8",
80
80
  "testMatch": [