@rocketshow/designer 1.36.0 → 1.37.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 +3 -1
- package/assets/i18n/en.json +3 -1
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +181 -33
- package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +14 -5
- package/esm2022/lib/models/fixture-capability.mjs +47 -4
- package/esm2022/lib/preview/models/color-changer-3d.mjs +15 -27
- package/esm2022/lib/preview/models/fixture-3d.mjs +91 -105
- package/esm2022/lib/preview/models/moving-head-3d.mjs +32 -41
- package/esm2022/lib/preview/preview.component.mjs +4 -4
- package/esm2022/lib/services/fixture.service.mjs +1 -1
- package/esm2022/lib/services/preset.service.mjs +3 -3
- package/esm2022/lib/services/preview.service.mjs +13 -1
- package/fesm2022/rocketshow-designer.mjs +389 -213
- package/fesm2022/rocketshow-designer.mjs.map +1 -1
- package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +9 -2
- package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +5 -1
- package/lib/models/fixture-capability.d.ts +47 -4
- package/lib/preview/models/color-changer-3d.d.ts +4 -5
- package/lib/preview/models/fixture-3d.d.ts +17 -16
- package/lib/preview/models/moving-head-3d.d.ts +4 -5
- package/lib/services/preview.service.d.ts +5 -1
- package/package.json +1 -1
- package/rocketshow-designer-1.37.0.tgz +0 -0
- package/rocketshow-designer-1.36.0.tgz +0 -0
|
@@ -258,8 +258,8 @@ export class PresetService {
|
|
|
258
258
|
}
|
|
259
259
|
hasCapabilityType(type) {
|
|
260
260
|
// there is at least one channel with at least one intensity capability
|
|
261
|
-
for (const
|
|
262
|
-
const fixture = this.fixtureService.getCachedFixtureByUuid(
|
|
261
|
+
for (const presetFixture of this.selectedPreset.fixtures) {
|
|
262
|
+
const fixture = this.fixtureService.getCachedFixtureByUuid(presetFixture.fixtureUuid, presetFixture.pixelKey);
|
|
263
263
|
for (const channel of fixture.channels) {
|
|
264
264
|
if (channel.channel) {
|
|
265
265
|
for (const capability of channel.capabilities) {
|
|
@@ -447,4 +447,4 @@ export class PresetService {
|
|
|
447
447
|
providedIn: 'root',
|
|
448
448
|
}]
|
|
449
449
|
}], () => [{ type: i1.EffectService }, { type: i2.UuidService }, { type: i3.ProjectService }, { type: i4.FixtureService }, { type: i5.ConfigService }, { type: i6.HttpClient }, { type: i7.AnimationService }], null); })();
|
|
450
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3NlcnZpY2VzL3ByZXNldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7QUFLekQsTUFBTSxPQUFPLGFBQWE7SUFtQnhCLFlBQ1UsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsSUFBZ0IsRUFDaEIsZ0JBQWtDO1FB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SUFBSTthQUNOLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxRQUFRLEdBQUcsbUJBQW1CLEdBQUcsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvSCxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsSUFBSTt5QkFDTixJQUFJLENBQUMseUJBQXlCLEdBQUcsUUFBUSxHQUFHLG1CQUFtQixHQUFHLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQy9ILFNBQVMsRUFBRSxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4RCxDQUFDOzhFQXRpQlUsYUFBYTt1RUFBYixhQUFhLFdBQWIsYUFBYSxtQkFGWixNQUFNOztpRkFFUCxhQUFhO2NBSHpCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgRml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHktdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZU1vZGUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1tb2RlJztcbmltcG9ydCB7IEZpeHR1cmVQcm9maWxlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtcHJvZmlsZSc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IEFuaW1hdGlvblNlcnZpY2UgfSBmcm9tICcuL2FuaW1hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEVmZmVjdFNlcnZpY2UgfSBmcm9tICcuL2VmZmVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQgeyBVdWlkU2VydmljZSB9IGZyb20gJy4vdXVpZC5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXNldEZpeHR1cmUgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0LWZpeHR1cmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJlc2V0U2VydmljZSB7XG4gIHNlbGVjdGVkUHJlc2V0OiBQcmVzZXQ7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIGN1cnJlbnQgcHJldmlldyBlbGVtZW50IGhhcyBjaGFuZ2VkIChzY2VuZS9wcmVzZXQpXG4gIHByZXZpZXdTZWxlY3Rpb25DaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgZml4dHVyZSBzZWxlY3Rpb24gaGFzIGNoYW5nZWRcbiAgZml4dHVyZVNlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBmaXh0dXJlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZCBmb3Igc2V0dGluZ3NcbiAgZml4dHVyZVNlbGVjdGlvblNldHRpbmdzQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIHNlbGVjdGVkIGNvbG9yIGhhcyBjaGFuZ2VkLiBUaGlzIGlzIHJlcXVpcmVkLFxuICAvLyBiZWNhdXNlIGRldGVjdENoYW5nZXMgaXMgbm90IGVub3VnaCB0byB0cmlnZ2VyIGRpZmZlcmVudCBjb21wb25lbnRzLlxuICBmaXh0dXJlQ29sb3JDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBsaXZlUHJldmlld1RpbWVyOiBhbnk7XG4gIGxpdmVDaGFuZ2VQZW5kaW5nID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlZmZlY3RTZXJ2aWNlOiBFZmZlY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXVpZFNlcnZpY2U6IFV1aWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TZXJ2aWNlOiBBbmltYXRpb25TZXJ2aWNlXG4gICkge31cblxuICBnZXRQcmVzZXRCeVV1aWQodXVpZDogc3RyaW5nKTogUHJlc2V0IHtcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cykge1xuICAgICAgaWYgKHByZXNldC51dWlkID09PSB1dWlkKSB7XG4gICAgICAgIHJldHVybiBwcmVzZXQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZml4dHVyZVV1aWRBbmRQaXhlbEtleUVxdWFscyhmaXh0dXJlVXVpZDE6IHN0cmluZywgZml4dHVyZVV1aWQyOiBzdHJpbmcsIHBpeGVsS2V5MTogc3RyaW5nLCBwaXhlbEtleTI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBmaXh0dXJlVXVpZDEgPT09IGZpeHR1cmVVdWlkMiAmJiAoKCFwaXhlbEtleTEgJiYgIXBpeGVsS2V5MikgfHwgcGl4ZWxLZXkxID09PSBwaXhlbEtleTIpO1xuICB9XG5cbiAgZ2V0UHJlc2V0Rml4dHVyZShwcmVzZXQ6IFByZXNldCwgZml4dHVyZVV1aWQ6IHN0cmluZywgcGl4ZWxLZXk/OiBzdHJpbmcpOiBQcmVzZXRGaXh0dXJlIHtcbiAgICBmb3IgKGNvbnN0IGZpeHR1cmUgb2YgcHJlc2V0LmZpeHR1cmVzKSB7XG4gICAgICBpZiAodGhpcy5maXh0dXJlVXVpZEFuZFBpeGVsS2V5RXF1YWxzKGZpeHR1cmUuZml4dHVyZVV1aWQsIGZpeHR1cmVVdWlkLCBmaXh0dXJlLnBpeGVsS2V5LCBwaXhlbEtleSkpIHtcbiAgICAgICAgcmV0dXJuIGZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmaXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlOiBGaXh0dXJlLCBwaXhlbEtleTogc3RyaW5nLCBwcmVzZXQ/OiBQcmVzZXQpOiBib29sZWFuIHtcbiAgICAvLyBpcyB0aGUgcGFzc2VkIGZpeHR1cmUgc2VsZWN0ZWQgaW4gdGhlIHBhc3NlZC9jdXJyZW50bHkgc2VsZWN0ZWQgcHJlc2V0P1xuICAgIGlmICghcHJlc2V0KSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgICBwcmVzZXQgPSB0aGlzLnNlbGVjdGVkUHJlc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByZXNldEZpeHR1cmUgPSB0aGlzLmdldFByZXNldEZpeHR1cmUocHJlc2V0LCBmaXh0dXJlLnV1aWQsIHBpeGVsS2V5KTtcblxuICAgIGlmIChwcmVzZXRGaXh0dXJlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzd2l0Y2hGaXh0dXJlU2VsZWN0aW9uKGZpeHR1cmU6IEZpeHR1cmUsIHBpeGVsS2V5OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBzZWxlY3QgYWxsIGZpeHR1cmVzIGF0IHRoZSBzcGVjaWZpZWQgc3RhcnQgY2hhbm5lbCBvciB1bnNlbGVjdCB0aGVtLFxuICAgIC8vIGlmIGFscmVhZHkgc2VsZWN0ZWRcbiAgICBpZiAodGhpcy5maXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlLCBwaXhlbEtleSkpIHtcbiAgICAgIGZvciAobGV0IGkgPSB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3RGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXNbaV0uZml4dHVyZVV1aWQpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvamVjdEZpeHR1cmUuZG14Rmlyc3RDaGFubmVsID09PSBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCAmJlxuICAgICAgICAgICgoIXRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXNbaV0ucGl4ZWxLZXkgJiYgIXBpeGVsS2V5KSB8fCB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzW2ldLnBpeGVsS2V5ID09PSBwaXhlbEtleSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChjb25zdCBwcm9qZWN0UHJlc2V0Rml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0Rml4dHVyZXMpIHtcbiAgICAgICAgaWYgKCghcHJvamVjdFByZXNldEZpeHR1cmUucGl4ZWxLZXkgJiYgIXBpeGVsS2V5KSB8fCBwcm9qZWN0UHJlc2V0Rml4dHVyZS5waXhlbEtleSA9PT0gcGl4ZWxLZXkpIHtcbiAgICAgICAgICBjb25zdCBwcm9qZWN0Rml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcm9qZWN0UHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCk7XG4gICAgICAgICAgaWYgKHByb2plY3RGaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCA9PT0gZml4dHVyZS5kbXhGaXJzdENoYW5uZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNldEZpeHR1cmUgPSBuZXcgUHJlc2V0Rml4dHVyZSgpO1xuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCA9IHByb2plY3RQcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkO1xuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleSA9IHBpeGVsS2V5O1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlcy5wdXNoKHByZXNldEZpeHR1cmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdEFsbEZpeHR1cmVzKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgIGlmICh0aGlzLmZpeHR1cmVTZXJ2aWNlLmZpeHR1cmVIYXNHZW5lcmFsQ2hhbm5lbChmaXh0dXJlKSkge1xuICAgICAgICBpZiAoIXRoaXMuZml4dHVyZUlzU2VsZWN0ZWQoZml4dHVyZSwgbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgICBwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkID0gZml4dHVyZS51dWlkO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMucHVzaChwcmVzZXRGaXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwaXhlbEtleXMgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmZpeHR1cmVHZXRVbmlxdWVQaXhlbEtleXMoZml4dHVyZSk7XG5cbiAgICAgIGZvciAoY29uc3QgcGl4ZWxLZXkgb2YgcGl4ZWxLZXlzKSB7XG4gICAgICAgIGlmICghdGhpcy5maXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlLCBwaXhlbEtleSkpIHtcbiAgICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgICBwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkID0gZml4dHVyZS51dWlkO1xuICAgICAgICAgIHByZXNldEZpeHR1cmUucGl4ZWxLZXkgPSBwaXhlbEtleTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzLnB1c2gocHJlc2V0Rml4dHVyZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3ROb0ZpeHR1cmVzKCkge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMgPSBbXTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVEZWxldGVkRml4dHVyZXMoKSB7XG4gICAgLy8gYWZ0ZXIgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGZpeHR1cmUgcG9vbCwgd2UgbWlnaHQgbmVlZCB0b1xuICAgIC8vIGRlbGV0ZSBzb21lIGZpeHR1cmVzXG4gICAgZm9yIChjb25zdCBwcmVzZXQgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSBwcmVzZXQuZml4dHVyZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcHJlc2V0Rml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXQuZml4dHVyZXNbaV0uZml4dHVyZVV1aWQpO1xuICAgICAgICBpZiAoIXByZXNldEZpeHR1cmUpIHtcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZUZpeHR1cmVTZWxlY3Rpb24oKSB7XG4gICAgLy8gYWZ0ZXIgY2hhbmdpbmcgdGhlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGZpeHR1cmUgcG9vbCwgd2UgbWlnaHQgbmVlZCB0b1xuICAgIC8vIHNlbGVjdCBzb21lIG1vcmUgZml4dHVyZXMgb24gdGhlIHNhbWUgY2hhbm5lbCBhcyBhbHJlYWR5IHNlbGVjdGVkIG9uZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cykge1xuICAgICAgZm9yIChsZXQgcHJlc2V0Rml4dHVyZSBvZiBwcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9qZWN0Rml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QuZml4dHVyZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsICYmXG4gICAgICAgICAgICAhdGhpcy5maXh0dXJlSXNTZWxlY3RlZChwcm9qZWN0Rml4dHVyZSwgcHJlc2V0Rml4dHVyZS5waXhlbEtleSwgcHJlc2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgbmV3UHJlc2V0Rml4dHVyZSA9IG5ldyBQcmVzZXRGaXh0dXJlKCk7XG4gICAgICAgICAgICBuZXdQcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkID0gcHJvamVjdEZpeHR1cmUudXVpZDtcbiAgICAgICAgICAgIG5ld1ByZXNldEZpeHR1cmUucGl4ZWxLZXkgPSBwcmVzZXRGaXh0dXJlLnBpeGVsS2V5O1xuICAgICAgICAgICAgcHJlc2V0LmZpeHR1cmVzLnB1c2gobmV3UHJlc2V0Rml4dHVyZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZGVsZXRlQ2FwYWJpbGl0eVZhbHVlKFxuICAgIHByZXNldDogUHJlc2V0LFxuICAgIGNhcGFiaWxpdHlUeXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUsXG4gICAgY29sb3I/OiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIHdoZWVsPzogc3RyaW5nLFxuICAgIHByb2ZpbGVVdWlkPzogc3RyaW5nXG4gICkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZml4dHVyZVNlcnZpY2UuY2FwYWJpbGl0aWVzTWF0Y2goXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLnR5cGUsXG4gICAgICAgICAgY2FwYWJpbGl0eVR5cGUsXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLmNvbG9yLFxuICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlc1tpXS53aGVlbCxcbiAgICAgICAgICB3aGVlbCxcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0ucHJvZmlsZVV1aWQsXG4gICAgICAgICAgcHJvZmlsZVV1aWRcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDYXBhYmlsaXR5VmFsdWUoXG4gICAgcHJlc2V0OiBQcmVzZXQsXG4gICAgY2FwYWJpbGl0eVR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSxcbiAgICB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcixcbiAgICBzbG90TnVtYmVyPzogbnVtYmVyLFxuICAgIGNvbG9yPzogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbD86IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZD86IHN0cmluZ1xuICApIHtcbiAgICAvLyBEZWxldGUgZXhpc3RhbnQgcHJvcGVydGllcyB3aXRoIHRoaXMgdHlwZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLmRlbGV0ZUNhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIGNhcGFiaWxpdHlUeXBlLCBjb2xvciwgd2hlZWwsIHByb2ZpbGVVdWlkKTtcblxuICAgIGNvbnN0IGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUgPSBuZXcgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSgpO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUudHlwZSA9IGNhcGFiaWxpdHlUeXBlO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUuY29sb3IgPSBjb2xvcjtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLndoZWVsID0gd2hlZWw7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2UgPSB2YWx1ZVBlcmNlbnRhZ2U7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyID0gc2xvdE51bWJlcjtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnByb2ZpbGVVdWlkID0gcHJvZmlsZVV1aWQ7XG5cbiAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMucHVzaChmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlKTtcbiAgfVxuXG4gIGdldENhcGFiaWxpdHlWYWx1ZShcbiAgICBwcmVzZXQ6IFByZXNldCxcbiAgICBjYXBhYmlsaXR5VHlwZTogRml4dHVyZUNhcGFiaWxpdHlUeXBlLFxuICAgIGNvbG9yPzogRml4dHVyZUNhcGFiaWxpdHlDb2xvcixcbiAgICB3aGVlbD86IHN0cmluZyxcbiAgICBwcm9maWxlVXVpZD86IHN0cmluZ1xuICApOiBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlIHtcbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5jYXBhYmlsaXRpZXNNYXRjaChcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUudHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgY2FwYWJpbGl0eVZhbHVlLndoZWVsLFxuICAgICAgICAgIHdoZWVsLFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICBwcm9maWxlVXVpZFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHlWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRlbGV0ZUNoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxOYW1lICYmXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IHByb2ZpbGVVdWlkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRDaGFubmVsVmFsdWUoY2hhbm5lbE5hbWU6IHN0cmluZywgcHJvZmlsZVV1aWQ6IHN0cmluZywgdmFsdWU6IG51bWJlcikge1xuICAgIC8vIERlbGV0ZSBleGlzdGFudCBwcm9wZXJ0aWVzIHdpdGggdGhpcyB0eXBlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZVxuICAgIHRoaXMuZGVsZXRlQ2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lLCBwcm9maWxlVXVpZCk7XG5cbiAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2hhbm5lbE5hbWU7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IHByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSB2YWx1ZTtcblxuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIGdldENoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzKSB7XG4gICAgICBpZiAoY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsTmFtZSAmJiBjaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPT09IHByb2ZpbGVVdWlkKSB7XG4gICAgICAgIHJldHVybiBjaGFubmVsVmFsdWUudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0QXBwcm94aW1hdGVkQ29sb3JXaGVlbENhcGFiaWxpdHkocHJlc2V0OiBQcmVzZXQsIGNhY2hlZENoYW5uZWw6IENhY2hlZEZpeHR1cmVDaGFubmVsKTogQ2FjaGVkRml4dHVyZUNhcGFiaWxpdHkge1xuICAgIC8vIHJldHVybiBhbiBhcHByb3hpbWF0ZWQgd2hlZWwgc2xvdCBjaGFubmVsIGNhcGFiaWxpdHksIGlmIGEgY29sb3Igb3IgYSBzbG90IG9uIGEgZGlmZmVyZW50XG4gICAgLy8gd2hlZWwgaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICBsZXQgY29sb3JSZWQ6IG51bWJlcjtcbiAgICBsZXQgY29sb3JHcmVlbjogbnVtYmVyO1xuICAgIGxldCBjb2xvckJsdWU6IG51bWJlcjtcbiAgICBsZXQgbG93ZXN0RGlmZiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgbGV0IGxvd2VzdERpZmZDYXBhYmlsaXR5OiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eTtcbiAgICBsZXQgY2FwYWJpbGl0eVZhbHVlOiBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlO1xuXG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvclJlZCA9IDI1NSAqIGNhcGFiaWxpdHlWYWx1ZS52YWx1ZVBlcmNlbnRhZ2U7XG4gICAgfVxuICAgIGNhcGFiaWxpdHlWYWx1ZSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eVZhbHVlKHByZXNldCwgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5LCBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkdyZWVuKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvckdyZWVuID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuQmx1ZSk7XG4gICAgaWYgKGNhcGFiaWxpdHlWYWx1ZSkge1xuICAgICAgY29sb3JCbHVlID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbG9yUmVkICYmICFjb2xvckdyZWVuICYmICFjb2xvckJsdWUpIHtcbiAgICAgIC8vIG5vIGNvbG9yIGZvdW5kIC0+IHNlYXJjaCB0aGUgZmlyc3QgY29sb3Igd2hlZWxcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICBpZiAoY29sb3JSZWQgIT09IHVuZGVmaW5lZCAmJiBjb2xvckdyZWVuICE9PSB1bmRlZmluZWQgJiYgY29sb3JCbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICBpZiAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIpIHtcbiAgICAgICAgICBjb25zdCBtaXhlZENvbG9yID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRNaXhlZFdoZWVsU2xvdENvbG9yKGNhcGFiaWxpdHkud2hlZWwsIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyKTtcbiAgICAgICAgICBpZiAobWl4ZWRDb2xvcikge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9XG4gICAgICAgICAgICAgIE1hdGguYWJzKG1peGVkQ29sb3IucmVkIC0gY29sb3JSZWQpICsgTWF0aC5hYnMobWl4ZWRDb2xvci5ncmVlbiAtIGNvbG9yR3JlZW4pICsgTWF0aC5hYnMobWl4ZWRDb2xvci5ibHVlIC0gY29sb3JCbHVlKTtcblxuICAgICAgICAgICAgaWYgKGRpZmYgPCBsb3dlc3REaWZmKSB7XG4gICAgICAgICAgICAgIGxvd2VzdERpZmYgPSBkaWZmO1xuICAgICAgICAgICAgICBsb3dlc3REaWZmQ2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxvd2VzdERpZmZDYXBhYmlsaXR5O1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDYXBhYmlsaXR5VHlwZSh0eXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUpOiBib29sZWFuIHtcbiAgICAvLyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhbm5lbCB3aXRoIGF0IGxlYXN0IG9uZSBpbnRlbnNpdHkgY2FwYWJpbGl0eVxuICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlcykge1xuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2FjaGVkRml4dHVyZUJ5VXVpZChwcm9qZWN0Rml4dHVyZS5maXh0dXJlVXVpZCwgcHJvamVjdEZpeHR1cmUucGl4ZWxLZXkpO1xuICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgaWYgKGNoYW5uZWwuY2hhbm5lbCkge1xuICAgICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBjaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5RGltbWVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkpO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eUNvbG9yKCk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gb3B0aW9uYWxseSBjb2xvciB0ZW1wZXJhdHVyZSBhbmQgY29sb3Igd2hpdGUgKHNlZSBzdGFpcnZpbGxlL21oLTEwMClcblxuICAgIC8vIG9uZSBvZiB0aGUgcHJvZmlsZXMgaGFzIGEgY29sb3IgaW50ZW5zaXR5XG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eUNvbG9yT3JDb2xvcldoZWVsKCk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gb3B0aW9uYWxseSBjb2xvciB0ZW1wZXJhdHVyZSBhbmQgY29sb3Igd2hpdGUgKHNlZSBzdGFpcnZpbGxlL21oLTEwMClcblxuICAgIC8vIG9uZSBvZiB0aGUgcHJvZmlsZXMgaGFzIGEgY29sb3IgaW50ZW5zaXR5XG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eUNvbG9yKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGEgY29sb3Igd2hlZWwgaXMgaW52b2x2ZWRcbiAgICBmb3IgKGNvbnN0IHByb2plY3RGaXh0dXJlIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQocHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQsIHByb2plY3RGaXh0dXJlLnBpeGVsS2V5KTtcbiAgICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBmaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgIGlmIChjaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHlQYW5UaWx0KCk6IGJvb2xlYW4ge1xuICAgIGxldCBoYXNQYW4gPSBmYWxzZTtcbiAgICBsZXQgaGFzVGlsdCA9IGZhbHNlO1xuXG4gICAgLy8gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIHBhbiBhbmQgb25lIHRpbHQgY2hhbm5lbFxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5QYW4pKSB7XG4gICAgICBoYXNQYW4gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmhhc0NhcGFiaWxpdHlUeXBlKEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5UaWx0KSkge1xuICAgICAgaGFzVGlsdCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGhhc1BhbiAmJiBoYXNUaWx0KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBzZWxlY3RQcmVzZXQoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZWZmZWN0U2VydmljZS5zZWxlY3RlZEVmZmVjdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnNlbGVjdGVkUHJlc2V0ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbaW5kZXhdO1xuICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zZWxlY3RlZFByZXNldFV1aWQgPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1tpbmRleF0udXVpZDtcbiAgICB0aGlzLmF1dG9PcGVuRmlyc3RFZmZlY3QoKTtcbiAgICB0aGlzLnByZXZpZXdTZWxlY3Rpb25DaGFuZ2VkLm5leHQoKTtcbiAgICB0aGlzLnByZXZpZXdMaXZlKCk7XG4gIH1cblxuICBhdXRvT3BlbkZpcnN0RWZmZWN0KCkge1xuICAgIC8vIG9wZW4gdGhlIGZpcnN0IGVmZmVjdCwgaWYgdGhlIHByZXNldCBvbmx5IGhhcyBvbmVcbiAgICBpZiAodGhpcy5zZWxlY3RlZFByZXNldCAmJiB0aGlzLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHMubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmVmZmVjdFNlcnZpY2Uuc2VsZWN0ZWRFZmZlY3QgPSB0aGlzLnNlbGVjdGVkUHJlc2V0LmVmZmVjdHNbMF07XG4gICAgfVxuICB9XG5cbiAgYWRkUHJlc2V0KG5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwcmVzZXQ6IFByZXNldCA9IG5ldyBQcmVzZXQoKTtcbiAgICBwcmVzZXQudXVpZCA9IHRoaXMudXVpZFNlcnZpY2UuZ2V0VXVpZCgpO1xuICAgIHByZXNldC5uYW1lID0gbmFtZSB8fCAnTmV3IFByZXNldCc7XG5cbiAgICAvLyBJbnNlcnQgdGhlIG5ldyBwcmVzZXQgYmVmb3JlIHRoZSBoaWdoZXN0IGN1cnJlbnRseSBzZWxlY3RlZCBwcmVzZXRcbiAgICBsZXQgaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXggPSAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRQcmVzZXQgPT09IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzW2ldKSB7XG4gICAgICAgIGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHMuc3BsaWNlKGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4LCAwLCBwcmVzZXQpO1xuICAgIHRoaXMuc2VsZWN0UHJlc2V0KGhpZ2hlc3RTZWxlY3RlZFByZXNldEluZGV4KTtcbiAgfVxuXG4gIC8vIHJldHVybiBhbGwgZml4dHVyZSBwcm9maWxlcyB1c2VkIGluIHRoZSBjdXJyZW50IHByZXNldCBzZWxlY3Rpb25cbiAgZ2V0U2VsZWN0ZWRQcm9maWxlcygpIHtcbiAgICBjb25zdCBwcm9maWxlczogRml4dHVyZVByb2ZpbGVbXSA9IFtdO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm4gcHJvZmlsZXM7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBwcmVzZXRGaXh0dXJlIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCk7XG4gICAgICBjb25zdCBwcm9maWxlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRQcm9maWxlQnlVdWlkKGZpeHR1cmUucHJvZmlsZVV1aWQpO1xuXG4gICAgICBpZiAocHJvZmlsZXMuaW5kZXhPZihwcm9maWxlKSA8IDApIHtcbiAgICAgICAgcHJvZmlsZXMucHVzaChwcm9maWxlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvZmlsZXM7XG4gIH1cblxuICAvLyBnaXZlbiBhIGxpc3Qgb2YgZml4dHVyZSBwcm9maWxlcywgcmV0dXJuIGFsbCBhdmFpbGFibGUgY2hhbm5lbHMgYmFzZWQgb24gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBmaXh0dXJlcyBpbiB0aGUgcHJlc2V0XG4gIGdldFNlbGVjdGVkUHJvZmlsZUNoYW5uZWxzKHNlbGVjdGVkUHJvZmlsZXM6IEZpeHR1cmVQcm9maWxlW10pIHtcbiAgICBjb25zdCBjYWxjdWxhdGVkUHJvZmlsZU1vZGVzID0gbmV3IE1hcDxGaXh0dXJlUHJvZmlsZSwgYW55W10+KCk7XG4gICAgY29uc3QgYXZhaWxhYmxlQ2hhbm5lbHM6IE1hcDxGaXh0dXJlUHJvZmlsZSwgQ2FjaGVkRml4dHVyZUNoYW5uZWxbXT4gPSBuZXcgTWFwPEZpeHR1cmVQcm9maWxlLCBDYWNoZWRGaXh0dXJlQ2hhbm5lbFtdPigpO1xuXG4gICAgLy8gY2FsY3VsYXRlIGFsbCBtb2RlcyBmb3IgZWFjaCBwcm9maWxlXG4gICAgZm9yIChjb25zdCBwcm9maWxlIG9mIHNlbGVjdGVkUHJvZmlsZXMpIHtcbiAgICAgIGNvbnN0IG1vZGVBbmRQaXhlbEtleXM6IGFueVtdID0gW107XG5cbiAgICAgIC8vIGxvb3Agb3ZlciB0aGUgcHJvamVjdCBmaXh0dXJlcyB0byBrZWVwIHRoZSBvcmRlclxuICAgICAgZm9yIChsZXQgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgcHJlc2V0Rml4dHVyZSBvZiB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQgPT09IHByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQgJiZcbiAgICAgICAgICAgICgoIXByb2plY3RGaXh0dXJlLnBpeGVsS2V5ICYmICFwcmVzZXRGaXh0dXJlLnBpeGVsS2V5KSB8fCBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSA9PT0gcHJlc2V0Rml4dHVyZS5waXhlbEtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQocHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCwgcHJlc2V0Rml4dHVyZS5waXhlbEtleSk7XG4gICAgICAgICAgICBpZiAoZml4dHVyZS5wcm9maWxlLnV1aWQgPT09IHByb2ZpbGUudXVpZCkge1xuICAgICAgICAgICAgICBjb25zdCBleGlzdHMgPSBtb2RlQW5kUGl4ZWxLZXlzLnNvbWUoXG4gICAgICAgICAgICAgICAgKGl0ZW0pID0+IChpdGVtLm1vZGUgPT09IGZpeHR1cmUubW9kZSAmJiAhaXRlbS5waXhlbEtleSAmJiAhZml4dHVyZS5waXhlbEtleSkgfHwgaXRlbS5waXhlbEtleSA9PT0gZml4dHVyZS5waXhlbEtleVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgICAgIG1vZGVBbmRQaXhlbEtleXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBtb2RlOiBmaXh0dXJlLm1vZGUsXG4gICAgICAgICAgICAgICAgICBwaXhlbEtleTogcHJlc2V0Rml4dHVyZS5waXhlbEtleSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMuc2V0KHByb2ZpbGUsIG1vZGVBbmRQaXhlbEtleXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNhbGN1bGF0ZSBhbGwgY2hhbm5lbHMgZnJvbSB0aGUgbW9kZXNcbiAgICBjYWxjdWxhdGVkUHJvZmlsZU1vZGVzLmZvckVhY2goKG1vZGVBbmRQaXhlbEtleXM6IGFueVtdLCBwcm9maWxlOiBGaXh0dXJlUHJvZmlsZSkgPT4ge1xuICAgICAgY29uc3QgcHJvZmlsZUNoYW5uZWxzOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbFtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IG1vZGVBbmRQaXhlbEtleSBvZiBtb2RlQW5kUGl4ZWxLZXlzKSB7XG4gICAgICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDYWNoZWRDaGFubmVscyhwcm9maWxlLCBtb2RlQW5kUGl4ZWxLZXkubW9kZSwgbW9kZUFuZFBpeGVsS2V5LnBpeGVsS2V5KTtcbiAgICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGNoYW5uZWxzKSB7XG4gICAgICAgICAgLy8gb25seSBhZGQgdGhlIGNoYW5uZWwsIGlmIG5vIGNoYW5uZWwgd2l0aCB0aGUgc2FtZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWRcbiAgICAgICAgICAvLyAoZS5nLiBhIGZpbmUgY2hhbm5lbClcbiAgICAgICAgICBpZiAoY2hhbm5lbC5jaGFubmVsICYmICFwcm9maWxlQ2hhbm5lbHMuZmluZCgoYykgPT4gYy5uYW1lID09PSBjaGFubmVsLm5hbWUpKSB7XG4gICAgICAgICAgICBwcm9maWxlQ2hhbm5lbHMucHVzaChjaGFubmVsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGF2YWlsYWJsZUNoYW5uZWxzLnNldChwcm9maWxlLCBwcm9maWxlQ2hhbm5lbHMpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGF2YWlsYWJsZUNoYW5uZWxzO1xuICB9XG5cbiAgcHJldmlld0xpdmUoY29tcG9zaXRpb25OYW1lOiBzdHJpbmcgPSAnJywgcG9zaXRpb25NaWxsaXM/OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnU2VydmljZS5saXZlUHJldmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGNvbGxlY3QgYWxsIGNoYW5nZXMgYW5kIGRlbGF5IHRoZW0gdG8gbm90IGZsb29kIHRoZSBiYWNrZW5kXG4gICAgLy8gKGV4Y2VwdCBwbGF5IGV2ZW50cy4gdGhleSBuZWVkIHRvIGJlIGRlbGl2ZXJlZCBhbHdheXMpXG4gICAgaWYgKHRoaXMubGl2ZVByZXZpZXdUaW1lciAmJiAhY29tcG9zaXRpb25OYW1lKSB7XG4gICAgICB0aGlzLmxpdmVDaGFuZ2VQZW5kaW5nID0gdHJ1ZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgcG9zaXRpb24gPSBwb3NpdGlvbk1pbGxpcztcblxuICAgIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwb3NpdGlvbiA9IE1hdGgucm91bmQodGhpcy5hbmltYXRpb25TZXJ2aWNlLnRpbWVNaWxsaXMpO1xuICAgIH1cblxuICAgIHRoaXMuaHR0cFxuICAgICAgLnBvc3QoJ3ByZXZpZXc/cG9zaXRpb25NaWxsaXM9JyArIHBvc2l0aW9uICsgJyZjb21wb3NpdGlvbk5hbWU9JyArIGNvbXBvc2l0aW9uTmFtZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KSlcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIHRoaXMubGl2ZUNoYW5nZVBlbmRpbmcgPSBmYWxzZTtcblxuICAgIGlmICghY29tcG9zaXRpb25OYW1lKSB7XG4gICAgICB0aGlzLmxpdmVQcmV2aWV3VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5saXZlUHJldmlld1RpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodGhpcy5saXZlQ2hhbmdlUGVuZGluZykge1xuICAgICAgICAgIHRoaXMuaHR0cFxuICAgICAgICAgICAgLnBvc3QoJ3ByZXZpZXc/cG9zaXRpb25NaWxsaXM9JyArIHBvc2l0aW9uICsgJyZjb21wb3NpdGlvbk5hbWU9JyArIGNvbXBvc2l0aW9uTmFtZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgfSwgNTApO1xuICAgIH1cbiAgfVxuXG4gIHN0b3BQcmV2aWV3UGxheSgpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnU2VydmljZS5saXZlUHJldmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaHR0cC5wb3N0KCdzdG9wLXByZXZpZXctcGxheScsIG51bGwpLnN1YnNjcmliZSgpO1xuICB9XG59XG4iXX0=
|
|
450
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlc2V0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3NlcnZpY2VzL3ByZXNldC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJL0IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDN0YsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7QUFLekQsTUFBTSxPQUFPLGFBQWE7SUFtQnhCLFlBQ1UsYUFBNEIsRUFDNUIsV0FBd0IsRUFDeEIsY0FBOEIsRUFDOUIsY0FBOEIsRUFDOUIsYUFBNEIsRUFDNUIsSUFBZ0IsRUFDaEIsZ0JBQWtDO1FB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SUFBSTthQUNOLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxRQUFRLEdBQUcsbUJBQW1CLEdBQUcsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvSCxTQUFTLEVBQUUsQ0FBQztRQUVmLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFFL0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDO2dCQUNsQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsSUFBSTt5QkFDTixJQUFJLENBQUMseUJBQXlCLEdBQUcsUUFBUSxHQUFHLG1CQUFtQixHQUFHLGVBQWUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7eUJBQy9ILFNBQVMsRUFBRSxDQUFDO2dCQUNqQixDQUFDO1lBQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1QsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEMsT0FBTztRQUNULENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUN4RCxDQUFDOzhFQXRpQlUsYUFBYTt1RUFBYixhQUFhLFdBQWIsYUFBYSxtQkFGWixNQUFNOztpRkFFUCxhQUFhO2NBSHpCLFVBQVU7ZUFBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgRml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHktdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZVByb2ZpbGUgfSBmcm9tICcuLi9tb2RlbHMvZml4dHVyZS1wcm9maWxlJztcbmltcG9ydCB7IFByZXNldCB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2VydmljZSB9IGZyb20gJy4vYW5pbWF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4vY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWZmZWN0U2VydmljZSB9IGZyb20gJy4vZWZmZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFV1aWRTZXJ2aWNlIH0gZnJvbSAnLi91dWlkLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0Rml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQtZml4dHVyZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcmVzZXRTZXJ2aWNlIHtcbiAgc2VsZWN0ZWRQcmVzZXQ6IFByZXNldDtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgY3VycmVudCBwcmV2aWV3IGVsZW1lbnQgaGFzIGNoYW5nZWQgKHNjZW5lL3ByZXNldClcbiAgcHJldmlld1NlbGVjdGlvbkNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIGZpcmVzLCB3aGVuIHRoZSBmaXh0dXJlIHNlbGVjdGlvbiBoYXMgY2hhbmdlZFxuICBmaXh0dXJlU2VsZWN0aW9uQ2hhbmdlZDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gZmlyZXMsIHdoZW4gdGhlIGZpeHR1cmUgc2VsZWN0aW9uIGhhcyBjaGFuZ2VkIGZvciBzZXR0aW5nc1xuICBmaXh0dXJlU2VsZWN0aW9uU2V0dGluZ3NDaGFuZ2VkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBmaXJlcywgd2hlbiB0aGUgc2VsZWN0ZWQgY29sb3IgaGFzIGNoYW5nZWQuIFRoaXMgaXMgcmVxdWlyZWQsXG4gIC8vIGJlY2F1c2UgZGV0ZWN0Q2hhbmdlcyBpcyBub3QgZW5vdWdoIHRvIHRyaWdnZXIgZGlmZmVyZW50IGNvbXBvbmVudHMuXG4gIGZpeHR1cmVDb2xvckNoYW5nZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGxpdmVQcmV2aWV3VGltZXI6IGFueTtcbiAgbGl2ZUNoYW5nZVBlbmRpbmcgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVmZmVjdFNlcnZpY2U6IEVmZmVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1dWlkU2VydmljZTogVXVpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGFuaW1hdGlvblNlcnZpY2U6IEFuaW1hdGlvblNlcnZpY2VcbiAgKSB7fVxuXG4gIGdldFByZXNldEJ5VXVpZCh1dWlkOiBzdHJpbmcpOiBQcmVzZXQge1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzKSB7XG4gICAgICBpZiAocHJlc2V0LnV1aWQgPT09IHV1aWQpIHtcbiAgICAgICAgcmV0dXJuIHByZXNldDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXh0dXJlVXVpZEFuZFBpeGVsS2V5RXF1YWxzKGZpeHR1cmVVdWlkMTogc3RyaW5nLCBmaXh0dXJlVXVpZDI6IHN0cmluZywgcGl4ZWxLZXkxOiBzdHJpbmcsIHBpeGVsS2V5Mjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGZpeHR1cmVVdWlkMSA9PT0gZml4dHVyZVV1aWQyICYmICgoIXBpeGVsS2V5MSAmJiAhcGl4ZWxLZXkyKSB8fCBwaXhlbEtleTEgPT09IHBpeGVsS2V5Mik7XG4gIH1cblxuICBnZXRQcmVzZXRGaXh0dXJlKHByZXNldDogUHJlc2V0LCBmaXh0dXJlVXVpZDogc3RyaW5nLCBwaXhlbEtleT86IHN0cmluZyk6IFByZXNldEZpeHR1cmUge1xuICAgIGZvciAoY29uc3QgZml4dHVyZSBvZiBwcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgIGlmICh0aGlzLmZpeHR1cmVVdWlkQW5kUGl4ZWxLZXlFcXVhbHMoZml4dHVyZS5maXh0dXJlVXVpZCwgZml4dHVyZVV1aWQsIGZpeHR1cmUucGl4ZWxLZXksIHBpeGVsS2V5KSkge1xuICAgICAgICByZXR1cm4gZml4dHVyZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmU6IEZpeHR1cmUsIHBpeGVsS2V5OiBzdHJpbmcsIHByZXNldD86IFByZXNldCk6IGJvb2xlYW4ge1xuICAgIC8vIGlzIHRoZSBwYXNzZWQgZml4dHVyZSBzZWxlY3RlZCBpbiB0aGUgcGFzc2VkL2N1cnJlbnRseSBzZWxlY3RlZCBwcmVzZXQ/XG4gICAgaWYgKCFwcmVzZXQpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgIHByZXNldCA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJlc2V0Rml4dHVyZSA9IHRoaXMuZ2V0UHJlc2V0Rml4dHVyZShwcmVzZXQsIGZpeHR1cmUudXVpZCwgcGl4ZWxLZXkpO1xuXG4gICAgaWYgKHByZXNldEZpeHR1cmUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaEZpeHR1cmVTZWxlY3Rpb24oZml4dHVyZTogRml4dHVyZSwgcGl4ZWxLZXk6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zZWxlY3RlZFByZXNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHNlbGVjdCBhbGwgZml4dHVyZXMgYXQgdGhlIHNwZWNpZmllZCBzdGFydCBjaGFubmVsIG9yIHVuc2VsZWN0IHRoZW0sXG4gICAgLy8gaWYgYWxyZWFkeSBzZWxlY3RlZFxuICAgIGlmICh0aGlzLmZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUsIHBpeGVsS2V5KSkge1xuICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcHJvamVjdEZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQodGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlc1tpXS5maXh0dXJlVXVpZCk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBwcm9qZWN0Rml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmUuZG14Rmlyc3RDaGFubmVsICYmXG4gICAgICAgICAgKCghdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlc1tpXS5waXhlbEtleSAmJiAhcGl4ZWxLZXkpIHx8IHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXNbaV0ucGl4ZWxLZXkgPT09IHBpeGVsS2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGNvbnN0IHByb2plY3RQcmVzZXRGaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRGaXh0dXJlcykge1xuICAgICAgICBpZiAoKCFwcm9qZWN0UHJlc2V0Rml4dHVyZS5waXhlbEtleSAmJiAhcGl4ZWxLZXkpIHx8IHByb2plY3RQcmVzZXRGaXh0dXJlLnBpeGVsS2V5ID09PSBwaXhlbEtleSkge1xuICAgICAgICAgIGNvbnN0IHByb2plY3RGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHByb2plY3RQcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkKTtcbiAgICAgICAgICBpZiAocHJvamVjdEZpeHR1cmUuZG14Rmlyc3RDaGFubmVsID09PSBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCkge1xuICAgICAgICAgICAgY29uc3QgcHJlc2V0Rml4dHVyZSA9IG5ldyBQcmVzZXRGaXh0dXJlKCk7XG4gICAgICAgICAgICBwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkID0gcHJvamVjdFByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQ7XG4gICAgICAgICAgICBwcmVzZXRGaXh0dXJlLnBpeGVsS2V5ID0gcGl4ZWxLZXk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVzLnB1c2gocHJlc2V0Rml4dHVyZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0QWxsRml4dHVyZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBmaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgaWYgKHRoaXMuZml4dHVyZVNlcnZpY2UuZml4dHVyZUhhc0dlbmVyYWxDaGFubmVsKGZpeHR1cmUpKSB7XG4gICAgICAgIGlmICghdGhpcy5maXh0dXJlSXNTZWxlY3RlZChmaXh0dXJlLCBudWxsKSkge1xuICAgICAgICAgIGNvbnN0IHByZXNldEZpeHR1cmUgPSBuZXcgUHJlc2V0Rml4dHVyZSgpO1xuICAgICAgICAgIHByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQgPSBmaXh0dXJlLnV1aWQ7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlcy5wdXNoKHByZXNldEZpeHR1cmUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBpeGVsS2V5cyA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZml4dHVyZUdldFVuaXF1ZVBpeGVsS2V5cyhmaXh0dXJlKTtcblxuICAgICAgZm9yIChjb25zdCBwaXhlbEtleSBvZiBwaXhlbEtleXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmZpeHR1cmVJc1NlbGVjdGVkKGZpeHR1cmUsIHBpeGVsS2V5KSkge1xuICAgICAgICAgIGNvbnN0IHByZXNldEZpeHR1cmUgPSBuZXcgUHJlc2V0Rml4dHVyZSgpO1xuICAgICAgICAgIHByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQgPSBmaXh0dXJlLnV1aWQ7XG4gICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleSA9IHBpeGVsS2V5O1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMucHVzaChwcmVzZXRGaXh0dXJlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE5vRml4dHVyZXMoKSB7XG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlcyA9IFtdO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZURlbGV0ZWRGaXh0dXJlcygpIHtcbiAgICAvLyBhZnRlciBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgZml4dHVyZSBwb29sLCB3ZSBtaWdodCBuZWVkIHRvXG4gICAgLy8gZGVsZXRlIHNvbWUgZml4dHVyZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cykge1xuICAgICAgZm9yIChsZXQgaSA9IHByZXNldC5maXh0dXJlcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBwcmVzZXRGaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHByZXNldC5maXh0dXJlc1tpXS5maXh0dXJlVXVpZCk7XG4gICAgICAgIGlmICghcHJlc2V0Rml4dHVyZSkge1xuICAgICAgICAgIHByZXNldC5maXh0dXJlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRml4dHVyZVNlbGVjdGlvbigpIHtcbiAgICAvLyBhZnRlciBjaGFuZ2luZyB0aGUgY29uZmlndXJhdGlvbiBpbiB0aGUgZml4dHVyZSBwb29sLCB3ZSBtaWdodCBuZWVkIHRvXG4gICAgLy8gc2VsZWN0IHNvbWUgbW9yZSBmaXh0dXJlcyBvbiB0aGUgc2FtZSBjaGFubmVsIGFzIGFscmVhZHkgc2VsZWN0ZWQgb25lc1xuICAgIGZvciAoY29uc3QgcHJlc2V0IG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzKSB7XG4gICAgICBmb3IgKGxldCBwcmVzZXRGaXh0dXJlIG9mIHByZXNldC5maXh0dXJlcykge1xuICAgICAgICBjb25zdCBmaXh0dXJlID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRGaXh0dXJlQnlVdWlkKHByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb2plY3RGaXh0dXJlIG9mIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5maXh0dXJlcykge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCA9PT0gZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgJiZcbiAgICAgICAgICAgICF0aGlzLmZpeHR1cmVJc1NlbGVjdGVkKHByb2plY3RGaXh0dXJlLCBwcmVzZXRGaXh0dXJlLnBpeGVsS2V5LCBwcmVzZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdQcmVzZXRGaXh0dXJlID0gbmV3IFByZXNldEZpeHR1cmUoKTtcbiAgICAgICAgICAgIG5ld1ByZXNldEZpeHR1cmUuZml4dHVyZVV1aWQgPSBwcm9qZWN0Rml4dHVyZS51dWlkO1xuICAgICAgICAgICAgbmV3UHJlc2V0Rml4dHVyZS5waXhlbEtleSA9IHByZXNldEZpeHR1cmUucGl4ZWxLZXk7XG4gICAgICAgICAgICBwcmVzZXQuZml4dHVyZXMucHVzaChuZXdQcmVzZXRGaXh0dXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkZWxldGVDYXBhYmlsaXR5VmFsdWUoXG4gICAgcHJlc2V0OiBQcmVzZXQsXG4gICAgY2FwYWJpbGl0eVR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSxcbiAgICBjb2xvcj86IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsXG4gICAgd2hlZWw/OiBzdHJpbmcsXG4gICAgcHJvZmlsZVV1aWQ/OiBzdHJpbmdcbiAgKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5maXh0dXJlU2VydmljZS5jYXBhYmlsaXRpZXNNYXRjaChcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0udHlwZSxcbiAgICAgICAgICBjYXBhYmlsaXR5VHlwZSxcbiAgICAgICAgICBwcmVzZXQuZml4dHVyZUNhcGFiaWxpdHlWYWx1ZXNbaV0uY29sb3IsXG4gICAgICAgICAgY29sb3IsXG4gICAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzW2ldLndoZWVsLFxuICAgICAgICAgIHdoZWVsLFxuICAgICAgICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlc1tpXS5wcm9maWxlVXVpZCxcbiAgICAgICAgICBwcm9maWxlVXVpZFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldENhcGFiaWxpdHlWYWx1ZShcbiAgICBwcmVzZXQ6IFByZXNldCxcbiAgICBjYXBhYmlsaXR5VHlwZTogRml4dHVyZUNhcGFiaWxpdHlUeXBlLFxuICAgIHZhbHVlUGVyY2VudGFnZTogbnVtYmVyLFxuICAgIHNsb3ROdW1iZXI/OiBudW1iZXIsXG4gICAgY29sb3I/OiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIHdoZWVsPzogc3RyaW5nLFxuICAgIHByb2ZpbGVVdWlkPzogc3RyaW5nXG4gICkge1xuICAgIC8vIERlbGV0ZSBleGlzdGFudCBwcm9wZXJ0aWVzIHdpdGggdGhpcyB0eXBlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZVxuICAgIHRoaXMuZGVsZXRlQ2FwYWJpbGl0eVZhbHVlKHByZXNldCwgY2FwYWJpbGl0eVR5cGUsIGNvbG9yLCB3aGVlbCwgcHJvZmlsZVV1aWQpO1xuXG4gICAgY29uc3QgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZSA9IG5ldyBGaXh0dXJlQ2FwYWJpbGl0eVZhbHVlKCk7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS50eXBlID0gY2FwYWJpbGl0eVR5cGU7XG4gICAgZml4dHVyZUNhcGFiaWxpdHlWYWx1ZS5jb2xvciA9IGNvbG9yO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUud2hlZWwgPSB3aGVlbDtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA9IHZhbHVlUGVyY2VudGFnZTtcbiAgICBmaXh0dXJlQ2FwYWJpbGl0eVZhbHVlLnNsb3ROdW1iZXIgPSBzbG90TnVtYmVyO1xuICAgIGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUucHJvZmlsZVV1aWQgPSBwcm9maWxlVXVpZDtcblxuICAgIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcy5wdXNoKGZpeHR1cmVDYXBhYmlsaXR5VmFsdWUpO1xuICB9XG5cbiAgZ2V0Q2FwYWJpbGl0eVZhbHVlKFxuICAgIHByZXNldDogUHJlc2V0LFxuICAgIGNhcGFiaWxpdHlUeXBlOiBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUsXG4gICAgY29sb3I/OiBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLFxuICAgIHdoZWVsPzogc3RyaW5nLFxuICAgIHByb2ZpbGVVdWlkPzogc3RyaW5nXG4gICk6IEZpeHR1cmVDYXBhYmlsaXR5VmFsdWUge1xuICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eVZhbHVlIG9mIHByZXNldC5maXh0dXJlQ2FwYWJpbGl0eVZhbHVlcykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS50eXBlLFxuICAgICAgICAgIGNhcGFiaWxpdHlUeXBlLFxuICAgICAgICAgIGNhcGFiaWxpdHlWYWx1ZS5jb2xvcixcbiAgICAgICAgICBjb2xvcixcbiAgICAgICAgICBjYXBhYmlsaXR5VmFsdWUud2hlZWwsXG4gICAgICAgICAgd2hlZWwsXG4gICAgICAgICAgY2FwYWJpbGl0eVZhbHVlLnByb2ZpbGVVdWlkLFxuICAgICAgICAgIHByb2ZpbGVVdWlkXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FwYWJpbGl0eVZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZGVsZXRlQ2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lOiBzdHJpbmcsIHByb2ZpbGVVdWlkOiBzdHJpbmcpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlc1tpXS5jaGFubmVsTmFtZSA9PT0gY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlc1tpXS5wcm9maWxlVXVpZCA9PT0gcHJvZmlsZVV1aWRcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUHJlc2V0LmZpeHR1cmVDaGFubmVsVmFsdWVzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldENoYW5uZWxWYWx1ZShjaGFubmVsTmFtZTogc3RyaW5nLCBwcm9maWxlVXVpZDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyKSB7XG4gICAgLy8gRGVsZXRlIGV4aXN0YW50IHByb3BlcnRpZXMgd2l0aCB0aGlzIHR5cGUgYW5kIHNldCB0aGUgbmV3IHZhbHVlXG4gICAgdGhpcy5kZWxldGVDaGFubmVsVmFsdWUoY2hhbm5lbE5hbWUsIHByb2ZpbGVVdWlkKTtcblxuICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gcHJvZmlsZVV1aWQ7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlQ2hhbm5lbFZhbHVlcy5wdXNoKGZpeHR1cmVDaGFubmVsVmFsdWUpO1xuICB9XG5cbiAgZ2V0Q2hhbm5lbFZhbHVlKGNoYW5uZWxOYW1lOiBzdHJpbmcsIHByb2ZpbGVVdWlkOiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgIGlmIChjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxOYW1lICYmIGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gcHJvZmlsZVV1aWQpIHtcbiAgICAgICAgcmV0dXJuIGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRBcHByb3hpbWF0ZWRDb2xvcldoZWVsQ2FwYWJpbGl0eShwcmVzZXQ6IFByZXNldCwgY2FjaGVkQ2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwpOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB7XG4gICAgLy8gcmV0dXJuIGFuIGFwcHJveGltYXRlZCB3aGVlbCBzbG90IGNoYW5uZWwgY2FwYWJpbGl0eSwgaWYgYSBjb2xvciBvciBhIHNsb3Qgb24gYSBkaWZmZXJlbnRcbiAgICAvLyB3aGVlbCBoYXMgYmVlbiBzZWxlY3RlZFxuICAgIGxldCBjb2xvclJlZDogbnVtYmVyO1xuICAgIGxldCBjb2xvckdyZWVuOiBudW1iZXI7XG4gICAgbGV0IGNvbG9yQmx1ZTogbnVtYmVyO1xuICAgIGxldCBsb3dlc3REaWZmID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICBsZXQgbG93ZXN0RGlmZkNhcGFiaWxpdHk6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5O1xuICAgIGxldCBjYXBhYmlsaXR5VmFsdWU6IEZpeHR1cmVDYXBhYmlsaXR5VmFsdWU7XG5cbiAgICBjYXBhYmlsaXR5VmFsdWUgPSB0aGlzLmdldENhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSwgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5SZWQpO1xuICAgIGlmIChjYXBhYmlsaXR5VmFsdWUpIHtcbiAgICAgIGNvbG9yUmVkID0gMjU1ICogY2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICB9XG4gICAgY2FwYWJpbGl0eVZhbHVlID0gdGhpcy5nZXRDYXBhYmlsaXR5VmFsdWUocHJlc2V0LCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHksIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuR3JlZW4pO1xuICAgIGlmIChjYXBhYmlsaXR5VmFsdWUpIHtcbiAgICAgIGNvbG9yR3JlZW4gPSAyNTUgKiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cbiAgICBjYXBhYmlsaXR5VmFsdWUgPSB0aGlzLmdldENhcGFiaWxpdHlWYWx1ZShwcmVzZXQsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSwgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlKTtcbiAgICBpZiAoY2FwYWJpbGl0eVZhbHVlKSB7XG4gICAgICBjb2xvckJsdWUgPSAyNTUgKiBjYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgIH1cblxuICAgIGlmICghY29sb3JSZWQgJiYgIWNvbG9yR3JlZW4gJiYgIWNvbG9yQmx1ZSkge1xuICAgICAgLy8gbm8gY29sb3IgZm91bmQgLT4gc2VhcmNoIHRoZSBmaXJzdCBjb2xvciB3aGVlbFxuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIGlmIChjb2xvclJlZCAhPT0gdW5kZWZpbmVkICYmIGNvbG9yR3JlZW4gIT09IHVuZGVmaW5lZCAmJiBjb2xvckJsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNhY2hlZENoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcikge1xuICAgICAgICAgIGNvbnN0IG1peGVkQ29sb3IgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldE1peGVkV2hlZWxTbG90Q29sb3IoY2FwYWJpbGl0eS53aGVlbCwgY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIpO1xuICAgICAgICAgIGlmIChtaXhlZENvbG9yKSB7XG4gICAgICAgICAgICBjb25zdCBkaWZmID1cbiAgICAgICAgICAgICAgTWF0aC5hYnMobWl4ZWRDb2xvci5yZWQgLSBjb2xvclJlZCkgKyBNYXRoLmFicyhtaXhlZENvbG9yLmdyZWVuIC0gY29sb3JHcmVlbikgKyBNYXRoLmFicyhtaXhlZENvbG9yLmJsdWUgLSBjb2xvckJsdWUpO1xuXG4gICAgICAgICAgICBpZiAoZGlmZiA8IGxvd2VzdERpZmYpIHtcbiAgICAgICAgICAgICAgbG93ZXN0RGlmZiA9IGRpZmY7XG4gICAgICAgICAgICAgIGxvd2VzdERpZmZDYXBhYmlsaXR5ID0gY2FwYWJpbGl0eTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbG93ZXN0RGlmZkNhcGFiaWxpdHk7XG4gIH1cblxuICBwcml2YXRlIGhhc0NhcGFiaWxpdHlUeXBlKHR5cGU6IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSk6IGJvb2xlYW4ge1xuICAgIC8vIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFubmVsIHdpdGggYXQgbGVhc3Qgb25lIGludGVuc2l0eSBjYXBhYmlsaXR5XG4gICAgZm9yIChjb25zdCBwcmVzZXRGaXh0dXJlIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZEZpeHR1cmVCeVV1aWQocHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCwgcHJlc2V0Rml4dHVyZS5waXhlbEtleSk7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgZml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgICBpZiAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUgPT09IHR5cGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGhhc0NhcGFiaWxpdHlEaW1tZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eSk7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5Q29sb3IoKTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETyBvcHRpb25hbGx5IGNvbG9yIHRlbXBlcmF0dXJlIGFuZCBjb2xvciB3aGl0ZSAoc2VlIHN0YWlydmlsbGUvbWgtMTAwKVxuXG4gICAgLy8gb25lIG9mIHRoZSBwcm9maWxlcyBoYXMgYSBjb2xvciBpbnRlbnNpdHlcbiAgICBpZiAodGhpcy5oYXNDYXBhYmlsaXR5VHlwZShGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBoYXNDYXBhYmlsaXR5Q29sb3JPckNvbG9yV2hlZWwoKTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETyBvcHRpb25hbGx5IGNvbG9yIHRlbXBlcmF0dXJlIGFuZCBjb2xvciB3aGl0ZSAoc2VlIHN0YWlydmlsbGUvbWgtMTAwKVxuXG4gICAgLy8gb25lIG9mIHRoZSBwcm9maWxlcyBoYXMgYSBjb2xvciBpbnRlbnNpdHlcbiAgICBpZiAodGhpcy5oYXNDYXBhYmlsaXR5Q29sb3IoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gYSBjb2xvciB3aGVlbCBpcyBpbnZvbHZlZFxuICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlcykge1xuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2FjaGVkRml4dHVyZUJ5VXVpZChwcm9qZWN0Rml4dHVyZS5maXh0dXJlVXVpZCwgcHJvamVjdEZpeHR1cmUucGl4ZWxLZXkpO1xuICAgICAgZm9yIChjb25zdCBjaGFubmVsIG9mIGZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgICAgaWYgKGNoYW5uZWwuY29sb3JXaGVlbCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaGFzQ2FwYWJpbGl0eVBhblRpbHQoKTogYm9vbGVhbiB7XG4gICAgbGV0IGhhc1BhbiA9IGZhbHNlO1xuICAgIGxldCBoYXNUaWx0ID0gZmFsc2U7XG5cbiAgICAvLyB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgcGFuIGFuZCBvbmUgdGlsdCBjaGFubmVsXG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLlBhbikpIHtcbiAgICAgIGhhc1BhbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzQ2FwYWJpbGl0eVR5cGUoRml4dHVyZUNhcGFiaWxpdHlUeXBlLlRpbHQpKSB7XG4gICAgICBoYXNUaWx0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaGFzUGFuICYmIGhhc1RpbHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNlbGVjdFByZXNldChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5lZmZlY3RTZXJ2aWNlLnNlbGVjdGVkRWZmZWN0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmVzZXQgPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1tpbmRleF07XG4gICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNlbGVjdGVkUHJlc2V0VXVpZCA9IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzW2luZGV4XS51dWlkO1xuICAgIHRoaXMuYXV0b09wZW5GaXJzdEVmZmVjdCgpO1xuICAgIHRoaXMucHJldmlld1NlbGVjdGlvbkNoYW5nZWQubmV4dCgpO1xuICAgIHRoaXMucHJldmlld0xpdmUoKTtcbiAgfVxuXG4gIGF1dG9PcGVuRmlyc3RFZmZlY3QoKSB7XG4gICAgLy8gb3BlbiB0aGUgZmlyc3QgZWZmZWN0LCBpZiB0aGUgcHJlc2V0IG9ubHkgaGFzIG9uZVxuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJlc2V0ICYmIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZWZmZWN0cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMuZWZmZWN0U2VydmljZS5zZWxlY3RlZEVmZmVjdCA9IHRoaXMuc2VsZWN0ZWRQcmVzZXQuZWZmZWN0c1swXTtcbiAgICB9XG4gIH1cblxuICBhZGRQcmVzZXQobmFtZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHByZXNldDogUHJlc2V0ID0gbmV3IFByZXNldCgpO1xuICAgIHByZXNldC51dWlkID0gdGhpcy51dWlkU2VydmljZS5nZXRVdWlkKCk7XG4gICAgcHJlc2V0Lm5hbWUgPSBuYW1lIHx8ICdOZXcgUHJlc2V0JztcblxuICAgIC8vIEluc2VydCB0aGUgbmV3IHByZXNldCBiZWZvcmUgdGhlIGhpZ2hlc3QgY3VycmVudGx5IHNlbGVjdGVkIHByZXNldFxuICAgIGxldCBoaWdoZXN0U2VsZWN0ZWRQcmVzZXRJbmRleCA9IDA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5wcmVzZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFByZXNldCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbaV0pIHtcbiAgICAgICAgaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXggPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5zcGxpY2UoaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXgsIDAsIHByZXNldCk7XG4gICAgdGhpcy5zZWxlY3RQcmVzZXQoaGlnaGVzdFNlbGVjdGVkUHJlc2V0SW5kZXgpO1xuICB9XG5cbiAgLy8gcmV0dXJuIGFsbCBmaXh0dXJlIHByb2ZpbGVzIHVzZWQgaW4gdGhlIGN1cnJlbnQgcHJlc2V0IHNlbGVjdGlvblxuICBnZXRTZWxlY3RlZFByb2ZpbGVzKCkge1xuICAgIGNvbnN0IHByb2ZpbGVzOiBGaXh0dXJlUHJvZmlsZVtdID0gW107XG5cbiAgICBpZiAoIXRoaXMuc2VsZWN0ZWRQcmVzZXQpIHtcbiAgICAgIHJldHVybiBwcm9maWxlcztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHByZXNldEZpeHR1cmUgb2YgdGhpcy5zZWxlY3RlZFByZXNldC5maXh0dXJlcykge1xuICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Rml4dHVyZUJ5VXVpZChwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkKTtcbiAgICAgIGNvbnN0IHByb2ZpbGUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFByb2ZpbGVCeVV1aWQoZml4dHVyZS5wcm9maWxlVXVpZCk7XG5cbiAgICAgIGlmIChwcm9maWxlcy5pbmRleE9mKHByb2ZpbGUpIDwgMCkge1xuICAgICAgICBwcm9maWxlcy5wdXNoKHByb2ZpbGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcm9maWxlcztcbiAgfVxuXG4gIC8vIGdpdmVuIGEgbGlzdCBvZiBmaXh0dXJlIHByb2ZpbGVzLCByZXR1cm4gYWxsIGF2YWlsYWJsZSBjaGFubmVscyBiYXNlZCBvbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGZpeHR1cmVzIGluIHRoZSBwcmVzZXRcbiAgZ2V0U2VsZWN0ZWRQcm9maWxlQ2hhbm5lbHMoc2VsZWN0ZWRQcm9maWxlczogRml4dHVyZVByb2ZpbGVbXSkge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMgPSBuZXcgTWFwPEZpeHR1cmVQcm9maWxlLCBhbnlbXT4oKTtcbiAgICBjb25zdCBhdmFpbGFibGVDaGFubmVsczogTWFwPEZpeHR1cmVQcm9maWxlLCBDYWNoZWRGaXh0dXJlQ2hhbm5lbFtdPiA9IG5ldyBNYXA8Rml4dHVyZVByb2ZpbGUsIENhY2hlZEZpeHR1cmVDaGFubmVsW10+KCk7XG5cbiAgICAvLyBjYWxjdWxhdGUgYWxsIG1vZGVzIGZvciBlYWNoIHByb2ZpbGVcbiAgICBmb3IgKGNvbnN0IHByb2ZpbGUgb2Ygc2VsZWN0ZWRQcm9maWxlcykge1xuICAgICAgY29uc3QgbW9kZUFuZFBpeGVsS2V5czogYW55W10gPSBbXTtcblxuICAgICAgLy8gbG9vcCBvdmVyIHRoZSBwcm9qZWN0IGZpeHR1cmVzIHRvIGtlZXAgdGhlIG9yZGVyXG4gICAgICBmb3IgKGxldCBwcm9qZWN0Rml4dHVyZSBvZiB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0Rml4dHVyZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBwcmVzZXRGaXh0dXJlIG9mIHRoaXMuc2VsZWN0ZWRQcmVzZXQuZml4dHVyZXMpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwcm9qZWN0Rml4dHVyZS5maXh0dXJlVXVpZCA9PT0gcHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCAmJlxuICAgICAgICAgICAgKCghcHJvamVjdEZpeHR1cmUucGl4ZWxLZXkgJiYgIXByZXNldEZpeHR1cmUucGl4ZWxLZXkpIHx8IHByb2plY3RGaXh0dXJlLnBpeGVsS2V5ID09PSBwcmVzZXRGaXh0dXJlLnBpeGVsS2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2FjaGVkRml4dHVyZUJ5VXVpZChwcmVzZXRGaXh0dXJlLmZpeHR1cmVVdWlkLCBwcmVzZXRGaXh0dXJlLnBpeGVsS2V5KTtcbiAgICAgICAgICAgIGlmIChmaXh0dXJlLnByb2ZpbGUudXVpZCA9PT0gcHJvZmlsZS51dWlkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4aXN0cyA9IG1vZGVBbmRQaXhlbEtleXMuc29tZShcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gKGl0ZW0ubW9kZSA9PT0gZml4dHVyZS5tb2RlICYmICFpdGVtLnBpeGVsS2V5ICYmICFmaXh0dXJlLnBpeGVsS2V5KSB8fCBpdGVtLnBpeGVsS2V5ID09PSBmaXh0dXJlLnBpeGVsS2V5XG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICAgICAgbW9kZUFuZFBpeGVsS2V5cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIG1vZGU6IGZpeHR1cmUubW9kZSxcbiAgICAgICAgICAgICAgICAgIHBpeGVsS2V5OiBwcmVzZXRGaXh0dXJlLnBpeGVsS2V5LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2FsY3VsYXRlZFByb2ZpbGVNb2Rlcy5zZXQocHJvZmlsZSwgbW9kZUFuZFBpeGVsS2V5cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY2FsY3VsYXRlIGFsbCBjaGFubmVscyBmcm9tIHRoZSBtb2Rlc1xuICAgIGNhbGN1bGF0ZWRQcm9maWxlTW9kZXMuZm9yRWFjaCgobW9kZUFuZFBpeGVsS2V5czogYW55W10sIHByb2ZpbGU6IEZpeHR1cmVQcm9maWxlKSA9PiB7XG4gICAgICBjb25zdCBwcm9maWxlQ2hhbm5lbHM6IENhY2hlZEZpeHR1cmVDaGFubmVsW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbW9kZUFuZFBpeGVsS2V5IG9mIG1vZGVBbmRQaXhlbEtleXMpIHtcbiAgICAgICAgY29uc3QgY2hhbm5lbHMgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENhY2hlZENoYW5uZWxzKHByb2ZpbGUsIG1vZGVBbmRQaXhlbEtleS5tb2RlLCBtb2RlQW5kUGl4ZWxLZXkucGl4ZWxLZXkpO1xuICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbHMpIHtcbiAgICAgICAgICAvLyBvbmx5IGFkZCB0aGUgY2hhbm5lbCwgaWYgbm8gY2hhbm5lbCB3aXRoIHRoZSBzYW1lIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZFxuICAgICAgICAgIC8vIChlLmcuIGEgZmluZSBjaGFubmVsKVxuICAgICAgICAgIGlmIChjaGFubmVsLmNoYW5uZWwgJiYgIXByb2ZpbGVDaGFubmVscy5maW5kKChjKSA9PiBjLm5hbWUgPT09IGNoYW5uZWwubmFtZSkpIHtcbiAgICAgICAgICAgIHByb2ZpbGVDaGFubmVscy5wdXNoKGNoYW5uZWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXZhaWxhYmxlQ2hhbm5lbHMuc2V0KHByb2ZpbGUsIHByb2ZpbGVDaGFubmVscyk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gYXZhaWxhYmxlQ2hhbm5lbHM7XG4gIH1cblxuICBwcmV2aWV3TGl2ZShjb21wb3NpdGlvbk5hbWU6IHN0cmluZyA9ICcnLCBwb3NpdGlvbk1pbGxpcz86IG51bWJlcikge1xuICAgIGlmICghdGhpcy5jb25maWdTZXJ2aWNlLmxpdmVQcmV2aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gY29sbGVjdCBhbGwgY2hhbmdlcyBhbmQgZGVsYXkgdGhlbSB0byBub3QgZmxvb2QgdGhlIGJhY2tlbmRcbiAgICAvLyAoZXhjZXB0IHBsYXkgZXZlbnRzLiB0aGV5IG5lZWQgdG8gYmUgZGVsaXZlcmVkIGFsd2F5cylcbiAgICBpZiAodGhpcy5saXZlUHJldmlld1RpbWVyICYmICFjb21wb3NpdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMubGl2ZUNoYW5nZVBlbmRpbmcgPSB0cnVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBwb3NpdGlvbiA9IHBvc2l0aW9uTWlsbGlzO1xuXG4gICAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHBvc2l0aW9uID0gTWF0aC5yb3VuZCh0aGlzLmFuaW1hdGlvblNlcnZpY2UudGltZU1pbGxpcyk7XG4gICAgfVxuXG4gICAgdGhpcy5odHRwXG4gICAgICAucG9zdCgncHJldmlldz9wb3NpdGlvbk1pbGxpcz0nICsgcG9zaXRpb24gKyAnJmNvbXBvc2l0aW9uTmFtZT0nICsgY29tcG9zaXRpb25OYW1lLCBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QpKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy5saXZlQ2hhbmdlUGVuZGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKCFjb21wb3NpdGlvbk5hbWUpIHtcbiAgICAgIHRoaXMubGl2ZVByZXZpZXdUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmxpdmVQcmV2aWV3VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmxpdmVDaGFuZ2VQZW5kaW5nKSB7XG4gICAgICAgICAgdGhpcy5odHRwXG4gICAgICAgICAgICAucG9zdCgncHJldmlldz9wb3NpdGlvbk1pbGxpcz0nICsgcG9zaXRpb24gKyAnJmNvbXBvc2l0aW9uTmFtZT0nICsgY29tcG9zaXRpb25OYW1lLCBKU09OLnN0cmluZ2lmeSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICB9LCA1MCk7XG4gICAgfVxuICB9XG5cbiAgc3RvcFByZXZpZXdQbGF5KCkge1xuICAgIGlmICghdGhpcy5jb25maWdTZXJ2aWNlLmxpdmVQcmV2aWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5odHRwLnBvc3QoJ3N0b3AtcHJldmlldy1wbGF5JywgbnVsbCkuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -30,6 +30,14 @@ export class PreviewService {
|
|
|
30
30
|
// roughness: 0.5,
|
|
31
31
|
// metalness: 0.5,
|
|
32
32
|
});
|
|
33
|
+
this.fixtureMaterial = new THREE.MeshLambertMaterial({
|
|
34
|
+
color: 0x0d0d0d,
|
|
35
|
+
emissive: 0x0d0d0d,
|
|
36
|
+
});
|
|
37
|
+
this.fixtureSelectedMaterial = new THREE.MeshLambertMaterial({
|
|
38
|
+
color: 0xff00ff,
|
|
39
|
+
emissive: 0xff00ff,
|
|
40
|
+
});
|
|
33
41
|
}
|
|
34
42
|
getAlreadyCalculatedFixture(fixtures, fixtureIndex) {
|
|
35
43
|
// Has this fixture already been calculated (same universe and dmx start address as a fixture before)
|
|
@@ -453,6 +461,10 @@ export class PreviewService {
|
|
|
453
461
|
this.scene.add(mesh);
|
|
454
462
|
this.stageMeshes.push(mesh);
|
|
455
463
|
}
|
|
464
|
+
ngOnDestroy() {
|
|
465
|
+
this.fixtureMaterial.dispose();
|
|
466
|
+
this.fixtureSelectedMaterial.dispose();
|
|
467
|
+
}
|
|
456
468
|
static { this.ɵfac = function PreviewService_Factory(t) { return new (t || PreviewService)(i0.ɵɵinject(i1.PresetService), i0.ɵɵinject(i2.FixtureService), i0.ɵɵinject(i3.SceneService), i0.ɵɵinject(i4.TimelineService), i0.ɵɵinject(i5.ProjectService)); }; }
|
|
457
469
|
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: PreviewService, factory: PreviewService.ɵfac, providedIn: 'root' }); }
|
|
458
470
|
}
|
|
@@ -462,4 +474,4 @@ export class PreviewService {
|
|
|
462
474
|
providedIn: 'root',
|
|
463
475
|
}]
|
|
464
476
|
}], () => [{ type: i1.PresetService }, { type: i2.FixtureService }, { type: i3.SceneService }, { type: i4.TimelineService }, { type: i5.ProjectService }], null); })();
|
|
465
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmV2aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBS3JELE1BQU0sT0FBTyxjQUFjO0lBWXpCLFlBQ1UsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFKOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FB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b3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBFZmZlY3RDdXJ2ZSB9IGZyb20gJy4uL21vZGVscy9lZmZlY3QtY3VydmUnO1xuaW1wb3J0IHsgRml4dHVyZUNhcGFiaWxpdHlUeXBlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2FwYWJpbGl0eSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2hhbm5lbFZhbHVlIH0gZnJvbSAnLi4vbW9kZWxzL2ZpeHR1cmUtY2hhbm5lbC12YWx1ZSc7XG5pbXBvcnQgeyBQcmVzZXQgfSBmcm9tICcuLi9tb2RlbHMvcHJlc2V0JztcbmltcG9ydCB7IFByZXNldFJlZ2lvblNjZW5lIH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldC1yZWdpb24tc2NlbmUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuL2ZpeHR1cmUuc2VydmljZSc7XG5pbXBvcnQgeyBQcmVzZXRTZXJ2aWNlIH0gZnJvbSAnLi9wcmVzZXQuc2VydmljZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IFNjZW5lU2VydmljZSB9IGZyb20gJy4vc2NlbmUuc2VydmljZSc7XG5pbXBvcnQgeyBUaW1lbGluZVNlcnZpY2UgfSBmcm9tICcuL3RpbWVsaW5lLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUHJldmlld1NlcnZpY2Uge1xuICBwdWJsaWMgZG9VcGRhdGVGaXh0dXJlU2V0dXA6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyBzY2VuZTogVEhSRUUuU2NlbmU7XG5cbiAgcHJpdmF0ZSBzdGFnZU1lc2hlczogVEhSRUUuTWVzaFtdID0gW107XG4gIHByaXZhdGUgc3RhZ2VNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7XG4gICAgY29sb3I6IDB4MGQwZDBkLFxuICAgIC8vIHJvdWdobmVzczogMC41LFxuICAgIC8vIG1ldGFsbmVzczogMC41LFxuICB9KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge31cblxuICBwcml2YXRlIGdldEFscmVhZHlDYWxjdWxhdGVkRml4dHVyZShmaXh0dXJlczogQ2FjaGVkRml4dHVyZVtdLCBmaXh0dXJlSW5kZXg6IG51bWJlcik6IENhY2hlZEZpeHR1cmUge1xuICAgIC8vIEhhcyB0aGlzIGZpeHR1cmUgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgKHNhbWUgdW5pdmVyc2UgYW5kIGRteCBzdGFydCBhZGRyZXNzIGFzIGEgZml4dHVyZSBiZWZvcmUpXG4gICAgLy8gLS0+IHJldHVybiBpdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlID0gZml4dHVyZXNbaV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgJiZcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhGaXJzdENoYW5uZWxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlZEZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVzZXRzKHRpbWVNaWxsaXM6IG51bWJlcik6IFByZXNldFJlZ2lvblNjZW5lW10ge1xuICAgIC8vIEdldCByZWxldmFudCBwcmVzZXRzIGluIGNvcnJlY3Qgb3JkZXIgdG8gcHJvY2VzcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc2NlbmUsIGlmIGF2YWlsYWJsZVxuICAgIGxldCBwcmVzZXRzOiBQcmVzZXRSZWdpb25TY2VuZVtdID0gW107XG5cbiAgICBpZiAodGhpcy50aW1lbGluZVNlcnZpY2UucGxheVN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIC8vIE9ubHkgdXNlIGFjdGl2ZSBwcmVzZXRzIGluIGN1cnJlbnQgcmVnaW9uc1xuICAgICAgcHJlc2V0cyA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLmdldFByZXNldHNJblRpbWUodGltZU1pbGxpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCkge1xuICAgICAgICAvLyBPbmx5IHByZXZpZXcgdGhlIHNlbGVjdGVkIHByZXNldFxuICAgICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByZXZpZXcgdGhlIHNlbGVjdGVkIHNjZW5lc1xuICAgICAgICBmb3IgKGxldCBzY2VuZUluZGV4ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNjZW5lcy5sZW5ndGggLSAxOyBzY2VuZUluZGV4ID49IDA7IHNjZW5lSW5kZXgtLSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2NlbmUgb2YgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMpIHtcbiAgICAgICAgICAgIGlmIChzY2VuZS51dWlkID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2NlbmVzW3NjZW5lSW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcHJlc2V0SW5kZXggPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGggLSAxOyBwcmVzZXRJbmRleCA+PSAwOyBwcmVzZXRJbmRleC0tKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcmVzZXRVdWlkIG9mIHNjZW5lLnByZXNldFV1aWRzKSB7XG4gICAgICAgICAgICAgICAgICAvLyBMb29wIG92ZXIgdGhlIHByZXNldHMgaW4gdGhlIHByZXNldCBzZXJ2aWNlIHRvIHJldGFpbiB0aGUgcHJlc2V0IG9yZGVyXG4gICAgICAgICAgICAgICAgICBpZiAocHJlc2V0VXVpZCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbcHJlc2V0SW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1twcmVzZXRJbmRleF0sIHVuZGVmaW5lZCwgc2NlbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXNldHM7XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZShcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBjaGFubmVsVmFsdWU6IEZpeHR1cmVDaGFubmVsVmFsdWUsXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMFxuICApIHtcbiAgICBsZXQgbmV3VmFsdWU6IG51bWJlciA9IGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICBsZXQgZXhpc3RpbmdWYWx1ZTogbnVtYmVyID0gZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGludGVuc2l0eVBlcmNlbnRhZ2UgPCAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIG1peCBhIHBvc3NpYmx5IGV4aXN0aW5nIHZhbHVlIChvciB0aGUgZGVmYXVsdCB2YWx1ZSAwKSB3aXRoIHRoZSBuZXcgdmFsdWUgKGZhZGluZylcblxuICAgICAgLy8gR2V0IHRoZSBleGlzdGVudCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eVxuICAgICAgZm9yIChjb25zdCBleGlzdGluZ0NoYW5uZWxWYWx1ZSBvZiBleGlzdGluZ0NoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXN0aW5nVmFsdWUgPSBleGlzdGluZ0NoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNaXggdGhlIGV4aXN0aW5nIHZhbHVlIHdpdGggdGhlIG5ldyB2YWx1ZVxuICAgICAgbmV3VmFsdWUgPSBleGlzdGluZ1ZhbHVlICogKDEgLSBpbnRlbnNpdHlQZXJjZW50YWdlKSArIG5ld1ZhbHVlICogaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGV4aXN0ZW50IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSAmJlxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZFxuICAgICAgKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3IHZhbHVlXG4gICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZml4dHVyZSBpbmRleCBpbnNpZGUgdGhlIHBhc3NlZCBwcmVzZXQgKHVzZWQgZm9yIGNoYXNpbmcpXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUluZGV4KHByZXNldDogUHJlc2V0LCBmaXh0dXJlVXVpZDogc3RyaW5nLCBwaXhlbEtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleTogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LCBmaXh0dXJlVXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAvLyBmaXh0dXJlIGlzIG5vdCBpbiBwcmVzZXRcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTG9vcCBvdmVyIHRoZSBnbG9iYWwgZml4dHVyZXMgdG8gcmV0YWluIHRoZSBvcmRlclxuICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXNldEZpeHR1cmUgb2YgcHJlc2V0LmZpeHR1cmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVV1aWRBbmRQaXhlbEtleUVxdWFscyhcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCxcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLnBpeGVsS2V5LFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlVXVpZEFuZFBpeGVsS2V5RXF1YWxzKHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLCBmaXh0dXJlVXVpZCwgcHJvamVjdEZpeHR1cmUucGl4ZWxLZXksIHBpeGVsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQpO1xuICAgICAgICAgIGNvbnN0IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkID0ge1xuICAgICAgICAgICAgZmlyc3REbXhDaGFubmVsOiBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCxcbiAgICAgICAgICAgIHBpeGVsS2V5OiBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gY291bnRlZEZpcnN0RG14Q2hhbm5lbFBpeGVsS2V5LnNvbWUoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgaXRlbS5maXJzdERteENoYW5uZWwgPT09IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkLmZpcnN0RG14Q2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKCFpdGVtLnBpeGVsS2V5ICYmICFmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZC5waXhlbEtleSkgfHwgaXRlbS5waXhlbEtleSA9PT0gZmlyc3REbXhDaGFubmVsQW5kRml4dHVyZVV1aWQucGl4ZWxLZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGRvbid0IGNvdW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIGNoYW5uZWwgYXMgYWxyZWFkeSBjb3VudGVkIG9uZXNcbiAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleS5wdXNoKGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldFByZXNldEludGVuc2l0eShwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLCB0aW1lTWlsbGlzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFdoZW4gZmFkaW5nIGlzIGluIHByb2dyZXNzIChvbiBwcmVzZXQgb3Igc2NlbmUtbGV2ZWwpLCB0aGUgY3VycmVudCBwcmVzZXQgZG9lcyBub3RcbiAgICAvLyBmdWxseSBjb3ZlciB1bmRlcmx5aW5nIHZhbHVlcy5cbiAgICAvLyAtPiAwID0gbm8gY292ZXJpbmcgYXQgYWxsLCAxID0gZnVsbHkgY292ZXIgKG5vIGZhZGluZylcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gMTtcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldCA9IDE7XG4gICAgbGV0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSAxO1xuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnNjZW5lKSB7XG4gICAgICAvLyBGYWRlIG91dCBpcyBzdHJvbmdlciB0aGFuIGZhZGUgaW4gKGlmIHRoZXkgb3ZlcmxhcClcblxuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3Igc2NlbmUgZmFkaW5nXG4gICAgICBjb25zdCBzY2VuZVN0YXJ0TWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVJblByZSA/IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgLSBwcmVzZXQuc2NlbmUuZmFkZUluTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcztcbiAgICAgIGNvbnN0IHNjZW5lRW5kTWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVPdXRQb3N0ID8gcHJlc2V0LnJlZ2lvbi5lbmRNaWxsaXMgKyBwcmVzZXQuc2NlbmUuZmFkZU91dE1pbGxpcyA6IHByZXNldC5yZWdpb24uZW5kTWlsbGlzO1xuXG4gICAgICBpZiAodGltZU1pbGxpcyA+IHNjZW5lRW5kTWlsbGlzIC0gcHJlc2V0LnNjZW5lLmZhZGVPdXRNaWxsaXMgJiYgdGltZU1pbGxpcyA8IHNjZW5lRW5kTWlsbGlzKSB7XG4gICAgICAgIC8vIFNjZW5lIGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlU2NlbmUgPSAoc2NlbmVFbmRNaWxsaXMgLSB0aW1lTWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgc2NlbmVTdGFydE1pbGxpcyArIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXMgJiYgdGltZU1pbGxpcyA+IHNjZW5lU3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gU2NlbmUgZmFkZXMgaW5cbiAgICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gKHRpbWVNaWxsaXMgLSBzY2VuZVN0YXJ0TWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnByZXNldCkge1xuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3IgcHJlc2V0IGZhZGluZ1xuICAgICAgbGV0IHByZXNldFN0YXJ0TWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5zdGFydE1pbGxpcyA9PT0gdW5kZWZpbmVkID8gcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyA6IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LnN0YXJ0TWlsbGlzO1xuXG4gICAgICBsZXQgcHJlc2V0RW5kTWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5lbmRNaWxsaXMgPT09IHVuZGVmaW5lZCA/IHByZXNldC5yZWdpb24uZW5kTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyArIHByZXNldC5wcmVzZXQuZW5kTWlsbGlzO1xuXG4gICAgICAvLyBleHRlbmQgdGhlIHJ1bm5pbmcgdGltZSwgaWYgZmFkaW5nIGlzIGRvbmUgb3V0c2lkZSB0aGUgYm91bmRhcmllc1xuICAgICAgcHJlc2V0U3RhcnRNaWxsaXMgLT0gcHJlc2V0LnByZXNldC5mYWRlSW5QcmUgPyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyA6IDA7XG4gICAgICBwcmVzZXRFbmRNaWxsaXMgKz0gcHJlc2V0LnByZXNldC5mYWRlT3V0UG9zdCA/IHByZXNldC5wcmVzZXQuZmFkZU91dE1pbGxpcyA6IDA7XG5cbiAgICAgIGlmICh0aW1lTWlsbGlzID4gcHJlc2V0RW5kTWlsbGlzIC0gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzICYmIHRpbWVNaWxsaXMgPCBwcmVzZXRFbmRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlUHJlc2V0ID0gKHByZXNldEVuZE1pbGxpcyAtIHRpbWVNaWxsaXMpIC8gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgcHJlc2V0U3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyAmJiB0aW1lTWlsbGlzID4gcHJlc2V0U3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIGluXG4gICAgICAgIGludGVuc2l0eVBlcmNlbnRhZ2VQcmVzZXQgPSAodGltZU1pbGxpcyAtIHByZXNldFN0YXJ0TWlsbGlzKSAvIHByZXNldC5wcmVzZXQuZmFkZUluTWlsbGlzO1xuICAgICAgfVxuXG4gICAgICBpbnRlbnNpdHlQZXJjZW50YWdlID0gaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lICogaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgbWl4Q2FwYWJpbGl0eVZhbHVlcyhcbiAgICBwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLFxuICAgIGNhY2hlZEZpeHR1cmU6IENhY2hlZEZpeHR1cmUsXG4gICAgdmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyXG4gICkge1xuICAgIGxldCBoYXNDb2xvciA9IGZhbHNlO1xuXG4gICAgLy8gbWl4IHRoZSBwcmVzZXQgY2FwYWJpbGl0eSB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldENhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQucHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsQ2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUud2hlZWwsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkud2hlZWxOYW1lLFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICAgICAgICBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGNhcGFiaWxpdGllcyBtYXRjaCAtPiBhcHBseSB0aGUgdmFsdWUsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkgfHxcbiAgICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpICYmXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA+PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSBhbmQgY29sb3JJbnRlbnNpdHkgKGRpbW1lciBhbmQgY29sb3IpXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVQZXJjZW50YWdlID0gcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gYnJpZ2h0bmVzcyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhcGFiaWxpdHkgaW4gdGhpcyBjaGFubmVsXG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIHZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBtb3JlIHRoYW4gb25lIGNhcGFiaWxpdHkgaW4gdGhlIGNoYW5uZWxcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3MgPT09ICdvZmYnICYmIHZhbHVlUGVyY2VudGFnZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2hhbm5lbENhcGFiaWxpdHkuY2VudGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuYnJpZ2h0bmVzc1N0YXJ0ID09PSAnZGFyaycgfHwgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5icmlnaHRuZXNzU3RhcnQgPT09ICdvZmYnKSAmJlxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3NFbmQgPT09ICdicmlnaHQnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgKiB2YWx1ZVBlcmNlbnRhZ2UgK1xuICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuIHx8IHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdCkgJiZcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlID49IDBcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgMSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5XaGVlbFNsb3QgJiZcbiAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIgPT09IHByZXNldENhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIHdoZWVsIHNsb3QgKGNvbG9yLCBnb2JvLCBldGMuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjaGFubmVsQ2FwYWJpbGl0eS5jZW50ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2ssIHdoZXRoZXIgd2UganVzdCBzZXQgYSBjb2xvciB3aGVlbCB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS53aGVlbElzQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHByb3hpbWF0ZSB0aGUgY29sb3IgZnJvbSBhIGNvbG9yIG9yIGEgZGlmZmVyZW50IGNvbG9yIHdoZWVsLCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCFoYXNDb2xvciAmJiBjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldEFwcHJveGltYXRlZENvbG9yV2hlZWxDYXBhYmlsaXR5KHByZXNldC5wcmVzZXQsIGNhY2hlZENoYW5uZWwpO1xuXG4gICAgICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIGFuIGFwcHJveGltYXRlZCBjb2xvciBpbiB0aGUgYXZhaWxhYmxlIHdoZWVsIGNoYW5uZWxcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYXBhYmlsaXR5LmNlbnRlclZhbHVlO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZXMoXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICAvLyBtaXggdGhlIHByZXNldCBjaGFubmVsIHZhbHVlc1xuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIHByZXNldC5wcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCAmJiBjYWNoZWRDaGFubmVsLm5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBjaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWl4RWZmZWN0cyhcbiAgICB0aW1lTWlsbGlzOiBudW1iZXIsXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICBmb3IgKGNvbnN0IGVmZmVjdCBvZiBwcmVzZXQucHJlc2V0LmVmZmVjdHMpIHtcbiAgICAgIGlmIChlZmZlY3QudmlzaWJsZSkge1xuICAgICAgICAvLyBFZmZlY3RDdXJ2ZVxuICAgICAgICBpZiAoZWZmZWN0IGluc3RhbmNlb2YgRWZmZWN0Q3VydmUpIHtcbiAgICAgICAgICBjb25zdCBlZmZlY3RDdXJ2ZSA9IGVmZmVjdCBhcyBFZmZlY3RDdXJ2ZTtcblxuICAgICAgICAgIC8vIGNhcGFiaWxpdGllc1xuICAgICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBlZmZlY3RDdXJ2ZS5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbENhcGFiaWxpdHkgb2YgY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBlZmZlY3RDdXJ2ZS5nZXRWYWx1ZUF0TWlsbGlzKHRpbWVNaWxsaXMsIGZpeHR1cmVJbmRleCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoYW5uZWxzXG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsUHJvZmlsZSBvZiBlZmZlY3RDdXJ2ZS5jaGFubmVscykge1xuICAgICAgICAgICAgaWYgKGNoYW5uZWxQcm9maWxlLnByb2ZpbGVVdWlkID09PSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZCkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbFByb2ZpbGUuY2hhbm5lbHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwubmFtZSA9PT0gY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIGVmZmVjdEN1cnZlLmdldFZhbHVlQXRNaWxsaXModGltZU1pbGxpcywgZml4dHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIG90aGVyIGVmZmVjdHMgKFBhblRpbHQsIGV0Yy4pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIGFsbCBmaXh0dXJlIHV1aWRzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFubmVsIHZhbHVlc1xuICBwdWJsaWMgZ2V0Q2hhbm5lbFZhbHVlcyh0aW1lTWlsbGlzOiBudW1iZXIsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBNYXA8Q2FjaGVkRml4dHVyZSwgRml4dHVyZUNoYW5uZWxWYWx1ZVtdPiB7XG4gICAgLy8gTG9vcCBvdmVyIGFsbCByZWxldmFudCBwcmVzZXRzIGFuZCBjYWxjIHRoZSBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSB0aGUgcHJlc2V0cyAoY2FwYWJpbGl0aWVzLCBjaGFubmVscyBhbmQgZWZmZWN0cylcbiAgICBjb25zdCBjYWxjdWxhdGVkRml4dHVyZXMgPSBuZXcgTWFwPENhY2hlZEZpeHR1cmUsIEZpeHR1cmVDaGFubmVsVmFsdWVbXT4oKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maXh0dXJlU2VydmljZS5jYWNoZWRGaXh0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2FjaGVkRml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXNbaV07XG5cbiAgICAgIC8vIGFsbCB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgZml4dHVyZSBjaGFubmVsc1xuICAgICAgbGV0IHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdID0gW107XG5cbiAgICAgIGNvbnN0IGFscmVhZHlDYWxjdWxhdGVkRml4dHVyZSA9IHRoaXMuZ2V0QWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXMsIGkpO1xuXG4gICAgICBpZiAoYWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKSB7XG4gICAgICAgIC8vIG9ubHkgcmVsZXZhbnQgZm9yIHRoZSBwcmV2aWV3IC0tPiByZXVzZSBhbGwgY2FsY3VsYXRlZCB2YWx1ZXNcbiAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbihbXSwgY2FsY3VsYXRlZEZpeHR1cmVzLmdldChhbHJlYWR5Q2FsY3VsYXRlZEZpeHR1cmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFwcGx5IHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYWNoZWRDaGFubmVsLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICAgICAgLy8gc2VhcmNoIGZvciB0aGlzIGZpeHR1cmUgaW4gdGhlIHByZXNldCBhbmQgZ2V0IGl0J3MgcHJlc2V0LXNwZWNpZmljIGluZGV4IChmb3IgY2hhc2luZyBlZmZlY3RzKVxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHRoaXMuZ2V0Rml4dHVyZUluZGV4KHByZXNldC5wcmVzZXQsIGNhY2hlZEZpeHR1cmUuZml4dHVyZS51dWlkLCBjYWNoZWRGaXh0dXJlLnBpeGVsS2V5KTtcblxuICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gdGhpcyBmaXh0dXJlIGlzIGFsc28gaW4gdGhlIHByZXNldCAtPiBtaXggdGhlIHJlcXVpcmVkIHZhbHVlcyAob3ZlcndyaXRlIGV4aXN0aW5nIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGlmIHNldCBtdWx0aXBsZSB0aW1lcylcbiAgICAgICAgICAgIGNvbnN0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSB0aGlzLmdldFByZXNldEludGVuc2l0eShwcmVzZXQsIHRpbWVNaWxsaXMpO1xuXG4gICAgICAgICAgICB0aGlzLm1peENhcGFiaWxpdHlWYWx1ZXMocHJlc2V0LCBjYWNoZWRGaXh0dXJlLCB2YWx1ZXMsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWVzKHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgIHRoaXMubWl4RWZmZWN0cyh0aW1lTWlsbGlzLCBmaXh0dXJlSW5kZXgsIHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGZvciBzdWJzZXF1ZW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIERNWCBhZGRyZXNzXG4gICAgICBjYWxjdWxhdGVkRml4dHVyZXMuc2V0KGNhY2hlZEZpeHR1cmUsIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGN1bGF0ZWRGaXh0dXJlcztcbiAgfVxuXG4gIHB1YmxpYyBmaXh0dXJlSXNTZWxlY3RlZCh1dWlkOiBzdHJpbmcsIHBpeGVsS2V5OiBzdHJpbmcsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LnByZXNldCwgdXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaXh0dXJlU2V0dXAoKSB7XG4gICAgdGhpcy5kb1VwZGF0ZUZpeHR1cmVTZXR1cC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTdGFnZU1lc2gobWVzaDogVEhSRUUuTWVzaCkge1xuICAgIG1lc2gucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuICAgIG1lc2guY2FzdFNoYWRvdyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0YWdlKCkge1xuICAgIGlmICghdGhpcy5zY2VuZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBnZW9tZXRyeTogYW55O1xuICAgIGxldCBtZXNoOiBhbnk7XG5cbiAgICAvLyBSZW1vdmUgb2xkIG1lc2hlcyBmcm9tIHRoZSBzY2VuZVxuICAgIGZvciAoY29uc3QgZXhpc3RpbmdNZXNoIG9mIHRoaXMuc3RhZ2VNZXNoZXMpIHtcbiAgICAgIHRoaXMuc2NlbmUucmVtb3ZlKGV4aXN0aW5nTWVzaCk7XG4gICAgICBleGlzdGluZ01lc2guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTWVzaGVzID0gW107XG5cbiAgICAvLyBHcm91bmRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDUwMDAsIDUwMDApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgbWVzaC5yb3RhdGVYKChNYXRoLlBJIC8gMTgwKSAqIC05MCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gRmxvb3JcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldCgwLCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtIC8gMiwgMCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGZyb250IGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgZnJvbnQgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIFBpbGxhciBiYWNrIGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMlxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGJhY2sgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBDZWlsaW5nXG4gICAgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlQ2VpbGluZ0hlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIDAsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSArXG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUNlaWxpbmdIZWlnaHRDbSAvIDIgK1xuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgMFxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuICB9XG59XG4iXX0=
|
|
477
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzaWduZXIvc3JjL2xpYi9zZXJ2aWNlcy9wcmV2aWV3LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7O0FBS3JELE1BQU0sT0FBTyxjQUFjO0lBVXpCLFlBQ1UsYUFBNEIsRUFDNUIsY0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsZUFBZ0MsRUFDaEMsY0FBOEI7UUFKOUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxtQkFBYyxHQUFkLGNBQWMsQ0FB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Q3JCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQzsrRUF6bkJVLGNBQWM7dUVBQWQsY0FBYyxXQUFkLGNBQWMsbUJBRmIsTUFBTTs7aUZBRVAsY0FBYztjQUgxQixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmUgfSBmcm9tICcuLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUnO1xuaW1wb3J0IHsgRWZmZWN0Q3VydmUgfSBmcm9tICcuLi9tb2RlbHMvZWZmZWN0LWN1cnZlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgUHJlc2V0IH0gZnJvbSAnLi4vbW9kZWxzL3ByZXNldCc7XG5pbXBvcnQgeyBQcmVzZXRSZWdpb25TY2VuZSB9IGZyb20gJy4uL21vZGVscy9wcmVzZXQtcmVnaW9uLXNjZW5lJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJlc2V0U2VydmljZSB9IGZyb20gJy4vcHJlc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJvamVjdFNlcnZpY2UgfSBmcm9tICcuL3Byb2plY3Quc2VydmljZSc7XG5pbXBvcnQgeyBTY2VuZVNlcnZpY2UgfSBmcm9tICcuL3NjZW5lLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGltZWxpbmVTZXJ2aWNlIH0gZnJvbSAnLi90aW1lbGluZS5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFByZXZpZXdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHVibGljIGRvVXBkYXRlRml4dHVyZVNldHVwOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3QoKTtcblxuICBwdWJsaWMgc2NlbmU6IFRIUkVFLlNjZW5lO1xuXG4gIHByaXZhdGUgc3RhZ2VNZXNoZXM6IFRIUkVFLk1lc2hbXSA9IFtdO1xuICBwcml2YXRlIHN0YWdlTWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBmaXh0dXJlTWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuICBmaXh0dXJlU2VsZWN0ZWRNYXRlcmlhbDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHByZXNldFNlcnZpY2U6IFByZXNldFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzY2VuZVNlcnZpY2U6IFNjZW5lU2VydmljZSxcbiAgICBwcml2YXRlIHRpbWVsaW5lU2VydmljZTogVGltZWxpbmVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3RhZ2VNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoU3RhbmRhcmRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHgwZDBkMGQsXG4gICAgICAvLyByb3VnaG5lc3M6IDAuNSxcbiAgICAgIC8vIG1ldGFsbmVzczogMC41LFxuICAgIH0pO1xuICAgIHRoaXMuZml4dHVyZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4MGQwZDBkLFxuICAgICAgZW1pc3NpdmU6IDB4MGQwZDBkLFxuICAgIH0pO1xuICAgIHRoaXMuZml4dHVyZVNlbGVjdGVkTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHhmZjAwZmYsXG4gICAgICBlbWlzc2l2ZTogMHhmZjAwZmYsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFscmVhZHlDYWxjdWxhdGVkRml4dHVyZShmaXh0dXJlczogQ2FjaGVkRml4dHVyZVtdLCBmaXh0dXJlSW5kZXg6IG51bWJlcik6IENhY2hlZEZpeHR1cmUge1xuICAgIC8vIEhhcyB0aGlzIGZpeHR1cmUgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgKHNhbWUgdW5pdmVyc2UgYW5kIGRteCBzdGFydCBhZGRyZXNzIGFzIGEgZml4dHVyZSBiZWZvcmUpXG4gICAgLy8gLS0+IHJldHVybiBpdFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZml4dHVyZUluZGV4OyBpKyspIHtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRGaXh0dXJlID0gZml4dHVyZXNbaV07XG5cbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhVbml2ZXJzZVV1aWQgJiZcbiAgICAgICAgY2FsY3VsYXRlZEZpeHR1cmUuZml4dHVyZS5kbXhGaXJzdENoYW5uZWwgPT09IGZpeHR1cmVzW2ZpeHR1cmVJbmRleF0uZml4dHVyZS5kbXhGaXJzdENoYW5uZWxcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FsY3VsYXRlZEZpeHR1cmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQcmVzZXRzKHRpbWVNaWxsaXM6IG51bWJlcik6IFByZXNldFJlZ2lvblNjZW5lW10ge1xuICAgIC8vIEdldCByZWxldmFudCBwcmVzZXRzIGluIGNvcnJlY3Qgb3JkZXIgdG8gcHJvY2VzcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgc2NlbmUsIGlmIGF2YWlsYWJsZVxuICAgIGxldCBwcmVzZXRzOiBQcmVzZXRSZWdpb25TY2VuZVtdID0gW107XG5cbiAgICBpZiAodGhpcy50aW1lbGluZVNlcnZpY2UucGxheVN0YXRlID09PSAncGxheWluZycpIHtcbiAgICAgIC8vIE9ubHkgdXNlIGFjdGl2ZSBwcmVzZXRzIGluIGN1cnJlbnQgcmVnaW9uc1xuICAgICAgcHJlc2V0cyA9IHRoaXMudGltZWxpbmVTZXJ2aWNlLmdldFByZXNldHNJblRpbWUodGltZU1pbGxpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJldmlld1ByZXNldCkge1xuICAgICAgICAvLyBPbmx5IHByZXZpZXcgdGhlIHNlbGVjdGVkIHByZXNldFxuICAgICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLnNlbGVjdGVkUHJlc2V0KSB7XG4gICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByZXNldFNlcnZpY2Uuc2VsZWN0ZWRQcmVzZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFByZXZpZXcgdGhlIHNlbGVjdGVkIHNjZW5lc1xuICAgICAgICBmb3IgKGxldCBzY2VuZUluZGV4ID0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnNjZW5lcy5sZW5ndGggLSAxOyBzY2VuZUluZGV4ID49IDA7IHNjZW5lSW5kZXgtLSkge1xuICAgICAgICAgIGZvciAoY29uc3Qgc2NlbmUgb2YgdGhpcy5zY2VuZVNlcnZpY2Uuc2VsZWN0ZWRTY2VuZXMpIHtcbiAgICAgICAgICAgIGlmIChzY2VuZS51dWlkID09PSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc2NlbmVzW3NjZW5lSW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgcHJlc2V0SW5kZXggPSB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0cy5sZW5ndGggLSAxOyBwcmVzZXRJbmRleCA+PSAwOyBwcmVzZXRJbmRleC0tKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwcmVzZXRVdWlkIG9mIHNjZW5lLnByZXNldFV1aWRzKSB7XG4gICAgICAgICAgICAgICAgICAvLyBMb29wIG92ZXIgdGhlIHByZXNldHMgaW4gdGhlIHByZXNldCBzZXJ2aWNlIHRvIHJldGFpbiB0aGUgcHJlc2V0IG9yZGVyXG4gICAgICAgICAgICAgICAgICBpZiAocHJlc2V0VXVpZCA9PT0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldHNbcHJlc2V0SW5kZXhdLnV1aWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJlc2V0cy5wdXNoKG5ldyBQcmVzZXRSZWdpb25TY2VuZSh0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3QucHJlc2V0c1twcmVzZXRJbmRleF0sIHVuZGVmaW5lZCwgc2NlbmUpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZXNldHM7XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZShcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSxcbiAgICBjaGFubmVsVmFsdWU6IEZpeHR1cmVDaGFubmVsVmFsdWUsXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyID0gMFxuICApIHtcbiAgICBsZXQgbmV3VmFsdWU6IG51bWJlciA9IGNoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICBsZXQgZXhpc3RpbmdWYWx1ZTogbnVtYmVyID0gZGVmYXVsdFZhbHVlO1xuXG4gICAgaWYgKGludGVuc2l0eVBlcmNlbnRhZ2UgPCAxKSB7XG4gICAgICAvLyBXZSBuZWVkIHRvIG1peCBhIHBvc3NpYmx5IGV4aXN0aW5nIHZhbHVlIChvciB0aGUgZGVmYXVsdCB2YWx1ZSAwKSB3aXRoIHRoZSBuZXcgdmFsdWUgKGZhZGluZylcblxuICAgICAgLy8gR2V0IHRoZSBleGlzdGVudCB2YWx1ZSBmb3IgdGhpcyBwcm9wZXJ0eVxuICAgICAgZm9yIChjb25zdCBleGlzdGluZ0NoYW5uZWxWYWx1ZSBvZiBleGlzdGluZ0NoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID09PSBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgJiZcbiAgICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9PT0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkXG4gICAgICAgICkge1xuICAgICAgICAgIGV4aXN0aW5nVmFsdWUgPSBleGlzdGluZ0NoYW5uZWxWYWx1ZS52YWx1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBNaXggdGhlIGV4aXN0aW5nIHZhbHVlIHdpdGggdGhlIG5ldyB2YWx1ZVxuICAgICAgbmV3VmFsdWUgPSBleGlzdGluZ1ZhbHVlICogKDEgLSBpbnRlbnNpdHlQZXJjZW50YWdlKSArIG5ld1ZhbHVlICogaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgdGhlIGV4aXN0ZW50IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKFxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0uY2hhbm5lbE5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSAmJlxuICAgICAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXNbaV0ucHJvZmlsZVV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZFxuICAgICAgKSB7XG4gICAgICAgIGV4aXN0aW5nQ2hhbm5lbFZhbHVlcy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgbmV3IHZhbHVlXG4gICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZTtcbiAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkO1xuICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICBleGlzdGluZ0NoYW5uZWxWYWx1ZXMucHVzaChmaXh0dXJlQ2hhbm5lbFZhbHVlKTtcbiAgfVxuXG4gIC8vIEdldCB0aGUgZml4dHVyZSBpbmRleCBpbnNpZGUgdGhlIHBhc3NlZCBwcmVzZXQgKHVzZWQgZm9yIGNoYXNpbmcpXG4gIHByaXZhdGUgZ2V0Rml4dHVyZUluZGV4KHByZXNldDogUHJlc2V0LCBmaXh0dXJlVXVpZDogc3RyaW5nLCBwaXhlbEtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGNvbnN0IGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleTogYW55W10gPSBbXTtcblxuICAgIGlmICghdGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LCBmaXh0dXJlVXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAvLyBmaXh0dXJlIGlzIG5vdCBpbiBwcmVzZXRcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gTG9vcCBvdmVyIHRoZSBnbG9iYWwgZml4dHVyZXMgdG8gcmV0YWluIHRoZSBvcmRlclxuICAgIGZvciAoY29uc3QgcHJvamVjdEZpeHR1cmUgb2YgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnByZXNldEZpeHR1cmVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHByZXNldEZpeHR1cmUgb2YgcHJlc2V0LmZpeHR1cmVzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLnByZXNldFNlcnZpY2UuZml4dHVyZVV1aWRBbmRQaXhlbEtleUVxdWFscyhcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5maXh0dXJlVXVpZCxcbiAgICAgICAgICAgIHByb2plY3RGaXh0dXJlLnBpeGVsS2V5LFxuICAgICAgICAgICAgcHJlc2V0Rml4dHVyZS5waXhlbEtleVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJlc2V0U2VydmljZS5maXh0dXJlVXVpZEFuZFBpeGVsS2V5RXF1YWxzKHByb2plY3RGaXh0dXJlLmZpeHR1cmVVdWlkLCBmaXh0dXJlVXVpZCwgcHJvamVjdEZpeHR1cmUucGl4ZWxLZXksIHBpeGVsS2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGZpeHR1cmUgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldEZpeHR1cmVCeVV1aWQocHJvamVjdEZpeHR1cmUuZml4dHVyZVV1aWQpO1xuICAgICAgICAgIGNvbnN0IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkID0ge1xuICAgICAgICAgICAgZmlyc3REbXhDaGFubmVsOiBmaXh0dXJlLmRteEZpcnN0Q2hhbm5lbCxcbiAgICAgICAgICAgIHBpeGVsS2V5OiBwcm9qZWN0Rml4dHVyZS5waXhlbEtleSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gY291bnRlZEZpcnN0RG14Q2hhbm5lbFBpeGVsS2V5LnNvbWUoXG4gICAgICAgICAgICAoaXRlbSkgPT5cbiAgICAgICAgICAgICAgaXRlbS5maXJzdERteENoYW5uZWwgPT09IGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkLmZpcnN0RG14Q2hhbm5lbCAmJlxuICAgICAgICAgICAgICAoKCFpdGVtLnBpeGVsS2V5ICYmICFmaXJzdERteENoYW5uZWxBbmRGaXh0dXJlVXVpZC5waXhlbEtleSkgfHwgaXRlbS5waXhlbEtleSA9PT0gZmlyc3REbXhDaGFubmVsQW5kRml4dHVyZVV1aWQucGl4ZWxLZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIGRvbid0IGNvdW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIGNoYW5uZWwgYXMgYWxyZWFkeSBjb3VudGVkIG9uZXNcbiAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgIGNvdW50ZWRGaXJzdERteENoYW5uZWxQaXhlbEtleS5wdXNoKGZpcnN0RG14Q2hhbm5lbEFuZEZpeHR1cmVVdWlkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldFByZXNldEludGVuc2l0eShwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLCB0aW1lTWlsbGlzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIC8vIFdoZW4gZmFkaW5nIGlzIGluIHByb2dyZXNzIChvbiBwcmVzZXQgb3Igc2NlbmUtbGV2ZWwpLCB0aGUgY3VycmVudCBwcmVzZXQgZG9lcyBub3RcbiAgICAvLyBmdWxseSBjb3ZlciB1bmRlcmx5aW5nIHZhbHVlcy5cbiAgICAvLyAtPiAwID0gbm8gY292ZXJpbmcgYXQgYWxsLCAxID0gZnVsbHkgY292ZXIgKG5vIGZhZGluZylcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gMTtcbiAgICBsZXQgaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldCA9IDE7XG4gICAgbGV0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSAxO1xuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnNjZW5lKSB7XG4gICAgICAvLyBGYWRlIG91dCBpcyBzdHJvbmdlciB0aGFuIGZhZGUgaW4gKGlmIHRoZXkgb3ZlcmxhcClcblxuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3Igc2NlbmUgZmFkaW5nXG4gICAgICBjb25zdCBzY2VuZVN0YXJ0TWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVJblByZSA/IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgLSBwcmVzZXQuc2NlbmUuZmFkZUluTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcztcbiAgICAgIGNvbnN0IHNjZW5lRW5kTWlsbGlzID0gcHJlc2V0LnNjZW5lLmZhZGVPdXRQb3N0ID8gcHJlc2V0LnJlZ2lvbi5lbmRNaWxsaXMgKyBwcmVzZXQuc2NlbmUuZmFkZU91dE1pbGxpcyA6IHByZXNldC5yZWdpb24uZW5kTWlsbGlzO1xuXG4gICAgICBpZiAodGltZU1pbGxpcyA+IHNjZW5lRW5kTWlsbGlzIC0gcHJlc2V0LnNjZW5lLmZhZGVPdXRNaWxsaXMgJiYgdGltZU1pbGxpcyA8IHNjZW5lRW5kTWlsbGlzKSB7XG4gICAgICAgIC8vIFNjZW5lIGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlU2NlbmUgPSAoc2NlbmVFbmRNaWxsaXMgLSB0aW1lTWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgc2NlbmVTdGFydE1pbGxpcyArIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXMgJiYgdGltZU1pbGxpcyA+IHNjZW5lU3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gU2NlbmUgZmFkZXMgaW5cbiAgICAgICAgaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lID0gKHRpbWVNaWxsaXMgLSBzY2VuZVN0YXJ0TWlsbGlzKSAvIHByZXNldC5zY2VuZS5mYWRlSW5NaWxsaXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHByZXNldC5yZWdpb24gJiYgcHJlc2V0LnByZXNldCkge1xuICAgICAgLy8gVGFrZSBhd2F5IGludGVuc2l0eSBmb3IgcHJlc2V0IGZhZGluZ1xuICAgICAgbGV0IHByZXNldFN0YXJ0TWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5zdGFydE1pbGxpcyA9PT0gdW5kZWZpbmVkID8gcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyA6IHByZXNldC5yZWdpb24uc3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LnN0YXJ0TWlsbGlzO1xuXG4gICAgICBsZXQgcHJlc2V0RW5kTWlsbGlzID1cbiAgICAgICAgcHJlc2V0LnByZXNldC5lbmRNaWxsaXMgPT09IHVuZGVmaW5lZCA/IHByZXNldC5yZWdpb24uZW5kTWlsbGlzIDogcHJlc2V0LnJlZ2lvbi5zdGFydE1pbGxpcyArIHByZXNldC5wcmVzZXQuZW5kTWlsbGlzO1xuXG4gICAgICAvLyBleHRlbmQgdGhlIHJ1bm5pbmcgdGltZSwgaWYgZmFkaW5nIGlzIGRvbmUgb3V0c2lkZSB0aGUgYm91bmRhcmllc1xuICAgICAgcHJlc2V0U3RhcnRNaWxsaXMgLT0gcHJlc2V0LnByZXNldC5mYWRlSW5QcmUgPyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyA6IDA7XG4gICAgICBwcmVzZXRFbmRNaWxsaXMgKz0gcHJlc2V0LnByZXNldC5mYWRlT3V0UG9zdCA/IHByZXNldC5wcmVzZXQuZmFkZU91dE1pbGxpcyA6IDA7XG5cbiAgICAgIGlmICh0aW1lTWlsbGlzID4gcHJlc2V0RW5kTWlsbGlzIC0gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzICYmIHRpbWVNaWxsaXMgPCBwcmVzZXRFbmRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIG91dFxuICAgICAgICBpbnRlbnNpdHlQZXJjZW50YWdlUHJlc2V0ID0gKHByZXNldEVuZE1pbGxpcyAtIHRpbWVNaWxsaXMpIC8gcHJlc2V0LnByZXNldC5mYWRlT3V0TWlsbGlzO1xuICAgICAgfSBlbHNlIGlmICh0aW1lTWlsbGlzIDwgcHJlc2V0U3RhcnRNaWxsaXMgKyBwcmVzZXQucHJlc2V0LmZhZGVJbk1pbGxpcyAmJiB0aW1lTWlsbGlzID4gcHJlc2V0U3RhcnRNaWxsaXMpIHtcbiAgICAgICAgLy8gUHJlc2V0IGZhZGVzIGluXG4gICAgICAgIGludGVuc2l0eVBlcmNlbnRhZ2VQcmVzZXQgPSAodGltZU1pbGxpcyAtIHByZXNldFN0YXJ0TWlsbGlzKSAvIHByZXNldC5wcmVzZXQuZmFkZUluTWlsbGlzO1xuICAgICAgfVxuXG4gICAgICBpbnRlbnNpdHlQZXJjZW50YWdlID0gaW50ZW5zaXR5UGVyY2VudGFnZVNjZW5lICogaW50ZW5zaXR5UGVyY2VudGFnZVByZXNldDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZW5zaXR5UGVyY2VudGFnZTtcbiAgfVxuXG4gIHByaXZhdGUgbWl4Q2FwYWJpbGl0eVZhbHVlcyhcbiAgICBwcmVzZXQ6IFByZXNldFJlZ2lvblNjZW5lLFxuICAgIGNhY2hlZEZpeHR1cmU6IENhY2hlZEZpeHR1cmUsXG4gICAgdmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sXG4gICAgaW50ZW5zaXR5UGVyY2VudGFnZTogbnVtYmVyXG4gICkge1xuICAgIGxldCBoYXNDb2xvciA9IGZhbHNlO1xuXG4gICAgLy8gbWl4IHRoZSBwcmVzZXQgY2FwYWJpbGl0eSB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IHByZXNldENhcGFiaWxpdHlWYWx1ZSBvZiBwcmVzZXQucHJlc2V0LmZpeHR1cmVDYXBhYmlsaXR5VmFsdWVzKSB7XG4gICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsQ2FwYWJpbGl0eSBvZiBjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlLFxuICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUuY29sb3IsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUud2hlZWwsXG4gICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkud2hlZWxOYW1lLFxuICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS5wcm9maWxlVXVpZCxcbiAgICAgICAgICAgICAgICBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGNhcGFiaWxpdGllcyBtYXRjaCAtPiBhcHBseSB0aGUgdmFsdWUsIGlmIHBvc3NpYmxlXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHkgfHxcbiAgICAgICAgICAgICAgICAgIHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpICYmXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZSA+PSAwXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGludGVuc2l0eSBhbmQgY29sb3JJbnRlbnNpdHkgKGRpbW1lciBhbmQgY29sb3IpXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVQZXJjZW50YWdlID0gcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAwO1xuXG4gICAgICAgICAgICAgICAgLy8gYnJpZ2h0bmVzcyBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNhcGFiaWxpdGllcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRoZSBvbmx5IGNhcGFiaWxpdHkgaW4gdGhpcyBjaGFubmVsXG4gICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIHZhbHVlUGVyY2VudGFnZTtcbiAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQ29sb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAvLyBtb3JlIHRoYW4gb25lIGNhcGFiaWxpdHkgaW4gdGhlIGNoYW5uZWxcbiAgICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3MgPT09ICdvZmYnICYmIHZhbHVlUGVyY2VudGFnZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2hhbm5lbENhcGFiaWxpdHkuY2VudGVyVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgaW50ZW5zaXR5UGVyY2VudGFnZSwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAocHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5Db2xvckludGVuc2l0eSkge1xuICAgICAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuYnJpZ2h0bmVzc1N0YXJ0ID09PSAnZGFyaycgfHwgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5icmlnaHRuZXNzU3RhcnQgPT09ICdvZmYnKSAmJlxuICAgICAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmJyaWdodG5lc3NFbmQgPT09ICdicmlnaHQnXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICAgIChjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgKiB2YWx1ZVBlcmNlbnRhZ2UgK1xuICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF07XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBoYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgKHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuIHx8IHByZXNldENhcGFiaWxpdHlWYWx1ZS50eXBlID09PSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdCkgJiZcbiAgICAgICAgICAgICAgICBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlID49IDBcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBwcmVzZXRDYXBhYmlsaXR5VmFsdWUudmFsdWVQZXJjZW50YWdlO1xuICAgICAgICAgICAgICAgIHRoaXMubWl4Q2hhbm5lbFZhbHVlKHZhbHVlcywgZml4dHVyZUNoYW5uZWxWYWx1ZSwgMSk7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgcHJlc2V0Q2FwYWJpbGl0eVZhbHVlLnR5cGUgPT09IEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5XaGVlbFNsb3QgJiZcbiAgICAgICAgICAgICAgICBjaGFubmVsQ2FwYWJpbGl0eS5jYXBhYmlsaXR5LnNsb3ROdW1iZXIgPT09IHByZXNldENhcGFiaWxpdHlWYWx1ZS5zbG90TnVtYmVyXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIHdoZWVsIHNsb3QgKGNvbG9yLCBnb2JvLCBldGMuKVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUgPSBjYWNoZWRDaGFubmVsLm5hbWU7XG4gICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjaGFubmVsQ2FwYWJpbGl0eS5jZW50ZXJWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2ssIHdoZXRoZXIgd2UganVzdCBzZXQgYSBjb2xvciB3aGVlbCB2YWx1ZVxuICAgICAgICAgICAgICAgIGlmIChjaGFubmVsQ2FwYWJpbGl0eS53aGVlbElzQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhcHByb3hpbWF0ZSB0aGUgY29sb3IgZnJvbSBhIGNvbG9yIG9yIGEgZGlmZmVyZW50IGNvbG9yIHdoZWVsLCBpZiBuZWNlc3NhcnlcbiAgICAgICAgaWYgKCFoYXNDb2xvciAmJiBjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5wcmVzZXRTZXJ2aWNlLmdldEFwcHJveGltYXRlZENvbG9yV2hlZWxDYXBhYmlsaXR5KHByZXNldC5wcmVzZXQsIGNhY2hlZENoYW5uZWwpO1xuXG4gICAgICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgICAgIC8vIHdlIGZvdW5kIGFuIGFwcHJveGltYXRlZCBjb2xvciBpbiB0aGUgYXZhaWxhYmxlIHdoZWVsIGNoYW5uZWxcbiAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUucHJvZmlsZVV1aWQgPSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZDtcbiAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYXBhYmlsaXR5LmNlbnRlclZhbHVlO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1peENoYW5uZWxWYWx1ZXMoXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICAvLyBtaXggdGhlIHByZXNldCBjaGFubmVsIHZhbHVlc1xuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICBpZiAoY2FjaGVkQ2hhbm5lbC5jaGFubmVsKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIHByZXNldC5wcmVzZXQuZml4dHVyZUNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgICAgICBpZiAoY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQgPT09IGNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCAmJiBjYWNoZWRDaGFubmVsLm5hbWUgPT09IGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBjaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWl4RWZmZWN0cyhcbiAgICB0aW1lTWlsbGlzOiBudW1iZXIsXG4gICAgZml4dHVyZUluZGV4OiBudW1iZXIsXG4gICAgcHJlc2V0OiBQcmVzZXRSZWdpb25TY2VuZSxcbiAgICBjYWNoZWRGaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdLFxuICAgIGludGVuc2l0eVBlcmNlbnRhZ2U6IG51bWJlclxuICApIHtcbiAgICBmb3IgKGNvbnN0IGVmZmVjdCBvZiBwcmVzZXQucHJlc2V0LmVmZmVjdHMpIHtcbiAgICAgIGlmIChlZmZlY3QudmlzaWJsZSkge1xuICAgICAgICAvLyBFZmZlY3RDdXJ2ZVxuICAgICAgICBpZiAoZWZmZWN0IGluc3RhbmNlb2YgRWZmZWN0Q3VydmUpIHtcbiAgICAgICAgICBjb25zdCBlZmZlY3RDdXJ2ZSA9IGVmZmVjdCBhcyBFZmZlY3RDdXJ2ZTtcblxuICAgICAgICAgIC8vIGNhcGFiaWxpdGllc1xuICAgICAgICAgIGZvciAoY29uc3QgY2FwYWJpbGl0eSBvZiBlZmZlY3RDdXJ2ZS5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiBjYWNoZWRGaXh0dXJlLmNoYW5uZWxzKSB7XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2hhbm5lbENhcGFiaWxpdHkgb2YgY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVTZXJ2aWNlLmNhcGFiaWxpdGllc01hdGNoKFxuICAgICAgICAgICAgICAgICAgICBjYXBhYmlsaXR5LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGNoYW5uZWxDYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbENhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcixcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgbnVsbFxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgZml4dHVyZUNoYW5uZWxWYWx1ZSA9IG5ldyBGaXh0dXJlQ2hhbm5lbFZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS52YWx1ZSA9IGNhY2hlZENoYW5uZWwubWF4VmFsdWUgKiBlZmZlY3RDdXJ2ZS5nZXRWYWx1ZUF0TWlsbGlzKHRpbWVNaWxsaXMsIGZpeHR1cmVJbmRleCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLm1peENoYW5uZWxWYWx1ZSh2YWx1ZXMsIGZpeHR1cmVDaGFubmVsVmFsdWUsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIGNoYW5uZWxzXG4gICAgICAgICAgZm9yIChjb25zdCBjaGFubmVsUHJvZmlsZSBvZiBlZmZlY3RDdXJ2ZS5jaGFubmVscykge1xuICAgICAgICAgICAgaWYgKGNoYW5uZWxQcm9maWxlLnByb2ZpbGVVdWlkID09PSBjYWNoZWRGaXh0dXJlLnByb2ZpbGUudXVpZCkge1xuICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgY2hhbm5lbFByb2ZpbGUuY2hhbm5lbHMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgICAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwubmFtZSA9PT0gY2hhbm5lbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXh0dXJlQ2hhbm5lbFZhbHVlID0gbmV3IEZpeHR1cmVDaGFubmVsVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSA9IGNhY2hlZENoYW5uZWwubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZml4dHVyZUNoYW5uZWxWYWx1ZS5wcm9maWxlVXVpZCA9IGNhY2hlZEZpeHR1cmUucHJvZmlsZS51dWlkO1xuICAgICAgICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnZhbHVlID0gY2FjaGVkQ2hhbm5lbC5tYXhWYWx1ZSAqIGVmZmVjdEN1cnZlLmdldFZhbHVlQXRNaWxsaXModGltZU1pbGxpcywgZml4dHVyZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPIG90aGVyIGVmZmVjdHMgKFBhblRpbHQsIGV0Yy4pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gcmV0dXJuIGFsbCBmaXh0dXJlIHV1aWRzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFubmVsIHZhbHVlc1xuICBwdWJsaWMgZ2V0Q2hhbm5lbFZhbHVlcyh0aW1lTWlsbGlzOiBudW1iZXIsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBNYXA8Q2FjaGVkRml4dHVyZSwgRml4dHVyZUNoYW5uZWxWYWx1ZVtdPiB7XG4gICAgLy8gTG9vcCBvdmVyIGFsbCByZWxldmFudCBwcmVzZXRzIGFuZCBjYWxjIHRoZSBwcm9wZXJ0eSB2YWx1ZXMgZnJvbSB0aGUgcHJlc2V0cyAoY2FwYWJpbGl0aWVzLCBjaGFubmVscyBhbmQgZWZmZWN0cylcbiAgICBjb25zdCBjYWxjdWxhdGVkRml4dHVyZXMgPSBuZXcgTWFwPENhY2hlZEZpeHR1cmUsIEZpeHR1cmVDaGFubmVsVmFsdWVbXT4oKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5maXh0dXJlU2VydmljZS5jYWNoZWRGaXh0dXJlcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY2FjaGVkRml4dHVyZSA9IHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXNbaV07XG5cbiAgICAgIC8vIGFsbCB2YWx1ZXMgb2YgdGhlIGN1cnJlbnQgZml4dHVyZSBjaGFubmVsc1xuICAgICAgbGV0IHZhbHVlczogRml4dHVyZUNoYW5uZWxWYWx1ZVtdID0gW107XG5cbiAgICAgIGNvbnN0IGFscmVhZHlDYWxjdWxhdGVkRml4dHVyZSA9IHRoaXMuZ2V0QWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKHRoaXMuZml4dHVyZVNlcnZpY2UuY2FjaGVkRml4dHVyZXMsIGkpO1xuXG4gICAgICBpZiAoYWxyZWFkeUNhbGN1bGF0ZWRGaXh0dXJlKSB7XG4gICAgICAgIC8vIG9ubHkgcmVsZXZhbnQgZm9yIHRoZSBwcmV2aWV3IC0tPiByZXVzZSBhbGwgY2FsY3VsYXRlZCB2YWx1ZXNcbiAgICAgICAgdmFsdWVzID0gT2JqZWN0LmFzc2lnbihbXSwgY2FsY3VsYXRlZEZpeHR1cmVzLmdldChhbHJlYWR5Q2FsY3VsYXRlZEZpeHR1cmUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFwcGx5IHRoZSBkZWZhdWx0IHZhbHVlc1xuICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZENoYW5uZWwgb2YgY2FjaGVkRml4dHVyZS5jaGFubmVscykge1xuICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwuZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZpeHR1cmVDaGFubmVsVmFsdWUgPSBuZXcgRml4dHVyZUNoYW5uZWxWYWx1ZSgpO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lID0gY2FjaGVkQ2hhbm5lbC5uYW1lO1xuICAgICAgICAgICAgICBmaXh0dXJlQ2hhbm5lbFZhbHVlLnByb2ZpbGVVdWlkID0gY2FjaGVkRml4dHVyZS5wcm9maWxlLnV1aWQ7XG4gICAgICAgICAgICAgIGZpeHR1cmVDaGFubmVsVmFsdWUudmFsdWUgPSBjYWNoZWRDaGFubmVsLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWUodmFsdWVzLCBmaXh0dXJlQ2hhbm5lbFZhbHVlLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICAgICAgLy8gc2VhcmNoIGZvciB0aGlzIGZpeHR1cmUgaW4gdGhlIHByZXNldCBhbmQgZ2V0IGl0J3MgcHJlc2V0LXNwZWNpZmljIGluZGV4IChmb3IgY2hhc2luZyBlZmZlY3RzKVxuICAgICAgICAgIGNvbnN0IGZpeHR1cmVJbmRleCA9IHRoaXMuZ2V0Rml4dHVyZUluZGV4KHByZXNldC5wcmVzZXQsIGNhY2hlZEZpeHR1cmUuZml4dHVyZS51dWlkLCBjYWNoZWRGaXh0dXJlLnBpeGVsS2V5KTtcblxuICAgICAgICAgIGlmIChmaXh0dXJlSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gdGhpcyBmaXh0dXJlIGlzIGFsc28gaW4gdGhlIHByZXNldCAtPiBtaXggdGhlIHJlcXVpcmVkIHZhbHVlcyAob3ZlcndyaXRlIGV4aXN0aW5nIHZhbHVlcyxcbiAgICAgICAgICAgIC8vIGlmIHNldCBtdWx0aXBsZSB0aW1lcylcbiAgICAgICAgICAgIGNvbnN0IGludGVuc2l0eVBlcmNlbnRhZ2UgPSB0aGlzLmdldFByZXNldEludGVuc2l0eShwcmVzZXQsIHRpbWVNaWxsaXMpO1xuXG4gICAgICAgICAgICB0aGlzLm1peENhcGFiaWxpdHlWYWx1ZXMocHJlc2V0LCBjYWNoZWRGaXh0dXJlLCB2YWx1ZXMsIGludGVuc2l0eVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgdGhpcy5taXhDaGFubmVsVmFsdWVzKHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICAgIHRoaXMubWl4RWZmZWN0cyh0aW1lTWlsbGlzLCBmaXh0dXJlSW5kZXgsIHByZXNldCwgY2FjaGVkRml4dHVyZSwgdmFsdWVzLCBpbnRlbnNpdHlQZXJjZW50YWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU3RvcmUgdGhlIGNhbGN1bGF0ZWQgdmFsdWVzIGZvciBzdWJzZXF1ZW50IGZpeHR1cmVzIG9uIHRoZSBzYW1lIERNWCBhZGRyZXNzXG4gICAgICBjYWxjdWxhdGVkRml4dHVyZXMuc2V0KGNhY2hlZEZpeHR1cmUsIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhbGN1bGF0ZWRGaXh0dXJlcztcbiAgfVxuXG4gIHB1YmxpYyBmaXh0dXJlSXNTZWxlY3RlZCh1dWlkOiBzdHJpbmcsIHBpeGVsS2V5OiBzdHJpbmcsIHByZXNldHM6IFByZXNldFJlZ2lvblNjZW5lW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IHByZXNldCBvZiBwcmVzZXRzKSB7XG4gICAgICBpZiAodGhpcy5wcmVzZXRTZXJ2aWNlLmdldFByZXNldEZpeHR1cmUocHJlc2V0LnByZXNldCwgdXVpZCwgcGl4ZWxLZXkpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVGaXh0dXJlU2V0dXAoKSB7XG4gICAgdGhpcy5kb1VwZGF0ZUZpeHR1cmVTZXR1cC5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIHByZXBhcmVTdGFnZU1lc2gobWVzaDogVEhSRUUuTWVzaCkge1xuICAgIG1lc2gucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuICAgIG1lc2guY2FzdFNoYWRvdyA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0YWdlKCkge1xuICAgIGlmICghdGhpcy5zY2VuZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBnZW9tZXRyeTogYW55O1xuICAgIGxldCBtZXNoOiBhbnk7XG5cbiAgICAvLyBSZW1vdmUgb2xkIG1lc2hlcyBmcm9tIHRoZSBzY2VuZVxuICAgIGZvciAoY29uc3QgZXhpc3RpbmdNZXNoIG9mIHRoaXMuc3RhZ2VNZXNoZXMpIHtcbiAgICAgIHRoaXMuc2NlbmUucmVtb3ZlKGV4aXN0aW5nTWVzaCk7XG4gICAgICBleGlzdGluZ01lc2guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0YWdlTWVzaGVzID0gW107XG5cbiAgICAvLyBHcm91bmRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDUwMDAsIDUwMDApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoMCwgMCwgMCk7XG4gICAgbWVzaC5yb3RhdGVYKChNYXRoLlBJIC8gMTgwKSAqIC05MCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gRmxvb3JcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVdpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldCgwLCB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtIC8gMiwgMCk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGZyb250IGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBQaWxsYXIgZnJvbnQgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZURlcHRoQ20gLyAyIC0gdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlUGlsbGFyV2lkdGhDbSAvIDJcbiAgICApO1xuICAgIHRoaXMuc2NlbmUuYWRkKG1lc2gpO1xuICAgIHRoaXMuc3RhZ2VNZXNoZXMucHVzaChtZXNoKTtcblxuICAgIC8vIFBpbGxhciBiYWNrIGxlZnRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlV2lkdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMixcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUhlaWdodENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUZsb29ySGVpZ2h0Q20sXG4gICAgICAtdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbSAvIDIgKyB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VQaWxsYXJXaWR0aENtIC8gMlxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuXG4gICAgLy8gUGlsbGFyIGJhY2sgcmlnaHRcbiAgICBnZW9tZXRyeSA9IG5ldyBUSFJFRS5Cb3hHZW9tZXRyeShcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20sXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSxcbiAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ21cbiAgICApO1xuICAgIG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgdGhpcy5zdGFnZU1hdGVyaWFsKTtcbiAgICB0aGlzLnByZXBhcmVTdGFnZU1lc2gobWVzaCk7XG4gICAgbWVzaC5wb3NpdGlvbi5zZXQoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtIC8gMiAtIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlSGVpZ2h0Q20gLyAyICsgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRmxvb3JIZWlnaHRDbSxcbiAgICAgIC10aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VEZXB0aENtIC8gMiArIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZVBpbGxhcldpZHRoQ20gLyAyXG4gICAgKTtcbiAgICB0aGlzLnNjZW5lLmFkZChtZXNoKTtcbiAgICB0aGlzLnN0YWdlTWVzaGVzLnB1c2gobWVzaCk7XG5cbiAgICAvLyBDZWlsaW5nXG4gICAgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VXaWR0aENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlQ2VpbGluZ0hlaWdodENtLFxuICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5wcm9qZWN0LnN0YWdlRGVwdGhDbVxuICAgICk7XG4gICAgbWVzaCA9IG5ldyBUSFJFRS5NZXNoKGdlb21ldHJ5LCB0aGlzLnN0YWdlTWF0ZXJpYWwpO1xuICAgIHRoaXMucHJlcGFyZVN0YWdlTWVzaChtZXNoKTtcbiAgICBtZXNoLnBvc2l0aW9uLnNldChcbiAgICAgIDAsXG4gICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VIZWlnaHRDbSArXG4gICAgICAgIHRoaXMucHJvamVjdFNlcnZpY2UucHJvamVjdC5zdGFnZUNlaWxpbmdIZWlnaHRDbSAvIDIgK1xuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLnByb2plY3Quc3RhZ2VGbG9vckhlaWdodENtLFxuICAgICAgMFxuICAgICk7XG4gICAgdGhpcy5zY2VuZS5hZGQobWVzaCk7XG4gICAgdGhpcy5zdGFnZU1lc2hlcy5wdXNoKG1lc2gpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5maXh0dXJlTWF0ZXJpYWwuZGlzcG9zZSgpO1xuICAgIHRoaXMuZml4dHVyZVNlbGVjdGVkTWF0ZXJpYWwuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
|