@rocketshow/designer 1.37.0 → 1.39.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/assets/i18n/de.json +8 -7
- package/assets/i18n/en.json +8 -7
- package/esm2022/lib/designer.component.mjs +10 -10
- package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +18 -5
- package/esm2022/lib/services/preview.service.mjs +7 -3
- package/esm2022/lib/user/user-register/user-register.component.mjs +3 -3
- package/fesm2022/rocketshow-designer.mjs +34 -17
- package/fesm2022/rocketshow-designer.mjs.map +1 -1
- package/package.json +1 -1
- package/rocketshow-designer-1.39.0.tgz +0 -0
- package/rocketshow-designer-1.37.0.tgz +0 -0
|
@@ -296,6 +296,10 @@ export class PreviewService {
|
|
|
296
296
|
}
|
|
297
297
|
}
|
|
298
298
|
mixEffects(timeMillis, fixtureIndex, preset, cachedFixture, values, intensityPercentage) {
|
|
299
|
+
let effectTimeMillis = timeMillis;
|
|
300
|
+
if (preset.region) {
|
|
301
|
+
effectTimeMillis = timeMillis - preset.region.startMillis;
|
|
302
|
+
}
|
|
299
303
|
for (const effect of preset.preset.effects) {
|
|
300
304
|
if (effect.visible) {
|
|
301
305
|
// EffectCurve
|
|
@@ -309,7 +313,7 @@ export class PreviewService {
|
|
|
309
313
|
const fixtureChannelValue = new FixtureChannelValue();
|
|
310
314
|
fixtureChannelValue.channelName = cachedChannel.name;
|
|
311
315
|
fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;
|
|
312
|
-
fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(
|
|
316
|
+
fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(effectTimeMillis, fixtureIndex);
|
|
313
317
|
this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);
|
|
314
318
|
}
|
|
315
319
|
}
|
|
@@ -324,7 +328,7 @@ export class PreviewService {
|
|
|
324
328
|
const fixtureChannelValue = new FixtureChannelValue();
|
|
325
329
|
fixtureChannelValue.channelName = cachedChannel.name;
|
|
326
330
|
fixtureChannelValue.profileUuid = cachedFixture.profile.uuid;
|
|
327
|
-
fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(
|
|
331
|
+
fixtureChannelValue.value = cachedChannel.maxValue * effectCurve.getValueAtMillis(effectTimeMillis, fixtureIndex);
|
|
328
332
|
this.mixChannelValue(values, fixtureChannelValue, intensityPercentage);
|
|
329
333
|
}
|
|
330
334
|
}
|
|
@@ -474,4 +478,4 @@ export class PreviewService {
|
|
|
474
478
|
providedIn: 'root',
|
|
475
479
|
}]
|
|
476
480
|
}], () => [{ type: i1.PresetService }, { type: i2.FixtureService }, { type: i3.SceneService }, { type: i4.TimelineService }, { type: i5.ProjectService }], null); })();
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmV2aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBS3JELE1BQU0sT0FBTyxjQUFjO0lBVXpCLFlBQ1UsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFKOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FB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Q3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQzsrRUF6bkJVLGNBQWM7dUVBQWQsY0FBYyxXQUFkLGNBQWMsbUJBRmIsTUFBTTs7aUZBRVAsY0FBYztjQUgxQixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgRWZmZWN0Q3VydmUgfSBmcm9tICcuLi9tb2RlbHMvZWZmZWN0LWN1cnZlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgUHJlc2V0IH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldCc7XG5pbXBvcnQgeyBQcmVzZXRSZWdpb25TY2VuZSB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQtcmVnaW9uLXNjZW5lJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4vcHJlc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQgeyBTY2VuZVNlcnZpY2UgfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi90aW1lbGluZS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByZXZpZXdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIGRvVXBkYXRlRml4dHVyZVNldHVwOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgc2NlbmU6IFRIUkVFLlNjZW5lO1xuXG4gIHByaXZhdGUgc3RhZ2VNZXNoZXM6IFRIUkVFLk1lc2hbXSA9IFtdO1xuICBwcml2YXRlIHN0YWdlTWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBmaXh0dXJlTWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBmaXh0dXJlU2VsZWN0ZWRNYXRlcmlhbDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhZ2VNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHgwZDBkMGQsXG4gICAgICAvLyByb3VnaG5lc3M6IDAuNSxcbiAgICAgIC8vIG1ldGFsbmVzczogMC41LFxuICAgIH0pO1xuICAgIHRoaXMuZml4dHVyZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4MGQwZDBkLFxuICAgICAgZW1pc3NpdmU6IDB4MGQwZDBkLFxuICAgIH0pO1xuICAgIHRoaXMuZml4dHVyZVNlbGVjdGVkTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHhmZjAwZmYsXG4gICAgICBlbWlzc2l2ZTogMHhmZjAwZmYsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFscmVhZHlDYWxjdWxhdGVkRml4dHVyZShmaXh0dXJlczogQ2FjaGVkRml4dHVyZVtdLCBmaXh0dXJlSW5kZXg6IG51bWJlcik6IENhY2hlZEZpeHR1cmUge1xuICAgIC8vIEhhcyB0aGlzIGZpeHR1cmUgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgKHNhbWUgdW5pdmVyc2UgYW5kIGRteCBzdGFydCBhZGRyZXNzIGFzIGEgZml4dHVyZSBiZWZvcmUpXG4gICAgLy8gLS0+IHJldHVybiBpdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlID0gZml4dHVyZXNbaV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgJiZcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhGaXJzdENoYW5uZWxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlZEZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVzZXRzKHRpbWVNaWxsaXM6IG51bWJlcik6IFByZXNldFJlZ2lvblNjZW5lW10ge1xuICAgIC8vIEdldCByZWxldmFudCBwcmVzZXRzIGluIGNvcnJlY3Qgb3JkZXIgdG8gcHJvY2VzcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc2NlbmUsIGlmIGF2YWlsYWJsZVxuICAgIGxldCBwcmVzZXRzOiBQcmVzZXRSZWdpb25TY2VuZVtdID0gW107XG5cbiAgICBpZiAodGhpcy50aW1lbGluZVNlcnZpY2UucGxheVN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIC8vIE9ubHkgdXNlIGFjdGl2ZSBwcmVzZXRzIGluIGN1cnJlbnQgcmVnaW9uc1xuICAgICAgcHJlc2V0cyA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLmdldFByZXNldHNJblRpbWUodGltZU1pbGxpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCkge1xuICAgICAgICAvLyBPbmx5IHByZXZpZXcgdGhlIHNlbGVjdGVkIHByZXNldFxuICAgICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByZXZpZXcgdGhlIHNlbGVjdGVkIHNjZW5lc1xuICAgICAgICBmb3IgKGxldCBzY2VuZUluZGV4ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNjZW5lcy5sZW5ndGggLSAxOyBzY2VuZUluZGV4ID49IDA7IHNjZW5lSW5kZXgtLSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2NlbmUgb2YgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMpIHtcbiAgICAgICAgICAgIGlmIChzY2VuZS51dWlkID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2NlbmVzW3NjZW5lSW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcHJlc2V0SW5kZXggPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGggLSAxOyBwcmVzZXRJbmRleCA+PSAwOyBwcmVzZXRJbmRleC0tKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcmVzZXRVdWlkIG9mIHNjZW5lLnByZXNldFV1aWRzKSB7XG4gICAgICAgICAgICAgICAgICAvLyBMb29wIG92ZXIgdGhlIHByZXNldHMgaW4gdGhlIHByZXNldCBzZXJ2aWNlIHRvIHJldGFpbiB0aGUgcHJlc2V0IG9yZGVyXG4gICAgICAgICAgICAgICAgICBpZiAocHJlc2V0VXVpZCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbcHJlc2V0SW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1twcmVzZXRJbmRleF0sIHVuZGVmaW5lZCwgc2NlbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXNldHM7XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZShcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBjaGFubmVsVmFsdWU6IEZpeHR1cmVDaGFubmVsVmFsdWUsXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMFxuICApIHtcbiAgICBsZXQgbmV3VmFsdWU6IG51bWJlciA9IGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICBsZXQgZXhpc3RpbmdWYWx1ZTogbnVtYmVyID0gZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGludGVuc2l0eVBlcmNlbnRhZ2UgPCAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIG1peCBhIHBvc3NpYmx5IGV4aXN0aW5nIHZhbHVlIChvciB0aGUgZGVmYXVsdCB2YWx1ZSAwKSB3aXRoIHRoZSBuZXcgdmFsdWUgKGZhZGluZylcblxuICAgICAgLy8gR2V0IHRoZSBleGlzdGVudCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eVxuICAgICAgZm9yIChjb25zdCBleGlzdGluZ0NoYW5uZWxWYWx1ZSBvZiBleGlzdGluZ0NoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXN0aW5nVmFsdWUgPSBleGlzdGluZ0NoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNaXggdGhlIGV4aXN0aW5nIHZhbHVlIHdpdGggdGhlIG5ldyB2YWx1ZVxuICAgICAgbmV3VmFsdWUgPSBleGlzdGluZ1ZhbHVlICogKDEgLSBpbnRlbnNpdHlQZXJjZW50YWdlKSArIG5ld1ZhbHVlICogaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGV4aXN0ZW50IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSAmJlxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZFxuICAgICAgKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3IHZhbHVlXG4gICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZml4dHVyZSBpbmRleCBpbnNpZGUgdGhlIHBhc3NlZCBwcmVzZXQgKHVzZWQgZm9yIGNoYXNpbmcpXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUluZGV4KHByZXNldDogUHJlc2V0LCBmaXh0dXJlVXVpZDogc3RyaW5nLCBwaXhlbEtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleTogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LCBmaXh0dXJlVXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAvLyBmaXh0dXJlIGlzIG5vdCBpbiBwcmVzZXRcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTG9vcCBvdmVyIHRoZSBnbG9iYWwgZml4dHVyZXMgdG8gcmV0YWluIHRoZSBvcmRlclxuICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXNldEZpeHR1cmUgb2YgcHJlc2V0LmZpeHR1cmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVV1aWRBbmRQaXhlbEtleUVxdWFscyhcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCxcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLnBpeGVsS2V5LFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlVXVpZEFuZFBpeGVsS2V5RXF1YWxzKHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLCBmaXh0dXJlVXVpZCwgcHJvamVjdEZpeHR1cmUucGl4ZWxLZXksIHBpeGVsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQpO1xuICAgICAgICAgIGNvbnN0IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkID0ge1xuICAgICAgICAgICAgZmlyc3REbXhDaGFubmVsOiBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCxcbiAgICAgICAgICAgIHBpeGVsS2V5OiBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gY291bnRlZEZpcnN0RG14Q2hhbm5lbFBpeGVsS2V5LnNvbWUoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgaXRlbS5maXJzdERteENoYW5uZWwgPT09IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkLmZpcnN0RG14Q2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKCFpdGVtLnBpeGVsS2V5ICYmICFmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZC5waXhlbEtleSkgfHwgaXRlbS5waXhlbEtleSA9PT0gZmlyc3REbXhDaGFubmVsQW5kRml4dHVyZVV1aWQucGl4ZWxLZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGRvbid0IGNvdW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIGNoYW5uZWwgYXMgYWxyZWFkeSBjb3VudGVkIG9uZXNcbiAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleS5wdXNoKGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldFByZXNldEludGVuc2l0eShwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLCB0aW1lTWlsbGlzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFdoZW4gZmFkaW5nIGlzIGluIHByb2dyZXNzIChvbiBwcmVzZXQgb3Igc2NlbmUtbGV2ZWwpLCB0aGUgY3VycmVudCBwcmVzZXQgZG9lcyBub3RcbiAgICAvLyBmdWxseSBjb3ZlciB1bmRlcmx5aW5nIHZhbHVlcy5cbiAgICAvLyAtPiAwID0gbm8gY292ZXJpbmcgYXQgYWxsLCAxID0gZnVsbHkgY292ZXIgKG5vIGZhZGluZylcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gMTtcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldCA9IDE7XG4gICAgbGV0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSAxO1xuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnNjZW5lKSB7XG4gICAgICAvLyBGYWRlIG91dCBpcyBzdHJvbmdlciB0aGFuIGZhZGUgaW4gKGlmIHRoZXkgb3ZlcmxhcClcblxuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3Igc2NlbmUgZmFkaW5nXG4gICAgICBjb25zdCBzY2VuZVN0YXJ0TWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVJblByZSA/IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgLSBwcmVzZXQuc2NlbmUuZmFkZUluTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcztcbiAgICAgIGNvbnN0IHNjZW5lRW5kTWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVPdXRQb3N0ID8gcHJlc2V0LnJlZ2lvbi5lbmRNaWxsaXMgKyBwcmVzZXQuc2NlbmUuZmFkZU91dE1pbGxpcyA6IHByZXNldC5yZWdpb24uZW5kTWlsbGlzO1xuXG4gICAgICBpZiAodGltZU1pbGxpcyA+IHNjZW5lRW5kTWlsbGlzIC0gcHJlc2V0LnNjZW5lLmZhZGVPdXRNaWxsaXMgJiYgdGltZU1pbGxpcyA8IHNjZW5lRW5kTWlsbGlzKSB7XG4gICAgICAgIC8vIFNjZW5lIGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlU2NlbmUgPSAoc2NlbmVFbmRNaWxsaXMgLSB0aW1lTWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgc2NlbmVTdGFydE1pbGxpcyArIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXMgJiYgdGltZU1pbGxpcyA+IHNjZW5lU3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gU2NlbmUgZmFkZXMgaW5cbiAgICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gKHRpbWVNaWxsaXMgLSBzY2VuZVN0YXJ0TWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnByZXNldCkge1xuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3IgcHJlc2V0IGZhZGluZ1xuICAgICAgbGV0IHByZXNldFN0YXJ0TWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5zdGFydE1pbGxpcyA9PT0gdW5kZWZpbmVkID8gcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyA6IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LnN0YXJ0TWlsbGlzO1xuXG4gICAgICBsZXQgcHJlc2V0RW5kTWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5lbmRNaWxsaXMgPT09IHVuZGVmaW5lZCA/IHByZXNldC5yZWdpb24uZW5kTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyArIHByZXNldC5wcmVzZXQuZW5kTWlsbGlzO1xuXG4gICAgICAvLyBleHRlbmQgdGhlIHJ1bm5pbmcgdGltZSwgaWYgZmFkaW5nIGlzIGRvbmUgb3V0c2lkZSB0aGUgYm91bmRhcmllc1xuICAgICAgcHJlc2V0U3RhcnRNaWxsaXMgLT0gcHJlc2V0LnByZXNldC5mYWRlSW5QcmUgPyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyA6IDA7XG4gICAgICBwcmVzZXRFbmRNaWxsaXMgKz0gcHJlc2V0LnByZXNldC5mYWRlT3V0UG9zdCA/IHByZXNldC5wcmVzZXQuZmFkZU91dE1pbGxpcyA6IDA7XG5cbiAgICAgIGlmICh0aW1lTWlsbGlzID4gcHJlc2V0RW5kTWlsbGlzIC0gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzICYmIHRpbWVNaWxsaXMgPCBwcmVzZXRFbmRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlUHJlc2V0ID0gKHByZXNldEVuZE1pbGxpcyAtIHRpbWVNaWxsaXMpIC8gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgcHJlc2V0U3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyAmJiB0aW1lTWlsbGlzID4gcHJlc2V0U3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIGluXG4gICAgICAgIGludGVuc2l0eVBlcmNlbnRhZ2VQcmVzZXQgPSAodGltZU1pbGxpcyAtIHByZXNldFN0YXJ0TWlsbGlzKSAvIHByZXNldC5wcmVzZXQuZmFkZUluTWlsbGlzO1xuICAgICAgfVxuXG4gICAgICBpbnRlbnNpdHlQZXJjZW50YWdlID0gaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lICogaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgbWl4Q2FwYWJpbGl0eVZhbHVlcyhcbiAgICBwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLFxuICAgIGNhY2hlZEZpeHR1cmU6IENhY2hlZEZpeHR1cmUsXG4gICAgdmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyXG4gICkge1xuICAgIGxldCBoYXNDb2xvciA9IGZhbHNlO1xuXG4gICAgLy8gbWl4IHRoZSBwcmVzZXQgY2FwYWJpbGl0eSB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldENhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQucHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsQ2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUud2hlZWwsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkud2hlZWxOYW1lLFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICAgICAgICBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGNhcGFiaWxpdGllcyBtYXRjaCAtPiBhcHBseSB0aGUgdmFsdWUsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkgfHxcbiAgICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpICYmXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA+PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSBhbmQgY29sb3JJbnRlbnNpdHkgKGRpbW1lciBhbmQgY29sb3IpXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVQZXJjZW50YWdlID0gcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gYnJpZ2h0bmVzcyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhcGFiaWxpdHkgaW4gdGhpcyBjaGFubmVsXG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIHZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBtb3JlIHRoYW4gb25lIGNhcGFiaWxpdHkgaW4gdGhlIGNoYW5uZWxcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3MgPT09ICdvZmYnICYmIHZhbHVlUGVyY2VudGFnZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2hhbm5lbENhcGFiaWxpdHkuY2VudGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuYnJpZ2h0bmVzc1N0YXJ0ID09PSAnZGFyaycgfHwgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5icmlnaHRuZXNzU3RhcnQgPT09ICdvZmYnKSAmJlxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3NFbmQgPT09ICdicmlnaHQnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgKiB2YWx1ZVBlcmNlbnRhZ2UgK1xuICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuIHx8IHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdCkgJiZcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlID49IDBcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgMSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5XaGVlbFNsb3QgJiZcbiAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIgPT09IHByZXNldENhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIHdoZWVsIHNsb3QgKGNvbG9yLCBnb2JvLCBldGMuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjaGFubmVsQ2FwYWJpbGl0eS5jZW50ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2ssIHdoZXRoZXIgd2UganVzdCBzZXQgYSBjb2xvciB3aGVlbCB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS53aGVlbElzQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHByb3hpbWF0ZSB0aGUgY29sb3IgZnJvbSBhIGNvbG9yIG9yIGEgZGlmZmVyZW50IGNvbG9yIHdoZWVsLCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCFoYXNDb2xvciAmJiBjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldEFwcHJveGltYXRlZENvbG9yV2hlZWxDYXBhYmlsaXR5KHByZXNldC5wcmVzZXQsIGNhY2hlZENoYW5uZWwpO1xuXG4gICAgICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIGFuIGFwcHJveGltYXRlZCBjb2xvciBpbiB0aGUgYXZhaWxhYmxlIHdoZWVsIGNoYW5uZWxcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYXBhYmlsaXR5LmNlbnRlclZhbHVlO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZXMoXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICAvLyBtaXggdGhlIHByZXNldCBjaGFubmVsIHZhbHVlc1xuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIHByZXNldC5wcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCAmJiBjYWNoZWRDaGFubmVsLm5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBjaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWl4RWZmZWN0cyhcbiAgICB0aW1lTWlsbGlzOiBudW1iZXIsXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICBmb3IgKGNvbnN0IGVmZmVjdCBvZiBwcmVzZXQucHJlc2V0LmVmZmVjdHMpIHtcbiAgICAgIGlmIChlZmZlY3QudmlzaWJsZSkge1xuICAgICAgICAvLyBFZmZlY3RDdXJ2ZVxuICAgICAgICBpZiAoZWZmZWN0IGluc3RhbmNlb2YgRWZmZWN0Q3VydmUpIHtcbiAgICAgICAgICBjb25zdCBlZmZlY3RDdXJ2ZSA9IGVmZmVjdCBhcyBFZmZlY3RDdXJ2ZTtcblxuICAgICAgICAgIC8vIGNhcGFiaWxpdGllc1xuICAgICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBlZmZlY3RDdXJ2ZS5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbENhcGFiaWxpdHkgb2YgY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBlZmZlY3RDdXJ2ZS5nZXRWYWx1ZUF0TWlsbGlzKHRpbWVNaWxsaXMsIGZpeHR1cmVJbmRleCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoYW5uZWxzXG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsUHJvZmlsZSBvZiBlZmZlY3RDdXJ2ZS5jaGFubmVscykge1xuICAgICAgICAgICAgaWYgKGNoYW5uZWxQcm9maWxlLnByb2ZpbGVVdWlkID09PSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZCkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbFByb2ZpbGUuY2hhbm5lbHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwubmFtZSA9PT0gY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIGVmZmVjdEN1cnZlLmdldFZhbHVlQXRNaWxsaXModGltZU1pbGxpcywgZml4dHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIG90aGVyIGVmZmVjdHMgKFBhblRpbHQsIGV0Yy4pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIGFsbCBmaXh0dXJlIHV1aWRzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFubmVsIHZhbHVlc1xuICBwdWJsaWMgZ2V0Q2hhbm5lbFZhbHVlcyh0aW1lTWlsbGlzOiBudW1iZXIsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBNYXA8Q2FjaGVkRml4dHVyZSwgRml4dHVyZUNoYW5uZWxWYWx1ZVtdPiB7XG4gICAgLy8gTG9vcCBvdmVyIGFsbCByZWxldmFudCBwcmVzZXRzIGFuZCBjYWxjIHRoZSBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSB0aGUgcHJlc2V0cyAoY2FwYWJpbGl0aWVzLCBjaGFubmVscyBhbmQgZWZmZWN0cylcbiAgICBjb25zdCBjYWxjdWxhdGVkRml4dHVyZXMgPSBuZXcgTWFwPENhY2hlZEZpeHR1cmUsIEZpeHR1cmVDaGFubmVsVmFsdWVbXT4oKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maXh0dXJlU2VydmljZS5jYWNoZWRGaXh0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2FjaGVkRml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXNbaV07XG5cbiAgICAgIC8vIGFsbCB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgZml4dHVyZSBjaGFubmVsc1xuICAgICAgbGV0IHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdID0gW107XG5cbiAgICAgIGNvbnN0IGFscmVhZHlDYWxjdWxhdGVkRml4dHVyZSA9IHRoaXMuZ2V0QWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXMsIGkpO1xuXG4gICAgICBpZiAoYWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKSB7XG4gICAgICAgIC8vIG9ubHkgcmVsZXZhbnQgZm9yIHRoZSBwcmV2aWV3IC0tPiByZXVzZSBhbGwgY2FsY3VsYXRlZCB2YWx1ZXNcbiAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbihbXSwgY2FsY3VsYXRlZEZpeHR1cmVzLmdldChhbHJlYWR5Q2FsY3VsYXRlZEZpeHR1cmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFwcGx5IHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYWNoZWRDaGFubmVsLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICAgICAgLy8gc2VhcmNoIGZvciB0aGlzIGZpeHR1cmUgaW4gdGhlIHByZXNldCBhbmQgZ2V0IGl0J3MgcHJlc2V0LXNwZWNpZmljIGluZGV4IChmb3IgY2hhc2luZyBlZmZlY3RzKVxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHRoaXMuZ2V0Rml4dHVyZUluZGV4KHByZXNldC5wcmVzZXQsIGNhY2hlZEZpeHR1cmUuZml4dHVyZS51dWlkLCBjYWNoZWRGaXh0dXJlLnBpeGVsS2V5KTtcblxuICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gdGhpcyBmaXh0dXJlIGlzIGFsc28gaW4gdGhlIHByZXNldCAtPiBtaXggdGhlIHJlcXVpcmVkIHZhbHVlcyAob3ZlcndyaXRlIGV4aXN0aW5nIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGlmIHNldCBtdWx0aXBsZSB0aW1lcylcbiAgICAgICAgICAgIGNvbnN0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSB0aGlzLmdldFByZXNldEludGVuc2l0eShwcmVzZXQsIHRpbWVNaWxsaXMpO1xuXG4gICAgICAgICAgICB0aGlzLm1peENhcGFiaWxpdHlWYWx1ZXMocHJlc2V0LCBjYWNoZWRGaXh0dXJlLCB2YWx1ZXMsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWVzKHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgIHRoaXMubWl4RWZmZWN0cyh0aW1lTWlsbGlzLCBmaXh0dXJlSW5kZXgsIHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGZvciBzdWJzZXF1ZW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIERNWCBhZGRyZXNzXG4gICAgICBjYWxjdWxhdGVkRml4dHVyZXMuc2V0KGNhY2hlZEZpeHR1cmUsIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGN1bGF0ZWRGaXh0dXJlcztcbiAgfVxuXG4gIHB1YmxpYyBmaXh0dXJlSXNTZWxlY3RlZCh1dWlkOiBzdHJpbmcsIHBpeGVsS2V5OiBzdHJpbmcsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LnByZXNldCwgdXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaXh0dXJlU2V0dXAoKSB7XG4gICAgdGhpcy5kb1VwZGF0ZUZpeHR1cmVTZXR1cC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTdGFnZU1lc2gobWVzaDogVEhSRUUuTWVzaCkge1xuICAgIG1lc2gucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuICAgIG1lc2guY2FzdFNoYWRvdyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0YWdlKCkge1xuICAgIGlmICghdGhpcy5zY2VuZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBnZW9tZXRyeTogYW55O1xuICAgIGxldCBtZXNoOiBhbnk7XG5cbiAgICAvLyBSZW1vdmUgb2xkIG1lc2hlcyBmcm9tIHRoZSBzY2VuZVxuICAgIGZvciAoY29uc3QgZXhpc3RpbmdNZXNoIG9mIHRoaXMuc3RhZ2VNZXNoZXMpIHtcbiAgICAgIHRoaXMuc2NlbmUucmVtb3ZlKGV4aXN0aW5nTWVzaCk7XG4gICAgICBleGlzdGluZ01lc2guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTWVzaGVzID0gW107XG5cbiAgICAvLyBHcm91bmRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDUwMDAsIDUwMDApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgbWVzaC5yb3RhdGVYKChNYXRoLlBJIC8gMTgwKSAqIC05MCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gRmxvb3JcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldCgwLCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtIC8gMiwgMCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGZyb250IGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgZnJvbnQgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIFBpbGxhciBiYWNrIGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMlxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGJhY2sgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBDZWlsaW5nXG4gICAgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlQ2VpbGluZ0hlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIDAsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSArXG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUNlaWxpbmdIZWlnaHRDbSAvIDIgK1xuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgMFxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5maXh0dXJlTWF0ZXJpYWwuZGlzcG9zZSgpO1xuICAgIHRoaXMuZml4dHVyZVNlbGVjdGVkTWF0ZXJpYWwuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
|
|
481
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmV2aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBS3JELE1BQU0sT0FBTyxjQUFjO0lBVXpCLFlBQ1UsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFKOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFkakMseUJBQW9CLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFJbkQsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBWXJDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxLQUFLLENBQUMsb0JBQW9CLENBQUM7WUFDbEQsS0FBSyxFQUFFLFFBQVE7WUFDZixrQkFBa0I7WUFDbEIsa0JBQWtCO1NBQ25CLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUM7WUFDbkQsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxLQUFLLENBQUMsbUJBQW1CLENBQUM7WUFDM0QsS0FBSyxFQUFFLFFBQVE7WUFDZixRQUFRLEVBQUUsUUFBUTtTQUNuQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsUUFBeUIsRUFBRSxZQUFvQjtRQUNqRixxR0FBcUc7UUFDckcsZ0JBQWdCO1FBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN0QyxNQUFNLGlCQUFpQixHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUV0QyxJQUNFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlO2dCQUM1RixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUM1RixDQUFDO2dCQUNELE9BQU8saUJBQWlCLENBQUM7WUFDM0IsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sVUFBVSxDQUFDLFVBQWtCO1FBQ2xDLGdHQUFnRztRQUNoRyxJQUFJLE9BQU8sR0FBd0IsRUFBRSxDQUFDO1FBRXRDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsNkNBQTZDO1lBQzdDLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDOUMsbUNBQW1DO2dCQUNuQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDL0YsQ0FBQztZQUNILENBQUM7aUJBQU0sQ0FBQztnQkFDTiw4QkFBOEI7Z0JBQzlCLEtBQUssSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDO29CQUNuRyxLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxFQUFFLENBQUM7d0JBQ3JELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7NEJBQ3ZFLEtBQUssSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsV0FBVyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO2dDQUN2RyxLQUFLLE1BQU0sVUFBVSxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQ0FDM0MseUVBQXlFO29DQUN6RSxJQUFJLFVBQVUsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7d0NBQ3pFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7d0NBQ3hHLE1BQU07b0NBQ1IsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxlQUFlLENBQ3JCLHFCQUE0QyxFQUM1QyxZQUFpQyxFQUNqQyxtQkFBMkIsRUFDM0IsZUFBdUIsQ0FBQztRQUV4QixJQUFJLFFBQVEsR0FBVyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksYUFBYSxHQUFXLFlBQVksQ0FBQztRQUV6QyxJQUFJLG1CQUFtQixHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVCLGdHQUFnRztZQUVoRywyQ0FBMkM7WUFDM0MsS0FBSyxNQUFNLG9CQUFvQixJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQ3pELElBQ0Usb0JBQW9CLENBQUMsV0FBVyxLQUFLLFlBQVksQ0FBQyxXQUFXO29CQUM3RCxvQkFBb0IsQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFDN0QsQ0FBQztvQkFDRCxhQUFhLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxDQUFDO29CQUMzQyxNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1lBRUQsNENBQTRDO1lBQzVDLFFBQVEsR0FBRyxhQUFhLEdBQUcsQ0FBQyxDQUFDLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxRQUFRLEdBQUcsbUJBQW1CLENBQUM7UUFDeEYsQ0FBQztRQUVELDBDQUEwQztRQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcscUJBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEQsSUFDRSxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEtBQUssWUFBWSxDQUFDLFdBQVc7Z0JBQ2pFLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsS0FBSyxZQUFZLENBQUMsV0FBVyxFQUNqRSxDQUFDO2dCQUNELHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixNQUFNLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztRQUN0RCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUMzRCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUMzRCxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ3JDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxvRUFBb0U7SUFDNUQsZUFBZSxDQUFDLE1BQWMsRUFBRSxXQUFtQixFQUFFLFFBQWdCO1FBQzNFLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLE1BQU0sOEJBQThCLEdBQVUsRUFBRSxDQUFDO1FBRWpELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN4RSwyQkFBMkI7WUFDM0IsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELG9EQUFvRDtRQUNwRCxLQUFLLE1BQU0sY0FBYyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hFLEtBQUssTUFBTSxhQUFhLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM1QyxJQUNFLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQzdDLGNBQWMsQ0FBQyxXQUFXLEVBQzFCLGFBQWEsQ0FBQyxXQUFXLEVBQ3pCLGNBQWMsQ0FBQyxRQUFRLEVBQ3ZCLGFBQWEsQ0FBQyxRQUFRLENBQ3ZCLEVBQ0QsQ0FBQztvQkFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO3dCQUNoSSxPQUFPLEtBQUssQ0FBQztvQkFDZixDQUFDO29CQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNqRixNQUFNLDZCQUE2QixHQUFHO3dCQUNwQyxlQUFlLEVBQUUsT0FBTyxDQUFDLGVBQWU7d0JBQ3hDLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtxQkFDbEMsQ0FBQztvQkFFRixNQUFNLE1BQU0sR0FBRyw4QkFBOEIsQ0FBQyxJQUFJLENBQ2hELENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDUCxJQUFJLENBQUMsZUFBZSxLQUFLLDZCQUE2QixDQUFDLGVBQWU7d0JBQ3RFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLDZCQUE2QixDQUFDLFFBQVEsQ0FBQyxDQUM1SCxDQUFDO29CQUVGLG1FQUFtRTtvQkFDbkUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO3dCQUNaLEtBQUssRUFBRSxDQUFDO3dCQUNSLDhCQUE4QixDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO29CQUNyRSxDQUFDO29CQUVELE1BQU07Z0JBQ1IsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE1BQXlCLEVBQUUsVUFBa0I7UUFDdEUscUZBQXFGO1FBQ3JGLGlDQUFpQztRQUNqQyx5REFBeUQ7UUFDekQsSUFBSSx3QkFBd0IsR0FBRyxDQUFDLENBQUM7UUFDakMsSUFBSSx5QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDbEMsSUFBSSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7UUFFNUIsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNsQyxzREFBc0Q7WUFFdEQsdUNBQXVDO1lBQ3ZDLE1BQU0sZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUNwSSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBRWpJLElBQUksVUFBVSxHQUFHLGNBQWMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsSUFBSSxVQUFVLEdBQUcsY0FBYyxFQUFFLENBQUM7Z0JBQzVGLGtCQUFrQjtnQkFDbEIsd0JBQXdCLEdBQUcsQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7WUFDeEYsQ0FBQztpQkFBTSxJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxVQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDdEcsaUJBQWlCO2dCQUNqQix3QkFBd0IsR0FBRyxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDO1lBQ3pGLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyx3Q0FBd0M7WUFDeEMsSUFBSSxpQkFBaUIsR0FDbkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFFOUgsSUFBSSxlQUFlLEdBQ2pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBRXhILG9FQUFvRTtZQUNwRSxpQkFBaUIsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RSxlQUFlLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0UsSUFBSSxVQUFVLEdBQUcsZUFBZSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLFVBQVUsR0FBRyxlQUFlLEVBQUUsQ0FBQztnQkFDL0YsbUJBQW1CO2dCQUNuQix5QkFBeUIsR0FBRyxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUMzRixDQUFDO2lCQUFNLElBQUksVUFBVSxHQUFHLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsWUFBWSxJQUFJLFVBQVUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO2dCQUN6RyxrQkFBa0I7Z0JBQ2xCLHlCQUF5QixHQUFHLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDNUYsQ0FBQztZQUVELG1CQUFtQixHQUFHLHdCQUF3QixHQUFHLHlCQUF5QixDQUFDO1FBQzdFLENBQUM7UUFFRCxPQUFPLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsTUFBeUIsRUFDekIsYUFBNEIsRUFDNUIsTUFBNkIsRUFDN0IsbUJBQTJCO1FBRTNCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUVyQixtQ0FBbUM7UUFDbkMsS0FBSyxNQUFNLHFCQUFxQixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMxRSxLQUFLLE1BQU0sYUFBYSxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQzFCLEtBQUssTUFBTSxpQkFBaUIsSUFBSSxhQUFhLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQzNELElBQ0UsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FDbkMscUJBQXFCLENBQUMsSUFBSSxFQUMxQixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUNqQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQzNCLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQ2xDLHFCQUFxQixDQUFDLEtBQUssRUFDM0IsaUJBQWlCLENBQUMsU0FBUyxFQUMzQixxQkFBcUIsQ0FBQyxXQUFXLEVBQ2pDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUMzQixFQUNELENBQUM7NEJBQ0QseURBQXlEOzRCQUN6RCxJQUNFLENBQUMscUJBQXFCLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFNBQVM7Z0NBQzdELHFCQUFxQixDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLENBQUM7Z0NBQ3RFLHFCQUFxQixDQUFDLGVBQWUsSUFBSSxDQUFDLEVBQzFDLENBQUM7Z0NBQ0Qsa0RBQWtEO2dDQUNsRCxNQUFNLGVBQWUsR0FBRyxxQkFBcUIsQ0FBQyxlQUFlLENBQUM7Z0NBQzlELE1BQU0sWUFBWSxHQUFHLENBQUMsQ0FBQztnQ0FFdkIsc0JBQXNCO2dDQUN0QixJQUFJLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO29DQUM1QyxzQ0FBc0M7b0NBQ3RDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO29DQUN0RCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQztvQ0FDckQsbUJBQW1CLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO29DQUM3RCxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUM7b0NBQ3JFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxDQUFDO29DQUVyRixJQUFJLHFCQUFxQixDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQzt3Q0FDeEUsUUFBUSxHQUFHLElBQUksQ0FBQztvQ0FDbEIsQ0FBQztnQ0FDSCxDQUFDO3FDQUFNLENBQUM7b0NBQ04sMENBQTBDO29DQUMxQyxJQUFJLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLGVBQWUsS0FBSyxDQUFDLEVBQUUsQ0FBQzt3Q0FDL0UsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7d0NBQ3RELG1CQUFtQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO3dDQUNyRCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0NBQzdELG1CQUFtQixDQUFDLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7d0NBQzFELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLFlBQVksQ0FBQyxDQUFDO3dDQUVyRixJQUFJLHFCQUFxQixDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQzs0Q0FDeEUsUUFBUSxHQUFHLElBQUksQ0FBQzt3Q0FDbEIsQ0FBQztvQ0FDSCxDQUFDO3lDQUFNLElBQ0wsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsZUFBZSxLQUFLLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQzt3Q0FDbkgsaUJBQWlCLENBQUMsVUFBVSxDQUFDLGFBQWEsS0FBSyxRQUFRLEVBQ3ZELENBQUM7d0NBQ0QsTUFBTSxLQUFLLEdBQ1QsQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxlQUFlOzRDQUN2RyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dDQUUzQyxNQUFNLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQzt3Q0FDdEQsbUJBQW1CLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7d0NBQ3JELG1CQUFtQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQzt3Q0FDN0QsbUJBQW1CLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQzt3Q0FDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxDQUFDLENBQUM7d0NBRXJGLElBQUkscUJBQXFCLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDOzRDQUN4RSxRQUFRLEdBQUcsSUFBSSxDQUFDO3dDQUNsQixDQUFDO29DQUNILENBQUM7Z0NBQ0gsQ0FBQzs0QkFDSCxDQUFDO2lDQUFNLElBQ0wsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsR0FBRyxJQUFJLHFCQUFxQixDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7Z0NBQ3ZILHFCQUFxQixDQUFDLGVBQWUsSUFBSSxDQUFDLEVBQzFDLENBQUM7Z0NBQ0QsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7Z0NBQ3RELG1CQUFtQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO2dDQUNyRCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0NBQzdELG1CQUFtQixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxHQUFHLHFCQUFxQixDQUFDLGVBQWUsQ0FBQztnQ0FDM0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQ3ZELENBQUM7aUNBQU0sSUFDTCxxQkFBcUIsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsU0FBUztnQ0FDOUQsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFVBQVUsS0FBSyxxQkFBcUIsQ0FBQyxVQUFVLEVBQzVFLENBQUM7Z0NBQ0QsaUNBQWlDO2dDQUNqQyxNQUFNLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztnQ0FDdEQsbUJBQW1CLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0NBQ3JELG1CQUFtQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztnQ0FDN0QsbUJBQW1CLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztnQ0FDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0NBRXJELGlEQUFpRDtnQ0FDakQsSUFBSSxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQ0FDbkMsUUFBUSxHQUFHLElBQUksQ0FBQztnQ0FDbEIsQ0FBQzs0QkFDSCxDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztnQkFDSCxDQUFDO2dCQUVELDhFQUE4RTtnQkFDOUUsSUFBSSxDQUFDLFFBQVEsSUFBSSxhQUFhLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQzFDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsbUNBQW1DLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFFeEcsSUFBSSxVQUFVLEVBQUUsQ0FBQzt3QkFDZixnRUFBZ0U7d0JBQ2hFLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO3dCQUN0RCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQzt3QkFDckQsbUJBQW1CLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dCQUM3RCxtQkFBbUIsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQzt3QkFDbkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQixDQUN0QixNQUF5QixFQUN6QixhQUE0QixFQUM1QixNQUE2QixFQUM3QixtQkFBMkI7UUFFM0IsZ0NBQWdDO1FBQ2hDLEtBQUssTUFBTSxhQUFhLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ25ELElBQUksYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUMxQixLQUFLLE1BQU0sWUFBWSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztvQkFDOUQsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxZQUFZLENBQUMsV0FBVyxJQUFJLGFBQWEsQ0FBQyxJQUFJLEtBQUssWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO3dCQUMvRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztvQkFDbEUsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sVUFBVSxDQUNoQixVQUFrQixFQUNsQixZQUFvQixFQUNwQixNQUF5QixFQUN6QixhQUE0QixFQUM1QixNQUE2QixFQUM3QixtQkFBMkI7UUFFM0IsSUFBSSxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7UUFFbEMsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEIsZ0JBQWdCLEdBQUcsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQzVELENBQUM7UUFFRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDM0MsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25CLGNBQWM7Z0JBQ2QsSUFBSSxNQUFNLFlBQVksV0FBVyxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sV0FBVyxHQUFHLE1BQXFCLENBQUM7b0JBRTFDLGVBQWU7b0JBQ2YsS0FBSyxNQUFNLFVBQVUsSUFBSSxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7d0JBQ2xELEtBQUssTUFBTSxhQUFhLElBQUksYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDOzRCQUNuRCxLQUFLLE1BQU0saUJBQWlCLElBQUksYUFBYSxDQUFDLFlBQVksRUFBRSxDQUFDO2dDQUMzRCxJQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQ25DLFVBQVUsQ0FBQyxJQUFJLEVBQ2YsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksRUFDakMsVUFBVSxDQUFDLEtBQUssRUFDaEIsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEtBQUssRUFDbEMsSUFBSSxFQUNKLElBQUksRUFDSixJQUFJLEVBQ0osSUFBSSxDQUNMLEVBQ0QsQ0FBQztvQ0FDRCxNQUFNLG1CQUFtQixHQUFHLElBQUksbUJBQW1CLEVBQUUsQ0FBQztvQ0FDdEQsbUJBQW1CLENBQUMsV0FBVyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUM7b0NBQ3JELG1CQUFtQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztvQ0FDN0QsbUJBQW1CLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxDQUFDO29DQUNsSCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO2dDQUN6RSxDQUFDOzRCQUNILENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUVELFdBQVc7b0JBQ1gsS0FBSyxNQUFNLGNBQWMsSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7d0JBQ2xELElBQUksY0FBYyxDQUFDLFdBQVcsS0FBSyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUM5RCxLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQ0FDOUMsS0FBSyxNQUFNLGFBQWEsSUFBSSxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7b0NBQ25ELElBQUksYUFBYSxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQzt3Q0FDbkMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7d0NBQ3RELG1CQUFtQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDO3dDQUNyRCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7d0NBQzdELG1CQUFtQixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQzt3Q0FDbEgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztvQ0FDekUsQ0FBQztnQ0FDSCxDQUFDOzRCQUNILENBQUM7NEJBRUQsTUFBTTt3QkFDUixDQUFDO29CQUNILENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxxQ0FBcUM7WUFDdkMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsbUVBQW1FO0lBQzVELGdCQUFnQixDQUFDLFVBQWtCLEVBQUUsT0FBNEI7UUFDdEUsb0hBQW9IO1FBQ3BILE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxHQUFHLEVBQXdDLENBQUM7UUFFM0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ25FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRTVELDZDQUE2QztZQUM3QyxJQUFJLE1BQU0sR0FBMEIsRUFBRSxDQUFDO1lBRXZDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXpHLElBQUksd0JBQXdCLEVBQUUsQ0FBQztnQkFDN0IsZ0VBQWdFO2dCQUNoRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztZQUMvRSxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sMkJBQTJCO2dCQUMzQixLQUFLLE1BQU0sYUFBYSxJQUFJLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbkQsSUFBSSxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQzFCLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDdkMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7NEJBQ3RELG1CQUFtQixDQUFDLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDOzRCQUNyRCxtQkFBbUIsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7NEJBQzdELG1CQUFtQixDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDOzRCQUN2RCxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDdkQsQ0FBQztvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDN0IsaUdBQWlHO29CQUNqRyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUU3RyxJQUFJLFlBQVksSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDdEIsNEZBQTRGO3dCQUM1Rix5QkFBeUI7d0JBQ3pCLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQzt3QkFFeEUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixDQUFDLENBQUM7d0JBQzdFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO3dCQUMxRSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztvQkFDaEcsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUVELDhFQUE4RTtZQUM5RSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxPQUE0QjtRQUNuRixLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUN2RSxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBZ0I7UUFDdkMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDMUIsQ0FBQztJQUVNLFdBQVc7UUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksUUFBYSxDQUFDO1FBQ2xCLElBQUksSUFBUyxDQUFDO1FBRWQsbUNBQW1DO1FBQ25DLEtBQUssTUFBTSxZQUFZLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBRXRCLFNBQVM7UUFDVCxRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQyxJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixRQUFRO1FBQ1IsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUN6QyxDQUFDO1FBQ0YsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVCLG9CQUFvQjtRQUNwQixRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FDL0MsQ0FBQztRQUNGLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2YsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFDbEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDOUYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQ2xHLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixxQkFBcUI7UUFDckIsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFDekMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQy9DLENBQUM7UUFDRixJQUFJLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUNmLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxFQUNqRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUM5RixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FDbEcsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVCLG1CQUFtQjtRQUNuQixRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FDL0MsQ0FBQztRQUNGLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2YsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFDbEcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDOUYsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FDbkcsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTVCLG9CQUFvQjtRQUNwQixRQUFRLEdBQUcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFDOUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUN6QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FDL0MsQ0FBQztRQUNGLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2YsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEVBQ2pHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQzlGLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQ25HLENBQUM7UUFDRixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QixVQUFVO1FBQ1YsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFDaEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUN6QyxDQUFDO1FBQ0YsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FDZixDQUFDLEVBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYTtZQUN2QyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsR0FBRyxDQUFDO1lBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUNoRCxDQUFDLENBQ0YsQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQzsrRUEvbkJVLGNBQWM7dUVBQWQsY0FBYyxXQUFkLGNBQWMsbUJBRmIsTUFBTTs7aUZBRVAsY0FBYztjQUgxQixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgRWZmZWN0Q3VydmUgfSBmcm9tICcuLi9tb2RlbHMvZWZmZWN0LWN1cnZlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgUHJlc2V0IH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldCc7XG5pbXBvcnQgeyBQcmVzZXRSZWdpb25TY2VuZSB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQtcmVnaW9uLXNjZW5lJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4vcHJlc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQgeyBTY2VuZVNlcnZpY2UgfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi90aW1lbGluZS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByZXZpZXdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIGRvVXBkYXRlRml4dHVyZVNldHVwOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgc2NlbmU6IFRIUkVFLlNjZW5lO1xuXG4gIHByaXZhdGUgc3RhZ2VNZXNoZXM6IFRIUkVFLk1lc2hbXSA9IFtdO1xuICBwcml2YXRlIHN0YWdlTWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBmaXh0dXJlTWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBmaXh0dXJlU2VsZWN0ZWRNYXRlcmlhbDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhZ2VNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHgwZDBkMGQsXG4gICAgICAvLyByb3VnaG5lc3M6IDAuNSxcbiAgICAgIC8vIG1ldGFsbmVzczogMC41LFxuICAgIH0pO1xuICAgIHRoaXMuZml4dHVyZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4MGQwZDBkLFxuICAgICAgZW1pc3NpdmU6IDB4MGQwZDBkLFxuICAgIH0pO1xuICAgIHRoaXMuZml4dHVyZVNlbGVjdGVkTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHhmZjAwZmYsXG4gICAgICBlbWlzc2l2ZTogMHhmZjAwZmYsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFscmVhZHlDYWxjdWxhdGVkRml4dHVyZShmaXh0dXJlczogQ2FjaGVkRml4dHVyZVtdLCBmaXh0dXJlSW5kZXg6IG51bWJlcik6IENhY2hlZEZpeHR1cmUge1xuICAgIC8vIEhhcyB0aGlzIGZpeHR1cmUgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgKHNhbWUgdW5pdmVyc2UgYW5kIGRteCBzdGFydCBhZGRyZXNzIGFzIGEgZml4dHVyZSBiZWZvcmUpXG4gICAgLy8gLS0+IHJldHVybiBpdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlID0gZml4dHVyZXNbaV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgJiZcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhGaXJzdENoYW5uZWxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlZEZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVzZXRzKHRpbWVNaWxsaXM6IG51bWJlcik6IFByZXNldFJlZ2lvblNjZW5lW10ge1xuICAgIC8vIEdldCByZWxldmFudCBwcmVzZXRzIGluIGNvcnJlY3Qgb3JkZXIgdG8gcHJvY2VzcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc2NlbmUsIGlmIGF2YWlsYWJsZVxuICAgIGxldCBwcmVzZXRzOiBQcmVzZXRSZWdpb25TY2VuZVtdID0gW107XG5cbiAgICBpZiAodGhpcy50aW1lbGluZVNlcnZpY2UucGxheVN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIC8vIE9ubHkgdXNlIGFjdGl2ZSBwcmVzZXRzIGluIGN1cnJlbnQgcmVnaW9uc1xuICAgICAgcHJlc2V0cyA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLmdldFByZXNldHNJblRpbWUodGltZU1pbGxpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCkge1xuICAgICAgICAvLyBPbmx5IHByZXZpZXcgdGhlIHNlbGVjdGVkIHByZXNldFxuICAgICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByZXZpZXcgdGhlIHNlbGVjdGVkIHNjZW5lc1xuICAgICAgICBmb3IgKGxldCBzY2VuZUluZGV4ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNjZW5lcy5sZW5ndGggLSAxOyBzY2VuZUluZGV4ID49IDA7IHNjZW5lSW5kZXgtLSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2NlbmUgb2YgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMpIHtcbiAgICAgICAgICAgIGlmIChzY2VuZS51dWlkID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2NlbmVzW3NjZW5lSW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcHJlc2V0SW5kZXggPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGggLSAxOyBwcmVzZXRJbmRleCA+PSAwOyBwcmVzZXRJbmRleC0tKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcmVzZXRVdWlkIG9mIHNjZW5lLnByZXNldFV1aWRzKSB7XG4gICAgICAgICAgICAgICAgICAvLyBMb29wIG92ZXIgdGhlIHByZXNldHMgaW4gdGhlIHByZXNldCBzZXJ2aWNlIHRvIHJldGFpbiB0aGUgcHJlc2V0IG9yZGVyXG4gICAgICAgICAgICAgICAgICBpZiAocHJlc2V0VXVpZCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbcHJlc2V0SW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1twcmVzZXRJbmRleF0sIHVuZGVmaW5lZCwgc2NlbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXNldHM7XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZShcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBjaGFubmVsVmFsdWU6IEZpeHR1cmVDaGFubmVsVmFsdWUsXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMFxuICApIHtcbiAgICBsZXQgbmV3VmFsdWU6IG51bWJlciA9IGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICBsZXQgZXhpc3RpbmdWYWx1ZTogbnVtYmVyID0gZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGludGVuc2l0eVBlcmNlbnRhZ2UgPCAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIG1peCBhIHBvc3NpYmx5IGV4aXN0aW5nIHZhbHVlIChvciB0aGUgZGVmYXVsdCB2YWx1ZSAwKSB3aXRoIHRoZSBuZXcgdmFsdWUgKGZhZGluZylcblxuICAgICAgLy8gR2V0IHRoZSBleGlzdGVudCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eVxuICAgICAgZm9yIChjb25zdCBleGlzdGluZ0NoYW5uZWxWYWx1ZSBvZiBleGlzdGluZ0NoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXN0aW5nVmFsdWUgPSBleGlzdGluZ0NoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNaXggdGhlIGV4aXN0aW5nIHZhbHVlIHdpdGggdGhlIG5ldyB2YWx1ZVxuICAgICAgbmV3VmFsdWUgPSBleGlzdGluZ1ZhbHVlICogKDEgLSBpbnRlbnNpdHlQZXJjZW50YWdlKSArIG5ld1ZhbHVlICogaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGV4aXN0ZW50IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSAmJlxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZFxuICAgICAgKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3IHZhbHVlXG4gICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZml4dHVyZSBpbmRleCBpbnNpZGUgdGhlIHBhc3NlZCBwcmVzZXQgKHVzZWQgZm9yIGNoYXNpbmcpXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUluZGV4KHByZXNldDogUHJlc2V0LCBmaXh0dXJlVXVpZDogc3RyaW5nLCBwaXhlbEtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleTogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LCBmaXh0dXJlVXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAvLyBmaXh0dXJlIGlzIG5vdCBpbiBwcmVzZXRcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTG9vcCBvdmVyIHRoZSBnbG9iYWwgZml4dHVyZXMgdG8gcmV0YWluIHRoZSBvcmRlclxuICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXNldEZpeHR1cmUgb2YgcHJlc2V0LmZpeHR1cmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVV1aWRBbmRQaXhlbEtleUVxdWFscyhcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCxcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLnBpeGVsS2V5LFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlVXVpZEFuZFBpeGVsS2V5RXF1YWxzKHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLCBmaXh0dXJlVXVpZCwgcHJvamVjdEZpeHR1cmUucGl4ZWxLZXksIHBpeGVsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQpO1xuICAgICAgICAgIGNvbnN0IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkID0ge1xuICAgICAgICAgICAgZmlyc3REbXhDaGFubmVsOiBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCxcbiAgICAgICAgICAgIHBpeGVsS2V5OiBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gY291bnRlZEZpcnN0RG14Q2hhbm5lbFBpeGVsS2V5LnNvbWUoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgaXRlbS5maXJzdERteENoYW5uZWwgPT09IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkLmZpcnN0RG14Q2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKCFpdGVtLnBpeGVsS2V5ICYmICFmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZC5waXhlbEtleSkgfHwgaXRlbS5waXhlbEtleSA9PT0gZmlyc3REbXhDaGFubmVsQW5kRml4dHVyZVV1aWQucGl4ZWxLZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGRvbid0IGNvdW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIGNoYW5uZWwgYXMgYWxyZWFkeSBjb3VudGVkIG9uZXNcbiAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleS5wdXNoKGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldFByZXNldEludGVuc2l0eShwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLCB0aW1lTWlsbGlzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFdoZW4gZmFkaW5nIGlzIGluIHByb2dyZXNzIChvbiBwcmVzZXQgb3Igc2NlbmUtbGV2ZWwpLCB0aGUgY3VycmVudCBwcmVzZXQgZG9lcyBub3RcbiAgICAvLyBmdWxseSBjb3ZlciB1bmRlcmx5aW5nIHZhbHVlcy5cbiAgICAvLyAtPiAwID0gbm8gY292ZXJpbmcgYXQgYWxsLCAxID0gZnVsbHkgY292ZXIgKG5vIGZhZGluZylcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gMTtcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldCA9IDE7XG4gICAgbGV0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSAxO1xuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnNjZW5lKSB7XG4gICAgICAvLyBGYWRlIG91dCBpcyBzdHJvbmdlciB0aGFuIGZhZGUgaW4gKGlmIHRoZXkgb3ZlcmxhcClcblxuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3Igc2NlbmUgZmFkaW5nXG4gICAgICBjb25zdCBzY2VuZVN0YXJ0TWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVJblByZSA/IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgLSBwcmVzZXQuc2NlbmUuZmFkZUluTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcztcbiAgICAgIGNvbnN0IHNjZW5lRW5kTWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVPdXRQb3N0ID8gcHJlc2V0LnJlZ2lvbi5lbmRNaWxsaXMgKyBwcmVzZXQuc2NlbmUuZmFkZU91dE1pbGxpcyA6IHByZXNldC5yZWdpb24uZW5kTWlsbGlzO1xuXG4gICAgICBpZiAodGltZU1pbGxpcyA+IHNjZW5lRW5kTWlsbGlzIC0gcHJlc2V0LnNjZW5lLmZhZGVPdXRNaWxsaXMgJiYgdGltZU1pbGxpcyA8IHNjZW5lRW5kTWlsbGlzKSB7XG4gICAgICAgIC8vIFNjZW5lIGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlU2NlbmUgPSAoc2NlbmVFbmRNaWxsaXMgLSB0aW1lTWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgc2NlbmVTdGFydE1pbGxpcyArIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXMgJiYgdGltZU1pbGxpcyA+IHNjZW5lU3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gU2NlbmUgZmFkZXMgaW5cbiAgICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gKHRpbWVNaWxsaXMgLSBzY2VuZVN0YXJ0TWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnByZXNldCkge1xuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3IgcHJlc2V0IGZhZGluZ1xuICAgICAgbGV0IHByZXNldFN0YXJ0TWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5zdGFydE1pbGxpcyA9PT0gdW5kZWZpbmVkID8gcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyA6IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LnN0YXJ0TWlsbGlzO1xuXG4gICAgICBsZXQgcHJlc2V0RW5kTWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5lbmRNaWxsaXMgPT09IHVuZGVmaW5lZCA/IHByZXNldC5yZWdpb24uZW5kTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyArIHByZXNldC5wcmVzZXQuZW5kTWlsbGlzO1xuXG4gICAgICAvLyBleHRlbmQgdGhlIHJ1bm5pbmcgdGltZSwgaWYgZmFkaW5nIGlzIGRvbmUgb3V0c2lkZSB0aGUgYm91bmRhcmllc1xuICAgICAgcHJlc2V0U3RhcnRNaWxsaXMgLT0gcHJlc2V0LnByZXNldC5mYWRlSW5QcmUgPyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyA6IDA7XG4gICAgICBwcmVzZXRFbmRNaWxsaXMgKz0gcHJlc2V0LnByZXNldC5mYWRlT3V0UG9zdCA/IHByZXNldC5wcmVzZXQuZmFkZU91dE1pbGxpcyA6IDA7XG5cbiAgICAgIGlmICh0aW1lTWlsbGlzID4gcHJlc2V0RW5kTWlsbGlzIC0gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzICYmIHRpbWVNaWxsaXMgPCBwcmVzZXRFbmRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlUHJlc2V0ID0gKHByZXNldEVuZE1pbGxpcyAtIHRpbWVNaWxsaXMpIC8gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgcHJlc2V0U3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyAmJiB0aW1lTWlsbGlzID4gcHJlc2V0U3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIGluXG4gICAgICAgIGludGVuc2l0eVBlcmNlbnRhZ2VQcmVzZXQgPSAodGltZU1pbGxpcyAtIHByZXNldFN0YXJ0TWlsbGlzKSAvIHByZXNldC5wcmVzZXQuZmFkZUluTWlsbGlzO1xuICAgICAgfVxuXG4gICAgICBpbnRlbnNpdHlQZXJjZW50YWdlID0gaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lICogaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgbWl4Q2FwYWJpbGl0eVZhbHVlcyhcbiAgICBwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLFxuICAgIGNhY2hlZEZpeHR1cmU6IENhY2hlZEZpeHR1cmUsXG4gICAgdmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyXG4gICkge1xuICAgIGxldCBoYXNDb2xvciA9IGZhbHNlO1xuXG4gICAgLy8gbWl4IHRoZSBwcmVzZXQgY2FwYWJpbGl0eSB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldENhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQucHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsQ2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUud2hlZWwsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkud2hlZWxOYW1lLFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICAgICAgICBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGNhcGFiaWxpdGllcyBtYXRjaCAtPiBhcHBseSB0aGUgdmFsdWUsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkgfHxcbiAgICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpICYmXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA+PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSBhbmQgY29sb3JJbnRlbnNpdHkgKGRpbW1lciBhbmQgY29sb3IpXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVQZXJjZW50YWdlID0gcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gYnJpZ2h0bmVzcyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhcGFiaWxpdHkgaW4gdGhpcyBjaGFubmVsXG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIHZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBtb3JlIHRoYW4gb25lIGNhcGFiaWxpdHkgaW4gdGhlIGNoYW5uZWxcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3MgPT09ICdvZmYnICYmIHZhbHVlUGVyY2VudGFnZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2hhbm5lbENhcGFiaWxpdHkuY2VudGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuYnJpZ2h0bmVzc1N0YXJ0ID09PSAnZGFyaycgfHwgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5icmlnaHRuZXNzU3RhcnQgPT09ICdvZmYnKSAmJlxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3NFbmQgPT09ICdicmlnaHQnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgKiB2YWx1ZVBlcmNlbnRhZ2UgK1xuICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuIHx8IHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdCkgJiZcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlID49IDBcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgMSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5XaGVlbFNsb3QgJiZcbiAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIgPT09IHByZXNldENhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIHdoZWVsIHNsb3QgKGNvbG9yLCBnb2JvLCBldGMuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjaGFubmVsQ2FwYWJpbGl0eS5jZW50ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2ssIHdoZXRoZXIgd2UganVzdCBzZXQgYSBjb2xvciB3aGVlbCB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS53aGVlbElzQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHByb3hpbWF0ZSB0aGUgY29sb3IgZnJvbSBhIGNvbG9yIG9yIGEgZGlmZmVyZW50IGNvbG9yIHdoZWVsLCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCFoYXNDb2xvciAmJiBjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldEFwcHJveGltYXRlZENvbG9yV2hlZWxDYXBhYmlsaXR5KHByZXNldC5wcmVzZXQsIGNhY2hlZENoYW5uZWwpO1xuXG4gICAgICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIGFuIGFwcHJveGltYXRlZCBjb2xvciBpbiB0aGUgYXZhaWxhYmxlIHdoZWVsIGNoYW5uZWxcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYXBhYmlsaXR5LmNlbnRlclZhbHVlO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZXMoXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICAvLyBtaXggdGhlIHByZXNldCBjaGFubmVsIHZhbHVlc1xuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIHByZXNldC5wcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCAmJiBjYWNoZWRDaGFubmVsLm5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBjaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWl4RWZmZWN0cyhcbiAgICB0aW1lTWlsbGlzOiBudW1iZXIsXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICBsZXQgZWZmZWN0VGltZU1pbGxpcyA9IHRpbWVNaWxsaXM7XG5cbiAgICBpZiAocHJlc2V0LnJlZ2lvbikge1xuICAgICAgZWZmZWN0VGltZU1pbGxpcyA9IHRpbWVNaWxsaXMgLSBwcmVzZXQucmVnaW9uLnN0YXJ0TWlsbGlzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWZmZWN0IG9mIHByZXNldC5wcmVzZXQuZWZmZWN0cykge1xuICAgICAgaWYgKGVmZmVjdC52aXNpYmxlKSB7XG4gICAgICAgIC8vIEVmZmVjdEN1cnZlXG4gICAgICAgIGlmIChlZmZlY3QgaW5zdGFuY2VvZiBFZmZlY3RDdXJ2ZSkge1xuICAgICAgICAgIGNvbnN0IGVmZmVjdEN1cnZlID0gZWZmZWN0IGFzIEVmZmVjdEN1cnZlO1xuXG4gICAgICAgICAgLy8gY2FwYWJpbGl0aWVzXG4gICAgICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGVmZmVjdEN1cnZlLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjYWNoZWRDaGFubmVsIG9mIGNhY2hlZEZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsQ2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZml4dHVyZVNlcnZpY2UuY2FwYWJpbGl0aWVzTWF0Y2goXG4gICAgICAgICAgICAgICAgICAgIGNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlLFxuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgICAgICAgICBudWxsXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIGVmZmVjdEN1cnZlLmdldFZhbHVlQXRNaWxsaXMoZWZmZWN0VGltZU1pbGxpcywgZml4dHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gY2hhbm5lbHNcbiAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWxQcm9maWxlIG9mIGVmZmVjdEN1cnZlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgICBpZiAoY2hhbm5lbFByb2ZpbGUucHJvZmlsZVV1aWQgPT09IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBjaGFubmVsUHJvZmlsZS5jaGFubmVscykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5uYW1lID09PSBjaGFubmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYWNoZWRDaGFubmVsLm1heFZhbHVlICogZWZmZWN0Q3VydmUuZ2V0VmFsdWVBdE1pbGxpcyhlZmZlY3RUaW1lTWlsbGlzLCBmaXh0dXJlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE8gb3RoZXIgZWZmZWN0cyAoUGFuVGlsdCwgZXRjLilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyByZXR1cm4gYWxsIGZpeHR1cmUgdXVpZHMgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIGNoYW5uZWwgdmFsdWVzXG4gIHB1YmxpYyBnZXRDaGFubmVsVmFsdWVzKHRpbWVNaWxsaXM6IG51bWJlciwgcHJlc2V0czogUHJlc2V0UmVnaW9uU2NlbmVbXSk6IE1hcDxDYWNoZWRGaXh0dXJlLCBGaXh0dXJlQ2hhbm5lbFZhbHVlW10+IHtcbiAgICAvLyBMb29wIG92ZXIgYWxsIHJlbGV2YW50IHByZXNldHMgYW5kIGNhbGMgdGhlIHByb3BlcnR5IHZhbHVlcyBmcm9tIHRoZSBwcmVzZXRzIChjYXBhYmlsaXRpZXMsIGNoYW5uZWxzIGFuZCBlZmZlY3RzKVxuICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlcyA9IG5ldyBNYXA8Q2FjaGVkRml4dHVyZSwgRml4dHVyZUNoYW5uZWxWYWx1ZVtdPigpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhY2hlZEZpeHR1cmVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjYWNoZWRGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5jYWNoZWRGaXh0dXJlc1tpXTtcblxuICAgICAgLy8gYWxsIHZhbHVlcyBvZiB0aGUgY3VycmVudCBmaXh0dXJlIGNoYW5uZWxzXG4gICAgICBsZXQgdmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10gPSBbXTtcblxuICAgICAgY29uc3QgYWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlID0gdGhpcy5nZXRBbHJlYWR5Q2FsY3VsYXRlZEZpeHR1cmUodGhpcy5maXh0dXJlU2VydmljZS5jYWNoZWRGaXh0dXJlcywgaSk7XG5cbiAgICAgIGlmIChhbHJlYWR5Q2FsY3VsYXRlZEZpeHR1cmUpIHtcbiAgICAgICAgLy8gb25seSByZWxldmFudCBmb3IgdGhlIHByZXZpZXcgLS0+IHJldXNlIGFsbCBjYWxjdWxhdGVkIHZhbHVlc1xuICAgICAgICB2YWx1ZXMgPSBPYmplY3QuYXNzaWduKFtdLCBjYWxjdWxhdGVkRml4dHVyZXMuZ2V0KGFscmVhZHlDYWxjdWxhdGVkRml4dHVyZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXBwbHkgdGhlIGRlZmF1bHQgdmFsdWVzXG4gICAgICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwuY2hhbm5lbCkge1xuICAgICAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwuY2hhbm5lbC5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHByZXNldHMpIHtcbiAgICAgICAgICAvLyBzZWFyY2ggZm9yIHRoaXMgZml4dHVyZSBpbiB0aGUgcHJlc2V0IGFuZCBnZXQgaXQncyBwcmVzZXQtc3BlY2lmaWMgaW5kZXggKGZvciBjaGFzaW5nIGVmZmVjdHMpXG4gICAgICAgICAgY29uc3QgZml4dHVyZUluZGV4ID0gdGhpcy5nZXRGaXh0dXJlSW5kZXgocHJlc2V0LnByZXNldCwgY2FjaGVkRml4dHVyZS5maXh0dXJlLnV1aWQsIGNhY2hlZEZpeHR1cmUucGl4ZWxLZXkpO1xuXG4gICAgICAgICAgaWYgKGZpeHR1cmVJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGZpeHR1cmUgaXMgYWxzbyBpbiB0aGUgcHJlc2V0IC0+IG1peCB0aGUgcmVxdWlyZWQgdmFsdWVzIChvdmVyd3JpdGUgZXhpc3RpbmcgdmFsdWVzLFxuICAgICAgICAgICAgLy8gaWYgc2V0IG11bHRpcGxlIHRpbWVzKVxuICAgICAgICAgICAgY29uc3QgaW50ZW5zaXR5UGVyY2VudGFnZSA9IHRoaXMuZ2V0UHJlc2V0SW50ZW5zaXR5KHByZXNldCwgdGltZU1pbGxpcyk7XG5cbiAgICAgICAgICAgIHRoaXMubWl4Q2FwYWJpbGl0eVZhbHVlcyhwcmVzZXQsIGNhY2hlZEZpeHR1cmUsIHZhbHVlcywgaW50ZW5zaXR5UGVyY2VudGFnZSk7XG4gICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZXMocHJlc2V0LCBjYWNoZWRGaXh0dXJlLCB2YWx1ZXMsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgdGhpcy5taXhFZmZlY3RzKHRpbWVNaWxsaXMsIGZpeHR1cmVJbmRleCwgcHJlc2V0LCBjYWNoZWRGaXh0dXJlLCB2YWx1ZXMsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSB0aGUgY2FsY3VsYXRlZCB2YWx1ZXMgZm9yIHN1YnNlcXVlbnQgZml4dHVyZXMgb24gdGhlIHNhbWUgRE1YIGFkZHJlc3NcbiAgICAgIGNhbGN1bGF0ZWRGaXh0dXJlcy5zZXQoY2FjaGVkRml4dHVyZSwgdmFsdWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FsY3VsYXRlZEZpeHR1cmVzO1xuICB9XG5cbiAgcHVibGljIGZpeHR1cmVJc1NlbGVjdGVkKHV1aWQ6IHN0cmluZywgcGl4ZWxLZXk6IHN0cmluZywgcHJlc2V0czogUHJlc2V0UmVnaW9uU2NlbmVbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHByZXNldHMpIHtcbiAgICAgIGlmICh0aGlzLnByZXNldFNlcnZpY2UuZ2V0UHJlc2V0Rml4dHVyZShwcmVzZXQucHJlc2V0LCB1dWlkLCBwaXhlbEtleSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZpeHR1cmVTZXR1cCgpIHtcbiAgICB0aGlzLmRvVXBkYXRlRml4dHVyZVNldHVwLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZVN0YWdlTWVzaChtZXNoOiBUSFJFRS5NZXNoKSB7XG4gICAgbWVzaC5yZWNlaXZlU2hhZG93ID0gZmFsc2U7XG4gICAgbWVzaC5jYXN0U2hhZG93ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RhZ2UoKSB7XG4gICAgaWYgKCF0aGlzLnNjZW5lKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGdlb21ldHJ5OiBhbnk7XG4gICAgbGV0IG1lc2g6IGFueTtcblxuICAgIC8vIFJlbW92ZSBvbGQgbWVzaGVzIGZyb20gdGhlIHNjZW5lXG4gICAgZm9yIChjb25zdCBleGlzdGluZ01lc2ggb2YgdGhpcy5zdGFnZU1lc2hlcykge1xuICAgICAgdGhpcy5zY2VuZS5yZW1vdmUoZXhpc3RpbmdNZXNoKTtcbiAgICAgIGV4aXN0aW5nTWVzaC5nZW9tZXRyeS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHRoaXMuc3RhZ2VNZXNoZXMgPSBbXTtcblxuICAgIC8vIEdyb3VuZFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLlBsYW5lR2VvbWV0cnkoNTAwMCwgNTAwMCk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldCgwLCAwLCAwKTtcbiAgICBtZXNoLnJvdGF0ZVgoKE1hdGguUEkgLyAxODApICogLTkwKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBGbG9vclxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtXG4gICAgKTtcbiAgICBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuc3RhZ2VNYXRlcmlhbCk7XG4gICAgdGhpcy5wcmVwYXJlU3RhZ2VNZXNoKG1lc2gpO1xuICAgIG1lc2gucG9zaXRpb24uc2V0KDAsIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20gLyAyLCAwKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgZnJvbnQgbGVmdFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIFBpbGxhciBmcm9udCByaWdodFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgLSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMlxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGJhY2sgbGVmdFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgYmFjayByaWdodFxuICAgIGdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDIsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgLXRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIENlaWxpbmdcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VDZWlsaW5nSGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtXG4gICAgKTtcbiAgICBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuc3RhZ2VNYXRlcmlhbCk7XG4gICAgdGhpcy5wcmVwYXJlU3RhZ2VNZXNoKG1lc2gpO1xuICAgIG1lc2gucG9zaXRpb24uc2V0KFxuICAgICAgMCxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtICtcbiAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlQ2VpbGluZ0hlaWdodENtIC8gMiArXG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICAwXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmZpeHR1cmVNYXRlcmlhbC5kaXNwb3NlKCk7XG4gICAgdGhpcy5maXh0dXJlU2VsZWN0ZWRNYXRlcmlhbC5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -95,7 +95,7 @@ export class UserRegisterComponent {
|
|
|
95
95
|
static { this.ɵfac = function UserRegisterComponent_Factory(t) { return new (t || UserRegisterComponent)(i0.ɵɵdirectiveInject(i1.BsModalRef), i0.ɵɵdirectiveInject(i1.BsModalService), i0.ɵɵdirectiveInject(i2.UserService)); }; }
|
|
96
96
|
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: UserRegisterComponent, selectors: [["lib-user-register"]], hostBindings: function UserRegisterComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
97
97
|
i0.ɵɵlistener("keydown.enter", function UserRegisterComponent_keydown_enter_HostBindingHandler($event) { return ctx.handleKeyboardEvent($event); }, false, i0.ɵɵresolveDocument);
|
|
98
|
-
} }, decls: 65, vars: 42, consts: [[3, "ngSubmit"], [1, "modal-header"], [1, "modal-title", "pull-left"], ["type", "button", "aria-label", "Close", 1, "close", "pull-right", 3, "click"], ["aria-hidden", "true"], [1, "modal-body"], ["class", "alert alert-success", "role", "alert", 4, "ngIf"], [1, "form-group", "row"], ["for", "username", 1, "col-sm-4", "col-form-label"], [1, "col-sm-8"], [1, "input-group"], [1, "input-group-prepend"], [1, "input-group-text"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-user"], ["required", "", "name", "username", "type", "text", "id", "username", "placeholder", "
|
|
98
|
+
} }, decls: 65, vars: 42, consts: [[3, "ngSubmit"], [1, "modal-header"], [1, "modal-title", "pull-left"], ["type", "button", "aria-label", "Close", 1, "close", "pull-right", 3, "click"], ["aria-hidden", "true"], [1, "modal-body"], ["class", "alert alert-success", "role", "alert", 4, "ngIf"], [1, "form-group", "row"], ["for", "username", 1, "col-sm-4", "col-form-label"], [1, "col-sm-8"], [1, "input-group"], [1, "input-group-prepend"], [1, "input-group-text"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-user"], ["required", "", "name", "username", "type", "text", "id", "username", "placeholder", "John Doe", 1, "form-control", 3, "ngModelChange", "disabled", "ngModel"], ["for", "email", 1, "col-sm-4", "col-form-label"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-envelope-o"], ["required", "", "name", "email", "type", "email", "id", "email", "placeholder", "email@example.com", 1, "form-control", 3, "ngModelChange", "disabled", "ngModel"], ["for", "password", 1, "col-sm-4", "col-form-label"], ["aria-hidden", "true", 1, "fa", "fa-fw", "fa-lock"], ["required", "", "name", "password", "type", "password", "id", "password", 1, "form-control", 3, "ngModelChange", "disabled", "ngModel", "placeholder"], ["for", "passwordRepeat", 1, "col-sm-4", "col-form-label"], ["required", "", "name", "passwordRepeat", "type", "password", "id", "passwordRepeat", 1, "form-control", 3, "ngModelChange", "disabled", "ngModel", "placeholder"], ["class", "alert alert-primary", "role", "alert", 4, "ngIf"], ["href", "#", 3, "click"], [1, "mt-3", "mb-0", 2, "text-align", "center"], [1, "modal-footer"], ["href", "#", "role", "button", 1, "mr-3", "my-auto", 3, "click"], ["type", "submit", 1, "btn", "btn-primary", 3, "disabled"], ["class", "fa fa-spinner fa-pulse fa-fw", 4, "ngIf"], ["role", "alert", 1, "alert", "alert-success"], ["role", "alert", 1, "alert", "alert-primary"], [1, "fa", "fa-spinner", "fa-pulse", "fa-fw"]], template: function UserRegisterComponent_Template(rf, ctx) { if (rf & 1) {
|
|
99
99
|
i0.ɵɵelementStart(0, "form", 0);
|
|
100
100
|
i0.ɵɵlistener("ngSubmit", function UserRegisterComponent_Template_form_ngSubmit_0_listener() { return ctx.register(); });
|
|
101
101
|
i0.ɵɵelementStart(1, "div", 1)(2, "h4", 2);
|
|
@@ -211,10 +211,10 @@ export class UserRegisterComponent {
|
|
|
211
211
|
}
|
|
212
212
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(UserRegisterComponent, [{
|
|
213
213
|
type: Component,
|
|
214
|
-
args: [{ selector: 'lib-user-register', template: "<form (ngSubmit)=\"register()\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.user.register-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"subject\" class=\"alert alert-success\" role=\"alert\">\n {{ 'designer.user.login-required' | translate }}\n </div>\n <div class=\"form-group row\">\n <label for=\"username\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.username' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-user\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"username\"\n [(ngModel)]=\"username\"\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n placeholder=\"
|
|
214
|
+
args: [{ selector: 'lib-user-register', template: "<form (ngSubmit)=\"register()\">\n <div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">{{ 'designer.user.register-title' | translate }}</h4>\n <button type=\"button\" class=\"close pull-right\" aria-label=\"Close\" (click)=\"cancel(); (false)\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\">\n <div *ngIf=\"subject\" class=\"alert alert-success\" role=\"alert\">\n {{ 'designer.user.login-required' | translate }}\n </div>\n <div class=\"form-group row\">\n <label for=\"username\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.username' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-user\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"username\"\n [(ngModel)]=\"username\"\n type=\"text\"\n class=\"form-control\"\n id=\"username\"\n placeholder=\"John Doe\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"email\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.email' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-envelope-o\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"email\"\n [(ngModel)]=\"email\"\n type=\"email\"\n class=\"form-control\"\n id=\"email\"\n placeholder=\"email@example.com\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"password\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"password\"\n [(ngModel)]=\"password\"\n type=\"password\"\n class=\"form-control\"\n id=\"password\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n <div class=\"form-group row\">\n <label for=\"passwordRepeat\" class=\"col-sm-4 col-form-label\">{{ 'designer.user.password-repeat' | translate }}</label>\n <div class=\"col-sm-8\">\n <div class=\"input-group\">\n <div class=\"input-group-prepend\">\n <div class=\"input-group-text\"><i class=\"fa fa-fw fa-lock\" aria-hidden=\"true\"></i></div>\n </div>\n <input\n required\n [disabled]=\"registering\"\n name=\"passwordRepeat\"\n [(ngModel)]=\"passwordRepeat\"\n type=\"password\"\n class=\"form-control\"\n id=\"passwordRepeat\"\n placeholder=\"{{ 'designer.user.password' | translate }}\"\n />\n </div>\n </div>\n </div>\n <div *ngIf=\"error\" class=\"alert alert-primary\" role=\"alert\">\n {{ 'designer.user.error.' + error | translate }}\n </div>\n <a href=\"#\" (click)=\"login(); (false)\">\n <p class=\"mt-3 mb-0\" style=\"text-align: center\">{{ 'designer.user.already-have-account' | translate }}</p>\n </a>\n </div>\n <div class=\"modal-footer\">\n <a class=\"mr-3 my-auto\" href=\"#\" role=\"button\" (click)=\"cancel(); (false)\">\n {{ 'designer.misc.cancel' | translate }}\n </a>\n <button [disabled]=\"registering\" type=\"submit\" class=\"btn btn-primary\">\n <i *ngIf=\"registering\" class=\"fa fa-spinner fa-pulse fa-fw\"> </i>{{ 'designer.user.register' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
215
215
|
}], () => [{ type: i1.BsModalRef }, { type: i1.BsModalService }, { type: i2.UserService }], { handleKeyboardEvent: [{
|
|
216
216
|
type: HostListener,
|
|
217
217
|
args: ['document:keydown.enter', ['$event']]
|
|
218
218
|
}] }); })();
|
|
219
219
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(UserRegisterComponent, { className: "UserRegisterComponent" }); })();
|
|
220
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZWdpc3Rlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3VzZXIvdXNlci1yZWdpc3Rlci91c2VyLXJlZ2lzdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvdXNlci91c2VyLXJlZ2lzdGVyL3VzZXItcmVnaXN0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7O0lDSXBFLCtCQUE4RDtJQUM1RCxZQUNGOztJQUFBLGlCQUFNOztJQURKLGNBQ0Y7SUFERSxxRkFDRjs7O0lBaUZBLCtCQUE0RDtJQUMxRCxZQUNGOztJQUFBLGlCQUFNOzs7SUFESixjQUNGO0lBREUsNEZBQ0Y7OztJQVVFLHdCQUFpRTs7QUQ1RnZFLE1BQU0sT0FBTyxxQkFBcUI7SUFZaEMsWUFBb0IsVUFBc0IsRUFBVSxZQUE0QixFQUFVLFdBQXdCO1FBQTlGLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVhsSCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsbUJBQWMs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Qyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7a0ZBeEV2QyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckxvZ2luQ29tcG9uZW50IH0gZnJvbSAnLi4vdXNlci1sb2dpbi91c2VyLWxvZ2luLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi11c2VyLXJlZ2lzdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcmVnaXN0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2VyLXJlZ2lzdGVyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclJlZ2lzdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZXJyb3IgPSAnJztcbiAgcmVnaXN0ZXJpbmcgPSBmYWxzZTtcblxuICB1c2VybmFtZSA9ICcnO1xuICBlbWFpbCA9ICcnO1xuICBwYXNzd29yZCA9ICcnO1xuICBwYXNzd29yZFJlcGVhdCA9ICcnO1xuXG4gIC8vIGVtaXRzLCB3aGVuIGxvZ2dlZCBpblxuICBzdWJqZWN0OiBTdWJqZWN0PHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnNNb2RhbFJlZjogQnNNb2RhbFJlZiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLCBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICBsb2dpbigpIHtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coVXNlckxvZ2luQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSwgaW5pdGlhbFN0YXRlOiB7IHN1YmplY3Q6IHRoaXMuc3ViamVjdCB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWFpbElzVmFsaWQoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICBjb25zdCByZSA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4gICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKGVtYWlsKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyKCkge1xuICAgIHRoaXMucmVnaXN0ZXJpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSAnJztcblxuICAgIGlmICghdGhpcy51c2VybmFtZSB8fCAhdGhpcy5lbWFpbCB8fCAhdGhpcy5wYXNzd29yZCB8fCAhdGhpcy5wYXNzd29yZFJlcGVhdCkge1xuICAgICAgdGhpcy5lcnJvciA9ICdmaWxsLWFsbC1maWVsZHMnO1xuICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5lbWFpbElzVmFsaWQodGhpcy5lbWFpbCkpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnZW1haWwtdmFsaWQnO1xuICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhc3N3b3JkICE9PSB0aGlzLnBhc3N3b3JkUmVwZWF0KSB7XG4gICAgICB0aGlzLmVycm9yID0gJ3Bhc3N3b3JkLW1pc21hdGNoJztcbiAgICAgIHRoaXMucmVnaXN0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMuZW1haWwsIHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBsb2dpbiBhZnRlciByZWdpc3RlcmluZ1xuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmxvZ2luKHRoaXMuZW1haWwsIHRoaXMucGFzc3dvcmQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgJiYgcmVzcG9uc2UuZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmVycm9yID0gcmVzcG9uc2UuZXJyb3IuZXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9ICdpbnRlcm5hbCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogYW55KSB7XG4gICAgdGhpcy5yZWdpc3RlcigpO1xuICB9XG59XG4iLCI8Zm9ybSAobmdTdWJtaXQpPVwicmVnaXN0ZXIoKVwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3sgJ2Rlc2lnbmVyLnVzZXIucmVnaXN0ZXItdGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oND5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlIHB1bGwtcmlnaHRcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwiY2FuY2VsKCk7IChmYWxzZSlcIj5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxkaXYgKm5nSWY9XCJzdWJqZWN0XCIgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICB7eyAnZGVzaWduZXIudXNlci5sb2dpbi1yZXF1aXJlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJ1c2VybmFtZVwiIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eyAnZGVzaWduZXIudXNlci51c2VybmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtdXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVnaXN0ZXJpbmdcIlxuICAgICAgICAgICAgbmFtZT1cInVzZXJuYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgaWQ9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlRoZSBDb29sIEd1eVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJlbWFpbFwiIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eyAnZGVzaWduZXIudXNlci5lbWFpbCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtZW52ZWxvcGUtb1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVnaXN0ZXJpbmdcIlxuICAgICAgICAgICAgbmFtZT1cImVtYWlsXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxcIlxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGlkPVwiZW1haWxcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJlbWFpbEBleGFtcGxlLmNvbVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJwYXNzd29yZFwiIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eyAnZGVzaWduZXIudXNlci5wYXNzd29yZCcgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtbG9ja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVnaXN0ZXJpbmdcIlxuICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGlkPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZGVzaWduZXIudXNlci5wYXNzd29yZCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcm93XCI+XG4gICAgICA8bGFiZWwgZm9yPVwicGFzc3dvcmRSZXBlYXRcIiBjbGFzcz1cImNvbC1zbS00IGNvbC1mb3JtLWxhYmVsXCI+e3sgJ2Rlc2lnbmVyLnVzZXIucGFzc3dvcmQtcmVwZWF0JyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1sb2NrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWdpc3RlcmluZ1wiXG4gICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRSZXBlYXRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFJlcGVhdFwiXG4gICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgaWQ9XCJwYXNzd29yZFJlcGVhdFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdkZXNpZ25lci51c2VyLnBhc3N3b3JkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXByaW1hcnlcIiByb2xlPVwiYWxlcnRcIj5cbiAgICAgIHt7ICdkZXNpZ25lci51c2VyLmVycm9yLicgKyBlcnJvciB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICAgIDxhIGhyZWY9XCIjXCIgKGNsaWNrKT1cImxvZ2luKCk7IChmYWxzZSlcIj5cbiAgICAgIDxwIGNsYXNzPVwibXQtMyBtYi0wXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXJcIj57eyAnZGVzaWduZXIudXNlci5hbHJlYWR5LWhhdmUtYWNjb3VudCcgfCB0cmFuc2xhdGUgfX08L3A+XG4gICAgPC9hPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxhIGNsYXNzPVwibXItMyBteS1hdXRvXCIgaHJlZj1cIiNcIiByb2xlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbCgpOyAoZmFsc2UpXCI+XG4gICAgICB7eyAnZGVzaWduZXIubWlzYy5jYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9hPlxuICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInJlZ2lzdGVyaW5nXCIgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XG4gICAgICA8aSAqbmdJZj1cInJlZ2lzdGVyaW5nXCIgY2xhc3M9XCJmYSBmYS1zcGlubmVyIGZhLXB1bHNlIGZhLWZ3XCI+IDwvaT57eyAnZGVzaWduZXIudXNlci5yZWdpc3RlcicgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|
|
220
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1yZWdpc3Rlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3VzZXIvdXNlci1yZWdpc3Rlci91c2VyLXJlZ2lzdGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvdXNlci91c2VyLXJlZ2lzdGVyL3VzZXItcmVnaXN0ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7O0lDSXBFLCtCQUE4RDtJQUM1RCxZQUNGOztJQUFBLGlCQUFNOztJQURKLGNBQ0Y7SUFERSxxRkFDRjs7O0lBaUZBLCtCQUE0RDtJQUMxRCxZQUNGOztJQUFBLGlCQUFNOzs7SUFESixjQUNGO0lBREUsNEZBQ0Y7OztJQVVFLHdCQUFpRTs7QUQ1RnZFLE1BQU0sT0FBTyxxQkFBcUI7SUFZaEMsWUFBb0IsVUFBc0IsRUFBVSxZQUE0QixFQUFVLFdBQXdCO1FBQTlGLGVBQVUsR0FBVixVQUFVLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBZ0I7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVhsSCxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFFcEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2QsbUJBQWMs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Qyx3QkFBd0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7a0ZBeEV2QyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEhvc3RMaXN0ZW5lciwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmLCBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlckxvZ2luQ29tcG9uZW50IH0gZnJvbSAnLi4vdXNlci1sb2dpbi91c2VyLWxvZ2luLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi11c2VyLXJlZ2lzdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItcmVnaXN0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi91c2VyLXJlZ2lzdGVyLmNvbXBvbmVudC5jc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclJlZ2lzdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZXJyb3IgPSAnJztcbiAgcmVnaXN0ZXJpbmcgPSBmYWxzZTtcblxuICB1c2VybmFtZSA9ICcnO1xuICBlbWFpbCA9ICcnO1xuICBwYXNzd29yZCA9ICcnO1xuICBwYXNzd29yZFJlcGVhdCA9ICcnO1xuXG4gIC8vIGVtaXRzLCB3aGVuIGxvZ2dlZCBpblxuICBzdWJqZWN0OiBTdWJqZWN0PHZvaWQ+O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYnNNb2RhbFJlZjogQnNNb2RhbFJlZiwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLCBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gIH1cblxuICBsb2dpbigpIHtcbiAgICB0aGlzLmJzTW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMubW9kYWxTZXJ2aWNlLnNob3coVXNlckxvZ2luQ29tcG9uZW50LCB7IGtleWJvYXJkOiB0cnVlLCBpZ25vcmVCYWNrZHJvcENsaWNrOiBmYWxzZSwgaW5pdGlhbFN0YXRlOiB7IHN1YmplY3Q6IHRoaXMuc3ViamVjdCB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWFpbElzVmFsaWQoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgICBjb25zdCByZSA9IC9eKChbXjw+KClcXFtcXF1cXFxcLiw7Olxcc0BcIl0rKFxcLltePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSspKil8KFwiLitcIikpQCgoXFxbWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcXSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4gICAgcmV0dXJuIHJlLnRlc3QoU3RyaW5nKGVtYWlsKS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIHJlZ2lzdGVyKCkge1xuICAgIHRoaXMucmVnaXN0ZXJpbmcgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSAnJztcblxuICAgIGlmICghdGhpcy51c2VybmFtZSB8fCAhdGhpcy5lbWFpbCB8fCAhdGhpcy5wYXNzd29yZCB8fCAhdGhpcy5wYXNzd29yZFJlcGVhdCkge1xuICAgICAgdGhpcy5lcnJvciA9ICdmaWxsLWFsbC1maWVsZHMnO1xuICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5lbWFpbElzVmFsaWQodGhpcy5lbWFpbCkpIHtcbiAgICAgIHRoaXMuZXJyb3IgPSAnZW1haWwtdmFsaWQnO1xuICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhc3N3b3JkICE9PSB0aGlzLnBhc3N3b3JkUmVwZWF0KSB7XG4gICAgICB0aGlzLmVycm9yID0gJ3Bhc3N3b3JkLW1pc21hdGNoJztcbiAgICAgIHRoaXMucmVnaXN0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVzZXJTZXJ2aWNlLnJlZ2lzdGVyKHRoaXMuZW1haWwsIHRoaXMudXNlcm5hbWUsIHRoaXMucGFzc3dvcmQpLnN1YnNjcmliZShcbiAgICAgICgpID0+IHtcbiAgICAgICAgLy8gYXV0b21hdGljYWxseSBsb2dpbiBhZnRlciByZWdpc3RlcmluZ1xuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmxvZ2luKHRoaXMuZW1haWwsIHRoaXMucGFzc3dvcmQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuYnNNb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IgJiYgcmVzcG9uc2UuZXJyb3IuZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLmVycm9yID0gcmVzcG9uc2UuZXJyb3IuZXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9ICdpbnRlcm5hbCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWdpc3RlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duLmVudGVyJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogYW55KSB7XG4gICAgdGhpcy5yZWdpc3RlcigpO1xuICB9XG59XG4iLCI8Zm9ybSAobmdTdWJtaXQpPVwicmVnaXN0ZXIoKVwiPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+e3sgJ2Rlc2lnbmVyLnVzZXIucmVnaXN0ZXItdGl0bGUnIHwgdHJhbnNsYXRlIH19PC9oND5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlIHB1bGwtcmlnaHRcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiAoY2xpY2spPVwiY2FuY2VsKCk7IChmYWxzZSlcIj5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxkaXYgKm5nSWY9XCJzdWJqZWN0XCIgY2xhc3M9XCJhbGVydCBhbGVydC1zdWNjZXNzXCIgcm9sZT1cImFsZXJ0XCI+XG4gICAgICB7eyAnZGVzaWduZXIudXNlci5sb2dpbi1yZXF1aXJlZCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJ1c2VybmFtZVwiIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eyAnZGVzaWduZXIudXNlci51c2VybmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS04XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1wcmVwZW5kXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtdGV4dFwiPjxpIGNsYXNzPVwiZmEgZmEtZncgZmEtdXNlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVnaXN0ZXJpbmdcIlxuICAgICAgICAgICAgbmFtZT1cInVzZXJuYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlcm5hbWVcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgaWQ9XCJ1c2VybmFtZVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkpvaG4gRG9lXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgPGxhYmVsIGZvcj1cImVtYWlsXCIgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7ICdkZXNpZ25lci51c2VyLmVtYWlsJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1lbnZlbG9wZS1vXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWdpc3RlcmluZ1wiXG4gICAgICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbWFpbFwiXG4gICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgaWQ9XCJlbWFpbFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cImVtYWlsQGV4YW1wbGUuY29tXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIHJvd1wiPlxuICAgICAgPGxhYmVsIGZvcj1cInBhc3N3b3JkXCIgY2xhc3M9XCJjb2wtc20tNCBjb2wtZm9ybS1sYWJlbFwiPnt7ICdkZXNpZ25lci51c2VyLnBhc3N3b3JkJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLThcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC10ZXh0XCI+PGkgY2xhc3M9XCJmYSBmYS1mdyBmYS1sb2NrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZWdpc3RlcmluZ1wiXG4gICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXG4gICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgaWQ9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdkZXNpZ25lci51c2VyLnBhc3N3b3JkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cCByb3dcIj5cbiAgICAgIDxsYWJlbCBmb3I9XCJwYXNzd29yZFJlcGVhdFwiIGNsYXNzPVwiY29sLXNtLTQgY29sLWZvcm0tbGFiZWxcIj57eyAnZGVzaWduZXIudXNlci5wYXNzd29yZC1yZXBlYXQnIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtcHJlcGVuZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXRleHRcIj48aSBjbGFzcz1cImZhIGZhLWZ3IGZhLWxvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlZ2lzdGVyaW5nXCJcbiAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZFJlcGVhdFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkUmVwZWF0XCJcbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBpZD1cInBhc3N3b3JkUmVwZWF0XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2Rlc2lnbmVyLnVzZXIucGFzc3dvcmQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvclwiIGNsYXNzPVwiYWxlcnQgYWxlcnQtcHJpbWFyeVwiIHJvbGU9XCJhbGVydFwiPlxuICAgICAge3sgJ2Rlc2lnbmVyLnVzZXIuZXJyb3IuJyArIGVycm9yIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gICAgPGEgaHJlZj1cIiNcIiAoY2xpY2spPVwibG9naW4oKTsgKGZhbHNlKVwiPlxuICAgICAgPHAgY2xhc3M9XCJtdC0zIG1iLTBcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiPnt7ICdkZXNpZ25lci51c2VyLmFscmVhZHktaGF2ZS1hY2NvdW50JyB8IHRyYW5zbGF0ZSB9fTwvcD5cbiAgICA8L2E+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XG4gICAgPGEgY2xhc3M9XCJtci0zIG15LWF1dG9cIiBocmVmPVwiI1wiIHJvbGU9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsKCk7IChmYWxzZSlcIj5cbiAgICAgIHt7ICdkZXNpZ25lci5taXNjLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2E+XG4gICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicmVnaXN0ZXJpbmdcIiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5cbiAgICAgIDxpICpuZ0lmPVwicmVnaXN0ZXJpbmdcIiBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtcHVsc2UgZmEtZndcIj4gPC9pPnt7ICdkZXNpZ25lci51c2VyLnJlZ2lzdGVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|