@aws-cdk/aws-medialive-alpha 2.268.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +60888 -0
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +524 -0
- package/LICENSE +201 -0
- package/NOTICE +2 -0
- package/README.md +1297 -0
- package/grants.json +27 -0
- package/lib/audio-codec-settings.d.ts +901 -0
- package/lib/audio-codec-settings.js +1098 -0
- package/lib/audio-selector.d.ts +170 -0
- package/lib/audio-selector.js +306 -0
- package/lib/avail-settings.d.ts +231 -0
- package/lib/avail-settings.js +226 -0
- package/lib/caption-selector.d.ts +234 -0
- package/lib/caption-selector.js +413 -0
- package/lib/caption-settings.d.ts +349 -0
- package/lib/caption-settings.js +482 -0
- package/lib/channel-features.d.ts +106 -0
- package/lib/channel-features.js +85 -0
- package/lib/channel-placement-group.d.ts +73 -0
- package/lib/channel-placement-group.js +132 -0
- package/lib/channel.d.ts +687 -0
- package/lib/channel.js +1096 -0
- package/lib/cluster.d.ts +129 -0
- package/lib/cluster.js +158 -0
- package/lib/color-correction.d.ts +39 -0
- package/lib/color-correction.js +29 -0
- package/lib/destinations.d.ts +242 -0
- package/lib/destinations.js +455 -0
- package/lib/encode-configuration.d.ts +615 -0
- package/lib/encode-configuration.js +629 -0
- package/lib/enums.d.ts +698 -0
- package/lib/enums.js +1045 -0
- package/lib/file-location.d.ts +65 -0
- package/lib/file-location.js +150 -0
- package/lib/framerate.d.ts +31 -0
- package/lib/framerate.js +71 -0
- package/lib/index.d.ts +26 -0
- package/lib/index.js +43 -0
- package/lib/input-attachment.d.ts +319 -0
- package/lib/input-attachment.js +228 -0
- package/lib/input-security-group.d.ts +51 -0
- package/lib/input-security-group.js +123 -0
- package/lib/input-specification.d.ts +111 -0
- package/lib/input-specification.js +181 -0
- package/lib/input.d.ts +505 -0
- package/lib/input.js +803 -0
- package/lib/m2ts-settings.d.ts +421 -0
- package/lib/m2ts-settings.js +469 -0
- package/lib/m3u8-settings.d.ts +272 -0
- package/lib/m3u8-settings.js +304 -0
- package/lib/medialive-grants.generated.d.ts +30 -0
- package/lib/medialive-grants.generated.js +92 -0
- package/lib/network.d.ts +83 -0
- package/lib/network.js +132 -0
- package/lib/output-group.d.ts +924 -0
- package/lib/output-group.js +941 -0
- package/lib/outputs.d.ts +304 -0
- package/lib/outputs.js +598 -0
- package/lib/sdi-source.d.ts +124 -0
- package/lib/sdi-source.js +180 -0
- package/lib/shared.d.ts +44 -0
- package/lib/shared.js +146 -0
- package/lib/video-codec-settings.d.ts +1500 -0
- package/lib/video-codec-settings.js +1722 -0
- package/lib/video-selection.d.ts +92 -0
- package/lib/video-selection.js +95 -0
- package/package.json +135 -0
- package/rosetta/_generated.ts-fixture +6 -0
- package/rosetta/default.ts-fixture +21 -0
|
@@ -0,0 +1,629 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CaptionDashRole = exports.CaptionAccessibility = exports.AudioDashRole = exports.DvbDashAccessibility = exports.AudioType = exports.AudioLanguageCodeControl = exports.AudioTypeControl = exports.NielsenDistributionType = exports.NielsenWatermarkTimezone = exports.NielsenCbetStepaside = exports.AudioNormalizationPeakCalculation = exports.AudioNormalizationAlgorithmControl = exports.AudioNormalizationAlgorithm = exports.ScalingBehavior = exports.RespondToAfd = exports.EncodeConfiguration = void 0;
|
|
4
|
+
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
7
|
+
const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
8
|
+
/**
|
|
9
|
+
* Base interface for an encode configuration (video, audio, or caption).
|
|
10
|
+
*
|
|
11
|
+
* The same EncodeConfiguration instance can be shared across multiple output groups within a channel.
|
|
12
|
+
* The channel automatically deduplicates encode descriptions by name at synth time.
|
|
13
|
+
*/
|
|
14
|
+
class EncodeConfiguration {
|
|
15
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.EncodeConfiguration", version: "2.268.0-alpha.0" };
|
|
16
|
+
/**
|
|
17
|
+
* Create a video encode configuration.
|
|
18
|
+
*/
|
|
19
|
+
static video(props) {
|
|
20
|
+
try {
|
|
21
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_VideoEncodeProps(props);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
25
|
+
Error.captureStackTrace(error, this.video);
|
|
26
|
+
}
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
return new VideoEncodeConfiguration(props);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create an audio encode configuration.
|
|
33
|
+
*/
|
|
34
|
+
static audio(props) {
|
|
35
|
+
try {
|
|
36
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_AudioEncodeProps(props);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
40
|
+
Error.captureStackTrace(error, this.audio);
|
|
41
|
+
}
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
return new AudioEncodeConfiguration(props);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Create a caption encode configuration.
|
|
48
|
+
*/
|
|
49
|
+
static caption(props) {
|
|
50
|
+
try {
|
|
51
|
+
jsiiDeprecationWarnings._aws_cdk_aws_medialive_alpha_CaptionEncodeProps(props);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
55
|
+
Error.captureStackTrace(error, this.caption);
|
|
56
|
+
}
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
return new CaptionEncodeConfiguration(props);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Grant the channel role read access to any external files this encode references (e.g. a
|
|
63
|
+
* burn-in caption font in S3). Default is a no-op; caption encodes override it.
|
|
64
|
+
* @internal
|
|
65
|
+
*/
|
|
66
|
+
_grantRead(_role) { }
|
|
67
|
+
/**
|
|
68
|
+
* Whether this is an in-band caption encode (burn-in, embedded) that does not produce a
|
|
69
|
+
* separate track. Returns false for non-caption encodes and out-of-band caption types.
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
_isInBandCaption() {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Whether this is an embedded-family caption encode. Only one per output is allowed.
|
|
77
|
+
* @internal
|
|
78
|
+
*/
|
|
79
|
+
_isEmbeddedCaption() {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
exports.EncodeConfiguration = EncodeConfiguration;
|
|
84
|
+
/**
|
|
85
|
+
* How to respond to AFD values in the input stream.
|
|
86
|
+
*/
|
|
87
|
+
class RespondToAfd {
|
|
88
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.RespondToAfd", version: "2.268.0-alpha.0" };
|
|
89
|
+
/** Clip input video based on AFD values */
|
|
90
|
+
static RESPOND = new RespondToAfd('RESPOND');
|
|
91
|
+
/** Pass AFD values through without clipping */
|
|
92
|
+
static PASSTHROUGH = new RespondToAfd('PASSTHROUGH');
|
|
93
|
+
/** Ignore AFD values */
|
|
94
|
+
static NONE = new RespondToAfd('NONE');
|
|
95
|
+
/** A value not yet modelled by AWS CDK. */
|
|
96
|
+
static of(value) {
|
|
97
|
+
return new RespondToAfd(value);
|
|
98
|
+
}
|
|
99
|
+
/** The underlying string value passed to CloudFormation. */
|
|
100
|
+
value;
|
|
101
|
+
constructor(value) {
|
|
102
|
+
this.value = value;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.RespondToAfd = RespondToAfd;
|
|
106
|
+
/**
|
|
107
|
+
* Video scaling behavior.
|
|
108
|
+
*/
|
|
109
|
+
class ScalingBehavior {
|
|
110
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.ScalingBehavior", version: "2.268.0-alpha.0" };
|
|
111
|
+
/** May insert black boxes to match output resolution */
|
|
112
|
+
static DEFAULT = new ScalingBehavior('DEFAULT');
|
|
113
|
+
/** Stretch video to fill the output resolution */
|
|
114
|
+
static STRETCH_TO_OUTPUT = new ScalingBehavior('STRETCH_TO_OUTPUT');
|
|
115
|
+
/** Intelligently crop the video to focus on key subjects (9:16 vertical). Requires an Elemental Inference feed on the channel via `inferenceFeed`. Do NOT include `FeedOutput.cropping()` on the feed — MediaLive auto-inserts it. */
|
|
116
|
+
static SMART_CROP = new ScalingBehavior('SMART_CROP');
|
|
117
|
+
/** A value not yet modelled by AWS CDK. */
|
|
118
|
+
static of(value) {
|
|
119
|
+
return new ScalingBehavior(value);
|
|
120
|
+
}
|
|
121
|
+
/** The underlying string value passed to CloudFormation. */
|
|
122
|
+
value;
|
|
123
|
+
constructor(value) {
|
|
124
|
+
this.value = value;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.ScalingBehavior = ScalingBehavior;
|
|
128
|
+
/**
|
|
129
|
+
* Audio normalization algorithm.
|
|
130
|
+
*/
|
|
131
|
+
class AudioNormalizationAlgorithm {
|
|
132
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioNormalizationAlgorithm", version: "2.268.0-alpha.0" };
|
|
133
|
+
/** CALM Act specification (ITU-R BS.1770-1) */
|
|
134
|
+
static ITU_1770_1 = new AudioNormalizationAlgorithm('ITU_1770_1');
|
|
135
|
+
/** EBU R-128 specification (ITU-R BS.1770-2) */
|
|
136
|
+
static ITU_1770_2 = new AudioNormalizationAlgorithm('ITU_1770_2');
|
|
137
|
+
/** A value not yet modelled by AWS CDK. */
|
|
138
|
+
static of(value) {
|
|
139
|
+
return new AudioNormalizationAlgorithm(value);
|
|
140
|
+
}
|
|
141
|
+
/** The underlying string value passed to CloudFormation. */
|
|
142
|
+
value;
|
|
143
|
+
constructor(value) {
|
|
144
|
+
this.value = value;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.AudioNormalizationAlgorithm = AudioNormalizationAlgorithm;
|
|
148
|
+
/**
|
|
149
|
+
* Audio normalization algorithm control.
|
|
150
|
+
*/
|
|
151
|
+
class AudioNormalizationAlgorithmControl {
|
|
152
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioNormalizationAlgorithmControl", version: "2.268.0-alpha.0" };
|
|
153
|
+
/** Correct the audio using the chosen algorithm */
|
|
154
|
+
static CORRECT_AUDIO = new AudioNormalizationAlgorithmControl('CORRECT_AUDIO');
|
|
155
|
+
/** Measure audio but do not adjust */
|
|
156
|
+
static MEASURE_ONLY = new AudioNormalizationAlgorithmControl('MEASURE_ONLY');
|
|
157
|
+
/** A value not yet modelled by AWS CDK. */
|
|
158
|
+
static of(value) {
|
|
159
|
+
return new AudioNormalizationAlgorithmControl(value);
|
|
160
|
+
}
|
|
161
|
+
/** The underlying string value passed to CloudFormation. */
|
|
162
|
+
value;
|
|
163
|
+
constructor(value) {
|
|
164
|
+
this.value = value;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.AudioNormalizationAlgorithmControl = AudioNormalizationAlgorithmControl;
|
|
168
|
+
/**
|
|
169
|
+
* Peak calculation method for audio normalization.
|
|
170
|
+
*/
|
|
171
|
+
class AudioNormalizationPeakCalculation {
|
|
172
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioNormalizationPeakCalculation", version: "2.268.0-alpha.0" };
|
|
173
|
+
/** Calculate and log the TruePeak for each audio track. */
|
|
174
|
+
static TRUE_PEAK = new AudioNormalizationPeakCalculation('TRUE_PEAK');
|
|
175
|
+
/** A value not yet modelled by AWS CDK. */
|
|
176
|
+
static of(value) {
|
|
177
|
+
return new AudioNormalizationPeakCalculation(value);
|
|
178
|
+
}
|
|
179
|
+
/** The underlying string value passed to CloudFormation. */
|
|
180
|
+
value;
|
|
181
|
+
constructor(value) {
|
|
182
|
+
this.value = value;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
exports.AudioNormalizationPeakCalculation = AudioNormalizationPeakCalculation;
|
|
186
|
+
/**
|
|
187
|
+
* CBET insertion behavior when prior encoding is detected on the same layer.
|
|
188
|
+
*/
|
|
189
|
+
class NielsenCbetStepaside {
|
|
190
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.NielsenCbetStepaside", version: "2.268.0-alpha.0" };
|
|
191
|
+
/**
|
|
192
|
+
* Existing Nielsen watermarks are removed. New watermarks are inserted throughout the audio.
|
|
193
|
+
*/
|
|
194
|
+
static DISABLED = new NielsenCbetStepaside('DISABLED');
|
|
195
|
+
/**
|
|
196
|
+
* Existing Nielsen watermarks are left intact. New watermarks are inserted only in portions
|
|
197
|
+
* of the audio where there are no existing watermarks.
|
|
198
|
+
*/
|
|
199
|
+
static ENABLED = new NielsenCbetStepaside('ENABLED');
|
|
200
|
+
/** A value not yet modelled by AWS CDK. */
|
|
201
|
+
static of(value) {
|
|
202
|
+
return new NielsenCbetStepaside(value);
|
|
203
|
+
}
|
|
204
|
+
/** The underlying string value passed to CloudFormation. */
|
|
205
|
+
value;
|
|
206
|
+
constructor(value) {
|
|
207
|
+
this.value = value;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
exports.NielsenCbetStepaside = NielsenCbetStepaside;
|
|
211
|
+
/**
|
|
212
|
+
* Timezone applied to the timestamps in a Nielsen NAES II/NW watermark.
|
|
213
|
+
*/
|
|
214
|
+
class NielsenWatermarkTimezone {
|
|
215
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.NielsenWatermarkTimezone", version: "2.268.0-alpha.0" };
|
|
216
|
+
/** America/Puerto Rico */
|
|
217
|
+
static AMERICA_PUERTO_RICO = new NielsenWatermarkTimezone('AMERICA_PUERTO_RICO');
|
|
218
|
+
/** US Alaska */
|
|
219
|
+
static US_ALASKA = new NielsenWatermarkTimezone('US_ALASKA');
|
|
220
|
+
/** US Arizona */
|
|
221
|
+
static US_ARIZONA = new NielsenWatermarkTimezone('US_ARIZONA');
|
|
222
|
+
/** US Central */
|
|
223
|
+
static US_CENTRAL = new NielsenWatermarkTimezone('US_CENTRAL');
|
|
224
|
+
/** US Eastern */
|
|
225
|
+
static US_EASTERN = new NielsenWatermarkTimezone('US_EASTERN');
|
|
226
|
+
/** US Hawaii */
|
|
227
|
+
static US_HAWAII = new NielsenWatermarkTimezone('US_HAWAII');
|
|
228
|
+
/** US Mountain */
|
|
229
|
+
static US_MOUNTAIN = new NielsenWatermarkTimezone('US_MOUNTAIN');
|
|
230
|
+
/** US Pacific */
|
|
231
|
+
static US_PACIFIC = new NielsenWatermarkTimezone('US_PACIFIC');
|
|
232
|
+
/** US Samoa */
|
|
233
|
+
static US_SAMOA = new NielsenWatermarkTimezone('US_SAMOA');
|
|
234
|
+
/** Coordinated Universal Time */
|
|
235
|
+
static UTC = new NielsenWatermarkTimezone('UTC');
|
|
236
|
+
/** A value not yet modelled by AWS CDK. */
|
|
237
|
+
static of(value) {
|
|
238
|
+
return new NielsenWatermarkTimezone(value);
|
|
239
|
+
}
|
|
240
|
+
/** The underlying string value passed to CloudFormation. */
|
|
241
|
+
value;
|
|
242
|
+
constructor(value) {
|
|
243
|
+
this.value = value;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
exports.NielsenWatermarkTimezone = NielsenWatermarkTimezone;
|
|
247
|
+
/**
|
|
248
|
+
* Nielsen watermark distribution type.
|
|
249
|
+
*/
|
|
250
|
+
class NielsenDistributionType {
|
|
251
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.NielsenDistributionType", version: "2.268.0-alpha.0" };
|
|
252
|
+
/** Program content */
|
|
253
|
+
static PROGRAM_CONTENT = new NielsenDistributionType('PROGRAM_CONTENT');
|
|
254
|
+
/** Final distributor */
|
|
255
|
+
static FINAL_DISTRIBUTOR = new NielsenDistributionType('FINAL_DISTRIBUTOR');
|
|
256
|
+
/** A value not yet modelled by AWS CDK. */
|
|
257
|
+
static of(value) {
|
|
258
|
+
return new NielsenDistributionType(value);
|
|
259
|
+
}
|
|
260
|
+
/** The underlying string value passed to CloudFormation. */
|
|
261
|
+
value;
|
|
262
|
+
constructor(value) {
|
|
263
|
+
this.value = value;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
exports.NielsenDistributionType = NielsenDistributionType;
|
|
267
|
+
/**
|
|
268
|
+
* Determines how the audio type is signaled in the output.
|
|
269
|
+
*/
|
|
270
|
+
class AudioTypeControl {
|
|
271
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioTypeControl", version: "2.268.0-alpha.0" };
|
|
272
|
+
/**
|
|
273
|
+
* If the input contains an ISO 639 audioType it is passed through; otherwise the
|
|
274
|
+
* configured `audioType` is used.
|
|
275
|
+
*/
|
|
276
|
+
static FOLLOW_INPUT = new AudioTypeControl('FOLLOW_INPUT');
|
|
277
|
+
/** The configured `audioType` is always used. */
|
|
278
|
+
static USE_CONFIGURED = new AudioTypeControl('USE_CONFIGURED');
|
|
279
|
+
/** A value not yet modelled by AWS CDK. */
|
|
280
|
+
static of(value) {
|
|
281
|
+
return new AudioTypeControl(value);
|
|
282
|
+
}
|
|
283
|
+
/** The underlying string value passed to CloudFormation. */
|
|
284
|
+
value;
|
|
285
|
+
constructor(value) {
|
|
286
|
+
this.value = value;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
exports.AudioTypeControl = AudioTypeControl;
|
|
290
|
+
/**
|
|
291
|
+
* Determines how the audio language code is signaled in the output.
|
|
292
|
+
*/
|
|
293
|
+
class AudioLanguageCodeControl {
|
|
294
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioLanguageCodeControl", version: "2.268.0-alpha.0" };
|
|
295
|
+
/**
|
|
296
|
+
* If the input contains a language code it is passed through; otherwise the configured
|
|
297
|
+
* `languageCode` is used as a fallback.
|
|
298
|
+
*/
|
|
299
|
+
static FOLLOW_INPUT = new AudioLanguageCodeControl('FOLLOW_INPUT');
|
|
300
|
+
/** The configured `languageCode` is always used. */
|
|
301
|
+
static USE_CONFIGURED = new AudioLanguageCodeControl('USE_CONFIGURED');
|
|
302
|
+
/** A value not yet modelled by AWS CDK. */
|
|
303
|
+
static of(value) {
|
|
304
|
+
return new AudioLanguageCodeControl(value);
|
|
305
|
+
}
|
|
306
|
+
/** The underlying string value passed to CloudFormation. */
|
|
307
|
+
value;
|
|
308
|
+
constructor(value) {
|
|
309
|
+
this.value = value;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
exports.AudioLanguageCodeControl = AudioLanguageCodeControl;
|
|
313
|
+
/**
|
|
314
|
+
* The audio type, as defined in ISO/IEC 13818-1.
|
|
315
|
+
*/
|
|
316
|
+
class AudioType {
|
|
317
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioType", version: "2.268.0-alpha.0" };
|
|
318
|
+
/** Clean effects (no dialogue). */
|
|
319
|
+
static CLEAN_EFFECTS = new AudioType('CLEAN_EFFECTS');
|
|
320
|
+
/** Hearing impaired. */
|
|
321
|
+
static HEARING_IMPAIRED = new AudioType('HEARING_IMPAIRED');
|
|
322
|
+
/** Undefined. */
|
|
323
|
+
static UNDEFINED = new AudioType('UNDEFINED');
|
|
324
|
+
/** Visual impaired commentary. */
|
|
325
|
+
static VISUAL_IMPAIRED_COMMENTARY = new AudioType('VISUAL_IMPAIRED_COMMENTARY');
|
|
326
|
+
/** A value not yet modelled by AWS CDK. */
|
|
327
|
+
static of(value) {
|
|
328
|
+
return new AudioType(value);
|
|
329
|
+
}
|
|
330
|
+
/** The underlying string value passed to CloudFormation. */
|
|
331
|
+
value;
|
|
332
|
+
constructor(value) {
|
|
333
|
+
this.value = value;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
exports.AudioType = AudioType;
|
|
337
|
+
/**
|
|
338
|
+
* DVB DASH accessibility signaling for an audio output.
|
|
339
|
+
*/
|
|
340
|
+
class DvbDashAccessibility {
|
|
341
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.DvbDashAccessibility", version: "2.268.0-alpha.0" };
|
|
342
|
+
/** Visually impaired. */
|
|
343
|
+
static VISUALLY_IMPAIRED = new DvbDashAccessibility('DVBDASH_1_VISUALLY_IMPAIRED');
|
|
344
|
+
/** Hard of hearing. */
|
|
345
|
+
static HARD_OF_HEARING = new DvbDashAccessibility('DVBDASH_2_HARD_OF_HEARING');
|
|
346
|
+
/** Supplemental commentary. */
|
|
347
|
+
static SUPPLEMENTAL_COMMENTARY = new DvbDashAccessibility('DVBDASH_3_SUPPLEMENTAL_COMMENTARY');
|
|
348
|
+
/** Director's commentary. */
|
|
349
|
+
static DIRECTORS_COMMENTARY = new DvbDashAccessibility('DVBDASH_4_DIRECTORS_COMMENTARY');
|
|
350
|
+
/** Educational notes. */
|
|
351
|
+
static EDUCATIONAL_NOTES = new DvbDashAccessibility('DVBDASH_5_EDUCATIONAL_NOTES');
|
|
352
|
+
/** Main program. */
|
|
353
|
+
static MAIN_PROGRAM = new DvbDashAccessibility('DVBDASH_6_MAIN_PROGRAM');
|
|
354
|
+
/** Clean feed. */
|
|
355
|
+
static CLEAN_FEED = new DvbDashAccessibility('DVBDASH_7_CLEAN_FEED');
|
|
356
|
+
/** A value not yet modelled by AWS CDK. */
|
|
357
|
+
static of(value) {
|
|
358
|
+
return new DvbDashAccessibility(value);
|
|
359
|
+
}
|
|
360
|
+
/** The underlying string value passed to CloudFormation. */
|
|
361
|
+
value;
|
|
362
|
+
constructor(value) {
|
|
363
|
+
this.value = value;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
exports.DvbDashAccessibility = DvbDashAccessibility;
|
|
367
|
+
/**
|
|
368
|
+
* A DASH role to assign to an audio output (used when the output carries DVB DASH accessibility
|
|
369
|
+
* signaling).
|
|
370
|
+
*/
|
|
371
|
+
class AudioDashRole {
|
|
372
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.AudioDashRole", version: "2.268.0-alpha.0" };
|
|
373
|
+
/** Alternate. */
|
|
374
|
+
static ALTERNATE = new AudioDashRole('ALTERNATE');
|
|
375
|
+
/** Commentary. */
|
|
376
|
+
static COMMENTARY = new AudioDashRole('COMMENTARY');
|
|
377
|
+
/** Description. */
|
|
378
|
+
static DESCRIPTION = new AudioDashRole('DESCRIPTION');
|
|
379
|
+
/** Dub. */
|
|
380
|
+
static DUB = new AudioDashRole('DUB');
|
|
381
|
+
/** Emergency. */
|
|
382
|
+
static EMERGENCY = new AudioDashRole('EMERGENCY');
|
|
383
|
+
/** Enhanced audio intelligibility. */
|
|
384
|
+
static ENHANCED_AUDIO_INTELLIGIBILITY = new AudioDashRole('ENHANCED-AUDIO-INTELLIGIBILITY');
|
|
385
|
+
/** Karaoke. */
|
|
386
|
+
static KARAOKE = new AudioDashRole('KARAOKE');
|
|
387
|
+
/** Main. */
|
|
388
|
+
static MAIN = new AudioDashRole('MAIN');
|
|
389
|
+
/** Supplementary. */
|
|
390
|
+
static SUPPLEMENTARY = new AudioDashRole('SUPPLEMENTARY');
|
|
391
|
+
/** A value not yet modelled by AWS CDK. */
|
|
392
|
+
static of(value) {
|
|
393
|
+
return new AudioDashRole(value);
|
|
394
|
+
}
|
|
395
|
+
/** The underlying string value passed to CloudFormation. */
|
|
396
|
+
value;
|
|
397
|
+
constructor(value) {
|
|
398
|
+
this.value = value;
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
exports.AudioDashRole = AudioDashRole;
|
|
402
|
+
/** @internal */
|
|
403
|
+
class VideoEncodeConfiguration extends EncodeConfiguration {
|
|
404
|
+
name;
|
|
405
|
+
props;
|
|
406
|
+
constructor(props) {
|
|
407
|
+
super();
|
|
408
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(props.width) && props.width % 2 !== 0) {
|
|
409
|
+
throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `VideoWidthEven`, `Video width must be an even number, got ${props.width}.`);
|
|
410
|
+
}
|
|
411
|
+
if (!aws_cdk_lib_1.Token.isUnresolved(props.height) && props.height % 2 !== 0) {
|
|
412
|
+
throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `VideoHeightEven`, `Video height must be an even number, got ${props.height}.`);
|
|
413
|
+
}
|
|
414
|
+
this.name = props.name;
|
|
415
|
+
this.props = props;
|
|
416
|
+
}
|
|
417
|
+
_hasExplicitFramerate() {
|
|
418
|
+
return this.props.codec._hasExplicitFramerate();
|
|
419
|
+
}
|
|
420
|
+
_bindVideo() {
|
|
421
|
+
return {
|
|
422
|
+
name: this.name,
|
|
423
|
+
width: this.props.width,
|
|
424
|
+
height: this.props.height,
|
|
425
|
+
respondToAfd: (this.props.respondToAfd ?? RespondToAfd.NONE).value,
|
|
426
|
+
scalingBehavior: (this.props.scalingBehavior ?? ScalingBehavior.DEFAULT).value,
|
|
427
|
+
sharpness: this.props.sharpness ?? 50,
|
|
428
|
+
codecSettings: this.props.codec._bind(),
|
|
429
|
+
};
|
|
430
|
+
}
|
|
431
|
+
_bindAudio() {
|
|
432
|
+
return undefined;
|
|
433
|
+
}
|
|
434
|
+
_bindCaption() {
|
|
435
|
+
return undefined;
|
|
436
|
+
}
|
|
437
|
+
_videoCodecType() {
|
|
438
|
+
return this.props.codec._codecType;
|
|
439
|
+
}
|
|
440
|
+
_audioCodecType() {
|
|
441
|
+
return undefined;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
/** @internal */
|
|
445
|
+
class AudioEncodeConfiguration extends EncodeConfiguration {
|
|
446
|
+
name;
|
|
447
|
+
props;
|
|
448
|
+
constructor(props) {
|
|
449
|
+
super();
|
|
450
|
+
this.name = props.name;
|
|
451
|
+
this.props = props;
|
|
452
|
+
}
|
|
453
|
+
_hasExplicitFramerate() {
|
|
454
|
+
return true; // Not applicable for audio
|
|
455
|
+
}
|
|
456
|
+
_bindVideo() {
|
|
457
|
+
return undefined;
|
|
458
|
+
}
|
|
459
|
+
_bindAudio() {
|
|
460
|
+
const codecSettings = this.props.codec;
|
|
461
|
+
return {
|
|
462
|
+
name: this.name,
|
|
463
|
+
audioSelectorName: this.props.audioSelectorName,
|
|
464
|
+
audioTypeControl: this.props.audioTypeControl?.value
|
|
465
|
+
?? (this.props.audioType !== undefined ? AudioTypeControl.USE_CONFIGURED : AudioTypeControl.FOLLOW_INPUT).value,
|
|
466
|
+
languageCode: this.props.languageCode,
|
|
467
|
+
languageCodeControl: this.props.languageCodeControl?.value
|
|
468
|
+
?? (this.props.languageCode !== undefined ? AudioLanguageCodeControl.USE_CONFIGURED : AudioLanguageCodeControl.FOLLOW_INPUT).value,
|
|
469
|
+
streamName: this.props.streamName,
|
|
470
|
+
audioType: this.props.audioType?.value,
|
|
471
|
+
audioDashRoles: this.props.audioDashRoles?.map(r => r.value),
|
|
472
|
+
dvbDashAccessibility: this.props.dvbDashAccessibility?.value,
|
|
473
|
+
codecSettings: codecSettings._bind(),
|
|
474
|
+
audioNormalizationSettings: this.props.audioNormalization ? {
|
|
475
|
+
algorithm: this.props.audioNormalization.algorithm?.value,
|
|
476
|
+
algorithmControl: this.props.audioNormalization.algorithmControl?.value,
|
|
477
|
+
targetLkfs: this.props.audioNormalization.targetLkfs,
|
|
478
|
+
peakCalculation: this.props.audioNormalization.peakCalculation?.value,
|
|
479
|
+
peakLimiterThreshold: this.props.audioNormalization.peakLimiterThreshold,
|
|
480
|
+
} : undefined,
|
|
481
|
+
remixSettings: this.props.remixSettings ? {
|
|
482
|
+
channelMappings: this.props.remixSettings.channelMappings.map(m => ({
|
|
483
|
+
outputChannel: m.outputChannel,
|
|
484
|
+
inputChannelLevels: m.inputChannelLevels.map(l => ({
|
|
485
|
+
inputChannel: l.inputChannel,
|
|
486
|
+
gain: l.gain ?? 0,
|
|
487
|
+
})),
|
|
488
|
+
})),
|
|
489
|
+
channelsIn: this.props.remixSettings.channelsIn,
|
|
490
|
+
channelsOut: this.props.remixSettings.channelsOut,
|
|
491
|
+
} : undefined,
|
|
492
|
+
audioWatermarkingSettings: this.props.audioWatermarkSettings ? {
|
|
493
|
+
nielsenWatermarksSettings: this.props.audioWatermarkSettings.nielsenWatermarks ? {
|
|
494
|
+
nielsenDistributionType: this.props.audioWatermarkSettings.nielsenWatermarks.distributionType?.value,
|
|
495
|
+
nielsenCbetSettings: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings ? {
|
|
496
|
+
cbetCheckDigitString: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings.cbetCheckDigitString,
|
|
497
|
+
cbetStepaside: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings.cbetStepaside?.value,
|
|
498
|
+
csid: this.props.audioWatermarkSettings.nielsenWatermarks.cbetSettings.csid,
|
|
499
|
+
} : undefined,
|
|
500
|
+
nielsenNaesIiNwSettings: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings ? {
|
|
501
|
+
checkDigitString: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings.checkDigitString,
|
|
502
|
+
sid: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings.sid,
|
|
503
|
+
timezone: this.props.audioWatermarkSettings.nielsenWatermarks.naesIiNwSettings.timezone?.value,
|
|
504
|
+
} : undefined,
|
|
505
|
+
} : undefined,
|
|
506
|
+
} : undefined,
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
_bindCaption() {
|
|
510
|
+
return undefined;
|
|
511
|
+
}
|
|
512
|
+
_videoCodecType() {
|
|
513
|
+
return undefined;
|
|
514
|
+
}
|
|
515
|
+
_audioCodecType() {
|
|
516
|
+
return this.props.codec._codecType;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Whether a caption track implements accessibility features (written descriptions of dialog,
|
|
521
|
+
* music, and sounds). Signaled in HLS and MediaPackage output groups.
|
|
522
|
+
*/
|
|
523
|
+
class CaptionAccessibility {
|
|
524
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.CaptionAccessibility", version: "2.268.0-alpha.0" };
|
|
525
|
+
/** The captions do not implement accessibility features. */
|
|
526
|
+
static DOES_NOT_IMPLEMENT_ACCESSIBILITY_FEATURES = new CaptionAccessibility('DOES_NOT_IMPLEMENT_ACCESSIBILITY_FEATURES');
|
|
527
|
+
/** The captions implement accessibility features. */
|
|
528
|
+
static IMPLEMENTS_ACCESSIBILITY_FEATURES = new CaptionAccessibility('IMPLEMENTS_ACCESSIBILITY_FEATURES');
|
|
529
|
+
/** A value not yet modelled by AWS CDK. */
|
|
530
|
+
static of(value) {
|
|
531
|
+
return new CaptionAccessibility(value);
|
|
532
|
+
}
|
|
533
|
+
/** The underlying string value passed to CloudFormation. */
|
|
534
|
+
value;
|
|
535
|
+
constructor(value) {
|
|
536
|
+
this.value = value;
|
|
537
|
+
}
|
|
538
|
+
}
|
|
539
|
+
exports.CaptionAccessibility = CaptionAccessibility;
|
|
540
|
+
/**
|
|
541
|
+
* A DASH role to assign to a captions output (used when the output carries DVB DASH accessibility
|
|
542
|
+
* signaling).
|
|
543
|
+
*/
|
|
544
|
+
class CaptionDashRole {
|
|
545
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-medialive-alpha.CaptionDashRole", version: "2.268.0-alpha.0" };
|
|
546
|
+
/** Alternate. */
|
|
547
|
+
static ALTERNATE = new CaptionDashRole('ALTERNATE');
|
|
548
|
+
/** Caption. */
|
|
549
|
+
static CAPTION = new CaptionDashRole('CAPTION');
|
|
550
|
+
/** Commentary. */
|
|
551
|
+
static COMMENTARY = new CaptionDashRole('COMMENTARY');
|
|
552
|
+
/** Description. */
|
|
553
|
+
static DESCRIPTION = new CaptionDashRole('DESCRIPTION');
|
|
554
|
+
/** Dub. */
|
|
555
|
+
static DUB = new CaptionDashRole('DUB');
|
|
556
|
+
/** Easy reader. */
|
|
557
|
+
static EASYREADER = new CaptionDashRole('EASYREADER');
|
|
558
|
+
/** Emergency. */
|
|
559
|
+
static EMERGENCY = new CaptionDashRole('EMERGENCY');
|
|
560
|
+
/** Forced subtitle. */
|
|
561
|
+
static FORCED_SUBTITLE = new CaptionDashRole('FORCED-SUBTITLE');
|
|
562
|
+
/** Karaoke. */
|
|
563
|
+
static KARAOKE = new CaptionDashRole('KARAOKE');
|
|
564
|
+
/** Main. */
|
|
565
|
+
static MAIN = new CaptionDashRole('MAIN');
|
|
566
|
+
/** Metadata. */
|
|
567
|
+
static METADATA = new CaptionDashRole('METADATA');
|
|
568
|
+
/** Subtitle. */
|
|
569
|
+
static SUBTITLE = new CaptionDashRole('SUBTITLE');
|
|
570
|
+
/** Supplementary. */
|
|
571
|
+
static SUPPLEMENTARY = new CaptionDashRole('SUPPLEMENTARY');
|
|
572
|
+
/** A value not yet modelled by AWS CDK. */
|
|
573
|
+
static of(value) {
|
|
574
|
+
return new CaptionDashRole(value);
|
|
575
|
+
}
|
|
576
|
+
/** The underlying string value passed to CloudFormation. */
|
|
577
|
+
value;
|
|
578
|
+
constructor(value) {
|
|
579
|
+
this.value = value;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
exports.CaptionDashRole = CaptionDashRole;
|
|
583
|
+
/** @internal */
|
|
584
|
+
class CaptionEncodeConfiguration extends EncodeConfiguration {
|
|
585
|
+
name;
|
|
586
|
+
props;
|
|
587
|
+
constructor(props) {
|
|
588
|
+
super();
|
|
589
|
+
this.name = props.name;
|
|
590
|
+
this.props = props;
|
|
591
|
+
}
|
|
592
|
+
_hasExplicitFramerate() {
|
|
593
|
+
return true; // Not applicable for captions
|
|
594
|
+
}
|
|
595
|
+
_bindVideo() {
|
|
596
|
+
return undefined;
|
|
597
|
+
}
|
|
598
|
+
_bindAudio() {
|
|
599
|
+
return undefined;
|
|
600
|
+
}
|
|
601
|
+
_bindCaption() {
|
|
602
|
+
return {
|
|
603
|
+
name: this.name,
|
|
604
|
+
captionSelectorName: this.props.captionSelectorName,
|
|
605
|
+
destinationSettings: this.props.destination._bind(),
|
|
606
|
+
languageCode: this.props.languageCode,
|
|
607
|
+
languageDescription: this.props.languageDescription,
|
|
608
|
+
accessibility: (this.props.accessibility ?? CaptionAccessibility.DOES_NOT_IMPLEMENT_ACCESSIBILITY_FEATURES).value,
|
|
609
|
+
captionDashRoles: this.props.captionDashRoles?.map(r => r.value),
|
|
610
|
+
dvbDashAccessibility: this.props.dvbDashAccessibility?.value,
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
_videoCodecType() {
|
|
614
|
+
return undefined;
|
|
615
|
+
}
|
|
616
|
+
_audioCodecType() {
|
|
617
|
+
return undefined;
|
|
618
|
+
}
|
|
619
|
+
_grantRead(role) {
|
|
620
|
+
this.props.destination._grantRead(role);
|
|
621
|
+
}
|
|
622
|
+
_isInBandCaption() {
|
|
623
|
+
return this.props.destination._isInBand();
|
|
624
|
+
}
|
|
625
|
+
_isEmbeddedCaption() {
|
|
626
|
+
return this.props.destination._isEmbedded();
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5jb2RlLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJlbmNvZGUtY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUE2RDtBQUc3RCw0RUFBNEQ7QUFLNUQ7Ozs7O0dBS0c7QUFDSCxNQUFzQixtQkFBbUI7O0lBQ3ZDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUF1Qjs7Ozs7Ozs7OztRQUN6QyxPQUFPLElBQUksd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDNUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBdUI7Ozs7Ozs7Ozs7UUFDekMsT0FBTyxJQUFJLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzVDO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQXlCOzs7Ozs7Ozs7O1FBQzdDLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM5QztJQXVCRDs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLEtBQWUsS0FBVTtJQUUzQzs7OztPQUlHO0lBQ0ksZ0JBQWdCO1FBQ3JCLE9BQU8sS0FBSyxDQUFDO0tBQ2Q7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0I7UUFDdkIsT0FBTyxLQUFLLENBQUM7S0FDZDs7QUFqRUgsa0RBa0VDO0FBRUQ7O0dBRUc7QUFDSCxNQUFhLFlBQVk7O0lBQ3ZCLDJDQUEyQztJQUNwQyxNQUFNLENBQVUsT0FBTyxHQUFHLElBQUksWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdELCtDQUErQztJQUN4QyxNQUFNLENBQVUsV0FBVyxHQUFHLElBQUksWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JFLHdCQUF3QjtJQUNqQixNQUFNLENBQVUsSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRXZELDJDQUEyQztJQUNwQyxNQUFN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SSxvQkFBb0IsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDLEtBQUs7WUFDakgsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQ2hFLG9CQUFvQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsb0JBQW9CLEVBQUUsS0FBSztTQUM3RCxDQUFDO0tBQ0g7SUFFTSxlQUFlO1FBQ3BCLE9BQU8sU0FBUyxDQUFDO0tBQ2xCO0lBRU0sZUFBZTtRQUNwQixPQUFPLFNBQVMsQ0FBQztLQUNsQjtJQUVlLFVBQVUsQ0FBQyxJQUFXO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUN6QztJQUVlLGdCQUFnQjtRQUM5QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO0tBQzNDO0lBRWUsa0JBQWtCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDN0M7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRva2VuLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB0eXBlIHsgSVJvbGUsIElSb2xlUmVmIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgdHlwZSB7IENmbkNoYW5uZWwgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbWVkaWFsaXZlJztcbmltcG9ydCB7IGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHR5cGUgeyBBdWRpb0NvZGVjU2V0dGluZ3MsIEF1ZGlvQ29kZWNUeXBlIH0gZnJvbSAnLi9hdWRpby1jb2RlYy1zZXR0aW5ncyc7XG5pbXBvcnQgdHlwZSB7IENhcHRpb25EZXN0aW5hdGlvbiB9IGZyb20gJy4vY2FwdGlvbi1zZXR0aW5ncyc7XG5pbXBvcnQgdHlwZSB7IFZpZGVvQ29kZWNTZXR0aW5ncywgVmlkZW9Db2RlY1R5cGUgfSBmcm9tICcuL3ZpZGVvLWNvZGVjLXNldHRpbmdzJztcblxuLyoqXG4gKiBCYXNlIGludGVyZmFjZSBmb3IgYW4gZW5jb2RlIGNvbmZpZ3VyYXRpb24gKHZpZGVvLCBhdWRpbywgb3IgY2FwdGlvbikuXG4gKlxuICogVGhlIHNhbWUgRW5jb2RlQ29uZmlndXJhdGlvbiBpbnN0YW5jZSBjYW4gYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBvdXRwdXQgZ3JvdXBzIHdpdGhpbiBhIGNoYW5uZWwuXG4gKiBUaGUgY2hhbm5lbCBhdXRvbWF0aWNhbGx5IGRlZHVwbGljYXRlcyBlbmNvZGUgZGVzY3JpcHRpb25zIGJ5IG5hbWUgYXQgc3ludGggdGltZS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEVuY29kZUNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogQ3JlYXRlIGEgdmlkZW8gZW5jb2RlIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHZpZGVvKHByb3BzOiBWaWRlb0VuY29kZVByb3BzKTogRW5jb2RlQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBWaWRlb0VuY29kZUNvbmZpZ3VyYXRpb24ocHJvcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhdWRpbyBlbmNvZGUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXVkaW8ocHJvcHM6IEF1ZGlvRW5jb2RlUHJvcHMpOiBFbmNvZGVDb25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IEF1ZGlvRW5jb2RlQ29uZmlndXJhdGlvbihwcm9wcyk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgY2FwdGlvbiBlbmNvZGUgY29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2FwdGlvbihwcm9wczogQ2FwdGlvbkVuY29kZVByb3BzKTogRW5jb2RlQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDYXB0aW9uRW5jb2RlQ29uZmlndXJhdGlvbihwcm9wcyk7XG4gIH1cblxuICAvKiogVGhlIHVuaXF1ZSBuYW1lIGZvciB0aGlzIGVuY29kZSwgdXNlZCB0byByZWZlcmVuY2UgaXQgZnJvbSBvdXRwdXRzLiAqL1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZW5jb2RlIGhhcyBleHBsaWNpdCBmcmFtZXJhdGUgYW5kIFBBUiBjb25maWd1cmVkLlxuICAgKiBSZXF1aXJlZCBmb3IgTWVkaWFQYWNrYWdlIFYyIHZpZGVvIG91dHB1dHMuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGFic3RyYWN0IF9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpOiBib29sZWFuO1xuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kVmlkZW8oKTogQ2ZuQ2hhbm5lbC5WaWRlb0Rlc2NyaXB0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kQXVkaW8oKTogQ2ZuQ2hhbm5lbC5BdWRpb0Rlc2NyaXB0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9iaW5kQ2FwdGlvbigpOiBDZm5DaGFubmVsLkNhcHRpb25EZXNjcmlwdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkO1xuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyBhYnN0cmFjdCBfdmlkZW9Db2RlY1R5cGUoKTogVmlkZW9Db2RlY1R5cGUgfCB1bmRlZmluZWQ7XG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIGFic3RyYWN0IF9hdWRpb0NvZGVjVHlwZSgpOiBBdWRpb0NvZGVjVHlwZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogR3JhbnQgdGhlIGNoYW5uZWwgcm9sZSByZWFkIGFjY2VzcyB0byBhbnkgZXh0ZXJuYWwgZmlsZXMgdGhpcyBlbmNvZGUgcmVmZXJlbmNlcyAoZS5nLiBhXG4gICAqIGJ1cm4taW4gY2FwdGlvbiBmb250IGluIFMzKS4gRGVmYXVsdCBpcyBhIG5vLW9wOyBjYXB0aW9uIGVuY29kZXMgb3ZlcnJpZGUgaXQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9ncmFudFJlYWQoX3JvbGU6IElSb2xlUmVmKTogdm9pZCB7fVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYW4gaW4tYmFuZCBjYXB0aW9uIGVuY29kZSAoYnVybi1pbiwgZW1iZWRkZWQpIHRoYXQgZG9lcyBub3QgcHJvZHVjZSBhXG4gICAqIHNlcGFyYXRlIHRyYWNrLiBSZXR1cm5zIGZhbHNlIGZvciBub24tY2FwdGlvbiBlbmNvZGVzIGFuZCBvdXQtb2YtYmFuZCBjYXB0aW9uIHR5cGVzLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaXNJbkJhbmRDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgaXMgYW4gZW1iZWRkZWQtZmFtaWx5IGNhcHRpb24gZW5jb2RlLiBPbmx5IG9uZSBwZXIgb3V0cHV0IGlzIGFsbG93ZWQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIF9pc0VtYmVkZGVkQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBIb3cgdG8gcmVzcG9uZCB0byBBRkQgdmFsdWVzIGluIHRoZSBpbnB1dCBzdHJlYW0uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXNwb25kVG9BZmQge1xuICAvKiogQ2xpcCBpbnB1dCB2aWRlbyBiYXNlZCBvbiBBRkQgdmFsdWVzICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUkVTUE9ORCA9IG5ldyBSZXNwb25kVG9BZmQoJ1JFU1BPTkQnKTtcbiAgLyoqIFBhc3MgQUZEIHZhbHVlcyB0aHJvdWdoIHdpdGhvdXQgY2xpcHBpbmcgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQQVNTVEhST1VHSCA9IG5ldyBSZXNwb25kVG9BZmQoJ1BBU1NUSFJPVUdIJyk7XG4gIC8qKiBJZ25vcmUgQUZEIHZhbHVlcyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE5PTkUgPSBuZXcgUmVzcG9uZFRvQWZkKCdOT05FJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBSZXNwb25kVG9BZmQge1xuICAgIHJldHVybiBuZXcgUmVzcG9uZFRvQWZkKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBWaWRlbyBzY2FsaW5nIGJlaGF2aW9yLlxuICovXG5leHBvcnQgY2xhc3MgU2NhbGluZ0JlaGF2aW9yIHtcbiAgLyoqIE1heSBpbnNlcnQgYmxhY2sgYm94ZXMgdG8gbWF0Y2ggb3V0cHV0IHJlc29sdXRpb24gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUID0gbmV3IFNjYWxpbmdCZWhhdmlvcignREVGQVVMVCcpO1xuICAvKiogU3RyZXRjaCB2aWRlbyB0byBmaWxsIHRoZSBvdXRwdXQgcmVzb2x1dGlvbiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNUUkVUQ0hfVE9fT1VUUFVUID0gbmV3IFNjYWxpbmdCZWhhdmlvcignU1RSRVRDSF9UT19PVVRQVVQnKTtcbiAgLyoqIEludGVsbGlnZW50bHkgY3JvcCB0aGUgdmlkZW8gdG8gZm9jdXMgb24ga2V5IHN1YmplY3RzICg5OjE2IHZlcnRpY2FsKS4gUmVxdWlyZXMgYW4gRWxlbWVudGFsIEluZmVyZW5jZSBmZWVkIG9uIHRoZSBjaGFubmVsIHZpYSBgaW5mZXJlbmNlRmVlZGAuIERvIE5PVCBpbmNsdWRlIGBGZWVkT3V0cHV0LmNyb3BwaW5nKClgIG9uIHRoZSBmZWVkIOKAlCBNZWRpYUxpdmUgYXV0by1pbnNlcnRzIGl0LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNNQVJUX0NST1AgPSBuZXcgU2NhbGluZ0JlaGF2aW9yKCdTTUFSVF9DUk9QJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBTY2FsaW5nQmVoYXZpb3Ige1xuICAgIHJldHVybiBuZXcgU2NhbGluZ0JlaGF2aW9yKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIHZpZGVvIGVuY29kZSBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZGVvRW5jb2RlUHJvcHMge1xuICAvKipcbiAgICogQSB1bmlxdWUgbmFtZSBmb3IgdGhpcyB2aWRlbyBlbmNvZGUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgd2lkdGggb2YgdGhlIG91dHB1dCB2aWRlbyBpbiBwaXhlbHMuIE11c3QgYmUgYW4gZXZlbiBudW1iZXIuXG4gICAqL1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGhlaWdodCBvZiB0aGUgb3V0cHV0IHZpZGVvIGluIHBpeGVscy4gTXVzdCBiZSBhbiBldmVuIG51bWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGhlaWdodDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGNvZGVjIGZvciB0aGUgdmlkZW8gZW5jb2RlLlxuICAgKlxuICAgKiBDaG9vc2UgdGhlIGNvZGVjIGV4cGxpY2l0bHkgKGUuZy4gYFZpZGVvQ29kZWNTZXR0aW5ncy5oMjY0KC4uLilgKVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZWM6IFZpZGVvQ29kZWNTZXR0aW5ncztcbiAgLyoqXG4gICAqIEhvdyB0byByZXNwb25kIHRvIEFGRCB2YWx1ZXMgaW4gdGhlIGlucHV0IHN0cmVhbS5cbiAgICogQGRlZmF1bHQgUmVzcG9uZFRvQWZkLk5PTkVcbiAgICovXG4gIHJlYWRvbmx5IHJlc3BvbmRUb0FmZD86IFJlc3BvbmRUb0FmZDtcbiAgLyoqXG4gICAqIFRoZSB2aWRlbyBzY2FsaW5nIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBTY2FsaW5nQmVoYXZpb3IuREVGQVVMVFxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbGluZ0JlaGF2aW9yPzogU2NhbGluZ0JlaGF2aW9yO1xuICAvKipcbiAgICogVGhlIGFudGktYWxpYXMgZmlsdGVyIHN0cmVuZ3RoICgwLTEwMCkuIDAgaXMgc29mdGVzdCwgMTAwIGlzIHNoYXJwZXN0LlxuICAgKiBAZGVmYXVsdCA1MFxuICAgKi9cbiAgcmVhZG9ubHkgc2hhcnBuZXNzPzogbnVtYmVyO1xufVxuXG4vKipcbiAqIEF1ZGlvIG5vcm1hbGl6YXRpb24gYWxnb3JpdGhtLlxuICovXG5leHBvcnQgY2xhc3MgQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtIHtcbiAgLyoqIENBTE0gQWN0IHNwZWNpZmljYXRpb24gKElUVS1SIEJTLjE3NzAtMSkgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJVFVfMTc3MF8xID0gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobSgnSVRVXzE3NzBfMScpO1xuICAvKiogRUJVIFItMTI4IHNwZWNpZmljYXRpb24gKElUVS1SIEJTLjE3NzAtMikgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJVFVfMTc3MF8yID0gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobSgnSVRVXzE3NzBfMicpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtIHtcbiAgICByZXR1cm4gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobSh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogQXVkaW8gbm9ybWFsaXphdGlvbiBhbGdvcml0aG0gY29udHJvbC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobUNvbnRyb2wge1xuICAvKiogQ29ycmVjdCB0aGUgYXVkaW8gdXNpbmcgdGhlIGNob3NlbiBhbGdvcml0aG0gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDT1JSRUNUX0FVRElPID0gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobUNvbnRyb2woJ0NPUlJFQ1RfQVVESU8nKTtcbiAgLyoqIE1lYXN1cmUgYXVkaW8gYnV0IGRvIG5vdCBhZGp1c3QgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRUFTVVJFX09OTFkgPSBuZXcgQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtQ29udHJvbCgnTUVBU1VSRV9PTkxZJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBBdWRpb05vcm1hbGl6YXRpb25BbGdvcml0aG1Db250cm9sIHtcbiAgICByZXR1cm4gbmV3IEF1ZGlvTm9ybWFsaXphdGlvbkFsZ29yaXRobUNvbnRyb2wodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFBlYWsgY2FsY3VsYXRpb24gbWV0aG9kIGZvciBhdWRpbyBub3JtYWxpemF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgQXVkaW9Ob3JtYWxpemF0aW9uUGVha0NhbGN1bGF0aW9uIHtcbiAgLyoqIENhbGN1bGF0ZSBhbmQgbG9nIHRoZSBUcnVlUGVhayBmb3IgZWFjaCBhdWRpbyB0cmFjay4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBUUlVFX1BFQUsgPSBuZXcgQXVkaW9Ob3JtYWxpemF0aW9uUGVha0NhbGN1bGF0aW9uKCdUUlVFX1BFQUsnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvTm9ybWFsaXphdGlvblBlYWtDYWxjdWxhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb05vcm1hbGl6YXRpb25QZWFrQ2FsY3VsYXRpb24odmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEF1ZGlvIG5vcm1hbGl6YXRpb24gc2V0dGluZ3MuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9Ob3JtYWxpemF0aW9uU2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIG5vcm1hbGl6YXRpb24gYWxnb3JpdGhtLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgYWxnb3JpdGhtPzogQXVkaW9Ob3JtYWxpemF0aW9uQWxnb3JpdGhtO1xuICAvKipcbiAgICogV2hldGhlciB0byBjb3JyZWN0IG9yIG9ubHkgbWVhc3VyZS5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGFsZ29yaXRobUNvbnRyb2w/OiBBdWRpb05vcm1hbGl6YXRpb25BbGdvcml0aG1Db250cm9sO1xuICAvKipcbiAgICogVGhlIHRhcmdldCBsb3VkbmVzcyBpbiBMS0ZTLiBDQUxNIEFjdCByZWNvbW1lbmRzIC0yNCwgRUJVIFItMTI4IHJlY29tbWVuZHMgLTIzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0TGtmcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gdXNlIGEgcGVhayBsaW1pdGVyIGFuZCBob3cgdG8gY2FsY3VsYXRlIHBlYWsgbGV2ZWxzLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcGVha0NhbGN1bGF0aW9uPzogQXVkaW9Ob3JtYWxpemF0aW9uUGVha0NhbGN1bGF0aW9uO1xuICAvKipcbiAgICogVGhlIHBlYWsgbGltaXRlciB0aHJlc2hvbGQgaW4gZEJGUy4gT25seSB1c2VkIHdoZW4gcGVhayBsaW1pdGluZyBpcyBlbmFibGVkLlxuICAgKiBAZGVmYXVsdCAtIHNlcnZpY2UgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgcGVha0xpbWl0ZXJUaHJlc2hvbGQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQW4gaW5wdXQgY2hhbm5lbCBsZXZlbCBmb3IgYXVkaW8gcmVtaXhpbmcuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5wdXRDaGFubmVsTGV2ZWwge1xuICAvKipcbiAgICogVGhlIGluZGV4IG9mIHRoZSBpbnB1dCBjaGFubmVsIHRvIHVzZSBhcyBhIHNvdXJjZS5cbiAgICovXG4gIHJlYWRvbmx5IGlucHV0Q2hhbm5lbDogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIHJlbWl4aW5nIGdhaW4gaW4gZEIgKC02MCB0byA2KS5cbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgZ2Fpbj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBBIG1hcHBpbmcgZnJvbSBpbnB1dCBjaGFubmVscyB0byBhbiBvdXRwdXQgY2hhbm5lbC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpb0NoYW5uZWxNYXBwaW5nIHtcbiAgLyoqXG4gICAqIFRoZSBpbmRleCBvZiB0aGUgb3V0cHV0IGNoYW5uZWwgYmVpbmcgcHJvZHVjZWQuXG4gICAqL1xuICByZWFkb25seSBvdXRwdXRDaGFubmVsOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgaW5wdXQgY2hhbm5lbHMgYW5kIHRoZWlyIGdhaW4gbGV2ZWxzIHRvIG1peCBpbnRvIHRoaXMgb3V0cHV0IGNoYW5uZWwuXG4gICAqL1xuICByZWFkb25seSBpbnB1dENoYW5uZWxMZXZlbHM6IElucHV0Q2hhbm5lbExldmVsW107XG59XG5cbi8qKlxuICogQXVkaW8gcmVtaXggc2V0dGluZ3MgZm9yIGNoYW5uZWwgcmVtYXBwaW5nLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlbWl4U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIGNoYW5uZWwgbWFwcGluZ3MgZnJvbSBpbnB1dCB0byBvdXRwdXQuXG4gICAqL1xuICByZWFkb25seSBjaGFubmVsTWFwcGluZ3M6IEF1ZGlvQ2hhbm5lbE1hcHBpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgaW5wdXQgY2hhbm5lbHMuXG4gICAqIEBkZWZhdWx0IC0gYXV0by1kZXRlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHNJbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2Ygb3V0cHV0IGNoYW5uZWxzLiBWYWxpZCB2YWx1ZXM6IDEsIDIsIDQsIDYsIDguXG4gICAqIEBkZWZhdWx0IC0gYXV0by1kZXRlY3RlZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHNPdXQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQ0JFVCBpbnNlcnRpb24gYmVoYXZpb3Igd2hlbiBwcmlvciBlbmNvZGluZyBpcyBkZXRlY3RlZCBvbiB0aGUgc2FtZSBsYXllci5cbiAqL1xuZXhwb3J0IGNsYXNzIE5pZWxzZW5DYmV0U3RlcGFzaWRlIHtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIE5pZWxzZW4gd2F0ZXJtYXJrcyBhcmUgcmVtb3ZlZC4gTmV3IHdhdGVybWFya3MgYXJlIGluc2VydGVkIHRocm91Z2hvdXQgdGhlIGF1ZGlvLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBESVNBQkxFRCA9IG5ldyBOaWVsc2VuQ2JldFN0ZXBhc2lkZSgnRElTQUJMRUQnKTtcbiAgLyoqXG4gICAqIEV4aXN0aW5nIE5pZWxzZW4gd2F0ZXJtYXJrcyBhcmUgbGVmdCBpbnRhY3QuIE5ldyB3YXRlcm1hcmtzIGFyZSBpbnNlcnRlZCBvbmx5IGluIHBvcnRpb25zXG4gICAqIG9mIHRoZSBhdWRpbyB3aGVyZSB0aGVyZSBhcmUgbm8gZXhpc3Rpbmcgd2F0ZXJtYXJrcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5BQkxFRCA9IG5ldyBOaWVsc2VuQ2JldFN0ZXBhc2lkZSgnRU5BQkxFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogTmllbHNlbkNiZXRTdGVwYXNpZGUge1xuICAgIHJldHVybiBuZXcgTmllbHNlbkNiZXRTdGVwYXNpZGUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRpbWV6b25lIGFwcGxpZWQgdG8gdGhlIHRpbWVzdGFtcHMgaW4gYSBOaWVsc2VuIE5BRVMgSUkvTlcgd2F0ZXJtYXJrLlxuICovXG5leHBvcnQgY2xhc3MgTmllbHNlbldhdGVybWFya1RpbWV6b25lIHtcbiAgLyoqIEFtZXJpY2EvUHVlcnRvIFJpY28gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTUVSSUNBX1BVRVJUT19SSUNPID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnQU1FUklDQV9QVUVSVE9fUklDTycpO1xuICAvKiogVVMgQWxhc2thICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNfQUxBU0tBID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVNfQUxBU0tBJyk7XG4gIC8qKiBVUyBBcml6b25hICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNfQVJJWk9OQSA9IG5ldyBOaWVsc2VuV2F0ZXJtYXJrVGltZXpvbmUoJ1VTX0FSSVpPTkEnKTtcbiAgLyoqIFVTIENlbnRyYWwgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU19DRU5UUkFMID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVNfQ0VOVFJBTCcpO1xuICAvKiogVVMgRWFzdGVybiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTX0VBU1RFUk4gPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19FQVNURVJOJyk7XG4gIC8qKiBVUyBIYXdhaWkgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVU19IQVdBSUkgPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19IQVdBSUknKTtcbiAgLyoqIFVTIE1vdW50YWluICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNfTU9VTlRBSU4gPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19NT1VOVEFJTicpO1xuICAvKiogVVMgUGFjaWZpYyAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTX1BBQ0lGSUMgPSBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKCdVU19QQUNJRklDJyk7XG4gIC8qKiBVUyBTYW1vYSAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTX1NBTU9BID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVNfU0FNT0EnKTtcbiAgLyoqIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVRDID0gbmV3IE5pZWxzZW5XYXRlcm1hcmtUaW1lem9uZSgnVVRDJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBOaWVsc2VuV2F0ZXJtYXJrVGltZXpvbmUge1xuICAgIHJldHVybiBuZXcgTmllbHNlbldhdGVybWFya1RpbWV6b25lKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBOaWVsc2VuIENCRVQgd2F0ZXJtYXJrIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pZWxzZW5DYmV0U2V0dGluZ3Mge1xuICAvKipcbiAgICogVGhlIENCRVQgY2hlY2sgZGlnaXQgc3RyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2JldENoZWNrRGlnaXRTdHJpbmc6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBDQkVUIFNvdXJjZSBJRCAoQ1NJRCkuXG4gICAqL1xuICByZWFkb25seSBjc2lkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgQ0JFVCBzdGVwYXNpZGUgYmVoYXZpb3Igd2hlbiBwcmlvciBlbmNvZGluZyBpcyBkZXRlY3RlZC5cbiAgICogQGRlZmF1bHQgLSBzZXJ2aWNlIGRlZmF1bHRcbiAgICovXG4gIHJlYWRvbmx5IGNiZXRTdGVwYXNpZGU/OiBOaWVsc2VuQ2JldFN0ZXBhc2lkZTtcbn1cblxuLyoqXG4gKiBOaWVsc2VuIE5BRVMgSUkvTlcgd2F0ZXJtYXJrIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5pZWxzZW5OYWVzSWlOd1NldHRpbmdzIHtcbiAgLyoqXG4gICAqIFRoZSBjaGVjayBkaWdpdCBzdHJpbmcgZm9yIHRoZSB3YXRlcm1hcmsuXG4gICAqL1xuICByZWFkb25seSBjaGVja0RpZ2l0U3RyaW5nOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgTmllbHNlbiBTb3VyY2UgSUQgKFNJRCkuXG4gICAqL1xuICByZWFkb25seSBzaWQ6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSB0aW1lem9uZSBmb3IgdGhlIHRpbWVzdGFtcHMgaW4gdGhlIHdhdGVybWFyay5cbiAgICogQGRlZmF1bHQgLSBDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSAoVVRDKVxuICAgKi9cbiAgcmVhZG9ubHkgdGltZXpvbmU/OiBOaWVsc2VuV2F0ZXJtYXJrVGltZXpvbmU7XG59XG5cbi8qKlxuICogTmllbHNlbiB3YXRlcm1hcmsgZGlzdHJpYnV0aW9uIHR5cGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBOaWVsc2VuRGlzdHJpYnV0aW9uVHlwZSB7XG4gIC8qKiBQcm9ncmFtIGNvbnRlbnQgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9HUkFNX0NPTlRFTlQgPSBuZXcgTmllbHNlbkRpc3RyaWJ1dGlvblR5cGUoJ1BST0dSQU1fQ09OVEVOVCcpO1xuICAvKiogRmluYWwgZGlzdHJpYnV0b3IgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSU5BTF9ESVNUUklCVVRPUiA9IG5ldyBOaWVsc2VuRGlzdHJpYnV0aW9uVHlwZSgnRklOQUxfRElTVFJJQlVUT1InKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IE5pZWxzZW5EaXN0cmlidXRpb25UeXBlIHtcbiAgICByZXR1cm4gbmV3IE5pZWxzZW5EaXN0cmlidXRpb25UeXBlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBOaWVsc2VuIHdhdGVybWFyayBzZXR0aW5ncyBmb3IgYXVkaW8uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmllbHNlbldhdGVybWFya3NTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIHR5cGUgZm9yIHRoZSB3YXRlcm1hcmsuXG4gICAqIEBkZWZhdWx0IC0gc2VydmljZSBkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25UeXBlPzogTmllbHNlbkRpc3RyaWJ1dGlvblR5cGU7XG4gIC8qKlxuICAgKiBOaWVsc2VuIENCRVQgd2F0ZXJtYXJrIHNldHRpbmdzLlxuICAgKiBAZGVmYXVsdCAtIG5vIENCRVQgd2F0ZXJtYXJrc1xuICAgKi9cbiAgcmVhZG9ubHkgY2JldFNldHRpbmdzPzogTmllbHNlbkNiZXRTZXR0aW5ncztcbiAgLyoqXG4gICAqIE5pZWxzZW4gTkFFUyBJSS9OVyB3YXRlcm1hcmsgc2V0dGluZ3MuXG4gICAqIEBkZWZhdWx0IC0gbm8gTkFFUyBJSS9OVyB3YXRlcm1hcmtzXG4gICAqL1xuICByZWFkb25seSBuYWVzSWlOd1NldHRpbmdzPzogTmllbHNlbk5hZXNJaU53U2V0dGluZ3M7XG59XG5cbi8qKlxuICogQXVkaW8gd2F0ZXJtYXJraW5nIHNldHRpbmdzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3Mge1xuICAvKipcbiAgICogTmllbHNlbiB3YXRlcm1hcmsgc2V0dGluZ3MuXG4gICAqIEBkZWZhdWx0IC0gbm8gTmllbHNlbiB3YXRlcm1hcmtzXG4gICAqL1xuICByZWFkb25seSBuaWVsc2VuV2F0ZXJtYXJrcz86IE5pZWxzZW5XYXRlcm1hcmtzU2V0dGluZ3M7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgdGhlIGF1ZGlvIHR5cGUgaXMgc2lnbmFsZWQgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvVHlwZUNvbnRyb2wge1xuICAvKipcbiAgICogSWYgdGhlIGlucHV0IGNvbnRhaW5zIGFuIElTTyA2MzkgYXVkaW9UeXBlIGl0IGlzIHBhc3NlZCB0aHJvdWdoOyBvdGhlcndpc2UgdGhlXG4gICAqIGNvbmZpZ3VyZWQgYGF1ZGlvVHlwZWAgaXMgdXNlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRk9MTE9XX0lOUFVUID0gbmV3IEF1ZGlvVHlwZUNvbnRyb2woJ0ZPTExPV19JTlBVVCcpO1xuICAvKiogVGhlIGNvbmZpZ3VyZWQgYGF1ZGlvVHlwZWAgaXMgYWx3YXlzIHVzZWQuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVVNFX0NPTkZJR1VSRUQgPSBuZXcgQXVkaW9UeXBlQ29udHJvbCgnVVNFX0NPTkZJR1VSRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvVHlwZUNvbnRyb2wge1xuICAgIHJldHVybiBuZXcgQXVkaW9UeXBlQ29udHJvbCh2YWx1ZSk7XG4gIH1cblxuICAvKiogVGhlIHVuZGVybHlpbmcgc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBDbG91ZEZvcm1hdGlvbi4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgdGhlIGF1ZGlvIGxhbmd1YWdlIGNvZGUgaXMgc2lnbmFsZWQgaW4gdGhlIG91dHB1dC5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvTGFuZ3VhZ2VDb2RlQ29udHJvbCB7XG4gIC8qKlxuICAgKiBJZiB0aGUgaW5wdXQgY29udGFpbnMgYSBsYW5ndWFnZSBjb2RlIGl0IGlzIHBhc3NlZCB0aHJvdWdoOyBvdGhlcndpc2UgdGhlIGNvbmZpZ3VyZWRcbiAgICogYGxhbmd1YWdlQ29kZWAgaXMgdXNlZCBhcyBhIGZhbGxiYWNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGT0xMT1dfSU5QVVQgPSBuZXcgQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sKCdGT0xMT1dfSU5QVVQnKTtcbiAgLyoqIFRoZSBjb25maWd1cmVkIGBsYW5ndWFnZUNvZGVgIGlzIGFsd2F5cyB1c2VkLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFVTRV9DT05GSUdVUkVEID0gbmV3IEF1ZGlvTGFuZ3VhZ2VDb2RlQ29udHJvbCgnVVNFX0NPTkZJR1VSRUQnKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvTGFuZ3VhZ2VDb2RlQ29udHJvbCB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0xhbmd1YWdlQ29kZUNvbnRyb2wodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBhdWRpbyB0eXBlLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMTM4MTgtMS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvVHlwZSB7XG4gIC8qKiBDbGVhbiBlZmZlY3RzIChubyBkaWFsb2d1ZSkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0xFQU5fRUZGRUNUUyA9IG5ldyBBdWRpb1R5cGUoJ0NMRUFOX0VGRkVDVFMnKTtcbiAgLyoqIEhlYXJpbmcgaW1wYWlyZWQuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSEVBUklOR19JTVBBSVJFRCA9IG5ldyBBdWRpb1R5cGUoJ0hFQVJJTkdfSU1QQUlSRUQnKTtcbiAgLyoqIFVuZGVmaW5lZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBVTkRFRklORUQgPSBuZXcgQXVkaW9UeXBlKCdVTkRFRklORUQnKTtcbiAgLyoqIFZpc3VhbCBpbXBhaXJlZCBjb21tZW50YXJ5LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFZJU1VBTF9JTVBBSVJFRF9DT01NRU5UQVJZID0gbmV3IEF1ZGlvVHlwZSgnVklTVUFMX0lNUEFJUkVEX0NPTU1FTlRBUlknKTtcblxuICAvKiogQSB2YWx1ZSBub3QgeWV0IG1vZGVsbGVkIGJ5IEFXUyBDREsuICovXG4gIHB1YmxpYyBzdGF0aWMgb2YodmFsdWU6IHN0cmluZyk6IEF1ZGlvVHlwZSB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb1R5cGUodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nIGZvciBhbiBhdWRpbyBvdXRwdXQuXG4gKi9cbmV4cG9ydCBjbGFzcyBEdmJEYXNoQWNjZXNzaWJpbGl0eSB7XG4gIC8qKiBWaXN1YWxseSBpbXBhaXJlZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBWSVNVQUxMWV9JTVBBSVJFRCA9IG5ldyBEdmJEYXNoQWNjZXNzaWJpbGl0eSgnRFZCREFTSF8xX1ZJU1VBTExZX0lNUEFJUkVEJyk7XG4gIC8qKiBIYXJkIG9mIGhlYXJpbmcuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSEFSRF9PRl9IRUFSSU5HID0gbmV3IER2YkRhc2hBY2Nlc3NpYmlsaXR5KCdEVkJEQVNIXzJfSEFSRF9PRl9IRUFSSU5HJyk7XG4gIC8qKiBTdXBwbGVtZW50YWwgY29tbWVudGFyeS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVVBQTEVNRU5UQUxfQ09NTUVOVEFSWSA9IG5ldyBEdmJEYXNoQWNjZXNzaWJpbGl0eSgnRFZCREFTSF8zX1NVUFBMRU1FTlRBTF9DT01NRU5UQVJZJyk7XG4gIC8qKiBEaXJlY3RvcidzIGNvbW1lbnRhcnkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRElSRUNUT1JTX0NPTU1FTlRBUlkgPSBuZXcgRHZiRGFzaEFjY2Vzc2liaWxpdHkoJ0RWQkRBU0hfNF9ESVJFQ1RPUlNfQ09NTUVOVEFSWScpO1xuICAvKiogRWR1Y2F0aW9uYWwgbm90ZXMuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRURVQ0FUSU9OQUxfTk9URVMgPSBuZXcgRHZiRGFzaEFjY2Vzc2liaWxpdHkoJ0RWQkRBU0hfNV9FRFVDQVRJT05BTF9OT1RFUycpO1xuICAvKiogTWFpbiBwcm9ncmFtLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU5fUFJPR1JBTSA9IG5ldyBEdmJEYXNoQWNjZXNzaWJpbGl0eSgnRFZCREFTSF82X01BSU5fUFJPR1JBTScpO1xuICAvKiogQ2xlYW4gZmVlZC4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTEVBTl9GRUVEID0gbmV3IER2YkRhc2hBY2Nlc3NpYmlsaXR5KCdEVkJEQVNIXzdfQ0xFQU5fRkVFRCcpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogRHZiRGFzaEFjY2Vzc2liaWxpdHkge1xuICAgIHJldHVybiBuZXcgRHZiRGFzaEFjY2Vzc2liaWxpdHkodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgREFTSCByb2xlIHRvIGFzc2lnbiB0byBhbiBhdWRpbyBvdXRwdXQgKHVzZWQgd2hlbiB0aGUgb3V0cHV0IGNhcnJpZXMgRFZCIERBU0ggYWNjZXNzaWJpbGl0eVxuICogc2lnbmFsaW5nKS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1ZGlvRGFzaFJvbGUge1xuICAvKiogQWx0ZXJuYXRlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMVEVSTkFURSA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdBTFRFUk5BVEUnKTtcbiAgLyoqIENvbW1lbnRhcnkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09NTUVOVEFSWSA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdDT01NRU5UQVJZJyk7XG4gIC8qKiBEZXNjcmlwdGlvbi4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERVNDUklQVElPTiA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdERVNDUklQVElPTicpO1xuICAvKiogRHViLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERVQiA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdEVUInKTtcbiAgLyoqIEVtZXJnZW5jeS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBFTUVSR0VOQ1kgPSBuZXcgQXVkaW9EYXNoUm9sZSgnRU1FUkdFTkNZJyk7XG4gIC8qKiBFbmhhbmNlZCBhdWRpbyBpbnRlbGxpZ2liaWxpdHkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU5IQU5DRURfQVVESU9fSU5URUxMSUdJQklMSVRZID0gbmV3IEF1ZGlvRGFzaFJvbGUoJ0VOSEFOQ0VELUFVRElPLUlOVEVMTElHSUJJTElUWScpO1xuICAvKiogS2FyYW9rZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBLQVJBT0tFID0gbmV3IEF1ZGlvRGFzaFJvbGUoJ0tBUkFPS0UnKTtcbiAgLyoqIE1haW4uICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFJTiA9IG5ldyBBdWRpb0Rhc2hSb2xlKCdNQUlOJyk7XG4gIC8qKiBTdXBwbGVtZW50YXJ5LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVUFBMRU1FTlRBUlkgPSBuZXcgQXVkaW9EYXNoUm9sZSgnU1VQUExFTUVOVEFSWScpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQXVkaW9EYXNoUm9sZSB7XG4gICAgcmV0dXJuIG5ldyBBdWRpb0Rhc2hSb2xlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBhdWRpbyBlbmNvZGUgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpb0VuY29kZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgYXVkaW8gZW5jb2RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGF1ZGlvIHNlbGVjdG9yIGluIHRoZSBpbnB1dCB0byB1c2UgYXMgdGhlIHNvdXJjZS4gTXVzdCBtYXRjaCB0aGUgYG5hbWVgIG9mIGFuXG4gICAqIGBBdWRpb1NlbGVjdG9yYCBvbiB0aGUgaW5wdXQgYXR0YWNobWVudC4gV2hlbiBvbWl0dGVkLCBNZWRpYUxpdmUgdXNlcyB0aGUgaW5wdXQncyBkZWZhdWx0IGF1ZGlvLlxuICAgKiBAZGVmYXVsdCAtIHRoZSBpbnB1dCdzIGRlZmF1bHQgYXVkaW9cbiAgICovXG4gIHJlYWRvbmx5IGF1ZGlvU2VsZWN0b3JOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNvZGVjIGZvciB0aGUgYXVkaW8gZW5jb2RlLlxuICAgKlxuICAgKiBDaG9vc2UgdGhlIGNvZGVjIGV4cGxpY2l0bHkgKGUuZy4gYEF1ZGlvQ29kZWNTZXR0aW5ncy5hYWMoLi4uKWApXG4gICAqL1xuICByZWFkb25seSBjb2RlYzogQXVkaW9Db2RlY1NldHRpbmdzO1xuICAvKipcbiAgICogVGhlIElTTyA2MzktMiBsYW5ndWFnZSBjb2RlIGZvciB0aGUgYXVkaW8gb3V0cHV0IHRyYWNrIChlLmcuICdlbmcnLCAnc3BhJykuXG4gICAqIEBkZWZhdWx0IC0gZm9sbG93IGlucHV0XG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZUNvZGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIb3cgdGhlIGF1ZGlvIGxhbmd1YWdlIGNvZGUgaXMgc2lnbmFsZWQgaW4gdGhlIG91dHB1dC4gV2hlbiBgRk9MTE9XX0lOUFVUYCwgYSBjb25maWd1cmVkXG4gICAqIGBsYW5ndWFnZUNvZGVgIGlzIHVzZWQgb25seSBhcyBhIGZhbGxiYWNrIHdoZW4gdGhlIGlucHV0IGhhcyBub25lLlxuICAgKiBAZGVmYXVsdCAtIFVTRV9DT05GSUdVUkVEIHdoZW4gYGxhbmd1YWdlQ29kZWAgaXMgc2V0LCBvdGhlcndpc2UgRk9MTE9XX0lOUFVUXG4gICAqL1xuICByZWFkb25seSBsYW5ndWFnZUNvZGVDb250cm9sPzogQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sO1xuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhlIGF1ZGlvIHRyYWNrIChlLmcuICdFbmdsaXNoJywgJ0RpcmVjdG9yIENvbW1lbnRhcnknKS5cbiAgICogVXNlZCBmb3IgSExTIGFuZCBNUyBTbW9vdGggb3V0cHV0cy5cbiAgICogQGRlZmF1bHQgLSBubyBzdHJlYW0gbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyZWFtTmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIEF1ZGlvIG5vcm1hbGl6YXRpb24gc2V0dGluZ3MgZm9yIGxvdWRuZXNzIGNvcnJlY3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gbm8gbm9ybWFsaXphdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaW9Ob3JtYWxpemF0aW9uPzogQXVkaW9Ob3JtYWxpemF0aW9uU2V0dGluZ3M7XG4gIC8qKlxuICAgKiBUaGUgYXVkaW8gdHlwZSB3aGVuIGF1ZGlvVHlwZUNvbnRyb2wgaXMgVVNFX0NPTkZJR1VSRUQuIFRoZSB2YWx1ZXMgYXJlIGRlZmluZWQgaW4gSVNPLUlFQyAxMzgxOC0xLlxuICAgKiBAZGVmYXVsdCAtIGZvbGxvdyBpbnB1dFxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaW9UeXBlPzogQXVkaW9UeXBlO1xuICAvKipcbiAgICogSG93IHRoZSBhdWRpbyB0eXBlIGlzIHNpZ25hbGVkIGluIHRoZSBvdXRwdXQuXG4gICAqIEBkZWZhdWx0IC0gVVNFX0NPTkZJR1VSRUQgd2hlbiBgYXVkaW9UeXBlYCBpcyBzZXQsIG90aGVyd2lzZSBGT0xMT1dfSU5QVVRcbiAgICovXG4gIHJlYWRvbmx5IGF1ZGlvVHlwZUNvbnRyb2w/OiBBdWRpb1R5cGVDb250cm9sO1xuICAvKipcbiAgICogVGhlIERBU0ggcm9sZXMgdG8gYXNzaWduIHRvIHRoaXMgYXVkaW8gb3V0cHV0LiBBcHBsaWVzIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGNvbmZpZ3VyZWRcbiAgICogZm9yIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vIERBU0ggcm9sZXNcbiAgICovXG4gIHJlYWRvbmx5IGF1ZGlvRGFzaFJvbGVzPzogQXVkaW9EYXNoUm9sZVtdO1xuICAvKipcbiAgICogRFZCIERBU0ggYWNjZXNzaWJpbGl0eSBzaWduYWxpbmcgZm9yIHRoaXMgYXVkaW8gb3V0cHV0LlxuICAgKiBAZGVmYXVsdCAtIG5vIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nXG4gICAqL1xuICByZWFkb25seSBkdmJEYXNoQWNjZXNzaWJpbGl0eT86IER2YkRhc2hBY2Nlc3NpYmlsaXR5O1xuICAvKipcbiAgICogQXVkaW8gcmVtaXggc2V0dGluZ3MgZm9yIGNoYW5uZWwgcmVtYXBwaW5nLlxuICAgKiBAZGVmYXVsdCAtIG5vIHJlbWl4aW5nXG4gICAqL1xuICByZWFkb25seSByZW1peFNldHRpbmdzPzogUmVtaXhTZXR0aW5ncztcbiAgLyoqXG4gICAqIEF1ZGlvIHdhdGVybWFya2luZyBzZXR0aW5ncyAoZS5nLiBOaWVsc2VuIHdhdGVybWFya3MpLlxuICAgKiBAZGVmYXVsdCAtIG5vIHdhdGVybWFya2luZ1xuICAgKi9cbiAgcmVhZG9ubHkgYXVkaW9XYXRlcm1hcmtTZXR0aW5ncz86IEF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3M7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmNsYXNzIFZpZGVvRW5jb2RlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuY29kZUNvbmZpZ3VyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBWaWRlb0VuY29kZVByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBWaWRlb0VuY29kZVByb3BzKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAoIVRva2VuLmlzVW5yZXNvbHZlZChwcm9wcy53aWR0aCkgJiYgcHJvcHMud2lkdGggJSAyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFZpZGVvV2lkdGhFdmVuYCwgYFZpZGVvIHdpZHRoIG11c3QgYmUgYW4gZXZlbiBudW1iZXIsIGdvdCAke3Byb3BzLndpZHRofS5gKTtcbiAgICB9XG4gICAgaWYgKCFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMuaGVpZ2h0KSAmJiBwcm9wcy5oZWlnaHQgJSAyICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YFZpZGVvSGVpZ2h0RXZlbmAsIGBWaWRlbyBoZWlnaHQgbXVzdCBiZSBhbiBldmVuIG51bWJlciwgZ290ICR7cHJvcHMuaGVpZ2h0fS5gKTtcbiAgICB9XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwdWJsaWMgX2hhc0V4cGxpY2l0RnJhbWVyYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNvZGVjLl9oYXNFeHBsaWNpdEZyYW1lcmF0ZSgpO1xuICB9XG5cbiAgcHVibGljIF9iaW5kVmlkZW8oKTogQ2ZuQ2hhbm5lbC5WaWRlb0Rlc2NyaXB0aW9uUHJvcGVydHkge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB3aWR0aDogdGhpcy5wcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5wcm9wcy5oZWlnaHQsXG4gICAgICByZXNwb25kVG9BZmQ6ICh0aGlzLnByb3BzLnJlc3BvbmRUb0FmZCA/PyBSZXNwb25kVG9BZmQuTk9ORSkudmFsdWUsXG4gICAgICBzY2FsaW5nQmVoYXZpb3I6ICh0aGlzLnByb3BzLnNjYWxpbmdCZWhhdmlvciA/PyBTY2FsaW5nQmVoYXZpb3IuREVGQVVMVCkudmFsdWUsXG4gICAgICBzaGFycG5lc3M6IHRoaXMucHJvcHMuc2hhcnBuZXNzID8/IDUwLFxuICAgICAgY29kZWNTZXR0aW5nczogdGhpcy5wcm9wcy5jb2RlYy5fYmluZCgpLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgX2JpbmRBdWRpbygpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgX2JpbmRDYXB0aW9uKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfdmlkZW9Db2RlY1R5cGUoKTogVmlkZW9Db2RlY1R5cGUge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmNvZGVjLl9jb2RlY1R5cGU7XG4gIH1cblxuICBwdWJsaWMgX2F1ZGlvQ29kZWNUeXBlKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKiogQGludGVybmFsICovXG5jbGFzcyBBdWRpb0VuY29kZUNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBFbmNvZGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwcm9wczogQXVkaW9FbmNvZGVQcm9wcztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogQXVkaW9FbmNvZGVQcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwdWJsaWMgX2hhc0V4cGxpY2l0RnJhbWVyYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvLyBOb3QgYXBwbGljYWJsZSBmb3IgYXVkaW9cbiAgfVxuXG4gIHB1YmxpYyBfYmluZFZpZGVvKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZEF1ZGlvKCk6IENmbkNoYW5uZWwuQXVkaW9EZXNjcmlwdGlvblByb3BlcnR5IHtcbiAgICBjb25zdCBjb2RlY1NldHRpbmdzID0gdGhpcy5wcm9wcy5jb2RlYztcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgYXVkaW9TZWxlY3Rvck5hbWU6IHRoaXMucHJvcHMuYXVkaW9TZWxlY3Rvck5hbWUsXG4gICAgICBhdWRpb1R5cGVDb250cm9sOiB0aGlzLnByb3BzLmF1ZGlvVHlwZUNvbnRyb2w/LnZhbHVlXG4gICAgICAgID8/ICh0aGlzLnByb3BzLmF1ZGlvVHlwZSAhPT0gdW5kZWZpbmVkID8gQXVkaW9UeXBlQ29udHJvbC5VU0VfQ09ORklHVVJFRCA6IEF1ZGlvVHlwZUNvbnRyb2wuRk9MTE9XX0lOUFVUKS52YWx1ZSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5wcm9wcy5sYW5ndWFnZUNvZGUsXG4gICAgICBsYW5ndWFnZUNvZGVDb250cm9sOiB0aGlzLnByb3BzLmxhbmd1YWdlQ29kZUNvbnRyb2w/LnZhbHVlXG4gICAgICAgID8/ICh0aGlzLnByb3BzLmxhbmd1YWdlQ29kZSAhPT0gdW5kZWZpbmVkID8gQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sLlVTRV9DT05GSUdVUkVEIDogQXVkaW9MYW5ndWFnZUNvZGVDb250cm9sLkZPTExPV19JTlBVVCkudmFsdWUsXG4gICAgICBzdHJlYW1OYW1lOiB0aGlzLnByb3BzLnN0cmVhbU5hbWUsXG4gICAgICBhdWRpb1R5cGU6IHRoaXMucHJvcHMuYXVkaW9UeXBlPy52YWx1ZSxcbiAgICAgIGF1ZGlvRGFzaFJvbGVzOiB0aGlzLnByb3BzLmF1ZGlvRGFzaFJvbGVzPy5tYXAociA9PiByLnZhbHVlKSxcbiAgICAgIGR2YkRhc2hBY2Nlc3NpYmlsaXR5OiB0aGlzLnByb3BzLmR2YkRhc2hBY2Nlc3NpYmlsaXR5Py52YWx1ZSxcbiAgICAgIGNvZGVjU2V0dGluZ3M6IGNvZGVjU2V0dGluZ3MuX2JpbmQoKSxcbiAgICAgIGF1ZGlvTm9ybWFsaXphdGlvblNldHRpbmdzOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbiA/IHtcbiAgICAgICAgYWxnb3JpdGhtOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbi5hbGdvcml0aG0/LnZhbHVlLFxuICAgICAgICBhbGdvcml0aG1Db250cm9sOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbi5hbGdvcml0aG1Db250cm9sPy52YWx1ZSxcbiAgICAgICAgdGFyZ2V0TGtmczogdGhpcy5wcm9wcy5hdWRpb05vcm1hbGl6YXRpb24udGFyZ2V0TGtmcyxcbiAgICAgICAgcGVha0NhbGN1bGF0aW9uOiB0aGlzLnByb3BzLmF1ZGlvTm9ybWFsaXphdGlvbi5wZWFrQ2FsY3VsYXRpb24/LnZhbHVlLFxuICAgICAgICBwZWFrTGltaXRlclRocmVzaG9sZDogdGhpcy5wcm9wcy5hdWRpb05vcm1hbGl6YXRpb24ucGVha0xpbWl0ZXJUaHJlc2hvbGQsXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgICAgcmVtaXhTZXR0aW5nczogdGhpcy5wcm9wcy5yZW1peFNldHRpbmdzID8ge1xuICAgICAgICBjaGFubmVsTWFwcGluZ3M6IHRoaXMucHJvcHMucmVtaXhTZXR0aW5ncy5jaGFubmVsTWFwcGluZ3MubWFwKG0gPT4gKHtcbiAgICAgICAgICBvdXRwdXRDaGFubmVsOiBtLm91dHB1dENoYW5uZWwsXG4gICAgICAgICAgaW5wdXRDaGFubmVsTGV2ZWxzOiBtLmlucHV0Q2hhbm5lbExldmVscy5tYXAobCA9PiAoe1xuICAgICAgICAgICAgaW5wdXRDaGFubmVsOiBsLmlucHV0Q2hhbm5lbCxcbiAgICAgICAgICAgIGdhaW46IGwuZ2FpbiA/PyAwLFxuICAgICAgICAgIH0pKSxcbiAgICAgICAgfSkpLFxuICAgICAgICBjaGFubmVsc0luOiB0aGlzLnByb3BzLnJlbWl4U2V0dGluZ3MuY2hhbm5lbHNJbixcbiAgICAgICAgY2hhbm5lbHNPdXQ6IHRoaXMucHJvcHMucmVtaXhTZXR0aW5ncy5jaGFubmVsc091dCxcbiAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICBhdWRpb1dhdGVybWFya2luZ1NldHRpbmdzOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MgPyB7XG4gICAgICAgIG5pZWxzZW5XYXRlcm1hcmtzU2V0dGluZ3M6IHRoaXMucHJvcHMuYXVkaW9XYXRlcm1hcmtTZXR0aW5ncy5uaWVsc2VuV2F0ZXJtYXJrcyA/IHtcbiAgICAgICAgICBuaWVsc2VuRGlzdHJpYnV0aW9uVHlwZTogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLmRpc3RyaWJ1dGlvblR5cGU/LnZhbHVlLFxuICAgICAgICAgIG5pZWxzZW5DYmV0U2V0dGluZ3M6IHRoaXMucHJvcHMuYXVkaW9XYXRlcm1hcmtTZXR0aW5ncy5uaWVsc2VuV2F0ZXJtYXJrcy5jYmV0U2V0dGluZ3MgPyB7XG4gICAgICAgICAgICBjYmV0Q2hlY2tEaWdpdFN0cmluZzogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLmNiZXRTZXR0aW5ncy5jYmV0Q2hlY2tEaWdpdFN0cmluZyxcbiAgICAgICAgICAgIGNiZXRTdGVwYXNpZGU6IHRoaXMucHJvcHMuYXVkaW9XYXRlcm1hcmtTZXR0aW5ncy5uaWVsc2VuV2F0ZXJtYXJrcy5jYmV0U2V0dGluZ3MuY2JldFN0ZXBhc2lkZT8udmFsdWUsXG4gICAgICAgICAgICBjc2lkOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MubmllbHNlbldhdGVybWFya3MuY2JldFNldHRpbmdzLmNzaWQsXG4gICAgICAgICAgfSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuaWVsc2VuTmFlc0lpTndTZXR0aW5nczogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLm5hZXNJaU53U2V0dGluZ3MgPyB7XG4gICAgICAgICAgICBjaGVja0RpZ2l0U3RyaW5nOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MubmllbHNlbldhdGVybWFya3MubmFlc0lpTndTZXR0aW5ncy5jaGVja0RpZ2l0U3RyaW5nLFxuICAgICAgICAgICAgc2lkOiB0aGlzLnByb3BzLmF1ZGlvV2F0ZXJtYXJrU2V0dGluZ3MubmllbHNlbldhdGVybWFya3MubmFlc0lpTndTZXR0aW5ncy5zaWQsXG4gICAgICAgICAgICB0aW1lem9uZTogdGhpcy5wcm9wcy5hdWRpb1dhdGVybWFya1NldHRpbmdzLm5pZWxzZW5XYXRlcm1hcmtzLm5hZXNJaU53U2V0dGluZ3MudGltZXpvbmU/LnZhbHVlLFxuICAgICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICAgIH0gOiB1bmRlZmluZWQsXG4gICAgICB9IDogdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgX2JpbmRDYXB0aW9uKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfdmlkZW9Db2RlY1R5cGUoKTogdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIF9hdWRpb0NvZGVjVHlwZSgpOiBBdWRpb0NvZGVjVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29kZWMuX2NvZGVjVHlwZTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXRoZXIgYSBjYXB0aW9uIHRyYWNrIGltcGxlbWVudHMgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcyAod3JpdHRlbiBkZXNjcmlwdGlvbnMgb2YgZGlhbG9nLFxuICogbXVzaWMsIGFuZCBzb3VuZHMpLiBTaWduYWxlZCBpbiBITFMgYW5kIE1lZGlhUGFja2FnZSBvdXRwdXQgZ3JvdXBzLlxuICovXG5leHBvcnQgY2xhc3MgQ2FwdGlvbkFjY2Vzc2liaWxpdHkge1xuICAvKiogVGhlIGNhcHRpb25zIGRvIG5vdCBpbXBsZW1lbnQgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBET0VTX05PVF9JTVBMRU1FTlRfQUNDRVNTSUJJTElUWV9GRUFUVVJFUyA9IG5ldyBDYXB0aW9uQWNjZXNzaWJpbGl0eSgnRE9FU19OT1RfSU1QTEVNRU5UX0FDQ0VTU0lCSUxJVFlfRkVBVFVSRVMnKTtcbiAgLyoqIFRoZSBjYXB0aW9ucyBpbXBsZW1lbnQgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBJTVBMRU1FTlRTX0FDQ0VTU0lCSUxJVFlfRkVBVFVSRVMgPSBuZXcgQ2FwdGlvbkFjY2Vzc2liaWxpdHkoJ0lNUExFTUVOVFNfQUNDRVNTSUJJTElUWV9GRUFUVVJFUycpO1xuXG4gIC8qKiBBIHZhbHVlIG5vdCB5ZXQgbW9kZWxsZWQgYnkgQVdTIENESy4gKi9cbiAgcHVibGljIHN0YXRpYyBvZih2YWx1ZTogc3RyaW5nKTogQ2FwdGlvbkFjY2Vzc2liaWxpdHkge1xuICAgIHJldHVybiBuZXcgQ2FwdGlvbkFjY2Vzc2liaWxpdHkodmFsdWUpO1xuICB9XG5cbiAgLyoqIFRoZSB1bmRlcmx5aW5nIHN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gQ2xvdWRGb3JtYXRpb24uICovXG4gIHB1YmxpYyByZWFkb25seSB2YWx1ZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEEgREFTSCByb2xlIHRvIGFzc2lnbiB0byBhIGNhcHRpb25zIG91dHB1dCAodXNlZCB3aGVuIHRoZSBvdXRwdXQgY2FycmllcyBEVkIgREFTSCBhY2Nlc3NpYmlsaXR5XG4gKiBzaWduYWxpbmcpLlxuICovXG5leHBvcnQgY2xhc3MgQ2FwdGlvbkRhc2hSb2xlIHtcbiAgLyoqIEFsdGVybmF0ZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTFRFUk5BVEUgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdBTFRFUk5BVEUnKTtcbiAgLyoqIENhcHRpb24uICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0FQVElPTiA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ0NBUFRJT04nKTtcbiAgLyoqIENvbW1lbnRhcnkuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ09NTUVOVEFSWSA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ0NPTU1FTlRBUlknKTtcbiAgLyoqIERlc2NyaXB0aW9uLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IERFU0NSSVBUSU9OID0gbmV3IENhcHRpb25EYXNoUm9sZSgnREVTQ1JJUFRJT04nKTtcbiAgLyoqIER1Yi4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBEVUIgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdEVUInKTtcbiAgLyoqIEVhc3kgcmVhZGVyLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEVBU1lSRUFERVIgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdFQVNZUkVBREVSJyk7XG4gIC8qKiBFbWVyZ2VuY3kuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRU1FUkdFTkNZID0gbmV3IENhcHRpb25EYXNoUm9sZSgnRU1FUkdFTkNZJyk7XG4gIC8qKiBGb3JjZWQgc3VidGl0bGUuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRk9SQ0VEX1NVQlRJVExFID0gbmV3IENhcHRpb25EYXNoUm9sZSgnRk9SQ0VELVNVQlRJVExFJyk7XG4gIC8qKiBLYXJhb2tlLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEtBUkFPS0UgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdLQVJBT0tFJyk7XG4gIC8qKiBNYWluLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BSU4gPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdNQUlOJyk7XG4gIC8qKiBNZXRhZGF0YS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBNRVRBREFUQSA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ01FVEFEQVRBJyk7XG4gIC8qKiBTdWJ0aXRsZS4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVUJUSVRMRSA9IG5ldyBDYXB0aW9uRGFzaFJvbGUoJ1NVQlRJVExFJyk7XG4gIC8qKiBTdXBwbGVtZW50YXJ5LiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVUFBMRU1FTlRBUlkgPSBuZXcgQ2FwdGlvbkRhc2hSb2xlKCdTVVBQTEVNRU5UQVJZJyk7XG5cbiAgLyoqIEEgdmFsdWUgbm90IHlldCBtb2RlbGxlZCBieSBBV1MgQ0RLLiAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHZhbHVlOiBzdHJpbmcpOiBDYXB0aW9uRGFzaFJvbGUge1xuICAgIHJldHVybiBuZXcgQ2FwdGlvbkRhc2hSb2xlKHZhbHVlKTtcbiAgfVxuXG4gIC8qKiBUaGUgdW5kZXJseWluZyBzdHJpbmcgdmFsdWUgcGFzc2VkIHRvIENsb3VkRm9ybWF0aW9uLiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhIGNhcHRpb24gZW5jb2RlIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdGlvbkVuY29kZVByb3BzIHtcbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgY2FwdGlvbiBlbmNvZGUuXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY2FwdGlvbiBzZWxlY3RvciBpbiB0aGUgaW5wdXQgdG8gdXNlIGFzIHRoZSBzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBjYXB0aW9uU2VsZWN0b3JOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgb3V0cHV0IGNhcHRpb24gZm9ybWF0LiBVc2UgdGhlIGBDYXB0aW9uRGVzdGluYXRpb25gIGZhY3RvcnkgbWV0aG9kcyAoZS5nLlxuICAgKiBgQ2FwdGlvbkRlc3RpbmF0aW9uLmJ1cm5JbigpYCwgYC53ZWJ2dHQoKWAsIGAuZW1iZWRkZWQoKWApLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzdGluYXRpb246IENhcHRpb25EZXN0aW5hdGlvbjtcbiAgLyoqXG4gICAqIFRoZSBJU08gNjM5LTIgbGFuZ3VhZ2UgY29kZSBmb3IgdGhlIGNhcHRpb25zIChlLmcuICdlbmcnLCAnc3BhJykuXG4gICAqIEBkZWZhdWx0IC0gbm8gbGFuZ3VhZ2UgY29kZVxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VDb2RlPzogc3RyaW5nO1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2YgdGhlIGNhcHRpb25zIChlLmcuICdFbmdsaXNoJywgJ1NwYW5pc2gnKS5cbiAgICogQGRlZmF1bHQgLSBubyBsYW5ndWFnZSBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbGFuZ3VhZ2VEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhpcyBjYXB0aW9uIHRyYWNrIGltcGxlbWVudHMgYWNjZXNzaWJpbGl0eSBmZWF0dXJlcy5cbiAgICogQGRlZmF1bHQgLSBUaGUgY2FwdGlvbnMgZG8gbm90IGltcGxlbWVudCBhY2Nlc3NpYmlsaXR5IGZlYXR1cmVzXG4gICAqL1xuICByZWFkb25seSBhY2Nlc3NpYmlsaXR5PzogQ2FwdGlvbkFjY2Vzc2liaWxpdHk7XG4gIC8qKlxuICAgKiBUaGUgREFTSCByb2xlcyB0byBhc3NpZ24gdG8gdGhpcyBjYXB0aW9ucyBvdXRwdXQuIEFwcGxpZXMgb25seSB3aGVuIHRoZSBvdXRwdXQgaXMgY29uZmlndXJlZFxuICAgKiBmb3IgRFZCIERBU0ggYWNjZXNzaWJpbGl0eSBzaWduYWxpbmcuXG4gICAqIEBkZWZhdWx0IC0gbm8gREFTSCByb2xlc1xuICAgKi9cbiAgcmVhZG9ubHkgY2FwdGlvbkRhc2hSb2xlcz86IENhcHRpb25EYXNoUm9sZVtdO1xuICAvKipcbiAgICogRFZCIERBU0ggYWNjZXNzaWJpbGl0eSBzaWduYWxpbmcgZm9yIHRoaXMgY2FwdGlvbnMgb3V0cHV0LlxuICAgKiBAZGVmYXVsdCAtIG5vIERWQiBEQVNIIGFjY2Vzc2liaWxpdHkgc2lnbmFsaW5nXG4gICAqL1xuICByZWFkb25seSBkdmJEYXNoQWNjZXNzaWJpbGl0eT86IER2YkRhc2hBY2Nlc3NpYmlsaXR5O1xufVxuXG4vKiogQGludGVybmFsICovXG5jbGFzcyBDYXB0aW9uRW5jb2RlQ29uZmlndXJhdGlvbiBleHRlbmRzIEVuY29kZUNvbmZpZ3VyYXRpb24ge1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb3BzOiBDYXB0aW9uRW5jb2RlUHJvcHM7XG5cbiAgY29uc3RydWN0b3IocHJvcHM6IENhcHRpb25FbmNvZGVQcm9wcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5uYW1lID0gcHJvcHMubmFtZTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIH1cblxuICBwdWJsaWMgX2hhc0V4cGxpY2l0RnJhbWVyYXRlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlOyAvLyBOb3QgYXBwbGljYWJsZSBmb3IgY2FwdGlvbnNcbiAgfVxuXG4gIHB1YmxpYyBfYmluZFZpZGVvKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZEF1ZGlvKCk6IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBfYmluZENhcHRpb24oKTogQ2ZuQ2hhbm5lbC5DYXB0aW9uRGVzY3JpcHRpb25Qcm9wZXJ0eSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIGNhcHRpb25TZWxlY3Rvck5hbWU6IHRoaXMucHJvcHMuY2FwdGlvblNlbGVjdG9yTmFtZSxcbiAgICAgIGRlc3RpbmF0aW9uU2V0dGluZ3M6IHRoaXMucHJvcHMuZGVzdGluYXRpb24uX2JpbmQoKSxcbiAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5wcm9wcy5sYW5ndWFnZUNvZGUsXG4gICAgICBsYW5ndWFnZURlc2NyaXB0aW9uOiB0aGlzLnByb3BzLmxhbmd1YWdlRGVzY3JpcHRpb24sXG4gICAgICBhY2Nlc3NpYmlsaXR5OiAodGhpcy5wcm9wcy5hY2Nlc3NpYmlsaXR5ID8/IENhcHRpb25BY2Nlc3NpYmlsaXR5LkRPRVNfTk9UX0lNUExFTUVOVF9BQ0NFU1NJQklMSVRZX0ZFQVRVUkVTKS52YWx1ZSxcbiAgICAgIGNhcHRpb25EYXNoUm9sZXM6IHRoaXMucHJvcHMuY2FwdGlvbkRhc2hSb2xlcz8ubWFwKHIgPT4gci52YWx1ZSksXG4gICAgICBkdmJEYXNoQWNjZXNzaWJpbGl0eTogdGhpcy5wcm9wcy5kdmJEYXNoQWNjZXNzaWJpbGl0eT8udmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBfdmlkZW9Db2RlY1R5cGUoKTogdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIF9hdWRpb0NvZGVjVHlwZSgpOiB1bmRlZmluZWQge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgX2dyYW50UmVhZChyb2xlOiBJUm9sZSk6IHZvaWQge1xuICAgIHRoaXMucHJvcHMuZGVzdGluYXRpb24uX2dyYW50UmVhZChyb2xlKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBfaXNJbkJhbmRDYXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnByb3BzLmRlc3RpbmF0aW9uLl9pc0luQmFuZCgpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIF9pc0VtYmVkZGVkQ2FwdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wcy5kZXN0aW5hdGlvbi5faXNFbWJlZGRlZCgpO1xuICB9XG59XG4iXX0=
|