@rocketshow/designer 1.35.0 → 1.36.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/esm2022/lib/fixture-pool/fixture-pool.component.mjs +8 -10
- package/esm2022/lib/preview/preview.component.mjs +1 -3
- package/esm2022/lib/services/fixture.service.mjs +84 -30
- package/esm2022/lib/services/preset.service.mjs +14 -13
- package/esm2022/lib/services/preview.service.mjs +25 -57
- package/esm2022/lib/services/project-load.service.mjs +16 -19
- package/fesm2022/rocketshow-designer.mjs +142 -126
- package/fesm2022/rocketshow-designer.mjs.map +1 -1
- package/lib/services/fixture.service.d.ts +5 -0
- package/lib/services/preset.service.d.ts +1 -0
- package/lib/services/preview.service.d.ts +0 -1
- package/package.json +1 -1
- package/rocketshow-designer-1.36.0.tgz +0 -0
- package/rocketshow-designer-1.35.0.tgz +0 -0
|
@@ -113,29 +113,34 @@ export class PreviewService {
|
|
|
113
113
|
getFixtureIndex(preset, fixtureUuid, pixelKey) {
|
|
114
114
|
let index = 0;
|
|
115
115
|
const countedFirstDmxChannelPixelKey = [];
|
|
116
|
+
if (!this.presetService.getPresetFixture(preset, fixtureUuid, pixelKey)) {
|
|
117
|
+
// fixture is not in preset
|
|
118
|
+
return undefined;
|
|
119
|
+
}
|
|
116
120
|
// Loop over the global fixtures to retain the order
|
|
117
121
|
for (const projectFixture of this.projectService.project.presetFixtures) {
|
|
118
|
-
const presetFixture
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
122
|
+
for (const presetFixture of preset.fixtures) {
|
|
123
|
+
if (this.presetService.fixtureUuidAndPixelKeyEquals(projectFixture.fixtureUuid, presetFixture.fixtureUuid, projectFixture.pixelKey, presetFixture.pixelKey)) {
|
|
124
|
+
if (this.presetService.fixtureUuidAndPixelKeyEquals(projectFixture.fixtureUuid, fixtureUuid, projectFixture.pixelKey, pixelKey)) {
|
|
125
|
+
return index;
|
|
126
|
+
}
|
|
127
|
+
const fixture = this.fixtureService.getFixtureByUuid(projectFixture.fixtureUuid);
|
|
128
|
+
const firstDmxChannelAndFixtureUuid = {
|
|
129
|
+
firstDmxChannel: fixture.dmxFirstChannel,
|
|
130
|
+
pixelKey: projectFixture.pixelKey,
|
|
131
|
+
};
|
|
132
|
+
const exists = countedFirstDmxChannelPixelKey.some((item) => item.firstDmxChannel === firstDmxChannelAndFixtureUuid.firstDmxChannel &&
|
|
133
|
+
((!item.pixelKey && !firstDmxChannelAndFixtureUuid.pixelKey) || item.pixelKey === firstDmxChannelAndFixtureUuid.pixelKey));
|
|
134
|
+
// don't count fixtures on the same channel as already counted ones
|
|
135
|
+
if (!exists) {
|
|
136
|
+
index++;
|
|
137
|
+
countedFirstDmxChannelPixelKey.push(firstDmxChannelAndFixtureUuid);
|
|
138
|
+
}
|
|
139
|
+
break;
|
|
140
|
+
}
|
|
137
141
|
}
|
|
138
142
|
}
|
|
143
|
+
return undefined;
|
|
139
144
|
}
|
|
140
145
|
getPresetIntensity(preset, timeMillis) {
|
|
141
146
|
// When fading is in progress (on preset or scene-level), the current preset does not
|
|
@@ -368,43 +373,6 @@ export class PreviewService {
|
|
|
368
373
|
}
|
|
369
374
|
return calculatedFixtures;
|
|
370
375
|
}
|
|
371
|
-
setUniverseValues(fixtures, masterDimmerValue) {
|
|
372
|
-
// TODO only, if monitoring is enabled
|
|
373
|
-
return;
|
|
374
|
-
// // Reset all DMX universes
|
|
375
|
-
// for (const universe of this.universeService.universes) {
|
|
376
|
-
// universe.channelValues = [];
|
|
377
|
-
// for (let i = 0; i < 512; i++) {
|
|
378
|
-
// universe.channelValues.push(0);
|
|
379
|
-
// }
|
|
380
|
-
// }
|
|
381
|
-
// // loop over each fixture
|
|
382
|
-
// fixtures.forEach((channelValues: FixtureChannelValue[], cachedFixture: CachedFixture) => {
|
|
383
|
-
// // TODO Get the correct universe for this fixture
|
|
384
|
-
// const universe: Universe = this.universeService.getUniverseByUuid(cachedFixture.fixture.dmxUniverseUuid);
|
|
385
|
-
// // loop over each channel for this fixture
|
|
386
|
-
// for (let channelIndex = 0; channelIndex < cachedFixture.mode.channels.length; channelIndex++) {
|
|
387
|
-
// const channelObj = cachedFixture.mode.channels[channelIndex];
|
|
388
|
-
// if (typeof channelObj === 'string') {
|
|
389
|
-
// const channelName = channelObj;
|
|
390
|
-
// // match this mode channel with a channel value
|
|
391
|
-
// for (const channelValue of channelValues) {
|
|
392
|
-
// const channel = this.fixtureService.getChannelByName(cachedFixture, channelName);
|
|
393
|
-
// if (channel && channel.channel) {
|
|
394
|
-
// const fineIndex = channel.channel.fineChannelAliases.indexOf(channelName);
|
|
395
|
-
// if (channel.name === channelValue.channelName || fineIndex > -1) {
|
|
396
|
-
// const universeChannel = cachedFixture.fixture.dmxFirstChannel + channelIndex;
|
|
397
|
-
// const dmxValue =
|
|
398
|
-
// Math.floor(channelValue.value / Math.pow(256, channel.channel.fineChannelAliases.length - (fineIndex + 1))) % 256;
|
|
399
|
-
// // TODO
|
|
400
|
-
// break;
|
|
401
|
-
// }
|
|
402
|
-
// }
|
|
403
|
-
// }
|
|
404
|
-
// }
|
|
405
|
-
// }
|
|
406
|
-
// });
|
|
407
|
-
}
|
|
408
376
|
fixtureIsSelected(uuid, pixelKey, presets) {
|
|
409
377
|
for (const preset of presets) {
|
|
410
378
|
if (this.presetService.getPresetFixture(preset.preset, uuid, pixelKey)) {
|
|
@@ -494,4 +462,4 @@ export class PreviewService {
|
|
|
494
462
|
providedIn: 'root',
|
|
495
463
|
}]
|
|
496
464
|
}], () => [{ type: i1.PresetService }, { type: i2.FixtureService }, { type: i3.SceneService }, { type: i4.TimelineService }, { type: i5.ProjectService }], null); })();
|
|
497
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmV2aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBS3JELE1BQU0sT0FBTyxjQUFjO0lBWXpCLFlBQ1UsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFKOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FB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QUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7K0VBcG9CVSxjQUFjO3VFQUFkLGNBQWMsV0FBZCxjQUFjLG1CQUZiLE1BQU07O2lGQUVQLGNBQWM7Y0FIMUIsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBFZmZlY3RDdXJ2ZSB9IGZyb20gJy4uL21vZGVscy9lZmZlY3QtY3VydmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IFByZXNldFJlZ2lvblNjZW5lIH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldC1yZWdpb24tc2NlbmUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi9wcmVzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjZW5lU2VydmljZSB9IGZyb20gJy4vc2NlbmUuc2VydmljZSc7XG5pbXBvcnQgeyBUaW1lbGluZVNlcnZpY2UgfSBmcm9tICcuL3RpbWVsaW5lLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJldmlld1NlcnZpY2Uge1xuICBwdWJsaWMgZG9VcGRhdGVGaXh0dXJlU2V0dXA6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBzY2VuZTogVEhSRUUuU2NlbmU7XG5cbiAgcHJpdmF0ZSBzdGFnZU1lc2hlczogVEhSRUUuTWVzaFtdID0gW107XG4gIHByaXZhdGUgc3RhZ2VNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7XG4gICAgY29sb3I6IDB4MGQwZDBkLFxuICAgIC8vIHJvdWdobmVzczogMC41LFxuICAgIC8vIG1ldGFsbmVzczogMC41LFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGdldEFscmVhZHlDYWxjdWxhdGVkRml4dHVyZShmaXh0dXJlczogQ2FjaGVkRml4dHVyZVtdLCBmaXh0dXJlSW5kZXg6IG51bWJlcik6IENhY2hlZEZpeHR1cmUge1xuICAgIC8vIEhhcyB0aGlzIGZpeHR1cmUgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgKHNhbWUgdW5pdmVyc2UgYW5kIGRteCBzdGFydCBhZGRyZXNzIGFzIGEgZml4dHVyZSBiZWZvcmUpXG4gICAgLy8gLS0+IHJldHVybiBpdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlID0gZml4dHVyZXNbaV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgJiZcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhGaXJzdENoYW5uZWxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlZEZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVzZXRzKHRpbWVNaWxsaXM6IG51bWJlcik6IFByZXNldFJlZ2lvblNjZW5lW10ge1xuICAgIC8vIEdldCByZWxldmFudCBwcmVzZXRzIGluIGNvcnJlY3Qgb3JkZXIgdG8gcHJvY2VzcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc2NlbmUsIGlmIGF2YWlsYWJsZVxuICAgIGxldCBwcmVzZXRzOiBQcmVzZXRSZWdpb25TY2VuZVtdID0gW107XG5cbiAgICBpZiAodGhpcy50aW1lbGluZVNlcnZpY2UucGxheVN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIC8vIE9ubHkgdXNlIGFjdGl2ZSBwcmVzZXRzIGluIGN1cnJlbnQgcmVnaW9uc1xuICAgICAgcHJlc2V0cyA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLmdldFByZXNldHNJblRpbWUodGltZU1pbGxpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCkge1xuICAgICAgICAvLyBPbmx5IHByZXZpZXcgdGhlIHNlbGVjdGVkIHByZXNldFxuICAgICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByZXZpZXcgdGhlIHNlbGVjdGVkIHNjZW5lc1xuICAgICAgICBmb3IgKGxldCBzY2VuZUluZGV4ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNjZW5lcy5sZW5ndGggLSAxOyBzY2VuZUluZGV4ID49IDA7IHNjZW5lSW5kZXgtLSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2NlbmUgb2YgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMpIHtcbiAgICAgICAgICAgIGlmIChzY2VuZS51dWlkID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2NlbmVzW3NjZW5lSW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcHJlc2V0SW5kZXggPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGggLSAxOyBwcmVzZXRJbmRleCA+PSAwOyBwcmVzZXRJbmRleC0tKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcmVzZXRVdWlkIG9mIHNjZW5lLnByZXNldFV1aWRzKSB7XG4gICAgICAgICAgICAgICAgICAvLyBMb29wIG92ZXIgdGhlIHByZXNldHMgaW4gdGhlIHByZXNldCBzZXJ2aWNlIHRvIHJldGFpbiB0aGUgcHJlc2V0IG9yZGVyXG4gICAgICAgICAgICAgICAgICBpZiAocHJlc2V0VXVpZCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbcHJlc2V0SW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1twcmVzZXRJbmRleF0sIHVuZGVmaW5lZCwgc2NlbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXNldHM7XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZShcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBjaGFubmVsVmFsdWU6IEZpeHR1cmVDaGFubmVsVmFsdWUsXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMFxuICApIHtcbiAgICBsZXQgbmV3VmFsdWU6IG51bWJlciA9IGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICBsZXQgZXhpc3RpbmdWYWx1ZTogbnVtYmVyID0gZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGludGVuc2l0eVBlcmNlbnRhZ2UgPCAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIG1peCBhIHBvc3NpYmx5IGV4aXN0aW5nIHZhbHVlIChvciB0aGUgZGVmYXVsdCB2YWx1ZSAwKSB3aXRoIHRoZSBuZXcgdmFsdWUgKGZhZGluZylcblxuICAgICAgLy8gR2V0IHRoZSBleGlzdGVudCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eVxuICAgICAgZm9yIChjb25zdCBleGlzdGluZ0NoYW5uZWxWYWx1ZSBvZiBleGlzdGluZ0NoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXN0aW5nVmFsdWUgPSBleGlzdGluZ0NoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNaXggdGhlIGV4aXN0aW5nIHZhbHVlIHdpdGggdGhlIG5ldyB2YWx1ZVxuICAgICAgbmV3VmFsdWUgPSBleGlzdGluZ1ZhbHVlICogKDEgLSBpbnRlbnNpdHlQZXJjZW50YWdlKSArIG5ld1ZhbHVlICogaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGV4aXN0ZW50IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSAmJlxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZFxuICAgICAgKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3IHZhbHVlXG4gICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZml4dHVyZSBpbmRleCBpbnNpZGUgdGhlIHBhc3NlZCBwcmVzZXQgKHVzZWQgZm9yIGNoYXNpbmcpXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUluZGV4KHByZXNldDogUHJlc2V0LCBmaXh0dXJlVXVpZDogc3RyaW5nLCBwaXhlbEtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleTogYW55W10gPSBbXTtcblxuICAgIC8vIExvb3Agb3ZlciB0aGUgZ2xvYmFsIGZpeHR1cmVzIHRvIHJldGFpbiB0aGUgb3JkZXJcbiAgICBmb3IgKGNvbnN0IHByb2plY3RGaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRGaXh0dXJlcykge1xuICAgICAgY29uc3QgcHJlc2V0Rml4dHVyZSA9IHRoaXMucHJlc2V0U2VydmljZS5nZXRQcmVzZXRGaXh0dXJlKHByZXNldCwgZml4dHVyZVV1aWQsIHBpeGVsS2V5KTtcblxuICAgICAgaWYgKCFwcmVzZXRGaXh0dXJlKSB7XG4gICAgICAgIC8vIE5vdCBmb3VuZCBpbiB0aGUgcHJlc2V0XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0Rml4dHVyZS5maXh0dXJlVXVpZCA9PT0gZml4dHVyZVV1aWQgJiYgKCghcHJvamVjdEZpeHR1cmUucGl4ZWxLZXkgJiYgIXBpeGVsS2V5KSB8fCBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSA9PT0gcGl4ZWxLZXkpKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcm9qZWN0Rml4dHVyZS5maXh0dXJlVXVpZCk7XG4gICAgICBjb25zdCBmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZCA9IHtcbiAgICAgICAgZmlyc3REbXhDaGFubmVsOiBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCxcbiAgICAgICAgcGl4ZWxLZXk6IHByb2plY3RGaXh0dXJlLnBpeGVsS2V5LFxuICAgICAgfTtcblxuICAgICAgY29uc3QgZXhpc3RzID0gY291bnRlZEZpcnN0RG14Q2hhbm5lbFBpeGVsS2V5LnNvbWUoXG4gICAgICAgIChpdGVtKSA9PlxuICAgICAgICAgIGl0ZW0uZmlyc3REbXhDaGFubmVsID09PSBmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZC5maXJzdERteENoYW5uZWwgJiZcbiAgICAgICAgICAoKCFpdGVtLnBpeGVsS2V5ICYmICFmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZC5waXhlbEtleSkgfHwgaXRlbS5waXhlbEtleSA9PT0gZmlyc3REbXhDaGFubmVsQW5kRml4dHVyZVV1aWQucGl4ZWxLZXkpXG4gICAgICApO1xuXG4gICAgICAvLyBkb24ndCBjb3VudCBmaXh0dXJlcyBvbiB0aGUgc2FtZSBjaGFubmVsIGFzIGFscmVhZHkgY291bnRlZCBvbmVzXG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICBpbmRleCsrO1xuICAgICAgICBjb3VudGVkRmlyc3REbXhDaGFubmVsUGl4ZWxLZXkucHVzaChmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVzZXRJbnRlbnNpdHkocHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSwgdGltZU1pbGxpczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAvLyBXaGVuIGZhZGluZyBpcyBpbiBwcm9ncmVzcyAob24gcHJlc2V0IG9yIHNjZW5lLWxldmVsKSwgdGhlIGN1cnJlbnQgcHJlc2V0IGRvZXMgbm90XG4gICAgLy8gZnVsbHkgY292ZXIgdW5kZXJseWluZyB2YWx1ZXMuXG4gICAgLy8gLT4gMCA9IG5vIGNvdmVyaW5nIGF0IGFsbCwgMSA9IGZ1bGx5IGNvdmVyIChubyBmYWRpbmcpXG4gICAgbGV0IGludGVuc2l0eVBlcmNlbnRhZ2VTY2VuZSA9IDE7XG4gICAgbGV0IGludGVuc2l0eVBlcmNlbnRhZ2VQcmVzZXQgPSAxO1xuICAgIGxldCBpbnRlbnNpdHlQZXJjZW50YWdlID0gMTtcblxuICAgIGlmIChwcmVzZXQucmVnaW9uICYmIHByZXNldC5zY2VuZSkge1xuICAgICAgLy8gRmFkZSBvdXQgaXMgc3Ryb25nZXIgdGhhbiBmYWRlIGluIChpZiB0aGV5IG92ZXJsYXApXG5cbiAgICAgIC8vIFRha2UgYXdheSBpbnRlbnNpdHkgZm9yIHNjZW5lIGZhZGluZ1xuICAgICAgY29uc3Qgc2NlbmVTdGFydE1pbGxpcyA9IHByZXNldC5zY2VuZS5mYWRlSW5QcmUgPyBwcmVzZXQucmVnaW9uLnN0YXJ0TWlsbGlzIC0gcHJlc2V0LnNjZW5lLmZhZGVJbk1pbGxpcyA6IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXM7XG4gICAgICBjb25zdCBzY2VuZUVuZE1pbGxpcyA9IHByZXNldC5zY2VuZS5mYWRlT3V0UG9zdCA/IHByZXNldC5yZWdpb24uZW5kTWlsbGlzICsgcHJlc2V0LnNjZW5lLmZhZGVPdXRNaWxsaXMgOiBwcmVzZXQucmVnaW9uLmVuZE1pbGxpcztcblxuICAgICAgaWYgKHRpbWVNaWxsaXMgPiBzY2VuZUVuZE1pbGxpcyAtIHByZXNldC5zY2VuZS5mYWRlT3V0TWlsbGlzICYmIHRpbWVNaWxsaXMgPCBzY2VuZUVuZE1pbGxpcykge1xuICAgICAgICAvLyBTY2VuZSBmYWRlcyBvdXRcbiAgICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gKHNjZW5lRW5kTWlsbGlzIC0gdGltZU1pbGxpcykgLyBwcmVzZXQuc2NlbmUuZmFkZU91dE1pbGxpcztcbiAgICAgIH0gZWxzZSBpZiAodGltZU1pbGxpcyA8IHNjZW5lU3RhcnRNaWxsaXMgKyBwcmVzZXQuc2NlbmUuZmFkZUluTWlsbGlzICYmIHRpbWVNaWxsaXMgPiBzY2VuZVN0YXJ0TWlsbGlzKSB7XG4gICAgICAgIC8vIFNjZW5lIGZhZGVzIGluXG4gICAgICAgIGludGVuc2l0eVBlcmNlbnRhZ2VTY2VuZSA9ICh0aW1lTWlsbGlzIC0gc2NlbmVTdGFydE1pbGxpcykgLyBwcmVzZXQuc2NlbmUuZmFkZUluTWlsbGlzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcmVzZXQucmVnaW9uICYmIHByZXNldC5wcmVzZXQpIHtcbiAgICAgIC8vIFRha2UgYXdheSBpbnRlbnNpdHkgZm9yIHByZXNldCBmYWRpbmdcbiAgICAgIGxldCBwcmVzZXRTdGFydE1pbGxpcyA9XG4gICAgICAgIHByZXNldC5wcmVzZXQuc3RhcnRNaWxsaXMgPT09IHVuZGVmaW5lZCA/IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgOiBwcmVzZXQucmVnaW9uLnN0YXJ0TWlsbGlzICsgcHJlc2V0LnByZXNldC5zdGFydE1pbGxpcztcblxuICAgICAgbGV0IHByZXNldEVuZE1pbGxpcyA9XG4gICAgICAgIHByZXNldC5wcmVzZXQuZW5kTWlsbGlzID09PSB1bmRlZmluZWQgPyBwcmVzZXQucmVnaW9uLmVuZE1pbGxpcyA6IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LmVuZE1pbGxpcztcblxuICAgICAgLy8gZXh0ZW5kIHRoZSBydW5uaW5nIHRpbWUsIGlmIGZhZGluZyBpcyBkb25lIG91dHNpZGUgdGhlIGJvdW5kYXJpZXNcbiAgICAgIHByZXNldFN0YXJ0TWlsbGlzIC09IHByZXNldC5wcmVzZXQuZmFkZUluUHJlID8gcHJlc2V0LnByZXNldC5mYWRlSW5NaWxsaXMgOiAwO1xuICAgICAgcHJlc2V0RW5kTWlsbGlzICs9IHByZXNldC5wcmVzZXQuZmFkZU91dFBvc3QgPyBwcmVzZXQucHJlc2V0LmZhZGVPdXRNaWxsaXMgOiAwO1xuXG4gICAgICBpZiAodGltZU1pbGxpcyA+IHByZXNldEVuZE1pbGxpcyAtIHByZXNldC5wcmVzZXQuZmFkZU91dE1pbGxpcyAmJiB0aW1lTWlsbGlzIDwgcHJlc2V0RW5kTWlsbGlzKSB7XG4gICAgICAgIC8vIFByZXNldCBmYWRlcyBvdXRcbiAgICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldCA9IChwcmVzZXRFbmRNaWxsaXMgLSB0aW1lTWlsbGlzKSAvIHByZXNldC5wcmVzZXQuZmFkZU91dE1pbGxpcztcbiAgICAgIH0gZWxzZSBpZiAodGltZU1pbGxpcyA8IHByZXNldFN0YXJ0TWlsbGlzICsgcHJlc2V0LnByZXNldC5mYWRlSW5NaWxsaXMgJiYgdGltZU1pbGxpcyA+IHByZXNldFN0YXJ0TWlsbGlzKSB7XG4gICAgICAgIC8vIFByZXNldCBmYWRlcyBpblxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlUHJlc2V0ID0gKHRpbWVNaWxsaXMgLSBwcmVzZXRTdGFydE1pbGxpcykgLyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcztcbiAgICAgIH1cblxuICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZSA9IGludGVuc2l0eVBlcmNlbnRhZ2VTY2VuZSAqIGludGVuc2l0eVBlcmNlbnRhZ2VQcmVzZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVuc2l0eVBlcmNlbnRhZ2U7XG4gIH1cblxuICBwcml2YXRlIG1peENhcGFiaWxpdHlWYWx1ZXMoXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICBsZXQgaGFzQ29sb3IgPSBmYWxzZTtcblxuICAgIC8vIG1peCB0aGUgcHJlc2V0IGNhcGFiaWxpdHkgdmFsdWVzXG4gICAgZm9yIChjb25zdCBwcmVzZXRDYXBhYmlsaXR5VmFsdWUgb2YgcHJlc2V0LnByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcykge1xuICAgICAgZm9yIChjb25zdCBjYWNoZWRDaGFubmVsIG9mIGNhY2hlZEZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwuY2hhbm5lbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbENhcGFiaWxpdHkgb2YgY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5jYXBhYmlsaXRpZXNNYXRjaChcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudHlwZSxcbiAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUsXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLmNvbG9yLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuY29sb3IsXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLndoZWVsLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LndoZWVsTmFtZSxcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUucHJvZmlsZVV1aWQsXG4gICAgICAgICAgICAgICAgY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIC8vIHRoZSBjYXBhYmlsaXRpZXMgbWF0Y2ggLT4gYXBwbHkgdGhlIHZhbHVlLCBpZiBwb3NzaWJsZVxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuSW50ZW5zaXR5IHx8XG4gICAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudHlwZSA9PT0gRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5KSAmJlxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2UgPj0gMFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpbnRlbnNpdHkgYW5kIGNvbG9ySW50ZW5zaXR5IChkaW1tZXIgYW5kIGNvbG9yKVxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlUGVyY2VudGFnZSA9IHByZXNldENhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2U7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gMDtcblxuICAgICAgICAgICAgICAgIC8vIGJyaWdodG5lc3MgcHJvcGVydHlcbiAgICAgICAgICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAvLyB0aGUgb25seSBjYXBhYmlsaXR5IGluIHRoaXMgY2hhbm5lbFxuICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiB2YWx1ZVBlcmNlbnRhZ2U7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChwcmVzZXRDYXBhYmlsaXR5VmFsdWUudHlwZSA9PT0gRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gbW9yZSB0aGFuIG9uZSBjYXBhYmlsaXR5IGluIHRoZSBjaGFubmVsXG4gICAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5icmlnaHRuZXNzID09PSAnb2ZmJyAmJiB2YWx1ZVBlcmNlbnRhZ2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNoYW5uZWxDYXBhYmlsaXR5LmNlbnRlclZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3NTdGFydCA9PT0gJ2RhcmsnIHx8IGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuYnJpZ2h0bmVzc1N0YXJ0ID09PSAnb2ZmJykgJiZcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5icmlnaHRuZXNzRW5kID09PSAnYnJpZ2h0J1xuICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVsxXSAtIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pICogdmFsdWVQZXJjZW50YWdlICtcbiAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCBpbnRlbnNpdHlQZXJjZW50YWdlLCBkZWZhdWx0VmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcmVzZXRDYXBhYmlsaXR5VmFsdWUudHlwZSA9PT0gRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgaGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIChwcmVzZXRDYXBhYmlsaXR5VmFsdWUudHlwZSA9PT0gRml4dHVyZUNhcGFiaWxpdHlUeXBlLlBhbiB8fCBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudHlwZSA9PT0gRml4dHVyZUNhcGFiaWxpdHlUeXBlLlRpbHQpICYmXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA+PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYWNoZWRDaGFubmVsLm1heFZhbHVlICogcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIDEpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuV2hlZWxTbG90ICYmXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyID09PSBwcmVzZXRDYXBhYmlsaXR5VmFsdWUuc2xvdE51bWJlclxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyB3aGVlbCBzbG90IChjb2xvciwgZ29ibywgZXRjLilcbiAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2hhbm5lbENhcGFiaWxpdHkuY2VudGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrLCB3aGV0aGVyIHdlIGp1c3Qgc2V0IGEgY29sb3Igd2hlZWwgdmFsdWVcbiAgICAgICAgICAgICAgICBpZiAoY2hhbm5lbENhcGFiaWxpdHkud2hlZWxJc0NvbG9yKSB7XG4gICAgICAgICAgICAgICAgICBoYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYXBwcm94aW1hdGUgdGhlIGNvbG9yIGZyb20gYSBjb2xvciBvciBhIGRpZmZlcmVudCBjb2xvciB3aGVlbCwgaWYgbmVjZXNzYXJ5XG4gICAgICAgIGlmICghaGFzQ29sb3IgJiYgY2FjaGVkQ2hhbm5lbC5jb2xvcldoZWVsKSB7XG4gICAgICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMucHJlc2V0U2VydmljZS5nZXRBcHByb3hpbWF0ZWRDb2xvcldoZWVsQ2FwYWJpbGl0eShwcmVzZXQucHJlc2V0LCBjYWNoZWRDaGFubmVsKTtcblxuICAgICAgICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICAgICAgICAvLyB3ZSBmb3VuZCBhbiBhcHByb3hpbWF0ZWQgY29sb3IgaW4gdGhlIGF2YWlsYWJsZSB3aGVlbCBjaGFubmVsXG4gICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FwYWJpbGl0eS5jZW50ZXJWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtaXhDaGFubmVsVmFsdWVzKFxuICAgIHByZXNldDogUHJlc2V0UmVnaW9uU2NlbmUsXG4gICAgY2FjaGVkRml4dHVyZTogQ2FjaGVkRml4dHVyZSxcbiAgICB2YWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBpbnRlbnNpdHlQZXJjZW50YWdlOiBudW1iZXJcbiAgKSB7XG4gICAgLy8gbWl4IHRoZSBwcmVzZXQgY2hhbm5lbCB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgaWYgKGNhY2hlZENoYW5uZWwuY2hhbm5lbCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBwcmVzZXQucHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzKSB7XG4gICAgICAgICAgaWYgKGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkID09PSBjaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgJiYgY2FjaGVkQ2hhbm5lbC5uYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgY2hhbm5lbFZhbHVlLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1peEVmZmVjdHMoXG4gICAgdGltZU1pbGxpczogbnVtYmVyLFxuICAgIGZpeHR1cmVJbmRleDogbnVtYmVyLFxuICAgIHByZXNldDogUHJlc2V0UmVnaW9uU2NlbmUsXG4gICAgY2FjaGVkRml4dHVyZTogQ2FjaGVkRml4dHVyZSxcbiAgICB2YWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBpbnRlbnNpdHlQZXJjZW50YWdlOiBudW1iZXJcbiAgKSB7XG4gICAgZm9yIChjb25zdCBlZmZlY3Qgb2YgcHJlc2V0LnByZXNldC5lZmZlY3RzKSB7XG4gICAgICBpZiAoZWZmZWN0LnZpc2libGUpIHtcbiAgICAgICAgLy8gRWZmZWN0Q3VydmVcbiAgICAgICAgaWYgKGVmZmVjdCBpbnN0YW5jZW9mIEVmZmVjdEN1cnZlKSB7XG4gICAgICAgICAgY29uc3QgZWZmZWN0Q3VydmUgPSBlZmZlY3QgYXMgRWZmZWN0Q3VydmU7XG5cbiAgICAgICAgICAvLyBjYXBhYmlsaXRpZXNcbiAgICAgICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgZWZmZWN0Q3VydmUuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWxDYXBhYmlsaXR5IG9mIGNhY2hlZENoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5jYXBhYmlsaXRpZXNNYXRjaChcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuY29sb3IsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG51bGxcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYWNoZWRDaGFubmVsLm1heFZhbHVlICogZWZmZWN0Q3VydmUuZ2V0VmFsdWVBdE1pbGxpcyh0aW1lTWlsbGlzLCBmaXh0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjaGFubmVsc1xuICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbFByb2ZpbGUgb2YgZWZmZWN0Q3VydmUuY2hhbm5lbHMpIHtcbiAgICAgICAgICAgIGlmIChjaGFubmVsUHJvZmlsZS5wcm9maWxlVXVpZCA9PT0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxQcm9maWxlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWNoZWRDaGFubmVsIG9mIGNhY2hlZEZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLm5hbWUgPT09IGNoYW5uZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBlZmZlY3RDdXJ2ZS5nZXRWYWx1ZUF0TWlsbGlzKHRpbWVNaWxsaXMsIGZpeHR1cmVJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETyBvdGhlciBlZmZlY3RzIChQYW5UaWx0LCBldGMuKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIHJldHVybiBhbGwgZml4dHVyZSB1dWlkcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhbm5lbCB2YWx1ZXNcbiAgcHVibGljIGdldENoYW5uZWxWYWx1ZXModGltZU1pbGxpczogbnVtYmVyLCBwcmVzZXRzOiBQcmVzZXRSZWdpb25TY2VuZVtdKTogTWFwPENhY2hlZEZpeHR1cmUsIEZpeHR1cmVDaGFubmVsVmFsdWVbXT4ge1xuICAgIC8vIExvb3Agb3ZlciBhbGwgcmVsZXZhbnQgcHJlc2V0cyBhbmQgY2FsYyB0aGUgcHJvcGVydHkgdmFsdWVzIGZyb20gdGhlIHByZXNldHMgKGNhcGFiaWxpdGllcywgY2hhbm5lbHMgYW5kIGVmZmVjdHMpXG4gICAgY29uc3QgY2FsY3VsYXRlZEZpeHR1cmVzID0gbmV3IE1hcDxDYWNoZWRGaXh0dXJlLCBGaXh0dXJlQ2hhbm5lbFZhbHVlW10+KCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNhY2hlZEZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhY2hlZEZpeHR1cmVzW2ldO1xuXG4gICAgICAvLyBhbGwgdmFsdWVzIG9mIHRoZSBjdXJyZW50IGZpeHR1cmUgY2hhbm5lbHNcbiAgICAgIGxldCB2YWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSA9IFtdO1xuXG4gICAgICBjb25zdCBhbHJlYWR5Q2FsY3VsYXRlZEZpeHR1cmUgPSB0aGlzLmdldEFscmVhZHlDYWxjdWxhdGVkRml4dHVyZSh0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhY2hlZEZpeHR1cmVzLCBpKTtcblxuICAgICAgaWYgKGFscmVhZHlDYWxjdWxhdGVkRml4dHVyZSkge1xuICAgICAgICAvLyBvbmx5IHJlbGV2YW50IGZvciB0aGUgcHJldmlldyAtLT4gcmV1c2UgYWxsIGNhbGN1bGF0ZWQgdmFsdWVzXG4gICAgICAgIHZhbHVlcyA9IE9iamVjdC5hc3NpZ24oW10sIGNhbGN1bGF0ZWRGaXh0dXJlcy5nZXQoYWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhcHBseSB0aGUgZGVmYXVsdCB2YWx1ZXNcbiAgICAgICAgZm9yIChjb25zdCBjYWNoZWRDaGFubmVsIG9mIGNhY2hlZEZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBwcmVzZXQgb2YgcHJlc2V0cykge1xuICAgICAgICAgIC8vIHNlYXJjaCBmb3IgdGhpcyBmaXh0dXJlIGluIHRoZSBwcmVzZXQgYW5kIGdldCBpdCdzIHByZXNldC1zcGVjaWZpYyBpbmRleCAoZm9yIGNoYXNpbmcgZWZmZWN0cylcbiAgICAgICAgICBjb25zdCBmaXh0dXJlSW5kZXggPSB0aGlzLmdldEZpeHR1cmVJbmRleChwcmVzZXQucHJlc2V0LCBjYWNoZWRGaXh0dXJlLmZpeHR1cmUudXVpZCwgY2FjaGVkRml4dHVyZS5waXhlbEtleSk7XG5cbiAgICAgICAgICBpZiAoZml4dHVyZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIC8vIHRoaXMgZml4dHVyZSBpcyBhbHNvIGluIHRoZSBwcmVzZXQgLT4gbWl4IHRoZSByZXF1aXJlZCB2YWx1ZXMgKG92ZXJ3cml0ZSBleGlzdGluZyB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBpZiBzZXQgbXVsdGlwbGUgdGltZXMpXG4gICAgICAgICAgICBjb25zdCBpbnRlbnNpdHlQZXJjZW50YWdlID0gdGhpcy5nZXRQcmVzZXRJbnRlbnNpdHkocHJlc2V0LCB0aW1lTWlsbGlzKTtcblxuICAgICAgICAgICAgdGhpcy5taXhDYXBhYmlsaXR5VmFsdWVzKHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlcyhwcmVzZXQsIGNhY2hlZEZpeHR1cmUsIHZhbHVlcywgaW50ZW5zaXR5UGVyY2VudGFnZSk7XG4gICAgICAgICAgICB0aGlzLm1peEVmZmVjdHModGltZU1pbGxpcywgZml4dHVyZUluZGV4LCBwcmVzZXQsIGNhY2hlZEZpeHR1cmUsIHZhbHVlcywgaW50ZW5zaXR5UGVyY2VudGFnZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFN0b3JlIHRoZSBjYWxjdWxhdGVkIHZhbHVlcyBmb3Igc3Vic2VxdWVudCBmaXh0dXJlcyBvbiB0aGUgc2FtZSBETVggYWRkcmVzc1xuICAgICAgY2FsY3VsYXRlZEZpeHR1cmVzLnNldChjYWNoZWRGaXh0dXJlLCB2YWx1ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBjYWxjdWxhdGVkRml4dHVyZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0VW5pdmVyc2VWYWx1ZXMoZml4dHVyZXM6IE1hcDxDYWNoZWRGaXh0dXJlLCBGaXh0dXJlQ2hhbm5lbFZhbHVlW10+LCBtYXN0ZXJEaW1tZXJWYWx1ZTogbnVtYmVyKSB7XG4gICAgLy8gVE9ETyBvbmx5LCBpZiBtb25pdG9yaW5nIGlzIGVuYWJsZWRcbiAgICByZXR1cm47XG5cbiAgICAvLyAvLyBSZXNldCBhbGwgRE1YIHVuaXZlcnNlc1xuICAgIC8vIGZvciAoY29uc3QgdW5pdmVyc2Ugb2YgdGhpcy51bml2ZXJzZVNlcnZpY2UudW5pdmVyc2VzKSB7XG4gICAgLy8gICB1bml2ZXJzZS5jaGFubmVsVmFsdWVzID0gW107XG4gICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgLy8gICAgIHVuaXZlcnNlLmNoYW5uZWxWYWx1ZXMucHVzaCgwKTtcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICAvLyAvLyBsb29wIG92ZXIgZWFjaCBmaXh0dXJlXG4gICAgLy8gZml4dHVyZXMuZm9yRWFjaCgoY2hhbm5lbFZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLCBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlKSA9PiB7XG4gICAgLy8gICAvLyBUT0RPIEdldCB0aGUgY29ycmVjdCB1bml2ZXJzZSBmb3IgdGhpcyBmaXh0dXJlXG4gICAgLy8gICBjb25zdCB1bml2ZXJzZTogVW5pdmVyc2UgPSB0aGlzLnVuaXZlcnNlU2VydmljZS5nZXRVbml2ZXJzZUJ5VXVpZChjYWNoZWRGaXh0dXJlLmZpeHR1cmUuZG14VW5pdmVyc2VVdWlkKTtcblxuICAgIC8vICAgLy8gbG9vcCBvdmVyIGVhY2ggY2hhbm5lbCBmb3IgdGhpcyBmaXh0dXJlXG4gICAgLy8gICBmb3IgKGxldCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXggPCBjYWNoZWRGaXh0dXJlLm1vZGUuY2hhbm5lbHMubGVuZ3RoOyBjaGFubmVsSW5kZXgrKykge1xuICAgIC8vICAgICBjb25zdCBjaGFubmVsT2JqID0gY2FjaGVkRml4dHVyZS5tb2RlLmNoYW5uZWxzW2NoYW5uZWxJbmRleF07XG4gICAgLy8gICAgIGlmICh0eXBlb2YgY2hhbm5lbE9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyAgICAgICBjb25zdCBjaGFubmVsTmFtZSA9IGNoYW5uZWxPYmo7XG4gICAgLy8gICAgICAgLy8gbWF0Y2ggdGhpcyBtb2RlIGNoYW5uZWwgd2l0aCBhIGNoYW5uZWwgdmFsdWVcbiAgICAvLyAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBjaGFubmVsVmFsdWVzKSB7XG4gICAgLy8gICAgICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDaGFubmVsQnlOYW1lKGNhY2hlZEZpeHR1cmUsIGNoYW5uZWxOYW1lKTtcbiAgICAvLyAgICAgICAgIGlmIChjaGFubmVsICYmIGNoYW5uZWwuY2hhbm5lbCkge1xuICAgIC8vICAgICAgICAgICBjb25zdCBmaW5lSW5kZXggPSBjaGFubmVsLmNoYW5uZWwuZmluZUNoYW5uZWxBbGlhc2VzLmluZGV4T2YoY2hhbm5lbE5hbWUpO1xuICAgIC8vICAgICAgICAgICBpZiAoY2hhbm5lbC5uYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgfHwgZmluZUluZGV4ID4gLTEpIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCB1bml2ZXJzZUNoYW5uZWwgPSBjYWNoZWRGaXh0dXJlLmZpeHR1cmUuZG14Rmlyc3RDaGFubmVsICsgY2hhbm5lbEluZGV4O1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IGRteFZhbHVlID1cbiAgICAvLyAgICAgICAgICAgICAgIE1hdGguZmxvb3IoY2hhbm5lbFZhbHVlLnZhbHVlIC8gTWF0aC5wb3coMjU2LCBjaGFubmVsLmNoYW5uZWwuZmluZUNoYW5uZWxBbGlhc2VzLmxlbmd0aCAtIChmaW5lSW5kZXggKyAxKSkpICUgMjU2O1xuICAgIC8vICAgICAgICAgICAgIC8vIFRPRE9cbiAgICAvLyAgICAgICAgICAgICBicmVhaztcbiAgICAvLyAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICAgIH1cbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH0pO1xuICB9XG5cbiAgcHVibGljIGZpeHR1cmVJc1NlbGVjdGVkKHV1aWQ6IHN0cmluZywgcGl4ZWxLZXk6IHN0cmluZywgcHJlc2V0czogUHJlc2V0UmVnaW9uU2NlbmVbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHByZXNldHMpIHtcbiAgICAgIGlmICh0aGlzLnByZXNldFNlcnZpY2UuZ2V0UHJlc2V0Rml4dHVyZShwcmVzZXQucHJlc2V0LCB1dWlkLCBwaXhlbEtleSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZpeHR1cmVTZXR1cCgpIHtcbiAgICB0aGlzLmRvVXBkYXRlRml4dHVyZVNldHVwLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVN0YWdlTWVzaChtZXNoOiBUSFJFRS5NZXNoKSB7XG4gICAgbWVzaC5yZWNlaXZlU2hhZG93ID0gZmFsc2U7XG4gICAgbWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RhZ2UoKSB7XG4gICAgaWYgKCF0aGlzLnNjZW5lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGdlb21ldHJ5OiBhbnk7XG4gICAgbGV0IG1lc2g6IGFueTtcblxuICAgIC8vIFJlbW92ZSBvbGQgbWVzaGVzIGZyb20gdGhlIHNjZW5lXG4gICAgZm9yIChjb25zdCBleGlzdGluZ01lc2ggb2YgdGhpcy5zdGFnZU1lc2hlcykge1xuICAgICAgdGhpcy5zY2VuZS5yZW1vdmUoZXhpc3RpbmdNZXNoKTtcbiAgICAgIGV4aXN0aW5nTWVzaC5nZW9tZXRyeS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VNZXNoZXMgPSBbXTtcblxuICAgIC8vIEdyb3VuZFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoNTAwMCwgNTAwMCk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcbiAgICBtZXNoLnJvdGF0ZVgoKE1hdGguUEkgLyAxODApICogLTkwKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBGbG9vclxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtXG4gICAgKTtcbiAgICBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuc3RhZ2VNYXRlcmlhbCk7XG4gICAgdGhpcy5wcmVwYXJlU3RhZ2VNZXNoKG1lc2gpO1xuICAgIG1lc2gucG9zaXRpb24uc2V0KDAsIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20gLyAyLCAwKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgZnJvbnQgbGVmdFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIFBpbGxhciBmcm9udCByaWdodFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgLSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMlxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGJhY2sgbGVmdFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgYmFjayByaWdodFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgLXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIENlaWxpbmdcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtXG4gICAgKTtcbiAgICBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuc3RhZ2VNYXRlcmlhbCk7XG4gICAgdGhpcy5wcmVwYXJlU3RhZ2VNZXNoKG1lc2gpO1xuICAgIG1lc2gucG9zaXRpb24uc2V0KFxuICAgICAgMCxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtICtcbiAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlQ2VpbGluZ0hlaWdodENtIC8gMiArXG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICAwXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG4gIH1cbn1cbiJdfQ==
|
|
465
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmV2aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBS3JELE1BQU0sT0FBTyxjQUFjO0lBWXpCLFlBQ1UsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFKOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FB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b3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBFZmZlY3RDdXJ2ZSB9IGZyb20gJy4uL21vZGVscy9lZmZlY3QtY3VydmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IFByZXNldFJlZ2lvblNjZW5lIH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldC1yZWdpb24tc2NlbmUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi9wcmVzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjZW5lU2VydmljZSB9IGZyb20gJy4vc2NlbmUuc2VydmljZSc7XG5pbXBvcnQgeyBUaW1lbGluZVNlcnZpY2UgfSBmcm9tICcuL3RpbWVsaW5lLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJldmlld1NlcnZpY2Uge1xuICBwdWJsaWMgZG9VcGRhdGVGaXh0dXJlU2V0dXA6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBzY2VuZTogVEhSRUUuU2NlbmU7XG5cbiAgcHJpdmF0ZSBzdGFnZU1lc2hlczogVEhSRUUuTWVzaFtdID0gW107XG4gIHByaXZhdGUgc3RhZ2VNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7XG4gICAgY29sb3I6IDB4MGQwZDBkLFxuICAgIC8vIHJvdWdobmVzczogMC41LFxuICAgIC8vIG1ldGFsbmVzczogMC41LFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGdldEFscmVhZHlDYWxjdWxhdGVkRml4dHVyZShmaXh0dXJlczogQ2FjaGVkRml4dHVyZVtdLCBmaXh0dXJlSW5kZXg6IG51bWJlcik6IENhY2hlZEZpeHR1cmUge1xuICAgIC8vIEhhcyB0aGlzIGZpeHR1cmUgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgKHNhbWUgdW5pdmVyc2UgYW5kIGRteCBzdGFydCBhZGRyZXNzIGFzIGEgZml4dHVyZSBiZWZvcmUpXG4gICAgLy8gLS0+IHJldHVybiBpdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlID0gZml4dHVyZXNbaV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgJiZcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhGaXJzdENoYW5uZWxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlZEZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVzZXRzKHRpbWVNaWxsaXM6IG51bWJlcik6IFByZXNldFJlZ2lvblNjZW5lW10ge1xuICAgIC8vIEdldCByZWxldmFudCBwcmVzZXRzIGluIGNvcnJlY3Qgb3JkZXIgdG8gcHJvY2VzcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc2NlbmUsIGlmIGF2YWlsYWJsZVxuICAgIGxldCBwcmVzZXRzOiBQcmVzZXRSZWdpb25TY2VuZVtdID0gW107XG5cbiAgICBpZiAodGhpcy50aW1lbGluZVNlcnZpY2UucGxheVN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIC8vIE9ubHkgdXNlIGFjdGl2ZSBwcmVzZXRzIGluIGN1cnJlbnQgcmVnaW9uc1xuICAgICAgcHJlc2V0cyA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLmdldFByZXNldHNJblRpbWUodGltZU1pbGxpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCkge1xuICAgICAgICAvLyBPbmx5IHByZXZpZXcgdGhlIHNlbGVjdGVkIHByZXNldFxuICAgICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByZXZpZXcgdGhlIHNlbGVjdGVkIHNjZW5lc1xuICAgICAgICBmb3IgKGxldCBzY2VuZUluZGV4ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNjZW5lcy5sZW5ndGggLSAxOyBzY2VuZUluZGV4ID49IDA7IHNjZW5lSW5kZXgtLSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2NlbmUgb2YgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMpIHtcbiAgICAgICAgICAgIGlmIChzY2VuZS51dWlkID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2NlbmVzW3NjZW5lSW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcHJlc2V0SW5kZXggPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGggLSAxOyBwcmVzZXRJbmRleCA+PSAwOyBwcmVzZXRJbmRleC0tKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcmVzZXRVdWlkIG9mIHNjZW5lLnByZXNldFV1aWRzKSB7XG4gICAgICAgICAgICAgICAgICAvLyBMb29wIG92ZXIgdGhlIHByZXNldHMgaW4gdGhlIHByZXNldCBzZXJ2aWNlIHRvIHJldGFpbiB0aGUgcHJlc2V0IG9yZGVyXG4gICAgICAgICAgICAgICAgICBpZiAocHJlc2V0VXVpZCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbcHJlc2V0SW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1twcmVzZXRJbmRleF0sIHVuZGVmaW5lZCwgc2NlbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXNldHM7XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZShcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBjaGFubmVsVmFsdWU6IEZpeHR1cmVDaGFubmVsVmFsdWUsXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMFxuICApIHtcbiAgICBsZXQgbmV3VmFsdWU6IG51bWJlciA9IGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICBsZXQgZXhpc3RpbmdWYWx1ZTogbnVtYmVyID0gZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGludGVuc2l0eVBlcmNlbnRhZ2UgPCAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIG1peCBhIHBvc3NpYmx5IGV4aXN0aW5nIHZhbHVlIChvciB0aGUgZGVmYXVsdCB2YWx1ZSAwKSB3aXRoIHRoZSBuZXcgdmFsdWUgKGZhZGluZylcblxuICAgICAgLy8gR2V0IHRoZSBleGlzdGVudCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eVxuICAgICAgZm9yIChjb25zdCBleGlzdGluZ0NoYW5uZWxWYWx1ZSBvZiBleGlzdGluZ0NoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXN0aW5nVmFsdWUgPSBleGlzdGluZ0NoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNaXggdGhlIGV4aXN0aW5nIHZhbHVlIHdpdGggdGhlIG5ldyB2YWx1ZVxuICAgICAgbmV3VmFsdWUgPSBleGlzdGluZ1ZhbHVlICogKDEgLSBpbnRlbnNpdHlQZXJjZW50YWdlKSArIG5ld1ZhbHVlICogaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGV4aXN0ZW50IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSAmJlxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZFxuICAgICAgKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3IHZhbHVlXG4gICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZml4dHVyZSBpbmRleCBpbnNpZGUgdGhlIHBhc3NlZCBwcmVzZXQgKHVzZWQgZm9yIGNoYXNpbmcpXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUluZGV4KHByZXNldDogUHJlc2V0LCBmaXh0dXJlVXVpZDogc3RyaW5nLCBwaXhlbEtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleTogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LCBmaXh0dXJlVXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAvLyBmaXh0dXJlIGlzIG5vdCBpbiBwcmVzZXRcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTG9vcCBvdmVyIHRoZSBnbG9iYWwgZml4dHVyZXMgdG8gcmV0YWluIHRoZSBvcmRlclxuICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXNldEZpeHR1cmUgb2YgcHJlc2V0LmZpeHR1cmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVV1aWRBbmRQaXhlbEtleUVxdWFscyhcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCxcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLnBpeGVsS2V5LFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlVXVpZEFuZFBpeGVsS2V5RXF1YWxzKHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLCBmaXh0dXJlVXVpZCwgcHJvamVjdEZpeHR1cmUucGl4ZWxLZXksIHBpeGVsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQpO1xuICAgICAgICAgIGNvbnN0IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkID0ge1xuICAgICAgICAgICAgZmlyc3REbXhDaGFubmVsOiBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCxcbiAgICAgICAgICAgIHBpeGVsS2V5OiBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gY291bnRlZEZpcnN0RG14Q2hhbm5lbFBpeGVsS2V5LnNvbWUoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgaXRlbS5maXJzdERteENoYW5uZWwgPT09IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkLmZpcnN0RG14Q2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKCFpdGVtLnBpeGVsS2V5ICYmICFmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZC5waXhlbEtleSkgfHwgaXRlbS5waXhlbEtleSA9PT0gZmlyc3REbXhDaGFubmVsQW5kRml4dHVyZVV1aWQucGl4ZWxLZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGRvbid0IGNvdW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIGNoYW5uZWwgYXMgYWxyZWFkeSBjb3VudGVkIG9uZXNcbiAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleS5wdXNoKGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldFByZXNldEludGVuc2l0eShwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLCB0aW1lTWlsbGlzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFdoZW4gZmFkaW5nIGlzIGluIHByb2dyZXNzIChvbiBwcmVzZXQgb3Igc2NlbmUtbGV2ZWwpLCB0aGUgY3VycmVudCBwcmVzZXQgZG9lcyBub3RcbiAgICAvLyBmdWxseSBjb3ZlciB1bmRlcmx5aW5nIHZhbHVlcy5cbiAgICAvLyAtPiAwID0gbm8gY292ZXJpbmcgYXQgYWxsLCAxID0gZnVsbHkgY292ZXIgKG5vIGZhZGluZylcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gMTtcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldCA9IDE7XG4gICAgbGV0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSAxO1xuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnNjZW5lKSB7XG4gICAgICAvLyBGYWRlIG91dCBpcyBzdHJvbmdlciB0aGFuIGZhZGUgaW4gKGlmIHRoZXkgb3ZlcmxhcClcblxuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3Igc2NlbmUgZmFkaW5nXG4gICAgICBjb25zdCBzY2VuZVN0YXJ0TWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVJblByZSA/IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgLSBwcmVzZXQuc2NlbmUuZmFkZUluTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcztcbiAgICAgIGNvbnN0IHNjZW5lRW5kTWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVPdXRQb3N0ID8gcHJlc2V0LnJlZ2lvbi5lbmRNaWxsaXMgKyBwcmVzZXQuc2NlbmUuZmFkZU91dE1pbGxpcyA6IHByZXNldC5yZWdpb24uZW5kTWlsbGlzO1xuXG4gICAgICBpZiAodGltZU1pbGxpcyA+IHNjZW5lRW5kTWlsbGlzIC0gcHJlc2V0LnNjZW5lLmZhZGVPdXRNaWxsaXMgJiYgdGltZU1pbGxpcyA8IHNjZW5lRW5kTWlsbGlzKSB7XG4gICAgICAgIC8vIFNjZW5lIGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlU2NlbmUgPSAoc2NlbmVFbmRNaWxsaXMgLSB0aW1lTWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgc2NlbmVTdGFydE1pbGxpcyArIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXMgJiYgdGltZU1pbGxpcyA+IHNjZW5lU3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gU2NlbmUgZmFkZXMgaW5cbiAgICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gKHRpbWVNaWxsaXMgLSBzY2VuZVN0YXJ0TWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnByZXNldCkge1xuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3IgcHJlc2V0IGZhZGluZ1xuICAgICAgbGV0IHByZXNldFN0YXJ0TWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5zdGFydE1pbGxpcyA9PT0gdW5kZWZpbmVkID8gcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyA6IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LnN0YXJ0TWlsbGlzO1xuXG4gICAgICBsZXQgcHJlc2V0RW5kTWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5lbmRNaWxsaXMgPT09IHVuZGVmaW5lZCA/IHByZXNldC5yZWdpb24uZW5kTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyArIHByZXNldC5wcmVzZXQuZW5kTWlsbGlzO1xuXG4gICAgICAvLyBleHRlbmQgdGhlIHJ1bm5pbmcgdGltZSwgaWYgZmFkaW5nIGlzIGRvbmUgb3V0c2lkZSB0aGUgYm91bmRhcmllc1xuICAgICAgcHJlc2V0U3RhcnRNaWxsaXMgLT0gcHJlc2V0LnByZXNldC5mYWRlSW5QcmUgPyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyA6IDA7XG4gICAgICBwcmVzZXRFbmRNaWxsaXMgKz0gcHJlc2V0LnByZXNldC5mYWRlT3V0UG9zdCA/IHByZXNldC5wcmVzZXQuZmFkZU91dE1pbGxpcyA6IDA7XG5cbiAgICAgIGlmICh0aW1lTWlsbGlzID4gcHJlc2V0RW5kTWlsbGlzIC0gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzICYmIHRpbWVNaWxsaXMgPCBwcmVzZXRFbmRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlUHJlc2V0ID0gKHByZXNldEVuZE1pbGxpcyAtIHRpbWVNaWxsaXMpIC8gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgcHJlc2V0U3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyAmJiB0aW1lTWlsbGlzID4gcHJlc2V0U3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIGluXG4gICAgICAgIGludGVuc2l0eVBlcmNlbnRhZ2VQcmVzZXQgPSAodGltZU1pbGxpcyAtIHByZXNldFN0YXJ0TWlsbGlzKSAvIHByZXNldC5wcmVzZXQuZmFkZUluTWlsbGlzO1xuICAgICAgfVxuXG4gICAgICBpbnRlbnNpdHlQZXJjZW50YWdlID0gaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lICogaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgbWl4Q2FwYWJpbGl0eVZhbHVlcyhcbiAgICBwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLFxuICAgIGNhY2hlZEZpeHR1cmU6IENhY2hlZEZpeHR1cmUsXG4gICAgdmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyXG4gICkge1xuICAgIGxldCBoYXNDb2xvciA9IGZhbHNlO1xuXG4gICAgLy8gbWl4IHRoZSBwcmVzZXQgY2FwYWJpbGl0eSB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldENhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQucHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsQ2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUud2hlZWwsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkud2hlZWxOYW1lLFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICAgICAgICBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGNhcGFiaWxpdGllcyBtYXRjaCAtPiBhcHBseSB0aGUgdmFsdWUsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkgfHxcbiAgICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpICYmXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA+PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSBhbmQgY29sb3JJbnRlbnNpdHkgKGRpbW1lciBhbmQgY29sb3IpXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVQZXJjZW50YWdlID0gcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gYnJpZ2h0bmVzcyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhcGFiaWxpdHkgaW4gdGhpcyBjaGFubmVsXG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIHZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBtb3JlIHRoYW4gb25lIGNhcGFiaWxpdHkgaW4gdGhlIGNoYW5uZWxcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3MgPT09ICdvZmYnICYmIHZhbHVlUGVyY2VudGFnZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2hhbm5lbENhcGFiaWxpdHkuY2VudGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuYnJpZ2h0bmVzc1N0YXJ0ID09PSAnZGFyaycgfHwgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5icmlnaHRuZXNzU3RhcnQgPT09ICdvZmYnKSAmJlxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3NFbmQgPT09ICdicmlnaHQnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgKiB2YWx1ZVBlcmNlbnRhZ2UgK1xuICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuIHx8IHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdCkgJiZcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlID49IDBcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgMSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5XaGVlbFNsb3QgJiZcbiAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIgPT09IHByZXNldENhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIHdoZWVsIHNsb3QgKGNvbG9yLCBnb2JvLCBldGMuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjaGFubmVsQ2FwYWJpbGl0eS5jZW50ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2ssIHdoZXRoZXIgd2UganVzdCBzZXQgYSBjb2xvciB3aGVlbCB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS53aGVlbElzQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHByb3hpbWF0ZSB0aGUgY29sb3IgZnJvbSBhIGNvbG9yIG9yIGEgZGlmZmVyZW50IGNvbG9yIHdoZWVsLCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCFoYXNDb2xvciAmJiBjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldEFwcHJveGltYXRlZENvbG9yV2hlZWxDYXBhYmlsaXR5KHByZXNldC5wcmVzZXQsIGNhY2hlZENoYW5uZWwpO1xuXG4gICAgICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIGFuIGFwcHJveGltYXRlZCBjb2xvciBpbiB0aGUgYXZhaWxhYmxlIHdoZWVsIGNoYW5uZWxcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYXBhYmlsaXR5LmNlbnRlclZhbHVlO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZXMoXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICAvLyBtaXggdGhlIHByZXNldCBjaGFubmVsIHZhbHVlc1xuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIHByZXNldC5wcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCAmJiBjYWNoZWRDaGFubmVsLm5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBjaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWl4RWZmZWN0cyhcbiAgICB0aW1lTWlsbGlzOiBudW1iZXIsXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICBmb3IgKGNvbnN0IGVmZmVjdCBvZiBwcmVzZXQucHJlc2V0LmVmZmVjdHMpIHtcbiAgICAgIGlmIChlZmZlY3QudmlzaWJsZSkge1xuICAgICAgICAvLyBFZmZlY3RDdXJ2ZVxuICAgICAgICBpZiAoZWZmZWN0IGluc3RhbmNlb2YgRWZmZWN0Q3VydmUpIHtcbiAgICAgICAgICBjb25zdCBlZmZlY3RDdXJ2ZSA9IGVmZmVjdCBhcyBFZmZlY3RDdXJ2ZTtcblxuICAgICAgICAgIC8vIGNhcGFiaWxpdGllc1xuICAgICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBlZmZlY3RDdXJ2ZS5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbENhcGFiaWxpdHkgb2YgY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBlZmZlY3RDdXJ2ZS5nZXRWYWx1ZUF0TWlsbGlzKHRpbWVNaWxsaXMsIGZpeHR1cmVJbmRleCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoYW5uZWxzXG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsUHJvZmlsZSBvZiBlZmZlY3RDdXJ2ZS5jaGFubmVscykge1xuICAgICAgICAgICAgaWYgKGNoYW5uZWxQcm9maWxlLnByb2ZpbGVVdWlkID09PSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZCkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbFByb2ZpbGUuY2hhbm5lbHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwubmFtZSA9PT0gY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIGVmZmVjdEN1cnZlLmdldFZhbHVlQXRNaWxsaXModGltZU1pbGxpcywgZml4dHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIG90aGVyIGVmZmVjdHMgKFBhblRpbHQsIGV0Yy4pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIGFsbCBmaXh0dXJlIHV1aWRzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFubmVsIHZhbHVlc1xuICBwdWJsaWMgZ2V0Q2hhbm5lbFZhbHVlcyh0aW1lTWlsbGlzOiBudW1iZXIsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBNYXA8Q2FjaGVkRml4dHVyZSwgRml4dHVyZUNoYW5uZWxWYWx1ZVtdPiB7XG4gICAgLy8gTG9vcCBvdmVyIGFsbCByZWxldmFudCBwcmVzZXRzIGFuZCBjYWxjIHRoZSBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSB0aGUgcHJlc2V0cyAoY2FwYWJpbGl0aWVzLCBjaGFubmVscyBhbmQgZWZmZWN0cylcbiAgICBjb25zdCBjYWxjdWxhdGVkRml4dHVyZXMgPSBuZXcgTWFwPENhY2hlZEZpeHR1cmUsIEZpeHR1cmVDaGFubmVsVmFsdWVbXT4oKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maXh0dXJlU2VydmljZS5jYWNoZWRGaXh0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2FjaGVkRml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXNbaV07XG5cbiAgICAgIC8vIGFsbCB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgZml4dHVyZSBjaGFubmVsc1xuICAgICAgbGV0IHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdID0gW107XG5cbiAgICAgIGNvbnN0IGFscmVhZHlDYWxjdWxhdGVkRml4dHVyZSA9IHRoaXMuZ2V0QWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXMsIGkpO1xuXG4gICAgICBpZiAoYWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKSB7XG4gICAgICAgIC8vIG9ubHkgcmVsZXZhbnQgZm9yIHRoZSBwcmV2aWV3IC0tPiByZXVzZSBhbGwgY2FsY3VsYXRlZCB2YWx1ZXNcbiAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbihbXSwgY2FsY3VsYXRlZEZpeHR1cmVzLmdldChhbHJlYWR5Q2FsY3VsYXRlZEZpeHR1cmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFwcGx5IHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYWNoZWRDaGFubmVsLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICAgICAgLy8gc2VhcmNoIGZvciB0aGlzIGZpeHR1cmUgaW4gdGhlIHByZXNldCBhbmQgZ2V0IGl0J3MgcHJlc2V0LXNwZWNpZmljIGluZGV4IChmb3IgY2hhc2luZyBlZmZlY3RzKVxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHRoaXMuZ2V0Rml4dHVyZUluZGV4KHByZXNldC5wcmVzZXQsIGNhY2hlZEZpeHR1cmUuZml4dHVyZS51dWlkLCBjYWNoZWRGaXh0dXJlLnBpeGVsS2V5KTtcblxuICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gdGhpcyBmaXh0dXJlIGlzIGFsc28gaW4gdGhlIHByZXNldCAtPiBtaXggdGhlIHJlcXVpcmVkIHZhbHVlcyAob3ZlcndyaXRlIGV4aXN0aW5nIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGlmIHNldCBtdWx0aXBsZSB0aW1lcylcbiAgICAgICAgICAgIGNvbnN0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSB0aGlzLmdldFByZXNldEludGVuc2l0eShwcmVzZXQsIHRpbWVNaWxsaXMpO1xuXG4gICAgICAgICAgICB0aGlzLm1peENhcGFiaWxpdHlWYWx1ZXMocHJlc2V0LCBjYWNoZWRGaXh0dXJlLCB2YWx1ZXMsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWVzKHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgIHRoaXMubWl4RWZmZWN0cyh0aW1lTWlsbGlzLCBmaXh0dXJlSW5kZXgsIHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGZvciBzdWJzZXF1ZW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIERNWCBhZGRyZXNzXG4gICAgICBjYWxjdWxhdGVkRml4dHVyZXMuc2V0KGNhY2hlZEZpeHR1cmUsIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGN1bGF0ZWRGaXh0dXJlcztcbiAgfVxuXG4gIHB1YmxpYyBmaXh0dXJlSXNTZWxlY3RlZCh1dWlkOiBzdHJpbmcsIHBpeGVsS2V5OiBzdHJpbmcsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LnByZXNldCwgdXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaXh0dXJlU2V0dXAoKSB7XG4gICAgdGhpcy5kb1VwZGF0ZUZpeHR1cmVTZXR1cC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTdGFnZU1lc2gobWVzaDogVEhSRUUuTWVzaCkge1xuICAgIG1lc2gucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuICAgIG1lc2guY2FzdFNoYWRvdyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0YWdlKCkge1xuICAgIGlmICghdGhpcy5zY2VuZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBnZW9tZXRyeTogYW55O1xuICAgIGxldCBtZXNoOiBhbnk7XG5cbiAgICAvLyBSZW1vdmUgb2xkIG1lc2hlcyBmcm9tIHRoZSBzY2VuZVxuICAgIGZvciAoY29uc3QgZXhpc3RpbmdNZXNoIG9mIHRoaXMuc3RhZ2VNZXNoZXMpIHtcbiAgICAgIHRoaXMuc2NlbmUucmVtb3ZlKGV4aXN0aW5nTWVzaCk7XG4gICAgICBleGlzdGluZ01lc2guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTWVzaGVzID0gW107XG5cbiAgICAvLyBHcm91bmRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDUwMDAsIDUwMDApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgbWVzaC5yb3RhdGVYKChNYXRoLlBJIC8gMTgwKSAqIC05MCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gRmxvb3JcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldCgwLCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtIC8gMiwgMCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGZyb250IGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgZnJvbnQgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIFBpbGxhciBiYWNrIGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMlxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGJhY2sgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBDZWlsaW5nXG4gICAgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlQ2VpbGluZ0hlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIDAsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSArXG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUNlaWxpbmdIZWlnaHRDbSAvIDIgK1xuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgMFxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuICB9XG59XG4iXX0=
|
|
@@ -41,39 +41,36 @@ export class ProjectLoadService {
|
|
|
41
41
|
}
|
|
42
42
|
migrateToVersion2() {
|
|
43
43
|
for (let fixture of this.projectService.project.fixtures) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
projectFixture.fixtureUuid = fixture.uuid;
|
|
49
|
-
projectFixture.pixelKey = pixelKey;
|
|
50
|
-
this.projectService.project.presetFixtures.push(projectFixture);
|
|
51
|
-
}
|
|
44
|
+
if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {
|
|
45
|
+
const projectFixture = new PresetFixture();
|
|
46
|
+
projectFixture.fixtureUuid = fixture.uuid;
|
|
47
|
+
this.projectService.project.presetFixtures.push(projectFixture);
|
|
52
48
|
}
|
|
53
|
-
|
|
49
|
+
const pixelKeys = this.fixtureService.fixtureGetUniquePixelKeys(fixture);
|
|
50
|
+
for (let pixelKey of pixelKeys) {
|
|
54
51
|
const projectFixture = new PresetFixture();
|
|
55
52
|
projectFixture.fixtureUuid = fixture.uuid;
|
|
53
|
+
projectFixture.pixelKey = pixelKey;
|
|
56
54
|
this.projectService.project.presetFixtures.push(projectFixture);
|
|
57
55
|
}
|
|
58
56
|
}
|
|
59
57
|
for (let preset of this.projectService.project.presets) {
|
|
60
58
|
for (let fixtureUuid of preset.fixtureUuids) {
|
|
61
59
|
const fixture = this.fixtureService.getFixtureByUuid(fixtureUuid);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
presetFixture.fixtureUuid = fixtureUuid;
|
|
67
|
-
presetFixture.pixelKey = pixelKey;
|
|
68
|
-
preset.fixtures.push(presetFixture);
|
|
69
|
-
}
|
|
60
|
+
if (this.fixtureService.fixtureHasGeneralChannel(fixture)) {
|
|
61
|
+
const presetFixture = new PresetFixture();
|
|
62
|
+
presetFixture.fixtureUuid = fixtureUuid;
|
|
63
|
+
preset.fixtures.push(presetFixture);
|
|
70
64
|
}
|
|
71
|
-
|
|
65
|
+
const pixelKeys = this.fixtureService.fixtureGetUniquePixelKeys(fixture);
|
|
66
|
+
for (let pixelKey of pixelKeys) {
|
|
72
67
|
const presetFixture = new PresetFixture();
|
|
73
68
|
presetFixture.fixtureUuid = fixtureUuid;
|
|
69
|
+
presetFixture.pixelKey = pixelKey;
|
|
74
70
|
preset.fixtures.push(presetFixture);
|
|
75
71
|
}
|
|
76
72
|
}
|
|
73
|
+
preset.fixtureUuids = undefined;
|
|
77
74
|
}
|
|
78
75
|
this.projectService.project.version = 2;
|
|
79
76
|
}
|
|
@@ -206,4 +203,4 @@ export class ProjectLoadService {
|
|
|
206
203
|
providedIn: 'root',
|
|
207
204
|
}]
|
|
208
205
|
}], () => [{ type: i1.ProjectService }, { type: i2.PreviewService }, { type: i3.FixtureService }, { type: i4.PresetService }, { type: i5.SceneService }, { type: i6.BsModalService }, { type: i7.UuidService }, { type: i8.TimelineService }, { type: i9.Router }, { type: i9.ActivatedRoute }, { type: i10.WarningDialogService }], null); })();
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC1sb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3NlcnZpY2VzL3Byb2plY3QtbG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQUtoRSxN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Q0FBQztRQUN2QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdEMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7bUZBbE1VLGtCQUFrQjt1RUFBbEIsa0JBQWtCLFdBQWxCLGtCQUFrQixtQkFGakIsTUFBTTs7aUZBRVAsa0JBQWtCO2NBSDlCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFByZXNldCB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQnO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uL21vZGVscy9wcm9qZWN0JztcbmltcG9ydCB7IFdhaXREaWFsb2dDb21wb25lbnQgfSBmcm9tICcuLi93YWl0LWRpYWxvZy93YWl0LWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi9wcmVzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBQcmV2aWV3U2VydmljZSB9IGZyb20gJy4vcHJldmlldy5zZXJ2aWNlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi9wcm9qZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgU2NlbmVTZXJ2aWNlIH0gZnJvbSAnLi9zY2VuZS5zZXJ2aWNlJztcbmltcG9ydCB7IFRpbWVsaW5lU2VydmljZSB9IGZyb20gJy4vdGltZWxpbmUuc2VydmljZSc7XG5pbXBvcnQgeyBVdWlkU2VydmljZSB9IGZyb20gJy4vdXVpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXNldEZpeHR1cmUgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0LWZpeHR1cmUnO1xuaW1wb3J0IHsgV2FybmluZ0RpYWxvZ1NlcnZpY2UgfSBmcm9tICcuL3dhcm5pbmctZGlhbG9nLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJvamVjdExvYWRTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcmV2aWV3U2VydmljZTogUHJldmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcmVzZXRTZXJ2aWNlOiBQcmVzZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2NlbmVTZXJ2aWNlOiBTY2VuZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXVpZFNlcnZpY2U6IFV1aWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGltZWxpbmVTZXJ2aWNlOiBUaW1lbGluZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHdhcm5pbmdEaWFsb2dTZXJ2aWNlOiBXYXJuaW5nRGlhbG9nU2VydmljZVxuICApIHt9XG5cbiAgcHJpdmF0ZSBtaWdyYXRlVG9WZXJzaW9uMigpIHtcbiAgICBmb3IgKGxldCBmaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgY29uc3QgcGl4ZWxLZXlzID0gdGhpcy5maXh0dXJlU2VydmljZS5maXh0dXJlR2V0VW5pcXVlUGl4ZWxLZXlzKGZpeHR1cmUpO1xuICAgICAgaWYgKHBpeGVsS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IHBpeGVsS2V5IG9mIHBpeGVsS2V5cykge1xuICAgICAgICAgIGNvbnN0IHByb2plY3RGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgICBwcm9qZWN0Rml4dHVyZS5maXh0dXJlVXVpZCA9IGZpeHR1cmUudXVpZDtcbiAgICAgICAgICBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSA9IHBpeGVsS2V5O1xuICAgICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRGaXh0dXJlcy5wdXNoKHByb2plY3RGaXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvamVjdEZpeHR1cmUgPSBuZXcgUHJlc2V0Rml4dHVyZSgpO1xuICAgICAgICBwcm9qZWN0Rml4dHVyZS5maXh0dXJlVXVpZCA9IGZpeHR1cmUudXVpZDtcbiAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzLnB1c2gocHJvamVjdEZpeHR1cmUpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBwcmVzZXQgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMpIHtcbiAgICAgIGZvciAobGV0IGZpeHR1cmVVdWlkIG9mIHByZXNldC5maXh0dXJlVXVpZHMpIHtcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChmaXh0dXJlVXVpZCk7XG4gICAgICAgIGNvbnN0IHBpeGVsS2V5cyA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZml4dHVyZUdldFVuaXF1ZVBpeGVsS2V5cyhmaXh0dXJlKTtcbiAgICAgICAgaWYgKHBpeGVsS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yIChsZXQgcGl4ZWxLZXkgb2YgcGl4ZWxLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgICAgIHByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQgPSBmaXh0dXJlVXVpZDtcbiAgICAgICAgICAgIHByZXNldEZpeHR1cmUucGl4ZWxLZXkgPSBwaXhlbEtleTtcbiAgICAgICAgICAgIHByZXNldC5maXh0dXJlcy5wdXNoKHByZXNldEZpeHR1cmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgICBwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkID0gZml4dHVyZVV1aWQ7XG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVzLnB1c2gocHJlc2V0Rml4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnZlcnNpb24gPSAyO1xuICB9XG5cbiAgcHJpdmF0ZSBtaWdyYXRlRnJvbU9sZFByb2plY3QoKSB7XG4gICAgbGV0IG1pZ3JhdGVkID0gZmFsc2U7XG5cbiAgICBpZiAoIXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC52ZXJzaW9uKSB7XG4gICAgICAvLyBNaWdyYXRlIGZyb20gdmVyc2lvbiAxXG4gICAgICB0aGlzLm1pZ3JhdGVUb1ZlcnNpb24yKCk7XG4gICAgICBtaWdyYXRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG1pZ3JhdGVkKSB7XG4gICAgICB0aGlzLndhcm5pbmdEaWFsb2dTZXJ2aWNlLnNob3coJ2Rlc2lnbmVyLnByb2plY3QubWlncmF0ZWQnKS5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFmdGVyTG9hZCgpIHtcbiAgICB0aGlzLm1pZ3JhdGVGcm9tT2xkUHJvamVjdCgpO1xuICAgIHRoaXMuZml4dHVyZVNlcnZpY2UudXBkYXRlQ2FjaGVkRml4dHVyZXMoKTtcbiAgICB0aGlzLnByZXNldFNlcnZpY2UucmVtb3ZlRGVsZXRlZEZpeHR1cmVzKCk7XG4gICAgdGhpcy5wcmV2aWV3U2VydmljZS51cGRhdGVGaXh0dXJlU2V0dXAoKTtcbiAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVNlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5hdXRvT3BlbkZpcnN0RWZmZWN0KCk7XG4gICAgdGhpcy5wcmV2aWV3U2VydmljZS51cGRhdGVTdGFnZSgpO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5wcmV2aWV3TGl2ZSgpO1xuICAgIHRoaXMuc2NlbmVTZXJ2aWNlLnNlbGVjdFByZXNldEZyb21TZWxlY3RlZFNjZW5lKCk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdFNjZW5lc1ByZXNldENvbXBvc2l0aW9uKCkge1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCA9IHRoaXMucHJlc2V0U2VydmljZS5nZXRQcmVzZXRCeVV1aWQodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNlbGVjdGVkUHJlc2V0VXVpZCk7XG4gICAgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMgPSBbXTtcbiAgICBpZiAodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNlbGVjdGVkU2NlbmVVdWlkcykge1xuICAgICAgZm9yIChjb25zdCB1dWlkIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zZWxlY3RlZFNjZW5lVXVpZHMpIHtcbiAgICAgICAgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMucHVzaCh0aGlzLnNjZW5lU2VydmljZS5nZXRTY2VuZUJ5VXVpZCh1dWlkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudGltZWxpbmVTZXJ2aWNlLnNlbGVjdGVkQ29tcG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lbGluZVNlcnZpY2Uuc2VsZWN0ZWRDb21wb3NpdGlvbkluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudGltZWxpbmVTZXJ2aWNlLmRlc3Ryb3lXYXZlU3VyZmVyKCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuY29tcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LmNvbXBvc2l0aW9uc1tpXS51dWlkID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2VsZWN0ZWRDb21wb3NpdGlvblV1aWQpIHtcbiAgICAgICAgdGhpcy50aW1lbGluZVNlcnZpY2Uuc2VsZWN0Q29tcG9zaXRpb25JbmRleChpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbG9hZChpZDogbnVtYmVyLCBuYW1lOiBzdHJpbmcsIHNoYXJlVG9rZW4/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCByZWYgPSB0aGlzLm1vZGFsU2VydmljZS5zaG93KFdhaXREaWFsb2dDb21wb25lbnQsIHsga2V5Ym9hcmQ6IGZhbHNlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvamVjdFNlcnZpY2UuZ2V0UHJvamVjdChpZCwgbmFtZSwgc2hhcmVUb2tlbikucGlwZShcbiAgICAgIG1hcCgocHJvamVjdCkgPT4ge1xuICAgICAgICBpZiAocHJvamVjdC52ZXJzaW9uID4gdGhpcy5wcm9qZWN0U2VydmljZS5jdXJyZW50UHJvamVjdFZlcnNpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnVGhlIHByb2plY3QgdmVyc2lvbiAnICtcbiAgICAgICAgICAgICAgcHJvamVjdC52ZXJzaW9uICtcbiAgICAgICAgICAgICAgJyBpcyBjcmVhdGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIHRoZSBkZXNpZ25lci4gUGxlYXNlIHVwZGF0ZSB5b3VyIFJvY2tldCBTaG93IHZlcnNpb24gdG8gb3BlbiB0aGlzIHByb2plY3QuJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICAgICAgdGhpcy5zZWxlY3RTY2VuZXNQcmVzZXRDb21wb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmFmdGVyTG9hZCgpO1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7XG4gICAgICAgICAgaWQsXG4gICAgICAgICAgdG9rZW46IHByb2plY3Quc2hhcmVUb2tlbixcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsIC8vIHJlbW92ZSB0byByZXBsYWNlIGFsbCBxdWVyeSBwYXJhbXMgYnkgcHJvdmlkZWRcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgLy8gaGlkZSB0aGUgbW9kYWwgYWdhaW4gYmVjYXVzZSBvZjpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZhbG9yLXNvZnR3YXJlL25neC1ib290c3RyYXAvaXNzdWVzLzM3MTFcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVmLmhpZGUoKTtcbiAgICAgICAgfSwgMjUwKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVmLmhpZGUoKTtcbiAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgcmVmLmhpZGUoKTtcbiAgICAgICAgfSwgMTUwMCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZXcoKSB7XG4gICAgLy8gY3JlYXRlIGFuIGVtcHR5IG5ldyBwcm9qZWN0XG4gICAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KCk7XG4gICAgcHJvamVjdC51dWlkID0gdGhpcy51dWlkU2VydmljZS5nZXRVdWlkKCk7XG4gICAgcHJvamVjdC52ZXJzaW9uID0gdGhpcy5wcm9qZWN0U2VydmljZS5jdXJyZW50UHJvamVjdFZlcnNpb247XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2hhcmVUb2tlbiA9IHRoaXMudXVpZFNlcnZpY2UuZ2V0VXVpZCgpO1xuXG4gICAgLy8gQWRkIGEgZGVmYXVsdCBzY2VuZSBhbmQgcHJlc2V0XG4gICAgY29uc3QgcHJlc2V0ID0gbmV3IFByZXNldCgpO1xuICAgIHByZXNldC51dWlkID0gdGhpcy51dWlkU2VydmljZS5nZXRVdWlkKCk7XG4gICAgcHJlc2V0Lm5hbWUgPSAnTmV3IFByZXNldCc7XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMucHVzaChwcmVzZXQpO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RQcmVzZXQoMCk7XG5cbiAgICB0aGlzLnNjZW5lU2VydmljZS5hZGRTY2VuZSgpO1xuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zY2VuZXNbMF0ucHJlc2V0VXVpZHMucHVzaChwcmVzZXQudXVpZCk7XG5cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCA9IHRydWU7XG5cbiAgICB0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lcyA9IFt0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2NlbmVzWzBdXTtcbiAgICB0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQgPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1swXTtcblxuICAgIHRoaXMudGltZWxpbmVTZXJ2aWNlLnNlbGVjdGVkQ29tcG9zaXRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lbGluZVNlcnZpY2Uuc2VsZWN0ZWRDb21wb3NpdGlvbkluZGV4ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudGltZWxpbmVTZXJ2aWNlLmRlc3Ryb3lXYXZlU3VyZmVyKCk7XG5cbiAgICB0aGlzLmFmdGVyTG9hZCgpO1xuXG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IFBhcmFtcyA9IHtcbiAgICAgIGlkOiAnJyxcbiAgICAgIHRva2VuOiAnJyxcbiAgICB9O1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlLFxuICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLCAvLyByZW1vdmUgdG8gcmVwbGFjZSBhbGwgcXVlcnkgcGFyYW1zIGJ5IHByb3ZpZGVkXG4gICAgfSk7XG4gIH1cblxuICB0ZW1wbGF0ZSgpIHtcbiAgICAvLyBsb2FkIHRoZSB0ZW1wbGF0ZSBwcm9qZWN0IHdpdGggaWQgMVxuICAgIHRoaXMubG9hZCgxLCBudWxsKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LmlkID0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICB9XG5cbiAgaW1wb3J0KGRhdGE6IHN0cmluZykge1xuICAgIC8vIGltcG9ydCBhIHByb2plY3QgZnJvbSBhIHN0cmluZ1xuICAgIGNvbnN0IHByb2plY3QgPSBuZXcgUHJvamVjdChKU09OLnBhcnNlKGRhdGEpKTtcbiAgICBwcm9qZWN0LmlkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdCA9IHByb2plY3Q7XG5cbiAgICB0aGlzLnNlbGVjdFNjZW5lc1ByZXNldENvbXBvc2l0aW9uKCk7XG4gICAgdGhpcy5hZnRlckxvYWQoKTtcbiAgfVxufVxuIl19
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC1sb2FkLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3NlcnZpY2VzL3Byb2plY3QtbG9hZC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGNBQWMsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDekQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7Ozs7Ozs7Ozs7OztBQUtoRSxN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T0FBTyxDQUFDLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXRDLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO21GQXRNVSxrQkFBa0I7dUVBQWxCLGtCQUFrQixXQUFsQixrQkFBa0IsbUJBRmpCLE1BQU07O2lGQUVQLGtCQUFrQjtjQUg5QixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUGFyYW1zLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbmFsaXplLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9tb2RlbHMvcHJvamVjdCc7XG5pbXBvcnQgeyBXYWl0RGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vd2FpdC1kaWFsb2cvd2FpdC1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4vcHJlc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJldmlld1NlcnZpY2UgfSBmcm9tICcuL3ByZXZpZXcuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjZW5lU2VydmljZSB9IGZyb20gJy4vc2NlbmUuc2VydmljZSc7XG5pbXBvcnQgeyBUaW1lbGluZVNlcnZpY2UgfSBmcm9tICcuL3RpbWVsaW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXVpZFNlcnZpY2UgfSBmcm9tICcuL3V1aWQuc2VydmljZSc7XG5pbXBvcnQgeyBQcmVzZXRGaXh0dXJlIH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldC1maXh0dXJlJztcbmltcG9ydCB7IFdhcm5pbmdEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi93YXJuaW5nLWRpYWxvZy5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByb2plY3RMb2FkU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJldmlld1NlcnZpY2U6IFByZXZpZXdTZXJ2aWNlLFxuICAgIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJlc2V0U2VydmljZTogUHJlc2V0U2VydmljZSxcbiAgICBwcml2YXRlIHNjZW5lU2VydmljZTogU2NlbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHV1aWRTZXJ2aWNlOiBVdWlkU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSB3YXJuaW5nRGlhbG9nU2VydmljZTogV2FybmluZ0RpYWxvZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIHByaXZhdGUgbWlncmF0ZVRvVmVyc2lvbjIoKSB7XG4gICAgZm9yIChsZXQgZml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLmZpeHR1cmVIYXNHZW5lcmFsQ2hhbm5lbChmaXh0dXJlKSkge1xuICAgICAgICBjb25zdCBwcm9qZWN0Rml4dHVyZSA9IG5ldyBQcmVzZXRGaXh0dXJlKCk7XG4gICAgICAgIHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkID0gZml4dHVyZS51dWlkO1xuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0Rml4dHVyZXMucHVzaChwcm9qZWN0Rml4dHVyZSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBpeGVsS2V5cyA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZml4dHVyZUdldFVuaXF1ZVBpeGVsS2V5cyhmaXh0dXJlKTtcblxuICAgICAgZm9yIChsZXQgcGl4ZWxLZXkgb2YgcGl4ZWxLZXlzKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3RGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgcHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQgPSBmaXh0dXJlLnV1aWQ7XG4gICAgICAgIHByb2plY3RGaXh0dXJlLnBpeGVsS2V5ID0gcGl4ZWxLZXk7XG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRGaXh0dXJlcy5wdXNoKHByb2plY3RGaXh0dXJlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgcHJlc2V0IG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzKSB7XG4gICAgICBmb3IgKGxldCBmaXh0dXJlVXVpZCBvZiBwcmVzZXQuZml4dHVyZVV1aWRzKSB7XG4gICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQoZml4dHVyZVV1aWQpO1xuXG4gICAgICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLmZpeHR1cmVIYXNHZW5lcmFsQ2hhbm5lbChmaXh0dXJlKSkge1xuICAgICAgICAgIGNvbnN0IHByZXNldEZpeHR1cmUgPSBuZXcgUHJlc2V0Rml4dHVyZSgpO1xuICAgICAgICAgIHByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQgPSBmaXh0dXJlVXVpZDtcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZXMucHVzaChwcmVzZXRGaXh0dXJlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBpeGVsS2V5cyA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZml4dHVyZUdldFVuaXF1ZVBpeGVsS2V5cyhmaXh0dXJlKTtcblxuICAgICAgICBmb3IgKGxldCBwaXhlbEtleSBvZiBwaXhlbEtleXMpIHtcbiAgICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgICBwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkID0gZml4dHVyZVV1aWQ7XG4gICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleSA9IHBpeGVsS2V5O1xuICAgICAgICAgIHByZXNldC5maXh0dXJlcy5wdXNoKHByZXNldEZpeHR1cmUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwcmVzZXQuZml4dHVyZVV1aWRzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QudmVyc2lvbiA9IDI7XG4gIH1cblxuICBwcml2YXRlIG1pZ3JhdGVGcm9tT2xkUHJvamVjdCgpIHtcbiAgICBsZXQgbWlncmF0ZWQgPSBmYWxzZTtcblxuICAgIGlmICghdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnZlcnNpb24pIHtcbiAgICAgIC8vIE1pZ3JhdGUgZnJvbSB2ZXJzaW9uIDFcbiAgICAgIHRoaXMubWlncmF0ZVRvVmVyc2lvbjIoKTtcbiAgICAgIG1pZ3JhdGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobWlncmF0ZWQpIHtcbiAgICAgIHRoaXMud2FybmluZ0RpYWxvZ1NlcnZpY2Uuc2hvdygnZGVzaWduZXIucHJvamVjdC5taWdyYXRlZCcpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWZ0ZXJMb2FkKCkge1xuICAgIHRoaXMubWlncmF0ZUZyb21PbGRQcm9qZWN0KCk7XG4gICAgdGhpcy5maXh0dXJlU2VydmljZS51cGRhdGVDYWNoZWRGaXh0dXJlcygpO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5yZW1vdmVEZWxldGVkRml4dHVyZXMoKTtcbiAgICB0aGlzLnByZXZpZXdTZXJ2aWNlLnVwZGF0ZUZpeHR1cmVTZXR1cCgpO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlU2VsZWN0aW9uQ2hhbmdlZC5uZXh0KCk7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLmF1dG9PcGVuRmlyc3RFZmZlY3QoKTtcbiAgICB0aGlzLnByZXZpZXdTZXJ2aWNlLnVwZGF0ZVN0YWdlKCk7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnByZXZpZXdMaXZlKCk7XG4gICAgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0UHJlc2V0RnJvbVNlbGVjdGVkU2NlbmUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0U2NlbmVzUHJlc2V0Q29tcG9zaXRpb24oKSB7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0ID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEJ5VXVpZCh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2VsZWN0ZWRQcmVzZXRVdWlkKTtcbiAgICB0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lcyA9IFtdO1xuICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2VsZWN0ZWRTY2VuZVV1aWRzKSB7XG4gICAgICBmb3IgKGNvbnN0IHV1aWQgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNlbGVjdGVkU2NlbmVVdWlkcykge1xuICAgICAgICB0aGlzLnNjZW5lU2VydmljZS5zZWxlY3RlZFNjZW5lcy5wdXNoKHRoaXMuc2NlbmVTZXJ2aWNlLmdldFNjZW5lQnlVdWlkKHV1aWQpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50aW1lbGluZVNlcnZpY2Uuc2VsZWN0ZWRDb21wb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRpbWVsaW5lU2VydmljZS5zZWxlY3RlZENvbXBvc2l0aW9uSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lbGluZVNlcnZpY2UuZGVzdHJveVdhdmVTdXJmZXIoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5jb21wb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuY29tcG9zaXRpb25zW2ldLnV1aWQgPT09IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zZWxlY3RlZENvbXBvc2l0aW9uVXVpZCkge1xuICAgICAgICB0aGlzLnRpbWVsaW5lU2VydmljZS5zZWxlY3RDb21wb3NpdGlvbkluZGV4KGkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsb2FkKGlkOiBudW1iZXIsIG5hbWU6IHN0cmluZywgc2hhcmVUb2tlbj86IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coV2FpdERpYWxvZ0NvbXBvbmVudCwgeyBrZXlib2FyZDogZmFsc2UsIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0U2VydmljZS5nZXRQcm9qZWN0KGlkLCBuYW1lLCBzaGFyZVRva2VuKS5waXBlKFxuICAgICAgbWFwKChwcm9qZWN0KSA9PiB7XG4gICAgICAgIGlmIChwcm9qZWN0LnZlcnNpb24gPiB0aGlzLnByb2plY3RTZXJ2aWNlLmN1cnJlbnRQcm9qZWN0VmVyc2lvbikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdUaGUgcHJvamVjdCB2ZXJzaW9uICcgK1xuICAgICAgICAgICAgICBwcm9qZWN0LnZlcnNpb24gK1xuICAgICAgICAgICAgICAnIGlzIGNyZWF0ZWQgd2l0aCBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIGRlc2lnbmVyLiBQbGVhc2UgdXBkYXRlIHlvdXIgUm9ja2V0IFNob3cgdmVyc2lvbiB0byBvcGVuIHRoaXMgcHJvamVjdC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLnNlbGVjdFNjZW5lc1ByZXNldENvbXBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJMb2FkKCk7XG5cbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IFBhcmFtcyA9IHtcbiAgICAgICAgICBpZCxcbiAgICAgICAgICB0b2tlbjogcHJvamVjdC5zaGFyZVRva2VuLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJywgLy8gcmVtb3ZlIHRvIHJlcGxhY2UgYWxsIHF1ZXJ5IHBhcmFtcyBieSBwcm92aWRlZFxuICAgICAgICB9KTtcbiAgICAgIH0pLFxuICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAvLyBoaWRlIHRoZSBtb2RhbCBhZ2FpbiBiZWNhdXNlIG9mOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmFsb3Itc29mdHdhcmUvbmd4LWJvb3RzdHJhcC9pc3N1ZXMvMzcxMVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWYuaGlkZSgpO1xuICAgICAgICB9LCAyNTApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWYuaGlkZSgpO1xuICAgICAgICB9LCA1MDApO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICByZWYuaGlkZSgpO1xuICAgICAgICB9LCAxNTAwKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5ldygpIHtcbiAgICAvLyBjcmVhdGUgYW4gZW1wdHkgbmV3IHByb2plY3RcbiAgICBjb25zdCBwcm9qZWN0ID0gbmV3IFByb2plY3QoKTtcbiAgICBwcm9qZWN0LnV1aWQgPSB0aGlzLnV1aWRTZXJ2aWNlLmdldFV1aWQoKTtcbiAgICBwcm9qZWN0LnZlcnNpb24gPSB0aGlzLnByb2plY3RTZXJ2aWNlLmN1cnJlbnRQcm9qZWN0VmVyc2lvbjtcbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QgPSBwcm9qZWN0O1xuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zaGFyZVRva2VuID0gdGhpcy51dWlkU2VydmljZS5nZXRVdWlkKCk7XG5cbiAgICAvLyBBZGQgYSBkZWZhdWx0IHNjZW5lIGFuZCBwcmVzZXRcbiAgICBjb25zdCBwcmVzZXQgPSBuZXcgUHJlc2V0KCk7XG4gICAgcHJlc2V0LnV1aWQgPSB0aGlzLnV1aWRTZXJ2aWNlLmdldFV1aWQoKTtcbiAgICBwcmVzZXQubmFtZSA9ICdOZXcgUHJlc2V0JztcbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5wdXNoKHByZXNldCk7XG4gICAgdGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdFByZXNldCgwKTtcblxuICAgIHRoaXMuc2NlbmVTZXJ2aWNlLmFkZFNjZW5lKCk7XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNjZW5lc1swXS5wcmVzZXRVdWlkcy5wdXNoKHByZXNldC51dWlkKTtcblxuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmV2aWV3UHJlc2V0ID0gdHJ1ZTtcblxuICAgIHRoaXMuc2NlbmVTZXJ2aWNlLnNlbGVjdGVkU2NlbmVzID0gW3RoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zY2VuZXNbMF1dO1xuICAgIHRoaXMucHJlc2V0U2VydmljZS5zZWxlY3RlZFByZXNldCA9IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzWzBdO1xuXG4gICAgdGhpcy50aW1lbGluZVNlcnZpY2Uuc2VsZWN0ZWRDb21wb3NpdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnRpbWVsaW5lU2VydmljZS5zZWxlY3RlZENvbXBvc2l0aW9uSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lbGluZVNlcnZpY2UuZGVzdHJveVdhdmVTdXJmZXIoKTtcblxuICAgIHRoaXMuYWZ0ZXJMb2FkKCk7XG5cbiAgICBjb25zdCBxdWVyeVBhcmFtczogUGFyYW1zID0ge1xuICAgICAgaWQ6ICcnLFxuICAgICAgdG9rZW46ICcnLFxuICAgIH07XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXG4gICAgICBxdWVyeVBhcmFtcyxcbiAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsIC8vIHJlbW92ZSB0byByZXBsYWNlIGFsbCBxdWVyeSBwYXJhbXMgYnkgcHJvdmlkZWRcbiAgICB9KTtcbiAgfVxuXG4gIHRlbXBsYXRlKCkge1xuICAgIC8vIGxvYWQgdGhlIHRlbXBsYXRlIHByb2plY3Qgd2l0aCBpZCAxXG4gICAgdGhpcy5sb2FkKDEsIG51bGwpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuaWQgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gIH1cblxuICBpbXBvcnQoZGF0YTogc3RyaW5nKSB7XG4gICAgLy8gaW1wb3J0IGEgcHJvamVjdCBmcm9tIGEgc3RyaW5nXG4gICAgY29uc3QgcHJvamVjdCA9IG5ldyBQcm9qZWN0KEpTT04ucGFyc2UoZGF0YSkpO1xuICAgIHByb2plY3QuaWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0ID0gcHJvamVjdDtcblxuICAgIHRoaXMuc2VsZWN0U2NlbmVzUHJlc2V0Q29tcG9zaXRpb24oKTtcbiAgICB0aGlzLmFmdGVyTG9hZCgpO1xuICB9XG59XG4iXX0=
|