@esfaenza/es-table 15.2.26 → 15.2.28

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.
@@ -495,8 +495,12 @@ export class EsTableComponent {
495
495
  registerOnTouched(fn) { }
496
496
  /** @ignore */
497
497
  changed(clearItems = false) {
498
- if (clearItems && this.viewMode)
499
- this.View.items = [];
498
+ if (clearItems && this.viewMode) {
499
+ if (!this.ItemSourceProperty)
500
+ this.View.items = [];
501
+ else
502
+ this.View[this.ItemSourceProperty] = [];
503
+ }
500
504
  this.propagateChange(this.View);
501
505
  }
502
506
  /** @ignore */
@@ -587,7 +591,7 @@ export class EsTableComponent {
587
591
  }
588
592
  // La paginazione devo farla solamente quando richiedo o un gruppo principale (se sono in row grouping) o se non richiedo gruppi (in tutti lgi altri casi)
589
593
  if (firstItemGroupOrNoGrouping)
590
- this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.View.page, this.View.pages || 1, this.View.items.length, this.View.itemsperpageoverride);
594
+ this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.View.page, this.View.pages || 1, (this.ItemSourceProperty ? this.View[this.ItemSourceProperty] : this.View.items).length, this.View.itemsperpageoverride);
591
595
  }
592
596
  else if (this.View && (this.View.length != null && this.View.length != undefined)) {
593
597
  this.setMode('array');
@@ -739,7 +743,7 @@ export class EsTableComponent {
739
743
  // Molte cose sono ovviamente disponibili solo in modalità View
740
744
  if ((this.viewMode || this.arrayMode) && this.UseCustomCells) {
741
745
  let view = this.viewMode ? View : null;
742
- let itemsAndGroups = this.viewMode ? [...(view.items || []), ...(view.groups || [])] : View;
746
+ let itemsAndGroups = this.viewMode ? [...((this.ItemSourceProperty ? view[this.ItemSourceProperty] : view.items) || []), ...(view.groups || [])] : View;
743
747
  let si = this.viewMode ? view.selection : this.arraymodeSelection;
744
748
  // N.B: Rispettare l'ordine di queste 3 macrocategorie è VITALE
745
749
  // ************************************* Sistemazioni di TH, TD, e visibilità varie *************************************
@@ -796,7 +800,7 @@ export class EsTableComponent {
796
800
  }
797
801
  else if ((this.viewMode || this.arrayMode) && !this.UseCustomCells) {
798
802
  // Riallineo le info di selezione degli elementi della View
799
- let items = this.viewMode ? View.items : View;
803
+ let items = this.viewMode ? (this.ItemSourceProperty ? View[this.ItemSourceProperty] : View.items) : View;
800
804
  let si = this.viewMode ? View.selection : this.arraymodeSelection;
801
805
  this.selection_H.evaluateSelection(items, si);
802
806
  }
@@ -1847,4 +1851,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
1847
1851
  }] } });
1848
1852
  export class EsTdReference {
1849
1853
  }
1850
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUNILFNBQVMsRUFBRSxlQUFlLEVBQWdDLHVCQUF1QixFQUFFLEtBQUssRUFDeEYsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsRUFBYyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFlLE1BQU0sRUFDOUksTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNOUQsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQU0vRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM1RSxPQUFP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Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcsU0FBUztzQkFBakIsS0FBSztnQkFFRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVHLE1BQU07c0JBQWQsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsc0JBQXNCO3NCQUE5QixLQUFLO2dCQUVHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUcscUJBQXFCO3NCQUE3QixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBV0csZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBRUcsU0FBUztzQkFBbEIsTUFBTTtnQkFFRyxjQUFjO3NCQUF2QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdrRCxnQkFBZ0I7c0JBQXhFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVDLGNBQWM7c0JBQTlELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVL0IscUJBQXFCO3NCQUE3QixLQUFLOztBQTJoRFYsTUFBTSxPQUFPLGFBQWE7Q0FJekIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIElucHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIENvbnRlbnRDaGlsZCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLCBPcHRpb25hbCwgU2VsZiwgVGVtcGxhdGVSZWYsIEluamVjdCwgVHlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UsIEV4cG9ydFNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlLCBEYXRlU2VydmljZSwgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ0Blc2ZhZW56YS9leHRlbnNpb25zJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0Blc2ZhZW56YS9sb2NhbGl6YXRpb25zJztcclxuaW1wb3J0IHsgUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnQGVzZmFlbnphL3ByZWZlcmVuY2VzJztcclxuXHJcbi8vIFBsdWdpbnNcclxuaW1wb3J0IHsgQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICdAZXNmYWVuemEvbmd4LWNvbnRleHRtZW51JztcclxuXHJcbi8vIE1vZGVsbGkgLyBUaXBpXHJcbmltcG9ydCB7IEFwcFNlYXJjaCB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2hcIjtcclxuaW1wb3J0IHsgQXBwT3JkZXJpbmcgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwT3JkZXJpbmdcIjtcclxuaW1wb3J0IHsgRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uXCI7XHJcbmltcG9ydCB7IENvcm5lck1lbnVPcHRpb24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9Db3JuZXJNZW51T3B0aW9uXCI7XHJcbmltcG9ydCB7IEVzVGFibGVPcGVyYXRpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvRXNUYWJsZU9wZXJhdGlvbkRlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgRXNUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0VzVGFibGVDb2x1bW5cIjtcclxuaW1wb3J0IHsgR3JvdXBQYWdlciB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0dyb3VwUGFnZXJcIjtcclxuaW1wb3J0IHsgR3JvdXBSb3V0ZUZyYWdtZW50IH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvR3JvdXBSb3V0ZUZyYWdtZW50XCI7XHJcbmltcG9ydCB7IFRoRWxlbWVudCB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL1RoRWxlbWVudFwiO1xyXG5pbXBvcnQgeyBQYWdlckluZm9zIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvUGFnZXJJbmZvc1wiO1xyXG5pbXBvcnQgeyBUaEdyb3VwIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvVGhHcm91cFwiO1xyXG5pbXBvcnQgeyBUZEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9UZEVsZW1lbnRcIjtcclxuaW1wb3J0IHsgSXRlbXNTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9JdGVtc1NlbGVjdGlvbic7XHJcbmltcG9ydCB7IEdyb3VwT3JBZ2dyZWdhdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9Hcm91cE9yQWdncmVnYXRpb25cIjtcclxuaW1wb3J0IHsgR3JvdXBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvR3JvdXBGaWx0ZXJcIjtcclxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvR3JvdXBcIjtcclxuaW1wb3J0IHsgRXNUYWJsZU1vZGVsQ2hhbmdlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2V4dGVybmFscy9Fc1RhYmxlTW9kZWxDaGFuZ2UnO1xyXG5pbXBvcnQgeyBJdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2V4dGVybmFscy9JdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlJztcclxuaW1wb3J0IHsgRXNUYWJsZURlZmF1bHRhYmxlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2NvbmZpZ3VyYXRpb24vRXNUYWJsZURlZmF1bHRhYmxlJztcclxuXHJcbi8vIENvbXBvbmVudGkgZSBMb2NhbGl6emF6aW9uZVxyXG5pbXBvcnQgeyBFc1RkIH0gZnJvbSAnLi4vZXMtdGQvZXNfdGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXNUZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUaERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGguZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUZEVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGRfZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRoVGRQcm92aWRlciB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGhfdGRfcHJvdmlkZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUYWJsZUxvYyB9IGZyb20gJy4vZXNfdGFibGUuY29tcG9uZW50LmxvYyc7XHJcblxyXG4vLyBUb2tlbnNcclxuaW1wb3J0IHsgRVNUX0RFRkFVTFRTIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IEV4cG9ydEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9FeHBvcnRIYW5kbGVyXCI7XHJcbmltcG9ydCB7IENvbHVtbk1ldGFkYXRhSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL0NvbHVtbk1ldGFkYXRhSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9EeW5hbWljTW9kZUhhbmRsZXJcIjtcclxuaW1wb3J0IHsgSGllcmFyY2h5TW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9IaWVyYXJjaHlNb2RlSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBJdGVtc0hhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9JdGVtc0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgUmVwb3J0TW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9SZXBvcnRNb2RlSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBSb3dHcm91cGluZ0hhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9Sb3dHcm91cGluZ0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgU2VsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1NlbGVjdGlvbkhhbmRsZXJcIjtcclxuaW1wb3J0IHsgVXRpbGl0aWVzSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1V0aWxpdGllc0hhbmRsZXJcIjtcclxuXHJcbi8vIFNlcnZpY2VcclxuaW1wb3J0IHsgQ29weVBhc3RlRGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL0NvcHlQYXN0ZURldGVjdG9yJztcclxuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS9Mb2dnZXInO1xyXG5cclxuLy8gUnhqc1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBjaGUgcGVybWV0dGUgZGkgcmFwcHJlc2VudGFyZSB1bmEgZ3JpZ2xpYSBkaSB2YWxvcmkgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2VzLXRhYmxlJyxcclxuICAgIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBFc1RhYmxlTG9jIH1dLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZXNfdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lc190YWJsZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVzVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcclxuXHJcbiAgICAvLyBDb21wb25lbnRpIHBlciBsYSBnZXN0aW9uZSBkZWxsZSB2YXJpZSBmdW56aW9uYWxpdMOgIGRlbGwnZXMtdGFibGVcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBleHBvcnRfSDogRXhwb3J0SGFuZGxlcjtcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBjb2x1bW5NZXRhZGF0YV9IOiBDb2x1bW5NZXRhZGF0YUhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgZHluYW1pY01vZGVfSDogRHluYW1pY01vZGVIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIGhpZXJhcmNoeU1vZGVfSDogSGllcmFyY2h5TW9kZUhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgaXRlbXNfSDogSXRlbXNIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIHJlcG9ydE1vZGVfSDogUmVwb3J0TW9kZUhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgcm93R3JvdXBpbmdfSDogUm93R3JvdXBpbmdIYW5kbGVyXHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgc2VsZWN0aW9uX0g6IFNlbGVjdGlvbkhhbmRsZXI7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlcnMgcGVyIGdsaSBldmVudGkgZGkgY29waWEgZSBpbmNvbGxhXHJcbiAgICAvKiogQGlnbm9yZSAqLyBwcml2YXRlIGNvcHlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAgIC8qKiBAaWdub3JlICovIHByaXZhdGUgcGFzdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwcmVmU2VydmljZTogUHJlZmVyZW5jZXNTZXJ2aWNlLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRVNUX0RFRkFVTFRTKSBwcml2YXRlIGRlYWZ1bHRzOiBFc1RhYmxlRGVmYXVsdGFibGUsXHJcbiAgICAgICAgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgdXRpbGl0aWVzX0g6IFV0aWxpdGllc0hhbmRsZXIsXHJcbiAgICAgICAgcHVibGljIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZXhwRXh0czogRXhwb3J0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGF0ZUV4dHM6IERhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbXNnRXh0czogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjb3B5UGFzdGVEZXRlY3RvcjogQ29weVBhc3RlRGV0ZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBjbGlwYm9hcmRTZXJ2aWNlOiBDbGlwYm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIpIHtcclxuXHJcbiAgICAgICAgLy8gQ29waWEgZSBpbmNvbGxhIHNpIGVmZmV0dHVhbm8gc29sbyBzZSBsYSB0YWJlbGxhIGF0dHVhbGUgw6ggdW5pdm9jYW1lbnRlIHNlbGV6aW9uYXRhXHJcbiAgICAgICAgdGhpcy5jb3B5U3Vic2NyaXB0aW9uID0gdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5PbkNvcHkuc3Vic2NyaWJlKCgpID0+IHsgaWYgKHRoaXMuY29weVBhc3RlRGV0ZWN0b3IuQWN0aXZlRXN0UmVmZXJlbmNlID09IHRoaXMpIHRoaXMuaGFuZGxlQ29weSgpOyB9KTtcclxuICAgICAgICB0aGlzLnBhc3RlU3Vic2NyaXB0aW9uID0gdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5PblBhc3RlLnN1YnNjcmliZSgoKSA9PiB7IGlmICh0aGlzLmNvcHlQYXN0ZURldGVjdG9yLkFjdGl2ZUVzdFJlZmVyZW5jZSA9PSB0aGlzKSB0aGlzLmhhbmRsZVBhc3RlKCk7IH0pO1xyXG5cclxuICAgICAgICB0aGlzLmV4cG9ydF9IID0gbmV3IEV4cG9ydEhhbmRsZXIodGhpcywgdGhpcy5leHBFeHRzLCB0aGlzLm1zZ0V4dHMsIHRoaXMudXRpRXh0cywgdGhpcy5kYXRlRXh0cyk7XHJcbiAgICAgICAgdGhpcy5yb3dHcm91cGluZ19IID0gbmV3IFJvd0dyb3VwaW5nSGFuZGxlcih0aGlzLCB0aGlzLnV0aWxpdGllc19ILCB0aGlzLmRhdGVFeHRzKTtcclxuICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0ggPSBuZXcgQ29sdW1uTWV0YWRhdGFIYW5kbGVyKHRoaXMsIHRoaXMudXRpbGl0aWVzX0gsIHRoaXMudXRpRXh0cywgdGhpcy5wcmVmU2VydmljZSwgdGhpcy5yb3dHcm91cGluZ19IKTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNNb2RlX0ggPSBuZXcgRHluYW1pY01vZGVIYW5kbGVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGllcmFyY2h5TW9kZV9IID0gbmV3IEhpZXJhcmNoeU1vZGVIYW5kbGVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaXRlbXNfSCA9IG5ldyBJdGVtc0hhbmRsZXIodGhpcywgdGhpcy51dGlsaXRpZXNfSCk7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRNb2RlX0ggPSBuZXcgUmVwb3J0TW9kZUhhbmRsZXIodGhpcywgdGhpcy51dGlsaXRpZXNfSCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25fSCA9IG5ldyBTZWxlY3Rpb25IYW5kbGVyKHRoaXMsIHRoaXMucm93R3JvdXBpbmdfSCk7XHJcblxyXG4gICAgICAgIGlmIChuZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogU3ViamVjdCB1dGlsaXp6YXRvIGludGVybmFtZW50ZSBsYXRvIEVzVGFibGUgcGVyIGNhdXNhcmUgaWwgRm9jdXMgbGF0byBjb21wb25lbnRlIGRpIElucHV0ICovXHJcbiAgICBwdWJsaWMgRm9jdXNTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxyXG4gICAgLyoqIFRpbWVyIGNoZSB2ZXJyw6AgaW1wb3N0YXRvIGEgKipkb3VibGVDbGlja0J1ZmZlck1zKiogcGVyIGNhcGlyZSBzZSDDqCBzdGF0byBlZmZldHR1YXRvIHVuIGNsaWNrIHNpbmdvbG8gbyB1biBkb3VibGVjbGljayAqL1xyXG4gICAgcHJpdmF0ZSBjZWxsRGJDbGlja1RpbWVyOiBhbnk7XHJcbiAgICAvKiogU2UgdmVuZ29ubyBlZmZldHR1YXRpIDIgY2xpY2sgYSBkaXN0YW56YSBpbmZlcmlvcmUgYSBxdWVzdGkgTWlsbGlzZWNvbmRpIHZpZW5lIGNvbnNpZGVyYXRvIHVuIGRvcHBpbyBjbGljayAqL1xyXG4gICAgcHJpdmF0ZSBkb3VibGVDbGlja0J1ZmZlck1zOiBudW1iZXIgPSAyMDA7XHJcbiAgICAvKiogVmlldyBmaW5hbGUgc3UgY3VpIGJpbmRhcnNpIGxhdG8gRnJvbnRlbmQsIGlsIHRpcG8gcHXDsiBlc3NlcmUgSUFwcFNlYXJjaDxhbnk+IChwZXIgbGEgKip2aWV3TW9kZSoqKSwgYW55W10gKHBlciBsJyoqYXJyYXlNb2RlKiopICovXHJcbiAgICBwdWJsaWMgVmlldzogYW55ID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIGRhIGN1aSBsJ2VzLXRhYmxlIG1vc3RyYSBpIHB1bHNhbnRpIGRpIHBhZ2luYXppb25lIGluIGJhc3NvIGEgZGVzdHJhICovXHJcbiAgICBwdWJsaWMgYXJyYXlQdWxzYW50aTogeyB2YWw6IG51bWJlciwgY3NzQ2xhc3M6IHN0cmluZyB9W107XHJcbiAgICAvKiogSW5kaWNhIHNlIGwnZXMtdGFibGUgZGV2ZSBtb3N0cmFyZSBpbCBjaGVjayBnbG9iYWxlIG5lbGwnaGVhZGVyIHBlciBmYXJlIGlsIFwic2VsZXppb25hIHR1dHRvXCIgKi9cclxuICAgIHB1YmxpYyBnbG9iYWxDaGVjayA9IGZhbHNlO1xyXG4gICAgLyoqIFRpZW5lIGRhIGNvbnRvIGwndWx0aW1vIGVsZW1lbnRvIHNlbGV6aW9uYXRvIGluIG1vZG8gZGEgcG90ZXIgZWZmZXR0dWFyZSBpbCBTSElGVCtDTElDSyAqL1xyXG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWQ6IGFueSA9IG51bGw7XHJcbiAgICAvKiogQ29udGVnZ2lvIGludGVybm8gcGVyIGlsIG51bWVybyBkaSBlbGVtZW50aSBzZWxlemlvbmF0aSAqL1xyXG4gICAgcHVibGljIHNlbGVjdGVkT2JqZWN0cyA9IDA7XHJcbiAgICAvKiogSW5kaWNhIHNlIMOoIHBvc3NpYmlsZSBlZmZldHR1YXJlIHVuYSBzZWxlemlvbmUgbWFzc2l2YSAqL1xyXG4gICAgcHVibGljIGNhblNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIHN0YSBnZXN0ZW5kbyB1biBJQXBwU2VhcmNoPGFueT4gKi9cclxuICAgIHB1YmxpYyB2aWV3TW9kZSA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIHN0YSBnZXN0ZW5kbyB1biBhbnlbXSAqL1xyXG4gICAgcHVibGljIGFycmF5TW9kZSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGVuaXRvcmUgZGVnbGkgZWxlbWVudGkgZGEgbGlzdGFyZSBsYXRvIGludGVyZmFjY2lhIGRvcG8gdHV0dGUgbGUgZWxhYm9yYXppb25pIGRlbCBjYXNvLFxyXG4gICAgICogZ2VuZXJhbG1lbnRlIG5vbiBzb25vIGFsdHJvIGNoZSB0dXR0aSBnbGkgb2dnZXR0aSBkYSBwcmVzZW50YXJlIGNvbiBpbiBwacO5IGwnaGFzaCBjYWxjb2xhdG8gcGVyIGlkZW50aWZpY2FyZSAxIG9nZ2V0dG8gY29uIGxhIHByb3ByaWEgcmlnYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYm91bmRTb3VyY2U6IGFueVtdID0gW107XHJcbiAgICAvKiogU3Rlc3NhIGNvc2EgZGVsbGEgKipib3VuZFNvdXJjZSoqLCB1dGlsaXp6YXRhIGNvbWUgYXBwb2dnaW8gdGVtcG9yYW5lbyBpbnRlcm5vICovXHJcbiAgICBwdWJsaWMgVE1QQm91bmRTb3VyY2U6IGFueVtdID0gW107XHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgXCJGZXR0YVwiIGRpIG9nZ2V0dGkgdXRpbGl6emF0YSBuZWxsJ2VuZGxlc3Mgc2Nyb2xsLCBvZ25pIGVsZW1lbnRvIGRpIHF1ZXN0byBhcnJheSDDqCB1biBibG9jY2hldHRvIGRpIDEwMCBlbGVtZW50aSAqL1xyXG4gICAgcHVibGljIGJvdW5kU3ViU291cmNlczogYW55W10gPSBbXTtcclxuICAgIC8qKiBAZGVwcmVjYXRlZCBRdWVzdGEgZnVuZ2UgZGEgaW5kaWNhdG9yZSBwZXIgZ2xpIHNsaWNlIGluc2VyaXRpLCBsYSBsdW5naGV6emEgZG92cmViYmUgZXNzZXJlIGNvcnJpc3BvbmRlbnRlIGEgKipib3VuZFN1YlNvdXJjZXMqKiAqL1xyXG4gICAgcHVibGljIGFkZGVkU2xpY2VzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgLyoqIFZhcmlhYmlsZSBjaGUgaWRlbnRpZmljYSBpbCB2YWxvcmUgZGVsIFwic2VsZXppb25hIFR1dHRvXCIgbmVsbGEgcGFnaW5hemlvbmUgKi9cclxuICAgIHB1YmxpYyBkZWZhdWx0QWxsUGFnZU92ZXJyaWRlID0gOTk5OTk5O1xyXG4gICAgLyoqIFNlcnZlIHBlciB0ZW5lcmUgaW4gbWVtb3JpYSBpbCBjb250ZWdnaW8gcHJlY2VkZW50ZSBlIHJlY3VwZXJhcmxvIGluIGNhc28gZGl2ZW50aSAtMiAodmVyaWZpY2FyZSBjb24gQWxlIHBlcmNow6kgbGEgbG9naWNhIGRlbCAtMikgKi9cclxuICAgIHB1YmxpYyBwcmV2aW91c0NvdW50OiBudW1iZXI7XHJcbiAgICAvKiogSW5kaWNhIHNlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBhdXRvdXBkYXRlLCBjaW/DqCB1biB0cmlnZ2VyIHRpbWUtaXp6YXRvIGluIGFsdG8gYSBkZXN0cmEgZGVsbGEgdGFiZWxsYSBjaGUgcmlwZXRlIGxlIHJpY2VyY2hlIG9nbmkgWCAqKnNlY29uZHMqKiAqL1xyXG4gICAgcHVibGljIGF1dG9VcGRhdGUgPSBmYWxzZTtcclxuICAgIC8qKiBOdW1lcm8gZGkgc2Vjb25kaSBkYSBmYXJlIHRyYXNjb3JyZXJlIGZyYSB1bmEgcmljZXJjYSBlIGwnYWx0cmEgKi9cclxuICAgIHB1YmxpYyBzZWNvbmRzID0gJzEwJztcclxuICAgIC8qKiBSaWZlcmltZW50byBhbGwnSW50ZXJ2YWwgY2hlIHZpZW5lIGdlbmVyYXRvIHNlICoqYXV0b1VwZGF0ZSoqIMOoIGltcG9zdGF0YSBhIHRydWUgaW4gbW9kbyBkYSBwb3RlcmxvIHJpcHVsaXJlICovXHJcbiAgICBwdWJsaWMgdXBkYXRlVGltZXI6IGFueTtcclxuICAgIC8qKiBJbXBvc3RhdGEgYSB0cnVlIG9nbmkgdm9sdGEgY2hlIHZpZW5lIGF2dmlhdGEgdW5hIHJpY2VyY2EsIGUgYSBmYWxzZSBvZ25pIHZvbHRhIGNoZSB1biBudW92byB2YWxvcmUgdmllbmUgcmljZXZ1dG8gKi9cclxuICAgIHB1YmxpYyByZXNlYXJjaEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dURHMqKiAqL1xyXG4gICAgcHVibGljIFRNUFJvd1REczogeyBbY29udGV4dDogc3RyaW5nXTogVGRFbGVtZW50W10gfSA9IG51bGw7XHJcbiAgICAvKiogTW9kZWxsbyByYXBwcmVzZW50YW50ZSB1biBkaXppb25hcmlvIGRpIHJpZ2hlIGRlbGxhIHRhYmVsbGEsIGNvbiBjaGlhdmUgbCdoYXNoIGUgdmFsb3JlIGxhIGxpc3RhIGRpIGNlbGxlICovXHJcbiAgICBwdWJsaWMgUm93VERzOiB7IFtjb250ZXh0OiBzdHJpbmddOiBUZEVsZW1lbnRbXSB9ID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgKipSb3dURHMqKiDDqCB1biBvZ2dldHRvIHZ1b3RvIG8gbWVubyAqL1xyXG4gICAgcHVibGljIEVtcHR5Um93VGRzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dUSHMqKiAqL1xyXG4gICAgcHVibGljIFRNUFJvd1RIczogVGhFbGVtZW50W10gPSBudWxsO1xyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGFudGUgdW4gc2luZ29sbyB0aCBkZWxsYSB0YWJlbGxhLCBnZW5lcmF0byBpbiBiYXNlIGFsbGUgY29uZmlndXJhemlvbmkgZSBhZ2xpIG9nZ2V0dGkgcmljZXZ1dGkgKi9cclxuICAgIHB1YmxpYyBSb3dUSHM6IFRoRWxlbWVudFtdID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dUaEdyb3VwcyoqICovXHJcbiAgICBwdWJsaWMgVE1QUm93VGhHcm91cHM6IFRoR3JvdXBbXVtdID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIHJhcHByZXNlbnRhbnRlIHVuIHNpbmdvbG8gaGVhZGVyIGdyb3VwIGRlbGxhIHRhYmVsbGEuIFF1ZXN0YSBsaXN0YSDDqCBnacOgIG9yZGluYXRhIGUgcHJvbnRhIHBlciBlc3NlcmUgdXRpbGl6emF0YSBpbiBuZ0ZvciAqL1xyXG4gICAgcHVibGljIFJvd1RoR3JvdXBzOiBUaEdyb3VwW11bXSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0YSBkZWkgY29udGVzdGkuIFVuIGNvbnRlc3RvIG5vbiDDqCBhbHRybyBjaGUgdW4gaGFzaCBwYXJ0aWNvbGFyZSBjYWxjb2xhdG8gc3UgdW4gb2dnZXR0byBjaGUgaWRlbnRpZmljYSB1bml2b2NhbWVudGUgdGFsZSBvZ2dldHRvLlxyXG4gICAgICpcclxuICAgICAqIE9nbnVubyBkaSBxdWVzdGkgY29udGVzdGkgcmFwcHJlc2VudGVyw6AgYSBzdWEgdm9sdGEsIHVuaXZvY2FtZW50ZSwgdW5hIHJpZ2EgYWxsJ2ludGVybm8gZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgUm93Q29udGV4dHM6IGFueVtdID0gW107XHJcbiAgICAvKiogRGlyZXR0aXZlIGRpIG9yZGluYW1lbnRvIGRlbGxlIGNvbG9ubmUgKG5vbiBvcmRpbmFtZW50byBkZWkgZGF0aSBtYSBkZWxsZSBjb2xvbm5lIGluIHNlKSAqL1xyXG4gICAgcHVibGljIE9yZGVyRGlyZWN0aXZlczogc3RyaW5nW10gPSBbXTtcclxuICAgIC8qKiBDb2RpY2UgZGVsbCd1bHRpbW8gb2dnZXR0byBzb2xlemlvbmF0byAqL1xyXG4gICAgcHVibGljIGxhc3RTZWxlY3RlZEl0ZW1JRCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNpZGUgc2UgdXRpbGl6emFyZSBvIG1lbm8gbGUgQ3VzdG9tQ2VsbHMuIEltcG9zdGFuZG9sbyBhICoqdHJ1ZSoqIGwnZXMtdGFibGUgZGl2ZW50YSBpbiBncmFkbyBkaSBnZXN0aXJlIG5hdGl2YW1lbnRlOlxyXG4gICAgICpcclxuICAgICAqIDEpIE9yZGluYW1lbnRvIGUgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZVxyXG4gICAgICpcclxuICAgICAqIDIpIE9yZGluYW1lbnRvIGRlaSBkYXRpXHJcbiAgICAgKlxyXG4gICAgICogMykgTW9kYWxpdMOgIEdlcmFyY2hpY2FcclxuICAgICAqXHJcbiAgICAgKiBlY2MuLi5cclxuICAgICAqIHZpZW5lIGRlZG90dG8gZGFsIHNpc3RlbWEgaW4gYXV0b21hdGljb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVXNlQ3VzdG9tQ2VsbHM6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIG9sdHJlIGFsbGUgY29sb25uZSBkaW5hbWljaGUgc3BlY2lmaWNoZSBkaSB1biB0aXBvIGRpIG9nZ2V0dG8gY2kgc29ubyBhbmNoZSBjb2xvbm5lIGRpbmFtaWNoZSBhZ2dpdW50ZSBkYWxsJ3V0ZW50ZVxyXG4gICAgICpcclxuICAgICAqIEVzLiB1bmEgY29sb25uYSBpbiBjdWkgbW9zdHJhcmUgc2VtcHJlIHVuIGljb25jaW5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBVc2VyRGVmaW5lZER5bmFtaWNDb2xzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGNoZSBxdWVzdG8gw6ggaWwgcHJpbW8gQmluZCBkZWxsYSB0YWJlbGxhLCB2aWVuZSBzZXR0YXRvIGEgZmFsc2Ugbm9uIGFwcGVuYSBpbCBwcmltbyBiaW5kIHZpZW5lIHRlcm1pbmF0byBjb24gc3VjY2Vzc28gKi9cclxuICAgIHB1YmxpYyBGaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgLyoqIExpc3RhIGRpIGNvbG9ubmUgY2hlIHNpIHBvc3Nvbm8gdmlzdWFsaXp6YXJlL29yZGluYXJlIGZyYSBkaSBsb3JvICovXHJcbiAgICBwdWJsaWMgQ29sdW1uc0xpc3Q6IEVzVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gICAgLyoqIFZhcmlhYmlsZSBkJ2FwcG9nZ2lvIHVzYXRhIGRhbGxhIGRpYWxvZyBkaSBzZWxlemlvbmUvbmFzY29uZGltZW50bywgcGVyIGV2aXRhcmUgZGkgZGFubmVnZ2lhcmUgKipDb2x1bW5zTGlzdCoqIGluIGNhc28gZGkgbW9kaWZpY2hlIHBvaSBhbm51bGxhdGUgKi9cclxuICAgIHB1YmxpYyBUTVBDb2x1bW5zTGlzdDogRXNUYWJsZUNvbHVtbltdID0gW107XHJcbiAgICAvKiogVmFsb3JlIGRlbCBjaGVjayBnbG9iYWxlIGRpIHZpc2liaWxpdMOgIHZhbGlkbyBwZXIgdHV0dGUgbGUgY29sb25uZSBpbiAqKkNvbHVtbnNMaXN0KiogKi9cclxuICAgIHB1YmxpYyBnbG9iYWxDb2xWaXNDaGVjayA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSB0dXR0ZSBsZSBkaXJldHRpdmUgcGVyIGdsaSBlZGl0b3IgY3VzdG9tIGRlbGxlIGNlbGxlICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKEVzVGRFZGl0b3JEaXJlY3RpdmUpIEVzVGRFZGl0b3JEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8RXNUZEVkaXRvckRpcmVjdGl2ZT47XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgdHV0dGUgbGUgbnVvdmUgZGlyZXR0aXZlICBhc3NlZ25hdGkgYSBkaXJldHRpdmEgKFBlciBsYSBtb2RhbGl0w6AgZGluYW1pY2EgZGVsbCdlcy10YWJsZSkgKi9cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRXNUZERpcmVjdGl2ZSkgRXNUZHNEaXJlY3RpdmU6IFF1ZXJ5TGlzdDxFc1RkRGlyZWN0aXZlPjtcclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSB0dXR0aSBnbGkgZXMtdGQgYXNzZWduYXRpIGEgZGlyZXR0aXZhIChQZXIgbGEgbW9kYWxpdMOgIGRpbmFtaWNhIGRlbGwnZXMtdGFibGUpICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKEVzVGhEaXJlY3RpdmUpIEVzVGhzRGlyZWN0aXZlOiBRdWVyeUxpc3Q8RXNUaERpcmVjdGl2ZT47XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgdHV0dGkgZ2xpIGVzLXRkIGUgZ2xpIGVzLXRoIGFzc2VnbmF0aSBkYSBwYXJ0ZSBkaSB1biBwcm92aWRlciAocGVyIGludGVncmFyZSBpbiBtYW5pZXJhIGRpbmFtaWNhIGkgdGggZSB0ZCBlc2lzdGVudGkpICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKFRoVGRQcm92aWRlcikgVGhUZFByb3ZpZGVyOiBRdWVyeUxpc3Q8VGhUZFByb3ZpZGVyPjtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBjb2xsZWdhcmUgdW4gcHJvdmlkZXIgc2VuemEgcGFzc2FyZSBkYWxsYSBwcm9pZXppb25lICovXHJcbiAgICBASW5wdXQoKSBFc1RoVGRQcm92aWRlcjogVGhUZFByb3ZpZGVyO1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGxlIGluZm9ybWF6aW9uaSBkZWwgYm9keSAocHVudG8gZGVsbGEgdGFiZWxsYSBkb3ZlIHZlbmdvbm8gbW9zdHJhdGUgbGUgcmlnaGUpICovXHJcbiAgICBAQ29udGVudENoaWxkKCdib2R5JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBib2R5UmVmOiBhbnk7XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgbGUgaW5mb3JtYXppb25pIGRlbGwnaGVhZGVyIChwdW50byBkZWxsYSB0YWJlbGxhIGRvdmUgdmVuZ29ubyBtb3N0cmF0ZSBsZSBpbnRlc3RhemlvbmkgZGVsbGUgcmlnaGUpICovXHJcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGhlYWRlclJlZjogYW55O1xyXG4gICAgLyoqIEBkZXByZWNhdGVkIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGxlIGluZm9ybWF6aW9uaSBzdWwgcmFnZ3J1cHBhbWVudG8gZGVnbGkgaGVhZGVyICovXHJcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXJHcm91cCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgaGVhZGVyR3JvdXBSZWY6IGFueTtcclxuICAgIC8qKiBAZGVwcmVjYXRlZCBRdWVyeSBwZXIgcmVjdXBlcmFyZSBsZSBpbmZvcm1hemlvbmkgc3VsIHJhZ2dydXBwYW1lbnRvIGRpIHNlY29uZG8gbGl2ZWxsbyBkZWdsaSBoZWFkZXIgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoJ3NlY29uZGFyeUhlYWRlckdyb3VwJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBzZWNvbmRhcnlIZWFkZXJHcm91cFJlZjogYW55O1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGlsIGNhbXBvIGRpIElucHV0IGF0dHVhbGUuIERvcG8gdW4gZG9wcGlvIGNsaWNrIGxvIGJlY2NvIGUgbG8gZm9jdXNzbyBhcHBlbmEgdGVybWluYSBsYSBjaGFuZ2UgZGV0ZWN0aW9uICovXHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgaW5wdXRGaWVsZDogRWxlbWVudFJlZjtcclxuICAgIC8qKiBPcHppb25pIGV4dHJhIGNoZSBkZXZvbm8gYXBwYXJpcmUgbmVsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEsIHJpY2hpYW1hdG8gZGFpIDMgcGFsbGluaSB2ZXJ0aWNhbGkgKi9cclxuICAgIEBJbnB1dCgpIENvcm5lck1lbnVPcHRpb25zOiBDb3JuZXJNZW51T3B0aW9uW10gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBkZXYnZXNzZXJlIHBvc3NpYmlsZSBlZmZldHR1YXJlIGlsIHJlc2l6ZSBkZWxsZSBjb2xvbm5lICovXHJcbiAgICBASW5wdXQoKSBDb2x1bW5zUmVzaXphYmxlOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgZGV2J2Vzc2VyZSBwb3NzaWJpbGUgZWZmZXR0dWFyZSBpbCBwaW5uaW5nIGRlbGxlIGNvbG9ubmUgKi9cclxuICAgIEBJbnB1dCgpIENvbHVtbnNQaW5uYWJsZTogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIGRldidlc3NlcmUgZGlzcG9uaWJpbGUgaWwgc2lzdGVtYSBkaSBhZ2dpb3JuYW1lbnRvIGF1dG9tYXRpY28gKi9cclxuICAgIEBJbnB1dCgpIEF1dG9VcGRhdGU6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBsJ2FsdGV6emEgY2FibGF0YSBjaGUgZGV2ZSBhc3N1bWVyZSBsYSB0YWJlbGxhLiBFczogXCIxMDBweFwiIHwgXCIxMDAlXCIgLi4uICAqL1xyXG4gICAgQElucHV0KCkgSGVpZ2h0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBpbCBjb2xvcmUgZGkgc2ZvbmRvIGRlbGxvIHNwYXppbyB2dW90byAobm9uIHJpY29wZXJ0byBkYSBkYXRpKS4gUGFydGljb2xhcm1lbnRlIHV0aWxlIGRhIGltcG9zdGFyZSBpbiBjYXNvIGRpICoqSGVpZ2h0KiogZGl2ZXJzbyBkYSBudWxsICAqL1xyXG4gICAgQElucHV0KCkgRW1wdHlTcGFjZUJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgZGV2J2Vzc2VyZSBsJ2VzdGFibGUgYSBnZXN0aXJlIGxhIHJpY2VyY2EsIGFuY2hlIGxhIHByaW1hLiAgKiovXHJcbiAgICBASW5wdXQoKSBFc1RhYmxlSGFuZGxlZFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBpbXBvc3RhcmUgbCdhbHRlenphIG1hc3NpbWEgZGVsbGEgdGFiZWxsYS4gU2UgbnVsbCBsYSBkaW1lbnNpb25lIHNpIGFkYXR0YSBhbCBudW1lcm8gZGkgZWxlbWVudGkgYXR0dWFsbWVudGUgaW4gdmlzdWFsaXp6YXppb25lICovXHJcbiAgICBASW5wdXQoKSBNYXhIZWlnaHQ6IG51bWJlciA9IG51bGw7XHJcbiAgICAvKiogQ2xhc3NpIGRhIGFwcGxpY2FyZSBhbCBjb250ZW5pdG9yZSBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBDb250YWluZXJDbGFzcyA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgbyBtZW5vIGwnZXhwb3J0IGluIGZvcm1hdG8gWExTWCAqL1xyXG4gICAgQElucHV0KCkgWExTWEV4cG9ydDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgbyBtZW5vIGwnZXhwb3J0IGluIGZvcm1hdG8gQ1NWICovXHJcbiAgICBASW5wdXQoKSBDU1ZFeHBvcnQgPSB0cnVlO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHZpc3VhbGl6emFyZSBvIG1lbm8gbCdvcHppb25lIGRpIHBhZ2luYXppb25lIFwiVHV0dGlcIiAqL1xyXG4gICAgQElucHV0KCkgQWxsU2VhcmNoID0gbnVsbDtcclxuICAgIC8qKiBEaW1pbnVpc2NlIGdsaSBzcGF6aSBmcmEgdW5hIGNlbGxhIGUgbCdhbHRyYSwgZSBpbnRlcm5hbWVudGUgaWwgcGFkZGluZyBkZWwgZm9udCBpbiBtb2RvIGRhIHByZXNlbnRhcmUgbW9sdGkgcGnDuSBkYXRpIGluIHVuJ3VuaWNhIHBhZ2luYSAqL1xyXG4gICAgQElucHV0KCkgSGlnaENlbGxEZW5zaXR5OiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBBYmlsaXRhIG8gbWVubyBsYSBwb3NzaWJpbGl0w6AgZGkgc2VsZXppb25hcmUgb2dnZXR0aSAqL1xyXG4gICAgQElucHV0KCkgU2VsZWN0aW9uOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBNb3N0cmEgbyBtZW5vIHVuIG1lc3NhZ2dpbyBkaSBMb2FkaW5nIGFsIHByaW1vIGNhcmljYW1lbnRvIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIFNob3dMb2FkaW5nT25Cb290c3RyYXA6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFNlIGltcG9zdGF0byBhICoqdHJ1ZSoqIGFnZ2l1bmdlIHVuYSBjb2xvbm5hIGNvbiBwdWxzYW50ZSBkaSBlbGltaW5hemlvbmUgcGVyIGVmZmV0dHVhcmUgbCdlbGltaW5hIGRlbGwnb2dnZXR0byByZWxhdGl2byAqL1xyXG4gICAgQElucHV0KCkgUmVtb3ZhbDogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25kaXppb25lIGNoZSBuYXNjb25kZSBsJ2ljb25hIGRpIGVsaW1pbmF6aW9uZSBpbnNlcml0YSBpbXBvc3RhbmRvICoqUmVtb3ZhbCoqIGEgdHJ1ZSBxdWFsb3JhIGxhIGNvbmRpemlvbmUgbm9uIHZlbmlzc2UgcmlzcGV0dGF0YVxyXG4gICAgICpcclxuICAgICAqIENvbWUgY29uZGl6aW9uZSBzaSBjb25zaWRlcmEgdW4gc2VtcGxpY2UgY2FtcG8gc3UgY3VpIGVmZmV0dHVhcmUgdW4gY29udHJvbGxvIGJvb2xlYW5vLCBjb21lIGFkIGVzZW1waW8gXCJjYW5yZW1vdmVcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBSZW1vdmFsQ29uZGl0aW9uID0gJyc7XHJcbiAgICAvKiogSW5kaWNhIHNlIGFiaWxpdGFyZSBsYSBwb3NzaWJpbGl0w6AgZGkgZXNwb3J0YXJlIGxhIHZpc3RhIGRhdGkgYXR0dWFsZSAqL1xyXG4gICAgQElucHV0KCkgRXhwb3J0OiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgcGVybWV0dGVyZSBsYSBzZWxlemlvbmUgbXVsdGlwbGEgV2luZG93cy1saWtlIGNsaWNjYW5kbyB1biBvZ2dldHRvIGUgZmFjZW5kbyBwb2kgU2hpZnQgKyBjbGljayBzdSB1biBvZ2dldHRvIHN1Y2Nlc3Npdm8gKi9cclxuICAgIEBJbnB1dCgpIFNoaWZ0Q2xpY2s6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBpbCB0ZXN0byBjaGUgdmEgYSBzb3N0aXR1aXJlIFwiT2dnZXR0aSBWaXN1YWxpenphdGlcIiBpbiBjYXNvIHNpIHN0aWEgZmFjZW5kbyBxdWFsY29zYSBkaSBjdXN0b20gKi9cclxuICAgIEBJbnB1dCgpIENvdW50TGFiZWw6IHN0cmluZyA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIG5hc2NvbmRlcmUgbyBtb3N0cmFyZSBpbCBjb21wb25lbnRlIGRpIHBhZ2luYXppb25lICovXHJcbiAgICBASW5wdXQoKSBIaWRlUGFnaW5nOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBvIG1vc3RyYXJlIGlsIGNvbnRlZ2dpbyBkZWdsaSBlbGVtZW50aSB0cm92YXRpICovXHJcbiAgICBASW5wdXQoKSBIaWRlUGFnaW5nQ291bnQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBuYXNjb25kZXJlIG8gbW9zdHJhcmUgaSBwdWxzYW50aSBkaSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgQElucHV0KCkgSGlkZVBhZ2luZ0J1dHRvbnM6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFJpZmVyaW1lbnRvIGFsIENvbnRleHRNZW51IChuZ3gtY29udGV4dG1lbnUpIGFzc29jaWF0byBhbCBjbGljayBkZXN0cm8gZGkgdW5vIG8gcGnDuSBlbGVtZW50aSBzZWxlemlvbmF0aSBuZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBDb250ZXh0TWVudTogQ29udGV4dE1lbnVDb21wb25lbnQgPSBudWxsO1xyXG4gICAgLyoqIE5vbWUgZGVsbCdlc3BvcnRhemlvbmUgZ2VuZXJhdGEgZGEgcXVlc3RhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIEV4cG9ydEZpbGVOYW1lID0gJ0V4cG9ydC5jc3YnO1xyXG4gICAgLyoqIENsYXNzZSAoSFRNTCkgZGkgZGVmYXVsdCBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBUYWJsZUNsYXNzID0gbnVsbDtcclxuICAgIC8qKiBGdW56aW9uZSBkYSB1dGlsaXp6YXJlIGluIGVzcG9ydGF6aW9uZS4gSGEgY29tZSBwYXJhbWV0cm8gdW5hIGNhbGxiYWNrIGNvbiBpIGRhdGkgY29tcGxldGkgZGEgZXNwb3J0YXJlIChkYXRvIGNoZSBkaSBkZWZhdWx0IGxhIHJpY2VyY2Egw6ggcGFnaW5hdGEpICovXHJcbiAgICBASW5wdXQoKSBFeHBvcnRGdW5jdGlvbjogKGNhbGxiYWNrIDogKGRhdGE6IGFueVtdLCB0eXBlOiBUeXBlPGFueT4pID0+IHZvaWQsIGZvcm1hdDogXCJDU1ZcIiB8IFwiWExTWFwiKSA9PiB2b2lkO1xyXG4gICAgLyoqIEluZGljYSBkaSBlc3BvcnRhcmUgc29sbyBsZSBjb2xvbm5lIGF0dHVhbG1lbnRlIHZpc2liaWxpIGRlbGxhIHZpZXcgKi9cclxuICAgIEBJbnB1dCgpIEV4cG9ydE9ubHlWaXNpYmxlQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLyoqIEBkZXByZWNhdGVkIEluZGljYSBsYSBwcmVzZW56YSBkaSByYWdncnVwcGFtZW50aSBhIGxpdmVsbG8gZGkgaGVhZGVyICovXHJcbiAgICBASW5wdXQoKSBIYXNIZWFkZXJHcm91cDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgSW5kaWNhIGxhIHByZXNlbnphIGRpIHJhZ2dydXBwYW1lbnRpIGEgbGl2ZWxsbyBkZWwgcmFnZ3J1cHBhbWVudG8gcHJlY2VkZW50ZW1lbnRlIGVzaXN0ZW50ZSwgY2hpYXJhbWVudGUgw6ggaW5zZW5zYXRhIHNlbnphICoqSGFzSGVhZGVyR3JvdXAqKiAqL1xyXG4gICAgQElucHV0KCkgSGFzU2Vjb25kYXJ5SGVhZGVyR3JvdXA6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBuYXNjb25kZXJlIGdsaSBIZWFkZXIgZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgSGVhZGVySGlkZGVuOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBpbCBCb2R5IGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIEJvZHlIaWRkZW46IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGxhIHNlbGV6aW9uZSDDqCB0ZW1wb3JhbmVhbWVudGUgZGlzYWJpbGl0YXRhLiBSaXNwZXR0byBhbGwnSW5wdXQgKipTZWxlY3Rpb24qKiBjaGUgdmlzaXZhbWVudGUgZ2VzdGlzY2Ugc2UgY2kgc29ubyBvIG5vIGdsaSBpbnB1dCBkaSBzZWxlemlvbmUsXHJcbiAgICAgKiBxdWVzdG8gSW5wdXQgZ2VzdGlzY2Ugc2UgcXVlc3RpIGlucHV0IHNvbm8gYWJpbGl0YXRpIG8gbWVub1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBTZWxlY3Rpb25EaXNhYmxlZDogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgZm9yemFyZSBpbCBzaXN0ZW1hIGRpIHNlbGV6aW9uZSBhIGdlc3RpcmUgdW4gZWxlbWVudG8gcGVyIHZvbHRhLlxyXG4gICAgICogU2VsZXppb25hcmUgdW4nYWx0cmEgcmlnYSBjb24gdW5hIGdpw6Agc2VsZXppb25hdGEgYXBwbGljaGVyw6AgbGEgc2VsZXppb25lIGFsbGEgbnVvdmEgcmlnYSwgcmltdW92ZW5kb2xhIGRhbGwnYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBTaW5nbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIENhbGxiYWNrIGNoZSBkYXRvIHVuIG9nZ2V0dG8gcmVzaXR1aXNjZSBsJ2V2ZW50dWFsZSBjbGFzc2UgZGEgYXBwbGljYXJlIGFsbGEgcmlnYSBjb2xsZWdhdGEgYWxsJ29nZ2V0dG8gKi9cclxuICAgIEBJbnB1dCgpIFJvd0NsYXNzQXNzaWduZXI6IGFueSA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgb3JkaW5hcmUgaSBkYXRpIGluIG1hbmllcmEgZGlzY2VuZGVudGUgbyBhc2NlbmRlbnRlICovXHJcbiAgICBASW5wdXQoKSBPcmRlckJ5Q29sdW1uOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBhdmVyZSBwacO5IGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50byBkZWkgZGF0aSAqL1xyXG4gICAgQElucHV0KCkgTXVsdGlwbGVPcmRlcmluZ0RpcmVjdGl2ZXMgPSB0cnVlO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIG5hc2NvbmRlcmUgbGUgY29sb25uZSBpbiBiYXNlIGFsbGUgc2VsZXppb25pIGVmZmV0dHVhdGUgZGFsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgKi9cclxuICAgIEBJbnB1dCgpIEhpZGRlbkNvbHVtbnM6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHJpb3JkaW5hcmUgbGUgY29sb25uZSBpbiBiYXNlIGFsbGUgaW1wb3N0YXppb25pIGVmZmV0dHVhdGUgZGFsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgKi9cclxuICAgIEBJbnB1dCgpIENvbHVtbnNPcmRlcmluZzogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgRXZlbnR1YWxlIHN1cHBvcnRvIGFsbGUgcmljZXJjaGUgYXBwbGljYXRlIGFsbGEgbW9kYWxpdMOgIEFycmF5ICovXHJcbiAgICBASW5wdXQoKSBTZWFyY2hWaWV3ID0gbnVsbCBhcyBBcHBTZWFyY2g8YW55PjtcclxuICAgIC8qKiBBYmlsaXRhIG8gZGlzYWJpbGl0YSBpbCBzaXN0ZW1hIGNoZSBwZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSB0dXR0aSBnbGkgZWxlbWVudGkgbmVsbGEgdmlzdGEgKi9cclxuICAgIEBJbnB1dCgpIFNlbGVjdEFsbDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogU2ltdWxhIGxhIHBhZ2luYXppb25lIGFuY2hlIHBlciBsZSB0YWJlbGxlIGNoZSBmdW56aW9uYW5vIGluIG1vZGFsaXTDoCBBcnJheSAqL1xyXG4gICAgQElucHV0KCkgVXNlQXJyYXlNb2RlUGFnaW5nID0gdHJ1ZTtcclxuICAgIC8qKiBEZWZpbml6aW9uZSBkaSBjb2xvbm5lIGRpbmFtY2hlIHBlciBsYSBtb2RhbGl0w6AsIGFwcHVudG8sIGRpbmFtaWNhICovXHJcbiAgICBASW5wdXQoKSBEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb246IEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbltdID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egb3BlcmF6aW9uaSBkaW5hbWljaGUgZ2VuZXJpY2hlIGNoZSBwb3Nzb25vIGVzc2VyZSBlZmZldHR1YXRlIHBlciByaWdhLiBBcHBhaW9ubyBjb21lIGNvbG9ubmUgZXh0cmEgc3VsIGxhdG8gc2luaXN0cm8gZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgRHluYW1pY09wZXJhdGlvbnM6IEVzVGFibGVPcGVyYXRpb25EZWZpbml0aW9uW10gPSBbXTtcclxuICAgIC8qKiBJbmRpY2Egc2UgdmlzdWFsaXp6YXJlIGkgZGF0aSBpbiBtYW5pZXJhIGdlcmFyY2hpY2EgKi9cclxuICAgIEBJbnB1dCgpIEhpZXJhcmNoeTogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lEIGRlbCBwYWRyZS4gRGEgdXRpbGl6emFyZSBzZSAqKkhpZXJhcmNoeSoqIMOoIGltcG9zdGF0byAqL1xyXG4gICAgQElucHV0KCkgUGFyZW50S2V5ID0gJyc7XHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lEIGRlbGwnb2dnZXR0byBhdHR1YWxlLiBEYSB1dGlsaXp6YXJlIHNlICoqSGllcmFyY2h5Kiogw6ggaW1wb3N0YXRvICovXHJcbiAgICBASW5wdXQoKSBPd25LZXkgPSAnJztcclxuICAgIC8qKiBJbmRpY2Egc2UgcGFydGlyZSBjb24gdW4gYWxiZXJvIGVzcGFuc28uIERhIHV0aWxpenphcmUgc2UgKipIaWVyYXJjaHkqKiDDqCBpbXBvc3RhdG8gKi9cclxuICAgIEBJbnB1dCgpIFN0YXJ0c0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIC8qKiBJbmRpY2Egc2UgZWZmZXR0dWFyZSBpbCBzYWx2YXRhZ2dpbyBkZWxsZSBwcmVmZXJlbnplIGRpIHJpY2VyY2EgKi9cclxuICAgIEBJbnB1dCgpIFNhdmVQcmVmZXJlbmNlczogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogQWxsaW5lYW1lbnRvIGRpIGRlZmF1bHQgcGVyIGNlbGxlIGUgaGVhZGVycyAqL1xyXG4gICAgQElucHV0KCkgRGVmYXVsdEFsaWdubWVudDogJ0xlZnQnIHwgJ1JpZ2h0JyB8ICdDZW50ZXInID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2EgZG92ZSB2aXN1YWxpenphcmUgbGUgaW5mb3JtYXppb25pIGRpIHBhZ2luYXppb25lLCBzZSBzb3ByYSwgc290dG8gbyBpbiBlbnRyYW1iaSAqL1xyXG4gICAgQElucHV0KCkgUGFnaW5nU3R5bGU6ICdib3RoJyB8ICd0b3AnIHwgJ2JvdHRvbScgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBkb3ZlIHZpc3VhbGl6emFyZSBsZSBpbmZvcm1hemlvbmkgZGkgcGFnaW5hemlvbmUsIHNlIHNvcHJhLCBzb3R0byBvIGluIGVudHJhbWJpICovXHJcbiAgICBASW5wdXQoKSBSb3dHcm91cGluZ1BhZ2luZ1N0eWxlOiAnbGVmdCcgfCAncmlnaHQnID0gbnVsbDtcclxuICAgIC8qKiBRdWFsb3JhIHBlciBxdWFsc2lhc2kgbW90aXZvIG5vbiB2ZW5pc3NlIHVzYXRvICoqaXRlbXMqKiBkZWxsJ0FwcFNlYXJjaCBxdWVzdG8gSW5wdXQgaW5kaWNhIHF1YWwgw6ggaWwgbm9tZSBkZWxsYSBwcm9wcmlldMOgIGRhIHV0aWxpenphcmUgKi9cclxuICAgIEBJbnB1dCgpIEl0ZW1Tb3VyY2VQcm9wZXJ0eTogc3RyaW5nID0gXCJcIjtcclxuICAgIC8qKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBsYSBjYWNoZSBkaSBzZWxlemlvbmUgY2hlIHBlcm1ldHRlIGRpIG1hbnRlbmVyZSBnbGkgc3RhdGkgZGkgc2VsZXppb25lIGRlaSB2YXJpIG9nZ2V0dGkgbmF2aWdhbmRvIGRhIHVuYSBwYWdpbmEgYWxsJ2FsdHJhICovXHJcbiAgICBASW5wdXQoKSBVc2VTZWxlY3Rpb25DYWNoZSA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgZGVjaWRlcmUgc2UsIGluIG1vZGFsaXTDoCByYWdncnVwcGFtZW50bywgbW9zdHJhcmUgbyBtZW5vIGlsIHZhbG9yZSBkZWxsZSBjb2xvbm5lIGRpIGdydXBwbyBuZWdsaSBvZ2dldHRpIGZpbmFsaS4gRGkgZGVmYXVsdCBzb25vIG5hc2Nvc3RpICovXHJcbiAgICBASW5wdXQoKSBTaG93SXRlbUdyb3Vwc0NvbHVtbnMgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBjaGUgdHV0dGkgaSBjYW1waSBjaGUgZGVmaW5pc2Nvbm8gbGUgbW9kYWxpdMOgIGRpIG1vZGlmaWNhIGNhbXBvIHBvc3Nvbm8gZXNzZXJlIG1vZGlmaWNhdGkgaW4gYmFzZSBhbGxlIGltcG9zdGF6aW9uaSAqL1xyXG4gICAgQElucHV0KCkgRWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggcG9zc2liaWxlIGVmZmV0dHVhcmUgc2VsZXppb25pIGEgcmFuZ2UgcGVyIHBvaSBmYXJjaSBldmVudHVhbG1lbnRlIGNvcGlhIGluY29sbGEgKi9cclxuICAgIEBJbnB1dCgpIFJhbmdlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGlsIG51bWVybyBkaSBtaWxsaXNlY29uZGkgcGVyIGN1aSBkZWJvdW5jYXJlIGlsIHdyaXRlVmFsdWUgcGVyIGxhIG1vZGFsaXTDoCAqKkVzVGFibGVIYW5kbGVkU2VhcmNoKiogKi9cclxuICAgIEBJbnB1dCgpIFNlYXJjaFRocm90dGxlOiBudW1iZXIgPSA1MDtcclxuICAgIC8qKiBFdmVudG8gY2hlIHZpZW5lIHJpY2hpYW1hdG8gYWwgY2FtYmlvIGRpIG9yaWRuYW1lbnRvIGRpIHVuYSBjb2xvbm5hICovXHJcbiAgICBAT3V0cHV0KCkgb25PcmRlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcHBPcmRlcmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFwcE9yZGVyaW5nPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGNoZSB2aWVuZSByaWNoaWFtYXRvIHF1YW5kbyBsJ2VzLXRhYmxlIHJpdGllbmUgc2lhIG5lY2Vzc2FyaW8gcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhLlxyXG4gICAgICogSWwgYm9vbGVhbm8gZGVsbCdldmVudG8gaW5kaWNhIHNlIHZpZW5lIHN1Z2dlcml0byBkaSByZXNldHRhcmUgbGEgcGFnaW5hIG8gbWVuby5cclxuICAgICAqIFxyXG4gICAgICogU29sbyBpbiBjYXNvIHZlbmdhIHV0aWxpenphdGEgbGEgbW9kYWxpdMOgIGEgcmFnZ3J1cHBhbWVudGkgZGkgcmlnaGUgcHXDsiBzdWNjZWRlcmUgY2hlIGwnZXMtdGFibGUgcGFzc2kgdW4gaW50ZXJvIEFwcFNlYXJjaCBjb21lIHBhcmFtZXRybyBkaSByaWNlcmNhLFxyXG4gICAgICogaW4gcXVlbCBjYXNvIGwnYXBwbGljYXppb25lIHJpY2V2ZW50ZSBkb3Zyw6Agb25vcmFyZSBsYSByaWNoaWVzdGEgc3BlZGVuZG8gYWwgYmFja2FuZCBsJ29nZ2V0dG8gZGkgcmljZXJjYSBBUy1JU1xyXG4gICAgICogXHJcbiAgICAgKiBpbCB0aXBvIGRlbGwnRW1pdHRlciBpbnZlY2UgZGkgZXNzZXJlIFtib29sZWFuIHwgQXBwU2VhcmNoPGFueT5dIMOoIHN0YXRvIGltcG9zdGF0byBhIFwiYW55XCIgcGVyIGV2aXRhcmUgcHJvYmxlbWkgZGkgcmV0cm9jb21wYXRpYmlsaXTDoFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25TZWFyY2hSZXF1ZXN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgLyoqIEV2ZW50byBjaGUgcGFydGUgYWQgb2duaSBtb2RpZmljYSBkaSBcImNoZWNrYWdnaW9cIiBpbiBmb3JtYSBkaSBjb21vZG8gYXJyYXkuIEVzcG9uZSBsJ29nZ2V0dG8gY29uIGxvIHN0YXRvIGRpIGNoZWNrIGF0dHVhbGUgKi9cclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJdGVtc1NlbGVjdGlvbjxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SXRlbXNTZWxlY3Rpb248YW55Pj4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGwnZWxpbWluYXppb25lIGRpIHVuIG9nZ2V0dG8gKi9cclxuICAgIEBPdXRwdXQoKSBvblJlbW92YWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gYWxsJ2FubnVsbGFtZW50byBkaSB1bidlbGltaW5hemlvbmUgKi9cclxuICAgIEBPdXRwdXQoKSBvbkFib3J0UmVtb3ZhbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGxhIG1vZGlmaWNhIGRlaSBtb2RlbGxpIGJpbmRhdGkgKi9cclxuICAgIEBPdXRwdXQoKSBvbk1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXNUYWJsZU1vZGVsQ2hhbmdlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxFc1RhYmxlTW9kZWxDaGFuZ2VbXT4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGwnYXBlcnR1cmEgZGVsIG1lbsO5IGNvbnRlc3R1YWxlICovXHJcbiAgICBAT3V0cHV0KCkgb25PcGVuQ29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqQ29ybmVyTWVudU9wdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uQ29ybmVyQWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nLCBlc3RhYmxlOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgZXN0YWJsZTogYW55IH0+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqRHluYW1pY09wZXJhdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uRHluYW1pY09wZXJhdGlvbjogRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgaXRlbTogYW55IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBzdHJpbmcsIGl0ZW06IGFueSB9PigpO1xyXG5cclxuICAgIC8qKiBFbGVtZW50byBIVE1MIGRhIGNsaWNjYXJlIHBlciBsJ2VzcG9ydGF6aW9uZSAqL1xyXG4gICAgQFZpZXdDaGlsZCgnZXhwb3J0RG93bmxvYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgZXhwb3J0RG93bmxvYWRlcjogRWxlbWVudFJlZjtcclxuICAgIC8qKiBQbGFjZWhvbGRlciBkaSBtZW7DuSBjb250ZXN0dWFsZSBwZXIgcXVhbmRvIG5vbiBjaSBzb25vIG9wemlvbmkgbmVsIHBsYWNlaG9sZGVyIFwiVmVyb1wiICAqL1xyXG4gICAgQFZpZXdDaGlsZCgnZW1wdHlNZW51JywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHRhYmxlRW1wdHlNZW51OiBDb250ZXh0TWVudUNvbXBvbmVudDtcclxuXHJcbiAgICAvKiogU3Vic2NyaXB0aW9uIHN1bGwnYXBlcnR1cmEgZGVsIGNvbnRleHQgbWVudSBkYSByaXB1bGlyZSBhbCBkZXN0cm95IGRlbGxhIGNsYXNzZSAqL1xyXG4gICAgcHJpdmF0ZSBjdHhNZW51U3Vic2NyaXB0aW9uOiBhbnk7XHJcblxyXG4gICAgLyoqIFBhZ2luYSBpbiB2aXN1YWxpenphemlvbmUgKGR1cmFudGUgbGEgcGFnaW5hemlvbmUgaW4gbW9kYWxpdMOgIEFycmF5KSAqL1xyXG4gICAgcHVibGljIGFycmF5bW9kZVBhZ2UgPSAxO1xyXG4gICAgLyoqIE51bWVybyBkaSBwYWdpbmUgKGR1cmFudGUgbGEgcGFnaW5hemlvbmUgaW4gbW9kYWxpdMOgIEFycmF5KSAqL1xyXG4gICAgcHVibGljIGFycmF5bW9kZVBhZ2VzID0gMTtcclxuICAgIC8qKiBPZ2dldHRpIHBlciBvZ25pIHBhZ2luYSAoZHVyYW50ZSBsYSBwYWdpbmF6aW9uZSBpbiBtb2RhbGl0w6AgQXJyYXkpICovXHJcbiAgICBASW5wdXQoKSBBcnJheW1vZGVJdGVtc1BlclBhZ2UgPSBudWxsO1xyXG4gICAgLyoqIE9nZ2V0dG8gZGkgc2VsZXppb25lIHBlciBsYSBtb2RhbGl0w6AgQXJyYXksIGNoZSBkZXZlIGNvbXBvcnRhcnNpIGNvbWUgbGEgY29udHJvcGFydGUgaW4gbW9kYWxpdMOgIFZpZXcgKi9cclxuICAgIHB1YmxpYyBhcnJheW1vZGVTZWxlY3Rpb246IEl0ZW1zU2VsZWN0aW9uPGFueT47XHJcbiAgICAvKiogQ29sb25uZSBkYSB2aXN1YWxpenphcmUgaW4gbW9kYWxpdMOgIGFycmF5ICovXHJcbiAgICBwdWJsaWMgYXJyYXlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLyoqIE9yZGluZSBkZWxsZSBjb2xvbm5lIGRhIHZpc3VhbGl6emFyZSBpbiBtb2RhbGl0w6AgYXJyYXkgKi9cclxuICAgIHB1YmxpYyBhcnJheUNvbHVtbk9yZGVyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLyoqIE9yZGluYW1lbnRpIEFTQy1ERVNDIHN1bGxlIGNvbG9ubmUgaW4gbW9kYWxpdMOgIGFycmF5ICovXHJcbiAgICBwdWJsaWMgYXJyYXlPcmRlcnM6IEFwcE9yZGVyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhcmlhYmlsZSBjaGUgc2VydmUgYSBnZXN0aXJlIGlsIG1vbWVudG8gaW4gY3VpIGwnZXMtdGFibGUgYWdnaW9ybmEgbGEgcGFnaW5hemlvbmUgKHB1bHNhbnRpIGVjYykuXHJcbiAgICAgKiBFc3NlbmRvIG9wZXJhemlvbmkgY29tdW5xdWUgY29zdG9zZSBsZSBlZmZldHR1byBzb2xvIHN1IGJpbmRpbmcgZXN0ZXJuaSwgbm9uIHN1IHJld3JpdGUgZ2VuZXJhdGkgaW50ZXJuYW1lbnRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxXcml0ZUNhbGwgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2hlIGNoZSBjb250ZXJyw6AgdHV0dGUgbGUgcmljZXJjaGUgZWZmZXR0dWF0ZSBzdSBncnVwcGkgZGl2ZXJzaSBkYWwgcHJpbW8gZSBzdSBlbGVtZW50aSBjb250ZW51dGkgbmVpIGdydXBwaS5cclxuICAgICAqIEluIGNhc28gZGkgY2FtYmkgZGkgb3JkaW5hbWVudG8gZGVsbGUgY29sb25uZSBkaXZlcnNlIGRhbGxhIHByaW1hIHR1dHRlIGxlIGNoaWFtYXRlIGZhdHRlIGRhbCBzZWNvbmRvIGxpdmVsbG8gaW4gcG9pIGRldm9ubyBlc3NlcmUgcmllc2VndWl0ZSBzZWNvbmRvIGxhIHNlZ3VlbnRlIGxvZ2ljYTpcclxuICAgICAqIFxyXG4gICAgICogXHJcbiAgICAgKiAqKkNhbWJpbyBvcmRpbmFtZW50byBzdWwgcHJpbW8gZ3J1cHBvKio6IHJlbG9hZCBjb21wbGV0bywgbm9uIG1pIG9jY3VwbyBkaSByaXB1bGlyZSBnbGkgZWxlbWVudGkgYmluZGF0aSBpbiBhbGN1biBtb2RvXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2FtYmlvIG9yZGluYW1lbnRvIHN1bGxhIGNvbG9ubmEgcmVsYXRpdmEgYWxsJ04tZXNpbW8gZ3J1cHBvKio6IHJlbG9hZCBjb21wbGV0byBkZWwgY29udGVudXRvIGRlaSBncnVwcGkgcHJlY2VkZW50aSwgcmlwdWxlbmRvIHByZWNlZGVudGVtZW50ZSBcclxuICAgICAqIHR1dHRpIGdsaSBlbGVtZW50aSBjb24gKipfZ3JvdXBsZXZlbCoqID0gTlxyXG4gICAgICogXHJcbiAgICAgKiAqKkNhbWJpbyBvcmRpbmFtZW50byBzdSB1bmEgY29sb25uYSBub24gcmFnZ3J1cHBhdGEqKjogcmVsb2FkIGNvbXBsZXRvIHBlciB0dXR0aSBpIGdydXBwaSBmaW5hbGkgYXBlcnRpLCBkZXZvIHByZWNlZGVudGVtZW50ZSByaXB1bGlyZSB0dXR0aSBnbGkgZWxlbWVudGkgY29uICoqX2l0ZW0qKiA9IHRydWVcclxuICAgICAqIFxyXG4gICAgICogQWx0cmkgZXZlbnRpIG5vbiBkb3ZyZWJiZXJvIHJhcHByZXNlbnRhcmUgcHJvYmxlbWk6XHJcbiAgICAgKiAtIFNlbGV6aW9uZTogbm9uIGNhbWJpYSBudWxsYVxyXG4gICAgICogLSBQYWdpbmF6aW9uZTogY2FtYmlhIGEgbGl2ZWxsbyByb290IHF1aW5kaSB2aWVuZSByaWNhcmljYXRvIHR1dHRvIGNvbXVucXVlLCBzdGVzc28gdmFsZSBwZXIgbGUgcGFnaW5hemlvbmkgaW50ZXJuZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlOiB7IHBhdGg6IHN0cmluZywgcm91dGU6IEdyb3VwUm91dGVGcmFnbWVudFtdLCB2aWV3OiBBcHBTZWFyY2g8YW55PiwgZ3JvdXBfY29sdW1uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsZSBkJ2FwcG9nZ2lvIHBlciBjYXBpcmUgc2UgYyfDqCBiaXNvZ25vIGRpIHJpLWVmZmV0dHVhcmUgdW5hIHJpY2VyY2EgbyBtZW5vICovXHJcbiAgICBwcml2YXRlIFJlc2VhcmNoTmVlZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogQ29sb25uZSB2aXNpYmlsaSBkZWxsYSB2aXN0YSBhdHR1YWxlLiBWYWxvcml6emF0byBkaSBkZWZhdWx0IGFsIG51bWVybyBtYXNzaW1vIGRpIGNvbG9ubmUgc3VwcG9ydGF0ZSBkYWxsYSB0YWJlbGxhIHBlciBsZSBjYXNpc3RpY2hlIGluIGFzc2VuemEgZGkgY3VzdG9tIGNlbGxzICovXHJcbiAgICBwdWJsaWMgQ29sdW1uczogeyBWaXNpYmlsZTogbnVtYmVyLCBWaXNpYmxlVW5waW5uZWQ6IG51bWJlciwgR2xvYmFsOiBudW1iZXIgfSA9IHsgVmlzaWJpbGU6IDEwMCwgVmlzaWJsZVVucGlubmVkOiAxMDAsIEdsb2JhbDogMTAwIH07XHJcbiAgICAvKiogSW4gY2FzbyBkaSBSb3cgR3JvdXBpbmcgcXVpIHZpZW5lIHNhbHZhdGEgbGEgdmlzdGEgcHJpbmNpcGFsZSBkZWkgZ3J1cHBpIGJhc2UgKi9cclxuICAgIHB1YmxpYyBNYWluR3JvdXBWaWV3OiBBcHBTZWFyY2g8YW55PiA9IG51bGw7XHJcbiAgICAvKiogQ29udGVnZ2lvIGJhc2UgZGVnbGkgb2dnZXR0aS4gSW4gbW9kYWxpdMOgIG5vcm1hbGUgdmllbmUgcmVzZXR0YXRvIGFkIG9nbmkgbnVvdmEgVmlldyBpbnNlcml0YSwgaW4gbW9kYWxpdMOgIFJvd0dyb3VwaW5nIHZpZW5lIHJlc2V0dGF0byBzb2xvIGFkIHVuYSBudW92YSBWaWV3IGRpIGxpdmVsbG8gXCIwXCIgKi9cclxuICAgIHB1YmxpYyBCYXNlSXRlbXNDb3VudCA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIGNpIHNvbm8gZGVsbGUgY29sb25uZSBwaW5uYXRlIGUgdmlzaWJpbGkuIFNlcnZlIHBlciBwb3RlciBzZXR0YXJlIHR1dHRlIGxlIGNvbG9ubmUgcHJpbWEgY2hlIGFycml2aW5vIGRhdGkgYSBwaW5uZWQqL1xyXG4gICAgcHVibGljIEhhc1Bpbm5lZENvbHVtbnM6IGJvb2xlYW5cclxuICAgIC8qKiBMYXJnaGV6emEgY2FsY29sYXRhIGRlbCBjb250YWluZXIgZGVsbGUgY29sb25uZSBwaW5uYXRlICovXHJcbiAgICBwdWJsaWMgUGlubmVkQ29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICAgIC8qKiBJbmRpY2Egc2Ugbm9ub3N0YW50ZSBzaWFtbyBpbiBtb2RhbGl0w6AgYXJyYXkgc29ubyBzdGF0aSBpbmRpdmlkdWF0aSBkZWkgZ3J1cHBpLiBJbiB0YWwgY2FzbyBlcy10YWJsZSBzaSBjb21wb3J0YSBkYSBwc2V1ZG8gYmFja2VuZCBlZCBlZmZldHR1YSBsZSBhZ2dyZWdhemlvbmkgZSByYWdncnVwcGFtZW50aSBjb21wbGV0YW1lbnRlIGxhdG8gY2xpZW50ICovXHJcbiAgICBwdWJsaWMgQXJyYXlHcm91cGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBjaGUgbCdlcy10YWJsZSDDqCBiYXNhdGEgc3VsbGUgZGlyZXR0aXZlIChudW92YSBtb2RhbGl0w6ApICovXHJcbiAgICBwdWJsaWMgRGlyZWN0aXZlc0Jhc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGxvIHN0YXRvIGRpIHNlbGV6aW9uZSBwZXIgc2luZ29sYSBjZWxsYSAqL1xyXG4gICAgcHVibGljIHNlbGVjdGlvblN0YXR1czogeyBbaW5kZXg6IG51bWJlcl06IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlIH0gfSA9IHt9O1xyXG4gICAgLyoqIENoaWFtYXRhIHJlYWxlIGFsIHdyaXRlVmFsdWUgZG9wbyBpbCBwYXNzYWdnaW8gZGkgKipTZWFyY2hUaHJvdHRsZSoqIG1pbGxpc2Vjb25kaS4gU29sbyBtb2RhbGl0w6AgRXNUYWJsZUhhbmRsZWRTZWFyY2ggKi9cclxuICAgIHByaXZhdGUgY2FsbFRpbWVvdXQgOiBhbnkgPSBudWxsO1xyXG4gICAgLyoqIENhY2hlIGRlaSB0aCBwaXV0dG9zdG8gY2hlIHJpY2FsY29sYXJzZWxpIGRpIGNvbnRpbnVvICovXHJcbiAgICBwcml2YXRlIHRoc0NhY2hlOiAgeyBbaW5kZXg6IHN0cmluZ106IEVzVGhEaXJlY3RpdmUgfSA9IHt9O1xyXG4gICAgLyoqIEluZGljYSBxdWFuZG8gbGEgY2FjaGUgZGVpIHRoIMOoIHN0YXRhIGZpbGxhdGEgYWxtZW5vIGxhIHByaW1hIHZvbHRhICovXHJcbiAgICBwcml2YXRlIHRoc0NhY2hlU2V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsaSBkYSBmaWxsYXJlIG5lbGwnQWZ0ZXIgQ29udGVudCBJbml0IHBvaSBkYSByaXV0aWxpenphcmUgbmVsbCdpbnRlcm5hbCBwb3N0IGJvdW5kIHNvdXJjZSAqL1xyXG4gICAgcHJpdmF0ZSBFc1RkczogRXNUZERpcmVjdGl2ZVtdO1xyXG4gICAgcHJpdmF0ZSBFc1RoczogRXNUaERpcmVjdGl2ZVtdO1xyXG4gICAgLyoqIFxyXG4gICAgICogRmxhZyBjaGUsIHNlICoqdHJ1ZSoqLCBwZXIgdW4gZ2lybyBkaSBiaW5kaW5nIG1hbnRpZW5lIGxhIHZpc2liaWxpdMOgIGltcG9zdGF0YSBsb2NhbG1lbnRlLCBwaXV0dG9zdG8gY2hlIGFsbGluZWFyZSBhbGxhIFZpZXcgYmluZGF0YS4gXHJcbiAgICAgKiBVc2F0YSBwZXIgbW9kaWZpY2FyZSBpbiBtYW5pZXJhIHByb2dyYW1tYXRpY2EgbGEgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZSBkYWwgbWV0b2RvICoqc2V0SGVhZGVyVmlzaWJpbGl0eSoqLCBcclxuICAgICAqIFxyXG4gICAgICogRGlzY2xhaW1lcjogKipOT04gTU9ESUZJQ0FSRSoqXHJcbiAgICAgKiovXHJcbiAgICBwdWJsaWMgdXNlTG9jYWxWaXNpYmlsaXR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogT3B6aW9uaSBkaSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgcHVibGljIFBhZ2VyT3B0aW9uczogUGFnZXJJbmZvcyA9IG5ldyBQYWdlckluZm9zKClcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIGNsaWNrIGRlc3RybyBzdSB1bmEgcmlnYSBjb24gc2VsZXppb25lIGF0dGl2YTogVGlybyBmdW9yaSBpbCBjb250ZXh0IG1lbnUgZSBzZWxlemlvbmUgbCdlbGVtZW50byBjb3JyZW50ZVxyXG4gICAgICAgIHRoaXMuY3R4TWVudVN1YnNjcmlwdGlvbiA9ICh0aGlzLkNvbnRleHRNZW51IHx8IHRoaXMudGFibGVFbXB0eU1lbnUpLm9wZW4uc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAvLyBHcnVwcGkgdmEgYmVuZSwgb2dnZXR0aSBwdXJlLCBtYSBzZXBhcmF0b3JpIGZyYSBncnVwcGkgcHJvcHJpbyBuby4uLlxyXG4gICAgICAgICAgICBpZiAodC5pdGVtLl9zZXApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaG91bGRFbWl0ID0gIXQuaXRlbS5fc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgICAgICB0Lml0ZW0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1c0V4Y2x1ZGluZyhudWxsKTtcclxuICAgICAgICAgICAgdmFyIGl0ZW1TZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbl9ILmhhbmRsZUl0ZW1zU2VsZWN0aW9uKFt0Lml0ZW1dKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2hvdWxkRW1pdClcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaXRlbVNlbGVjdGlvbik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEFzc2VnbmF6aW9uZSBwZXIgdHV0dGkgZ2xpIElucHV0IGRpIGRlZmF1bHRcclxuICAgICAgICB0aGlzLkNvbHVtbnNSZXNpemFibGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29sdW1uc1Jlc2l6YWJsZSwgdGhpcy5kZWFmdWx0cz8uQ29sdW1uc1Jlc2l6YWJsZSk7XHJcbiAgICAgICAgdGhpcy5BdXRvVXBkYXRlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkF1dG9VcGRhdGUsIHRoaXMuZGVhZnVsdHM/LkF1dG9VcGRhdGUpO1xyXG4gICAgICAgIHRoaXMuQWxsU2VhcmNoID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkFsbFNlYXJjaCwgdGhpcy5kZWFmdWx0cz8uQWxsU2VhcmNoLCB0cnVlKTtcclxuICAgICAgICB0aGlzLkV4cG9ydCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5FeHBvcnQsIHRoaXMuZGVhZnVsdHM/LkV4cG9ydCk7XHJcbiAgICAgICAgdGhpcy5IaWRlUGFnaW5nID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkhpZGVQYWdpbmcsIHRoaXMuZGVhZnVsdHM/LkhpZGVQYWdpbmcsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLkhpZGVQYWdpbmdDb3VudCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5IaWRlUGFnaW5nQ291bnQsIHRoaXMuZGVhZnVsdHM/LkhpZGVQYWdpbmdDb3VudCk7XHJcbiAgICAgICAgdGhpcy5IaWRlUGFnaW5nQnV0dG9ucyA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5IaWRlUGFnaW5nQnV0dG9ucywgdGhpcy5kZWFmdWx0cz8uSGlkZVBhZ2luZ0J1dHRvbnMpO1xyXG4gICAgICAgIHRoaXMuQ29udGFpbmVyQ2xhc3MgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29udGFpbmVyQ2xhc3MsIHRoaXMuZGVhZnVsdHM/LkNvbnRhaW5lckNsYXNzLCAnJyk7XHJcbiAgICAgICAgdGhpcy5UYWJsZUNsYXNzID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlRhYmxlQ2xhc3MsIHRoaXMuZGVhZnVsdHM/LlRhYmxlQ2xhc3MsICd0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtJyk7XHJcbiAgICAgICAgdGhpcy5TZWxlY3Rpb24gPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuU2VsZWN0aW9uLCB0aGlzLmRlYWZ1bHRzPy5TZWxlY3Rpb24pO1xyXG4gICAgICAgIHRoaXMuU2F2ZVByZWZlcmVuY2VzID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlNhdmVQcmVmZXJlbmNlcywgdGhpcy5kZWFmdWx0cz8uU2F2ZVByZWZlcmVuY2VzKTtcclxuICAgICAgICB0aGlzLlBhZ2luZ1N0eWxlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlBhZ2luZ1N0eWxlLCB0aGlzLmRlYWZ1bHRzPy5QYWdpbmdTdHlsZSwgJ2JvdHRvbScpO1xyXG4gICAgICAgIHRoaXMuUm93R3JvdXBpbmdQYWdpbmdTdHlsZSA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5Sb3dHcm91cGluZ1BhZ2luZ1N0eWxlLCB0aGlzLmRlYWZ1bHRzPy5Sb3dHcm91cGluZ1BhZ2luZ1N0eWxlLCAnbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuVXNlU2VsZWN0aW9uQ2FjaGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuVXNlU2VsZWN0aW9uQ2FjaGUsIHRoaXMuZGVhZnVsdHM/LlVzZVNlbGVjdGlvbkNhY2hlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLlNob3dJdGVtR3JvdXBzQ29sdW1ucyA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5TaG93SXRlbUdyb3Vwc0NvbHVtbnMsIHRoaXMuZGVhZnVsdHM/LlNob3dJdGVtR3JvdXBzQ29sdW1ucywgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuQXJyYXltb2RlSXRlbXNQZXJQYWdlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkFycmF5bW9kZUl0ZW1zUGVyUGFnZSwgdGhpcy5kZWFmdWx0cz8uQXJyYXltb2RlSXRlbXNQZXJQYWdlLCAxNSk7XHJcbiAgICAgICAgdGhpcy5Db2x1bW5zUGlubmFibGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29sdW1uc1Bpbm5hYmxlLCB0aGlzLmRlYWZ1bHRzPy5Db2x1bW5zUGlubmFibGUsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdEFsaWdubWVudCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5EZWZhdWx0QWxpZ25tZW50LCB0aGlzLmRlYWZ1bHRzPy5EZWZhdWx0QWxpZ25tZW50LCAnTGVmdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgLy8gU2UgdXRpbGl6em8gbGEgbmV3IHNwaWN5IG1vZGUgZGVkdWNvIHR1dHRpIGkgcGFyYW1ldHJpIGRpIGxhdm9ybyBwb3NzaWJpbGkgYWwgY2FyaWNhbWVudG8gZGVsbGEgdGFiZWxsYVxyXG4gICAgICAgIC8vIFZlbmdvbm8gc292cmFzY3JpdHRlIHNvbG8gbGUgcHJvcHJpZXTDoCBub24gaW1wb3N0YXRlIGRhbGwndXRlbnRlXHJcbiAgICAgICAgdGhpcy5Fc1RkcyA9IHRoaXMuRXNUZHNEaXJlY3RpdmUudG9BcnJheSgpO1xyXG4gICAgICAgIHRoaXMuRXNUaHMgPSB0aGlzLkVzVGhzRGlyZWN0aXZlLnRvQXJyYXkoKTtcclxuXHJcbiAgICAgICAgbGV0IHRoc1Rkc1Byb3ZpZGVycyA9IFsuLi4odGhpcy5Fc1RoVGRQcm92aWRlciA/IFt0aGlzLkVzVGhUZFByb3ZpZGVyXSA6IFtdKSwgLi4udGhpcy5UaFRkUHJvdmlkZXJdO1xyXG4gICAgICAgIGlmKHRoc1Rkc1Byb3ZpZGVycz8ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcmtKb2luKHRoc1Rkc1Byb3ZpZGVycy5tYXAodCA9PiB0LkxvYWRlZFNpZ25hbCkpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0aGlzLkVzVGRzID0gWy4uLnRoaXMuRXNUZHMsIC4uLnRoc1Rkc1Byb3ZpZGVycy5tYXAodCA9PiB0LkVzVGRzRGlyZWN0aXZlLnRvQXJyYXkoKSkuZmxhdCgpXTtcclxuICAgICAgICAgICAgdGhpcy5Fc1RocyA9IFsuLi50aGlzLkVzVGhzLCAuLi50aHNUZHNQcm92aWRlcnMubWFwKHQgPT4gdC5Fc1Roc0RpcmVjdGl2ZS50b0FycmF5KCkpLmZsYXQoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1c2VzVGhzQW5kVGRzRGlyZWN0aXZlcyA9IHRoaXMuRXNUZHM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5Fc1Rocz8ubGVuZ3RoID4gMDtcclxuICAgICAgICBsZXQgaGFzTm9Db250ZW50UHJvamVjdGlvbiA9ICF0aGlzLmJvZHlSZWYgJiYgIXRoaXMuaGVhZGVyUmVmICYmICF0aGlzLmhlYWRlckdyb3VwUmVmICYmICF0aGlzLnNlY29uZGFyeUhlYWRlckdyb3VwUmVmO1xyXG5cclxuICAgICAgICBpZiAodXNlc1Roc0FuZFRkc0RpcmVjdGl2ZXMgfHwgaGFzTm9Db250ZW50UHJvamVjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5Vc2VDdXN0b21DZWxscyA9PSBudWxsKSB0aGlzLlVzZUN1c3RvbUNlbGxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuSGlkZGVuQ29sdW1ucyA9PSBudWxsICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHRoaXMuSGlkZGVuQ29sdW1ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkNvbHVtbnNPcmRlcmluZyA9PSBudWxsICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHRoaXMuQ29sdW1uc09yZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuT3JkZXJCeUNvbHVtbiA9PSBudWxsICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHRoaXMuT3JkZXJCeUNvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlbGVjdEFsbCA9PSBudWxsICYmIHRoaXMuU2VsZWN0aW9uKSB0aGlzLlNlbGVjdEFsbCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNoaWZ0Q2xpY2sgPT0gbnVsbCAmJiB0aGlzLlNlbGVjdGlvbikgdGhpcy5TaGlmdENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5EaXJlY3RpdmVzQmFzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9QZXIgcG90ZXIgY2FtYmlhcmUgaWwgbGF5b3V0IGluIGJhc2UgYWwgbGl2ZWxsbyBnZXJhcmNoaWNvIGlsIGNvbXBvbmVudGUgZGV2YSBhdmVyZSBpbCBwaWVubyBjb250cm9sbG8gZGkgb2duaSBjZWxsYSxcclxuICAgICAgICAvL2NoZSBjb24gc29sbyBsYSBwcm9pZXppb25lIChzZW56YSBjZWxsZSBjdXNvdG0pIG5vbiDDqCBkaXNwb25pYmlsZVxyXG4gICAgICAgIGlmICh0aGlzLkhpZXJhcmNoeSAmJiAhdGhpcy5Vc2VDdXN0b21DZWxscylcclxuICAgICAgICAgICAgdGhyb3cgXCJFcy10YWJsZSBlcnJvcjogUGVyIHBvdGVyIHV0aWxpenphcmUgbCdlcy10YWJsZSBjb24gW0hpZXJhcmNoeV09XFxcInRydWVcXFwiIMOoIHJpY2hpZXN0byBhbmNoZSBbVXNlQ3VzdG9tQ2VsbHNdPVxcXCJ0cnVlXFxcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29weVN1YnNjcmlwdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jb3B5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhc3RlU3Vic2NyaXB0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLnBhc3RlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN0eE1lbnVTdWJzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY3R4TWVudVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5BY3RpdmVFc3RSZWZlcmVuY2UgPT0gdGhpcylcclxuICAgICAgICAgICAgdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5BY3RpdmVFc3RSZWZlcmVuY2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGxldCBuZXdTZWFyY2hWaWV3ID0gY2hhbmdlc1snU2VhcmNoVmlldyddO1xyXG4gICAgICAgIGlmIChuZXdTZWFyY2hWaWV3ICYmIHRoaXMuU2VhcmNoVmlldylcclxuICAgICAgICAgICAgdGhpcy5hcnJheVB1bHNhbnRpID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIHRoaXMuU2VhcmNoVmlldy5wYWdlLCB0aGlzLlNlYXJjaFZpZXcucGFnZXMgfHwgMSwgdGhpcy5TZWFyY2hWaWV3Lm9iamVjdGNvdW50LCB0aGlzLlNlYXJjaFZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbik6IHZvaWQgeyB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuOyB9XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKTogdm9pZCB7IH1cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY2hhbmdlZChjbGVhckl0ZW1zOiBib29sZWFuID0gZmFsc2UpIHsgXHJcbiAgICAgICAgaWYoY2xlYXJJdGVtcyAmJiB0aGlzLnZpZXdNb2RlKVxyXG4gICAgICAgICAgICAoPEFwcFNlYXJjaDxhbnk+PnRoaXMuVmlldykuaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5WaWV3KTsgXHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEBpZ25vcmUgKi9cclxuICAgIHB1YmxpYyBhc3luYyB3cml0ZVZhbHVlKG9iajogYW55LCB0aHJvdHRsZTogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLlZpZXcgPSBvYmogPyBvYmogOiBudWxsO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5Fc1RhYmxlSGFuZGxlZFNlYXJjaCAmJiB0aHJvdHRsZSkge1xyXG4gICAgICAgICAgICBpZih0aGlzLmNhbGxUaW1lb3V0KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2FsbFRpbWVvdXQpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jYWxsVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLndyaXRlVmFsdWUob2JqLCBmYWxzZSk7IH0sIHRoaXMuU2VhcmNoVGhyb3R0bGUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgLy8gTWkgw6ggYXJyaXZhdGEgbCdBcHBTZWFyY2ggcXVpbmRpIGRpIHNpY3VybyBub24gaG8gdW5hIHJpY2VyY2EgaW4gcHJvZ3Jlc3NcclxuICAgICAgICB0aGlzLnJlc2VhcmNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuVmlldyAmJiAhdGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgIC8vIFN1IHZpZXcgbnVsbGEgZXZpdG8gZGkgZmFyZSBwcmVzc29jaMOpIHF1YWxzaWFzaSBjb3NhLiBTZSBhcnJpdmEgdW4gbnVsbCBkZXZvIGFuY2hlIGFzc2ljdXJhcm1pIGRpIG5vbiBtb3N0cmFyZSBudWxsYVxyXG4gICAgICAgICAgICB0aGlzLmJvdW5kU291cmNlID0gdGhpcy5UTVBCb3VuZFNvdXJjZSB8fCBbXTtcclxuXHJcbiAgICAgICAgICAgIC8vIFBlciBlc3NlcmUgc2ljdXJvIGNoZSBkb3BvIHVuIGJpbmQgZGkgb2dnZXR0aSBsYSBlcy10YWJsZSBhZ2dpb3JuaSBsYSBncmFmaWNhXHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBwZXIgc2JhZ2xpbyBsJ29nZ2V0dG8gY2hlIG1pIGFycml2YSBub24gw6ggdGlwaXp6YXRvIChpbnN0YW5jZW9mIEFwcFNlYXJjaCByZXN0aXR1aXNjZSBmYWxzZSBhbmNoZSBzZSDDqCBkZWwgdGlwbyBnaXVzdG8pXHJcbiAgICAgICAgLy8gbG8gY29ycmVnZ28tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgICAgIGlmICh0aGlzLlZpZXcgJiYgdHlwZW9mICh0aGlzLlZpZXcgYXMgYW55KS5pdGVtc3BlcnBhZ2VvdmVycmlkZSAhPSAndW5kZWZpbmVkJyAmJiAhKHRoaXMuVmlldyBpbnN0YW5jZW9mIEFwcFNlYXJjaCkpXHJcbiAgICAgICAgICAgICh0aGlzLlZpZXcgYXMgYW55KS5fX3Byb3RvX18gPSBuZXcgQXBwU2VhcmNoKCk7XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5TZWFyY2hWaWV3ICYmIHR5cGVvZiAodGhpcy5TZWFyY2hWaWV3IGFzIGFueSkuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgIT0gJ3VuZGVmaW5lZCcgJiYgISh0aGlzLlNlYXJjaFZpZXcgaW5zdGFuY2VvZiBBcHBTZWFyY2gpKVxyXG4gICAgICAgICAgICAodGhpcy5TZWFyY2hWaWV3IGFzIGFueSkuX19wcm90b19fID0gbmV3IEFwcFNlYXJjaCgpO1xyXG4gICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVmlldyAmJiB0aGlzLlZpZXcgaW5zdGFuY2VvZiBBcHBTZWFyY2gpIHtcclxuICAgICAgICAgICAgLy8gU2UgY2FtYmlhIGwnb2dnZXR0byBpbnRlcm8gc2lnbmlmaWNhIGNoZSBobyByaW1hbmRhdG8gbGEgcmljZXJjYVxyXG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ3ZpZXcnKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBmaXJzdEl0ZW1Hcm91cE9yTm9Hcm91cGluZyA9ICh0aGlzLlZpZXcucmVxdWVzdGVkZ3JvdXBzPy5sZW5ndGggfHwgMCkgPT0gMDtcclxuXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBTZSB2ZW5nbyBkYSB1bmEgcmljZXJjYSBpbnRlcm5hIG1hbnRlbmdvIGxvIHN0YXRvIGRpIHNlbGV6aW9uZSBwcmVjZWRlbnRlIChxdWluZGkgc3UgY2FtYmlvIHBhZ2luYSwgY2FtYmlvIGlwcCwgZWNjLi4uKVxyXG4gICAgICAgICAgICAvLyBzZSBpbnZlY2UgbCd1dGVudGUgaGEgZmF0dG8gdW5hIHJpY2VyY2EgbHVpIChxdWluZGkgY2FtYmlhbmRvIGZpbHRyaSksIHNlY2NvIGxlIGluZm8gZGkgc2VsZXppb25lXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5WaWV3LnNlbGVjdGlvbiB8fCAoIXRoaXMuVmlldy5pbnRlcm5hbHNlYXJjaHJlcXVlc3QgJiYgZmlyc3RJdGVtR3JvdXBPck5vR3JvdXBpbmcpIHx8ICF0aGlzLlVzZVNlbGVjdGlvbkNhY2hlKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGlvbih0cnVlKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuVmlldy5pbnRlcm5hbHNlYXJjaHJlcXVlc3QgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIC8vIFJlY3VwZXJvIFByZWZlcmVuY2VcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2F2ZVByZWZlcmVuY2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMubmdDb250cm9sLm5hbWUpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgYXZlcmUgdW4gJ25hbWUnIHBlciBxdWVzdGEgdGFiZWxsYVwiKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCF0aGlzLnByZWZTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb24gcG9zc28gdXRpbGl6emFyZSBsZSBwcmVmZXJlbmNlIHNlbnphIGNoZSBpbCBwYWNjaGV0dG8gQGVzZmFlbnphL3ByZWZlcmVuY2VzIHNpYSBpbnN0YWxsYXRvXCIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZWZzID0gYXdhaXQgdGhpcy5wcmVmU2VydmljZS5nZXRJdGVtPHsgY29sdW1uczogc3RyaW5nW10sIGNvbHVtbl9vcmRlcmluZzogc3RyaW5nW10sIG9yZGVyczogQXBwT3JkZXJpbmdbXSB9Pig8c3RyaW5nPnRoaXMubmdDb250cm9sLm5hbWUpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIGNhc2kgbGEgZ2VudGUgc2kgbWV0dGEgYSBzcGFtbWFyZSByZWZyZXNoIGNvbiBuZ2lmIHN0cmFuaSBzdWxsJ2VzdGFibGUgY3JlYW5kb2xhIGUgZGlzdHJ1Z2dlbmRvbGEgTiB2b2x0ZSBhbCBzZWNvbmRvIG5lbCB0ZW1wbyBjaGUgY2kgbWV0dGVcclxuICAgICAgICAgICAgICAgICAgICAvLyBhIHRpcmFyZSBzdSBsZSBwcmVmZXJlbmNlIGRhIHF1aSBzb3ByYSBsYSBWaWV3IHBvdHJlYmJlIGVzc2VyZSBjYW1iaWF0YVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlZpZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHMgPSBwcmVmcz8uY29sdW1ucyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVwZGF0ZWRQcmVmcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXBvc2l0b3J5OiBzdHJpbmdbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZTogc3RyaW5nW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5WaWV3LnJlcG9ydF9jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5ID0gdGhpcy5WaWV3LnJlcG9ydF9jb2x1bW5zLm1hcCh0ID0+IHQuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gY29scztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPSBjb2xzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gdGhpcy5WaWV3LmNvbHVtbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCByZXBvcnQgZGV2byBjb250cm9sbGFyZSBjaGUgdHV0dGUgbGUgY29sb25uZSBzYWx2YXRlIGZhY2NpYW5vIHBhcnRlIGRlbGxhIHZpc3RhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCBub3JtYWxlIGludmVjZSBzZSBsZSBwcmVmZXJlbnplIGZhbm5vIHJpZmVyaW1lbnRvIGEgZGVsbGUgY29sb25uZSBjaGUgaW8gbm9uIGhvIG5lbGxhIFZpZXcgYXR0dWFsZSBzaWduaWZpY2EgY2hlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0byBmYWNlbmRvIHJpZmVyaW1lbnRvIGEgdW5hIHZlcnNpb25lIHZlY2NoaWEgZGVsbCdlcy10YWJsZSwgcXVpbmRpIG5vbiBmYWNjaW8gb3BlcmF6aW9uaVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9zaXRvcnkuaW5kZXhPZihzb3VyY2VbaV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByZWZzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlIG1pIGJhc28gc3UgZGlyZXR0aXZlIG1hIG5lbGxlIHByZWZlcmVuY2Ugw6ggcHJlc2VudGUgYW5jaGUgc29sbyB1bmEgY29sb25uYSBub24gcHJlc2VudGUgbmVsbGUgZGlyZXR0aXZlIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2dW9sIGRpcmUgY2hlIGwnZXMtdGFibGUgw6ggY2FtYmlhdGEgcXVpbmRpIG5vbiBpbXBvc3RvIHByZWZlcmVuY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLkVzVGhzRGlyZWN0aXZlPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcG9zaXRvcnkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aHNDYWNoZVNldCAmJiAhdGhpcy50aHNDYWNoZVtyZXBvc2l0b3J5W2ldXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUHJlZnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcuY29sdW1ucyA9IHByZWZzPy5jb2x1bW5zIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WaWV3LmNvbHVtbl9vcmRlcmluZyA9IHByZWZzPy5jb2x1bW5fb3JkZXJpbmcgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZSBsZSBwcmVmIHNvbm8gbnVsbGUgbm9uIHNvdnJhc2NyaXZvIGdsaSBvcmRpbmkgZGF0byBjaGUgcG90cmViYmUgc2VydmlyZSBtZXR0ZXJlIGRlZ2xpIG9yZGluYW1lbnRpIGRpIGRlZmF1bHQgbGF0byB0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJlZnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WaWV3Lm9yZGVycyA9IHByZWZzPy5vcmRlcnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExhIHBhZ2luYXppb25lIGRldm8gZmFybGEgc29sYW1lbnRlIHF1YW5kbyByaWNoaWVkbyBvIHVuIGdydXBwbyBwcmluY2lwYWxlIChzZSBzb25vIGluIHJvdyBncm91cGluZykgbyBzZSBub24gcmljaGllZG8gZ3J1cHBpIChpbiB0dXR0aSBsZ2kgYWx0cmkgY2FzaSlcclxuICAgICAgICAgICAgaWYgKGZpcnN0SXRlbUdyb3VwT3JOb0dyb3VwaW5nKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcnJheVB1bHNhbnRpID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIHRoaXMuVmlldy5wYWdlLCB0aGlzLlZpZXcucGFnZXMgfHwgMSwgdGhpcy5WaWV3Lml0ZW1zLmxlbmd0aCwgdGhpcy5WaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5WaWV3ICYmICh0aGlzLlZpZXcubGVuZ3RoICE9IG51bGwgJiYgdGhpcy5WaWV3Lmxlbmd0aCAhPSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnYXJyYXknKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5Vc2VTZWxlY3Rpb25DYWNoZSB8fCAhdGhpcy5hcnJheW1vZGVTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVjdXBlcm8gUHJlZmVyZW5jZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5TYXZlUHJlZmVyZW5jZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBhdmVyZSB1biAnbmFtZScgcGVyIHF1ZXN0YSB0YWJlbGxhXCIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMucHJlZlNlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgY2hlIGlsIHBhY2NoZXR0byBAZXNmYWVuemEvcHJlZmVyZW5jZXMgc2lhIGluc3RhbGxhdG9cIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZnMgPSBhd2FpdCB0aGlzLnByZWZTZXJ2aWNlLmdldEl0ZW08eyBjb2x1bW5zOiBzdHJpbmdbXSwgY29sdW1uX29yZGVyaW5nOiBzdHJpbmdbXSwgb3JkZXJzOiBBcHBPcmRlcmluZ1tdIH0+KDxzdHJpbmc+dGhpcy5uZ0NvbnRyb2wubmFtZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHMgPSBwcmVmcz8uY29sdW1ucyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlZFByZWZzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVwb3NpdG9yeTogc3RyaW5nW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZTogc3RyaW5nW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlZpZXcucmVwb3J0X2NvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSA9IHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucy5tYXAodCA9PiB0LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gY29scztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPSBjb2xzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSB0aGlzLlZpZXcuY29sdW1ucztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCByZXBvcnQgYWdnaW9ybm8gbGUgcHJlZmVyZW56ZSBzb2xvIHNlIGMnw6ggYWxtZW5vIHVuYSBjb2xvbm5hLCBhbHRyaW1lbnRpIHZ1b2wgZGlyZSBjaGUgc2kgcGFydGUgZGEgdnVvdGlcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb24gdHV0dGUgbGUgY29sb25uZSBkaXNwb25pYmlsaVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucyAmJiAoc291cmNlPy5sZW5ndGggfHwgMCkgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByZWZzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCBub3JtYWxlIGludmVjZSBzZSBsZSBwcmVmZXJlbnplIGZhbm5vIHJpZmVyaW1lbnRvIGEgZGVsbGUgY29sb25uZSBjaGUgaW8gbm9uIGhvIG5lbGxhIFZpZXcgYXR0dWFsZSBzaWduaWZpY2EgY2hlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvIGZhY2VuZG8gcmlmZXJpbWVudG8gYSB1bmEgdmVyc2lvbmUgdmVjY2hpYSBkZWxsJ2VzLXRhYmxlLCBxdWluZGkgbm9uIGZvY2NpbyBvcGVyYXppb25pXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9zaXRvcnkuaW5kZXhPZihzb3VyY2VbaV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUHJlZnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5zID0gcHJlZnM/LmNvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5fb3JkZXJpbmcgPSBwcmVmcz8uY29sdW1uX29yZGVyaW5nIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2UgbGUgcHJlZiBzb25vIG51bGxlIG5vbiBzb3ZyYXNjcml2byBnbGkgb3JkaW5pIGRhdG8gY2hlIHBvdHJlYmJlIHNlcnZpcmUgbWV0dGVyZSBkZWdsaSBvcmRpbmFtZW50aSBkaSBkZWZhdWx0IGxhdG8gdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJlZnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcub3JkZXJzID0gcHJlZnM/Lm9yZGVycyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlYXJjaFZpZXcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFycmF5UHVsc2FudGkgPSB0aGlzLnV0aWxpdGllc19ILmdldFBhZ2VzQXJyYXkoNiwgdGhpcy5TZWFyY2hWaWV3LnBhZ2UsIHRoaXMuU2VhcmNoVmlldy5wYWdlcyB8fCAxLCB0aGlzLlNlYXJjaFZpZXcuaXRlbXMubGVuZ3RoLCB0aGlzLlNlYXJjaFZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZUNvbnRleHQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3N0Qm91bmRTb3VyY2VDYWxjdWxhdGlvbigpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5WaWV3ICYmICF0aGlzLlZpZXcuc2VsZnNlYXJjaCAmJiB0aGlzLkVzVGFibGVIYW5kbGVkU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVmlldy5zZWxmc2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5lbWl0KGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlZpZXcgJiYgdGhpcy5WaWV3LnNlbGZzZWFyY2ggJiYgdGhpcy5Fc1RhYmxlSGFuZGxlZFNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZnNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHRyYWNrYnkgcGVyIGlsIGJvZHkgY2hlIGRvdnJlYmJlIGV2aXRhcmUgaWwgOTAlIGRlbGxlIGNoYW5nZSBkZXRlY3Rpb24gKi9cclxuICAgIHB1YmxpYyBib2R5VHJhY2tCeSA9IChfOiBudW1iZXIsIGl0ZW06IGFueSkgPT4gaXRlbS5faGFzaDtcclxuXHJcbiAgICAvKiogRnVuemlvbmUgZGkgdHJhY2tieSBnZW5lcmljYSBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGhhbm5vIGlsIGNhbXBvIGlkICovXHJcbiAgICBwdWJsaWMgaWRUcmFja0J5ID0gKF86IG51bWJlciwgaXRlbTogYW55KSA9PiBpdGVtLmlkO1xyXG5cclxuICAgICAvKiogRnVuemlvbmUgZGkgdHJhY2tieSBnZW5lcmljYSBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGhhbm5vIGlsIGNhbXBvIFByb3BlcnR5TmFtZSAqL1xyXG4gICAgcHVibGljIFByb3BlcnR5TmFtZVRyYWNrQnkgPSAoXzogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0uUHJvcGVydHlOYW1lO1xyXG5cclxuICAgIC8qKiBGdW56aW9uZSBkaSB0cmFja2J5IGdlbmVyaWNhIHBlciB0dXR0aSBnbGkgb2dnZXR0aSBjaGUgaGFubm8gaWwgY2FtcG8gSUQgKi9cclxuICAgIHB1YmxpYyBJRFRyYWNrQnkgPSAoXzogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0uSUQ7XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHRyYWNrYnkgZ2VuZXJpY2EgcGVyIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBoYW5ubyBpbCBjYW1wbyBJRCAqL1xyXG4gICAgcHVibGljIHZhbFRyYWNrQnkgPSAoXzogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0udmFsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VjY2Vzc2l2YW1lbnRlIGFsIGJpbmQgZGVsIG51b3ZvIGlucHV0IHF1ZXN0YSBmdW56aW9uZSBzaSBvY2N1cGEgZGkgZmluYWxpenphcmUgdHV0dGkgaSBwYXJhbWV0cmkgZGkgZnVuemlvbmFtZW50byBkZWxsJ2VzLXRhYmxlIFxyXG4gICAgICogaW4gYmFzZSBhIElucHV0IC0gTW9kZWxsbywgZSBxdWFsc2lhc2kgYWx0cmEgY29zYSBwb3NzYSBzZXJ2aXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmluYWxpemVDb250ZXh0KCkge1xyXG4gICAgICAgIGxldCB2aWV3Q2FzdGVkID0gdGhpcy5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+O1xyXG5cclxuICAgICAgICBsZXQgaGFzUm93R3JvdXBzID0gdmlld0Nhc3RlZCAmJiAodmlld0Nhc3RlZC5ncm91cGluZ3MgJiYgdmlld0Nhc3RlZC5ncm91cGluZ3MuZmlsdGVyKHQgPT4gIXQuYWdncmVnYXRpb24pLmxlbmd0aCA+IDApIHx8ICh0aGlzLmFycmF5TW9kZSAmJiB0aGlzLkVzVGhzRGlyZWN0aXZlLnNvbWUodCA9PiB0LnRoR3JvdXApKTtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gZGVpIGdydXBwaSBpbiBtb2RhbGl0w6AgYXJyYXkgZGV2byBzaXN0ZW1hcmUgdW4gcG8nIGRpIHZhcmlhYmlsaSBjaGUgZGl2ZW50YW5vIGluc2Vuc2F0ZVxyXG4gICAgICAgIGlmICh0aGlzLmFycmF5TW9kZSAmJiBoYXNSb3dHcm91cHMpXHJcbiAgICAgICAgICAgIHRoaXMuVXNlQXJyYXlNb2RlUGFnaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFJpZW1waW1lbnRvIGRlbGxhIFRNUEJvdW5kU291cmNlIGNvbiBnbGkgb2dnZXR0aSBjaGUgdmVycmFubm8gcG9pIG1vc3RyYXRpIGFkIGludGVyZmFjY2lhXHJcbiAgICAgICAgdGhpcy5UTVBCb3VuZFNvdXJjZSA9IHRoaXMuaXRlbXNfSC5nZXRJdGVtc0J5TW9kZShmYWxzZSwgIXRoaXMuaW50ZXJuYWxXcml0ZUNhbGwpO1xyXG5cclxuICAgICAgICAvLyBTZSBobyB1bmEgZ2VyYXJjaGlhLCBhc3NlZ25vIGkgbGl2ZWxsaSBnZXJhcmNoaWNpIGFsbGEgVE1QQm91bmRTb3VyY2VcclxuICAgICAgICBpZiAodGhpcy5IaWVyYXJjaHkgJiYgIWhhc1Jvd0dyb3VwcylcclxuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaHlNb2RlX0guYXNzaWduSGllcmFyY2h5TGV2ZWxzKHRoaXMuVE1QQm91bmRTb3VyY2UpO1xyXG5cclxuICAgICAgICAvLyBMJ2hhc2hpbmcgZGVnbGkgb2dnZXR0aSBsbyBmYWNjaW8gYSBwcmVzY2luZGVyZVxyXG4gICAgICAgIHRoaXMudXRpbGl0aWVzX0guY2FsY3VsYXRlSGFzaCh0aGlzLlRNUEJvdW5kU291cmNlKTtcclxuXHJcbiAgICAgICAgLy8gQXNzZWdubyBhIHVuYSB2YXJpYWJpbGUgbWlhIGwnZXZlbnR1YWxlIG92ZXJyaWRlIHBlciBsYSBjbGFzc2UgZGVsbGEgcmlnYVxyXG4gICAgICAgIC8vIFNlIHBvaSBzb25vIGluIG1vZGFsaXTDoCBnZXJhcmNoaWNhIGluaWV0dG8gYW5jaGUgbGEgY2xhc3NlIHBlciBsYSBjb25maWd1cmF6aW9uZSBkZWwgbGl2ZWxsbyBkZWxsYSByaWdhXHJcbiAgICAgICAgaWYgKCh0aGlzLlRNUEJvdW5kU291cmNlICYmIHRoaXMuUm93Q2xhc3NBc3NpZ25lcikgfHwgdGhpcy5IaWVyYXJjaHkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRNUEJvdW5kU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHRoaXMuVE1QQm91bmRTb3VyY2VbaV07XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9yb3dDbGFzcyA9IHRoaXMuUm93Q2xhc3NBc3NpZ25lciA/IHRoaXMuUm93Q2xhc3NBc3NpZ25lcihpdGVtKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9yb3dDbGFzcyArPSB0aGlzLkhpZXJhcmNoeSA/IFwiIGVzdC1yb3ctbHZsLVwiICsgaXRlbS5fbGV2ZWwgOiBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZW5lcmEgbGUgaW5mb3JtemlvbmkgZGkgcGFnaW5hemlvbmUgcGVyIGxhIHZpc3RhIGdsb2JhbGUgZGVsbCdlcy10YWJsZSAqL1xyXG4gICAgcHJpdmF0ZSBzZXR1cFBhZ2luZ0luZm9ybWF0aW9ucygpIHtcclxuXHJcbiAgICAgICAgLy8gRGVmYXVsdCBjaGUgdmFsZ29ubyBkaSBiYXNlLCBwb2kgZXZlbnR1YWxtZW50ZSBtb2RkYXRpIGRhbGxlIGZ1bnppb25pIHNvdHRvXHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50ID0gIXRoaXMuSGlkZVBhZ2luZ0NvdW50O1xyXG4gICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zID0gIXRoaXMuSGlkZVBhZ2luZ0J1dHRvbnM7XHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd1BhZ2luZyA9ICF0aGlzLkhpZGVQYWdpbmdcclxuICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5Vc2VzVmlldyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFycmF5TW9kZSAmJiB0aGlzLlVzZUFycmF5TW9kZVBhZ2luZyAmJiAhdGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlBhZ2VyQ291bnQgPSAoPGFueVtdPnRoaXMuVmlldykubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgJiYgdGhpcy5WaWV3Lmxlbmd0aCA+IDEwO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5WaWV3ID0gdGhpcy5WaWV3O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5Vc2VzVmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nT3B0aW9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmFycmF5TW9kZSAmJiAoIXRoaXMuVXNlQXJyYXlNb2RlUGFnaW5nIHx8IHRoaXMuU2VhcmNoVmlldykpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2VhcmNoVmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuVmlldyA9IHRoaXMuU2VhcmNoVmlld1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9IHRoaXMuU2VhcmNoVmlldy5vYmplY3Rjb3VudCB8fCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlBhZ2VyQ291bnQgPSAoPGFueVtdPnRoaXMuVmlldykubGVuZ3RoIHx8IDBcclxuXHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgJiYgKHRoaXMuVmlldy5sZW5ndGggPiAxMCB8fCAodGhpcy5TZWFyY2hWaWV3Py5vYmplY3Rjb3VudCB8fCAwKSA+IDEwKTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50ID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50IHx8ICh0aGlzLlZpZXcgJiYgdGhpcy5WaWV3Lmxlbmd0aCkgfHwgKHRoaXMuU2VhcmNoVmlldyAmJiB0aGlzLlNlYXJjaFZpZXcub2JqZWN0Y291bnQgJiYgdGhpcy5TZWFyY2hWaWV3Lm9iamVjdGNvdW50ICE9IC0xKTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd1BhZ2luZyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dQYWdpbmcgJiYgKHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zIHx8IHRoaXMuUGFnZXJPcHRpb25zLlNob3dDb3VudCk7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dQYWdpbmdPcHRpb25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMudmlld01vZGUpIHtcclxuICAgICAgICAgICAgbGV0IHRtcFZpZXcgPSB0aGlzLk1haW5Hcm91cFZpZXcgfHwgdGhpcy5WaWV3O1xyXG4gICAgICAgICAgICBsZXQgY291bnQgPSB0bXBWaWV3Py5ncm91cGNvdW50IHx8IHRtcFZpZXc/Lm9iamVjdGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TZWFyY2hlcyA9IHRtcFZpZXc/Lmdyb3VwY291bnQgIT0gbnVsbCAmJiB0bXBWaWV3Py5ncm91cGNvdW50ICE9IHVuZGVmaW5lZCA/ICdncm91cHMnIDogJ2l0ZW1zJztcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9IGNvdW50IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlZpZXcgPSB0bXBWaWV3O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgfHwgKHRtcFZpZXcgJiYgY291bnQgJiYgY291bnQgIT0gLTEpO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zICYmICh0bXBWaWV3LnBhZ2luZ2F2YWlsYWJsZSB8fCB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQpO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nT3B0aW9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBsYW5jaWF0byBkb3BvIGNoZSBsYSBzb3JnZW50ZSBkYXRpIMOoIHN0YXRhIGNvcnJldHRhbWVudGUgYmluZGF0YSwgc2kgb2NjdXBhIGRpIHJpY2FsY29sYXJlIHR1dHRvIGNpw7IgY2hlIHNlcnZlXHJcbiAgICAgKiBhbGwnZXMtdGFibGUgcGVyIHJlbmRlcml6emFyZSBpIHZhbG9yaSBkYSBtb3N0cmFyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvc3RCb3VuZFNvdXJjZUNhbGN1bGF0aW9uKCkge1xyXG4gICAgICAgIC8vIFJlc2V0dG8gdHV0dG8gdHJhbm5lIFJvd1REcyBlIFJvd1RIcyBwZXIgZXZpdGFyZSBmbGlja2VyaW5nLiBSb3dURHMgZSBSb3dUSHMgc2FyYW5ubyBtb2RpZmljYXRlIGFsbCdpbnRlcm5vIGRlbCBwcm9zc2ltbyBjaWNsbyBkaSBDRFxyXG4gICAgICAgIHRoaXMuUm93Q29udGV4dHMgPSBbXTtcclxuICAgICAgICB0aGlzLk9yZGVyRGlyZWN0aXZlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbUlEID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFBvc3RCb3VuZFNvdXJjZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQZXIgcG90ZXIgZGlzdGluZ3VlcmUgbGUgY2hpYW1hdGUgYSBxdWVzdG8gbWV0b2RvOiBEb3BvIGlsIHNldFRpbWVvdXQgc2UgdXNvIGdsaSBFc1RkL0VzVGggdmVjY2hpLCBzZW56YSBpbCBzZXRUaW1lb3V0IHNlIHVzbyBsZSBudW92ZSBkaXJldHRpdmUgKi9cclxuICAgIHByaXZhdGUgYXN5bmMgaW50ZXJuYWxQb3N0Qm91bmRTb3VyY2UoKSB7XHJcbiAgICAgICAgbGV0IFZpZXcgPSB0aGlzLlZpZXc7XHJcblxyXG4gICAgICAgIGxldCB0aHNUZHNQcm92aWRlcnMgPSBbLi4uKHRoaXMuRXNUaFRkUHJvdmlkZXIgPyBbdGhpcy5Fc1RoVGRQcm92aWRlcl0gOiBbXSksIC4uLnRoaXMuVGhUZFByb3ZpZGVyXTtcclxuICAgICAgICBpZiAodGhzVGRzUHJvdmlkZXJzPy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICBhd2FpdCBmb3JrSm9pbih0aHNUZHNQcm92aWRlcnMubWFwKHQgPT4gdC5Mb2FkZWRTaWduYWwpKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIGNvbG9ubmUgZGluYW1pY2hlIG1hIHNvbm8gaW4gbW9kYWxpdMOgIGRpbmFtaWNhIChsbyBjYXBpc2NvIHBlcmNow6kgYyfDqCB1bmEgdmlldyBwaWVuYSBkaSBnZW5lcmljaXRlbSkgbWV0dG8gaWwgZGVmYXVsdCBkZWxsZSBjb2xvbm5lXHJcbiAgICAgICAgdGhpcy5keW5hbWljTW9kZV9ILmV2ZW50dWFsbHlSZXZpZXdEeW5hbWljQ29sdW1ucygpO1xyXG5cclxuICAgICAgICAvLyBHZXN0aXNjZSBsYSByaWNoaWVzdGEgcGVyIGdydXBwaSBvIHBlciBzaW5nb2xpIG9nZ2V0dGlcclxuICAgICAgICB0aGlzLmJpbmREaXNwbGF5VG9Mb2FkZWRJdGVtc09yR3JvdXBzKFZpZXcpO1xyXG5cclxuICAgICAgICAvLyBRdWVzdG8gZGV2J2Vzc2VyZSBwZXIgZm9yemEgbGFuY2lhdG8gZG9wbyAqKmJpbmREaXNwbGF5VG9Mb2FkZWRJdGVtc09yR3JvdXBzKiogZGF0byBjaGUgw6ggbMOsIGNoZSBhbGN1bmUgY29zZSB2ZW5nb25vIHZhbG9yaXp6YXRlXHJcbiAgICAgICAgdGhpcy5zZXR1cFBhZ2luZ0luZm9ybWF0aW9ucygpO1xyXG5cclxuICAgICAgICAvLyBNb2x0ZSBjb3NlIHNvbm8gb3Z2aWFtZW50ZSBkaXNwb25pYmlsaSBzb2xvIGluIG1vZGFsaXTDoCBWaWV3XHJcbiAgICAgICAgaWYgKCh0aGlzLnZpZXdNb2RlIHx8IHRoaXMuYXJyYXlNb2RlKSAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB7XHJcbiAgICAgICAgICAgIGxldCB2aWV3ID0gdGhpcy52aWV3TW9kZSA/IFZpZXcgYXMgQXBwU2VhcmNoPGFueT4gOiBudWxsO1xyXG4gICAgICAgICAgICBsZXQgaXRlbXNBbmRHcm91cHMgPSB0aGlzLnZpZXdNb2RlID8gWy4uLih2aWV3Lml0ZW1zIHx8IFtdKSwgLi4uKHZpZXcuZ3JvdXBzIHx8IFtdKV0gOiBWaWV3IGFzIGFueVtdO1xyXG4gICAgICAgICAgICBsZXQgc2kgPSB0aGlzLnZpZXdNb2RlID8gdmlldy5zZWxlY3Rpb24gOiB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgICAgIC8vIE4uQjogUmlzcGV0dGFyZSBsJ29yZGluZSBkaSBxdWVzdGUgMyBtYWNyb2NhdGVnb3JpZSDDqCBWSVRBTEVcclxuICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgU2lzdGVtYXppb25pIGRpIFRILCBURCwgZSB2aXNpYmlsaXTDoCB2YXJpZSAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGhvIGRlZmluaXppb25pIGRpbmFtaWNoZSwgcHJpbWEgZGkgcXVhbHNpYXNpIGFsdHJhIGNvc2EgZGV2byB0cmFzZm9ybWFybGUgaW4gdGgvdGQgaW4gbW9kbyBjaGUgcG9pIGlsIGNvZGljZSBxdWkgc290dG8gZmFjY2lhIGxlIHN1ZSBtYWdpZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcIkdlbmVyYXRpbmcgdGhzIGFuZCB0ZHMgZnJvbSBEeW5hbWljIGRlZmluaXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmV0ID0gdGhpcy5keW5hbWljTW9kZV9ILmVtaXRUaHNBbmRUZHNCYXNlZE9uRHluYW1pY0RlZmluaXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRXNUaHMgPSByZXQudGhzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Fc1RkcyA9IHJldC50ZHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEdlc3Rpb25lIGRlbGxlIHZpZXcgaW4gbW9kYWxpdMOgIHJlcG9ydCwgaSB0aCBlIGkgdGQgdmVuZ29ubyByaWdlbmVyYXRpIGRhbGxlIGNvbmZpZ3VyYXppb25pIGRlbGxhIHZpZXdcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmFycmF5TW9kZSAmJiB2aWV3LnJlcG9ydF9jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJHZW5lcmF0aW5nIHRocyBhbmQgdGRzIGZyb20gcmVwb3J0IHJlc3VsdHNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmV0ID0gdGhpcy5yZXBvcnRNb2RlX0guZ2VuZXJhdGVUaHNBbmRUZHNGcm9tVmlldyh2aWV3KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRXNUaHMgPSByZXQudGhzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Fc1RkcyA9IHJldC50ZHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEVzcGFuZG8gaSB0aCBlIGkgdGQgbXVsdGlwbGkgZHVwbGljYW5kb2xpXHJcbiAgICAgICAgICAgIGxldCByZXQgPSB0aGlzLmNvbHVtbk1ldGFkYXRhX0guZXhwYW5kTXVsdGlUaHNBbmRUZHModGhpcy5Fc1RocywgdGhpcy5Fc1RkcywgaXRlbXNBbmRHcm91cHMpO1xyXG4gICAgICAgICAgICB0aGlzLkVzVGhzID0gcmV0LmV4cFRocztcclxuICAgICAgICAgICAgdGhpcy5Fc1RkcyA9IHJldC5leHBUZHM7XHJcblxyXG4gICAgICAgICAgICAvLyBHZW5lcm8gbGEgY2FjaGUgZGVpIHRoIGRhIHVzYXJlIGRhIHF1aSBpbiBwb2ksIGRvcG8gYXZlcmdsaSBsYXNjaWF0byBmYXJlIGxlIHN1ZSBjb3NlIGluIGNhc28gY2kgc2lhbm8gZGVpIG11bHRpIG8gZGVpIHJlcG9ydFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuRXNUaHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoaXMuRXNUaHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRoc0NhY2hlW3RoLnRoXSA9IHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGhzQ2FjaGVTZXQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gUHJlcGFzc2FnZ2lvIHBlciB0aXJhcmUgZnVvcmkgdHV0dGUgbGUgaW5mbyB1dGlsaSBzdWdsaSBoZWFkZXJzIGluIG1vZG8gZGEgbm9uIHJpY2Fjb2xhcnNlbGkgc2VtcHJlIGRvcG9cclxuICAgICAgICAgICAgbGV0IGhJID0gdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmV2YWx1YXRlSGVhZGVyc0dyb3VwaW5nSW5mb3ModGhpcy5Fc1Rocyk7XHJcblxyXG4gICAgICAgICAgICAvLyBWYWx1dGEgbG8gc3RhdG8gaW5pemlhbGUgZGkgc2VsZXppb25lIGEgcmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5ldmFsdWF0ZVNpbmdsZUNlbGxTZWxlY3Rpb24oaXRlbXNBbmRHcm91cHMsIGhJLmxlYWZzLCB0aGlzLkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbik7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6AgYXJyYXkgbm9uIGhvIHVuIGJhY2tlbmQuLi5cclxuICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBpbmdfSC5hcnJheU1vZGVSZXZpZXdHcm91cGluZ3MoaEkubGVhZnMpOyAgLy8gLi4uIGkgcmFnZ3J1cHBhbWVudGkgbGkgZGV2byBmYXJlIGxhdG8gY2xpZW50XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmV2aWV3Q29sdW1uc0xpc3QoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWdnaW9ybmEgbGEgbGlzdGEgZGVsbGUgY29sb25uZSBkYSBtb3N0cmFyZSBuZWxsYSBkaWFsb2cgcGVyIG9yZGluYW1lbnRvIGVjY1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guYWxpZ25Db2x1bW5zSWZMb2FkZWRWaWV3KHZpZXcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gU2Ugc3RvIGNhcmljYW5kbyB1bmEgVmlldyBkYSBob3Rwb3RhdG8gKHF1aW5kaSBjb24gc2F2ZWRzdGF0ZSA9IHRydWUpIHJpYWxsaW5lbyBsYSB2aXNpYmlsaXTDoCBkZWxsZSBjb2xvbm5lIGUgaWwgbG9ybyBvcmRpbmUuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5tb3ZlRml4ZWRDb2x1bW5zQXRUaGVCZWdpbm5pbmcoaEkubGVhZnMsIHRoaXMuRXNUZHMpOyAvLyBTcG9zdG8gdHV0dGUgbGUgY29zZSBmaXhlZCBhbGwnaW5pemlvIGluIG1vZG8gY2hlIGxhIGNyZWF6aW9uZSBkaSB0aCBlIHRkIHNpYSBwacO5IHNuZWxsYSAoVXRpbGl6emEgbGUgQ29sdW1uc0xpc3QsIHF1aW5kaSBkZXYnZXNzZXJlIHJpY2hpYW1hdGEgUElSTUEgZGkgcmV2aWV3Q29sdW1uc0xpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5hbGlnbkhlYWRlcnNPcmRlcmluZyhoSS5sZWFmcywgdmlldyk7ICAgICAgICAgICAgICAgICAvLyBBbGxpbmVvIGdsaSBvcmRpbmFtZW50aSBhZ2xpIGhlYWRlclxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KGhJLmxlYWZzLCB0aGlzLkVzVGRzLCB2aWV3KTsgLy8gTGF2b3JvIHN1aSBUSCBlZCBldmVudHVhbG1lbnRlIG1vZGlmaWNvIGxhIHZpc2liaWxpdMOgIGFuY2hlIGRlaSBURC5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmV2YWx1YXRlUGlubmVkQ29sdW1uc1dpZHRoKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlIHNvbm8gcHJlc2VudGkgY29sb25uZSBwaW5uYXRlIHZhbHV0YSBsYSBkaW1lbnNpb25lIGRlbCBjb250ZW5pdG9yZVxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guZ2VuZXJhdGVEZWZhdWx0T3JkZXIoaEkubGVhZnMsIHZpZXcpOyAgICAgICAgICAgICAgICAgLy8gR2VuZXJvIGxlIGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50bywgY2hlIHNpYW5vIGRlZmF1bHQgbyBkZXJpdmFudGkgZGFsbGEgQXBwU2VhcmNoXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5ldmFsdWF0ZUhlYWRlckdyb3VwcyhoSSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWx1dG8gaSByYWdncnVwcGFtZW50aSBkZWdsaSBoZWFkZXIgc2UgcHJlc2VudGlcclxuXHJcbiAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgIEdlbmVyYXppb25lIGJpbmRpbmcgcGVyIHJpZ2hlIGUgY29sb25uZSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVSb3dUaHMoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFjY29sZ28gaSBUSFxyXG4gICAgICAgICAgICB0aGlzLmV2YWx1YXRlUm93VGRzKGhJLmxlYWZzLCB0aGlzLkVzVGRzKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhY2NvbGdvIGkgVEQgaW4gY29udGVzdGkgc2VwYXJhdGksIHVuIGNvbnRlc3RvIHBlciBvZ25pIGl0ZW0gbyBncnVwcG9cclxuXHJcbiAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgIFVsdGltaSBhZ2dpdXN0bWFlbnRpIGRlaSBiaW5kaW5nICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5hcHBseU9yZGVyaW5nKHZpZXcsIHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGxpY28gbCdvcmRpbmFtZW50byBzdWxsZSBjb2xvbm5lIChub24gQVNDIERFU0MsIG1hIFwicHJpbWEgcXVlc3RhIG8gcXVlbGxhIGNvbG9ubmFcIilcclxuICAgICAgICAgICAgdGhpcy5Nb3ZlVGVtcG9yYXJ5VmFyaWFibGVzVG9SZWFsT25lcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGVnbyBUSCBlIFREIGFnZ2l1c3RhdGkgZmlubyBhZCBvcmEgYWxsZSB2YXJpYWJpbGkgZGkgQmluZGluZyBIVE1MXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guZXZhbHVhdGVTZWxlY3Rpb24oaXRlbXNBbmRHcm91cHMsIHNpKTsgICAgICAgICAgICAgICAgIC8vIFJpYWxsaW5lbyBsZSBpbmZvIGRpIHNlbGV6aW9uZSBkZWdsaSBlbGVtZW50aSBkZWxsYSBWaWV3XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5SZXNlYXJjaE5lZWRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVzZWFyY2hOZWVkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodGhpcy52aWV3TW9kZSB8fCB0aGlzLmFycmF5TW9kZSkgJiYgIXRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHtcclxuICAgICAgICAgICAgLy8gUmlhbGxpbmVvIGxlIGluZm8gZGkgc2VsZXppb25lIGRlZ2xpIGVsZW1lbnRpIGRlbGxhIFZpZXdcclxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy52aWV3TW9kZSA/IChWaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5pdGVtcyA6IFZpZXcgYXMgYW55W107XHJcbiAgICAgICAgICAgIGxldCBzaSA9IHRoaXMudmlld01vZGUgPyAoVmlldyBhcyBBcHBTZWFyY2g8YW55Pikuc2VsZWN0aW9uIDogdGhpcy5hcnJheW1vZGVTZWxlY3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guZXZhbHVhdGVTZWxlY3Rpb24oaXRlbXMsIHNpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFBlciBlc3NlcmUgc2ljdXJvIGNoZSBkb3BvIHVuIGJpbmQgZGkgb2dnZXR0aSBsYSBlcy10YWJsZSBhZ2dpb3JuaSBsYSBncmFmaWNhXHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgdGhpcy5GaXJzdEJpbmQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIGlsIGJpbmRpbmcgZGVnbGkgb2dnZXR0aSBwZXJ2ZW51dGkgZGEgcXVlc3RhIGNoaWFtYXRhIGNvbiBnbGkgb2dnZXR0aSBlZmZldHRpdmFtZW50ZSBkYSBncmFmaWNhcmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IHZpZXcgVmlldyBkYSBjdWkgc29ubyBhcnJpdmF0aSBnbGkgb2dnZXR0aS4gUHXDsiBlc3NlcmUgbyB1biBhcnJheSBzZSBzb25vIGluICoqYXJyYXlNb2RlKiogbyB1bmEgQXBwU2VhcmNoPFQ+IHNlIHNvbm8gaW4gKip2aWV3TW9kZSoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgYmluZERpc3BsYXlUb0xvYWRlZEl0ZW1zT3JHcm91cHModmlldzogYW55KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlRNUEJvdW5kU291cmNlIHx8IHRoaXMuVE1QQm91bmRTb3VyY2UubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5CYXNlSXRlbXNDb3VudCA9IDA7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRTb3VyY2UgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlNb2RlIHx8ICF0aGlzLlVzZUN1c3RvbUNlbGxzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRTb3VyY2UgPSB0aGlzLlRNUEJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICB0aGlzLkJhc2VJdGVtc0NvdW50ID0gdmlldz8ub2JqZWN0Y291bnQgfHwgdmlldz8ubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBncm91cGluZ0tleXMgPSB2aWV3Py5ncm91cGluZ3M/LmZpbHRlcih0ID0+ICF0LmFnZ3JlZ2F0aW9uKT8ubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgaWYgKGdyb3VwaW5nS2V5cyA9PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYm91bmRTb3VyY2UgPSB0aGlzLlRNUEJvdW5kU291cmNlO1xyXG4gICAgICAgICAgICB0aGlzLkJhc2VJdGVtc0NvdW50ID0gdmlldz8ub2JqZWN0Y291bnQgfHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yb3dHcm91cGluZ19ILmhhbmRsZU5ld0RhdGFPblJvd0dyb3VwaW5nKHZpZXcsIGdyb3VwaW5nS2V5cyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE1ldG9kbyByaWNoaWFtYXRvIHNvbG8gcXVhbmRvICoqVE1QUm93VERzKiogZSAqKlRNUFJvd1RIcyoqIHNvbm8gY29tcGxldGFtZW50ZSBnZW5lcmF0aSBlZCBhZ2dpdXN0YXRpLiBTZXJ2ZSBwZXIgY29sbGVnYXJsaSBhbGxlIHZhcmlhYmlsaSB1c2F0ZSBsYXRvIGJpbmRpbmcgSFRNTCAqL1xyXG4gICAgcHJpdmF0ZSBNb3ZlVGVtcG9yYXJ5VmFyaWFibGVzVG9SZWFsT25lcygpIHtcclxuXHJcbiAgICAgICAgdGhpcy5Sb3dURHMgPSB0aGlzLlRNUFJvd1REcztcclxuICAgICAgICB0aGlzLlJvd1RIcyA9IHRoaXMuVE1QUm93VEhzO1xyXG4gICAgICAgIHRoaXMuUm93VGhHcm91cHMgPSB0aGlzLlRNUFJvd1RoR3JvdXBzID8gdGhpcy5UTVBSb3dUaEdyb3Vwcy5yZXZlcnNlKCkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuRW1wdHlSb3dUZHMgPSB0aGlzLmlzRW1wdHkodGhpcy5Sb3dURHMpO1xyXG5cclxuICAgICAgICB0aGlzLkNvbHVtbnMuVmlzaWJpbGUgPSB0aGlzLlJvd1RIcy5maWx0ZXIodCA9PiB0LlZpc2libGUpLmxlbmd0aDtcclxuICAgICAgICB0aGlzLkNvbHVtbnMuVmlzaWJsZVVucGlubmVkID0gdGhpcy5Sb3dUSHMuZmlsdGVyKHQgPT4gdC5WaXNpYmxlICYmICF0LlBpbm5lZCkubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuQ29sdW1ucy5HbG9iYWwgPSB0aGlzLkNvbHVtbnMuVmlzaWJsZVVucGlubmVkICsgKHRoaXMuSGFzUGlubmVkQ29sdW1ucyA/IDEgOiAwKSArICh0aGlzLlNlbGVjdGlvbiA/IDEgOiAwKSArICh0aGlzLlJlbW92YWwgPyAxIDogMCkgKyAodGhpcy5FeHBvcnQgfHwgdGhpcy5IaWRkZW5Db2x1bW5zIHx8IHRoaXMuQ29sdW1uc09yZGVyaW5nIHx8IHRoaXMuQ29ybmVyTWVudU9wdGlvbnMgPyAxIDogMClcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBNZXRvZG8gcGVyIGNhcGlyZSBzZSB1biBvZ2dldHRvIMOoIGNvbXBsZXRhbWVudGUgdnVvdG8gXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSBvYmogT2dnZXR0byBkYSBjb250cm9sbGFyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgbCdvZ2dldHRvIMOoIHZ1b3RvLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBpc0VtcHR5KG9iajogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgZm9yICh2YXIgXyBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSBvIGRlc2VsZXppb25hcmUgaW4gbWFuaWVyYSBhcmJpdHJhcmlhIGRlZ2xpIG9nZ2V0dGlcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnlbXX0gaXRlbXMgT2dnZXR0aSBkYSBzZWxlemlvbmFyZSBvIGRlc2VsZXppb25hcmVcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gc2VsZWN0ICoqdHJ1ZSoqIHBlciBzZWxlemlvbmFybGksICoqZmFsc2UqKiBwZXIgbm9uIHRvY2NhcmxpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRTZWxlY3Rpb25TdGF0dXMoaXRlbXM6IGFueVtdLCBhbGw6IGJvb2xlYW4sIHNlbGVjdDogYm9vbGVhbiwgZW1pdDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKGFsbCkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuU2VsZWN0QWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiSW1wb3NzaWJpbGUgaW1wb3N0YXJlIGxhIHNlbGV6aW9uZSBjb24gbCdhbGwgc2VsZWN0aW9uIHF1YW5kbyBsJ0lucHV0IFNlbGVjdEFsbCDDqCBmYWxzZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHNpID0gKHRoaXMuVmlldyBhcyBBcHBTZWFyY2g8YW55Pik/LnNlbGVjdGlvbiB8fCB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuICAgICAgICAgICAgLy9zZSBkZXNlbGV6aW9ubyBjb24gYXR0dWFsZSBzZWxlemlvbmUgYWQgYWxsIG8gc2Ugc2VsZXppb25vIGNvbiBhdHR1YWxlIHNlbGV6aW9uZSBtYW51YWxlIGRldm8gcmljaGlhbWFyZSBsYSAqKnNlbGVjdEFsbE9yUmVzZXRTZWxlY3Rpb24qKlxyXG4gICAgICAgICAgICBpZiAoKHNpLmFsbCAmJiAhc2VsZWN0KSB8fCAoIXNpLmFsbCAmJiBzZWxlY3QpKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5zZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5oYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtcywgc2VsZWN0KTtcclxuXHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICAgIGlmIChlbWl0KVxyXG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHRoaXMuYXJyYXltb2RlU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVmZmV0dHVhIHVuIGhhcmQgcmVzZXQgZGVsbGEgc2VsZXppb25lXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZXNldFNlbGVjdGlvbihlbWl0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uQ2FjaGVzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZpZXdNb2RlICYmIHRoaXMuVmlldykge1xyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZWN0aW9uID0gbmV3IEl0ZW1zU2VsZWN0aW9uKFtdKTtcclxuICAgICAgICAgICAgaWYgKGVtaXQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHRoaXMuVmlldy5zZWxlY3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmFycmF5TW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbiA9IG5ldyBJdGVtc1NlbGVjdGlvbihbXSk7XHJcbiAgICAgICAgICAgIGlmIChlbWl0KVxyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdCh0aGlzLmFycmF5bW9kZVNlbGVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0b2RvIGNoZSBnZXN0aXNjZSBpbCBjYW1iaW8gZGkgT3JkaW5hbWVudG8gZGkgdW5hIGNvbG9ubmFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSUQgZGVsbGEgY29sb25uYSBpbCBjdWkgb3JpZG5hbWVudG8gw6ggY2FtYmlhdG9cclxuICAgICAqIEBwYXJhbSB7J0RFU0MnIHwgJ0FTQyd9IG9yZGVyIE51b3ZvIG9yZGluZSBzZWxlemlvbmF0byBwZXIgbGEgY29sb25uYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdGhPcmRlckNoYW5nZWQoaWQ6IHN0cmluZywgb3JkZXI/OiAnREVTQycgfCAnQVNDJykge1xyXG4gICAgICAgIGlmICghdGhpcy52aWV3TW9kZSAmJiAhdGhpcy5hcnJheU1vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdPcmRlciBjaGFuZ2VkIG9uIGEgdGFibGUgbm90IGluIHZpZXdNb2RlIG9yIEFycmF5IG1vZGUuIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5PcmRlckJ5Q29sdW1uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5oYW5kbGVUSE9yZGVyQ2hhbmdlKGlkLCBvcmRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gZGEgY2hpYW1hcmUgb2duaSB2b2x0YSBjaGUgc2kgdnVvbGUgZGFyZSBldmlkZW56YSBhbGwnZXN0ZXJubyBkZWwgYmlzb2dubyBkaSByaWVmZmV0dHVhcmUgbGEgcmljZXJjYVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHJlc2V0c1BhZ2UgSW5kaWNhIGFsIGxpc3RlbmVyIGNoZSBkZXZlIHJlc2V0dGFyZSBpbCBudW1lcm8gZGkgcGFnaW5hXHJcbiAgICAgKiBAcGFyYW0ge0FwcFNlYXJjaDxhbnk+fSB2aWV3T3ZlcnJpZGUgT3ZlcnJpZGUgZGVsbGEgdmlldyBkYSBlbWV0dGVyZSBwZXIgcXVlc3RhIHJpY2VyY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIGVtaXRTZWFyY2hSZXF1ZXN0KHJlc2V0c1BhZ2U6IGJvb2xlYW4sIHZpZXdPdmVycmlkZT86IEFwcFNlYXJjaDxhbnk+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMudmlld01vZGUgJiYgIXZpZXdPdmVycmlkZSkge1xyXG4gICAgICAgICAgICAodGhpcy5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5pbnRlcm5hbHNlYXJjaHJlcXVlc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2aWV3T3ZlcnJpZGUpIHtcclxuICAgICAgICAgICAgaWYgKHJlc2V0c1BhZ2UpXHJcbiAgICAgICAgICAgICAgICB2aWV3T3ZlcnJpZGUucGFnZSA9IDE7XHJcbiAgICAgICAgICAgIHZpZXdPdmVycmlkZS5pbnRlcm5hbHNlYXJjaHJlcXVlc3QgPSB0cnVlXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2VhcmNoSW5Qcm9ncmVzcyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLlZpZXcgJiYgIXRoaXMuVmlldy5zZWxmc2VhcmNoICYmIHRoaXMuRXNUYWJsZUhhbmRsZWRTZWFyY2gpIHtcclxuICAgICAgICAgICAgdGhpcy5WaWV3LnNlbGZzZWFyY2ggPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hSZXF1ZXN0LmVtaXQoZmFsc2UpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5vblNlYXJjaFJlcXVlc3QuZW1pdCh2aWV3T3ZlcnJpZGUgPyB2aWV3T3ZlcnJpZGUgOiByZXNldHNQYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBhcnRlbmRvIGRhZ2xpICoqRXNUZHMqKiBiaW5kYXRpIGdlbmVyYSwgYWxsJ2ludGVybm8gZGVsIGRpemlvbmFyaW8gKipUTVBSb3dURHMqKiB0dXR0aSBpIGNvbnRlc3RpIGRlaSB2YXJpIG9nZ2V0dGkuXHJcbiAgICAgKlxyXG4gICAgICogVmVuZ29ubyBlc2NsdXNpIGkgVEQgXCJJbnRlcm5pXCIgaW4gcXVhbnRvIHZlbmdvbm8gZ2VuZXJhdGkgZGFnbGkgb3JpZ2luYWxpIHF1aW5kaSBpbmNsdWRlcmxpIHZvcnJlYmJlIGRpcmUgcmllZmZldHR1YXJlIGxlIG9wZXJhemlvbmkgZHVlIHZvbHRlXHJcbiAgICAgKlxyXG4gICAgICogQ29zdG86IDIgc2NhbiBFc1RocywgMSBzY2FuIEVzVGRzXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBDb2xvbm5lIGRlbGxhIHRhYmVsbGFcclxuICAgICAqIEBwYXJhbSB7RXNUZERpcmVjdGl2ZVtdfSB0ZHMgQ2VsbGUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlUm93VGRzKHRoczogRXNUaERpcmVjdGl2ZVtdLCB0ZHM6IEVzVGREaXJlY3RpdmVbXSkge1xyXG4gICAgICAgIGlmICh0ZHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGNvbHVtbnNDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGFibGVDb2x1bW4gfSA9IHt9O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBjb2xpID0gMDsgY29saSA8IHRoaXMuQ29sdW1uc0xpc3QubGVuZ3RoOyBjb2xpKyspIHtcclxuICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuQ29sdW1uc0xpc3RbY29saV07XHJcbiAgICAgICAgICAgIGNvbHVtbnNDYWNoZVtjb2wuaWRdID0gY29sO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5UTVBSb3dURHMgPSB7fTtcclxuICAgICAgICAvLyBWYXJpYWJpbGUgZCdhcHBvZ2dpbyBwZXIgcGVybWV0dGVybWkgZGkgaW5zZXJpcmUgdHV0dGUgbGUgY29sb25uZSBcIkZpeGVkXCIgZGF2YW50aVxyXG4gICAgICAgIGxldCBjb250ZXh0Rml4ZWRzOiB7IFtjb250ZXh0OiBzdHJpbmddOiBudW1iZXIgfSA9IHt9O1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0ZCA9IHRkc1tpXTtcclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZFNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLmJvdW5kU291cmNlW2ldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGN0eCA9IGl0ZW0uX2hhc2g7XHJcbiAgICAgICAgICAgICAgICBsZXQga2V5ID0gdGQudGQ7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGggPSB0aGlzLnRoc0NhY2hlW3RkLnRkXTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISF0aClcclxuICAgICAgICAgICAgICAgICAgICB0aC5fcmVmZXJlbmNlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2tpcHBhcmUgc2VuemEgdGggKGNhc2lzdGljYSB0YWJlbGxhIGRpbmFtaWNhKVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoICYmIHRoLnRoSWYgJiYgKHRkLnRkSWYgfHwgdGgudGhHcm91cCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGhDYXN0ZWQgPSA8RXNUaERpcmVjdGl2ZT50aDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXNGaXhlZCA9IHRoLnRoRml4ZWQgfHwgdGgudGhHcm91cCB8fCB0aC50aFBpbm5lZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbVRvQWRkID0gaXRlbS5faXRlbSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZEVsZW1lbnQ+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVmdEJvcmRlcjogKDxhbnk+dGhDYXN0ZWQpLl9sYm9yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJpZ2h0Qm9yZGVyOiAoPGFueT50aENhc3RlZCkuX3Jib3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQ6IGtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpbm5lZDogY29sdW1uc0NhY2hlW3RkLnRkXS5waW5uZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaW5uZWRXaWR0aDogdGhDYXN0ZWQudGhQaW5uZWRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwSGVhZGVyOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwQWdncmVnYXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJsZTogY29sdW1uc0NhY2hlW3RkLnRkXS52aXNpYmxlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzOiB0ZC50ZENsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSWNvbkNsYXNzOiB0ZC50ZEljb25DbGFzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmRpdGlvbkZpZWxkOiB0ZC50ZENvbmRpdGlvbkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uVmFsdWU6IHRkLnRkQ29uZGl0aW9uVmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaXRsZTogdGQudGRUaXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ6IHRkLnRkQ29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlOiB0aENhc3RlZC50aEdyb3VwICYmICF0aGlzLlNob3dJdGVtR3JvdXBzQ29sdW1ucyA/IG51bGwgOiB0ZC5UZW1wbGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpOiB0ZC5fbXVsdGksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aVByb3A6IHRkLl9tdWx0aSA/IHRkLnRkLnNwbGl0KCdfJylbMF0gOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlJbmRleDogdGQuX211bHRpID8gdGQudGQuc3BsaXQoJ18nKVsxXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGlnbm1lbnQ6ICh0ZC50ZEFsaWdubWVudCB8fCB0aC50aEFsaWdubWVudCB8fCB0aGlzLkRlZmF1bHRBbGlnbm1lbnQpLnRvTG93ZXJDYXNlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JtYXQ6IHRkLnRkRm9ybWF0IHx8IHRoLnRoRm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlOYW1lOiB0aC50aFByb3BlcnR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlUeXBlOiB0aC50aFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVNvdXJjZTogdGgudGhTb3VyY2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wQWNjZXNzb3I6IHRkLnRkUHJvcGVydHlBY2Nlc3NvcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvdXRlUGF0aDogKDxhbnk+dGhDYXN0ZWQpLnRoUm91dGVQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUm91dGVQYXJhbWV0ZXJQcm9wZXJ0aWVzOiAoPGFueT50aENhc3RlZCkudGhSb3V0ZVBhcmFtZXRlclByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VGRFbGVtZW50PntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlZnRCb3JkZXI6ICg8YW55PnRoQ2FzdGVkKS5fbGJvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSaWdodEJvcmRlcjogKDxhbnk+dGhDYXN0ZWQpLl9yYm9yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEOiBrZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaW5uZWQ6IGNvbHVtbnNDYWNoZVt0ZC50ZF0ucGlubmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlubmVkV2lkdGg6IHRoQ2FzdGVkLnRoUGlubmVkV2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcm91cEhlYWRlcjogdGhDYXN0ZWQudGhHcm91cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwQWdncmVnYXRpb246ICEhdGhDYXN0ZWQudGhBZ2dyZWdhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpc2libGU6IGNvbHVtbnNDYWNoZVt0ZC50ZF0udmlzaWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdyYXBzOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzOiB0aENhc3RlZC50aEdyb3VwQ2xhc3MgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250ZW50OiB0aGlzLnJvd0dyb3VwaW5nX0guZ2V0R3JvdXBDZWxsRGlzcGxheSg8R3JvdXA+aXRlbSwga2V5LCA8RXNUaERpcmVjdGl2ZT50aClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuVE1QUm93VERzW2N0eF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5UTVBSb3dURHNbY3R4XS5wdXNoKGl0ZW1Ub0FkZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlJvd0NvbnRleHRzLnB1c2goY3R4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5UTVBSb3dURHNbY3R4XSA9IFtpdGVtVG9BZGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Rml4ZWRzW2N0eF0gPSBpc0ZpeGVkID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZSBub24gaG8gb2dnZXR0aSDDqCBpbnV0aWxlIGNoZSBjb250cm9sbG8gZ2xpIGVycm9yaSwgZGF0byBjaGUgZ2xpIGVzLXRkIG5vbiBlc2lzdGVyYW5ubyBkaSBjZXJ0byBlIGRpIGNvbnNlZ3VlbnphIGdsaSBlcy10aCBub24gc2FyYW5ubyByZWZlcmVuemlhdGlcclxuICAgICAgICBpZiAodGhpcy5UTVBCb3VuZFNvdXJjZS5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB2YXIgZXJyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgIGlmICghdGguX3JlZmVyZW5jZWQpXHJcbiAgICAgICAgICAgICAgICBlcnJzLnB1c2godGgudGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVycnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB2YXIgZXJySWRzID0gZXJycy5qb2luKCcsICcpO1xyXG4gICAgICAgICAgICB0aHJvdyBcIkwnSUQgZGkgdW5vIG8gcGnDuSBFc1RoIG5vbiBoYW5ubyBhbGN1biBFc1RkIGFzc29jaWF0bzogXCIgKyBlcnJJZHM7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFydGVuZG8gZGFnbGkgKipFc1RocyoqIGJpbmRhdGkgZ2VuZXJhLCBhbGwnaW50ZXJubyBkZWwgZGl6aW9uYXJpbyAqKlRNUFJvd1RIcyoqIHR1dHRpIGkgY29udGVzdGkgZGVpIHZhcmkgb2dnZXR0aS5cclxuICAgICAqXHJcbiAgICAgKiBWZW5nb25vIGVzY2x1c2kgaSBUSCBcIkludGVybmlcIiBpbiBxdWFudG8gdmVuZ29ubyBnZW5lcmF0aSBkYWdsaSBvcmlnaW5hbGkgcXVpbmRpIGluY2x1ZGVybGkgdm9ycmViYmUgZGlyZSByaWVmZmV0dHVhcmUgbGUgb3BlcmF6aW9uaSBkdWUgdm9sdGVcclxuICAgICAqXHJcbiAgICAgKiBDb3N0bzogMSBzY2FuIEVzVGhzICsgMSBzY2FuIENvbHVtbnNMaXN0XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtFc1RoRGlyZWN0aXZlW119IHRocyBDb2xvbm5lIGRlbGxhIHRhYmVsbGFcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBldmFsdWF0ZVJvd1Rocyh0aHM6IEVzVGhEaXJlY3RpdmVbXSkge1xyXG4gICAgICAgIGlmICh0aHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgbGV0IGNvbHVtbnNMaXN0Q2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBFc1RhYmxlQ29sdW1uIH0gPSB7fTtcclxuICAgICAgICBsZXQgY2FzdGVkVmlldyA9IDxBcHBTZWFyY2g8YW55Pj50aGlzLlZpZXc7XHJcbiAgICAgICAgbGV0IGdyb3VwaW5nc1VuZGVmaW5lZCA9IHRoaXMudmlld01vZGUgJiYgKGNhc3RlZFZpZXcgJiYgIWNhc3RlZFZpZXcuZ3JvdXBpbmdzIHx8IGNhc3RlZFZpZXcuZ3JvdXBpbmdzLmxlbmd0aCA9PSAwKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLkNvbHVtbnNMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBpdG0gPSB0aGlzLkNvbHVtbnNMaXN0W2ldO1xyXG4gICAgICAgICAgICBjb2x1bW5zTGlzdENhY2hlW2l0bS5pZF0gPSBpdG1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuVE1QUm93VEhzID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzW2ldO1xyXG4gICAgICAgICAgICBsZXQgdG9BZGQ6IFRoRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aC50aElmIHx8IHRoLnRoR3JvdXApIHtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgdGhDbGFzcyA9ICh0aC50aENsYXNzIHx8IFwiXCIpICsgKHRoLnRoU2hyaW5rID8gXCIgYXBwLWNvbC1taW5cIiA6IFwiXCIpICsgKHRoLnRoR3JvdXAgPyBcIiBlc3QtY29sLW1pblwiIDogXCJcIik7XHJcbiAgICAgICAgICAgICAgICB0b0FkZCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBQaW5uZWQ6IGNvbHVtbnNMaXN0Q2FjaGVbdGgudGhdLnBpbm5lZCxcclxuICAgICAgICAgICAgICAgICAgICBGaXhlZDogdGgudGhGaXhlZCxcclxuICAgICAgICAgICAgICAgICAgICBQaW5uZWRXaWR0aDogdGgudGhQaW5uZWRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBJRDogdGgudGgsXHJcbiAgICAgICAgICAgICAgICAgICAgVmlzaWJsZTogdGgudGhWaXNpYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgIENsYXNzOiB0aENsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgIE9yZGVyOiB0aC50aE9yZGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIE9yZGVyYWJsZTogdGgudGhPcmRlcmFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGU6IHRoLlRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgIEFsaWdubWVudDogKHRoLnRoQWxpZ25tZW50IHx8IHRoaXMuRGVmYXVsdEFsaWdubWVudCkudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAvLyBTZSBub24gw6ggbmVzc3VuIGNvbnRlbnV0byBuw6kgbmVzc3VuIHRlbXBsYXRlIG1vc3RybyBzZW1wbGljZW1lbnRlIGwnSUQgZGVsbCdoZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICBDb250ZW50OiB0aC50aFN0YXRpY0NvbnRlbnQgIT0gbnVsbCA/IHRoLnRoU3RhdGljQ29udGVudCA6IHRoLlRlbXBsYXRlID8gJycgOiB0aC50aCxcclxuICAgICAgICAgICAgICAgICAgICBXcmFwOiB0aC50aFdyYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgTGVmdEJvcmRlcjogKDxhbnk+dGgpLl9sYm9yZCxcclxuICAgICAgICAgICAgICAgICAgICBSaWdodEJvcmRlcjogKDxhbnk+dGgpLl9yYm9yZCxcclxuICAgICAgICAgICAgICAgICAgICBNdWx0aTogdGguX211bHRpLFxyXG4gICAgICAgICAgICAgICAgICAgIE11bHRpQ29udGVudDogdGguX211bHRpX2NvbnRlbnRcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB0aGlzLlRNUFJvd1RIcy5wdXNoKHRvQWRkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTZSBobyB1biBtb2RlbGxvIGNoZSBkZXZlIGZ1bnppb25hcmUgYSByb3dncm91cGluZyBtYSBub24gw6ggYW5jb3JhIHN0YXRhIGVmZmV0dHVhdGEgbmVzc3VuYSByaWNlcmNhIHN1aSBncnVwcGkgcHJpbmNpcGFsaSAoZ3JvdXBpbmdzVW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgICAgLy8gbGkgZ2VuZXJvIGUgbWFuZG8gbGEgcHJpbWEgcmljZXJjYSBjaGUgZGV2J2Vzc2VyZSBzcGVkaXRhIGFsIGJhY2tlbmQgcGVyIGlsIHByaW1vIGNhcmljYW1lbnRvIGRlaSBncnVwcGlcclxuICAgICAgICAgICAgICAgIGlmIChncm91cGluZ3NVbmRlZmluZWQgJiYgKHRoLnRoQWdncmVnYXRpb24gfHwgdGgudGhHcm91cCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ3JvdXBBZ2dyZWdhdGlvbnM6IEdyb3VwT3JBZ2dyZWdhdGlvbltdID0gdGhpcy5yb3dHcm91cGluZ19ILmdldEdyb3VwQWdncmVnYXRpb25zKHRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNhc3RlZFZpZXcuZ3JvdXBpbmdzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXN0ZWRWaWV3Lmdyb3VwaW5ncyA9IGdyb3VwQWdncmVnYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzdGVkVmlldy5ncm91cGluZ3MucHVzaCguLi5ncm91cEFnZ3JlZ2F0aW9ucyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuUmVzZWFyY2hOZWVkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Bvc3RhIGxhIHJpY2VyY2EgZGkgdW5hIHBhZ2luYSBpbiBhdmFudGkgKG8gaW5kaWV0cm8pXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgTnVtZXJvIGRpIHBhZ2luZSBkYSBhZ2dpdW5nZXJlIChvIHNvdHRyYXJyZSwgc2UgbmVnYXRpdm8pIGFsbGEgcGFnaW5hIGF0dHVhbGVcclxuICAgICAqIEBwYXJhbSB7YW55fSBwYWdlciBFbGVtZW50byBkaSBzZXBhcmF6aW9uZSBzdSBjdWkgw6ggZWZmZXR0dWF0YSBsYSByaWNlcmNhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRUb1BhZ2VHcm91cChwYWdlOiBudW1iZXIsIHBhZ2VyOiBHcm91cFBhZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5nb1RvUGFnZUdyb3VwKHBhZ2VyLnZpZXcucGFnZSArIHBhZ2UsIHBhZ2VyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNwb3N0YSBsYSByaWNlcmNhIGFsbGEgcGFnaW5hIHNwZWNpZmljYXRhXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgUGFnaW5hIGEgY3VpIG5hdmlnYXJlXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gcGFnZXIgRWxlbWVudG8gZGkgc2VwYXJhemlvbmUgc3UgY3VpIMOoIGVmZmV0dHVhdGEgbGEgcmljZXJjYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ29Ub1BhZ2VHcm91cChwYWdlOiBudW1iZXIsIHBhZ2VyOiBHcm91cFBhZ2VyKSB7XHJcblxyXG4gICAgICAgIGxldCBhcHBTZWFyY2hFbGVtZW50ID0gcGFnZXIudmlldztcclxuICAgICAgICBpZiAocGFnZSA9PT0gMCB8fCAocGFnZSA+IGFwcFNlYXJjaEVsZW1lbnQucGFnZXMgJiYgYXBwU2VhcmNoRWxlbWVudC5wYWdlcyA+IDApKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGFwcFNlYXJjaEVsZW1lbnQucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgcGFnZXIuYnV0dG9ucyA9IHRoaXMudXRpbGl0aWVzX0guZ2V0UGFnZXNBcnJheSg2LCBhcHBTZWFyY2hFbGVtZW50LnBhZ2UsIGFwcFNlYXJjaEVsZW1lbnQucGFnZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KGZhbHNlLCBhcHBTZWFyY2hFbGVtZW50KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAVE9ETyBTcG9zdGFyZSBpbiBTZWxlY3Rpb25IYW5kbGVyXHJcbiAgICAgKiBcclxuICAgICAqIEdlc3Rpc2NlIGkgY2xpY2sgc3VsbGEgdGFiZWxsYSBzb2xvIHBlciBsZSByaWdoZSBhIGdydXBwby4gXHJcbiAgICAgKiBPIHJpbXVvdmUgZ2xpIGVsZW1lbnRpIGF0dHVhbG1lbnRlIHByZXNlbnRpIG8gY2FyaWNhIGlsIGNvbnRlbnV0byBkZWwgZ3J1cHBvXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnl9IGdyb3VwIEdydXBwbyBiaW5kYXRvIHN1IGN1aSBzaSDDqCBlZmZldHR1YXRvIGlsIGNsaWNrXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIGwnb3BlcmFpem9uZSDDqCBhbmRhdGEgYSBidW9uIGZpbmUsICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVHcm91cENsaWNrKGdyb3VwOiBHcm91cCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBjYXN0ZWQgPSB0aGlzLlZpZXcgYXMgQXBwU2VhcmNoPGFueT47XHJcbiAgICAgICAgbGV0IGFueUcgPSAoPGFueT5ncm91cCk7XHJcbiAgICAgICAgYW55Ry5fZXhwYW5kZWQgPSAhYW55Ry5fZXhwYW5kZWQ7XHJcblxyXG4gICAgICAgIC8vIFNvbm8gaW4gbW9kYWxpdMOgIHJhZ2dydXBwYW1lbnRvIHZpcnR1YWxlIGRhIGFycmF5OiBFc3BhbmRlcmUgc2lnbmlmaWNhIHJlbmRlcmUgdmlzaWJpbGkgdHV0dGkgZ2xpIG9nZ2V0dGkgcmVsYXRpdmkgYSBxdWVzdG8gZ3J1cHBvLCB2aWNldmVyc2EgaWwgY29udHJhcnJlXHJcbiAgICAgICAgaWYgKHRoaXMuQXJyYXlHcm91cGluZykge1xyXG4gICAgICAgICAgICBsZXQgYWxsUmVsYXRpdmVzID0gdGhpcy5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PlxyXG4gICAgICAgICAgICAgICAgKHQuX2dyb3VwICYmICgoYW55Ry5fZXhwYW5kZWQgJiYgdC5fcGFyZW50ID09IGFueUcuX3RoaXNLZXkpIHx8ICghYW55Ry5fZXhwYW5kZWQgJiYgdC5fcGFyZW50ICYmIHQuX3BhcmVudC5zdGFydHNXaXRoKGFueUcuX3RoaXNLZXkpKSkpIHx8XHJcbiAgICAgICAgICAgICAgICAodC5faXRlbSAmJiAoKGFueUcuX2V4cGFuZGVkICYmIHQuX3RoaXNLZXkgPT0gYW55Ry5fdGhpc0tleSkgfHwgKCFhbnlHLl9leHBhbmRlZCAmJiB0Ll90aGlzS2V5LnN0YXJ0c1dpdGgoYW55Ry5fdGhpc0tleSkpKSkpXHJcbiAgICAgICAgICAgIGFsbFJlbGF0aXZlcy5mb3JFYWNoKHQgPT4geyB0Ll92aXNpYmxlID0gYW55Ry5fZXhwYW5kZWQ7IGlmICh0Ll9ncm91cCkgdC5fZXhwYW5kZWQgPSBmYWxzZSB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFueUcuX2V4cGFuZGVkKSB7XHJcbiAgICAgICAgICAgIC8vIFJlc2V0dG8gaXBwXHJcbiAgICAgICAgICAgIGNhc3RlZC5pdGVtc3BlcnBhZ2VvdmVycmlkZSA9IDE1O1xyXG4gICAgICAgICAgICBpZiAoIWNhc3RlZC5yZXF1ZXN0ZWRncm91cHMpXHJcbiAgICAgICAgICAgICAgICBjYXN0ZWQucmVxdWVzdGVkZ3JvdXBzID0gW25ldyBHcm91cEZpbHRlcihncm91cC5jb2x1bW4sIGdyb3VwLnZhbHVlKV07XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGxldmVsID0gYW55Ry5fZ3JvdXBsZXZlbDtcclxuICAgICAgICAgICAgICAgIC8vIHNlIGlsIGdydXBwbyBjbGljY2F0byBub24gaGEgdW4gbGl2ZWxsbyDDqCBpbCBwcmltbyBncnVwcG8sIHF1aW5kaSBvcmRpbmFtZW50byB1bmljb1xyXG4gICAgICAgICAgICAgICAgLy8gYWx0cmltZW50aSBkZXZvIHJpbXVvdmVyZSB0dXR0aSBpIGZpbHRyaSBzdSBsaXZlbGxpIHN1cGVyaW9yaSBhbCBsZXZlbCBjbGljY2F0byBlIGFnZ2l1bmdlcmUgaWwgbGV2ZWwgY2xpY2NhdG9cclxuICAgICAgICAgICAgICAgIGlmICghbGV2ZWwpXHJcbiAgICAgICAgICAgICAgICAgICAgY2FzdGVkLnJlcXVlc3RlZGdyb3VwcyA9IFtuZXcgR3JvdXBGaWx0ZXIoZ3JvdXAuY29sdW1uLCBncm91cC52YWx1ZSldO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzdGVkLnJlcXVlc3RlZGdyb3VwcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGFueUcuX3BhcmVudFJvdXRlLmZvckVhY2goKHN0ZXA6IEdyb3VwUm91dGVGcmFnbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXN0ZWQucmVxdWVzdGVkZ3JvdXBzLnB1c2gobmV3IEdyb3VwRmlsdGVyKHN0ZXAuY29sdW1uLCBzdGVwLnZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzdGVkLnJlcXVlc3RlZGdyb3Vwcy5wdXNoKG5ldyBHcm91cEZpbHRlcihncm91cC5jb2x1bW4sIGdyb3VwLnZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHBhdGggPSAoYW55Ry5fcGFyZW50IHx8ICcnKSArIGdyb3VwLnZhbHVlO1xyXG5cclxuICAgICAgICAgICAgLy8gU2UgaG8gY2hpdXNvIHVuIGdydXBwbyBub24gbWkgc2VydmUgcmllZmZldHR1YXJlIHJpY2VyY2UsIG1pIGJhc3RhIGVsaW1pbmFyZSBkYWdsaSBvZ2dldHRpIGJpbmRhdGkgdHV0dGkgZ2xpIGVsZW1lbnRpIHNvdHRvc3RhbnRpIGEgcXVlbCBncnVwcG9cclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gIXQuX3BhcmVudCB8fCAhdC5fcGFyZW50LnN0YXJ0c1dpdGgocGF0aCkpO1xyXG5cclxuICAgICAgICAgICAgLy8gZGV2byBwZXLDsiBhbmNoZSByaW11b3ZlcmUgZXZlbnR1YWxpIGNhY2hlIHJlbGF0aXZlXHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlID0gdGhpcy5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUuZmlsdGVyKHQgPT4gdC5wYXRoICE9IHBhdGgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VzdGlzY2UgbGEgc2VsZXppb25lIGdsb2JhbGUgZGVnbGkgb2dnZXR0aSwgc2lhIHBlciBwYWdpbmEgY2hlIGEgbGl2ZWxsbyBkaSAqKlNlbGVjdEFsbCoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBmb3JjZWRWYWwgVmFsb3JlIGZvcnphdG8gZGkgY2hlY2sgZGEgYXNzZWduYXJlIGFnbGkgb2dnZXR0aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2xvYmFsQ2hlY2tDaGFuZ2VkKGZvcmNlZFZhbDogYm9vbGVhbiA9IG51bGwpIHtcclxuXHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1c0V4Y2x1ZGluZyhudWxsKTtcclxuXHJcbiAgICAgICAgLy8gUHJlbmRvIHR1dHRpIGdsaSBlbGVtZW50aSBwcmVzZW50aSBpbiBxdWVzdGEgdmlzdGEuIFNlIGhvIGdydXBwaSBwcmVuZG8gc29sbyBpIGdydXBwaSBhIGxpdmVsbG8gMCwgYWx0cmltZW50aSBwcmVuZG8gdHV0dGkgZ2xpIG9nZ2V0dGkgcGVyIHNlbGV6aW9uYXJsaVxyXG4gICAgICAgIGxldCBpdGVtcyA9IHRoaXMuYm91bmRTb3VyY2UuZmluZCh0ID0+IHQuX2dyb3VwKSA/IHRoaXMuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gdC5fZ3JvdXAgJiYgIXQuX3BhcmVudCkgOiB0aGlzLmJvdW5kU291cmNlO1xyXG4gICAgICAgIHZhciBpdGVtU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25fSC5oYW5kbGVJdGVtc1NlbGVjdGlvbihpdGVtcywgZm9yY2VkVmFsLCB0aGlzLmdsb2JhbENoZWNrKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChpdGVtU2VsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBUT0RPIFNwb3N0YXJlIGluIFNlbGVjdGlvbkhhbmRsZXJcclxuICAgICAqIFxyXG4gICAgICogR2VzdGlzY2UgaSBjbGljayBzdWxsYSB0YWJlbGxhLCBnZXN0ZW5kbyBldmVudHVhbG1lbnRlIGFuY2hlIGdsaSBTaGlmdCArIENsaWNrIHBlciBzZWxlemlvbmFyZSB1biByYW5nZSBkaSBvZ2dldHRpXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnl9IGV2ZW50IEV2ZW50byBuYXRpdm8gSFRNTCBkZWwgY2xpY2tcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gYmluZGF0byBzdSBjdWkgc2kgw6ggZWZmZXR0dWF0byBpbCBjbGlja1xyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29wZXJhaXpvbmUgw6ggYW5kYXRhIGEgYnVvbiBmaW5lLCAqKmZhbHNlKiogYWx0cmltZW50aVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2xpY2soZXZlbnQ6IGFueSwgaXRlbTogYW55KTogYm9vbGVhbiB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1c0V4Y2x1ZGluZyhudWxsKTtcclxuXHJcbiAgICAgICAgbGV0IHNlbGVjdGVkaXRlbXM6IGFueVtdID0gW107XHJcbiAgICAgICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIHRoaXMuU2hpZnRDbGljayAmJiAhdGhpcy5TaW5nbGVTZWxlY3Rpb24pIHtcclxuICAgICAgICAgICAgdGhpcy51dGlFeHRzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBsZXQgc3RhcnRTZWxlY3RpbmcgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpdGVtcyA9IHRoaXMuYm91bmRTb3VyY2UuZmlsdGVyKHQgPT4gIXQuX2dyb3VwICYmICF0Ll9zZXApO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdCA9IGl0ZW1zW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0U2VsZWN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdC5fc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkaXRlbXMucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICgodCA9PSBpdGVtIHx8IHQgPT0gdGhpcy5sYXN0U2VsZWN0ZWQpICYmICFzdGFydFNlbGVjdGluZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0U2VsZWN0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0Ll9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRpdGVtcy5wdXNoKHQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICgodCA9PSBpdGVtIHx8IHQgPT0gdGhpcy5sYXN0U2VsZWN0ZWQpICYmIHN0YXJ0U2VsZWN0aW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0U2VsZWN0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpdGVtLl9zZWxlY3RlZCA9ICFpdGVtLl9zZWxlY3RlZDtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWQgPSBpdGVtO1xyXG4gICAgICAgICAgICBzZWxlY3RlZGl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaXRlbVNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uX0guaGFuZGxlSXRlbXNTZWxlY3Rpb24oc2VsZWN0ZWRpdGVtcyk7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcblxyXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaXRlbVNlbGVjdGlvbik7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Bvc3RhIGxhIHJpY2VyY2EgZGkgdW5hIHBhZ2luYSBpbiBhdmFudGkgKG8gaW5kZWl0cm8pXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgTnVtZXJvIGRpIHBhZ2luZSBkYSBhZ2dpdW5nZXJlIChvIHNvdHRyYXJyZSwgc2UgbmVnYXRpdm8pIGFsbGEgcGFnaW5hIGF0dHVhbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFRvUGFnZShwYWdlOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgdmlldyA9IHRoaXMuTWFpbkdyb3VwVmlldyA/IHRoaXMuTWFpbkdyb3VwVmlldyA6IHRoaXMuVmlldztcclxuXHJcbiAgICAgICAgdGhpcy5nb1RvUGFnZSgoKHRoaXMuU2VhcmNoVmlldyB8fCB2aWV3KT8ucGFnZSB8fCAwKSArIHBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Bvc3RhIGxhIHJpY2VyY2EgYWxsYSBwYWdpbmEgc3BlY2lmaWNhdGFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBQYWdpbmEgYSBjdWkgbmF2aWdhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdvVG9QYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGxldCB2aWV3ID0gdGhpcy5NYWluR3JvdXBWaWV3ID8gdGhpcy5NYWluR3JvdXBWaWV3IDogKHRoaXMuYXJyYXlNb2RlID8gdGhpcy5TZWFyY2hWaWV3IDogdGhpcy5WaWV3KTtcclxuICAgICAgICBpZiAoIXZpZXcucGFnZSB8fCAhdmlldy5wYWdlcylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgYXBwU2VhcmNoRWxlbWVudCA9IHRoaXMuU2VhcmNoVmlldyB8fCB2aWV3O1xyXG4gICAgICAgIGlmIChwYWdlID09PSAwIHx8IChwYWdlID4gYXBwU2VhcmNoRWxlbWVudC5wYWdlcyAmJiBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzID4gMCkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgYXBwU2VhcmNoRWxlbWVudC5wYWdlID0gcGFnZTtcclxuICAgICAgICBsZXQgY291bnQgPSAodmlldy5pdGVtcy5sZW5ndGggfHwgdmlldy5ncm91cHM/Lmxlbmd0aCB8fCAwKTtcclxuICAgICAgICBsZXQgaXBwID0gdmlldy5pdGVtc3BlcnBhZ2VvdmVycmlkZSB8fCAxNTtcclxuICAgICAgICB0aGlzLmFycmF5UHVsc2FudGkgPSB0aGlzLnV0aWxpdGllc19ILmdldFBhZ2VzQXJyYXkoNiwgYXBwU2VhcmNoRWxlbWVudC5wYWdlLCBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzLCBjb3VudCwgaXBwKTtcclxuXHJcbiAgICAgICAgbGV0IGhhc0dyb3VwaW5ncyA9ICEhdGhpcy5NYWluR3JvdXBWaWV3O1xyXG4gICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UsIGhhc0dyb3VwaW5ncyA/IHZpZXcgOiB0aGlzLlNlYXJjaFZpZXcgPyB0aGlzLlNlYXJjaFZpZXcgOiBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50byByaWNoaWFtYXRvIHN1bCBjYW1iaW8gZGVsbGEgcGFnaW5hemlvbmUuIFZlcnLDoCByaWNoaWFtYXRvIGwnZXZlbnRvICoqZW1pdFNlYXJjaFJlcXVlc3QqKlxyXG4gICAgICogcGVyIGNvbXVuaWNhcmUgYWwgY29tcG9uZW50ZSBjaGUgdXRpbGl6emEgcXVlc3RhIHRhYmVsbGEgY2hlIGkgZGF0aSBzb25vIGRhIGFnZ2lvcm5hcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uSXRlbXNQZXJQYWdlQ2hhbmdlZChuZXdJcHApIHtcclxuICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5WaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlID0gbmV3SXBwO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgIGlmICh0aGlzLk1haW5Hcm91cFZpZXcpXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSwgdGhpcy5NYWluR3JvdXBWaWV3KTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLlNlYXJjaFZpZXcpIHtcclxuICAgICAgICAgICAgLy8gUXVlc3RvIHNlY29uZG8gbWUgc2kgcHXDsiBwb3J0YXJlIGEgbGl2ZWxsbyB1biBwbycgcGnDuSBhbHRvXHJcbiAgICAgICAgICAgIHRoaXMuU2VhcmNoVmlldy5wYWdlID0gMTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlLCB0aGlzLlNlYXJjaFZpZXcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEV2ZW50byByaWNoaWFtYXRvIHN1bCBjYW1iaW8gZGVsbGEgcGFnaW5hemlvbmUuIFZlcnLDoCByaWNoaWFtYXRvIGwnZXZlbnRvICoqZW1pdFNlYXJjaFJlcXVlc3QqKiBjb24gbGEgdmlzdGEgZGVsIHNlcGFyYXRvcmUgKi9cclxuICAgIHB1YmxpYyBvbkdyb3VwSXRlbXNQZXJQYWdlQ2hhbmdlZChwYWdlcjogR3JvdXBQYWdlciwgbmV3SXBwOiBudW1iZXIpIHtcclxuICAgICAgICBwYWdlci52aWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlID0gbmV3SXBwO1xyXG4gICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSwgcGFnZXIudmlldyk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKiBNZXRvZG8gY2hlIGdlc3Rpc2NlIGxhIG1vZGlmaWNhIGRlbCB0ZW1wbyBzcGVjaWZpY2F0byBwZXIgbCdhZ2dpb3JuYW1lbnRvIGF1dG9tYXRpY28gKi9cclxuICAgIHB1YmxpYyBhdXRvVXBkYXRlQ2hhbmdlZCgpIHtcclxuICAgICAgICBpZiAoIS9eWzEtOV1cXGQqJC8udGVzdCh0aGlzLnNlY29uZHMpKVxyXG4gICAgICAgICAgICB0aGlzLnNlY29uZHMgPSAnMTAnO1xyXG5cclxuICAgICAgICBsZXQgc2Vjb25kc0luTXMgPSBwYXJzZUludCh0aGlzLnNlY29uZHMsIG51bGwpICogMTAwMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXV0b1VwZGF0ZSlcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVUaW1lciA9IHNldEludGVydmFsKCgpID0+IHsgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdChmYWxzZSk7IH0sIHNlY29uZHNJbk1zKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hpYW1hdG8gZGFsIGNsaWNrIHN1IHVuYSBkZWxsZSBjb2xvbm5lIGdlbmVyYXRlIGRhbGwnSW5wdXQgKipEeW5hbWljT3BlcmF0aW9ucyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gTCdvZ2dldHRvIHN1IGN1aSB2YSBlZmZldHR1YXRhIGwnb3BlcmF6aW9uZVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9waWQgQ29kaWNlIGlkZW50aWZpY2F0aXZvIGRlbGwnb3BlcmF6aW9uZSBkYSBlZmZldHR1YXJzaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZHluYW1pY09wZXJhdGlvbihpdGVtOiBhbnksIG9waWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMub25EeW5hbWljT3BlcmF0aW9uLmVtaXQoeyBpZDogb3BpZCwgaXRlbTogaXRlbSB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgaWwgY29udGVudXRvIGRlbGwnRXNUZCBkYSB1dGlsaXp6YXJlIHBlciBsYSBjb2xvbm5hIHNwZWNpZmljYXRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW4gQ29sb25uYSBwZXIgY3VpIGNlcmNhcmUgbGEgY2VsbGFcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5vbWUgZGlyZXR0byBwZXIgY2VyY2FyZSBpbCBURCBjb24gbCdJRC4gUXVlc3RhIHZhcmlhYmlsZSBoYSBwcmlvcml0w6AgcmlzcGV0dG8gYSAqKmNvbHVtbioqXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtUZW1wbGF0ZVJlZjxhbnk+fSBUZW1wbGF0ZSBkYSB1c2FyZSBwZXIgbGEgY29sb25uYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZEVzVGQoY29sdW1uOiBzdHJpbmcsIG5hbWU6IHN0cmluZyA9IG51bGwpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgICAgICB2YXIgRXNUZCA9IHRoaXMuRXNUZHNEaXJlY3RpdmUuZmluZCgoaXRlbSkgPT4gbmFtZSA/IGl0ZW0udGQgPT09IG5hbWUgOiBpdGVtLnRkRm9yUHJvcGVydHkgPT09IGNvbHVtbik7XHJcbiAgICAgICAgLy8gTmFtZSBub24gdHJvdmF0bywgZmFsbGJhY2sgYWwgbm9tZSBkZWxsYSBjb2xvbm5hXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgY29sdW1uICYmICFFc1RkKVxyXG4gICAgICAgICAgICBFc1RkID0gdGhpcy5Fc1Rkc0RpcmVjdGl2ZS5maW5kKChpdGVtKSA9PiBpdGVtLnRkRm9yUHJvcGVydHkgPT09IGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIEVzVGQgPyBFc1RkLlRlbXBsYXRlIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE90dGllbmUgaWwgY29udGVudXRvIGRlbGwnZWRpdG9yIEVzVGQgZGEgdXRpbGl6emFyZSBwZXIgbGEgY29sb25uYSBzcGVjaWZpY2F0YVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uIENvbG9ubmEgcGVyIGN1aSBjZXJjYXJlIGwnZWRpdG9yXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOb21lIGRpcmV0dG8gcGVyIGNlcmNhcmUgbCdFZGl0b3IgY29uIGwnSUQuIFF1ZXN0YSB2YXJpYWJpbGUgaGEgcHJpb3JpdMOgIHJpc3BldHRvIGEgKipjb2x1bW4qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7VGVtcGxhdGVSZWY8YW55Pn0gVGVtcGxhdGUgZGEgdXNhcmUgcGVyIGxhIGNvbG9ubmFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmRFZGl0b3IoY29sdW1uOiBzdHJpbmcsIG5hbWU6IHN0cmluZyA9IG51bGwpOiBUZW1wbGF0ZVJlZjxhbnk+IHtcclxuICAgICAgICB2YXIgRWRpdG9yID0gdGhpcy5Fc1RkRWRpdG9yRGlyZWN0aXZlcy5maW5kKChpdGVtKSA9PiBuYW1lID8gaXRlbS5lZGl0b3IgPT09IG5hbWUgOiBpdGVtLmVkaXRvckZvclByb3BlcnR5ID09PSBjb2x1bW4pO1xyXG4gICAgICAgIC8vIE5hbWUgbm9uIHRyb3ZhdG8sIGZhbGxiYWNrIGFsIG5vbWUgZGVsbGEgY29sb25uYVxyXG4gICAgICAgIGlmIChuYW1lICYmIGNvbHVtbiAmJiAhRWRpdG9yKVxyXG4gICAgICAgICAgICBFZGl0b3IgPSB0aGlzLkVzVGRFZGl0b3JEaXJlY3RpdmVzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZWRpdG9yRm9yUHJvcGVydHkgPT09IGNvbHVtbik7XHJcbiAgICAgICAgcmV0dXJuIEVkaXRvciA/IEVkaXRvci5UZW1wbGF0ZSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFcXVpdmFsZW50ZSBkZWwgbWV0b2RvICoqYWRkVG9QYWdlKiogcmlhZGF0dGF0byBwZXIgbGEgbW9kYWxpdMOgIGFycmF5XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgTnVtZXJvIGRpIHBhZ2luZSBkYSBhZ2dpdW5nZXJlIChvIHNvdHRyYXJyZSwgc2UgbmVnYXRpdm8pIGFsbGEgcGFnaW5hIGF0dHVhbGVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFycmF5QWRkVG9QYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuYXJyYXlHb1RvUGFnZSh0aGlzLmFycmF5bW9kZVBhZ2UgKyBwYWdlKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXF1aXZhbGVudGUgZGVsIG1ldG9kbyAqKmdvVG9QYWdlKiogcmlhZGF0dGF0byBwZXIgbGEgbW9kYWxpdMOgIGFycmF5XHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2UgUGFnaW5hIGEgY3VpIG5hdmlnYXJlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhcnJheUdvVG9QYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlID09PSAwIHx8IHBhZ2UgPiB0aGlzLmFycmF5bW9kZVBhZ2VzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgdGhpcy5hcnJheW1vZGVQYWdlID0gcGFnZTtcclxuXHJcbiAgICAgICAgLy8gUmlmb3J6byBpbCB3cml0ZXZhbHVlIGluIG1vZG8gY2hlIGlsIGNvZGljZSBwYXNzaSBkYWxsYSBnZXN0aW9uZSBjb21lIHNlIGZvc3NlIGZhdHRhIHJpcGFydGlyZSB1bmEgcmljZXJjYVxyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxXcml0ZVZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXN0aW9uZSBkZWkgY2xpY2sgc3VsbGUgb3B6aW9uaSBkZWwgbWVuw7kgY29udGVzdHVhbGUgaW4gYWx0byBhIGRlc3RyYSBnZW5lcmF0byBkYWxsJ0lucHV0ICoqQ29ybmVyTWVudU9wdGlvbnMqKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb3JuZXJpZCBDb2RpY2UgZGVsbCdvcGVyYXppb25lIHNlbGV6aW9uYXRhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb3JuZXJBY3Rpb25DbGlja2VkKGNvcm5lcmlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLm9uQ29ybmVyQWN0aW9uLmVtaXQoeyBpZDogY29ybmVyaWQsIGVzdGFibGU6IHRoaXMgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogSW1wb3N0YXppb25lIG1vZGFsaXTDoCBkZWxsJ0VzVGFibGUgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7J2FycmF5JyB8ICd2aWV3JyB8ICdyZXBvcnQnfSBtb2RlIE1vZGFsaXTDoCBkYSBpbXBvc3RhcmVcclxuICAgICAqKi9cclxuICAgIHByaXZhdGUgc2V0TW9kZShtb2RlOiAnYXJyYXknIHwgJ3ZpZXcnKSB7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IG1vZGUgPT0gJ3ZpZXcnO1xyXG4gICAgICAgIHRoaXMuYXJyYXlNb2RlID0gbW9kZSA9PSAnYXJyYXknO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGVscGVyIHBlciBlZmZldHR1YXJlIGNoaWFtYXRlIGludGVybmUgZGkgYWxsaW5lYW1lbnRvIGFsbGEgZnVuemlvbmUgKip3cml0ZVZhbHVlKiosIFxyXG4gICAgICogaW1wb3N0YW5kbyBwcmltYSAqKmludGVybmFsV3JpdGVDYWxsKiogaW4gbW9kbyBkYSBub24gZWZmZXR0dWFyZSBvcGVyYXppb25pIGludXRpbGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGludGVybmFsV3JpdGVWYWx1ZSgpIHtcclxuICAgICAgICB0aGlzLmludGVybmFsV3JpdGVDYWxsID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5WaWV3KTtcclxuICAgICAgICB0aGlzLmludGVybmFsV3JpdGVDYWxsID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIE1ldG9kbyBldmVudHVhbG1lbnRlIHJpY2hpYW1hYmlsZSBhbmNoZSBkYWwgY29tcG9uZW50ZSBlc3Rlcm5vIGNoZSBwZXJtZXR0ZSBkaSBmb3J6YXJlIHVuIHJlZnJlc2ggZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgcHVibGljIGZvcmNlUmVmcmVzaChyZWxhdW5jaFNlYXJjaDogYm9vbGVhbiA9IHRydWUpIHtcclxuXHJcbiAgICAgICAgLy8gU2Ugc29ubyBpbiBtb2RhbGl0w6AgVmlldyB2aWVuZSBtYW50ZW51dG8gaW4gYXV0b21hdGljbyBpbCBudW1lcm8gZGkgcGFnaW5hLCBtYSBwZXIgbGEgbW9kYWxpdMOgIGFycmF5IGRldm8gcHJlbmRlcmUgbGUgaW5mbyBkaSBwYWdpbmF6aW9uZSBwcmltYSBlIHJpYXBwbGljYXJsZSBkb3BvXHJcbiAgICAgICAgbGV0IGFycmF5UGFnZTogbnVtYmVyO1xyXG4gICAgICAgIGxldCBhcnJheUlwcDogbnVtYmVyO1xyXG4gICAgICAgIGlmICh0aGlzLmFycmF5TW9kZSkge1xyXG4gICAgICAgICAgICBhcnJheVBhZ2UgPSB0aGlzLmFycmF5bW9kZVBhZ2U7XHJcbiAgICAgICAgICAgIGFycmF5SXBwID0gdGhpcy5BcnJheW1vZGVJdGVtc1BlclBhZ2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZighcmVsYXVuY2hTZWFyY2ggJiYgdGhpcy52aWV3TW9kZSlcclxuICAgICAgICAgICAgdGhpcy5WaWV3LnNlbGZzZWFyY2ggPSB0cnVlO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy5WaWV3KTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFycmF5TW9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLkFycmF5bW9kZUl0ZW1zUGVyUGFnZSA9IGFycmF5SXBwO1xyXG4gICAgICAgICAgICB0aGlzLmFycmF5R29Ub1BhZ2UoYXJyYXlQYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogSW1wb3N0YSBsYSB2aXNpYmlsaXTDoCBkaSB1biBoZWFkZXIgZSBkaSBldmVudHVhbGkgaGVhZGVyIGNvbGxlZ2F0aSBzZSBxdWVzdG8gaGVhZGVyIMOoIHVuIGdydXBwbywgZG9wb2RpY2jDqSBhZ2dpb3JuYSBsJ2VzLXRhYmxlIFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBPckhlYWRlciBIZWFkZXIgZGkgY3VpIHNldHRhcmUgbGEgdmlzaWJpbGl0w6BcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gdmlzaWJpbGl0eSBWaXNpYmlsaXTDoCBkYSBpbXBvc3RhcmVcclxuICAgICAqKi9cclxuICAgIHB1YmxpYyBzZXRIZWFkZXJWaXNpYmlsaXR5KGdyb3VwT3JIZWFkZXI6IHN0cmluZywgdmlzaWJpbGl0eTogYm9vbGVhbiwgcmVmcmVzaDogYm9vbGVhbiA9IHRydWUsIHJlbGF1bmNoU2VhcmNoOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIGxldCBncm91cE9ySGVhZCA9IHRoaXMudGhzQ2FjaGVbZ3JvdXBPckhlYWRlcl07XHJcbiAgICAgICAgaWYgKCFncm91cE9ySGVhZClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBncm91cE9ySGVhZC50aFZpc2libGUgPSB2aXNpYmlsaXR5O1xyXG5cclxuICAgICAgICBsZXQgdGhzQXJyID0gdGhpcy5Fc1Roc0RpcmVjdGl2ZS50b0FycmF5KCk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aHNBcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRoID0gdGhzQXJyW2ldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoLnRoUGFyZW50ID09IGdyb3VwT3JIZWFkZXIpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEhlYWRlclZpc2liaWxpdHkodGgudGgsIHZpc2liaWxpdHksIGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZWZyZXNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlTG9jYWxWaXNpYmlsaXR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5mb3JjZVJlZnJlc2gocmVsYXVuY2hTZWFyY2gpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bnppb25lIGNoZSBpbiBiYXNlIGFpIGNsaWNrIHN1IHVuYSBjZWxsYSBjYXBpc2NlIHNlIHN0byBlZmZldHR1YW5kbyB1bidvcGVyYXppb25lIGRpIHNlbGV6aW9uZSBvIHNlIHN0byBlbnRyYW5kbyBuZWxsJ2VkaXQgZGkgdW5hIGNlbGxhIGNvbiB1biBkb3BwaW8gY2xpY2tcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9ICRldmVudCBFdmVudG8gbmF0aXZvIGphdmFzY3JpcHRcclxuICAgICAqIEBwYXJhbSB7VGRFbGVtZW50fSByb3dJdGVtIFJpZmVyaW1lbnRvIGEgYmluZGVyIGRlbGxhIHJpZ2FcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIEl0ZW0gY2hlIHJhcHByZXNlbnRhIGlsIGNvbnRlc3RvIHN1IGN1aSDDqCBzdGF0byBlZmZldHR1YXRvIHVuIGNsaWNrXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkYkNsaWNrRWRpdE9yU2luZ2xlQ2xpY2tSb3dTZWxlY3Rpb24oJGV2ZW50OiBNb3VzZUV2ZW50LCByb3dJdGVtOiBUZEVsZW1lbnQsIGl0ZW06IGFueSkge1xyXG5cclxuICAgICAgICAvLyBQcmltYSBjb3NhIGRhIGZhcmUgw6ggY29udHJvbGxhcmUgc2UgY2kgc29ubyBkZWkgcmFuZ2UgbGFzY2lhdGkgZGEgb3BlcmF6aW9uaSBwcmVjZWRlbnRpIChzZSBhcHBsaWNhYmlsZSkgZSByaXB1bGlybGlcclxuICAgICAgICBpZiAodGhpcy5yYW5nZVNlbGVjdGVkICYmICEkZXZlbnQuY3RybEtleSAmJiB0aGlzLlNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJjbGVhcmluZyBwcmV2aW91c2x5IHNlbGVjdGVkIHJhbmdlXCIpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzRXhjbHVkaW5nKG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLnJhbmdlU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gTW9kYWxpdMOgIEVkaXRhYmxlLCBnZXN0aXNjbyBpIGRvcHBpIGNsaWNrIHNlbnphIHBlcsOyIHJhbGxlbnRhcmUgbGEgbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBhIHJhbmdlXHJcbiAgICAgICAgaWYgKHRoaXMuRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgLy8gU2Vjb25kbyBjbGljazogc2UgaWwgdGltZXIgbm9uIMOoIHNjYWR1dG8gw6ggdW4gZG9wcGlvIGNsaWNrIGVkIGVzZWd1byBpbCByZXN0b1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jZWxsRGJDbGlja1RpbWVyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJoYW5kbGluZyBkb3VibGVjbGljayBvbiBlZGl0YWJsZSBjZWxsOiBcIiArIChyb3dJdGVtLlByb3BlcnR5TmFtZSA/ICdlZGl0IG1vZGUgZm9yIHByb3BlcnR5ICcgKyByb3dJdGVtLlByb3BlcnR5TmFtZSA6ICdubyBwcm9wZXJ0eSBzZXQsIGZhbGxiYWNrIHRvIHNpbXBsZSBjbGljaycpKTtcclxuICAgICAgICAgICAgICAgIGlmIChyb3dJdGVtLlByb3BlcnR5TmFtZSlcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHVwVXNlckVkaXQocm93SXRlbSwgaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dDbGljaygkZXZlbnQsIGl0ZW0sIHRoaXMuU2VsZWN0aW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJDZWxsQ2xpY2tUaW1lcigpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gUHJpbW8gY2xpY2s6IG5vbiBmYSBuaWVudGUgZSBzZSBpbCB0ZW1wbyBwZXIgaWwgc2Vjb25kbyBjbGljayBzY2FkZSByZXNldHRhIHR1dHRvXHJcbiAgICAgICAgICAgIHRoaXMuY2VsbERiQ2xpY2tUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckNlbGxDbGlja1RpbWVyKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuUmFuZ2VTZWxlY3Rpb24gfHwgIXRoaXMubW91c2VJc0Rvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJ0aW1lJ3MgdXAgZm9yIHNlY29uZCBjbGljaywgaGFuZGxpbmcgc2luZ2xlIGNsaWNrXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2soJGV2ZW50LCBpdGVtLCB0aGlzLlNlbGVjdGlvbiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIHRoaXMuZG91YmxlQ2xpY2tCdWZmZXJNcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbiBtb2RhbGl0w6AgYSByYW5nZSBsYSBjcmVhemlvbmUgZGVsIHJhbmdlIMOoIGdlc3RpdGEgZGFpIG1vdXNlZG93biwgbW92ZSBlZCB1cC4uLlxyXG4gICAgICAgIC8vIExhIHNlbGV6aW9uZSBkZWxsZSByaWdoZSBpbnZlY2Ugw6ggZ2VzdGl0YSBkYWxsZSBjYXNlbGxpbmUgYSBzaW5pc3RyYVxyXG4gICAgICAgIGlmICh0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFNlIGhvIGZhdHRvIGNsaWNrIGNvbCBjb250cm9sIGF0dGFjY2F0byBlc2NvIHN1Yml0byBkYXRvIGNoZSBkZXZlIHNvbG8gcGVybWV0dGVyZSBsYSBuYXZpZ2F6aW9uZSBkZWkgbGlua1xyXG4gICAgICAgIGlmICgkZXZlbnQuY3RybEtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBUdXR0aSBpIGNsaWNrIHN1IHVuYSBjZWxsYSBnacOgIGluIGVkaXQgbm9uIGRldm9ubyBlZmZldHR1YXJlIGxhIHNlbGV6aW9uZSBkZWxsYSByaWdhXHJcbiAgICAgICAgaWYgKCg8YW55PnJvd0l0ZW0pLl9lZGl0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFBlciBldml0YXJlIGRpIHJhbGxlbnRhcmUgYSBwcmVzY2luZGVyZVxyXG4gICAgICAgIGlmICghdGhpcy5FZGl0YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKCRldmVudCwgaXRlbSwgdGhpcy5TZWxlY3Rpb24sIHRydWUpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGdlc3Rpc2NlIGlsIGNvbWFuZG8gXCJDb3BpYVwiIGJ1dHRhbmRvIGkgdmFsb3JpIHNlbGV6aW9uYXRpIG5lbGxhIGNsaXBib2FyZCBpbiBiYXNlIGFsIGxvcm8gdGlwbyAqL1xyXG4gICAgcHJpdmF0ZSBoYW5kbGVDb3B5KCkge1xyXG4gICAgICAgIGlmKCF0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGV0IHNlbCA9IHRoaXMuc2VsZWN0aW9uX0guZ2V0U2VsZWN0aW9uU3RhdHVzU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgaWYgKHNlbC5sZW5ndGggPiAwICYmIHNlbFswXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxlY3Rpb25UZXh0ID0gdGhpcy5zZWxlY3Rpb25fSC5nZXRDbGlwYmFyZFRleHRGcm9tU2VsZWN0aW9uKHNlbCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkU2VydmljZS5jb3B5VGV4dFRvQ2xpcGJvYXJkKHNlbGVjdGlvblRleHQpO1xyXG4gICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlSW5mbyh0aGlzLmxjLmxvYyhcIlZhbHVlcyBjb3BpZWQgaW4gdGhlIGNsaXBib2FyZFwiKSwgXCJ0b2FzdHJcIiwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBFdmVudG8gY2hlIGdlc3Rpc2NlIGlsIGNvbWFuZG8gXCJJbmNvbGxhXCIgcHJlbmRlbmRvIGkgZGF0aSBkZWxsYSBjbGlwYm9hcmQgZSBhcHBsaWNhbmRvbGkgYWwgcmFuZ2UgZGkgc2VsZXppb25lIGF0dHVhbGUgaW4gYmFzZSBhbCB0aXBvIGRlbGxlIGNlbGxlIHNvdHRvICovXHJcbiAgICBoYW5kbGVQYXN0ZSgpIHtcclxuICAgICAgICBpZighdGhpcy5SYW5nZVNlbGVjdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGxldCBzZWwgPSB0aGlzLnNlbGVjdGlvbl9ILmdldFNlbGVjdGlvblN0YXR1c1NlbGVjdGlvbigpO1xyXG4gICAgICAgIGlmIChzZWwubGVuZ3RoID4gMCAmJiBzZWxbMF0ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZFNlcnZpY2UuZ2V0Q2xpcGJvYXJkKFwibWF0cml4XCIsICh2YWx1ZXM6IHN0cmluZ1tdW10pID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEZpeCBjbGlwYm9hcmQgc2VydmljZSBjaGUgcGFyZSB1biBwbycgc3Ryb256YSwgcmltdW92byBsJ3VsdGltbyBhcnJheSBzZSBtaSBhY2NvcmdvIGNoZSDDqCB1biBzaW5nb2xvIGFycmF5IGNvbiB1biBzb2xvIGVsZW1lbnRvIHZ1b3RvXHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDAgJiYgdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXS5sZW5ndGggPT0gMSAmJiB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdWzBdID09ICcnKVxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlcy5zcGxpY2UodmFsdWVzLmxlbmd0aCAtIDEsIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCAmJiB2YWx1ZXNbMF0ubGVuZ3RoID4gMCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBzZSBsYSBtb2RpZmljYSDDqCBhYmlsaXRhdGFcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuRWRpdGFibGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tc2dFeHRzLnNpbXBsZVdhcm5pbmcodGhpcy5sYy5sb2MoXCJEYXRhIGZvciB0aGlzIHRhYmxlIGNhbm5vdCBiZSBlZGl0ZWRcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBDb250cm9sbG8gY2hlIHF1ZWxsbyBjaGUgc3RvIGNvcGlhbmRvIHNpYSBkZWxsYSBzdGVzc2EgZGltZW5zaW9uZSBkZWxsYSBzZWxlemlvbmUgc3VsbCdlcy10YWJsZSwgdHJhbm5lIG5lbCBjYXNvIGhvIHVuIHNpbmdvbG8gdmFsb3JlIGRhIGNvcGlhcmVcclxuICAgICAgICAgICAgICAgICAgICBpZiAoKHNlbC5sZW5ndGggIT0gdmFsdWVzLmxlbmd0aCB8fCBzZWxbMF0ubGVuZ3RoICE9IHZhbHVlc1swXS5sZW5ndGgpICYmICh2YWx1ZXMubGVuZ3RoICE9IDEgfHwgdmFsdWVzWzBdLmxlbmd0aCAhPSAxKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlV2FybmluZyh0aGlzLmxjLmxvYyhcIlNpemUgb2YgY29waWVkIGRhdGEgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNpemUgb2YgdGhlIHNlbGVjdGlvblwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlIGxlIGRpbWVuc2lvbmkgY29pbmNpZG9ubyBjb3BpbyBkYSB1bmEgcGFydGUgYWxsJ2FsdHJhXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoYW5nZXM6IEVzVGFibGVNb2RlbENoYW5nZVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCBzZWwubGVuZ3RoOyByKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvdyA9IHNlbFtyXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjZWxsID0gcm93W2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2UgaG8gdW4gc2luZ29sbyB2YWxvcmUgbG8gYXBwbGljbyBhIHR1dHRhIGxhIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gdmFsdWVzLmxlbmd0aCA9PSAxICYmIHZhbHVlc1swXS5sZW5ndGggPT0gMSA/IHZhbHVlc1swXVswXSA6IHZhbHVlc1tyXVtjXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG9sZCA9IGNlbGwudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbml1ID0gY2VsbC52YWxfc2V0dGVyKHZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2xkZGF0ZSA9IHRoaXMuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24ob2xkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuaXVkYXRlID0gdGhpcy5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbihuaXUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvbGRkYXRlICYmIG5pdWRhdGUgJiYgb2xkZGF0ZS5pc1NhbWUgJiYgb2xkZGF0ZS5pc1NhbWUobml1ZGF0ZSkpIHx8IG9sZCA9PT0gbml1KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucHVzaChuZXcgRXNUYWJsZU1vZGVsQ2hhbmdlKGNlbGwuaXRlbSwgY2VsbC5oZWFkZXIsIGNlbGwucHJvcGVydHksIG9sZCwgbml1KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZS5lbWl0KGNoYW5nZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFJpcHVsaXNjZSBpbCB0aW1lciB1dGlsaXp6YXRvIHBlciBjYXBpcmUgc2Ugw6ggc3RhdG8gZWZmZXR0dWF0byB1biBkb3BwaW8gY2xpY2sgbyBtZW5vICovXHJcbiAgICBwcml2YXRlIGNsZWFyQ2VsbENsaWNrVGltZXIoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2VsbERiQ2xpY2tUaW1lcilcclxuICAgICAgICB0aGlzLmNlbGxEYkNsaWNrVGltZXIgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlciBjbGljayBzaW5nb2xvIHN1IHVuYSByaWdhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7YW55fSAkZXZlbnQgRXZlbnRvIG5hdGl2byBqYXZhc2NyaXB0XHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBJdGVtIGNoZSByYXBwcmVzZW50YSBpbCBjb250ZXN0byBzdSBjdWkgw6ggc3RhdG8gZWZmZXR0dWF0byB1biBjbGlja1xyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3Rpb24gSW5kaWNhIHNlIGxhIHNlbGV6aW9uZSDDqCBhdHRpdmFcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaW50ZXJuYWxDYWxsIEluZGljYSBzZSBsYSBjaGlhbWF0YSBhIHF1ZXN0YSBmdW56aW9uZSDDqCBpbnRlcm5hOiBwZXJtZXR0ZSBkaSBza2lwcGFyZSBpIGNoZWNrIHN1bGxlIEN1c3RvbUNlbGxzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVSb3dDbGljaygkZXZlbnQ6IGFueSwgaXRlbTogYW55LCBzZWxlY3Rpb246IGJvb2xlYW4sIGludGVybmFsQ2FsbDogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgLy8gU2UgaG8gdW4gY3RybCBwcmVtdXRvIGVzY28gY29uIHRydWUgaW4gbW9kbyBkYSBmYXJlIGJ1YmJsaW5nIGRlbGwnZXZlbnRvIGUgbGFzY2lhcmxvIGdlc3RpcmUgYWwgYnJvd3NlciAobGluayBlY2MuLi4pXHJcbiAgICAgICAgLy8gU3Rlc3NhIGNvc2Egc2UgaG8gY3VzdG9tIGNlbGwgZGF0byBjaGUgbGEgZ2VzdGlvbmUgZGVpIGNsaWNrIHZpZW5lIGFmZmlkYXRhIGFpIHNpbmdvbGkgVERcclxuICAgICAgICBpZiAoJGV2ZW50LmN0cmxLZXkgfHwgKHRoaXMuVXNlQ3VzdG9tQ2VsbHMgJiYgIWludGVybmFsQ2FsbCkpXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG5cclxuICAgICAgICBpZiAoc2VsZWN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzRXhjbHVkaW5nKG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoc2VsZWN0aW9uICYmICFpdGVtLmxvY2tlZCAmJiAhaXRlbS5fc2VwICYmICFpdGVtLl9ncm91cClcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljaygkZXZlbnQsIGl0ZW0pO1xyXG4gICAgICAgIGVsc2UgaWYgKGl0ZW0uX2dyb3VwKVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUdyb3VwQ2xpY2soaXRlbSk7XHJcblxyXG4gICAgICAgIC8vIE9yYSBjaGUgbm9uIMOoIGF0dGFjY2F0byBkaXJldHRhbWVudGUgYWxsJ2h0bWwgZGV2byBmYXJlIHVuIG1hcmtmb3JjaGVjayBmaW5pdGUgbGUgb3BlcmF6aW9uaSBzdWkgZ3JvdXBpbmdcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlc3Rpb25lIGRlbCBjbGljayBkZXN0cm8gc3VsbCdlcy10YWJsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25SaWdodENsaWNrKCkge1xyXG4gICAgICAgIGlmICh0aGlzLlNlbGVjdGlvbilcclxuICAgICAgICAgICAgdGhpcy5vbk9wZW5Db250ZXh0TWVudS5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMYSBtb2RpZmljYSBkZWxsJ3V0ZW50ZSDDqCBpbml6aWF0YS4gU2kgaW1wb3N0YSBsYSB2YXJpYWJpbGUgcmVsYXRpdmEgYSBcInRydWVcIiBpbiBtb2RvIGRhIG1vc3RyYXJlIGwnaW5wdXQgZGkgdGVzdG9cclxuICAgICAqIFxyXG4gICAgICogRG9wbyBjaGUgbCdpbnB1dCDDqCBhcHBhcnNvLCBkb3BvIHVuIGNpY2xvIGRpIENoYW5nZSBEZXRlY3Rpb24gdmllbmUgYXR0aXZhdG8gaWwgU3ViamVjdCBjb2xsZWdhdG8gYWxsJ2lucHV0IGNoZSBzZXJ2aXLDoCBhIGVmZmV0dHVhcmUgaWwgZm9jdXNcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtUZEVsZW1lbnR9IHJvd0l0ZW0gRWxlbWVudG8gZGkgcmlnYSBzdSBjdWkgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gc29wcmEgaWwgcXVhbGUgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldHVwVXNlckVkaXQocm93SXRlbTogVGRFbGVtZW50LCBpdGVtOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzRXhjbHVkaW5nKG51bGwpO1xyXG4gICAgICAgIGlmICh0aGlzLkVkaXRhYmxlICYmIHJvd0l0ZW0uUHJvcGVydHlOYW1lKSB7XHJcbiAgICAgICAgICAgIGxldCBkeW5Nb2RlID0gdGhpcy5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24/Lmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgICg8YW55PnJvd0l0ZW0pLl9lZGl0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkub2xkX3ZhbHVlID0gZHluTW9kZSA/IGl0ZW0ucHJvcGVydGllc1tyb3dJdGVtLlByb3BlcnR5TmFtZV0gOiBpdGVtW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy5Gb2N1c1N1YmplY3QubmV4dCgpOyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExhIG1vZGlmaWNhIGRlbGwndXRlbnRlIMOoIHRlcm1pbmF0YS4gU2kgcmVpbXBvc3RhIGxhIHZhcmlhYmlsZSByZWxhdGl2YSBhIFwiZmFsc2VcIiBpbiBtb2RvIGRhIG5hc2NvbmRlcmUgbCdpbnB1dCBkaSB0ZXN0byBlIHNpIGVtZXR0ZSBsYSBtb2RpZmljYSBkZWwgdmFsb3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7VGRFbGVtZW50fSByb3dJdGVtIEVsZW1lbnRvIGRpIHJpZ2Egc3UgY3VpIMOoIHN0YXRhIGF0dGl2YXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBPZ2dldHRvIHNvcHJhIGlsIHF1YWxlIMOoIHN0YXRhIGF0dGl2YXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uSW5kZXggSW5kaWNlIGRlbGxhIGNvbG9ubmEgc3UgY3VpIMOoIGF2dmVudXRhIGxhIG1vZGlmaWNhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5hbGl6ZVVzZXJFZGl0KHJvd0l0ZW06IFRkRWxlbWVudCwgaXRlbTogYW55LCBjb2x1bW5JbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGR5bk1vZGUgPSB0aGlzLkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbj8ubGVuZ3RoID4gMDtcclxuICAgICAgICBsZXQgcm93SXRtID0gPGFueT5yb3dJdGVtO1xyXG4gICAgICAgIHJvd0l0bS5fZWRpdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICBsZXQgb2xkID0gcm93SXRtLm9sZF92YWx1ZTtcclxuICAgICAgICBsZXQgbml1ID0gZHluTW9kZSA/IGl0ZW0ucHJvcGVydGllc1tyb3dJdGVtLlByb3BlcnR5TmFtZV0gOiBpdGVtW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXTtcclxuXHJcbiAgICAgICAgbGV0IG9sZGRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKG9sZCk7XHJcbiAgICAgICAgbGV0IG5pdWRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKG5pdSk7XHJcbiAgICAgICAgaWYgKChvbGRkYXRlICYmIG5pdWRhdGUgJiYgb2xkZGF0ZS5pc1NhbWUgJiYgb2xkZGF0ZS5pc1NhbWUobml1ZGF0ZSkpIHx8IG9sZCA9PT0gbml1KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMub25Nb2RlbENoYW5nZS5lbWl0KFtuZXcgRXNUYWJsZU1vZGVsQ2hhbmdlKGl0ZW0sIHJvd0l0ZW0uSUQsIHJvd0l0ZW0uUHJvcGVydHlOYW1lLCBvbGQsIG5pdSldKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXVtjb2x1bW5JbmRleF0udmFsX3NldHRlcihuaXUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJhbmdlIHNlbGVjdGlvbiBFeHBlcmltZW50YWxzXHJcblxyXG4gICAgcHJpdmF0ZSBtb3VzZUlzRG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSByYW5nZVNlbGVjdGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHJhbmdlU3RhcnRXYXNJZ25vcmVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGZpcnN0Q29vcmRpbmF0ZXM6IHtyb3c6IG51bWJlciwgY29sdW1uOiBudW1iZXJ9ID0gbnVsbDtcclxuXHJcbiAgICBtb3VzZWRvd24oZXZlbnQ6IE1vdXNlRXZlbnQsIHJvd0l0ZW06IGFueSwgXzogYW55KSB7XHJcblxyXG4gICAgICAgIC8vIFRhc3RvIGRpdmVyc28gZGFsIGNsaWNrIHNpbmlzdHJvIC0+IGNpYW8gw6ggc3RhdG8gYmVsbG8gZSBpbnRlbnNvXHJcbiAgICAgICAgaWYoZXZlbnQuYnV0dG9ucyAhPSAxIHx8ICF0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFN0byBsYXZvcmFuZG8gc3UgUVVFU1RBIGVzLXRhYmxlXHJcbiAgICAgICAgdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5BY3RpdmVFc3RSZWZlcmVuY2UgPSB0aGlzO1xyXG5cclxuICAgICAgICAvLyBUdXR0aSBpIGNsaWNrIHN1IHVuYSBjZWxsYSBnacOgIGluIGVkaXQgbm9uIGRldm9ubyBlZmZldHR1YXJlIGxhIHNlbGV6aW9uZSBkZWxsYSByaWdhXHJcbiAgICAgICAgaWYgKCg8YW55PnJvd0l0ZW0pLl9lZGl0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VJc0Rvd24gPSB0cnVlO1xyXG5cclxuICAgICAgICBsZXQgY29vcmRzID0gKDxIVE1MRWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0KS5pZC5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCByb3cgPSBwYXJzZUludChjb29yZHNbY29vcmRzLmxlbmd0aCAtIDJdKTtcclxuICAgICAgICBsZXQgY29sdW1uID0gcGFyc2VJbnQoY29vcmRzW2Nvb3Jkcy5sZW5ndGggLSAxXSk7XHJcbiAgICAgICAgdGhpcy5maXJzdENvb3JkaW5hdGVzID0geyByb3csIGNvbHVtbiB9O1xyXG4gICAgICAgIC8vIFNlIGhvIGdpw6AgdW4gcmFuZ2UgZGkgc2VsZXppb25lIGlnbm9ybyB0ZW1wb3JhbmVtYWVudGUgcXVlc3RhIHNlbGV6aW9uZSBpbiBtb2RvIGRhIGNhcGlyZSBiZW5lIGNvc2EgZGV2byBmYXJlIGRvcG8gKGNsaWNrIHN1bGxhIHJpZ2EgLyBhbHRyYSBzZWxlemlvbmUpXHJcbiAgICAgICAgLy8gZSBnZXN0aXJlIGxhIGdyYWZpY2EgaW4gbWFuaWVyYSB1biBwbycgcGnDuSBwcmVjaXNhXHJcbiAgICAgICAgaWYgKCF0aGlzLnJhbmdlU2VsZWN0ZWQgfHwgKGV2ZW50LmN0cmxLZXkgfHwgIXRoaXMuU2VsZWN0aW9uKSlcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5zaW5nbGVDZWxsU2VsZWN0aW9uKHsgdmlldzogZXZlbnQudmlldywgcmFuZ2U6IGZhbHNlIH0sIHJvdywgY29sdW1uKTtcclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTdGFydFdhc0lnbm9yZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubG9nZ2VyLmxvZyhgbW91c2UgZG93biBvbiAke3Jvd306JHtjb2x1bW59YCk7XHJcbiAgICB9XHJcblxyXG4gICAgbW91c2VlbnRlcihldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgICAgIGlmKCF0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGlmIChldmVudC5idXR0b25zID09IDApXHJcbiAgICAgICAgICAgIHRoaXMubW91c2VJc0Rvd24gPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubW91c2VJc0Rvd24gJiYgdGhpcy5maXJzdENvb3JkaW5hdGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBpZCA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQuY3VycmVudFRhcmdldCkuaWQ7XHJcbiAgICAgICAgICAgIGxldCBjb29yZHMgPSBpZC5zcGxpdCgnXycpO1xyXG4gICAgICAgICAgICBsZXQgcm93ID0gcGFyc2VJbnQoY29vcmRzW2Nvb3Jkcy5sZW5ndGggLSAyXSk7XHJcbiAgICAgICAgICAgIGxldCBjb2x1bW4gPSBwYXJzZUludChjb29yZHNbY29vcmRzLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICAgICAgLy8gU2UgaG8gaWdub3JhdG8gbCdpbml6aW8gZGVsbGEgc2VsZXppb25lIG5lbCBtb3VzZWRvd24gbG8gcmVjdXBlcm8gcXVpXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlU3RhcnRXYXNJZ25vcmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILnNpbmdsZUNlbGxTZWxlY3Rpb24oeyB2aWV3OiBldmVudC52aWV3LCByYW5nZTogZmFsc2UgfSwgdGhpcy5maXJzdENvb3JkaW5hdGVzLnJvdywgdGhpcy5maXJzdENvb3JkaW5hdGVzLmNvbHVtbik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlU3RhcnRXYXNJZ25vcmVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5zaW5nbGVDZWxsU2VsZWN0aW9uKHsgdmlldzogZXZlbnQudmlldywgcmFuZ2U6IHRydWUgfSwgcm93LCBjb2x1bW4sIHRoaXMuZmlyc3RDb29yZGluYXRlcyk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhgbW91c2UgbW92ZSBvdmVyICR7cm93fToke2NvbHVtbn1gKTtcclxuICAgICAgICAgICAgdGhpcy5yYW5nZVNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbW91c2V1cChldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgICAgIGlmICghdGhpcy5SYW5nZVNlbGVjdGlvbilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgaWQgPSAoPEhUTUxFbGVtZW50PmV2ZW50LmN1cnJlbnRUYXJnZXQpLmlkO1xyXG4gICAgICAgIGxldCBjb29yZHMgPSBpZC5zcGxpdCgnXycpO1xyXG4gICAgICAgIGxldCByb3cgPSBwYXJzZUludChjb29yZHNbY29vcmRzLmxlbmd0aCAtIDJdKTtcclxuICAgICAgICBsZXQgY29sdW1uID0gcGFyc2VJbnQoY29vcmRzW2Nvb3Jkcy5sZW5ndGggLSAxXSk7XHJcblxyXG4gICAgICAgIC8vIFNlIGlsIG1vdXNldXAgdmllbmUgZWZmZXR0dWF0byBzdWxsYSBzdGVzc2EgY2VsbGEgZGVsIHByaW1vIG1vdXNlZG93biBlIHNpYW1vIGluIG1vZGFsaXTDoCBkaSBzZWxlemlvbmUgZGVzZWxlemlvbm8gbGEgY2VsbGEgcGVyY2jDqSDDqCB1biBzZW1wbGljZSBjbGlja1xyXG4gICAgICAgIGlmICh0aGlzLm1vdXNlSXNEb3duICYmIHRoaXMuZmlyc3RDb29yZGluYXRlcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdENvb3JkaW5hdGVzLnJvdyA9PSByb3cgJiYgdGhpcy5maXJzdENvb3JkaW5hdGVzLmNvbHVtbiA9PSBjb2x1bW4gJiYgIWV2ZW50LmN0cmxLZXkgJiYgIXRoaXMucmFuZ2VTdGFydFdhc0lnbm9yZWQgJiYgdGhpcy5TZWxlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILnNpbmdsZUNlbGxTZWxlY3Rpb24oeyB2aWV3OiBldmVudC52aWV3LCByYW5nZTogZmFsc2UgfSwgcm93LCBjb2x1bW4pO1xyXG4gICAgICAgICAgICBlbHNlIGlmIChldmVudC5jdHJsS2V5IHx8ICF0aGlzLlNlbGVjdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VTZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vdXNlSXNEb3duID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKGBtb3VzZSBsaWZ0ZWQgdXBgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyogUGlhbmdvXHJcbiAgICBwcml2YXRlIEVzVGRzQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBFc1RkIH0gPSB7fTtcclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2VsbFJlZmVyZW5jZShvYmplY3Q6IGFueSwgY29sdW1uOiBzdHJpbmcpOiBFc1RkIHtcclxuICAgICAgICBsZXQgZmtUaGlzU2hpdEltT3V0ID0gdGhpcy51dGlFeHRzLmRlZXBDbG9uZShvYmplY3QpO1xyXG4gICAgICAgIHRoaXMudXRpbGl0aWVzX0guY2FsY3VsYXRlSGFzaChbZmtUaGlzU2hpdEltT3V0XSk7XHJcbiAgICAgICAgbGV0IHByb3AgPSBjb2x1bW47XHJcbiAgICAgICAgbGV0IGhhc2ggPSBma1RoaXNTaGl0SW1PdXQuX2hhc2g7XHJcblxyXG4gICAgICAgIGxldCB0b1JldCA9IHRoaXMuRXNUZHNDYWNoZVtgJHtwcm9wfV8ke2hhc2h9YF07XHJcbiAgICAgICAgcmV0dXJuIHRvUmV0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3RlckNlbGwoZXZlbnQ6IEVzVGRSZWZlcmVuY2UpIHtcclxuICAgICAgICB0aGlzLkVzVGRzQ2FjaGVbYCR7ZXZlbnQuaWR9XyR7ZXZlbnQuaGFzaH1gXSA9IGV2ZW50LnNlbGZcclxuICAgIH1cclxuICAgIC8vKiBQaWFuZ28gYW5jb3JhXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFc1RkUmVmZXJlbmNlIHtcclxuICAgIGlkOiBzdHJpbmc7XHJcbiAgICBoYXNoOiBzdHJpbmc7IFxyXG4gICAgc2VsZjogRXNUZDtcclxufSIsIjwhLS0gUGF0YWNjaGlubyBkaSBhdXRvYWdnaW9ybmFtZW50byAtLT5cclxuPGRpdiBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJBdXRvVXBkYXRlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiPlxyXG4gICAgICAgIHt7J1VwZGF0ZSBldmVyeScgfCBsb2NhbGl6ZSA6IGxjfX0mbmJzcDs8aW5wdXQgW3JlYWRvbmx5XT1cImF1dG9VcGRhdGVcIiBtYXhsZW5ndGg9XCIzXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZXN0LWN1c3RvbS1pbnB1dFwiIHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWNvbmRzXCIgW25nTW9kZWxPcHRpb25zXT1cInsnc3RhbmRhbG9uZSc6IHRydWV9XCIgLz4mbmJzcDt7eydzZWNvbmQvcycgfCBsb2NhbGl6ZSA6IGxjfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHQgbS10LTJcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJlc3Qtc3dpdGNoXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImF1dG9VcGRhdGVcIiBbbmdNb2RlbE9wdGlvbnNdPVwieydzdGFuZGFsb25lJzogdHJ1ZX1cIiAobmdNb2RlbENoYW5nZSk9XCJhdXRvVXBkYXRlQ2hhbmdlZCgpO1wiIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlc3Qtc2xpZGVyIHJvdW5kXCI+PC9kaXY+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cIlZpZXdcIiBjbGFzcz1cImVzdC1yZWxhdGl2ZVwiIFtzdHlsZS5oZWlnaHRdPVwiSGVpZ2h0XCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiRW1wdHlTcGFjZUJhY2tncm91bmRDb2xvclwiPlxyXG4gICAgPGRpdiAqbmdJZj1cIkZpcnN0QmluZCAmJiBTaG93TG9hZGluZ09uQm9vdHN0cmFwXCIgY2xhc3M9XCJlc3QtbG9hZGluZy1ib3hcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXN0LWxvYWRpbmctY29udGVudFwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXNwaW5uZXIgZmEtc3BpblwiPjwvc3Bhbj4mbmJzcDt7eydQZXJmb3JtaW5nIFRhYmxlIGJvb3RzdHJhcCcgfCBsb2NhbGl6ZTogbGN9fS4uLlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImVzdC10b3AtcGFnZXJcIiAqbmdJZj1cIlBhZ2luZ1N0eWxlID09ICdib3RoJyB8fCBQYWdpbmdTdHlsZSA9PSAndG9wJ1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmdFbGVtZW50XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZXN0LXRvcC1hbGxzZWxlY3RcIiAqbmdJZj1cImNhblNlbGVjdEFsbCB8fCAoVmlldz8uc2VsZWN0aW9uIHx8IGFycmF5bW9kZVNlbGVjdGlvbik/LmFsbFwiPlxyXG4gICAgICAgIDxzcGFuPnt7IChzZWxlY3RlZE9iamVjdHMgPT0gLTEgPyAoJ0FsbCB0aGUnIHwgbG9jYWxpemUgOiBsYykgOiAoKHNlbGVjdGVkT2JqZWN0cyB8fCAwKSB8IG51bWJlciA6ICcwLjAtMCcgOiBsYy5Mb2NhbGUpKSArICcgJyArICgoc2VsZWN0ZWRPYmplY3RzID09IDEgPyAnT2JqZWN0IFNlbGVjdGVkJyA6ICdPYmplY3RzIFNlbGVjdGVkJykgfCBsb2NhbGl6ZSA6IGxjKSB9fTwvc3Bhbj4mbmJzcDtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cImVzdC1saW5rIGVzdC1pbmxpbmVcIiAoY2xpY2spPVwic2VsZWN0aW9uX0guc2VsZWN0QWxsT3JSZXNldFNlbGVjdGlvbigpXCI+e3sgKFZpZXc/LnNlbGVjdGlvbiB8fCBhcnJheW1vZGVTZWxlY3Rpb24pPy5hbGwgPyAoJ1Jlc2V0IFNlbGVjdGlvbicgfCBsb2NhbGl6ZSA6IGxjKSA6ICgnU2VsZWN0IEV2ZXJ5dGhpbmcnIHwgbG9jYWxpemUgOiBsYyl9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlIGRhdGF0YWJsZSBlc3QtZnVsbC1oZWlnaHQge3tDb250YWluZXJDbGFzc319XCIgW3N0eWxlLm1heC1oZWlnaHQucHhdPVwiTWF4SGVpZ2h0XCI+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwie3sgVGFibGVDbGFzcyB9fSBlc3QtbWFyZ2luLWJvdHRvbS0xMCBlc3RcIiBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6IHdoaXRlO1wiICBbY2xhc3MuZXN0LWhpZ2gtZGVuc2l0eV09XCJIaWdoQ2VsbERlbnNpdHlcIj5cclxuICAgICAgICAgICAgPHRoZWFkIFtoaWRkZW5dPVwiSGVhZGVySGlkZGVuIHx8IEZpcnN0QmluZFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBBZ2dpdW5nbyBpbCBwZXp6byBjaGUgZ2VzdGlzY2UgbGEgc2VsZXppb25lIGRpIHR1dHRvIHNlIGF0dGl2byBkYSBjb25maWcgLS0+XHJcbiAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCIoU2VsZWN0QWxsICYmICFTaW5nbGVTZWxlY3Rpb24pIHx8IFBhZ2luZ1N0eWxlICE9ICdib3R0b20nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiZXN0LW5vLXNlbGVjdGlvblwiIFthdHRyLmNvbHNwYW5dPVwiQ29sdW1ucy5HbG9iYWxcIiBbY2xhc3MuZXN0LWhpZGRlbi12aWV3XT1cIiFjYW5TZWxlY3RBbGwgJiYgIShWaWV3Py5zZWxlY3Rpb24gfHwgYXJyYXltb2RlU2VsZWN0aW9uKT8uYWxsICYmIFBhZ2luZ1N0eWxlID09ICdib3R0b20nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZXN0LWhpZGRlbi12aWV3IGFwcC1tYXJnaW4tYm90dG9tLTBcIj7CpzwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC90cj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEJsb2NjbyBoZWFkZXIgZ3JvdXAgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiUm93VGhHcm91cHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGxldmVsIG9mIFJvd1RoR3JvdXBzOyB0cmFja0J5OiBJRFRyYWNrQnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBjZWxsIG9mIGxldmVsOyB0cmFja0J5OiBJRFRyYWNrQnlcIiBbYXR0ci5jb2xzcGFuXT1cImNlbGwuU3BhblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LXBpbm5lZC1oZWFkZXJdPVwiY2VsbC5QaW5uZWRcIiBbY2xhc3MuZXN0LWNvbC1taW5dPVwiY2VsbC5QaW5uZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVzdC1sdGFiLWJvcmRlcl09XCJjZWxsLkJvcmRlcnNcIiBbY2xhc3MuZXN0LXJ0YWItYm9yZGVyXT1cImNlbGwuQm9yZGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVzdC10ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuUGlubmVkO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cIlBpbm5lZENvbnRhaW5lcldpZHRoXCIgY2xhc3M9XCJlc3QtcGlubmVkLWJvcmRlciBlc3QtY2VsbC1ncm91cC1wYWRkaW5nXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2VsbC5QaW5uZWQgJiYgY2VsbC5Db250ZW50OyBFbHNlOiBjZWxsLlRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tjZWxsLkNvbnRlbnR9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhUm93VGhHcm91cHNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJIYXNIZWFkZXJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyR3JvdXBSZWZcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiRXhwb3J0XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIEJsb2NjbyBoZWFkZXIgZ3JvdXAgc2Vjb25kYXJpbyAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJIYXNTZWNvbmRhcnlIZWFkZXJHcm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2Vjb25kYXJ5SGVhZGVyR3JvdXBSZWZcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiRXhwb3J0XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBCbG9jY28gZWZmZXR0aXZvIGRlZ2xpIGhlYWRlciAtLT5cclxuICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGhlYWQtPnRyLT5kZWJ1Z19ibG9ja1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZWxlY3Rpb246IHt7U2VsZWN0aW9ufX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgSGFzUGlubmVkQ29sdW1uczoge3tIYXNQaW5uZWRDb2x1bW5zfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlNb2RlOiB7e2FycmF5TW9kZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlOiB7e3ZpZXdNb2RlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlQ3VzdG9tQ2VsbHM6IHt7VXNlQ3VzdG9tQ2VsbHN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSb3dUSHM6IHt7ISFSb3dUSHN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSb3dUSHMubGVuZ3RoOiB7e1Jvd1RIcz8ubGVuZ3RofX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uOiB7eyEhRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9ufX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBBZ2dpdW5nbyB1bmEgY2hlY2tib3ggc2UgbGEgc2VsZXppb25lIMOoIGF0dGl2YSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJlc3QtY29sLW1pblwiICpuZ0lmPVwiU2VsZWN0aW9uICYmICFIYXNQaW5uZWRDb2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFTaW5nbGVTZWxlY3Rpb25cIiBjbGFzcz1cImVzdC1wb2ludGVyXCIgdHlwZT1cImNoZWNrYm94XCIgW2Rpc2FibGVkXT1cIlNlbGVjdGlvbkRpc2FibGVkXCIgWyhuZ01vZGVsKV09XCJnbG9iYWxDaGVja1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7J3N0YW5kYWxvbmUnOiB0cnVlfVwiIChuZ01vZGVsQ2hhbmdlKT1cImdsb2JhbENoZWNrQ2hhbmdlZCgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSGVhZGVyIGNoZSB2YWxnb25vIHBlciB2aWV3IG1vZGUgZSBhcnJheSBtb2RlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcnJheU1vZGUgfHwgdmlld01vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBJbiB1bmEgdGFiZWxsYSBiYXNlIHByZW5kbyBzZW1wbGljZW1lbnRlIGkgdGggc2NyaXR0aSBkYWxsJ3V0ZW50ZSBuZWxsJ0hUTUwgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoIVVzZUN1c3RvbUNlbGxzIHx8ICFSb3dUSHMgfHwgUm93VEhzLmxlbmd0aCA9PSAwKSAmJiAhRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyUmVmXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZSBobyB1biBtb2RlbGxvIGRpbmFtaWNvIGRlbGwnb2dnZXR0byBjcmVvIGxlIGNvbG9ubmUgaW4gYmFzZSBhbGxlIHByb3ByaWV0w6AgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoIVVzZUN1c3RvbUNlbGxzIHx8ICFSb3dUSHMgfHwgUm93VEhzLmxlbmd0aCA9PSAwKSAmJiBEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdGb3I9XCJsZXQgb3BlcmF0aW9uIG9mIER5bmFtaWNPcGVyYXRpb25zOyB0cmFja0J5OiBpZFRyYWNrQnlcIiBjbGFzcz1cImVzdC1jb2wtbWluIGVzdC1uby1zaWRlLXBhZGRpbmdcIj48L3RoPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0hlYWRlciBvZiBEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb247IHRyYWNrQnk6IFByb3BlcnR5TmFtZVRyYWNrQnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93SGVhZGVyLlZpc2libGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiT3JkZXJCeUNvbHVtblwiICBpZD1cImVzdGhfe3tyb3dIZWFkZXIuUHJvcGVydHlOYW1lfX1cIiBlcy10aD1cInt7cm93SGVhZGVyLlByb3BlcnR5TmFtZX19XCIgY2xhc3M9XCJ7e1VzZXJEZWZpbmVkRHluYW1pY0NvbHMgPyAoKHJvd0hlYWRlci5DbHNzIHx8ICcnKSArIChyb3dIZWFkZXIuSGVhZGVyV3JhcHMgPyAnJyA6ICcgZXN0LW5vd3JhcCcpKSA6ICcgZXN0LW5vd3JhcCd9fVwiIFtPcmRlcl09XCJyb3dIZWFkZXIuRGF0YU9yZGVyXCIgW1Jlc2l6YWJsZV09XCJDb2x1bW5zUmVzaXphYmxlXCIgW09yZGVyYWJsZV09XCJyb3dIZWFkZXIuT3JkZXJhYmxlXCIgW09yZGVyQnldPVwiT3JkZXJCeUNvbHVtblwiIFtTZWFyY2hJblByb2dyZXNzXT1cIiEhcmVzZWFyY2hJblByb2dyZXNzXCIgKG9uT3JkZXJDaGFuZ2UpPVwidGhPcmRlckNoYW5nZWQocm93SGVhZGVyLlByb3BlcnR5TmFtZSwgJGV2ZW50KVwiPnt7cm93SGVhZGVyLkRlc2NyaXB0aW9ufX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCIhT3JkZXJCeUNvbHVtblwiIGlkPVwiZXN0aF97e3Jvd0hlYWRlci5Qcm9wZXJ0eU5hbWV9fVwiIGVzLXRoPVwie3tyb3dIZWFkZXIuUHJvcGVydHlOYW1lfX1cIiBjbGFzcz1cInt7VXNlckRlZmluZWREeW5hbWljQ29scyA/ICgocm93SGVhZGVyLkNsc3MgfHwgJycpICsgKHJvd0hlYWRlci5IZWFkZXJXcmFwcyA/ICcnIDogJyBlc3Qtbm93cmFwJykpIDogJyBlc3Qtbm93cmFwJ319XCIgW09yZGVyXT1cInJvd0hlYWRlci5EYXRhT3JkZXJcIiBbUmVzaXphYmxlXT1cIkNvbHVtbnNSZXNpemFibGVcIiBbT3JkZXJhYmxlXT1cInJvd0hlYWRlci5PcmRlcmFibGVcIiBbT3JkZXJCeV09XCJPcmRlckJ5Q29sdW1uXCI+e3tyb3dIZWFkZXIuRGVzY3JpcHRpb259fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlIG5vbiBobyB1biBtb2RlbGxvIGRpbmFtaWNvIG1hIGludmVjZSBkZWxsZSBjZWxsZSBjdXN0b20sIGdlbmVybyBnbGkgaGVhZGVyIGluIGJhc2UgYWkgcm93IHRoIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiVXNlQ3VzdG9tQ2VsbHMgJiYgUm93VEhzPy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJIYXNQaW5uZWRDb2x1bW5zXCIgY2xhc3M9XCJlc3QtcGlubmVkLWhlYWRlciBlc3QtY29sLW1pblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cIlBpbm5lZENvbnRhaW5lcldpZHRoXCIgY2xhc3M9XCJlc3QtcGlubmVkLWJvcmRlciBlc3Qtc2ltcGxlLWJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiZXN0LWNvbC1taW4gZXN0LW5vLWJvcmRlclwiICpuZ0lmPVwiU2VsZWN0aW9uXCIgW3N0eWxlLndpZHRoLnB4XT1cIjIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCIhU2luZ2xlU2VsZWN0aW9uXCIgY2xhc3M9XCJlc3QtcG9pbnRlclwiIHR5cGU9XCJjaGVja2JveFwiIFtkaXNhYmxlZF09XCJTZWxlY3Rpb25EaXNhYmxlZFwiIFsobmdNb2RlbCldPVwiZ2xvYmFsQ2hlY2tcIiBbbmdNb2RlbE9wdGlvbnNdPVwieydzdGFuZGFsb25lJzogdHJ1ZX1cIiAobmdNb2RlbENoYW5nZSk9XCJnbG9iYWxDaGVja0NoYW5nZWQoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93SGVhZGVyIG9mIFJvd1RIczsgdHJhY2tCeTogSURUcmFja0J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJyb3dIZWFkZXIgJiYgcm93SGVhZGVyLlZpc2libGUgJiYgcm93SGVhZGVyLlBpbm5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInJvd0hlYWRlci5QaW5uZWRXaWR0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMtdGg9XCJ7e3Jvd0hlYWRlci5JRH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7cm93SGVhZGVyLkNsYXNzIHx8ICcnfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3QtcGlubmVkLWludGVybmFsLWhlYWRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LW5vLWJvcmRlcl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LW5vd3JhcF09XCIhcm93SGVhZGVyLldyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtQaW5uZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0ZpeGVkXT1cInJvd0hlYWRlci5GaXhlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW09yZGVyXT1cInJvd0hlYWRlci5PcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1Jlc2l6YWJsZV09XCJDb2x1bW5zUmVzaXphYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3JkZXJhYmxlXT1cInJvd0hlYWRlci5PcmRlcmFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcmRlckJ5XT1cIk9yZGVyQnlDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTZWFyY2hJblByb2dyZXNzXT1cIiEhcmVzZWFyY2hJblByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25VbnBpbm5pbmcpPVwiY29sdW1uTWV0YWRhdGFfSC51bnBpbkNvbHVtbigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25PcmRlckNoYW5nZSk9XCJ0aE9yZGVyQ2hhbmdlZChyb3dIZWFkZXIuSUQsICRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJvd0hlYWRlci5UZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dIZWFkZXIuVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiByb3dIZWFkZXIuTXVsdGkgPyByb3dIZWFkZXIuTXVsdGlDb250ZW50IDogbnVsbCB9IFwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXJvd0hlYWRlci5UZW1wbGF0ZVwiPnt7cm93SGVhZGVyLkNvbnRlbnR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvd0hlYWRlciBvZiBSb3dUSHM7IHRyYWNrQnk6IElEVHJhY2tCeVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwidGhlYWQtPnRyLT50aC0+ZGVidWdfYmxvY2tcIiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SGVhZGVyOiB7eyEhcm93SGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SGVhZGVyLlZpc2libGU6IHt7cm93SGVhZGVyPy5WaXNpYmxlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SGVhZGVyLlBpbm5lZDoge3tyb3dIZWFkZXI/LlBpbm5lZH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0hlYWRlci5UZW1wbGF0ZToge3shIXJvd0hlYWRlci5UZW1wbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInJvd0hlYWRlciAmJiByb3dIZWFkZXIuVmlzaWJsZSAmJiAhcm93SGVhZGVyLlBpbm5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzLXRoPVwie3tyb3dIZWFkZXIuSUR9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tyb3dIZWFkZXIuQ2xhc3MgfHwgJyd9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS50ZXh0LWFsaWduXT1cIiByb3dIZWFkZXIuQWxpZ25tZW50IHx8IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LWx0YWItYm9yZGVyXT1cInJvd0hlYWRlci5MZWZ0Qm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVzdC1ydGFiLWJvcmRlcl09XCJyb3dIZWFkZXIuUmlnaHRCb3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LW5vd3JhcF09XCIhcm93SGVhZGVyLldyYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3JkZXJdPVwicm93SGVhZGVyLk9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1Jlc2l6YWJsZV09XCJDb2x1bW5zUmVzaXphYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW09yZGVyYWJsZV09XCJyb3dIZWFkZXIuT3JkZXJhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW09yZGVyQnldPVwiT3JkZXJCeUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtTZWFyY2hJblByb2dyZXNzXT1cIiEhcmVzZWFyY2hJblByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uT3JkZXJDaGFuZ2UpPVwidGhPcmRlckNoYW5nZWQocm93SGVhZGVyLklELCAkZXZlbnQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93SGVhZGVyLlRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0hlYWRlci5UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvd0hlYWRlci5NdWx0aSA/IHJvd0hlYWRlci5NdWx0aUNvbnRlbnQgOiBudWxsIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcm93SGVhZGVyLlRlbXBsYXRlXCI+e3tyb3dIZWFkZXIuQ29udGVudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1QZXIgbCdlbGltaW5hemlvbmUgbWkgc2VydmUgdW4gaGVhZGVyIGFnZ2l1bnRpdm8tLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJSZW1vdmFsXCIgW2NsYXNzLmVzdC1yaWdodC05XT1cIkV4cG9ydCB8fCBIaWRkZW5Db2x1bW5zXCIgY2xhc3M9XCJlc3QtY29sLW1pbiBlc3Qtc3RpY2t5LWxhc3QtY29sdW1uXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS10cmFzaFwiPjwvc3Bhbj48L3RoPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tUGVyIGwnZXNwb3J0YXppb25lIG1pIHNlcnZlIGwnaGVhZGVyIGV4dHJhIGRhIGN1aSBmYWNjaW8gdXNjaXJlIGkgMyBwYWxsb2NjaGktLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJFeHBvcnQgfHwgSGlkZGVuQ29sdW1ucyB8fCBDb2x1bW5zT3JkZXJpbmcgfHwgQ29ybmVyTWVudU9wdGlvbnNcIiBjbGFzcz1cImVzdC10YWJsZS1kb3R0ZWQtbWVudSBlc3Qtc3RpY2t5LWxhc3QtY29sdW1uIGVzdC1jb2wtbWluIHRleHQtc20tY2VudGVyXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEJsb2NjbyBjb24gaSAzIHBhbGxvY2NoaSBjaGUgdGlyYSBmdW9yaSBpbCBjb250ZXh0IG1lbnUgZGVsbGUgb3BlcmF6aW9uaSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1ncm91cFwiIGNvbnRhaW5lcj1cImJvZHlcIiBwbGFjZW1lbnQ9XCJib3R0b20gcmlnaHRcIiBkcm9wZG93biAjZHJvcGRvd249XCJicy1kcm9wZG93blwiIFthdXRvQ2xvc2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gZHJvcGRvd25Ub2dnbGUgY2xhc3M9XCJmYSBmYS1lbGxpcHNpcy12IGVzdC1mcy0xOCBlc3QtcG9pbnRlciBlc3QtcGFkZGluZy0zXCI+PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKmRyb3Bkb3duTWVudSBjbGFzcz1cImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudS1yaWdodCBlc3QtYnJpbmctdG8tZnJvbnQtc3Ryb25nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0lmPVwiSGlkZGVuQ29sdW1ucyB8fCBDb2x1bW5zT3JkZXJpbmdcIiAoY2xpY2spPVwiY29sdW1uTWV0YWRhdGFfSC5yZXNldENvbHVtblZpc1NlbGVjdGlvbigpOyBjaGFuZ2VDb2x1bW5WaXNpYmlsaXR5TW9kYWwuc2hvdygpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFIaWRkZW5Db2x1bW5zICYmIENvbHVtbnNPcmRlcmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NvbHVtbnMgT3JkZXInIHwgbG9jYWxpemUgOiBsY319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJIaWRkZW5Db2x1bW5zICYmICFDb2x1bW5zT3JkZXJpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydDb2x1bW5zIFZpc2liaWxpdHknIHwgbG9jYWxpemUgOiBsY319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJIaWRkZW5Db2x1bW5zICYmIENvbHVtbnNPcmRlcmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NvbHVtbnMgVmlzaWJpbGl0eSBhbmQgT3JkZXInIHwgbG9jYWxpemUgOiBsY319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdJZj1cIkV4cG9ydCAmJiBDU1ZFeHBvcnRcIiAoY2xpY2spPVwiZXhwb3J0X0gudHJ5RXhwb3J0KCdDU1YnKVwiPnt7J0V4cG9ydCBWaWV3JyB8IGxvY2FsaXplIDogbGN9fSAoQ1NWKTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nSWY9XCJFeHBvcnQgJiYgWExTWEV4cG9ydFwiIChjbGljayk9XCJleHBvcnRfSC50cnlFeHBvcnQoJ1hMU1gnKVwiPnt7J0V4cG9ydCBWaWV3JyB8IGxvY2FsaXplIDogbGN9fSAoWExTWCk8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgQ29ybmVyTWVudU9wdGlvbnM7IHRyYWNrQnk6IGlkVHJhY2tCeVwiIChjbGljayk9XCJjb3JuZXJBY3Rpb25DbGlja2VkKG9wdGlvbi5pZClcIj57e29wdGlvbi5kZXNjcmlwdGlvbn19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgICAgICAgPHRib2R5IFtoaWRkZW5dPVwiQm9keUhpZGRlbiB8fCBGaXJzdEJpbmRcIiBbY2xhc3MuZXN0LW5vLXNlbGVjdGlvbl09XCJSYW5nZVNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLUNvbiBzZWxlY3Rpb24gYXR0aXZhIHJpY2hpYW1vIGlsIHRlbXBsYXRlIGNoZSBnZXN0aXNjZSBpbCBjb250ZXh0IG1lbnUtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTZWxlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiVEJvZHlTZWxlY3Rpb247IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHNlbERpc2FibGVkOiBhcnJheU1vZGUgPyBmYWxzZSA6IFNlbGVjdGlvbkRpc2FibGVkLCBzZWw6IFNlbGVjdGlvbiB9fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLVNlbnphIHNlbGVjdGlvbiByaWNoaWFtbyBpbCB0ZW1wbGF0ZSBjaGUgTk9OIGdlc3Rpc2NlIGlsIGNvbnRleHQgbWVudS0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFTZWxlY3Rpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiVEJvZHlcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiUGFnaW5nU3R5bGUgPT0gJ2JvdGgnIHx8IFBhZ2luZ1N0eWxlID09ICdib3R0b20nXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luZ0VsZW1lbnRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gVGVtcGxhdGUgY2hlIGNvbnRpZW5lIHR1dHRlIGxlIGluZm8gZGkgcGFnaW5hemlvbmUgaW4gbW9kbyBkYSBwb3RlcmxvIHJlcGxpY2FyZSBhbmNoZSBzb3ByYSAtLT5cclxuPG5nLXRlbXBsYXRlICNwYWdpbmdFbGVtZW50PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFGaXJzdEJpbmRcIj5cclxuICAgICAgICA8IS0tIFB1bHNhbnRpIGF2YW50aS1pbmRpZXRybyBkaSBwYWdpbmF6aW9uZSAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiUGFnZXJPcHRpb25zLlNob3dQYWdpbmcgJiYgUGFnZXJPcHRpb25zLlNob3dCdXR0b25zICYmIChQYWdlck9wdGlvbnMuUGFnZXJDb3VudCA+IDEwIHx8IFBhZ2VyT3B0aW9ucy5QYWdlckNvdW50ID09IC0xKVwiIGNsYXNzPVwicHVsbC1yaWdodCBidG4tdG9vbGJhclwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiUGFnZXJPcHRpb25zLlZpZXc/LnBhZ2luZ2F2YWlsYWJsZSB8fCB2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luZ0J1dHRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IE1hcmdpbjogdHJ1ZSwgQVRQOiBhZGRUb1BhZ2UuYmluZCh0aGlzKSwgR1RQOiBnb1RvUGFnZS5iaW5kKHRoaXMpLCBBcnJheTogYXJyYXlQdWxzYW50aSB9fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFycmF5TW9kZSAmJiBVc2VBcnJheU1vZGVQYWdpbmcgJiYgIVNlYXJjaFZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmdCdXR0b25zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBNYXJnaW46IHRydWUsIEFUUDogYXJyYXlBZGRUb1BhZ2UuYmluZCh0aGlzKSwgR1RQOiBhcnJheUdvVG9QYWdlLmJpbmQodGhpcyksIEFycmF5OiBhcnJheVB1bHNhbnRpIH19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwhLS0gUGFnaW5hdG9yZSBkb3ZlIGFwcGFyZSBsYSBjb3VudCBlIGxlIG9wemlvbmkgZGkgcGFnaW5hemlvbmUgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInB1bGwtcmlnaHRcIiAqbmdJZj1cIlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgfHwgUGFnZXJPcHRpb25zLlNob3dQYWdpbmdPcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlc3QtbXQtbWluLTVcIiAqbmdJZj1cIlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXBhZ2luZyAqbmdJZj1cIiFQYWdlck9wdGlvbnMuVXNlc1ZpZXdcIiBbQ291bnRMYWJlbF09XCJDb3VudExhYmVsXCIgW1Nob3dQYWdpbmddPVwiUGFnZXJPcHRpb25zLlNob3dQYWdpbmdPcHRpb25zXCIgW1Nob3dDb3VudF09XCJQYWdlck9wdGlvbnMuU2hvd0NvdW50XCIgW1BhZ2VyQ291bnRdPVwiUGFnZXJPcHRpb25zLlBhZ2VyQ291bnRcIiBbV2Fybk9uQWxsXT1cImZhbHNlXCIgW0N1cnJlbnRQYWdlU2l6ZV09XCJBcnJheW1vZGVJdGVtc1BlclBhZ2VcIiAocGFnaW5nU2VsZWN0ZWQpPVwiaXRlbXNfSC5yZWZyZXNoUGFnaW5nKCRldmVudClcIj48L2FwcC1wYWdpbmc+XHJcbiAgICAgICAgICAgICAgICA8YXBwLXBhZ2luZyAqbmdJZj1cIlBhZ2VyT3B0aW9ucy5Vc2VzVmlld1wiIFtDb3VudExhYmVsXT1cIkNvdW50TGFiZWxcIiBbU2hvd1BhZ2luZ109XCJQYWdlck9wdGlvbnMuU2hvd1BhZ2luZ09wdGlvbnNcIiBbU2hvd0NvdW50XT1cIlBhZ2VyT3B0aW9ucy5TaG93Q291bnRcIiBbUGFnZXJDb3VudF09XCJQYWdlck9wdGlvbnMuUGFnZXJDb3VudFwiIFtHcm91cE1vZGVdPVwiUGFnZXJPcHRpb25zLlNlYXJjaGVzID09ICdncm91cHMnXCIgW0FsbFNlYXJjaF09XCJBbGxTZWFyY2hcIiBbVmlld109XCJQYWdlck9wdGlvbnMuVmlld1wiIChwYWdpbmdTZWxlY3RlZCk9XCJvbkl0ZW1zUGVyUGFnZUNoYW5nZWQoJGV2ZW50KTtcIj48L2FwcC1wYWdpbmc+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjbGVhcmZpeFwiPjwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFRlbXBsYXRlIGNoZSBjb250aWVuZSBpIHB1bHNhbnRpIHBlciBjYW1iaWFyZSBwYWdpbmEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjcGFnaW5nQnV0dG9ucyBsZXQtb3B0aW9ucz5cclxuICAgIDxkaXYgY2xhc3M9XCJlc3QtZmxleFwiIFtjbGFzcy5lc3QtbWFyZ2luLWxlZnQtNTBdPVwib3B0aW9ucy5NYXJnaW5cIj5cclxuICAgICAgICA8YSBjbGFzcz1cImJ0blwiIGNsYXNzPVwiZXN0LXBhZ2UtcHJldiBhcHAtcG9pbnRlclwiIChjbGljayk9XCJvcHRpb25zLkFUUCgtMSwgb3B0aW9ucy5zZXBhcmF0b3IpXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnRcIj48L3NwYW4+PC9hPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zLkFycmF5XCIgY2xhc3M9XCJlc3QtaW5saW5lXCI+PGEgKm5nRm9yPVwibGV0IHAgb2Ygb3B0aW9ucy5BcnJheTsgdHJhY2tCeTogdmFsVHJhY2tCeVwiIGNsYXNzPVwiYnRuIGVzdC1wYWdlLXNlbCB7e3AuY3NzQ2xhc3N9fVwiIChjbGljayk9XCJvcHRpb25zLkdUUChwLnZhbCwgb3B0aW9ucy5zZXBhcmF0b3IpXCI+e3twLnZhbH19PC9hPjwvZGl2PlxyXG4gICAgICAgIDxhIGNsYXNzPVwiYnRuXCIgY2xhc3M9XCJlc3QtcGFnZS1uZXh0IGFwcC1wb2ludGVyXCIgKGNsaWNrKT1cIm9wdGlvbnMuQVRQKDEsIG9wdGlvbnMuc2VwYXJhdG9yKVwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodFwiPjwvc3Bhbj48L2E+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gUXVlc3RpIGR1ZSB0ZW1wbGF0ZSByYXBwcmVzZW50YW5vIGVmZmV0dGl2YW1lbnRlIGlsIGJvZHkgZGVsbGEgdGFiZWxsYS4gZXNzZW5kbyBpbCB0ciBsJ3VuaWNhIGNvc2EgY2hlIGRhdnZlcm8gY2FtYmlhLCBpbCByZXN0byDDqCB0ZW1wbGF0aXp6YXRvIC0tPlxyXG48bmctdGVtcGxhdGUgI1RCb2R5U2VsZWN0aW9uIGxldC10ZW1wbGF0ZU9wdGlvbnM+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJvdW5kU291cmNlOyBsZXQgZXZlbiA9IGV2ZW47IGxldCBpPWluZGV4OyB0cmFja0J5OiBib2R5VHJhY2tCeVwiPlxyXG4gICAgICAgIDx0ciAqbmdJZj1cIml0ZW0uX3Zpc2libGUgfHwgKCFIaWVyYXJjaHkgJiYgIUFycmF5R3JvdXBpbmcpXCJcclxuICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uX3Jvd0NsYXNzID8gaXRlbS5fcm93Q2xhc3MgOiAnJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5lc3QtbGluZS10aHJvdWdoXT1cIml0ZW0ucmVtb3ZlZCB8fCBpdGVtLmRlbGV0ZWRcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXN0LXBvaW50ZXJdPVwiIWl0ZW0ubG9ja2VkXCJcclxuICAgICAgICAgICAgW2NsYXNzLmVzdC13aGl0ZS1zZWxlY3RlZF09XCJpdGVtLl9zZWxlY3RlZCAmJiAhaXRlbS5sb2NrZWRcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXN0LXJnXT1cIml0ZW0uX2dyb3VwXCJcclxuICAgICAgICAgICAgW2NsYXNzLmVzdC1yZy1zZXBdPVwiaXRlbS5fc2VwXCJcclxuICAgICAgICAgICAgW2NvbnRleHRNZW51XT1cIiFpdGVtLmxvY2tlZCA/IChDb250ZXh0TWVudSB8fCBlbXB0eU1lbnUpIDogZW1wdHlNZW51XCIgW2NvbnRleHRNZW51U3ViamVjdF09XCJpdGVtXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIiFSYW5nZVNlbGVjdGlvbiAmJiBoYW5kbGVSb3dDbGljaygkZXZlbnQsIGl0ZW0sIHRydWUpXCJcclxuICAgICAgICAgICAgKGNvbnRleHRtZW51KT1cIm9uUmlnaHRDbGljaygpO1wiPlxyXG5cclxuICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWl0ZW0ubG9ja2VkICYmICFpdGVtLl9zZXAgJiYgIUhhc1Bpbm5lZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRlbXBsYXRlT3B0aW9ucy5zZWxEaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3QtcG9pbnRlcl09XCIhaXRlbS5sb2NrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0uX3NlbGVjdGVkXCIgbmFtZT1cImNoZWNre3tpfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBoYW5kbGVDbGljaygkZXZlbnQsIGl0ZW0pO1wiPlxyXG4gICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIoaXRlbS5sb2NrZWQgfHwgaXRlbS5fc2VwKSAmJiAhSGFzUGlubmVkQ29sdW1uc1wiPjwvdGQ+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5fc2VwXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwUGFnZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj4gPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uX3NlcFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2ljQ29sdW1uczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21DZWxsczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGluZGV4OiBpLCB0ZW1wbGF0ZU9wdGlvbnM6IHRlbXBsYXRlT3B0aW9ucyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYm9keURlbGV0ZUFuZEV4cG9ydDsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgZXZlbjogZXZlbiwgaXRlbTogaXRlbSwgaW5kZXg6IGkgfX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI1RCb2R5PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBib3VuZFNvdXJjZTsgbGV0IGkgPSBpbmRleCwgbGV0IGV2ZW4gPSBldmVuOyB0cmFja0J5OiBib2R5VHJhY2tCeVwiPlxyXG4gICAgICAgIDx0ciAqbmdJZj1cIml0ZW0uX3Zpc2libGUgfHwgIUhpZXJhcmNoeVwiXHJcbiAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLl9yb3dDbGFzcyA/IGl0ZW0uX3Jvd0NsYXNzIDogJydcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXN0LWxpbmUtdGhyb3VnaF09XCJpdGVtLnJlbW92ZWQgfHwgaXRlbS5kZWxldGVkXCJcclxuICAgICAgICAgICAgW2NsYXNzLmVzdC1yZ109XCJpdGVtLl9ncm91cFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5lc3Qtcmctc2VwXT1cIml0ZW0uX3NlcFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVSb3dDbGljaygkZXZlbnQsIGl0ZW0sIGZhbHNlKVwiPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uX3NlcFwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cFBhZ2VyOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uX3NlcFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJhc2ljQ29sdW1uczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21DZWxsczsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0sIGluZGV4OiBpIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5RGVsZXRlQW5kRXhwb3J0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBldmVuOiBldmVuLCBpdGVtOiBpdGVtLCBpbmRleDogaSB9fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZ3JvdXBQYWdlciBsZXQtaXRlbT5cclxuICAgIDx0ZCBjbGFzcz1cImVzdC1waW5uZWQtYm9keSBcIiAqbmdJZj1cIkhhc1Bpbm5lZENvbHVtbnNcIj5cclxuICAgICAgICA8ZGl2IFtzdHlsZS53aWR0aC5weF09XCJQaW5uZWRDb250YWluZXJXaWR0aFwiIGNsYXNzPVwiZXN0LXBpbm5lZC1ib3JkZXIgZXN0LWNlbGwtZ3JvdXAtcGFkZGluZ1wiPjwvZGl2PlxyXG4gICAgPC90ZD5cclxuICAgIDx0ZCAqbmdJZj1cIml0ZW0uX2dyb3VwbGV2ZWwgPiAxXCIgW2F0dHIuY29sc3Bhbl09XCJpdGVtLl9ncm91cGxldmVsLTFcIj48L3RkPlxyXG4gICAgPHRkIFthdHRyLmNvbHNwYW5dPVwiQ29sdW1ucy5WaXNpYmxlVW5waW5uZWQgLSAoaXRlbS5fZ3JvdXBsZXZlbCA+IDAgPyBpdGVtLl9ncm91cGxldmVsIC0gMSA6IDApXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1yZy1zZXAtZmxleC1yaWdodFwiICpuZ0lmPVwiUm93R3JvdXBpbmdQYWdpbmdTdHlsZSA9PSAncmlnaHQnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlc3QtcmctcGFnZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmdCdXR0b25zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBzZXBhcmF0b3I6IGl0ZW0sIEFUUDogYWRkVG9QYWdlR3JvdXAuYmluZCh0aGlzKSwgR1RQOiBnb1RvUGFnZUdyb3VwLmJpbmQodGhpcyksIEFycmF5OiBpdGVtLmJ1dHRvbnMgfX1cIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1yZy1pcHBcIiAqbmdJZj1cIihpdGVtLnNlYXJjaGVzID09ICdncm91cHMnID8gaXRlbS52aWV3Lmdyb3VwY291bnQgOiBpdGVtLnZpZXcub2JqZWN0Y291bnQpID4gMTBcIj48YXBwLXBhZ2luZyBbQ291bnRMYWJlbF09XCJDb3VudExhYmVsXCIgW0FsbFNlYXJjaF09XCJBbGxTZWFyY2hcIiBbR3JvdXBNb2RlXT1cIml0ZW0uc2VhcmNoZXMgPT0gJ2dyb3VwcydcIiBbUGFnZXJDb3VudF09XCJpdGVtLnNlYXJjaGVzID09ICdncm91cHMnID8gaXRlbS52aWV3Lmdyb3VwY291bnQgOiBpdGVtLnZpZXcub2JqZWN0Y291bnRcIiBbVmlld109XCJpdGVtLnZpZXdcIiAocGFnaW5nU2VsZWN0ZWQpPVwib25Hcm91cEl0ZW1zUGVyUGFnZUNoYW5nZWQoaXRlbSwgJGV2ZW50KTtcIj48L2FwcC1wYWdpbmc+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlc3Qtcmctc2VwLWZsZXgtbGVmdFwiICpuZ0lmPVwiUm93R3JvdXBpbmdQYWdpbmdTdHlsZSA9PSAnbGVmdCdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1yZy1pcHBcIj48YXBwLXBhZ2luZyBbQWxsU2VhcmNoXT1cIkFsbFNlYXJjaFwiIFtDb3VudExhYmVsXT1cIkNvdW50TGFiZWxcIiBbR3JvdXBNb2RlXT1cIml0ZW0uc2VhcmNoZXMgPT0gJ2dyb3VwcydcIiBbUGFnZXJDb3VudF09XCJpdGVtLnNlYXJjaGVzID09ICdncm91cHMnID8gaXRlbS52aWV3Lmdyb3VwY291bnQgOiBpdGVtLnZpZXcub2JqZWN0Y291bnRcIiBbVmlld109XCJpdGVtLnZpZXdcIiAocGFnaW5nU2VsZWN0ZWQpPVwib25Hcm91cEl0ZW1zUGVyUGFnZUNoYW5nZWQoaXRlbSwgJGV2ZW50KTtcIj48L2FwcC1wYWdpbmc+PC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlc3QtcmctcGFnZVwiICpuZ0lmPVwiKGl0ZW0uc2VhcmNoZXMgPT0gJ2dyb3VwcycgPyBpdGVtLnZpZXcuZ3JvdXBjb3VudCA6IGl0ZW0udmlldy5vYmplY3Rjb3VudCkgPiAxMFwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmdCdXR0b25zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBzZXBhcmF0b3I6IGl0ZW0sIEFUUDogYWRkVG9QYWdlR3JvdXAuYmluZCh0aGlzKSwgR1RQOiBnb1RvUGFnZUdyb3VwLmJpbmQodGhpcyksIEFycmF5OiBpdGVtLmJ1dHRvbnMgfX1cIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFF1ZXN0byB0ZW1wbGF0ZSBjb250aWVuZSBsYSBwcmludCBjb25kaXppb25hbGUgc3UgdGFiZWxsZSBzZW1wbGljaSwgY29uIGhlYWRlciBlIGJvZHkgc2NyaXR0aSBhIG1hbmF6emEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYmFzaWNDb2x1bW5zIGxldC1pdGVtIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKCFVc2VDdXN0b21DZWxscyB8fCBFbXB0eVJvd1RkcykgJiYgIUR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvblwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5UmVmOyBjb250ZXh0IDogeyRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRFZGl0b3IgbGV0LWN0eD5cclxuICAgIDwhLS0gVW4gcG8nIHRyaXN0ZSBtYSBxdWVzdG8gw6ggaWwgbWV0b2RvIHBpw7kgc2VtcGxpY2UgcGVyIGdlc3RpcmUgaWwgY2FtYmlvIGRpIG1vZGVsbG8gLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3R4Lml0ZW0ucHJvcGVydGllc1wiPlxyXG4gICAgICAgIDxmb3JtLWFkYXB0aXZlIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1ZhbGlkYXRpb25dPVwiZmFsc2VcIiBbT3B0aW9uc109XCJjdHguZGVmaW5pdGlvbi5FZGl0b3JPcHRpb25zXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbKG5nTW9kZWwpXT1cImN0eC5pdGVtLnByb3BlcnRpZXNbY3R4LmRlZmluaXRpb24uUHJvcGVydHlOYW1lXVwiIG5hbWU9XCJ7eyBjdHguZGVmaW5pdGlvbi5Qcm9wZXJ0eU5hbWUgKyAnXycgKyBjdHguaXRlbS5faGFzaCB9fVwiIFtUeXBlXT1cImN0eC5kZWZpbml0aW9uLlByb3BlcnR5VHlwZVwiIFtTb3VyY2VdPVwiY3R4LmRlZmluaXRpb24uUHJvcGVydHlTb3VyY2VcIiAoaW5wdXRGaW5hbGl6ZWQpPVwiY3R4LmZpbmFsaXplcigpXCI+PC9mb3JtLWFkYXB0aXZlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWN0eC5pdGVtLnByb3BlcnRpZXNcIj5cclxuICAgICAgICA8Zm9ybS1hZGFwdGl2ZSBbRm9ybUxheW91dF09XCJmYWxzZVwiIFtWYWxpZGF0aW9uXT1cImZhbHNlXCIgW09wdGlvbnNdPVwiY3R4LmRlZmluaXRpb24uRWRpdG9yT3B0aW9uc1wiIFtGb2N1c1N1YmplY3RdPVwiRm9jdXNTdWJqZWN0XCIgWyhuZ01vZGVsKV09XCJjdHguaXRlbVtjdHguZGVmaW5pdGlvbi5Qcm9wZXJ0eU5hbWVdXCIgbmFtZT1cInt7IGN0eC5kZWZpbml0aW9uLlByb3BlcnR5TmFtZSArICdfJyArIGN0eC5pdGVtLl9oYXNoIH19XCIgW1R5cGVdPVwiY3R4LmRlZmluaXRpb24uUHJvcGVydHlUeXBlXCIgW1NvdXJjZV09XCJjdHguZGVmaW5pdGlvbi5Qcm9wZXJ0eVNvdXJjZVwiIChpbnB1dEZpbmFsaXplZCk9XCJjdHguZmluYWxpemVyKClcIj48L2Zvcm0tYWRhcHRpdmU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVzVGQgbGV0LWN0eD5cclxuICAgIDwhLS0gVE9ETzogRm9ybWF0dGFyZSBpbCB2YWxvcmUgaW4gYmFzZSBhIHZhbFR5cGUudHlwZSAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdHgudHlwZSA9PSAnZW51bSdcIj5cclxuICAgICAgICB7eyAoY3R4LnZhbHVlIHwgZXN0X2xvb2t1cCA6IGN0eC5kZWZpbml0aW9uLlByb3BlcnR5U291cmNlKS5kZXNjcmlwdGlvbiB9fVxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3R4LnR5cGUgIT0gJ2VudW0nXCI+XHJcbiAgICAgICAge3tjdHgudmFsdWV9fVxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2N1c3RvbUNlbGxzIGxldC1pdGVtIGxldC1vcHQ9XCJ0ZW1wbGF0ZU9wdGlvbnNcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJVc2VDdXN0b21DZWxscyAmJiAhRW1wdHlSb3dUZHNcIj5cclxuICAgICAgICA8IS0tIENlbGxhIGNoZSBhZ2dyZWdhIHR1dHRlIGxlIGNvbG9ubmUgY2hlIGRldm9ubyBlc3NlcmUgcGlubmF0ZSAtLT5cclxuICAgICAgICA8dGQgKm5nSWY9XCJIYXNQaW5uZWRDb2x1bW5zXCIgY2xhc3M9XCJlc3QtcGlubmVkLWJvZHkgZXN0LWNvbC1taW5cIiBbY2xhc3MuZXN0LXdoaXRlLXNlbGVjdGVkXT1cIml0ZW0uX3NlbGVjdGVkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cIlBpbm5lZENvbnRhaW5lcldpZHRoXCIgY2xhc3M9XCJlc3QtcGlubmVkLWJvcmRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiIWl0ZW0ubG9ja2VkICYmICFpdGVtLl9zZXAgJiYgU2VsZWN0aW9uXCIgY2xhc3M9XCJlc3Qtbm8tYm9yZGVyIGVzdC1jb2wtbWluXCIgW3N0eWxlLndpZHRoLnB4XT1cIjIwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtkaXNhYmxlZF09XCJvcHQuc2VsRGlzYWJsZWRcIiBbY2xhc3MuZXN0LXBvaW50ZXJdPVwiIWl0ZW0ubG9ja2VkXCIgWyhuZ01vZGVsKV09XCJpdGVtLl9zZWxlY3RlZFwiIG5hbWU9XCJjaGVja3t7aXRlbS5faGFzaH19XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgaGFuZGxlQ2xpY2soJGV2ZW50LCBpdGVtKTtcIj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJlc3Qtbm8tYm9yZGVyIGVzdC1jb2wtbWluXCIgKm5nSWY9XCIoaXRlbS5sb2NrZWQgfHwgaXRlbS5fc2VwKSAmJiBTZWxlY3Rpb25cIiBbc3R5bGUud2lkdGgucHhdPVwiMjBcIj48L3RkPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNlbGwgb2YgUm93VERzW2l0ZW0uX2hhc2hdOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogSURUcmFja0J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuUGlubmVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UZDsgY29udGV4dDogeyBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VsbDogY2VsbCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiB0cnVlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXM6IHNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXT8uW2luZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXNVcDogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWwgLSAxXT8uW2luZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXNEb3duOiBzZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbCArIDFdPy5baW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXR1c0xlZnQ6IHNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXT8uW2luZGV4IC0gMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdHVzUmlnaHQ6IHNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXT8uW2luZGV4ICsgMV0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgIDwhLS0gQm9keSBlZmZldHRpdm8gZGVsbGEgcmlnYSAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjZWxsIG9mIFJvd1REc1tpdGVtLl9oYXNoXTsgbGV0IGluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IElEVHJhY2tCeVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuUGlubmVkO1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRkOyBjb250ZXh0OiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGl0ZW0sIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsOiBjZWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBmYWxzZSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXR1czogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdPy5baW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXNVcDogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWwgLSAxXT8uW2luZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdHVzRG93bjogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWwgKyAxXT8uW2luZGV4XSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdHVzTGVmdDogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdPy5baW5kZXggLSAxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdHVzUmlnaHQ6IHNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsXT8uW2luZGV4ICsgMV0gXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIENlbGxhIGN1c3RvbWl6emF0YSwgZWxlbWVudG8gZ3JhZmljbyBiYXNlIHBlciBsYSB0YWJlbGxhIC0tPlxyXG48bmctdGVtcGxhdGUgI2N1c3RvbVRkIGxldC1pdGVtIGxldC1jZWxsPVwiY2VsbFwiIGxldC1pbmRleD1cImluZGV4XCIgbGV0LXBpbm5lZD1cInBpbm5lZFwiIGxldC1zZWxTdGF0dXM9XCJzZWxlY3Rpb25TdGF0dXNcIiBsZXQtc2VsU3RhdHVzVXA9XCJzZWxlY3Rpb25TdGF0dXNVcFwiIGxldC1zZWxTdGF0dXNEb3duPVwic2VsZWN0aW9uU3RhdHVzRG93blwiIGxldC1zZWxTdGF0dXNMZWZ0PVwic2VsZWN0aW9uU3RhdHVzTGVmdFwiIGxldC1zZWxTdGF0dXNSaWdodD1cInNlbGVjdGlvblN0YXR1c1JpZ2h0XCI+XHJcblxyXG4gICAgPCEtLSBDdXN0b21penphemlvbmUgcGVyIGNlbGxlIGNvbiBpY29uYSAoc29ubyBlc3NlbnppYWxtZW50ZSBvcGVyYXppb25pIHNlbXBsaWNpIGUgYmFzdGEpIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuSWNvbkNsYXNzICYmIGNlbGwuVmlzaWJsZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2VsbC5Db25kaXRpb25GaWVsZCB8fCAoKChpdGVtLnByb3BlcnRpZXMgfHwgaXRlbSkgfCBlc3RfcHJvcGluc2Vuc2l0aXZlIDogY2VsbC5Db25kaXRpb25GaWVsZCkgPT0gY2VsbC5Db25kaXRpb25WYWx1ZSlcIj5cclxuICAgICAgICAgICAgPHRkIFtjbGFzcy5lc3Qtbm8tcmlnaHQtcGFkZGluZ109XCJpbmRleCAhPSBEeW5hbWljT3BlcmF0aW9ucy5sZW5ndGggLTFcIiBbY2xhc3MuZXN0LW5vLWxlZnQtcGFkZGluZ109XCJpbmRleCAhPSAwXCIgY2xhc3M9XCJlc3QtY29sLW1pblwiPjxzcGFuIHRpdGxlPVwie3tjZWxsLlRpdGxlfX1cIiBjbGFzcz1cInt7Y2VsbC5JY29uQ2xhc3N9fSBlc3QtcG9pbnRlclwiIChjbGljayk9XCJkeW5hbWljT3BlcmF0aW9uKGl0ZW0sIGNlbGwuSUQpXCI+e3tjZWxsLkNvbnRlbnR9fTwvc3Bhbj48L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsLkNvbmRpdGlvbkZpZWxkICYmICgoKGl0ZW0ucHJvcGVydGllcyB8fCBpdGVtKSB8IGVzdF9wcm9waW5zZW5zaXRpdmUgOiBjZWxsLkNvbmRpdGlvbkZpZWxkKSAhPSBjZWxsLkNvbmRpdGlvblZhbHVlKVwiPlxyXG4gICAgICAgICAgICA8dGQgY2xhc3M9XCJlc3QtY29sLW1pbiBlc3Qtbm8tc2lkZS1wYWRkaW5nXCI+PC90ZD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIC0gICBBVFRFTlpJT05FOiBHbGkgc3BhemkgZnJhIGdsaSBJbnB1dCBkaSBxdWVzdG8gbWVnYSB0ZCBzb25vIHNpZ25pZmljYXRpdmkgZSBkaXZpZG9ubyBsYSBkaWNoaWFyYXppb25lIGluIHNlemlvbmk6ICAgIC1cclxuICAgIC0gICAuIEdlbmVyaWNoZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1cclxuICAgIC0gICAuIEdlc3Rpb25lIGFsbGluZWFtZW50byBlIGNvbG9yaSBwZXIgbGEgbW9kYWxpdMOgIHJlcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtXHJcbiAgICAtICAgLiBHZXN0aW9uaSBncmFmaWNoZSBwYXJ0aWNvbGFyaSBwZXIgaWwgUGlubmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtXHJcbiAgICAtICAgLiBHZXN0aW9uZSBkZWxsYSBzZWxlemlvbmUgYSBzaW5nb2xhIGNlbGxhIGluIGFzc2VuemEgZGkgcGlubmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtXHJcbiAgICAtICAgLiBHZXN0aW9uZSBjbGljayBjbGFzc2ljbyBlIHNlbGV6aW9uZSBtdWx0aWNlbGxhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVxyXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cclxuXHJcbiAgICA8dGQgKm5nSWY9XCIhY2VsbC5JY29uQ2xhc3MgJiYgY2VsbC5WaXNpYmxlXCJcclxuICAgICAgICBlcy10ZD1cInt7Y2VsbC5Qcm9wZXJ0eSB8fCBjZWxsLklEfX1cIlxyXG4gICAgICAgIGlkPVwiZXN0ZF97e2NlbGwuUHJvcGVydHkgfHwgY2VsbC5JRH19X3t7aXRlbS5fb3JkaW5hbH19X3t7aW5kZXh9fVwiXHJcbiAgICAgICAgY2xhc3M9XCJ7eyBjZWxsLkNsYXNzIH19XCJcclxuXHJcbiAgICAgICAgW0NvbnRleHRdPVwiaXRlbS5faGFzaFwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1kZWZhdWx0LXJvdy1oZWlnaHRdPVwiIUhpZ2hDZWxsRGVuc2l0eVwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC13aGl0ZS1zZWxlY3RlZF09XCJpdGVtLl9zZWxlY3RlZFwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1uby1zZWxlY3Rpb25dPVwiRWRpdGFibGUgJiYgY2VsbC5Qcm9wZXJ0eU5hbWVcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtcmctaGRyXT1cImNlbGwuR3JvdXBIZWFkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtcmctYWdnXT1cImNlbGwuR3JvdXBBZ2dyZWdhdGlvblwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1ub3dyYXBdPVwiSGllcmFyY2h5IHx8ICFjZWxsLldyYXBzXCJcclxuXHJcbiAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiICghcGlubmVkICYmIGNlbGwuQWxpZ25tZW50KSA/IGNlbGwuQWxpZ25tZW50IDogbnVsbFwiXHJcbiAgICAgICAgW3N0eWxlLmNvbG9yXT1cIighcGlubmVkICYmIGl0ZW0uZm9yZWNvbG9ycyAmJiBjZWxsLlByb3BBY2Nlc3NvcikgPyBpdGVtLmZvcmVjb2xvcnNbY2VsbC5Qcm9wQWNjZXNzb3JdIDogbnVsbFwiXHJcbiAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiKCFwaW5uZWQgJiYgaXRlbS5iYWNrY29sb3JzICYmIGNlbGwuUHJvcEFjY2Vzc29yKSA/IGl0ZW0uYmFja2NvbG9yc1tjZWxsLlByb3BBY2Nlc3Nvcl0gOiBudWxsXCJcclxuICAgICAgICBcclxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicGlubmVkID8gY2VsbC5QaW5uZWRXaWR0aCA6IG51bGxcIlxyXG4gICAgICAgIFtjbGFzcy5lc3Qtbm8tYm9yZGVyXT1cInBpbm5lZFwiXHJcblxyXG4gICAgICAgIFtjbGFzcy5lc3Qtbm8tYm9yZGVyLWJvdHRvbV09XCJzZWxTdGF0dXNEb3duPy50Ym9yZGVyXCJcclxuICAgICAgICBbY2xhc3MuZXN0LW5vLWJvcmRlci10b3BdPVwic2VsU3RhdHVzVXA/LmJib3JkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtbHRhYi1ib3JkZXJdPVwiY2VsbC5MZWZ0Qm9yZGVyICYmICFzZWxTdGF0dXM/Lmxib3JkZXIgJiYgIXNlbFN0YXR1c0xlZnQ/LnJib3JkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtcnRhYi1ib3JkZXJdPVwiY2VsbC5SaWdodEJvcmRlciAmJiAhc2VsU3RhdHVzPy5yYm9yZGVyICYmICFzZWxTdGF0dXNSaWdodD8ubGJvcmRlclwiXHJcbiAgICAgICAgXHJcbiAgICAgICAgW2NsYXNzLmVzdC1zZWxlY3RlZC1jZWxsXT1cInNlbFN0YXR1cz8uc2VsZWN0ZWRcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtY2VsbC1sYm9yZGVyXT1cIiBzZWxTdGF0dXM/Lmxib3JkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtY2VsbC1yYm9yZGVyXT1cIiBzZWxTdGF0dXM/LnJib3JkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtY2VsbC10Ym9yZGVyXT1cIiBzZWxTdGF0dXM/LnRib3JkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtY2VsbC1iYm9yZGVyXT1cIiBzZWxTdGF0dXM/LmJib3JkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtY2VsbC1sYm9yZGVyLXRtcF09XCIhY2VsbC5MZWZ0Qm9yZGVyICYmICFzZWxTdGF0dXM/Lmxib3JkZXIgJiYgIXNlbFN0YXR1cz8ubG92ZXJsYXBzXCJcclxuICAgICAgICBbY2xhc3MuZXN0LWNlbGwtcmJvcmRlci10bXBdPVwiIWNlbGwuUmlnaHRCb3JkZXIgJiYgIXNlbFN0YXR1cz8ucmJvcmRlciAmJiAhc2VsU3RhdHVzPy5yb3ZlcmxhcHNcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtY2VsbC10Ym9yZGVyLXRtcF09XCIhc2VsU3RhdHVzPy50Ym9yZGVyICYmICFzZWxTdGF0dXM/LnRvdmVybGFwc1wiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1jZWxsLWJib3JkZXItdG1wXT1cIiFzZWxTdGF0dXM/LmJib3JkZXIgJiYgIXNlbFN0YXR1cz8uYm92ZXJsYXBzXCJcclxuXHJcbiAgICAgICAgKG1vdXNlZG93bik9XCJtb3VzZWRvd24oJGV2ZW50LCBjZWxsLCBpdGVtKVwiXHJcbiAgICAgICAgKG1vdXNlZW50ZXIpPVwibW91c2VlbnRlcigkZXZlbnQpXCJcclxuICAgICAgICAobW91c2V1cCk9XCJtb3VzZXVwKCRldmVudClcIlxyXG4gICAgICAgIChvbkNlbGxHZW5lcmF0aW9uKT1cInJlZ2lzdGVyQ2VsbCgkZXZlbnQpXCJcclxuICAgICAgICAoY2xpY2spPVwiZGJDbGlja0VkaXRPclNpbmdsZUNsaWNrUm93U2VsZWN0aW9uKCRldmVudCwgY2VsbCwgaXRlbSlcIj5cclxuXHJcbiAgICAgICAgPGRpdiBbY2xhc3MuZXN0LWVkaXQtaGlkZGVuXT1cImNlbGwuX2VkaXRpbmdcIiBbY2xhc3MuZXN0LXByZV09XCIhKEhpZXJhcmNoeSAmJiBpbmRleCA9PSAwKVwiPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjREVCVUc+XHJcbiAgICAgICAgICAgICAgICA8IS0tIERlYnVnIGJveCBpbiBjYXNvIGxhIHJvYmEgY2hlIHZpZW5lIHNjcml0dGEgbmVsbGUgY2VsbGUgbm9uIHRvcm5pLiBTY2lydmVyZSBxdWkgaSBwcm9wcmkgYmluZGluZyBwZXIgY29udHJvbGxhcmUgY29zZSAtLT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDkwJSBUZW1wbGF0ZSBkaXNwb25pYmlsZSwgcXVpbmRpIGRlcml2YW50ZSBkYSAqdGQsIGNvbnRyb2xsbyBnaXVzdG8gY2hlIG5vbiBzaWEgdW4gZmllbGQgcGFydGljb2xhcmUgbXVsdGkgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsLlRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuTXVsdGlcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbC5UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjZWxsLk11bHRpXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGwuVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiAoaXRlbVtjZWxsLk11bHRpUHJvcF0gPyBpdGVtW2NlbGwuTXVsdGlQcm9wXVtjZWxsLk11bHRpSW5kZXhdIDoge30pIH1cIj48L25nLWNvbnRhaW5lcj48L3NwYW4+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSA4JVxyXG4gICAgICAgICAgICAgICAgVGVtcGxhdGUgbm9uIGRpc3BvbmliaWxlLCBwdcOyIHZlbmlyZSBkYVxyXG4gICAgICAgICAgICAgICAgUm91dGVQYXRoIGluIGNhc28gc2lhIHVuIGxpbmsgZGkgdW5hIHRhYmVsbGEgZGluYW1pY2FcclxuICAgICAgICAgICAgICAgIFByb3BBY2Nlc3NvciBpbiBjYXNvIGRpIFJlcG9ydFJvdyAocXVpbmRpIG9nZ2V0dGkgY29uIFwidmFsdWVzXCIgIGRlbnRybyksXHJcbiAgICAgICAgICAgICAgICBvIFJlbmRlcmVyIHNlIG1vZGFsaXTDoCBkaW5hbWljYS9zdGFuZGFyZCAoaW4gcXVhbCBjYXNvIGlsIHJlbmRlcmVyIMOoIGlsIGRlZmF1bHQpXHJcbiAgICAgICAgICAgIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNlbGwuVGVtcGxhdGUgJiYgIWNlbGwuTXVsdGkgJiYgIWNlbGwuQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJjZWxsLlJvdXRlUGF0aFwiIFtyb3V0ZXJMaW5rXT1cIml0ZW0gfCBlc3Rfcm91dGVybGluayA6IGNlbGwuUm91dGVQYXRoIDogY2VsbC5Sb3V0ZVBhcmFtZXRlclByb3BlcnRpZXNcIiBjbGFzcz1cImVzdC1saW5rXCIgW2lubmVySFRNTF09XCJpdGVtLnByb3BlcnRpZXMgPyBpdGVtLnByb3BlcnRpZXNbY2VsbC5Qcm9wZXJ0eU5hbWVdIDogaXRlbVtjZWxsLlByb3BlcnR5TmFtZV1cIj48L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJjZWxsLlByb3BBY2Nlc3NvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7KGl0ZW0udmFsdWVzPyBpdGVtLnZhbHVlc1tjZWxsLlByb3BBY2Nlc3Nvcl0gOiBpdGVtW2NlbGwuUHJvcEFjY2Vzc29yXSkgfCBlc3RfZm9ybWF0OiBjZWxsLkZvcm1hdCB9fVxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2VsbC5Qcm9wQWNjZXNzb3IgJiYgIWNlbGwuUm91dGVQYXRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGwuUHJvcGVydHlOYW1lIHwgZXN0X3JlbmRlcmVyOiB7IG5hbWU6IGNlbGwuUmVuZGVyZXJOYW1lLCBzcmM6IEVzVGRzRGlyZWN0aXZlLCBmYWxsYmFjazogZGVmYXVsdEVzVGQgfTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgZGVmaW5pdGlvbjogY2VsbCwgdmFsdWU6IGl0ZW0ucHJvcGVydGllcyA/IGl0ZW0ucHJvcGVydGllc1tjZWxsLlByb3BlcnR5TmFtZV0gOiBpdGVtW2NlbGwuUHJvcGVydHlOYW1lXSwgdHlwZTogY2VsbC5Qcm9wZXJ0eVR5cGV9IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gMSUgU2UgaW4gbW9kYWxpdMOgIGdlcmFyY2hpY2EgbWV0dG8gaWwgdGQgcGVyIG5hdmlnYXJlIGxhIGdlcmFyY2hpYSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkhpZXJhcmNoeSAmJiBpbmRleCA9PSAwXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIkhpZXJhcmNoeU5hdmlnYXRvcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSAxJSBDb250ZW50IHByb2dyYW1tYXRpY28gcGVyIGxlIGNhc2lzdGljaGUgZGkgUm93IEdyb3VwaW5nIGVjYy4uLiAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuQ29udGVudFwiPlxyXG4gICAgICAgICAgICAgICAge3tjZWxsLkNvbnRlbnR9fVxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImNlbGwuX2VkaXRpbmdcIiBjbGFzcz1cImVzdC1tdC1taW4tNVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbC5Qcm9wZXJ0eU5hbWUgfCBlc3RfZWRpdG9yOiB7IG5hbWU6IGNlbGwuRWRpdG9yTmFtZSwgc3JjOiBFc1RkRWRpdG9yRGlyZWN0aXZlcywgZmFsbGJhY2s6IGRlZmF1bHRFZGl0b3J9OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBkZWZpbml0aW9uOiBjZWxsLCBjb2x1bW5JbmRleDogaW5kZXgsIGl0ZW06IGl0ZW0sIGZpbmFsaXplcjogZmluYWxpemVVc2VyRWRpdC5iaW5kKHRoaXMsIGNlbGwsIGl0ZW0sIGluZGV4KSB9IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvdGQ+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIE5hdmlnYXRvcmUgZGVsbGEgZ2VyYXJjaGlhIGRpIHVuYSB2aWV3IGdlcmFyY2hpY2EsIGNvbiB0YXN0byBwZXIgZXNwYW5kZXJlIGUgY29sbGFzc2FyZSAtLT5cclxuPG5nLXRlbXBsYXRlICNIaWVyYXJjaHlOYXZpZ2F0b3IgbGV0LWl0ZW0+XHJcbiAgICA8c3BhbiAqbmdJZj1cIiFpdGVtLnBhcmVudFwiIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duXCIgc3R5bGU9XCJ2aXNpYmlsaXR5OmhpZGRlblwiPjwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5wYXJlbnQgJiYgaXRlbS5fZXhwYW5kZWRcIiBjbGFzcz1cImZhIGZhLWNoZXZyb24tZG93biBlc3QtcG9pbnRlciBlc3Qtbm8tc2VsZWN0aW9uXCIgKGNsaWNrKT1cImhpZXJhcmNoeU1vZGVfSC5jb2xsYXBzZVBhcmVudChpdGVtW3RoaXMuT3duS2V5XSlcIj48L3NwYW4+XHJcbiAgICA8c3BhbiAqbmdJZj1cIml0ZW0ucGFyZW50ICYmICFpdGVtLl9leHBhbmRlZFwiIGNsYXNzPVwiZmEgZmEtY2hldnJvbi11cCBlc3QtcG9pbnRlciBlc3Qtbm8tc2VsZWN0aW9uXCIgKGNsaWNrKT1cImhpZXJhcmNoeU1vZGVfSC5leHBhbmRQYXJlbnQoaXRlbVt0aGlzLk93bktleV0pXCI+PC9zcGFuPlxyXG4gICAgJm5ic3A7XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFB1bHNhbnRpIGRpIGVsaW1pbmF6aW9uZS91bmRvIGVsaW1pbmF6aW9uZSBlZCBlc3BvcnRhemlvbmUgY2hlIHZhbm5vIGluIGZvbmRvIGFkIHVuIHJlY29yZCBlZGxsYSB0YWJlbGxhIC0tPlxyXG48bmctdGVtcGxhdGUgI2JvZHlEZWxldGVBbmRFeHBvcnQgbGV0LW9wdGlvbnM+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiUmVtb3ZhbCAmJiAhUmVtb3ZhbENvbmRpdGlvblwiPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cImVzdC1zdGlja3ktbGFzdC1jb2x1bW57e29wdGlvbnMuZXZlbj8gJy1hbHQnIDogJyd9fSB7e0V4cG9ydCB8fCBIaWRkZW5Db2x1bW5zIHx8IENvcm5lck1lbnVPcHRpb25zID8gJ2VzdC1yaWdodC05JyA6ICcnfX1cIiAqbmdJZj1cIiEob3B0aW9ucy5pdGVtLnJlbW92ZWQgfHwgb3B0aW9ucy5pdGVtLmRlbGV0ZWQpXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1yZW1vdmUgZXN0LXBvaW50ZXIgdGV4dC1kYW5nZXJcIiBbaGlkZGVuXT1cIm9wdGlvbnMuaXRlbS5yZW1vdmFibGUgIT0gdW5kZWZpbmVkICYmICFvcHRpb25zLml0ZW0ucmVtb3ZhYmxlXCIgKGNsaWNrKT1cIm9uUmVtb3ZhbC5lbWl0KG9wdGlvbnMuaXRlbSlcIj48L3NwYW4+PC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJlc3Qtc3RpY2t5LWxhc3QtY29sdW1ue3tvcHRpb25zLmV2ZW4/ICctYWx0JyA6ICcnfX0ge3tFeHBvcnQgfHwgSGlkZGVuQ29sdW1ucyB8fCBDb3JuZXJNZW51T3B0aW9ucyA/ICdlc3QtcmlnaHQtOScgOiAnJ319XCIgKm5nSWY9XCIob3B0aW9ucy5pdGVtLnJlbW92ZWQgfHwgb3B0aW9ucy5pdGVtLmRlbGV0ZWQpXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS11bmRvICB0ZXh0LXdhcm5pbmcgZXN0LXBvaW50ZXJcIiAoY2xpY2spPVwib25BYm9ydFJlbW92YWwuZW1pdChvcHRpb25zLml0ZW0pXCI+PC9zcGFuPjwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJSZW1vdmFsICYmIFJlbW92YWxDb25kaXRpb25cIj5cclxuICAgICAgICA8dGQgY2xhc3M9XCJlc3Qtc3RpY2t5LWxhc3QtY29sdW1ue3tvcHRpb25zLmV2ZW4/ICctYWx0JyA6ICcnfX0ge3tFeHBvcnQgfHwgSGlkZGVuQ29sdW1ucyB8fCBDb3JuZXJNZW51T3B0aW9ucyA/ICdlc3QtcmlnaHQtOScgOiAnJ319XCIgKm5nSWY9XCIhKG9wdGlvbnMuaXRlbS5yZW1vdmVkIHx8IG9wdGlvbnMuaXRlbS5kZWxldGVkKSAmJiBvcHRpb25zLml0ZW1bUmVtb3ZhbENvbmRpdGlvbl1cIj48c3BhbiBjbGFzcz1cImZhIGZhLXJlbW92ZSBlc3QtcG9pbnRlciB0ZXh0LWRhbmdlclwiIFtoaWRkZW5dPVwib3B0aW9ucy5pdGVtLnJlbW92YWJsZSAhPSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuaXRlbS5yZW1vdmFibGVcIiAoY2xpY2spPVwib25SZW1vdmFsLmVtaXQob3B0aW9ucy5pdGVtKVwiPjwvc3Bhbj48L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cImVzdC1zdGlja3ktbGFzdC1jb2x1bW57e29wdGlvbnMuZXZlbj8gJy1hbHQnIDogJyd9fSB7e0V4cG9ydCB8fCBIaWRkZW5Db2x1bW5zIHx8IENvcm5lck1lbnVPcHRpb25zID8gJ2VzdC1yaWdodC05JyA6ICcnfX1cIiAqbmdJZj1cIihvcHRpb25zLml0ZW0ucmVtb3ZlZCB8fCBvcHRpb25zLml0ZW0uZGVsZXRlZCkgJiYgb3B0aW9ucy5pdGVtW1JlbW92YWxDb25kaXRpb25dXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS11bmRvICB0ZXh0LXdhcm5pbmcgZXN0LXBvaW50ZXJcIiAoY2xpY2spPVwib25BYm9ydFJlbW92YWwuZW1pdChvcHRpb25zLml0ZW0pXCI+PC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwiZXN0LXN0aWNreS1sYXN0LWNvbHVtbnt7b3B0aW9ucy5ldmVuPyAnLWFsdCcgOiAnJ319IHt7RXhwb3J0IHx8IEhpZGRlbkNvbHVtbnMgfHwgQ29ybmVyTWVudU9wdGlvbnMgPyAnZXN0LXJpZ2h0LTknIDogJyd9fVwiICpuZ0lmPVwiIW9wdGlvbnMuaXRlbVtSZW1vdmFsQ29uZGl0aW9uXVwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtcmVtb3ZlIGVzdC1oaWRkZW4tdmlld1wiPjwvc3Bhbj48L3RkPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8dGQgKm5nSWY9XCJFeHBvcnQgfHwgSGlkZGVuQ29sdW1ucyB8fCBDb3JuZXJNZW51T3B0aW9uc1wiIGNsYXNzPVwiZXN0LXN0aWNreS1sYXN0LWNvbHVtbnt7b3B0aW9ucy5ldmVuICYmICFIaWVyYXJjaHkgPyAnLWFsdCcgOiAnJ319XCI+PC90ZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gQ29udGV4dCBtZW51IHZ1b3RvIGRlZmF1bHQgcGVyIHR1dHRlIGxlIHRhYmVsbGEgY2hlIG5vbiBjZSBsJ2hhbm5vLCBpbiBtb2RvIGNoZSBhbCBjbGljayBkZXN0cm8gYXBwYWlhIFwibmVzc3VuYSBvcCBkaXNwb25pYmlsZVwiIC0tPlxyXG48Y29udGV4dC1tZW51ICNlbXB0eU1lbnU+XHJcbiAgICA8bmctdGVtcGxhdGUgY29udGV4dE1lbnVJdGVtPjxzcGFuPjxlbT57eydObyBvcGVyYXRpb25zIGF2YWlsYWJsZScgfCBsb2NhbGl6ZSA6IGxjfX0uLi48L2VtPjwvc3Bhbj48L25nLXRlbXBsYXRlPlxyXG48L2NvbnRleHQtbWVudT5cclxuXHJcbjwhLS0gTW9kYWwgcGVyIGNhbWJpYXJlIHBvc2l6aW9uZSBlIHZpc2liaWxpdMOgIGRlbGxlIGNvbG9ubmUgZGVsbCdlcy10YWJsZSAtLT5cclxuPGRpdiBic01vZGFsICNjaGFuZ2VDb2x1bW5WaXNpYmlsaXR5TW9kYWw9XCJicy1tb2RhbFwiIGNsYXNzPVwibW9kYWwgZmFkZVwiIHJvbGU9XCJkaWFsb2dcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1kaWFsb2cgbW9kYWwtbGdcIiBjZGtEcmFnPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgZXN0LXBvaW50ZXJcIiBjZGtEcmFnSGFuZGxlPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFIaWRkZW5Db2x1bW5zICYmIENvbHVtbnNPcmRlcmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydDb2x1bW5zIE9yZGVyJyB8IGxvY2FsaXplIDogbGN9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJIaWRkZW5Db2x1bW5zICYmICFDb2x1bW5zT3JkZXJpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snQ29sdW1ucyBWaXNpYmlsaXR5JyB8IGxvY2FsaXplIDogbGN9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJIaWRkZW5Db2x1bW5zICYmIENvbHVtbnNPcmRlcmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydDb2x1bW5zIFZpc2liaWxpdHkgYW5kIE9yZGVyJyB8IGxvY2FsaXplIDogbGN9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2xvc2UgcHVsbC1yaWdodFwiIChjbGljayk9XCJjaGFuZ2VDb2x1bW5WaXNpYmlsaXR5TW9kYWwuaGlkZSgpO1wiIGFyaWEtbGFiZWw9XCJDbG9zZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIVRNUENvbHVtbnNMaXN0IHx8IFRNUENvbHVtbnNMaXN0Lmxlbmd0aCA9PSAwXCIgY2xhc3M9XCJjYXJkIGNhcmQtaW5mbyBlc3QtcGFkZGluZy0xMCBlc3QtbWFyZ2luLWJvdHRvbS0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3snVGhlcmUgYXJlIG5vIGNvbHVtbnMgY29uZmlndXJlZCB0byBiZSBoaWRkZW4vc2hvd24gaW4gdGhpcyB2aWV3JyB8IGxvY2FsaXplIDogbGN9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiVE1QQ29sdW1uc0xpc3QgJiYgVE1QQ29sdW1uc0xpc3QubGVuZ3RoID4gMFwiIHN0eWxlPVwibWF4LWhlaWdodDo1MDBweDsgb3ZlcmZsb3cteTphdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLUFhYWFhYWFoIGxhIHRyaXN0ZXp6YS4uLiBxdWkgbWkgc2VydmlyZWJiZSBsJ2VzLXRhYmxlIHBlciBmYWNpbGl0YXJlIGxhIHNlbGV6aW9uZSBtdWx0aXBsYSBlY2MuLi4gcGVjY2F0byBjaGUgc2UgbGEgbGlua28gcXVpIGVudHJvIGluIHVuIGxvb3AgaW1wcmVzc2lvbmFudGUtLT5cclxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLXNtIGVzdC1tYXJnaW4tYm90dG9tLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImVzdC1jb2wtbWluXCIgKm5nSWY9XCJIaWRkZW5Db2x1bW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImVzdC1wb2ludGVyXCIgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJnbG9iYWxDb2xWaXNDaGVja1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7J3N0YW5kYWxvbmUnOiB0cnVlfVwiIChuZ01vZGVsQ2hhbmdlKT1cImNvbHVtbk1ldGFkYXRhX0guZ2xvYmFsQ29sVmlzQ2hlY2tDaGFuZ2VkKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx0aCBjbGFzcz1cImVzdC1jb2wtbWluXCIgKm5nSWY9XCJDb2x1bW5zT3JkZXJpbmdcIj48L3RoPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJlc3QtY29sLW1pbiBlc3Qtbm93cmFwXCI+e3snQ29sdW1uIE5hbWUnIHwgbG9jYWxpemUgOiBsY319PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tRmlsbGVyLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQaW5uZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwiRGlyZWN0aXZlc0Jhc2VkXCIgY2xhc3M9XCJlc3QtY29sLW1pblwiPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0Ryb3BMaXN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cIlRNUENvbHVtbnNMaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiY29sdW1uTWV0YWRhdGFfSC5jb2x1bW5SZW9yZGVyZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RTb3J0UHJlZGljYXRlXT1cImNvbHVtbk1ldGFkYXRhX0guc29ydFByZWRpY2F0ZS5iaW5kKHRoaXMuY29sdW1uTWV0YWRhdGFfSClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlc3QtZHJvcGJveFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBUTVBDb2x1bW5zTGlzdDsgbGV0IGkgPSBpbmRleDsgbGV0IGxhc3QgPSBsYXN0OyB0cmFja0J5OiBpZFRyYWNrQnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXN0LXBvaW50ZXIgZXN0LWRyb3BsaXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LXdoaXRlLXNlbGVjdGVkXT1cImxhc3RTZWxlY3RlZEl0ZW1JRCA9PSBpdGVtLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LW5vLXNlbGVjdGlvbl09XCIhaXRlbS52aXNpYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcmFnRGlzYWJsZWRdPVwiIUNvbHVtbnNPcmRlcmluZyB8fCBpdGVtLmZpeGVkIHx8IGl0ZW0ucGlubmVkXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAqbmdJZj1cIkhpZGRlbkNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjbGFzcy5lc3QtaGlkZGVuLXZpZXddPVwiaXRlbS5maXhlZFwiIGNsYXNzPVwiZXN0LXBvaW50ZXJcIiBbKG5nTW9kZWwpXT1cIml0ZW0udmlzaWJsZVwiIG5hbWU9XCJ2aXNpYmxle3tpfX1cIiAobmdNb2RlbENoYW5nZSk9XCJjb2x1bW5NZXRhZGF0YV9ILnVwZGF0ZUdsb2JhbENvbFZpc0NoZWNrKCk7XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImVzdC1ub3dyYXAgZHJhZy12aXNpYmxlXCIgKGNsaWNrKT1cImNvbHVtbk1ldGFkYXRhX0guY29sdW1uQ2xpY2tlZChpdGVtKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGFkcmkgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0ucGFyZW50VGVtcGxhdGVzICYmIGl0ZW0ucGFyZW50VGVtcGxhdGVzLmxlbmd0aCA+IDBcIiBjbGFzcz1cImVzdC1mdy1ib2xkIGVzdC1mcy0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgmbmJzcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwYXJlbnQgb2YgaXRlbS5wYXJlbnRUZW1wbGF0ZXM7IGxldCBsYXN0PWxhc3Q7IHRyYWNrQnk6IGlkVHJhY2tCeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyZW50LnRtcGxcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFyZW50LnRtcGxcIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhcmVudC5jb250ZW50XCI+e3twYXJlbnQuY29udGVudH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWxhc3RcIj4mbmJzcDstJm5ic3A7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYnNwOylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgaGVhZGVyIG9yaWdpbmFsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtLnRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbS5tdWx0aSA/IGl0ZW0ubXVsdGlDb250ZW50IDogbnVsbCB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0udGVtcGxhdGVcIj57e2l0ZW0uZGVzY3JpcHRpb259fTwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLUZpbGxlci0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCAoY2xpY2spPVwiY29sdW1uTWV0YWRhdGFfSC5jb2x1bW5DbGlja2VkKGl0ZW0pO1wiPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQaW5uZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiRGlyZWN0aXZlc0Jhc2VkICYmIENvbHVtbnNQaW5uYWJsZVwiPjxzcGFuICpuZ0lmPVwiIWl0ZW0uZml4ZWQgJiYgaXRlbS5waW5uYWJsZVwiIGNsYXNzPVwiZmEgZmEtdGh1bWItdGFja1wiIFtjbGFzcy50ZXh0LXN1Y2Nlc3NdPVwiaXRlbS5waW5uZWRcIiAoY2xpY2spPVwiY29sdW1uTWV0YWRhdGFfSC5waW5PclVucGluQ29sdW1uKGl0ZW0pXCI+PC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnkgZXN0LW1hcmdpbi1yaWdodC0xMFwiIChjbGljayk9XCJsYXN0U2VsZWN0ZWRJdGVtSUQgPSBudWxsOyBjaGFuZ2VDb2x1bW5WaXNpYmlsaXR5TW9kYWwuaGlkZSgpO1wiPnt7J0Nsb3NlJyB8IGxvY2FsaXplIDogbGN9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFUTVBDb2x1bW5zTGlzdCB8fCBUTVBDb2x1bW5zTGlzdC5sZW5ndGggPT0gMFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKGNsaWNrKT1cImNvbHVtbk1ldGFkYXRhX0guY29uZmlybUNvbHVtblZpc2liaWxpdHlTZWxlY3Rpb24oKSAmJiBjaGFuZ2VDb2x1bW5WaXNpYmlsaXR5TW9kYWwuaGlkZSgpXCI+e3snQ29uZmlybScgfCBsb2NhbGl6ZSA6IGxjfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+Il19
1854
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNfdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtdGFibGUvc3JjL2xpYi9jb21wb25lbnRzL2VzLXRhYmxlL2VzX3RhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLXRhYmxlL3NyYy9saWIvY29tcG9uZW50cy9lcy10YWJsZS9lc190YWJsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsT0FBTyxFQUNILFNBQVMsRUFBRSxlQUFlLEVBQWdDLHVCQUF1QixFQUFFLEtBQUssRUFDeEYsWUFBWSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsRUFBYyxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFlLE1BQU0sRUFDOUksTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNOUQsaUJBQWlCO0FBQ2pCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQVN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRWpGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQU0vRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUM1RSxPQUFP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QUF2QixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdrRCxnQkFBZ0I7c0JBQXhFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUVDLGNBQWM7c0JBQTlELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFVL0IscUJBQXFCO3NCQUE3QixLQUFLOztBQStoRFYsTUFBTSxPQUFPLGFBQWE7Q0FJekIiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBBbmd1bGFyXHJcbmltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgUXVlcnlMaXN0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIElucHV0LFxyXG4gICAgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIENvbnRlbnRDaGlsZCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLCBPcHRpb25hbCwgU2VsZiwgVGVtcGxhdGVSZWYsIEluamVjdCwgVHlwZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLy8gQ29uZmlndXJhemlvbmlcclxuaW1wb3J0IHsgVXRpbGl0eVNlcnZpY2UsIEV4cG9ydFNlcnZpY2UsIE1lc3NhZ2VTZXJ2aWNlLCBEYXRlU2VydmljZSwgQ2xpcGJvYXJkU2VydmljZSB9IGZyb20gJ0Blc2ZhZW56YS9leHRlbnNpb25zJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uU2VydmljZSB9IGZyb20gJ0Blc2ZhZW56YS9sb2NhbGl6YXRpb25zJztcclxuaW1wb3J0IHsgUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnQGVzZmFlbnphL3ByZWZlcmVuY2VzJztcclxuXHJcbi8vIFBsdWdpbnNcclxuaW1wb3J0IHsgQ29udGV4dE1lbnVDb21wb25lbnQgfSBmcm9tICdAZXNmYWVuemEvbmd4LWNvbnRleHRtZW51JztcclxuXHJcbi8vIE1vZGVsbGkgLyBUaXBpXHJcbmltcG9ydCB7IEFwcFNlYXJjaCB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9BcHBTZWFyY2hcIjtcclxuaW1wb3J0IHsgQXBwT3JkZXJpbmcgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvQXBwT3JkZXJpbmdcIjtcclxuaW1wb3J0IHsgRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvRXNUYWJsZUNvbHVtbnNEZWZpbml0aW9uXCI7XHJcbmltcG9ydCB7IENvcm5lck1lbnVPcHRpb24gfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9Db3JuZXJNZW51T3B0aW9uXCI7XHJcbmltcG9ydCB7IEVzVGFibGVPcGVyYXRpb25EZWZpbml0aW9uIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9leHRlcm5hbHMvRXNUYWJsZU9wZXJhdGlvbkRlZmluaXRpb25cIjtcclxuaW1wb3J0IHsgRXNUYWJsZUNvbHVtbiB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0VzVGFibGVDb2x1bW5cIjtcclxuaW1wb3J0IHsgR3JvdXBQYWdlciB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL0dyb3VwUGFnZXJcIjtcclxuaW1wb3J0IHsgR3JvdXBSb3V0ZUZyYWdtZW50IH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvR3JvdXBSb3V0ZUZyYWdtZW50XCI7XHJcbmltcG9ydCB7IFRoRWxlbWVudCB9IGZyb20gXCIuLi8uLi9kb21haW4vaW50ZXJuYWxzL1RoRWxlbWVudFwiO1xyXG5pbXBvcnQgeyBQYWdlckluZm9zIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvUGFnZXJJbmZvc1wiO1xyXG5pbXBvcnQgeyBUaEdyb3VwIH0gZnJvbSBcIi4uLy4uL2RvbWFpbi9pbnRlcm5hbHMvVGhHcm91cFwiO1xyXG5pbXBvcnQgeyBUZEVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2ludGVybmFscy9UZEVsZW1lbnRcIjtcclxuaW1wb3J0IHsgSXRlbXNTZWxlY3Rpb24gfSBmcm9tICcuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9JdGVtc1NlbGVjdGlvbic7XHJcbmltcG9ydCB7IEdyb3VwT3JBZ2dyZWdhdGlvbiB9IGZyb20gXCIuLi8uLi9kb21haW4vZXh0ZXJuYWxzL2FwcHNlYXJjaC9Hcm91cE9yQWdncmVnYXRpb25cIjtcclxuaW1wb3J0IHsgR3JvdXBGaWx0ZXIgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvR3JvdXBGaWx0ZXJcIjtcclxuaW1wb3J0IHsgR3JvdXAgfSBmcm9tIFwiLi4vLi4vZG9tYWluL2V4dGVybmFscy9hcHBzZWFyY2gvR3JvdXBcIjtcclxuaW1wb3J0IHsgRXNUYWJsZU1vZGVsQ2hhbmdlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2V4dGVybmFscy9Fc1RhYmxlTW9kZWxDaGFuZ2UnO1xyXG5pbXBvcnQgeyBJdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2V4dGVybmFscy9JdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlJztcclxuaW1wb3J0IHsgRXNUYWJsZURlZmF1bHRhYmxlIH0gZnJvbSAnLi4vLi4vZG9tYWluL2NvbmZpZ3VyYXRpb24vRXNUYWJsZURlZmF1bHRhYmxlJztcclxuXHJcbi8vIENvbXBvbmVudGkgZSBMb2NhbGl6emF6aW9uZVxyXG5pbXBvcnQgeyBFc1RkIH0gZnJvbSAnLi4vZXMtdGQvZXNfdGQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRXNUZERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUaERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGguZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUZEVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGRfZWRpdG9yLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFRoVGRQcm92aWRlciB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZXNfdGhfdGRfcHJvdmlkZXIuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgRXNUYWJsZUxvYyB9IGZyb20gJy4vZXNfdGFibGUuY29tcG9uZW50LmxvYyc7XHJcblxyXG4vLyBUb2tlbnNcclxuaW1wb3J0IHsgRVNUX0RFRkFVTFRTIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcclxuXHJcbi8vIEhhbmRsZXJzXHJcbmltcG9ydCB7IEV4cG9ydEhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9FeHBvcnRIYW5kbGVyXCI7XHJcbmltcG9ydCB7IENvbHVtbk1ldGFkYXRhSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL0NvbHVtbk1ldGFkYXRhSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBEeW5hbWljTW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9EeW5hbWljTW9kZUhhbmRsZXJcIjtcclxuaW1wb3J0IHsgSGllcmFyY2h5TW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9IaWVyYXJjaHlNb2RlSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBJdGVtc0hhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9JdGVtc0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgUmVwb3J0TW9kZUhhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9SZXBvcnRNb2RlSGFuZGxlclwiO1xyXG5pbXBvcnQgeyBSb3dHcm91cGluZ0hhbmRsZXIgfSBmcm9tIFwiLi4vLi4vY29yZS9oYW5kbGVycy9Sb3dHcm91cGluZ0hhbmRsZXJcIjtcclxuaW1wb3J0IHsgU2VsZWN0aW9uSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1NlbGVjdGlvbkhhbmRsZXJcIjtcclxuaW1wb3J0IHsgVXRpbGl0aWVzSGFuZGxlciB9IGZyb20gXCIuLi8uLi9jb3JlL2hhbmRsZXJzL1V0aWxpdGllc0hhbmRsZXJcIjtcclxuXHJcbi8vIFNlcnZpY2VcclxuaW1wb3J0IHsgQ29weVBhc3RlRGV0ZWN0b3IgfSBmcm9tICcuLi8uLi9jb3JlL0NvcHlQYXN0ZURldGVjdG9yJztcclxuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSAnLi4vLi4vY29yZS9Mb2dnZXInO1xyXG5cclxuLy8gUnhqc1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcblxyXG4vKiogQ29tcG9uZW50ZSBjaGUgcGVybWV0dGUgZGkgcmFwcHJlc2VudGFyZSB1bmEgZ3JpZ2xpYSBkaSB2YWxvcmkgKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2VzLXRhYmxlJyxcclxuICAgIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IExvY2FsaXphdGlvblNlcnZpY2UsIHVzZUNsYXNzOiBFc1RhYmxlTG9jIH1dLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZXNfdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9lc190YWJsZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEVzVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcclxuXHJcbiAgICAvLyBDb21wb25lbnRpIHBlciBsYSBnZXN0aW9uZSBkZWxsZSB2YXJpZSBmdW56aW9uYWxpdMOgIGRlbGwnZXMtdGFibGVcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBleHBvcnRfSDogRXhwb3J0SGFuZGxlcjtcclxuICAgIC8qKiBAaWdub3JlICovIHB1YmxpYyBjb2x1bW5NZXRhZGF0YV9IOiBDb2x1bW5NZXRhZGF0YUhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgZHluYW1pY01vZGVfSDogRHluYW1pY01vZGVIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIGhpZXJhcmNoeU1vZGVfSDogSGllcmFyY2h5TW9kZUhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgaXRlbXNfSDogSXRlbXNIYW5kbGVyO1xyXG4gICAgLyoqIEBpZ25vcmUgKi8gcHVibGljIHJlcG9ydE1vZGVfSDogUmVwb3J0TW9kZUhhbmRsZXI7XHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgcm93R3JvdXBpbmdfSDogUm93R3JvdXBpbmdIYW5kbGVyXHJcbiAgICAvKiogQGlnbm9yZSAqLyBwdWJsaWMgc2VsZWN0aW9uX0g6IFNlbGVjdGlvbkhhbmRsZXI7XHJcblxyXG4gICAgLy8gU3Vic2NyaWJlcnMgcGVyIGdsaSBldmVudGkgZGkgY29waWEgZSBpbmNvbGxhXHJcbiAgICAvKiogQGlnbm9yZSAqLyBwcml2YXRlIGNvcHlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAgIC8qKiBAaWdub3JlICovIHByaXZhdGUgcGFzdGVTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQFNlbGYoKSBAT3B0aW9uYWwoKSBwdWJsaWMgbmdDb250cm9sOiBOZ0NvbnRyb2wsXHJcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBwcmVmU2VydmljZTogUHJlZmVyZW5jZXNTZXJ2aWNlLFxyXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoRVNUX0RFRkFVTFRTKSBwcml2YXRlIGRlYWZ1bHRzOiBFc1RhYmxlRGVmYXVsdGFibGUsXHJcbiAgICAgICAgcHVibGljIGxjOiBMb2NhbGl6YXRpb25TZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgdXRpbGl0aWVzX0g6IFV0aWxpdGllc0hhbmRsZXIsXHJcbiAgICAgICAgcHVibGljIHV0aUV4dHM6IFV0aWxpdHlTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZXhwRXh0czogRXhwb3J0U2VydmljZSxcclxuICAgICAgICBwdWJsaWMgZGF0ZUV4dHM6IERhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbXNnRXh0czogTWVzc2FnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjb3B5UGFzdGVEZXRlY3RvcjogQ29weVBhc3RlRGV0ZWN0b3IsXHJcbiAgICAgICAgcHJpdmF0ZSBjbGlwYm9hcmRTZXJ2aWNlOiBDbGlwYm9hcmRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIpIHtcclxuXHJcbiAgICAgICAgLy8gQ29waWEgZSBpbmNvbGxhIHNpIGVmZmV0dHVhbm8gc29sbyBzZSBsYSB0YWJlbGxhIGF0dHVhbGUgw6ggdW5pdm9jYW1lbnRlIHNlbGV6aW9uYXRhXHJcbiAgICAgICAgdGhpcy5jb3B5U3Vic2NyaXB0aW9uID0gdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5PbkNvcHkuc3Vic2NyaWJlKCgpID0+IHsgaWYgKHRoaXMuY29weVBhc3RlRGV0ZWN0b3IuQWN0aXZlRXN0UmVmZXJlbmNlID09IHRoaXMpIHRoaXMuaGFuZGxlQ29weSgpOyB9KTtcclxuICAgICAgICB0aGlzLnBhc3RlU3Vic2NyaXB0aW9uID0gdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5PblBhc3RlLnN1YnNjcmliZSgoKSA9PiB7IGlmICh0aGlzLmNvcHlQYXN0ZURldGVjdG9yLkFjdGl2ZUVzdFJlZmVyZW5jZSA9PSB0aGlzKSB0aGlzLmhhbmRsZVBhc3RlKCk7IH0pO1xyXG5cclxuICAgICAgICB0aGlzLmV4cG9ydF9IID0gbmV3IEV4cG9ydEhhbmRsZXIodGhpcywgdGhpcy5leHBFeHRzLCB0aGlzLm1zZ0V4dHMsIHRoaXMudXRpRXh0cywgdGhpcy5kYXRlRXh0cyk7XHJcbiAgICAgICAgdGhpcy5yb3dHcm91cGluZ19IID0gbmV3IFJvd0dyb3VwaW5nSGFuZGxlcih0aGlzLCB0aGlzLnV0aWxpdGllc19ILCB0aGlzLmRhdGVFeHRzKTtcclxuICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0ggPSBuZXcgQ29sdW1uTWV0YWRhdGFIYW5kbGVyKHRoaXMsIHRoaXMudXRpbGl0aWVzX0gsIHRoaXMudXRpRXh0cywgdGhpcy5wcmVmU2VydmljZSwgdGhpcy5yb3dHcm91cGluZ19IKTtcclxuICAgICAgICB0aGlzLmR5bmFtaWNNb2RlX0ggPSBuZXcgRHluYW1pY01vZGVIYW5kbGVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaGllcmFyY2h5TW9kZV9IID0gbmV3IEhpZXJhcmNoeU1vZGVIYW5kbGVyKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuaXRlbXNfSCA9IG5ldyBJdGVtc0hhbmRsZXIodGhpcywgdGhpcy51dGlsaXRpZXNfSCk7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRNb2RlX0ggPSBuZXcgUmVwb3J0TW9kZUhhbmRsZXIodGhpcywgdGhpcy51dGlsaXRpZXNfSCk7XHJcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25fSCA9IG5ldyBTZWxlY3Rpb25IYW5kbGVyKHRoaXMsIHRoaXMucm93R3JvdXBpbmdfSCk7XHJcblxyXG4gICAgICAgIGlmIChuZ0NvbnRyb2wpXHJcbiAgICAgICAgICAgIG5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKiogU3ViamVjdCB1dGlsaXp6YXRvIGludGVybmFtZW50ZSBsYXRvIEVzVGFibGUgcGVyIGNhdXNhcmUgaWwgRm9jdXMgbGF0byBjb21wb25lbnRlIGRpIElucHV0ICovXHJcbiAgICBwdWJsaWMgRm9jdXNTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxyXG4gICAgLyoqIFRpbWVyIGNoZSB2ZXJyw6AgaW1wb3N0YXRvIGEgKipkb3VibGVDbGlja0J1ZmZlck1zKiogcGVyIGNhcGlyZSBzZSDDqCBzdGF0byBlZmZldHR1YXRvIHVuIGNsaWNrIHNpbmdvbG8gbyB1biBkb3VibGVjbGljayAqL1xyXG4gICAgcHJpdmF0ZSBjZWxsRGJDbGlja1RpbWVyOiBhbnk7XHJcbiAgICAvKiogU2UgdmVuZ29ubyBlZmZldHR1YXRpIDIgY2xpY2sgYSBkaXN0YW56YSBpbmZlcmlvcmUgYSBxdWVzdGkgTWlsbGlzZWNvbmRpIHZpZW5lIGNvbnNpZGVyYXRvIHVuIGRvcHBpbyBjbGljayAqL1xyXG4gICAgcHJpdmF0ZSBkb3VibGVDbGlja0J1ZmZlck1zOiBudW1iZXIgPSAyMDA7XHJcbiAgICAvKiogVmlldyBmaW5hbGUgc3UgY3VpIGJpbmRhcnNpIGxhdG8gRnJvbnRlbmQsIGlsIHRpcG8gcHXDsiBlc3NlcmUgSUFwcFNlYXJjaDxhbnk+IChwZXIgbGEgKip2aWV3TW9kZSoqKSwgYW55W10gKHBlciBsJyoqYXJyYXlNb2RlKiopICovXHJcbiAgICBwdWJsaWMgVmlldzogYW55ID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIGRhIGN1aSBsJ2VzLXRhYmxlIG1vc3RyYSBpIHB1bHNhbnRpIGRpIHBhZ2luYXppb25lIGluIGJhc3NvIGEgZGVzdHJhICovXHJcbiAgICBwdWJsaWMgYXJyYXlQdWxzYW50aTogeyB2YWw6IG51bWJlciwgY3NzQ2xhc3M6IHN0cmluZyB9W107XHJcbiAgICAvKiogSW5kaWNhIHNlIGwnZXMtdGFibGUgZGV2ZSBtb3N0cmFyZSBpbCBjaGVjayBnbG9iYWxlIG5lbGwnaGVhZGVyIHBlciBmYXJlIGlsIFwic2VsZXppb25hIHR1dHRvXCIgKi9cclxuICAgIHB1YmxpYyBnbG9iYWxDaGVjayA9IGZhbHNlO1xyXG4gICAgLyoqIFRpZW5lIGRhIGNvbnRvIGwndWx0aW1vIGVsZW1lbnRvIHNlbGV6aW9uYXRvIGluIG1vZG8gZGEgcG90ZXIgZWZmZXR0dWFyZSBpbCBTSElGVCtDTElDSyAqL1xyXG4gICAgcHJpdmF0ZSBsYXN0U2VsZWN0ZWQ6IGFueSA9IG51bGw7XHJcbiAgICAvKiogQ29udGVnZ2lvIGludGVybm8gcGVyIGlsIG51bWVybyBkaSBlbGVtZW50aSBzZWxlemlvbmF0aSAqL1xyXG4gICAgcHVibGljIHNlbGVjdGVkT2JqZWN0cyA9IDA7XHJcbiAgICAvKiogSW5kaWNhIHNlIMOoIHBvc3NpYmlsZSBlZmZldHR1YXJlIHVuYSBzZWxlemlvbmUgbWFzc2l2YSAqL1xyXG4gICAgcHVibGljIGNhblNlbGVjdEFsbCA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIHN0YSBnZXN0ZW5kbyB1biBJQXBwU2VhcmNoPGFueT4gKi9cclxuICAgIHB1YmxpYyB2aWV3TW9kZSA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBzZSBpbCBjb21wb25lbnRlIHN0YSBnZXN0ZW5kbyB1biBhbnlbXSAqL1xyXG4gICAgcHVibGljIGFycmF5TW9kZSA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGVuaXRvcmUgZGVnbGkgZWxlbWVudGkgZGEgbGlzdGFyZSBsYXRvIGludGVyZmFjY2lhIGRvcG8gdHV0dGUgbGUgZWxhYm9yYXppb25pIGRlbCBjYXNvLFxyXG4gICAgICogZ2VuZXJhbG1lbnRlIG5vbiBzb25vIGFsdHJvIGNoZSB0dXR0aSBnbGkgb2dnZXR0aSBkYSBwcmVzZW50YXJlIGNvbiBpbiBwacO5IGwnaGFzaCBjYWxjb2xhdG8gcGVyIGlkZW50aWZpY2FyZSAxIG9nZ2V0dG8gY29uIGxhIHByb3ByaWEgcmlnYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYm91bmRTb3VyY2U6IGFueVtdID0gW107XHJcbiAgICAvKiogU3Rlc3NhIGNvc2EgZGVsbGEgKipib3VuZFNvdXJjZSoqLCB1dGlsaXp6YXRhIGNvbWUgYXBwb2dnaW8gdGVtcG9yYW5lbyBpbnRlcm5vICovXHJcbiAgICBwdWJsaWMgVE1QQm91bmRTb3VyY2U6IGFueVtdID0gW107XHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgXCJGZXR0YVwiIGRpIG9nZ2V0dGkgdXRpbGl6emF0YSBuZWxsJ2VuZGxlc3Mgc2Nyb2xsLCBvZ25pIGVsZW1lbnRvIGRpIHF1ZXN0byBhcnJheSDDqCB1biBibG9jY2hldHRvIGRpIDEwMCBlbGVtZW50aSAqL1xyXG4gICAgcHVibGljIGJvdW5kU3ViU291cmNlczogYW55W10gPSBbXTtcclxuICAgIC8qKiBAZGVwcmVjYXRlZCBRdWVzdGEgZnVuZ2UgZGEgaW5kaWNhdG9yZSBwZXIgZ2xpIHNsaWNlIGluc2VyaXRpLCBsYSBsdW5naGV6emEgZG92cmViYmUgZXNzZXJlIGNvcnJpc3BvbmRlbnRlIGEgKipib3VuZFN1YlNvdXJjZXMqKiAqL1xyXG4gICAgcHVibGljIGFkZGVkU2xpY2VzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgLyoqIFZhcmlhYmlsZSBjaGUgaWRlbnRpZmljYSBpbCB2YWxvcmUgZGVsIFwic2VsZXppb25hIFR1dHRvXCIgbmVsbGEgcGFnaW5hemlvbmUgKi9cclxuICAgIHB1YmxpYyBkZWZhdWx0QWxsUGFnZU92ZXJyaWRlID0gOTk5OTk5O1xyXG4gICAgLyoqIFNlcnZlIHBlciB0ZW5lcmUgaW4gbWVtb3JpYSBpbCBjb250ZWdnaW8gcHJlY2VkZW50ZSBlIHJlY3VwZXJhcmxvIGluIGNhc28gZGl2ZW50aSAtMiAodmVyaWZpY2FyZSBjb24gQWxlIHBlcmNow6kgbGEgbG9naWNhIGRlbCAtMikgKi9cclxuICAgIHB1YmxpYyBwcmV2aW91c0NvdW50OiBudW1iZXI7XHJcbiAgICAvKiogSW5kaWNhIHNlIHV0aWxpenphcmUgaWwgc2lzdGVtYSBkaSBhdXRvdXBkYXRlLCBjaW/DqCB1biB0cmlnZ2VyIHRpbWUtaXp6YXRvIGluIGFsdG8gYSBkZXN0cmEgZGVsbGEgdGFiZWxsYSBjaGUgcmlwZXRlIGxlIHJpY2VyY2hlIG9nbmkgWCAqKnNlY29uZHMqKiAqL1xyXG4gICAgcHVibGljIGF1dG9VcGRhdGUgPSBmYWxzZTtcclxuICAgIC8qKiBOdW1lcm8gZGkgc2Vjb25kaSBkYSBmYXJlIHRyYXNjb3JyZXJlIGZyYSB1bmEgcmljZXJjYSBlIGwnYWx0cmEgKi9cclxuICAgIHB1YmxpYyBzZWNvbmRzID0gJzEwJztcclxuICAgIC8qKiBSaWZlcmltZW50byBhbGwnSW50ZXJ2YWwgY2hlIHZpZW5lIGdlbmVyYXRvIHNlICoqYXV0b1VwZGF0ZSoqIMOoIGltcG9zdGF0YSBhIHRydWUgaW4gbW9kbyBkYSBwb3RlcmxvIHJpcHVsaXJlICovXHJcbiAgICBwdWJsaWMgdXBkYXRlVGltZXI6IGFueTtcclxuICAgIC8qKiBJbXBvc3RhdGEgYSB0cnVlIG9nbmkgdm9sdGEgY2hlIHZpZW5lIGF2dmlhdGEgdW5hIHJpY2VyY2EsIGUgYSBmYWxzZSBvZ25pIHZvbHRhIGNoZSB1biBudW92byB2YWxvcmUgdmllbmUgcmljZXZ1dG8gKi9cclxuICAgIHB1YmxpYyByZXNlYXJjaEluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dURHMqKiAqL1xyXG4gICAgcHVibGljIFRNUFJvd1REczogeyBbY29udGV4dDogc3RyaW5nXTogVGRFbGVtZW50W10gfSA9IG51bGw7XHJcbiAgICAvKiogTW9kZWxsbyByYXBwcmVzZW50YW50ZSB1biBkaXppb25hcmlvIGRpIHJpZ2hlIGRlbGxhIHRhYmVsbGEsIGNvbiBjaGlhdmUgbCdoYXNoIGUgdmFsb3JlIGxhIGxpc3RhIGRpIGNlbGxlICovXHJcbiAgICBwdWJsaWMgUm93VERzOiB7IFtjb250ZXh0OiBzdHJpbmddOiBUZEVsZW1lbnRbXSB9ID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgKipSb3dURHMqKiDDqCB1biBvZ2dldHRvIHZ1b3RvIG8gbWVubyAqL1xyXG4gICAgcHVibGljIEVtcHR5Um93VGRzOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dUSHMqKiAqL1xyXG4gICAgcHVibGljIFRNUFJvd1RIczogVGhFbGVtZW50W10gPSBudWxsO1xyXG4gICAgLyoqIE1vZGVsbG8gcmFwcHJlc2VudGFudGUgdW4gc2luZ29sbyB0aCBkZWxsYSB0YWJlbGxhLCBnZW5lcmF0byBpbiBiYXNlIGFsbGUgY29uZmlndXJhemlvbmkgZSBhZ2xpIG9nZ2V0dGkgcmljZXZ1dGkgKi9cclxuICAgIHB1YmxpYyBSb3dUSHM6IFRoRWxlbWVudFtdID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIGRpIGFwcG9nZ2lvIHRlbXBvcmFuZW8gcGVyIGkgKipSb3dUaEdyb3VwcyoqICovXHJcbiAgICBwdWJsaWMgVE1QUm93VGhHcm91cHM6IFRoR3JvdXBbXVtdID0gbnVsbDtcclxuICAgIC8qKiBNb2RlbGxvIHJhcHByZXNlbnRhbnRlIHVuIHNpbmdvbG8gaGVhZGVyIGdyb3VwIGRlbGxhIHRhYmVsbGEuIFF1ZXN0YSBsaXN0YSDDqCBnacOgIG9yZGluYXRhIGUgcHJvbnRhIHBlciBlc3NlcmUgdXRpbGl6emF0YSBpbiBuZ0ZvciAqL1xyXG4gICAgcHVibGljIFJvd1RoR3JvdXBzOiBUaEdyb3VwW11bXSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMaXN0YSBkZWkgY29udGVzdGkuIFVuIGNvbnRlc3RvIG5vbiDDqCBhbHRybyBjaGUgdW4gaGFzaCBwYXJ0aWNvbGFyZSBjYWxjb2xhdG8gc3UgdW4gb2dnZXR0byBjaGUgaWRlbnRpZmljYSB1bml2b2NhbWVudGUgdGFsZSBvZ2dldHRvLlxyXG4gICAgICpcclxuICAgICAqIE9nbnVubyBkaSBxdWVzdGkgY29udGVzdGkgcmFwcHJlc2VudGVyw6AgYSBzdWEgdm9sdGEsIHVuaXZvY2FtZW50ZSwgdW5hIHJpZ2EgYWxsJ2ludGVybm8gZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgUm93Q29udGV4dHM6IGFueVtdID0gW107XHJcbiAgICAvKiogRGlyZXR0aXZlIGRpIG9yZGluYW1lbnRvIGRlbGxlIGNvbG9ubmUgKG5vbiBvcmRpbmFtZW50byBkZWkgZGF0aSBtYSBkZWxsZSBjb2xvbm5lIGluIHNlKSAqL1xyXG4gICAgcHVibGljIE9yZGVyRGlyZWN0aXZlczogc3RyaW5nW10gPSBbXTtcclxuICAgIC8qKiBDb2RpY2UgZGVsbCd1bHRpbW8gb2dnZXR0byBzb2xlemlvbmF0byAqL1xyXG4gICAgcHVibGljIGxhc3RTZWxlY3RlZEl0ZW1JRCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWNpZGUgc2UgdXRpbGl6emFyZSBvIG1lbm8gbGUgQ3VzdG9tQ2VsbHMuIEltcG9zdGFuZG9sbyBhICoqdHJ1ZSoqIGwnZXMtdGFibGUgZGl2ZW50YSBpbiBncmFkbyBkaSBnZXN0aXJlIG5hdGl2YW1lbnRlOlxyXG4gICAgICpcclxuICAgICAqIDEpIE9yZGluYW1lbnRvIGUgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZVxyXG4gICAgICpcclxuICAgICAqIDIpIE9yZGluYW1lbnRvIGRlaSBkYXRpXHJcbiAgICAgKlxyXG4gICAgICogMykgTW9kYWxpdMOgIEdlcmFyY2hpY2FcclxuICAgICAqXHJcbiAgICAgKiBlY2MuLi5cclxuICAgICAqIHZpZW5lIGRlZG90dG8gZGFsIHNpc3RlbWEgaW4gYXV0b21hdGljb1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgVXNlQ3VzdG9tQ2VsbHM6IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIG9sdHJlIGFsbGUgY29sb25uZSBkaW5hbWljaGUgc3BlY2lmaWNoZSBkaSB1biB0aXBvIGRpIG9nZ2V0dG8gY2kgc29ubyBhbmNoZSBjb2xvbm5lIGRpbmFtaWNoZSBhZ2dpdW50ZSBkYWxsJ3V0ZW50ZVxyXG4gICAgICpcclxuICAgICAqIEVzLiB1bmEgY29sb25uYSBpbiBjdWkgbW9zdHJhcmUgc2VtcHJlIHVuIGljb25jaW5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBVc2VyRGVmaW5lZER5bmFtaWNDb2xzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGNoZSBxdWVzdG8gw6ggaWwgcHJpbW8gQmluZCBkZWxsYSB0YWJlbGxhLCB2aWVuZSBzZXR0YXRvIGEgZmFsc2Ugbm9uIGFwcGVuYSBpbCBwcmltbyBiaW5kIHZpZW5lIHRlcm1pbmF0byBjb24gc3VjY2Vzc28gKi9cclxuICAgIHB1YmxpYyBGaXJzdEJpbmQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgLyoqIExpc3RhIGRpIGNvbG9ubmUgY2hlIHNpIHBvc3Nvbm8gdmlzdWFsaXp6YXJlL29yZGluYXJlIGZyYSBkaSBsb3JvICovXHJcbiAgICBwdWJsaWMgQ29sdW1uc0xpc3Q6IEVzVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gICAgLyoqIFZhcmlhYmlsZSBkJ2FwcG9nZ2lvIHVzYXRhIGRhbGxhIGRpYWxvZyBkaSBzZWxlemlvbmUvbmFzY29uZGltZW50bywgcGVyIGV2aXRhcmUgZGkgZGFubmVnZ2lhcmUgKipDb2x1bW5zTGlzdCoqIGluIGNhc28gZGkgbW9kaWZpY2hlIHBvaSBhbm51bGxhdGUgKi9cclxuICAgIHB1YmxpYyBUTVBDb2x1bW5zTGlzdDogRXNUYWJsZUNvbHVtbltdID0gW107XHJcbiAgICAvKiogVmFsb3JlIGRlbCBjaGVjayBnbG9iYWxlIGRpIHZpc2liaWxpdMOgIHZhbGlkbyBwZXIgdHV0dGUgbGUgY29sb25uZSBpbiAqKkNvbHVtbnNMaXN0KiogKi9cclxuICAgIHB1YmxpYyBnbG9iYWxDb2xWaXNDaGVjayA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSB0dXR0ZSBsZSBkaXJldHRpdmUgcGVyIGdsaSBlZGl0b3IgY3VzdG9tIGRlbGxlIGNlbGxlICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKEVzVGRFZGl0b3JEaXJlY3RpdmUpIEVzVGRFZGl0b3JEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8RXNUZEVkaXRvckRpcmVjdGl2ZT47XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgdHV0dGUgbGUgbnVvdmUgZGlyZXR0aXZlICBhc3NlZ25hdGkgYSBkaXJldHRpdmEgKFBlciBsYSBtb2RhbGl0w6AgZGluYW1pY2EgZGVsbCdlcy10YWJsZSkgKi9cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oRXNUZERpcmVjdGl2ZSkgRXNUZHNEaXJlY3RpdmU6IFF1ZXJ5TGlzdDxFc1RkRGlyZWN0aXZlPjtcclxuICAgIC8qKiBRdWVyeSBwZXIgcmVjdXBlcmFyZSB0dXR0aSBnbGkgZXMtdGQgYXNzZWduYXRpIGEgZGlyZXR0aXZhIChQZXIgbGEgbW9kYWxpdMOgIGRpbmFtaWNhIGRlbGwnZXMtdGFibGUpICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKEVzVGhEaXJlY3RpdmUpIEVzVGhzRGlyZWN0aXZlOiBRdWVyeUxpc3Q8RXNUaERpcmVjdGl2ZT47XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgdHV0dGkgZ2xpIGVzLXRkIGUgZ2xpIGVzLXRoIGFzc2VnbmF0aSBkYSBwYXJ0ZSBkaSB1biBwcm92aWRlciAocGVyIGludGVncmFyZSBpbiBtYW5pZXJhIGRpbmFtaWNhIGkgdGggZSB0ZCBlc2lzdGVudGkpICovXHJcbiAgICBAQ29udGVudENoaWxkcmVuKFRoVGRQcm92aWRlcikgVGhUZFByb3ZpZGVyOiBRdWVyeUxpc3Q8VGhUZFByb3ZpZGVyPjtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBjb2xsZWdhcmUgdW4gcHJvdmlkZXIgc2VuemEgcGFzc2FyZSBkYWxsYSBwcm9pZXppb25lICovXHJcbiAgICBASW5wdXQoKSBFc1RoVGRQcm92aWRlcjogVGhUZFByb3ZpZGVyO1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGxlIGluZm9ybWF6aW9uaSBkZWwgYm9keSAocHVudG8gZGVsbGEgdGFiZWxsYSBkb3ZlIHZlbmdvbm8gbW9zdHJhdGUgbGUgcmlnaGUpICovXHJcbiAgICBAQ29udGVudENoaWxkKCdib2R5JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBib2R5UmVmOiBhbnk7XHJcbiAgICAvKiogUXVlcnkgcGVyIHJlY3VwZXJhcmUgbGUgaW5mb3JtYXppb25pIGRlbGwnaGVhZGVyIChwdW50byBkZWxsYSB0YWJlbGxhIGRvdmUgdmVuZ29ubyBtb3N0cmF0ZSBsZSBpbnRlc3RhemlvbmkgZGVsbGUgcmlnaGUpICovXHJcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgcHVibGljIGhlYWRlclJlZjogYW55O1xyXG4gICAgLyoqIEBkZXByZWNhdGVkIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGxlIGluZm9ybWF6aW9uaSBzdWwgcmFnZ3J1cHBhbWVudG8gZGVnbGkgaGVhZGVyICovXHJcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXJHcm91cCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgaGVhZGVyR3JvdXBSZWY6IGFueTtcclxuICAgIC8qKiBAZGVwcmVjYXRlZCBRdWVyeSBwZXIgcmVjdXBlcmFyZSBsZSBpbmZvcm1hemlvbmkgc3VsIHJhZ2dydXBwYW1lbnRvIGRpIHNlY29uZG8gbGl2ZWxsbyBkZWdsaSBoZWFkZXIgKi9cclxuICAgIEBDb250ZW50Q2hpbGQoJ3NlY29uZGFyeUhlYWRlckdyb3VwJywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBzZWNvbmRhcnlIZWFkZXJHcm91cFJlZjogYW55O1xyXG4gICAgLyoqIFF1ZXJ5IHBlciByZWN1cGVyYXJlIGlsIGNhbXBvIGRpIElucHV0IGF0dHVhbGUuIERvcG8gdW4gZG9wcGlvIGNsaWNrIGxvIGJlY2NvIGUgbG8gZm9jdXNzbyBhcHBlbmEgdGVybWluYSBsYSBjaGFuZ2UgZGV0ZWN0aW9uICovXHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgaW5wdXRGaWVsZDogRWxlbWVudFJlZjtcclxuICAgIC8qKiBPcHppb25pIGV4dHJhIGNoZSBkZXZvbm8gYXBwYXJpcmUgbmVsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEsIHJpY2hpYW1hdG8gZGFpIDMgcGFsbGluaSB2ZXJ0aWNhbGkgKi9cclxuICAgIEBJbnB1dCgpIENvcm5lck1lbnVPcHRpb25zOiBDb3JuZXJNZW51T3B0aW9uW10gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBkZXYnZXNzZXJlIHBvc3NpYmlsZSBlZmZldHR1YXJlIGlsIHJlc2l6ZSBkZWxsZSBjb2xvbm5lICovXHJcbiAgICBASW5wdXQoKSBDb2x1bW5zUmVzaXphYmxlOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgZGV2J2Vzc2VyZSBwb3NzaWJpbGUgZWZmZXR0dWFyZSBpbCBwaW5uaW5nIGRlbGxlIGNvbG9ubmUgKi9cclxuICAgIEBJbnB1dCgpIENvbHVtbnNQaW5uYWJsZTogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIGRldidlc3NlcmUgZGlzcG9uaWJpbGUgaWwgc2lzdGVtYSBkaSBhZ2dpb3JuYW1lbnRvIGF1dG9tYXRpY28gKi9cclxuICAgIEBJbnB1dCgpIEF1dG9VcGRhdGU6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBsJ2FsdGV6emEgY2FibGF0YSBjaGUgZGV2ZSBhc3N1bWVyZSBsYSB0YWJlbGxhLiBFczogXCIxMDBweFwiIHwgXCIxMDAlXCIgLi4uICAqL1xyXG4gICAgQElucHV0KCkgSGVpZ2h0OiBzdHJpbmcgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBpbCBjb2xvcmUgZGkgc2ZvbmRvIGRlbGxvIHNwYXppbyB2dW90byAobm9uIHJpY29wZXJ0byBkYSBkYXRpKS4gUGFydGljb2xhcm1lbnRlIHV0aWxlIGRhIGltcG9zdGFyZSBpbiBjYXNvIGRpICoqSGVpZ2h0KiogZGl2ZXJzbyBkYSBudWxsICAqL1xyXG4gICAgQElucHV0KCkgRW1wdHlTcGFjZUJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgZGV2J2Vzc2VyZSBsJ2VzdGFibGUgYSBnZXN0aXJlIGxhIHJpY2VyY2EsIGFuY2hlIGxhIHByaW1hLiAgKiovXHJcbiAgICBASW5wdXQoKSBFc1RhYmxlSGFuZGxlZFNlYXJjaDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBpbXBvc3RhcmUgbCdhbHRlenphIG1hc3NpbWEgZGVsbGEgdGFiZWxsYS4gU2UgbnVsbCBsYSBkaW1lbnNpb25lIHNpIGFkYXR0YSBhbCBudW1lcm8gZGkgZWxlbWVudGkgYXR0dWFsbWVudGUgaW4gdmlzdWFsaXp6YXppb25lICovXHJcbiAgICBASW5wdXQoKSBNYXhIZWlnaHQ6IG51bWJlciA9IG51bGw7XHJcbiAgICAvKiogQ2xhc3NpIGRhIGFwcGxpY2FyZSBhbCBjb250ZW5pdG9yZSBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBDb250YWluZXJDbGFzcyA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgbyBtZW5vIGwnZXhwb3J0IGluIGZvcm1hdG8gWExTWCAqL1xyXG4gICAgQElucHV0KCkgWExTWEV4cG9ydDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgbyBtZW5vIGwnZXhwb3J0IGluIGZvcm1hdG8gQ1NWICovXHJcbiAgICBASW5wdXQoKSBDU1ZFeHBvcnQgPSB0cnVlO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHZpc3VhbGl6emFyZSBvIG1lbm8gbCdvcHppb25lIGRpIHBhZ2luYXppb25lIFwiVHV0dGlcIiAqL1xyXG4gICAgQElucHV0KCkgQWxsU2VhcmNoID0gbnVsbDtcclxuICAgIC8qKiBEaW1pbnVpc2NlIGdsaSBzcGF6aSBmcmEgdW5hIGNlbGxhIGUgbCdhbHRyYSwgZSBpbnRlcm5hbWVudGUgaWwgcGFkZGluZyBkZWwgZm9udCBpbiBtb2RvIGRhIHByZXNlbnRhcmUgbW9sdGkgcGnDuSBkYXRpIGluIHVuJ3VuaWNhIHBhZ2luYSAqL1xyXG4gICAgQElucHV0KCkgSGlnaENlbGxEZW5zaXR5OiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBBYmlsaXRhIG8gbWVubyBsYSBwb3NzaWJpbGl0w6AgZGkgc2VsZXppb25hcmUgb2dnZXR0aSAqL1xyXG4gICAgQElucHV0KCkgU2VsZWN0aW9uOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBNb3N0cmEgbyBtZW5vIHVuIG1lc3NhZ2dpbyBkaSBMb2FkaW5nIGFsIHByaW1vIGNhcmljYW1lbnRvIGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIFNob3dMb2FkaW5nT25Cb290c3RyYXA6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFNlIGltcG9zdGF0byBhICoqdHJ1ZSoqIGFnZ2l1bmdlIHVuYSBjb2xvbm5hIGNvbiBwdWxzYW50ZSBkaSBlbGltaW5hemlvbmUgcGVyIGVmZmV0dHVhcmUgbCdlbGltaW5hIGRlbGwnb2dnZXR0byByZWxhdGl2byAqL1xyXG4gICAgQElucHV0KCkgUmVtb3ZhbDogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25kaXppb25lIGNoZSBuYXNjb25kZSBsJ2ljb25hIGRpIGVsaW1pbmF6aW9uZSBpbnNlcml0YSBpbXBvc3RhbmRvICoqUmVtb3ZhbCoqIGEgdHJ1ZSBxdWFsb3JhIGxhIGNvbmRpemlvbmUgbm9uIHZlbmlzc2UgcmlzcGV0dGF0YVxyXG4gICAgICpcclxuICAgICAqIENvbWUgY29uZGl6aW9uZSBzaSBjb25zaWRlcmEgdW4gc2VtcGxpY2UgY2FtcG8gc3UgY3VpIGVmZmV0dHVhcmUgdW4gY29udHJvbGxvIGJvb2xlYW5vLCBjb21lIGFkIGVzZW1waW8gXCJjYW5yZW1vdmVcIlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBSZW1vdmFsQ29uZGl0aW9uID0gJyc7XHJcbiAgICAvKiogSW5kaWNhIHNlIGFiaWxpdGFyZSBsYSBwb3NzaWJpbGl0w6AgZGkgZXNwb3J0YXJlIGxhIHZpc3RhIGRhdGkgYXR0dWFsZSAqL1xyXG4gICAgQElucHV0KCkgRXhwb3J0OiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgcGVybWV0dGVyZSBsYSBzZWxlemlvbmUgbXVsdGlwbGEgV2luZG93cy1saWtlIGNsaWNjYW5kbyB1biBvZ2dldHRvIGUgZmFjZW5kbyBwb2kgU2hpZnQgKyBjbGljayBzdSB1biBvZ2dldHRvIHN1Y2Nlc3Npdm8gKi9cclxuICAgIEBJbnB1dCgpIFNoaWZ0Q2xpY2s6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBpbCB0ZXN0byBjaGUgdmEgYSBzb3N0aXR1aXJlIFwiT2dnZXR0aSBWaXN1YWxpenphdGlcIiBpbiBjYXNvIHNpIHN0aWEgZmFjZW5kbyBxdWFsY29zYSBkaSBjdXN0b20gKi9cclxuICAgIEBJbnB1dCgpIENvdW50TGFiZWw6IHN0cmluZyA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIG5hc2NvbmRlcmUgbyBtb3N0cmFyZSBpbCBjb21wb25lbnRlIGRpIHBhZ2luYXppb25lICovXHJcbiAgICBASW5wdXQoKSBIaWRlUGFnaW5nOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBvIG1vc3RyYXJlIGlsIGNvbnRlZ2dpbyBkZWdsaSBlbGVtZW50aSB0cm92YXRpICovXHJcbiAgICBASW5wdXQoKSBIaWRlUGFnaW5nQ291bnQ6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBuYXNjb25kZXJlIG8gbW9zdHJhcmUgaSBwdWxzYW50aSBkaSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgQElucHV0KCkgSGlkZVBhZ2luZ0J1dHRvbnM6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFJpZmVyaW1lbnRvIGFsIENvbnRleHRNZW51IChuZ3gtY29udGV4dG1lbnUpIGFzc29jaWF0byBhbCBjbGljayBkZXN0cm8gZGkgdW5vIG8gcGnDuSBlbGVtZW50aSBzZWxlemlvbmF0aSBuZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBDb250ZXh0TWVudTogQ29udGV4dE1lbnVDb21wb25lbnQgPSBudWxsO1xyXG4gICAgLyoqIE5vbWUgZGVsbCdlc3BvcnRhemlvbmUgZ2VuZXJhdGEgZGEgcXVlc3RhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIEV4cG9ydEZpbGVOYW1lID0gJ0V4cG9ydC5jc3YnO1xyXG4gICAgLyoqIENsYXNzZSAoSFRNTCkgZGkgZGVmYXVsdCBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBASW5wdXQoKSBUYWJsZUNsYXNzID0gbnVsbDtcclxuICAgIC8qKiBGdW56aW9uZSBkYSB1dGlsaXp6YXJlIGluIGVzcG9ydGF6aW9uZS4gSGEgY29tZSBwYXJhbWV0cm8gdW5hIGNhbGxiYWNrIGNvbiBpIGRhdGkgY29tcGxldGkgZGEgZXNwb3J0YXJlIChkYXRvIGNoZSBkaSBkZWZhdWx0IGxhIHJpY2VyY2Egw6ggcGFnaW5hdGEpICovXHJcbiAgICBASW5wdXQoKSBFeHBvcnRGdW5jdGlvbjogKGNhbGxiYWNrIDogKGRhdGE6IGFueVtdLCB0eXBlOiBUeXBlPGFueT4pID0+IHZvaWQsIGZvcm1hdDogXCJDU1ZcIiB8IFwiWExTWFwiKSA9PiB2b2lkO1xyXG4gICAgLyoqIEluZGljYSBkaSBlc3BvcnRhcmUgc29sbyBsZSBjb2xvbm5lIGF0dHVhbG1lbnRlIHZpc2liaWxpIGRlbGxhIHZpZXcgKi9cclxuICAgIEBJbnB1dCgpIEV4cG9ydE9ubHlWaXNpYmxlQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLyoqIEBkZXByZWNhdGVkIEluZGljYSBsYSBwcmVzZW56YSBkaSByYWdncnVwcGFtZW50aSBhIGxpdmVsbG8gZGkgaGVhZGVyICovXHJcbiAgICBASW5wdXQoKSBIYXNIZWFkZXJHcm91cDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgSW5kaWNhIGxhIHByZXNlbnphIGRpIHJhZ2dydXBwYW1lbnRpIGEgbGl2ZWxsbyBkZWwgcmFnZ3J1cHBhbWVudG8gcHJlY2VkZW50ZW1lbnRlIGVzaXN0ZW50ZSwgY2hpYXJhbWVudGUgw6ggaW5zZW5zYXRhIHNlbnphICoqSGFzSGVhZGVyR3JvdXAqKiAqL1xyXG4gICAgQElucHV0KCkgSGFzU2Vjb25kYXJ5SGVhZGVyR3JvdXA6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBzZSBuYXNjb25kZXJlIGdsaSBIZWFkZXIgZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgSGVhZGVySGlkZGVuOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egc2UgbmFzY29uZGVyZSBpbCBCb2R5IGRlbGxhIHRhYmVsbGEgKi9cclxuICAgIEBJbnB1dCgpIEJvZHlIaWRkZW46IGJvb2xlYW4gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIGxhIHNlbGV6aW9uZSDDqCB0ZW1wb3JhbmVhbWVudGUgZGlzYWJpbGl0YXRhLiBSaXNwZXR0byBhbGwnSW5wdXQgKipTZWxlY3Rpb24qKiBjaGUgdmlzaXZhbWVudGUgZ2VzdGlzY2Ugc2UgY2kgc29ubyBvIG5vIGdsaSBpbnB1dCBkaSBzZWxlemlvbmUsXHJcbiAgICAgKiBxdWVzdG8gSW5wdXQgZ2VzdGlzY2Ugc2UgcXVlc3RpIGlucHV0IHNvbm8gYWJpbGl0YXRpIG8gbWVub1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBTZWxlY3Rpb25EaXNhYmxlZDogYm9vbGVhbiA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRpY2Egc2UgZm9yemFyZSBpbCBzaXN0ZW1hIGRpIHNlbGV6aW9uZSBhIGdlc3RpcmUgdW4gZWxlbWVudG8gcGVyIHZvbHRhLlxyXG4gICAgICogU2VsZXppb25hcmUgdW4nYWx0cmEgcmlnYSBjb24gdW5hIGdpw6Agc2VsZXppb25hdGEgYXBwbGljaGVyw6AgbGEgc2VsZXppb25lIGFsbGEgbnVvdmEgcmlnYSwgcmltdW92ZW5kb2xhIGRhbGwnYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBTaW5nbGVTZWxlY3Rpb246IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIENhbGxiYWNrIGNoZSBkYXRvIHVuIG9nZ2V0dG8gcmVzaXR1aXNjZSBsJ2V2ZW50dWFsZSBjbGFzc2UgZGEgYXBwbGljYXJlIGFsbGEgcmlnYSBjb2xsZWdhdGEgYWxsJ29nZ2V0dG8gKi9cclxuICAgIEBJbnB1dCgpIFJvd0NsYXNzQXNzaWduZXI6IGFueSA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgb3JkaW5hcmUgaSBkYXRpIGluIG1hbmllcmEgZGlzY2VuZGVudGUgbyBhc2NlbmRlbnRlICovXHJcbiAgICBASW5wdXQoKSBPcmRlckJ5Q29sdW1uOiBib29sZWFuID0gbnVsbDtcclxuICAgIC8qKiBQZXJtZXR0ZSBkaSBhdmVyZSBwacO5IGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50byBkZWkgZGF0aSAqL1xyXG4gICAgQElucHV0KCkgTXVsdGlwbGVPcmRlcmluZ0RpcmVjdGl2ZXMgPSB0cnVlO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIG5hc2NvbmRlcmUgbGUgY29sb25uZSBpbiBiYXNlIGFsbGUgc2VsZXppb25pIGVmZmV0dHVhdGUgZGFsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgKi9cclxuICAgIEBJbnB1dCgpIEhpZGRlbkNvbHVtbnM6IGJvb2xlYW4gPSBudWxsO1xyXG4gICAgLyoqIFBlcm1ldHRlIGRpIHJpb3JkaW5hcmUgbGUgY29sb25uZSBpbiBiYXNlIGFsbGUgaW1wb3N0YXppb25pIGVmZmV0dHVhdGUgZGFsIE1lbsO5IGNvbnRlc3R1YWxlIGluIGFsdG8gYSBkZXN0cmEgKi9cclxuICAgIEBJbnB1dCgpIENvbHVtbnNPcmRlcmluZzogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogQGRlcHJlY2F0ZWQgRXZlbnR1YWxlIHN1cHBvcnRvIGFsbGUgcmljZXJjaGUgYXBwbGljYXRlIGFsbGEgbW9kYWxpdMOgIEFycmF5ICovXHJcbiAgICBASW5wdXQoKSBTZWFyY2hWaWV3ID0gbnVsbCBhcyBBcHBTZWFyY2g8YW55PjtcclxuICAgIC8qKiBBYmlsaXRhIG8gZGlzYWJpbGl0YSBpbCBzaXN0ZW1hIGNoZSBwZXJtZXR0ZSBkaSBzZWxlemlvbmFyZSB0dXR0aSBnbGkgZWxlbWVudGkgbmVsbGEgdmlzdGEgKi9cclxuICAgIEBJbnB1dCgpIFNlbGVjdEFsbDogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogU2ltdWxhIGxhIHBhZ2luYXppb25lIGFuY2hlIHBlciBsZSB0YWJlbGxlIGNoZSBmdW56aW9uYW5vIGluIG1vZGFsaXTDoCBBcnJheSAqL1xyXG4gICAgQElucHV0KCkgVXNlQXJyYXlNb2RlUGFnaW5nID0gdHJ1ZTtcclxuICAgIC8qKiBEZWZpbml6aW9uZSBkaSBjb2xvbm5lIGRpbmFtY2hlIHBlciBsYSBtb2RhbGl0w6AsIGFwcHVudG8sIGRpbmFtaWNhICovXHJcbiAgICBASW5wdXQoKSBEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb246IEVzVGFibGVDb2x1bW5zRGVmaW5pdGlvbltdID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2Egb3BlcmF6aW9uaSBkaW5hbWljaGUgZ2VuZXJpY2hlIGNoZSBwb3Nzb25vIGVzc2VyZSBlZmZldHR1YXRlIHBlciByaWdhLiBBcHBhaW9ubyBjb21lIGNvbG9ubmUgZXh0cmEgc3VsIGxhdG8gc2luaXN0cm8gZGVsbGEgdGFiZWxsYSAqL1xyXG4gICAgQElucHV0KCkgRHluYW1pY09wZXJhdGlvbnM6IEVzVGFibGVPcGVyYXRpb25EZWZpbml0aW9uW10gPSBbXTtcclxuICAgIC8qKiBJbmRpY2Egc2UgdmlzdWFsaXp6YXJlIGkgZGF0aSBpbiBtYW5pZXJhIGdlcmFyY2hpY2EgKi9cclxuICAgIEBJbnB1dCgpIEhpZXJhcmNoeTogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lEIGRlbCBwYWRyZS4gRGEgdXRpbGl6emFyZSBzZSAqKkhpZXJhcmNoeSoqIMOoIGltcG9zdGF0byAqL1xyXG4gICAgQElucHV0KCkgUGFyZW50S2V5ID0gJyc7XHJcbiAgICAvKiogTm9tZSBkZWxsYSBwcm9wcmlldMOgIGNoZSBjb250aWVuZSBsJ0lEIGRlbGwnb2dnZXR0byBhdHR1YWxlLiBEYSB1dGlsaXp6YXJlIHNlICoqSGllcmFyY2h5Kiogw6ggaW1wb3N0YXRvICovXHJcbiAgICBASW5wdXQoKSBPd25LZXkgPSAnJztcclxuICAgIC8qKiBJbmRpY2Egc2UgcGFydGlyZSBjb24gdW4gYWxiZXJvIGVzcGFuc28uIERhIHV0aWxpenphcmUgc2UgKipIaWVyYXJjaHkqKiDDqCBpbXBvc3RhdG8gKi9cclxuICAgIEBJbnB1dCgpIFN0YXJ0c0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgIC8qKiBJbmRpY2Egc2UgZWZmZXR0dWFyZSBpbCBzYWx2YXRhZ2dpbyBkZWxsZSBwcmVmZXJlbnplIGRpIHJpY2VyY2EgKi9cclxuICAgIEBJbnB1dCgpIFNhdmVQcmVmZXJlbmNlczogYm9vbGVhbiA9IG51bGw7XHJcbiAgICAvKiogQWxsaW5lYW1lbnRvIGRpIGRlZmF1bHQgcGVyIGNlbGxlIGUgaGVhZGVycyAqL1xyXG4gICAgQElucHV0KCkgRGVmYXVsdEFsaWdubWVudDogJ0xlZnQnIHwgJ1JpZ2h0JyB8ICdDZW50ZXInID0gbnVsbDtcclxuICAgIC8qKiBJbmRpY2EgZG92ZSB2aXN1YWxpenphcmUgbGUgaW5mb3JtYXppb25pIGRpIHBhZ2luYXppb25lLCBzZSBzb3ByYSwgc290dG8gbyBpbiBlbnRyYW1iaSAqL1xyXG4gICAgQElucHV0KCkgUGFnaW5nU3R5bGU6ICdib3RoJyB8ICd0b3AnIHwgJ2JvdHRvbScgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBkb3ZlIHZpc3VhbGl6emFyZSBsZSBpbmZvcm1hemlvbmkgZGkgcGFnaW5hemlvbmUsIHNlIHNvcHJhLCBzb3R0byBvIGluIGVudHJhbWJpICovXHJcbiAgICBASW5wdXQoKSBSb3dHcm91cGluZ1BhZ2luZ1N0eWxlOiAnbGVmdCcgfCAncmlnaHQnID0gbnVsbDtcclxuICAgIC8qKiBRdWFsb3JhIHBlciBxdWFsc2lhc2kgbW90aXZvIG5vbiB2ZW5pc3NlIHVzYXRvICoqaXRlbXMqKiBkZWxsJ0FwcFNlYXJjaCBxdWVzdG8gSW5wdXQgaW5kaWNhIHF1YWwgw6ggaWwgbm9tZSBkZWxsYSBwcm9wcmlldMOgIGRhIHV0aWxpenphcmUgKi9cclxuICAgIEBJbnB1dCgpIEl0ZW1Tb3VyY2VQcm9wZXJ0eTogc3RyaW5nID0gXCJcIjtcclxuICAgIC8qKiBJbmRpY2Egc2UgdXRpbGl6emFyZSBsYSBjYWNoZSBkaSBzZWxlemlvbmUgY2hlIHBlcm1ldHRlIGRpIG1hbnRlbmVyZSBnbGkgc3RhdGkgZGkgc2VsZXppb25lIGRlaSB2YXJpIG9nZ2V0dGkgbmF2aWdhbmRvIGRhIHVuYSBwYWdpbmEgYWxsJ2FsdHJhICovXHJcbiAgICBASW5wdXQoKSBVc2VTZWxlY3Rpb25DYWNoZSA9IG51bGw7XHJcbiAgICAvKiogUGVybWV0dGUgZGkgZGVjaWRlcmUgc2UsIGluIG1vZGFsaXTDoCByYWdncnVwcGFtZW50bywgbW9zdHJhcmUgbyBtZW5vIGlsIHZhbG9yZSBkZWxsZSBjb2xvbm5lIGRpIGdydXBwbyBuZWdsaSBvZ2dldHRpIGZpbmFsaS4gRGkgZGVmYXVsdCBzb25vIG5hc2Nvc3RpICovXHJcbiAgICBASW5wdXQoKSBTaG93SXRlbUdyb3Vwc0NvbHVtbnMgPSBudWxsO1xyXG4gICAgLyoqIEluZGljYSBjaGUgdHV0dGkgaSBjYW1waSBjaGUgZGVmaW5pc2Nvbm8gbGUgbW9kYWxpdMOgIGRpIG1vZGlmaWNhIGNhbXBvIHBvc3Nvbm8gZXNzZXJlIG1vZGlmaWNhdGkgaW4gYmFzZSBhbGxlIGltcG9zdGF6aW9uaSAqL1xyXG4gICAgQElucHV0KCkgRWRpdGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIC8qKiBJbmRpY2Egc2Ugw6ggcG9zc2liaWxlIGVmZmV0dHVhcmUgc2VsZXppb25pIGEgcmFuZ2UgcGVyIHBvaSBmYXJjaSBldmVudHVhbG1lbnRlIGNvcGlhIGluY29sbGEgKi9cclxuICAgIEBJbnB1dCgpIFJhbmdlU2VsZWN0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGlsIG51bWVybyBkaSBtaWxsaXNlY29uZGkgcGVyIGN1aSBkZWJvdW5jYXJlIGlsIHdyaXRlVmFsdWUgcGVyIGxhIG1vZGFsaXTDoCAqKkVzVGFibGVIYW5kbGVkU2VhcmNoKiogKi9cclxuICAgIEBJbnB1dCgpIFNlYXJjaFRocm90dGxlOiBudW1iZXIgPSA1MDtcclxuICAgIC8qKiBFdmVudG8gY2hlIHZpZW5lIHJpY2hpYW1hdG8gYWwgY2FtYmlvIGRpIG9yaWRuYW1lbnRvIGRpIHVuYSBjb2xvbm5hICovXHJcbiAgICBAT3V0cHV0KCkgb25PcmRlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBcHBPcmRlcmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFwcE9yZGVyaW5nPigpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIGNoZSB2aWVuZSByaWNoaWFtYXRvIHF1YW5kbyBsJ2VzLXRhYmxlIHJpdGllbmUgc2lhIG5lY2Vzc2FyaW8gcmktZWZmZXR0dWFyZSBsYSByaWNlcmNhLlxyXG4gICAgICogSWwgYm9vbGVhbm8gZGVsbCdldmVudG8gaW5kaWNhIHNlIHZpZW5lIHN1Z2dlcml0byBkaSByZXNldHRhcmUgbGEgcGFnaW5hIG8gbWVuby5cclxuICAgICAqIFxyXG4gICAgICogU29sbyBpbiBjYXNvIHZlbmdhIHV0aWxpenphdGEgbGEgbW9kYWxpdMOgIGEgcmFnZ3J1cHBhbWVudGkgZGkgcmlnaGUgcHXDsiBzdWNjZWRlcmUgY2hlIGwnZXMtdGFibGUgcGFzc2kgdW4gaW50ZXJvIEFwcFNlYXJjaCBjb21lIHBhcmFtZXRybyBkaSByaWNlcmNhLFxyXG4gICAgICogaW4gcXVlbCBjYXNvIGwnYXBwbGljYXppb25lIHJpY2V2ZW50ZSBkb3Zyw6Agb25vcmFyZSBsYSByaWNoaWVzdGEgc3BlZGVuZG8gYWwgYmFja2FuZCBsJ29nZ2V0dG8gZGkgcmljZXJjYSBBUy1JU1xyXG4gICAgICogXHJcbiAgICAgKiBpbCB0aXBvIGRlbGwnRW1pdHRlciBpbnZlY2UgZGkgZXNzZXJlIFtib29sZWFuIHwgQXBwU2VhcmNoPGFueT5dIMOoIHN0YXRvIGltcG9zdGF0byBhIFwiYW55XCIgcGVyIGV2aXRhcmUgcHJvYmxlbWkgZGkgcmV0cm9jb21wYXRpYmlsaXTDoFxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KCkgb25TZWFyY2hSZXF1ZXN0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgLyoqIEV2ZW50byBjaGUgcGFydGUgYWQgb2duaSBtb2RpZmljYSBkaSBcImNoZWNrYWdnaW9cIiBpbiBmb3JtYSBkaSBjb21vZG8gYXJyYXkuIEVzcG9uZSBsJ29nZ2V0dG8gY29uIGxvIHN0YXRvIGRpIGNoZWNrIGF0dHVhbGUgKi9cclxuICAgIEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxJdGVtc1NlbGVjdGlvbjxhbnk+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SXRlbXNTZWxlY3Rpb248YW55Pj4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGwnZWxpbWluYXppb25lIGRpIHVuIG9nZ2V0dG8gKi9cclxuICAgIEBPdXRwdXQoKSBvblJlbW92YWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gYWxsJ2FubnVsbGFtZW50byBkaSB1bidlbGltaW5hemlvbmUgKi9cclxuICAgIEBPdXRwdXQoKSBvbkFib3J0UmVtb3ZhbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGxhIG1vZGlmaWNhIGRlaSBtb2RlbGxpIGJpbmRhdGkgKi9cclxuICAgIEBPdXRwdXQoKSBvbk1vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXNUYWJsZU1vZGVsQ2hhbmdlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxFc1RhYmxlTW9kZWxDaGFuZ2VbXT4oKTtcclxuICAgIC8qKiBFdmVudG8gcmljaGlhbWF0byBhbGwnYXBlcnR1cmEgZGVsIG1lbsO5IGNvbnRlc3R1YWxlICovXHJcbiAgICBAT3V0cHV0KCkgb25PcGVuQ29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqQ29ybmVyTWVudU9wdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uQ29ybmVyQWN0aW9uOiBFdmVudEVtaXR0ZXI8eyBpZDogc3RyaW5nLCBlc3RhYmxlOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgZXN0YWJsZTogYW55IH0+KCk7XHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gcXVhbmRvIHNpIGNsaWNjYSBzdSB1biBvcHppb25lIGRlZmluaXRhIG5lbGxlICoqRHluYW1pY09wZXJhdGlvbnMqKiAqL1xyXG4gICAgQE91dHB1dCgpIG9uRHluYW1pY09wZXJhdGlvbjogRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZywgaXRlbTogYW55IH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBzdHJpbmcsIGl0ZW06IGFueSB9PigpO1xyXG5cclxuICAgIC8qKiBFbGVtZW50byBIVE1MIGRhIGNsaWNjYXJlIHBlciBsJ2VzcG9ydGF6aW9uZSAqL1xyXG4gICAgQFZpZXdDaGlsZCgnZXhwb3J0RG93bmxvYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaWMgZXhwb3J0RG93bmxvYWRlcjogRWxlbWVudFJlZjtcclxuICAgIC8qKiBQbGFjZWhvbGRlciBkaSBtZW7DuSBjb250ZXN0dWFsZSBwZXIgcXVhbmRvIG5vbiBjaSBzb25vIG9wemlvbmkgbmVsIHBsYWNlaG9sZGVyIFwiVmVyb1wiICAqL1xyXG4gICAgQFZpZXdDaGlsZCgnZW1wdHlNZW51JywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHRhYmxlRW1wdHlNZW51OiBDb250ZXh0TWVudUNvbXBvbmVudDtcclxuXHJcbiAgICAvKiogU3Vic2NyaXB0aW9uIHN1bGwnYXBlcnR1cmEgZGVsIGNvbnRleHQgbWVudSBkYSByaXB1bGlyZSBhbCBkZXN0cm95IGRlbGxhIGNsYXNzZSAqL1xyXG4gICAgcHJpdmF0ZSBjdHhNZW51U3Vic2NyaXB0aW9uOiBhbnk7XHJcblxyXG4gICAgLyoqIFBhZ2luYSBpbiB2aXN1YWxpenphemlvbmUgKGR1cmFudGUgbGEgcGFnaW5hemlvbmUgaW4gbW9kYWxpdMOgIEFycmF5KSAqL1xyXG4gICAgcHVibGljIGFycmF5bW9kZVBhZ2UgPSAxO1xyXG4gICAgLyoqIE51bWVybyBkaSBwYWdpbmUgKGR1cmFudGUgbGEgcGFnaW5hemlvbmUgaW4gbW9kYWxpdMOgIEFycmF5KSAqL1xyXG4gICAgcHVibGljIGFycmF5bW9kZVBhZ2VzID0gMTtcclxuICAgIC8qKiBPZ2dldHRpIHBlciBvZ25pIHBhZ2luYSAoZHVyYW50ZSBsYSBwYWdpbmF6aW9uZSBpbiBtb2RhbGl0w6AgQXJyYXkpICovXHJcbiAgICBASW5wdXQoKSBBcnJheW1vZGVJdGVtc1BlclBhZ2UgPSBudWxsO1xyXG4gICAgLyoqIE9nZ2V0dG8gZGkgc2VsZXppb25lIHBlciBsYSBtb2RhbGl0w6AgQXJyYXksIGNoZSBkZXZlIGNvbXBvcnRhcnNpIGNvbWUgbGEgY29udHJvcGFydGUgaW4gbW9kYWxpdMOgIFZpZXcgKi9cclxuICAgIHB1YmxpYyBhcnJheW1vZGVTZWxlY3Rpb246IEl0ZW1zU2VsZWN0aW9uPGFueT47XHJcbiAgICAvKiogQ29sb25uZSBkYSB2aXN1YWxpenphcmUgaW4gbW9kYWxpdMOgIGFycmF5ICovXHJcbiAgICBwdWJsaWMgYXJyYXlDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLyoqIE9yZGluZSBkZWxsZSBjb2xvbm5lIGRhIHZpc3VhbGl6emFyZSBpbiBtb2RhbGl0w6AgYXJyYXkgKi9cclxuICAgIHB1YmxpYyBhcnJheUNvbHVtbk9yZGVyaW5nOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgLyoqIE9yZGluYW1lbnRpIEFTQy1ERVNDIHN1bGxlIGNvbG9ubmUgaW4gbW9kYWxpdMOgIGFycmF5ICovXHJcbiAgICBwdWJsaWMgYXJyYXlPcmRlcnM6IEFwcE9yZGVyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFZhcmlhYmlsZSBjaGUgc2VydmUgYSBnZXN0aXJlIGlsIG1vbWVudG8gaW4gY3VpIGwnZXMtdGFibGUgYWdnaW9ybmEgbGEgcGFnaW5hemlvbmUgKHB1bHNhbnRpIGVjYykuXHJcbiAgICAgKiBFc3NlbmRvIG9wZXJhemlvbmkgY29tdW5xdWUgY29zdG9zZSBsZSBlZmZldHR1byBzb2xvIHN1IGJpbmRpbmcgZXN0ZXJuaSwgbm9uIHN1IHJld3JpdGUgZ2VuZXJhdGkgaW50ZXJuYW1lbnRlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaW50ZXJuYWxXcml0ZUNhbGwgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENhY2hlIGNoZSBjb250ZXJyw6AgdHV0dGUgbGUgcmljZXJjaGUgZWZmZXR0dWF0ZSBzdSBncnVwcGkgZGl2ZXJzaSBkYWwgcHJpbW8gZSBzdSBlbGVtZW50aSBjb250ZW51dGkgbmVpIGdydXBwaS5cclxuICAgICAqIEluIGNhc28gZGkgY2FtYmkgZGkgb3JkaW5hbWVudG8gZGVsbGUgY29sb25uZSBkaXZlcnNlIGRhbGxhIHByaW1hIHR1dHRlIGxlIGNoaWFtYXRlIGZhdHRlIGRhbCBzZWNvbmRvIGxpdmVsbG8gaW4gcG9pIGRldm9ubyBlc3NlcmUgcmllc2VndWl0ZSBzZWNvbmRvIGxhIHNlZ3VlbnRlIGxvZ2ljYTpcclxuICAgICAqIFxyXG4gICAgICogXHJcbiAgICAgKiAqKkNhbWJpbyBvcmRpbmFtZW50byBzdWwgcHJpbW8gZ3J1cHBvKio6IHJlbG9hZCBjb21wbGV0bywgbm9uIG1pIG9jY3VwbyBkaSByaXB1bGlyZSBnbGkgZWxlbWVudGkgYmluZGF0aSBpbiBhbGN1biBtb2RvXHJcbiAgICAgKiBcclxuICAgICAqICoqQ2FtYmlvIG9yZGluYW1lbnRvIHN1bGxhIGNvbG9ubmEgcmVsYXRpdmEgYWxsJ04tZXNpbW8gZ3J1cHBvKio6IHJlbG9hZCBjb21wbGV0byBkZWwgY29udGVudXRvIGRlaSBncnVwcGkgcHJlY2VkZW50aSwgcmlwdWxlbmRvIHByZWNlZGVudGVtZW50ZSBcclxuICAgICAqIHR1dHRpIGdsaSBlbGVtZW50aSBjb24gKipfZ3JvdXBsZXZlbCoqID0gTlxyXG4gICAgICogXHJcbiAgICAgKiAqKkNhbWJpbyBvcmRpbmFtZW50byBzdSB1bmEgY29sb25uYSBub24gcmFnZ3J1cHBhdGEqKjogcmVsb2FkIGNvbXBsZXRvIHBlciB0dXR0aSBpIGdydXBwaSBmaW5hbGkgYXBlcnRpLCBkZXZvIHByZWNlZGVudGVtZW50ZSByaXB1bGlyZSB0dXR0aSBnbGkgZWxlbWVudGkgY29uICoqX2l0ZW0qKiA9IHRydWVcclxuICAgICAqIFxyXG4gICAgICogQWx0cmkgZXZlbnRpIG5vbiBkb3ZyZWJiZXJvIHJhcHByZXNlbnRhcmUgcHJvYmxlbWk6XHJcbiAgICAgKiAtIFNlbGV6aW9uZTogbm9uIGNhbWJpYSBudWxsYVxyXG4gICAgICogLSBQYWdpbmF6aW9uZTogY2FtYmlhIGEgbGl2ZWxsbyByb290IHF1aW5kaSB2aWVuZSByaWNhcmljYXRvIHR1dHRvIGNvbXVucXVlLCBzdGVzc28gdmFsZSBwZXIgbGUgcGFnaW5hemlvbmkgaW50ZXJuZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ3JvdXBTZWFyY2hSZXF1ZXN0c0NhY2hlOiB7IHBhdGg6IHN0cmluZywgcm91dGU6IEdyb3VwUm91dGVGcmFnbWVudFtdLCB2aWV3OiBBcHBTZWFyY2g8YW55PiwgZ3JvdXBfY29sdW1uOiBzdHJpbmcgfVtdID0gW107XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsZSBkJ2FwcG9nZ2lvIHBlciBjYXBpcmUgc2UgYyfDqCBiaXNvZ25vIGRpIHJpLWVmZmV0dHVhcmUgdW5hIHJpY2VyY2EgbyBtZW5vICovXHJcbiAgICBwcml2YXRlIFJlc2VhcmNoTmVlZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogQ29sb25uZSB2aXNpYmlsaSBkZWxsYSB2aXN0YSBhdHR1YWxlLiBWYWxvcml6emF0byBkaSBkZWZhdWx0IGFsIG51bWVybyBtYXNzaW1vIGRpIGNvbG9ubmUgc3VwcG9ydGF0ZSBkYWxsYSB0YWJlbGxhIHBlciBsZSBjYXNpc3RpY2hlIGluIGFzc2VuemEgZGkgY3VzdG9tIGNlbGxzICovXHJcbiAgICBwdWJsaWMgQ29sdW1uczogeyBWaXNpYmlsZTogbnVtYmVyLCBWaXNpYmxlVW5waW5uZWQ6IG51bWJlciwgR2xvYmFsOiBudW1iZXIgfSA9IHsgVmlzaWJpbGU6IDEwMCwgVmlzaWJsZVVucGlubmVkOiAxMDAsIEdsb2JhbDogMTAwIH07XHJcbiAgICAvKiogSW4gY2FzbyBkaSBSb3cgR3JvdXBpbmcgcXVpIHZpZW5lIHNhbHZhdGEgbGEgdmlzdGEgcHJpbmNpcGFsZSBkZWkgZ3J1cHBpIGJhc2UgKi9cclxuICAgIHB1YmxpYyBNYWluR3JvdXBWaWV3OiBBcHBTZWFyY2g8YW55PiA9IG51bGw7XHJcbiAgICAvKiogQ29udGVnZ2lvIGJhc2UgZGVnbGkgb2dnZXR0aS4gSW4gbW9kYWxpdMOgIG5vcm1hbGUgdmllbmUgcmVzZXR0YXRvIGFkIG9nbmkgbnVvdmEgVmlldyBpbnNlcml0YSwgaW4gbW9kYWxpdMOgIFJvd0dyb3VwaW5nIHZpZW5lIHJlc2V0dGF0byBzb2xvIGFkIHVuYSBudW92YSBWaWV3IGRpIGxpdmVsbG8gXCIwXCIgKi9cclxuICAgIHB1YmxpYyBCYXNlSXRlbXNDb3VudCA9IG51bGw7XHJcbiAgICAvKiogSW5kaWNhIHNlIGNpIHNvbm8gZGVsbGUgY29sb25uZSBwaW5uYXRlIGUgdmlzaWJpbGkuIFNlcnZlIHBlciBwb3RlciBzZXR0YXJlIHR1dHRlIGxlIGNvbG9ubmUgcHJpbWEgY2hlIGFycml2aW5vIGRhdGkgYSBwaW5uZWQqL1xyXG4gICAgcHVibGljIEhhc1Bpbm5lZENvbHVtbnM6IGJvb2xlYW5cclxuICAgIC8qKiBMYXJnaGV6emEgY2FsY29sYXRhIGRlbCBjb250YWluZXIgZGVsbGUgY29sb25uZSBwaW5uYXRlICovXHJcbiAgICBwdWJsaWMgUGlubmVkQ29udGFpbmVyV2lkdGg6IG51bWJlcjtcclxuICAgIC8qKiBJbmRpY2Egc2Ugbm9ub3N0YW50ZSBzaWFtbyBpbiBtb2RhbGl0w6AgYXJyYXkgc29ubyBzdGF0aSBpbmRpdmlkdWF0aSBkZWkgZ3J1cHBpLiBJbiB0YWwgY2FzbyBlcy10YWJsZSBzaSBjb21wb3J0YSBkYSBwc2V1ZG8gYmFja2VuZCBlZCBlZmZldHR1YSBsZSBhZ2dyZWdhemlvbmkgZSByYWdncnVwcGFtZW50aSBjb21wbGV0YW1lbnRlIGxhdG8gY2xpZW50ICovXHJcbiAgICBwdWJsaWMgQXJyYXlHcm91cGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgLyoqIEluZGljYSBjaGUgbCdlcy10YWJsZSDDqCBiYXNhdGEgc3VsbGUgZGlyZXR0aXZlIChudW92YSBtb2RhbGl0w6ApICovXHJcbiAgICBwdWJsaWMgRGlyZWN0aXZlc0Jhc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogSW5kaWNhIGxvIHN0YXRvIGRpIHNlbGV6aW9uZSBwZXIgc2luZ29sYSBjZWxsYSAqL1xyXG4gICAgcHVibGljIHNlbGVjdGlvblN0YXR1czogeyBbaW5kZXg6IG51bWJlcl06IHsgW2luZGV4OiBudW1iZXJdOiBJdGVtUHJvcEVkaXRhYmxlUmVmZXJlbmNlIH0gfSA9IHt9O1xyXG4gICAgLyoqIENoaWFtYXRhIHJlYWxlIGFsIHdyaXRlVmFsdWUgZG9wbyBpbCBwYXNzYWdnaW8gZGkgKipTZWFyY2hUaHJvdHRsZSoqIG1pbGxpc2Vjb25kaS4gU29sbyBtb2RhbGl0w6AgRXNUYWJsZUhhbmRsZWRTZWFyY2ggKi9cclxuICAgIHByaXZhdGUgY2FsbFRpbWVvdXQgOiBhbnkgPSBudWxsO1xyXG4gICAgLyoqIENhY2hlIGRlaSB0aCBwaXV0dG9zdG8gY2hlIHJpY2FsY29sYXJzZWxpIGRpIGNvbnRpbnVvICovXHJcbiAgICBwcml2YXRlIHRoc0NhY2hlOiAgeyBbaW5kZXg6IHN0cmluZ106IEVzVGhEaXJlY3RpdmUgfSA9IHt9O1xyXG4gICAgLyoqIEluZGljYSBxdWFuZG8gbGEgY2FjaGUgZGVpIHRoIMOoIHN0YXRhIGZpbGxhdGEgYWxtZW5vIGxhIHByaW1hIHZvbHRhICovXHJcbiAgICBwcml2YXRlIHRoc0NhY2hlU2V0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIFZhcmlhYmlsaSBkYSBmaWxsYXJlIG5lbGwnQWZ0ZXIgQ29udGVudCBJbml0IHBvaSBkYSByaXV0aWxpenphcmUgbmVsbCdpbnRlcm5hbCBwb3N0IGJvdW5kIHNvdXJjZSAqL1xyXG4gICAgcHJpdmF0ZSBFc1RkczogRXNUZERpcmVjdGl2ZVtdO1xyXG4gICAgcHJpdmF0ZSBFc1RoczogRXNUaERpcmVjdGl2ZVtdO1xyXG4gICAgLyoqIFxyXG4gICAgICogRmxhZyBjaGUsIHNlICoqdHJ1ZSoqLCBwZXIgdW4gZ2lybyBkaSBiaW5kaW5nIG1hbnRpZW5lIGxhIHZpc2liaWxpdMOgIGltcG9zdGF0YSBsb2NhbG1lbnRlLCBwaXV0dG9zdG8gY2hlIGFsbGluZWFyZSBhbGxhIFZpZXcgYmluZGF0YS4gXHJcbiAgICAgKiBVc2F0YSBwZXIgbW9kaWZpY2FyZSBpbiBtYW5pZXJhIHByb2dyYW1tYXRpY2EgbGEgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZSBkYWwgbWV0b2RvICoqc2V0SGVhZGVyVmlzaWJpbGl0eSoqLCBcclxuICAgICAqIFxyXG4gICAgICogRGlzY2xhaW1lcjogKipOT04gTU9ESUZJQ0FSRSoqXHJcbiAgICAgKiovXHJcbiAgICBwdWJsaWMgdXNlTG9jYWxWaXNpYmlsaXR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAvKiogT3B6aW9uaSBkaSBwYWdpbmF6aW9uZSAqL1xyXG4gICAgcHVibGljIFBhZ2VyT3B0aW9uczogUGFnZXJJbmZvcyA9IG5ldyBQYWdlckluZm9zKClcclxuXHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgICAgIC8vIGNsaWNrIGRlc3RybyBzdSB1bmEgcmlnYSBjb24gc2VsZXppb25lIGF0dGl2YTogVGlybyBmdW9yaSBpbCBjb250ZXh0IG1lbnUgZSBzZWxlemlvbmUgbCdlbGVtZW50byBjb3JyZW50ZVxyXG4gICAgICAgIHRoaXMuY3R4TWVudVN1YnNjcmlwdGlvbiA9ICh0aGlzLkNvbnRleHRNZW51IHx8IHRoaXMudGFibGVFbXB0eU1lbnUpLm9wZW4uc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgICAgICAvLyBHcnVwcGkgdmEgYmVuZSwgb2dnZXR0aSBwdXJlLCBtYSBzZXBhcmF0b3JpIGZyYSBncnVwcGkgcHJvcHJpbyBuby4uLlxyXG4gICAgICAgICAgICBpZiAodC5pdGVtLl9zZXApIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGxldCBzaG91bGRFbWl0ID0gIXQuaXRlbS5fc2VsZWN0ZWQ7XHJcblxyXG4gICAgICAgICAgICB0Lml0ZW0uX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5jbGVhclNlbGVjdGlvblN0YXR1c0V4Y2x1ZGluZyhudWxsKTtcclxuICAgICAgICAgICAgdmFyIGl0ZW1TZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbl9ILmhhbmRsZUl0ZW1zU2VsZWN0aW9uKFt0Lml0ZW1dKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc2hvdWxkRW1pdClcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoaXRlbVNlbGVjdGlvbik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIEFzc2VnbmF6aW9uZSBwZXIgdHV0dGkgZ2xpIElucHV0IGRpIGRlZmF1bHRcclxuICAgICAgICB0aGlzLkNvbHVtbnNSZXNpemFibGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29sdW1uc1Jlc2l6YWJsZSwgdGhpcy5kZWFmdWx0cz8uQ29sdW1uc1Jlc2l6YWJsZSk7XHJcbiAgICAgICAgdGhpcy5BdXRvVXBkYXRlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkF1dG9VcGRhdGUsIHRoaXMuZGVhZnVsdHM/LkF1dG9VcGRhdGUpO1xyXG4gICAgICAgIHRoaXMuQWxsU2VhcmNoID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkFsbFNlYXJjaCwgdGhpcy5kZWFmdWx0cz8uQWxsU2VhcmNoLCB0cnVlKTtcclxuICAgICAgICB0aGlzLkV4cG9ydCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5FeHBvcnQsIHRoaXMuZGVhZnVsdHM/LkV4cG9ydCk7XHJcbiAgICAgICAgdGhpcy5IaWRlUGFnaW5nID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkhpZGVQYWdpbmcsIHRoaXMuZGVhZnVsdHM/LkhpZGVQYWdpbmcsIGZhbHNlKTtcclxuICAgICAgICB0aGlzLkhpZGVQYWdpbmdDb3VudCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5IaWRlUGFnaW5nQ291bnQsIHRoaXMuZGVhZnVsdHM/LkhpZGVQYWdpbmdDb3VudCk7XHJcbiAgICAgICAgdGhpcy5IaWRlUGFnaW5nQnV0dG9ucyA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5IaWRlUGFnaW5nQnV0dG9ucywgdGhpcy5kZWFmdWx0cz8uSGlkZVBhZ2luZ0J1dHRvbnMpO1xyXG4gICAgICAgIHRoaXMuQ29udGFpbmVyQ2xhc3MgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29udGFpbmVyQ2xhc3MsIHRoaXMuZGVhZnVsdHM/LkNvbnRhaW5lckNsYXNzLCAnJyk7XHJcbiAgICAgICAgdGhpcy5UYWJsZUNsYXNzID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlRhYmxlQ2xhc3MsIHRoaXMuZGVhZnVsdHM/LlRhYmxlQ2xhc3MsICd0YWJsZSB0YWJsZS1zdHJpcGVkIHRhYmxlLWhvdmVyIHRhYmxlLXNtJyk7XHJcbiAgICAgICAgdGhpcy5TZWxlY3Rpb24gPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuU2VsZWN0aW9uLCB0aGlzLmRlYWZ1bHRzPy5TZWxlY3Rpb24pO1xyXG4gICAgICAgIHRoaXMuU2F2ZVByZWZlcmVuY2VzID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlNhdmVQcmVmZXJlbmNlcywgdGhpcy5kZWFmdWx0cz8uU2F2ZVByZWZlcmVuY2VzKTtcclxuICAgICAgICB0aGlzLlBhZ2luZ1N0eWxlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLlBhZ2luZ1N0eWxlLCB0aGlzLmRlYWZ1bHRzPy5QYWdpbmdTdHlsZSwgJ2JvdHRvbScpO1xyXG4gICAgICAgIHRoaXMuUm93R3JvdXBpbmdQYWdpbmdTdHlsZSA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5Sb3dHcm91cGluZ1BhZ2luZ1N0eWxlLCB0aGlzLmRlYWZ1bHRzPy5Sb3dHcm91cGluZ1BhZ2luZ1N0eWxlLCAnbGVmdCcpO1xyXG4gICAgICAgIHRoaXMuVXNlU2VsZWN0aW9uQ2FjaGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuVXNlU2VsZWN0aW9uQ2FjaGUsIHRoaXMuZGVhZnVsdHM/LlVzZVNlbGVjdGlvbkNhY2hlLCB0cnVlKTtcclxuICAgICAgICB0aGlzLlNob3dJdGVtR3JvdXBzQ29sdW1ucyA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5TaG93SXRlbUdyb3Vwc0NvbHVtbnMsIHRoaXMuZGVhZnVsdHM/LlNob3dJdGVtR3JvdXBzQ29sdW1ucywgZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuQXJyYXltb2RlSXRlbXNQZXJQYWdlID0gdGhpcy51dGlsaXRpZXNfSC5JbnB1dE9yRGVmYXVsdCh0aGlzLkFycmF5bW9kZUl0ZW1zUGVyUGFnZSwgdGhpcy5kZWFmdWx0cz8uQXJyYXltb2RlSXRlbXNQZXJQYWdlLCAxNSk7XHJcbiAgICAgICAgdGhpcy5Db2x1bW5zUGlubmFibGUgPSB0aGlzLnV0aWxpdGllc19ILklucHV0T3JEZWZhdWx0KHRoaXMuQ29sdW1uc1Bpbm5hYmxlLCB0aGlzLmRlYWZ1bHRzPy5Db2x1bW5zUGlubmFibGUsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuRGVmYXVsdEFsaWdubWVudCA9IHRoaXMudXRpbGl0aWVzX0guSW5wdXRPckRlZmF1bHQodGhpcy5EZWZhdWx0QWxpZ25tZW50LCB0aGlzLmRlYWZ1bHRzPy5EZWZhdWx0QWxpZ25tZW50LCAnTGVmdCcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgLy8gU2UgdXRpbGl6em8gbGEgbmV3IHNwaWN5IG1vZGUgZGVkdWNvIHR1dHRpIGkgcGFyYW1ldHJpIGRpIGxhdm9ybyBwb3NzaWJpbGkgYWwgY2FyaWNhbWVudG8gZGVsbGEgdGFiZWxsYVxyXG4gICAgICAgIC8vIFZlbmdvbm8gc292cmFzY3JpdHRlIHNvbG8gbGUgcHJvcHJpZXTDoCBub24gaW1wb3N0YXRlIGRhbGwndXRlbnRlXHJcbiAgICAgICAgdGhpcy5Fc1RkcyA9IHRoaXMuRXNUZHNEaXJlY3RpdmUudG9BcnJheSgpO1xyXG4gICAgICAgIHRoaXMuRXNUaHMgPSB0aGlzLkVzVGhzRGlyZWN0aXZlLnRvQXJyYXkoKTtcclxuXHJcbiAgICAgICAgbGV0IHRoc1Rkc1Byb3ZpZGVycyA9IFsuLi4odGhpcy5Fc1RoVGRQcm92aWRlciA/IFt0aGlzLkVzVGhUZFByb3ZpZGVyXSA6IFtdKSwgLi4udGhpcy5UaFRkUHJvdmlkZXJdO1xyXG4gICAgICAgIGlmKHRoc1Rkc1Byb3ZpZGVycz8ubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIGF3YWl0IGZvcmtKb2luKHRoc1Rkc1Byb3ZpZGVycy5tYXAodCA9PiB0LkxvYWRlZFNpZ25hbCkpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgICAgICB0aGlzLkVzVGRzID0gWy4uLnRoaXMuRXNUZHMsIC4uLnRoc1Rkc1Byb3ZpZGVycy5tYXAodCA9PiB0LkVzVGRzRGlyZWN0aXZlLnRvQXJyYXkoKSkuZmxhdCgpXTtcclxuICAgICAgICAgICAgdGhpcy5Fc1RocyA9IFsuLi50aGlzLkVzVGhzLCAuLi50aHNUZHNQcm92aWRlcnMubWFwKHQgPT4gdC5Fc1Roc0RpcmVjdGl2ZS50b0FycmF5KCkpLmZsYXQoKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB1c2VzVGhzQW5kVGRzRGlyZWN0aXZlcyA9IHRoaXMuRXNUZHM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5Fc1Rocz8ubGVuZ3RoID4gMDtcclxuICAgICAgICBsZXQgaGFzTm9Db250ZW50UHJvamVjdGlvbiA9ICF0aGlzLmJvZHlSZWYgJiYgIXRoaXMuaGVhZGVyUmVmICYmICF0aGlzLmhlYWRlckdyb3VwUmVmICYmICF0aGlzLnNlY29uZGFyeUhlYWRlckdyb3VwUmVmO1xyXG5cclxuICAgICAgICBpZiAodXNlc1Roc0FuZFRkc0RpcmVjdGl2ZXMgfHwgaGFzTm9Db250ZW50UHJvamVjdGlvbikge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5Vc2VDdXN0b21DZWxscyA9PSBudWxsKSB0aGlzLlVzZUN1c3RvbUNlbGxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuSGlkZGVuQ29sdW1ucyA9PSBudWxsICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHRoaXMuSGlkZGVuQ29sdW1ucyA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLkNvbHVtbnNPcmRlcmluZyA9PSBudWxsICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHRoaXMuQ29sdW1uc09yZGVyaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuT3JkZXJCeUNvbHVtbiA9PSBudWxsICYmIHRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHRoaXMuT3JkZXJCeUNvbHVtbiA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlbGVjdEFsbCA9PSBudWxsICYmIHRoaXMuU2VsZWN0aW9uKSB0aGlzLlNlbGVjdEFsbCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNoaWZ0Q2xpY2sgPT0gbnVsbCAmJiB0aGlzLlNlbGVjdGlvbikgdGhpcy5TaGlmdENsaWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5EaXJlY3RpdmVzQmFzZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9QZXIgcG90ZXIgY2FtYmlhcmUgaWwgbGF5b3V0IGluIGJhc2UgYWwgbGl2ZWxsbyBnZXJhcmNoaWNvIGlsIGNvbXBvbmVudGUgZGV2YSBhdmVyZSBpbCBwaWVubyBjb250cm9sbG8gZGkgb2duaSBjZWxsYSxcclxuICAgICAgICAvL2NoZSBjb24gc29sbyBsYSBwcm9pZXppb25lIChzZW56YSBjZWxsZSBjdXNvdG0pIG5vbiDDqCBkaXNwb25pYmlsZVxyXG4gICAgICAgIGlmICh0aGlzLkhpZXJhcmNoeSAmJiAhdGhpcy5Vc2VDdXN0b21DZWxscylcclxuICAgICAgICAgICAgdGhyb3cgXCJFcy10YWJsZSBlcnJvcjogUGVyIHBvdGVyIHV0aWxpenphcmUgbCdlcy10YWJsZSBjb24gW0hpZXJhcmNoeV09XFxcInRydWVcXFwiIMOoIHJpY2hpZXN0byBhbmNoZSBbVXNlQ3VzdG9tQ2VsbHNdPVxcXCJ0cnVlXFxcIlwiO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29weVN1YnNjcmlwdGlvbilcclxuICAgICAgICAgICAgdGhpcy5jb3B5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBhc3RlU3Vic2NyaXB0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLnBhc3RlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN0eE1lbnVTdWJzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIHRoaXMuY3R4TWVudVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5BY3RpdmVFc3RSZWZlcmVuY2UgPT0gdGhpcylcclxuICAgICAgICAgICAgdGhpcy5jb3B5UGFzdGVEZXRlY3Rvci5BY3RpdmVFc3RSZWZlcmVuY2UgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIGxldCBuZXdTZWFyY2hWaWV3ID0gY2hhbmdlc1snU2VhcmNoVmlldyddO1xyXG4gICAgICAgIGlmIChuZXdTZWFyY2hWaWV3ICYmIHRoaXMuU2VhcmNoVmlldylcclxuICAgICAgICAgICAgdGhpcy5hcnJheVB1bHNhbnRpID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIHRoaXMuU2VhcmNoVmlldy5wYWdlLCB0aGlzLlNlYXJjaFZpZXcucGFnZXMgfHwgMSwgdGhpcy5TZWFyY2hWaWV3Lm9iamVjdGNvdW50LCB0aGlzLlNlYXJjaFZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbik6IHZvaWQgeyB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuOyB9XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKTogdm9pZCB7IH1cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XHJcbiAgICAvKiogQGlnbm9yZSAqL1xyXG4gICAgY2hhbmdlZChjbGVhckl0ZW1zOiBib29sZWFuID0gZmFsc2UpIHsgXHJcbiAgICAgICAgaWYgKGNsZWFySXRlbXMgJiYgdGhpcy52aWV3TW9kZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuSXRlbVNvdXJjZVByb3BlcnR5KVxyXG4gICAgICAgICAgICAgICAgKDxBcHBTZWFyY2g8YW55Pj50aGlzLlZpZXcpLml0ZW1zID0gW107XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICg8QXBwU2VhcmNoPGFueT4+dGhpcy5WaWV3KVt0aGlzLkl0ZW1Tb3VyY2VQcm9wZXJ0eV0gPSBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuVmlldyk7IFxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBAaWdub3JlICovXHJcbiAgICBwdWJsaWMgYXN5bmMgd3JpdGVWYWx1ZShvYmo6IGFueSwgdGhyb3R0bGU6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5WaWV3ID0gb2JqID8gb2JqIDogbnVsbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuRXNUYWJsZUhhbmRsZWRTZWFyY2ggJiYgdGhyb3R0bGUpIHtcclxuICAgICAgICAgICAgaWYodGhpcy5jYWxsVGltZW91dClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmNhbGxUaW1lb3V0KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY2FsbFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsgdGhpcy53cml0ZVZhbHVlKG9iaiwgZmFsc2UpOyB9LCB0aGlzLlNlYXJjaFRocm90dGxlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgIC8vIE1pIMOoIGFycml2YXRhIGwnQXBwU2VhcmNoIHF1aW5kaSBkaSBzaWN1cm8gbm9uIGhvIHVuYSByaWNlcmNhIGluIHByb2dyZXNzXHJcbiAgICAgICAgdGhpcy5yZXNlYXJjaEluUHJvZ3Jlc3MgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLlZpZXcgJiYgIXRoaXMuU2VhcmNoVmlldykge1xyXG4gICAgICAgICAgICAvLyBTdSB2aWV3IG51bGxhIGV2aXRvIGRpIGZhcmUgcHJlc3NvY2jDqSBxdWFsc2lhc2kgY29zYS4gU2UgYXJyaXZhIHVuIG51bGwgZGV2byBhbmNoZSBhc3NpY3VyYXJtaSBkaSBub24gbW9zdHJhcmUgbnVsbGFcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuVE1QQm91bmRTb3VyY2UgfHwgW107XHJcblxyXG4gICAgICAgICAgICAvLyBQZXIgZXNzZXJlIHNpY3VybyBjaGUgZG9wbyB1biBiaW5kIGRpIG9nZ2V0dGkgbGEgZXMtdGFibGUgYWdnaW9ybmkgbGEgZ3JhZmljYVxyXG4gICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gU2UgcGVyIHNiYWdsaW8gbCdvZ2dldHRvIGNoZSBtaSBhcnJpdmEgbm9uIMOoIHRpcGl6emF0byAoaW5zdGFuY2VvZiBBcHBTZWFyY2ggcmVzdGl0dWlzY2UgZmFsc2UgYW5jaGUgc2Ugw6ggZGVsIHRpcG8gZ2l1c3RvKVxyXG4gICAgICAgIC8vIGxvIGNvcnJlZ2dvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgICBpZiAodGhpcy5WaWV3ICYmIHR5cGVvZiAodGhpcy5WaWV3IGFzIGFueSkuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgIT0gJ3VuZGVmaW5lZCcgJiYgISh0aGlzLlZpZXcgaW5zdGFuY2VvZiBBcHBTZWFyY2gpKVxyXG4gICAgICAgICAgICAodGhpcy5WaWV3IGFzIGFueSkuX19wcm90b19fID0gbmV3IEFwcFNlYXJjaCgpO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuU2VhcmNoVmlldyAmJiB0eXBlb2YgKHRoaXMuU2VhcmNoVmlldyBhcyBhbnkpLml0ZW1zcGVycGFnZW92ZXJyaWRlICE9ICd1bmRlZmluZWQnICYmICEodGhpcy5TZWFyY2hWaWV3IGluc3RhbmNlb2YgQXBwU2VhcmNoKSlcclxuICAgICAgICAgICAgKHRoaXMuU2VhcmNoVmlldyBhcyBhbnkpLl9fcHJvdG9fXyA9IG5ldyBBcHBTZWFyY2goKTtcclxuICAgICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gICAgICAgIGlmICh0aGlzLlZpZXcgJiYgdGhpcy5WaWV3IGluc3RhbmNlb2YgQXBwU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIC8vIFNlIGNhbWJpYSBsJ29nZ2V0dG8gaW50ZXJvIHNpZ25pZmljYSBjaGUgaG8gcmltYW5kYXRvIGxhIHJpY2VyY2FcclxuICAgICAgICAgICAgdGhpcy5zZXRNb2RlKCd2aWV3Jyk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZmlyc3RJdGVtR3JvdXBPck5vR3JvdXBpbmcgPSAodGhpcy5WaWV3LnJlcXVlc3RlZGdyb3Vwcz8ubGVuZ3RoIHx8IDApID09IDA7XHJcblxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gU2UgdmVuZ28gZGEgdW5hIHJpY2VyY2EgaW50ZXJuYSBtYW50ZW5nbyBsbyBzdGF0byBkaSBzZWxlemlvbmUgcHJlY2VkZW50ZSAocXVpbmRpIHN1IGNhbWJpbyBwYWdpbmEsIGNhbWJpbyBpcHAsIGVjYy4uLilcclxuICAgICAgICAgICAgLy8gc2UgaW52ZWNlIGwndXRlbnRlIGhhIGZhdHRvIHVuYSByaWNlcmNhIGx1aSAocXVpbmRpIGNhbWJpYW5kbyBmaWx0cmkpLCBzZWNjbyBsZSBpbmZvIGRpIHNlbGV6aW9uZVxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuVmlldy5zZWxlY3Rpb24gfHwgKCF0aGlzLlZpZXcuaW50ZXJuYWxzZWFyY2hyZXF1ZXN0ICYmIGZpcnN0SXRlbUdyb3VwT3JOb0dyb3VwaW5nKSB8fCAhdGhpcy5Vc2VTZWxlY3Rpb25DYWNoZSlcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3Rpb24odHJ1ZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLlZpZXcuaW50ZXJuYWxzZWFyY2hyZXF1ZXN0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAvLyBSZWN1cGVybyBQcmVmZXJlbmNlXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNhdmVQcmVmZXJlbmNlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLm5nQ29udHJvbC5uYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOb24gcG9zc28gdXRpbGl6emFyZSBsZSBwcmVmZXJlbmNlIHNlbnphIGF2ZXJlIHVuICduYW1lJyBwZXIgcXVlc3RhIHRhYmVsbGFcIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghdGhpcy5wcmVmU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBjaGUgaWwgcGFjY2hldHRvIEBlc2ZhZW56YS9wcmVmZXJlbmNlcyBzaWEgaW5zdGFsbGF0b1wiKTtcclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwcmVmcyA9IGF3YWl0IHRoaXMucHJlZlNlcnZpY2UuZ2V0SXRlbTx7IGNvbHVtbnM6IHN0cmluZ1tdLCBjb2x1bW5fb3JkZXJpbmc6IHN0cmluZ1tdLCBvcmRlcnM6IEFwcE9yZGVyaW5nW10gfT4oPHN0cmluZz50aGlzLm5nQ29udHJvbC5uYW1lKS50b1Byb21pc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBJbiBjYXNpIGxhIGdlbnRlIHNpIG1ldHRhIGEgc3BhbW1hcmUgcmVmcmVzaCBjb24gbmdpZiBzdHJhbmkgc3VsbCdlc3RhYmxlIGNyZWFuZG9sYSBlIGRpc3RydWdnZW5kb2xhIE4gdm9sdGUgYWwgc2Vjb25kbyBuZWwgdGVtcG8gY2hlIGNpIG1ldHRlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYSB0aXJhcmUgc3UgbGUgcHJlZmVyZW5jZSBkYSBxdWkgc29wcmEgbGEgVmlldyBwb3RyZWJiZSBlc3NlcmUgY2FtYmlhdGFcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5WaWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xzID0gcHJlZnM/LmNvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cGRhdGVkUHJlZnMgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVwb3NpdG9yeTogc3RyaW5nW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzb3VyY2U6IHN0cmluZ1tdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSA9IHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucy5tYXAodCA9PiB0LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNvbHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvc2l0b3J5ID0gY29scztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHRoaXMuVmlldy5jb2x1bW5zO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6AgcmVwb3J0IGRldm8gY29udHJvbGxhcmUgY2hlIHR1dHRlIGxlIGNvbG9ubmUgc2FsdmF0ZSBmYWNjaWFubyBwYXJ0ZSBkZWxsYSB2aXN0YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6Agbm9ybWFsZSBpbnZlY2Ugc2UgbGUgcHJlZmVyZW56ZSBmYW5ubyByaWZlcmltZW50byBhIGRlbGxlIGNvbG9ubmUgY2hlIGlvIG5vbiBobyBuZWxsYSBWaWV3IGF0dHVhbGUgc2lnbmlmaWNhIGNoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG8gZmFjZW5kbyByaWZlcmltZW50byBhIHVuYSB2ZXJzaW9uZSB2ZWNjaGlhIGRlbGwnZXMtdGFibGUsIHF1aW5kaSBub24gZmFjY2lvIG9wZXJhemlvbmlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXBvc2l0b3J5LmluZGV4T2Yoc291cmNlW2ldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQcmVmcyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBTZSBtaSBiYXNvIHN1IGRpcmV0dGl2ZSBtYSBuZWxsZSBwcmVmZXJlbmNlIMOoIHByZXNlbnRlIGFuY2hlIHNvbG8gdW5hIGNvbG9ubmEgbm9uIHByZXNlbnRlIG5lbGxlIGRpcmV0dGl2ZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdnVvbCBkaXJlIGNoZSBsJ2VzLXRhYmxlIMOoIGNhbWJpYXRhIHF1aW5kaSBub24gaW1wb3N0byBwcmVmZXJlbmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5Fc1Roc0RpcmVjdGl2ZT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXBvc2l0b3J5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGhzQ2FjaGVTZXQgJiYgIXRoaXMudGhzQ2FjaGVbcmVwb3NpdG9yeVtpXV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByZWZzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5WaWV3LmNvbHVtbnMgPSBwcmVmcz8uY29sdW1ucyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5fb3JkZXJpbmcgPSBwcmVmcz8uY29sdW1uX29yZGVyaW5nIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2UgbGUgcHJlZiBzb25vIG51bGxlIG5vbiBzb3ZyYXNjcml2byBnbGkgb3JkaW5pIGRhdG8gY2hlIHBvdHJlYmJlIHNlcnZpcmUgbWV0dGVyZSBkZWdsaSBvcmRpbmFtZW50aSBkaSBkZWZhdWx0IGxhdG8gdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHByZWZzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5vcmRlcnMgPSBwcmVmcz8ub3JkZXJzIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBMYSBwYWdpbmF6aW9uZSBkZXZvIGZhcmxhIHNvbGFtZW50ZSBxdWFuZG8gcmljaGllZG8gbyB1biBncnVwcG8gcHJpbmNpcGFsZSAoc2Ugc29ubyBpbiByb3cgZ3JvdXBpbmcpIG8gc2Ugbm9uIHJpY2hpZWRvIGdydXBwaSAoaW4gdHV0dGkgbGdpIGFsdHJpIGNhc2kpXHJcbiAgICAgICAgICAgIGlmIChmaXJzdEl0ZW1Hcm91cE9yTm9Hcm91cGluZylcclxuICAgICAgICAgICAgICAgIHRoaXMuYXJyYXlQdWxzYW50aSA9IHRoaXMudXRpbGl0aWVzX0guZ2V0UGFnZXNBcnJheSg2LCB0aGlzLlZpZXcucGFnZSwgdGhpcy5WaWV3LnBhZ2VzIHx8IDEsICh0aGlzLkl0ZW1Tb3VyY2VQcm9wZXJ0eSA/IHRoaXMuVmlld1t0aGlzLkl0ZW1Tb3VyY2VQcm9wZXJ0eV0gOiB0aGlzLlZpZXcuaXRlbXMpLmxlbmd0aCwgdGhpcy5WaWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5WaWV3ICYmICh0aGlzLlZpZXcubGVuZ3RoICE9IG51bGwgJiYgdGhpcy5WaWV3Lmxlbmd0aCAhPSB1bmRlZmluZWQpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnYXJyYXknKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5Vc2VTZWxlY3Rpb25DYWNoZSB8fCAhdGhpcy5hcnJheW1vZGVTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0aW9uKHRydWUpO1xyXG5cclxuICAgICAgICAgICAgLy8gUmVjdXBlcm8gUHJlZmVyZW5jZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5TYXZlUHJlZmVyZW5jZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5uZ0NvbnRyb2wubmFtZSlcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTm9uIHBvc3NvIHV0aWxpenphcmUgbGUgcHJlZmVyZW5jZSBzZW56YSBhdmVyZSB1biAnbmFtZScgcGVyIHF1ZXN0YSB0YWJlbGxhXCIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMucHJlZlNlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5vbiBwb3NzbyB1dGlsaXp6YXJlIGxlIHByZWZlcmVuY2Ugc2VuemEgY2hlIGlsIHBhY2NoZXR0byBAZXNmYWVuemEvcHJlZmVyZW5jZXMgc2lhIGluc3RhbGxhdG9cIik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcHJlZnMgPSBhd2FpdCB0aGlzLnByZWZTZXJ2aWNlLmdldEl0ZW08eyBjb2x1bW5zOiBzdHJpbmdbXSwgY29sdW1uX29yZGVyaW5nOiBzdHJpbmdbXSwgb3JkZXJzOiBBcHBPcmRlcmluZ1tdIH0+KDxzdHJpbmc+dGhpcy5uZ0NvbnRyb2wubmFtZSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHMgPSBwcmVmcz8uY29sdW1ucyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXBkYXRlZFByZWZzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVwb3NpdG9yeTogc3RyaW5nW107XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNvdXJjZTogc3RyaW5nW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLlZpZXcucmVwb3J0X2NvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3NpdG9yeSA9IHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucy5tYXAodCA9PiB0LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gY29scztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgPSBjb2xzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UgPSB0aGlzLlZpZXcuY29sdW1ucztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCByZXBvcnQgYWdnaW9ybm8gbGUgcHJlZmVyZW56ZSBzb2xvIHNlIGMnw6ggYWxtZW5vIHVuYSBjb2xvbm5hLCBhbHRyaW1lbnRpIHZ1b2wgZGlyZSBjaGUgc2kgcGFydGUgZGEgdnVvdGlcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb24gdHV0dGUgbGUgY29sb25uZSBkaXNwb25pYmlsaVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuVmlldy5yZXBvcnRfY29sdW1ucyAmJiAoc291cmNlPy5sZW5ndGggfHwgMCkgPT0gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByZWZzID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEluIG1vZGFsaXTDoCBub3JtYWxlIGludmVjZSBzZSBsZSBwcmVmZXJlbnplIGZhbm5vIHJpZmVyaW1lbnRvIGEgZGVsbGUgY29sb25uZSBjaGUgaW8gbm9uIGhvIG5lbGxhIFZpZXcgYXR0dWFsZSBzaWduaWZpY2EgY2hlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvIGZhY2VuZG8gcmlmZXJpbWVudG8gYSB1bmEgdmVyc2lvbmUgdmVjY2hpYSBkZWxsJ2VzLXRhYmxlLCBxdWluZGkgbm9uIGZvY2NpbyBvcGVyYXppb25pXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcG9zaXRvcnkuaW5kZXhPZihzb3VyY2VbaV0pID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkUHJlZnMgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5zID0gcHJlZnM/LmNvbHVtbnMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuVmlldy5jb2x1bW5fb3JkZXJpbmcgPSBwcmVmcz8uY29sdW1uX29yZGVyaW5nIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2UgbGUgcHJlZiBzb25vIG51bGxlIG5vbiBzb3ZyYXNjcml2byBnbGkgb3JkaW5pIGRhdG8gY2hlIHBvdHJlYmJlIHNlcnZpcmUgbWV0dGVyZSBkZWdsaSBvcmRpbmFtZW50aSBkaSBkZWZhdWx0IGxhdG8gdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJlZnMpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlZpZXcub3JkZXJzID0gcHJlZnM/Lm9yZGVycyB8fCBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLlNlYXJjaFZpZXcpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFycmF5UHVsc2FudGkgPSB0aGlzLnV0aWxpdGllc19ILmdldFBhZ2VzQXJyYXkoNiwgdGhpcy5TZWFyY2hWaWV3LnBhZ2UsIHRoaXMuU2VhcmNoVmlldy5wYWdlcyB8fCAxLCB0aGlzLlNlYXJjaFZpZXcuaXRlbXMubGVuZ3RoLCB0aGlzLlNlYXJjaFZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5maW5hbGl6ZUNvbnRleHQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5wb3N0Qm91bmRTb3VyY2VDYWxjdWxhdGlvbigpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5WaWV3ICYmICF0aGlzLlZpZXcuc2VsZnNlYXJjaCAmJiB0aGlzLkVzVGFibGVIYW5kbGVkU2VhcmNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuVmlldy5zZWxmc2VhcmNoID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKHRydWUpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5lbWl0KGZhbHNlKVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLlZpZXcgJiYgdGhpcy5WaWV3LnNlbGZzZWFyY2ggJiYgdGhpcy5Fc1RhYmxlSGFuZGxlZFNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZnNlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHRyYWNrYnkgcGVyIGlsIGJvZHkgY2hlIGRvdnJlYmJlIGV2aXRhcmUgaWwgOTAlIGRlbGxlIGNoYW5nZSBkZXRlY3Rpb24gKi9cclxuICAgIHB1YmxpYyBib2R5VHJhY2tCeSA9IChfOiBudW1iZXIsIGl0ZW06IGFueSkgPT4gaXRlbS5faGFzaDtcclxuXHJcbiAgICAvKiogRnVuemlvbmUgZGkgdHJhY2tieSBnZW5lcmljYSBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGhhbm5vIGlsIGNhbXBvIGlkICovXHJcbiAgICBwdWJsaWMgaWRUcmFja0J5ID0gKF86IG51bWJlciwgaXRlbTogYW55KSA9PiBpdGVtLmlkO1xyXG5cclxuICAgICAvKiogRnVuemlvbmUgZGkgdHJhY2tieSBnZW5lcmljYSBwZXIgdHV0dGkgZ2xpIG9nZ2V0dGkgY2hlIGhhbm5vIGlsIGNhbXBvIFByb3BlcnR5TmFtZSAqL1xyXG4gICAgcHVibGljIFByb3BlcnR5TmFtZVRyYWNrQnkgPSAoXzogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0uUHJvcGVydHlOYW1lO1xyXG5cclxuICAgIC8qKiBGdW56aW9uZSBkaSB0cmFja2J5IGdlbmVyaWNhIHBlciB0dXR0aSBnbGkgb2dnZXR0aSBjaGUgaGFubm8gaWwgY2FtcG8gSUQgKi9cclxuICAgIHB1YmxpYyBJRFRyYWNrQnkgPSAoXzogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0uSUQ7XHJcblxyXG4gICAgLyoqIEZ1bnppb25lIGRpIHRyYWNrYnkgZ2VuZXJpY2EgcGVyIHR1dHRpIGdsaSBvZ2dldHRpIGNoZSBoYW5ubyBpbCBjYW1wbyBJRCAqL1xyXG4gICAgcHVibGljIHZhbFRyYWNrQnkgPSAoXzogbnVtYmVyLCBpdGVtOiBhbnkpID0+IGl0ZW0udmFsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3VjY2Vzc2l2YW1lbnRlIGFsIGJpbmQgZGVsIG51b3ZvIGlucHV0IHF1ZXN0YSBmdW56aW9uZSBzaSBvY2N1cGEgZGkgZmluYWxpenphcmUgdHV0dGkgaSBwYXJhbWV0cmkgZGkgZnVuemlvbmFtZW50byBkZWxsJ2VzLXRhYmxlIFxyXG4gICAgICogaW4gYmFzZSBhIElucHV0IC0gTW9kZWxsbywgZSBxdWFsc2lhc2kgYWx0cmEgY29zYSBwb3NzYSBzZXJ2aXJlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZmluYWxpemVDb250ZXh0KCkge1xyXG4gICAgICAgIGxldCB2aWV3Q2FzdGVkID0gdGhpcy5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+O1xyXG5cclxuICAgICAgICBsZXQgaGFzUm93R3JvdXBzID0gdmlld0Nhc3RlZCAmJiAodmlld0Nhc3RlZC5ncm91cGluZ3MgJiYgdmlld0Nhc3RlZC5ncm91cGluZ3MuZmlsdGVyKHQgPT4gIXQuYWdncmVnYXRpb24pLmxlbmd0aCA+IDApIHx8ICh0aGlzLmFycmF5TW9kZSAmJiB0aGlzLkVzVGhzRGlyZWN0aXZlLnNvbWUodCA9PiB0LnRoR3JvdXApKTtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gZGVpIGdydXBwaSBpbiBtb2RhbGl0w6AgYXJyYXkgZGV2byBzaXN0ZW1hcmUgdW4gcG8nIGRpIHZhcmlhYmlsaSBjaGUgZGl2ZW50YW5vIGluc2Vuc2F0ZVxyXG4gICAgICAgIGlmICh0aGlzLmFycmF5TW9kZSAmJiBoYXNSb3dHcm91cHMpXHJcbiAgICAgICAgICAgIHRoaXMuVXNlQXJyYXlNb2RlUGFnaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIC8vIFJpZW1waW1lbnRvIGRlbGxhIFRNUEJvdW5kU291cmNlIGNvbiBnbGkgb2dnZXR0aSBjaGUgdmVycmFubm8gcG9pIG1vc3RyYXRpIGFkIGludGVyZmFjY2lhXHJcbiAgICAgICAgdGhpcy5UTVBCb3VuZFNvdXJjZSA9IHRoaXMuaXRlbXNfSC5nZXRJdGVtc0J5TW9kZShmYWxzZSwgIXRoaXMuaW50ZXJuYWxXcml0ZUNhbGwpO1xyXG5cclxuICAgICAgICAvLyBTZSBobyB1bmEgZ2VyYXJjaGlhLCBhc3NlZ25vIGkgbGl2ZWxsaSBnZXJhcmNoaWNpIGFsbGEgVE1QQm91bmRTb3VyY2VcclxuICAgICAgICBpZiAodGhpcy5IaWVyYXJjaHkgJiYgIWhhc1Jvd0dyb3VwcylcclxuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaHlNb2RlX0guYXNzaWduSGllcmFyY2h5TGV2ZWxzKHRoaXMuVE1QQm91bmRTb3VyY2UpO1xyXG5cclxuICAgICAgICAvLyBMJ2hhc2hpbmcgZGVnbGkgb2dnZXR0aSBsbyBmYWNjaW8gYSBwcmVzY2luZGVyZVxyXG4gICAgICAgIHRoaXMudXRpbGl0aWVzX0guY2FsY3VsYXRlSGFzaCh0aGlzLlRNUEJvdW5kU291cmNlKTtcclxuXHJcbiAgICAgICAgLy8gQXNzZWdubyBhIHVuYSB2YXJpYWJpbGUgbWlhIGwnZXZlbnR1YWxlIG92ZXJyaWRlIHBlciBsYSBjbGFzc2UgZGVsbGEgcmlnYVxyXG4gICAgICAgIC8vIFNlIHBvaSBzb25vIGluIG1vZGFsaXTDoCBnZXJhcmNoaWNhIGluaWV0dG8gYW5jaGUgbGEgY2xhc3NlIHBlciBsYSBjb25maWd1cmF6aW9uZSBkZWwgbGl2ZWxsbyBkZWxsYSByaWdhXHJcbiAgICAgICAgaWYgKCh0aGlzLlRNUEJvdW5kU291cmNlICYmIHRoaXMuUm93Q2xhc3NBc3NpZ25lcikgfHwgdGhpcy5IaWVyYXJjaHkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLlRNUEJvdW5kU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHRoaXMuVE1QQm91bmRTb3VyY2VbaV07XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9yb3dDbGFzcyA9IHRoaXMuUm93Q2xhc3NBc3NpZ25lciA/IHRoaXMuUm93Q2xhc3NBc3NpZ25lcihpdGVtKSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9yb3dDbGFzcyArPSB0aGlzLkhpZXJhcmNoeSA/IFwiIGVzdC1yb3ctbHZsLVwiICsgaXRlbS5fbGV2ZWwgOiBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBHZW5lcmEgbGUgaW5mb3JtemlvbmkgZGkgcGFnaW5hemlvbmUgcGVyIGxhIHZpc3RhIGdsb2JhbGUgZGVsbCdlcy10YWJsZSAqL1xyXG4gICAgcHJpdmF0ZSBzZXR1cFBhZ2luZ0luZm9ybWF0aW9ucygpIHtcclxuXHJcbiAgICAgICAgLy8gRGVmYXVsdCBjaGUgdmFsZ29ubyBkaSBiYXNlLCBwb2kgZXZlbnR1YWxtZW50ZSBtb2RkYXRpIGRhbGxlIGZ1bnppb25pIHNvdHRvXHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50ID0gIXRoaXMuSGlkZVBhZ2luZ0NvdW50O1xyXG4gICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zID0gIXRoaXMuSGlkZVBhZ2luZ0J1dHRvbnM7XHJcbiAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd1BhZ2luZyA9ICF0aGlzLkhpZGVQYWdpbmdcclxuICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5Vc2VzVmlldyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFycmF5TW9kZSAmJiB0aGlzLlVzZUFycmF5TW9kZVBhZ2luZyAmJiAhdGhpcy5TZWFyY2hWaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlBhZ2VyQ291bnQgPSAoPGFueVtdPnRoaXMuVmlldykubGVuZ3RoIHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgJiYgdGhpcy5WaWV3Lmxlbmd0aCA+IDEwO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5WaWV3ID0gdGhpcy5WaWV3O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5Vc2VzVmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nT3B0aW9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmFycmF5TW9kZSAmJiAoIXRoaXMuVXNlQXJyYXlNb2RlUGFnaW5nIHx8IHRoaXMuU2VhcmNoVmlldykpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuU2VhcmNoVmlldykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuVmlldyA9IHRoaXMuU2VhcmNoVmlld1xyXG4gICAgICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9IHRoaXMuU2VhcmNoVmlldy5vYmplY3Rjb3VudCB8fCAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlBhZ2VyQ291bnQgPSAoPGFueVtdPnRoaXMuVmlldykubGVuZ3RoIHx8IDBcclxuXHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgJiYgKHRoaXMuVmlldy5sZW5ndGggPiAxMCB8fCAodGhpcy5TZWFyY2hWaWV3Py5vYmplY3Rjb3VudCB8fCAwKSA+IDEwKTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50ID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0NvdW50IHx8ICh0aGlzLlZpZXcgJiYgdGhpcy5WaWV3Lmxlbmd0aCkgfHwgKHRoaXMuU2VhcmNoVmlldyAmJiB0aGlzLlNlYXJjaFZpZXcub2JqZWN0Y291bnQgJiYgdGhpcy5TZWFyY2hWaWV3Lm9iamVjdGNvdW50ICE9IC0xKTtcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuU2hvd1BhZ2luZyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dQYWdpbmcgJiYgKHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zIHx8IHRoaXMuUGFnZXJPcHRpb25zLlNob3dDb3VudCk7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlNob3dQYWdpbmdPcHRpb25zID0gdGhpcy5QYWdlck9wdGlvbnMuU2hvd0J1dHRvbnM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMudmlld01vZGUpIHtcclxuICAgICAgICAgICAgbGV0IHRtcFZpZXcgPSB0aGlzLk1haW5Hcm91cFZpZXcgfHwgdGhpcy5WaWV3O1xyXG4gICAgICAgICAgICBsZXQgY291bnQgPSB0bXBWaWV3Py5ncm91cGNvdW50IHx8IHRtcFZpZXc/Lm9iamVjdGNvdW50O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TZWFyY2hlcyA9IHRtcFZpZXc/Lmdyb3VwY291bnQgIT0gbnVsbCAmJiB0bXBWaWV3Py5ncm91cGNvdW50ICE9IHVuZGVmaW5lZCA/ICdncm91cHMnIDogJ2l0ZW1zJztcclxuICAgICAgICAgICAgdGhpcy5QYWdlck9wdGlvbnMuUGFnZXJDb3VudCA9IGNvdW50IHx8IDA7XHJcbiAgICAgICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlZpZXcgPSB0bXBWaWV3O1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgPSB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQgfHwgKHRtcFZpZXcgJiYgY291bnQgJiYgY291bnQgIT0gLTEpO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93QnV0dG9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zICYmICh0bXBWaWV3LnBhZ2luZ2F2YWlsYWJsZSB8fCB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93Q291bnQpO1xyXG4gICAgICAgICAgICB0aGlzLlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nT3B0aW9ucyA9IHRoaXMuUGFnZXJPcHRpb25zLlNob3dCdXR0b25zO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBsYW5jaWF0byBkb3BvIGNoZSBsYSBzb3JnZW50ZSBkYXRpIMOoIHN0YXRhIGNvcnJldHRhbWVudGUgYmluZGF0YSwgc2kgb2NjdXBhIGRpIHJpY2FsY29sYXJlIHR1dHRvIGNpw7IgY2hlIHNlcnZlXHJcbiAgICAgKiBhbGwnZXMtdGFibGUgcGVyIHJlbmRlcml6emFyZSBpIHZhbG9yaSBkYSBtb3N0cmFyZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHBvc3RCb3VuZFNvdXJjZUNhbGN1bGF0aW9uKCkge1xyXG4gICAgICAgIC8vIFJlc2V0dG8gdHV0dG8gdHJhbm5lIFJvd1REcyBlIFJvd1RIcyBwZXIgZXZpdGFyZSBmbGlja2VyaW5nLiBSb3dURHMgZSBSb3dUSHMgc2FyYW5ubyBtb2RpZmljYXRlIGFsbCdpbnRlcm5vIGRlbCBwcm9zc2ltbyBjaWNsbyBkaSBDRFxyXG4gICAgICAgIHRoaXMuUm93Q29udGV4dHMgPSBbXTtcclxuICAgICAgICB0aGlzLk9yZGVyRGlyZWN0aXZlcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubGFzdFNlbGVjdGVkSXRlbUlEID0gbnVsbDtcclxuXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFBvc3RCb3VuZFNvdXJjZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBQZXIgcG90ZXIgZGlzdGluZ3VlcmUgbGUgY2hpYW1hdGUgYSBxdWVzdG8gbWV0b2RvOiBEb3BvIGlsIHNldFRpbWVvdXQgc2UgdXNvIGdsaSBFc1RkL0VzVGggdmVjY2hpLCBzZW56YSBpbCBzZXRUaW1lb3V0IHNlIHVzbyBsZSBudW92ZSBkaXJldHRpdmUgKi9cclxuICAgIHByaXZhdGUgYXN5bmMgaW50ZXJuYWxQb3N0Qm91bmRTb3VyY2UoKSB7XHJcbiAgICAgICAgbGV0IFZpZXcgPSB0aGlzLlZpZXc7XHJcblxyXG4gICAgICAgIGxldCB0aHNUZHNQcm92aWRlcnMgPSBbLi4uKHRoaXMuRXNUaFRkUHJvdmlkZXIgPyBbdGhpcy5Fc1RoVGRQcm92aWRlcl0gOiBbXSksIC4uLnRoaXMuVGhUZFByb3ZpZGVyXTtcclxuICAgICAgICBpZiAodGhzVGRzUHJvdmlkZXJzPy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICBhd2FpdCBmb3JrSm9pbih0aHNUZHNQcm92aWRlcnMubWFwKHQgPT4gdC5Mb2FkZWRTaWduYWwpKS50b1Byb21pc2UoKTtcclxuXHJcbiAgICAgICAgLy8gU2Ugbm9uIGhvIGNvbG9ubmUgZGluYW1pY2hlIG1hIHNvbm8gaW4gbW9kYWxpdMOgIGRpbmFtaWNhIChsbyBjYXBpc2NvIHBlcmNow6kgYyfDqCB1bmEgdmlldyBwaWVuYSBkaSBnZW5lcmljaXRlbSkgbWV0dG8gaWwgZGVmYXVsdCBkZWxsZSBjb2xvbm5lXHJcbiAgICAgICAgdGhpcy5keW5hbWljTW9kZV9ILmV2ZW50dWFsbHlSZXZpZXdEeW5hbWljQ29sdW1ucygpO1xyXG5cclxuICAgICAgICAvLyBHZXN0aXNjZSBsYSByaWNoaWVzdGEgcGVyIGdydXBwaSBvIHBlciBzaW5nb2xpIG9nZ2V0dGlcclxuICAgICAgICB0aGlzLmJpbmREaXNwbGF5VG9Mb2FkZWRJdGVtc09yR3JvdXBzKFZpZXcpO1xyXG5cclxuICAgICAgICAvLyBRdWVzdG8gZGV2J2Vzc2VyZSBwZXIgZm9yemEgbGFuY2lhdG8gZG9wbyAqKmJpbmREaXNwbGF5VG9Mb2FkZWRJdGVtc09yR3JvdXBzKiogZGF0byBjaGUgw6ggbMOsIGNoZSBhbGN1bmUgY29zZSB2ZW5nb25vIHZhbG9yaXp6YXRlXHJcbiAgICAgICAgdGhpcy5zZXR1cFBhZ2luZ0luZm9ybWF0aW9ucygpO1xyXG5cclxuICAgICAgICAvLyBNb2x0ZSBjb3NlIHNvbm8gb3Z2aWFtZW50ZSBkaXNwb25pYmlsaSBzb2xvIGluIG1vZGFsaXTDoCBWaWV3XHJcbiAgICAgICAgaWYgKCh0aGlzLnZpZXdNb2RlIHx8IHRoaXMuYXJyYXlNb2RlKSAmJiB0aGlzLlVzZUN1c3RvbUNlbGxzKSB7XHJcbiAgICAgICAgICAgIGxldCB2aWV3ID0gdGhpcy52aWV3TW9kZSA/IFZpZXcgYXMgQXBwU2VhcmNoPGFueT4gOiBudWxsO1xyXG4gICAgICAgICAgICBsZXQgaXRlbXNBbmRHcm91cHMgPSB0aGlzLnZpZXdNb2RlID8gWy4uLigodGhpcy5JdGVtU291cmNlUHJvcGVydHkgPyB2aWV3W3RoaXMuSXRlbVNvdXJjZVByb3BlcnR5XSA6IHZpZXcuaXRlbXMpIHx8IFtdKSwgLi4uKHZpZXcuZ3JvdXBzIHx8IFtdKV0gOiBWaWV3IGFzIGFueVtdO1xyXG4gICAgICAgICAgICBsZXQgc2kgPSB0aGlzLnZpZXdNb2RlID8gdmlldy5zZWxlY3Rpb24gOiB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuXHJcbiAgICAgICAgICAgIC8vIE4uQjogUmlzcGV0dGFyZSBsJ29yZGluZSBkaSBxdWVzdGUgMyBtYWNyb2NhdGVnb3JpZSDDqCBWSVRBTEVcclxuICAgICAgICAgICAgLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgICAgICAgU2lzdGVtYXppb25pIGRpIFRILCBURCwgZSB2aXNpYmlsaXTDoCB2YXJpZSAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIC8vIFNlIGhvIGRlZmluaXppb25pIGRpbmFtaWNoZSwgcHJpbWEgZGkgcXVhbHNpYXNpIGFsdHJhIGNvc2EgZGV2byB0cmFzZm9ybWFybGUgaW4gdGgvdGQgaW4gbW9kbyBjaGUgcG9pIGlsIGNvZGljZSBxdWkgc290dG8gZmFjY2lhIGxlIHN1ZSBtYWdpZVxyXG4gICAgICAgICAgICBpZiAodGhpcy5EeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb24/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcIkdlbmVyYXRpbmcgdGhzIGFuZCB0ZHMgZnJvbSBEeW5hbWljIGRlZmluaXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmV0ID0gdGhpcy5keW5hbWljTW9kZV9ILmVtaXRUaHNBbmRUZHNCYXNlZE9uRHluYW1pY0RlZmluaXRpb24oKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRXNUaHMgPSByZXQudGhzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Fc1RkcyA9IHJldC50ZHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEdlc3Rpb25lIGRlbGxlIHZpZXcgaW4gbW9kYWxpdMOgIHJlcG9ydCwgaSB0aCBlIGkgdGQgdmVuZ29ubyByaWdlbmVyYXRpIGRhbGxlIGNvbmZpZ3VyYXppb25pIGRlbGxhIHZpZXdcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmFycmF5TW9kZSAmJiB2aWV3LnJlcG9ydF9jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coXCJHZW5lcmF0aW5nIHRocyBhbmQgdGRzIGZyb20gcmVwb3J0IHJlc3VsdHNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgcmV0ID0gdGhpcy5yZXBvcnRNb2RlX0guZ2VuZXJhdGVUaHNBbmRUZHNGcm9tVmlldyh2aWV3KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuRXNUaHMgPSByZXQudGhzO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5Fc1RkcyA9IHJldC50ZHM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEVzcGFuZG8gaSB0aCBlIGkgdGQgbXVsdGlwbGkgZHVwbGljYW5kb2xpXHJcbiAgICAgICAgICAgIGxldCByZXQgPSB0aGlzLmNvbHVtbk1ldGFkYXRhX0guZXhwYW5kTXVsdGlUaHNBbmRUZHModGhpcy5Fc1RocywgdGhpcy5Fc1RkcywgaXRlbXNBbmRHcm91cHMpO1xyXG4gICAgICAgICAgICB0aGlzLkVzVGhzID0gcmV0LmV4cFRocztcclxuICAgICAgICAgICAgdGhpcy5Fc1RkcyA9IHJldC5leHBUZHM7XHJcblxyXG4gICAgICAgICAgICAvLyBHZW5lcm8gbGEgY2FjaGUgZGVpIHRoIGRhIHVzYXJlIGRhIHF1aSBpbiBwb2ksIGRvcG8gYXZlcmdsaSBsYXNjaWF0byBmYXJlIGxlIHN1ZSBjb3NlIGluIGNhc28gY2kgc2lhbm8gZGVpIG11bHRpIG8gZGVpIHJlcG9ydFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuRXNUaHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoaXMuRXNUaHNbaV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRoc0NhY2hlW3RoLnRoXSA9IHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGhzQ2FjaGVTZXQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgLy8gUHJlcGFzc2FnZ2lvIHBlciB0aXJhcmUgZnVvcmkgdHV0dGUgbGUgaW5mbyB1dGlsaSBzdWdsaSBoZWFkZXJzIGluIG1vZG8gZGEgbm9uIHJpY2Fjb2xhcnNlbGkgc2VtcHJlIGRvcG9cclxuICAgICAgICAgICAgbGV0IGhJID0gdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmV2YWx1YXRlSGVhZGVyc0dyb3VwaW5nSW5mb3ModGhpcy5Fc1Rocyk7XHJcblxyXG4gICAgICAgICAgICAvLyBWYWx1dGEgbG8gc3RhdG8gaW5pemlhbGUgZGkgc2VsZXppb25lIGEgcmFuZ2VcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5ldmFsdWF0ZVNpbmdsZUNlbGxTZWxlY3Rpb24oaXRlbXNBbmRHcm91cHMsIGhJLmxlYWZzLCB0aGlzLkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbik7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiBtb2RhbGl0w6AgYXJyYXkgbm9uIGhvIHVuIGJhY2tlbmQuLi5cclxuICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBpbmdfSC5hcnJheU1vZGVSZXZpZXdHcm91cGluZ3MoaEkubGVhZnMpOyAgLy8gLi4uIGkgcmFnZ3J1cHBhbWVudGkgbGkgZGV2byBmYXJlIGxhdG8gY2xpZW50XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmV2aWV3Q29sdW1uc0xpc3QoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWdnaW9ybmEgbGEgbGlzdGEgZGVsbGUgY29sb25uZSBkYSBtb3N0cmFyZSBuZWxsYSBkaWFsb2cgcGVyIG9yZGluYW1lbnRvIGVjY1xyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guYWxpZ25Db2x1bW5zSWZMb2FkZWRWaWV3KHZpZXcpOyAgICAgICAgICAgICAgICAgICAgICAgLy8gU2Ugc3RvIGNhcmljYW5kbyB1bmEgVmlldyBkYSBob3Rwb3RhdG8gKHF1aW5kaSBjb24gc2F2ZWRzdGF0ZSA9IHRydWUpIHJpYWxsaW5lbyBsYSB2aXNpYmlsaXTDoCBkZWxsZSBjb2xvbm5lIGUgaWwgbG9ybyBvcmRpbmUuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5tb3ZlRml4ZWRDb2x1bW5zQXRUaGVCZWdpbm5pbmcoaEkubGVhZnMsIHRoaXMuRXNUZHMpOyAvLyBTcG9zdG8gdHV0dGUgbGUgY29zZSBmaXhlZCBhbGwnaW5pemlvIGluIG1vZG8gY2hlIGxhIGNyZWF6aW9uZSBkaSB0aCBlIHRkIHNpYSBwacO5IHNuZWxsYSAoVXRpbGl6emEgbGUgQ29sdW1uc0xpc3QsIHF1aW5kaSBkZXYnZXNzZXJlIHJpY2hpYW1hdGEgUElSTUEgZGkgcmV2aWV3Q29sdW1uc0xpc3QpXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5hbGlnbkhlYWRlcnNPcmRlcmluZyhoSS5sZWFmcywgdmlldyk7ICAgICAgICAgICAgICAgICAvLyBBbGxpbmVvIGdsaSBvcmRpbmFtZW50aSBhZ2xpIGhlYWRlclxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0gucmVmcmVzaENvbHVtbnNWaXNpYmlsaXR5KGhJLmxlYWZzLCB0aGlzLkVzVGRzLCB2aWV3KTsgLy8gTGF2b3JvIHN1aSBUSCBlZCBldmVudHVhbG1lbnRlIG1vZGlmaWNvIGxhIHZpc2liaWxpdMOgIGFuY2hlIGRlaSBURC5cclxuICAgICAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmV2YWx1YXRlUGlubmVkQ29sdW1uc1dpZHRoKCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlIHNvbm8gcHJlc2VudGkgY29sb25uZSBwaW5uYXRlIHZhbHV0YSBsYSBkaW1lbnNpb25lIGRlbCBjb250ZW5pdG9yZVxyXG4gICAgICAgICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhX0guZ2VuZXJhdGVEZWZhdWx0T3JkZXIoaEkubGVhZnMsIHZpZXcpOyAgICAgICAgICAgICAgICAgLy8gR2VuZXJvIGxlIGRpcmV0dGl2ZSBkaSBvcmRpbmFtZW50bywgY2hlIHNpYW5vIGRlZmF1bHQgbyBkZXJpdmFudGkgZGFsbGEgQXBwU2VhcmNoXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5ldmFsdWF0ZUhlYWRlckdyb3VwcyhoSSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWYWx1dG8gaSByYWdncnVwcGFtZW50aSBkZWdsaSBoZWFkZXIgc2UgcHJlc2VudGlcclxuXHJcbiAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgIEdlbmVyYXppb25lIGJpbmRpbmcgcGVyIHJpZ2hlIGUgY29sb25uZSAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXZhbHVhdGVSb3dUaHMoaEkubGVhZnMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmFjY29sZ28gaSBUSFxyXG4gICAgICAgICAgICB0aGlzLmV2YWx1YXRlUm93VGRzKGhJLmxlYWZzLCB0aGlzLkVzVGRzKTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJhY2NvbGdvIGkgVEQgaW4gY29udGVzdGkgc2VwYXJhdGksIHVuIGNvbnRlc3RvIHBlciBvZ25pIGl0ZW0gbyBncnVwcG9cclxuXHJcbiAgICAgICAgICAgIC8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogICAgICAgIFVsdGltaSBhZ2dpdXN0bWFlbnRpIGRlaSBiaW5kaW5nICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1uTWV0YWRhdGFfSC5hcHBseU9yZGVyaW5nKHZpZXcsIHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFwcGxpY28gbCdvcmRpbmFtZW50byBzdWxsZSBjb2xvbm5lIChub24gQVNDIERFU0MsIG1hIFwicHJpbWEgcXVlc3RhIG8gcXVlbGxhIGNvbG9ubmFcIilcclxuICAgICAgICAgICAgdGhpcy5Nb3ZlVGVtcG9yYXJ5VmFyaWFibGVzVG9SZWFsT25lcygpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29sbGVnbyBUSCBlIFREIGFnZ2l1c3RhdGkgZmlubyBhZCBvcmEgYWxsZSB2YXJpYWJpbGkgZGkgQmluZGluZyBIVE1MXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guZXZhbHVhdGVTZWxlY3Rpb24oaXRlbXNBbmRHcm91cHMsIHNpKTsgICAgICAgICAgICAgICAgIC8vIFJpYWxsaW5lbyBsZSBpbmZvIGRpIHNlbGV6aW9uZSBkZWdsaSBlbGVtZW50aSBkZWxsYSBWaWV3XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5SZXNlYXJjaE5lZWRlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuUmVzZWFyY2hOZWVkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICgodGhpcy52aWV3TW9kZSB8fCB0aGlzLmFycmF5TW9kZSkgJiYgIXRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHtcclxuICAgICAgICAgICAgLy8gUmlhbGxpbmVvIGxlIGluZm8gZGkgc2VsZXppb25lIGRlZ2xpIGVsZW1lbnRpIGRlbGxhIFZpZXdcclxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy52aWV3TW9kZSA/ICh0aGlzLkl0ZW1Tb3VyY2VQcm9wZXJ0eSA/IChWaWV3IGFzIEFwcFNlYXJjaDxhbnk+KVt0aGlzLkl0ZW1Tb3VyY2VQcm9wZXJ0eV0gOiAoVmlldyBhcyBBcHBTZWFyY2g8YW55PikuaXRlbXMpIDogVmlldyBhcyBhbnlbXTtcclxuICAgICAgICAgICAgbGV0IHNpID0gdGhpcy52aWV3TW9kZSA/IChWaWV3IGFzIEFwcFNlYXJjaDxhbnk+KS5zZWxlY3Rpb24gOiB0aGlzLmFycmF5bW9kZVNlbGVjdGlvbjtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25fSC5ldmFsdWF0ZVNlbGVjdGlvbihpdGVtcywgc2kpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gUGVyIGVzc2VyZSBzaWN1cm8gY2hlIGRvcG8gdW4gYmluZCBkaSBvZ2dldHRpIGxhIGVzLXRhYmxlIGFnZ2lvcm5pIGxhIGdyYWZpY2FcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB0aGlzLkZpcnN0QmluZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgaWwgYmluZGluZyBkZWdsaSBvZ2dldHRpIHBlcnZlbnV0aSBkYSBxdWVzdGEgY2hpYW1hdGEgY29uIGdsaSBvZ2dldHRpIGVmZmV0dGl2YW1lbnRlIGRhIGdyYWZpY2FyZVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gdmlldyBWaWV3IGRhIGN1aSBzb25vIGFycml2YXRpIGdsaSBvZ2dldHRpLiBQdcOyIGVzc2VyZSBvIHVuIGFycmF5IHNlIHNvbm8gaW4gKiphcnJheU1vZGUqKiBvIHVuYSBBcHBTZWFyY2g8VD4gc2Ugc29ubyBpbiAqKnZpZXdNb2RlKipcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBiaW5kRGlzcGxheVRvTG9hZGVkSXRlbXNPckdyb3Vwcyh2aWV3OiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuVE1QQm91bmRTb3VyY2UgfHwgdGhpcy5UTVBCb3VuZFNvdXJjZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICB0aGlzLkJhc2VJdGVtc0NvdW50ID0gMDtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hcnJheU1vZGUgfHwgIXRoaXMuVXNlQ3VzdG9tQ2VsbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuVE1QQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHRoaXMuQmFzZUl0ZW1zQ291bnQgPSB2aWV3Py5vYmplY3Rjb3VudCB8fCB2aWV3Py5sZW5ndGggfHwgMDtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGdyb3VwaW5nS2V5cyA9IHZpZXc/Lmdyb3VwaW5ncz8uZmlsdGVyKHQgPT4gIXQuYWdncmVnYXRpb24pPy5sZW5ndGggfHwgMDtcclxuICAgICAgICBpZiAoZ3JvdXBpbmdLZXlzID09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5ib3VuZFNvdXJjZSA9IHRoaXMuVE1QQm91bmRTb3VyY2U7XHJcbiAgICAgICAgICAgIHRoaXMuQmFzZUl0ZW1zQ291bnQgPSB2aWV3Py5vYmplY3Rjb3VudCB8fCAwO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJvd0dyb3VwaW5nX0guaGFuZGxlTmV3RGF0YU9uUm93R3JvdXBpbmcodmlldywgZ3JvdXBpbmdLZXlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIHJpY2hpYW1hdG8gc29sbyBxdWFuZG8gKipUTVBSb3dURHMqKiBlICoqVE1QUm93VEhzKiogc29ubyBjb21wbGV0YW1lbnRlIGdlbmVyYXRpIGVkIGFnZ2l1c3RhdGkuIFNlcnZlIHBlciBjb2xsZWdhcmxpIGFsbGUgdmFyaWFiaWxpIHVzYXRlIGxhdG8gYmluZGluZyBIVE1MICovXHJcbiAgICBwcml2YXRlIE1vdmVUZW1wb3JhcnlWYXJpYWJsZXNUb1JlYWxPbmVzKCkge1xyXG5cclxuICAgICAgICB0aGlzLlJvd1REcyA9IHRoaXMuVE1QUm93VERzO1xyXG4gICAgICAgIHRoaXMuUm93VEhzID0gdGhpcy5UTVBSb3dUSHM7XHJcbiAgICAgICAgdGhpcy5Sb3dUaEdyb3VwcyA9IHRoaXMuVE1QUm93VGhHcm91cHMgPyB0aGlzLlRNUFJvd1RoR3JvdXBzLnJldmVyc2UoKSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5FbXB0eVJvd1RkcyA9IHRoaXMuaXNFbXB0eSh0aGlzLlJvd1REcyk7XHJcblxyXG4gICAgICAgIHRoaXMuQ29sdW1ucy5WaXNpYmlsZSA9IHRoaXMuUm93VEhzLmZpbHRlcih0ID0+IHQuVmlzaWJsZSkubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuQ29sdW1ucy5WaXNpYmxlVW5waW5uZWQgPSB0aGlzLlJvd1RIcy5maWx0ZXIodCA9PiB0LlZpc2libGUgJiYgIXQuUGlubmVkKS5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5Db2x1bW5zLkdsb2JhbCA9IHRoaXMuQ29sdW1ucy5WaXNpYmxlVW5waW5uZWQgKyAodGhpcy5IYXNQaW5uZWRDb2x1bW5zID8gMSA6IDApICsgKHRoaXMuU2VsZWN0aW9uID8gMSA6IDApICsgKHRoaXMuUmVtb3ZhbCA/IDEgOiAwKSArICh0aGlzLkV4cG9ydCB8fCB0aGlzLkhpZGRlbkNvbHVtbnMgfHwgdGhpcy5Db2x1bW5zT3JkZXJpbmcgfHwgdGhpcy5Db3JuZXJNZW51T3B0aW9ucyA/IDEgOiAwKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIE1ldG9kbyBwZXIgY2FwaXJlIHNlIHVuIG9nZ2V0dG8gw6ggY29tcGxldGFtZW50ZSB2dW90byBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9IG9iaiBPZ2dldHRvIGRhIGNvbnRyb2xsYXJlXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSAqKnRydWUqKiBzZSBsJ29nZ2V0dG8gw6ggdnVvdG8sICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIGlzRW1wdHkob2JqOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICBmb3IgKHZhciBfIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFBlcm1ldHRlIGRpIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZSBpbiBtYW5pZXJhIGFyYml0cmFyaWEgZGVnbGkgb2dnZXR0aVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueVtdfSBpdGVtcyBPZ2dldHRpIGRhIHNlbGV6aW9uYXJlIG8gZGVzZWxlemlvbmFyZVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBzZWxlY3QgKip0cnVlKiogcGVyIHNlbGV6aW9uYXJsaSwgKipmYWxzZSoqIHBlciBub24gdG9jY2FybGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFNlbGVjdGlvblN0YXR1cyhpdGVtczogYW55W10sIGFsbDogYm9vbGVhbiwgc2VsZWN0OiBib29sZWFuLCBlbWl0OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAoYWxsKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5TZWxlY3RBbGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbXBvc3NpYmlsZSBpbXBvc3RhcmUgbGEgc2VsZXppb25lIGNvbiBsJ2FsbCBzZWxlY3Rpb24gcXVhbmRvIGwnSW5wdXQgU2VsZWN0QWxsIMOoIGZhbHNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgc2kgPSAodGhpcy5WaWV3IGFzIEFwcFNlYXJjaDxhbnk+KT8uc2VsZWN0aW9uIHx8IHRoaXMuYXJyYXltb2RlU2VsZWN0aW9uO1xyXG4gICAgICAgICAgICAvL3NlIGRlc2VsZXppb25vIGNvbiBhdHR1YWxlIHNlbGV6aW9uZSBhZCBhbGwgbyBzZSBzZWxlemlvbm8gY29uIGF0dHVhbGUgc2VsZXppb25lIG1hbnVhbGUgZGV2byByaWNoaWFtYXJlIGxhICoqc2VsZWN0QWxsT3JSZXNldFNlbGVjdGlvbioqXHJcbiAgICAgICAgICAgIGlmICgoc2kuYWxsICYmICFzZWxlY3QpIHx8ICghc2kuYWxsICYmIHNlbGVjdCkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILnNlbGVjdEFsbE9yUmVzZXRTZWxlY3Rpb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmhhbmRsZUl0ZW1zU2VsZWN0aW9uKGl0ZW1zLCBzZWxlY3QpO1xyXG5cclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICAgICAgaWYgKGVtaXQpXHJcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQodGhpcy5hcnJheW1vZGVTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWZmZXR0dWEgdW4gaGFyZCByZXNldCBkZWxsYSBzZWxlemlvbmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlc2V0U2VsZWN0aW9uKGVtaXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25DYWNoZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudmlld01vZGUgJiYgdGhpcy5WaWV3KSB7XHJcbiAgICAgICAgICAgIHRoaXMuVmlldy5zZWxlY3Rpb24gPSBuZXcgSXRlbXNTZWxlY3Rpb24oW10pO1xyXG4gICAgICAgICAgICBpZiAoZW1pdClcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQodGhpcy5WaWV3LnNlbGVjdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYXJyYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXltb2RlU2VsZWN0aW9uID0gbmV3IEl0ZW1zU2VsZWN0aW9uKFtdKTtcclxuICAgICAgICAgICAgaWYgKGVtaXQpXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KHRoaXMuYXJyYXltb2RlU2VsZWN0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRvZG8gY2hlIGdlc3Rpc2NlIGlsIGNhbWJpbyBkaSBPcmRpbmFtZW50byBkaSB1bmEgY29sb25uYVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBJRCBkZWxsYSBjb2xvbm5hIGlsIGN1aSBvcmlkbmFtZW50byDDqCBjYW1iaWF0b1xyXG4gICAgICogQHBhcmFtIHsnREVTQycgfCAnQVNDJ30gb3JkZXIgTnVvdm8gb3JkaW5lIHNlbGV6aW9uYXRvIHBlciBsYSBjb2xvbm5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aE9yZGVyQ2hhbmdlZChpZDogc3RyaW5nLCBvcmRlcj86ICdERVNDJyB8ICdBU0MnKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnZpZXdNb2RlICYmICF0aGlzLmFycmF5TW9kZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ09yZGVyIGNoYW5nZWQgb24gYSB0YWJsZSBub3QgaW4gdmlld01vZGUgb3IgQXJyYXkgbW9kZS4gT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLk9yZGVyQnlDb2x1bW4pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5jb2x1bW5NZXRhZGF0YV9ILmhhbmRsZVRIT3JkZXJDaGFuZ2UoaWQsIG9yZGVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBkYSBjaGlhbWFyZSBvZ25pIHZvbHRhIGNoZSBzaSB2dW9sZSBkYXJlIGV2aWRlbnphIGFsbCdlc3Rlcm5vIGRlbCBiaXNvZ25vIGRpIHJpZWZmZXR0dWFyZSBsYSByaWNlcmNhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gcmVzZXRzUGFnZSBJbmRpY2EgYWwgbGlzdGVuZXIgY2hlIGRldmUgcmVzZXR0YXJlIGlsIG51bWVybyBkaSBwYWdpbmFcclxuICAgICAqIEBwYXJhbSB7QXBwU2VhcmNoPGFueT59IHZpZXdPdmVycmlkZSBPdmVycmlkZSBkZWxsYSB2aWV3IGRhIGVtZXR0ZXJlIHBlciBxdWVzdGEgcmljZXJjYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZW1pdFNlYXJjaFJlcXVlc3QocmVzZXRzUGFnZTogYm9vbGVhbiwgdmlld092ZXJyaWRlPzogQXBwU2VhcmNoPGFueT4pIHtcclxuICAgICAgICBpZiAodGhpcy52aWV3TW9kZSAmJiAhdmlld092ZXJyaWRlKSB7XHJcbiAgICAgICAgICAgICh0aGlzLlZpZXcgYXMgQXBwU2VhcmNoPGFueT4pLmludGVybmFsc2VhcmNocmVxdWVzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZpZXdPdmVycmlkZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzZXRzUGFnZSlcclxuICAgICAgICAgICAgICAgIHZpZXdPdmVycmlkZS5wYWdlID0gMTtcclxuICAgICAgICAgICAgdmlld092ZXJyaWRlLmludGVybmFsc2VhcmNocmVxdWVzdCA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVzZWFyY2hJblByb2dyZXNzID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuVmlldyAmJiAhdGhpcy5WaWV3LnNlbGZzZWFyY2ggJiYgdGhpcy5Fc1RhYmxlSGFuZGxlZFNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZnNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5vblNlYXJjaFJlcXVlc3QuZW1pdChmYWxzZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoUmVxdWVzdC5lbWl0KHZpZXdPdmVycmlkZSA/IHZpZXdPdmVycmlkZSA6IHJlc2V0c1BhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGFydGVuZG8gZGFnbGkgKipFc1RkcyoqIGJpbmRhdGkgZ2VuZXJhLCBhbGwnaW50ZXJubyBkZWwgZGl6aW9uYXJpbyAqKlRNUFJvd1REcyoqIHR1dHRpIGkgY29udGVzdGkgZGVpIHZhcmkgb2dnZXR0aS5cclxuICAgICAqXHJcbiAgICAgKiBWZW5nb25vIGVzY2x1c2kgaSBURCBcIkludGVybmlcIiBpbiBxdWFudG8gdmVuZ29ubyBnZW5lcmF0aSBkYWdsaSBvcmlnaW5hbGkgcXVpbmRpIGluY2x1ZGVybGkgdm9ycmViYmUgZGlyZSByaWVmZmV0dHVhcmUgbGUgb3BlcmF6aW9uaSBkdWUgdm9sdGVcclxuICAgICAqXHJcbiAgICAgKiBDb3N0bzogMiBzY2FuIEVzVGhzLCAxIHNjYW4gRXNUZHNcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICogQHBhcmFtIHtFc1RkRGlyZWN0aXZlW119IHRkcyBDZWxsZSBkZWxsYSB0YWJlbGxhXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXZhbHVhdGVSb3dUZHModGhzOiBFc1RoRGlyZWN0aXZlW10sIHRkczogRXNUZERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgaWYgKHRkcy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgY29sdW1uc0NhY2hlOiB7IFtpbmRleDogc3RyaW5nXTogRXNUYWJsZUNvbHVtbiB9ID0ge307XHJcblxyXG4gICAgICAgIGZvciAobGV0IGNvbGkgPSAwOyBjb2xpIDwgdGhpcy5Db2x1bW5zTGlzdC5sZW5ndGg7IGNvbGkrKykge1xyXG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5Db2x1bW5zTGlzdFtjb2xpXTtcclxuICAgICAgICAgICAgY29sdW1uc0NhY2hlW2NvbC5pZF0gPSBjb2w7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLlRNUFJvd1REcyA9IHt9O1xyXG4gICAgICAgIC8vIFZhcmlhYmlsZSBkJ2FwcG9nZ2lvIHBlciBwZXJtZXR0ZXJtaSBkaSBpbnNlcmlyZSB0dXR0ZSBsZSBjb2xvbm5lIFwiRml4ZWRcIiBkYXZhbnRpXHJcbiAgICAgICAgbGV0IGNvbnRleHRGaXhlZHM6IHsgW2NvbnRleHQ6IHN0cmluZ106IG51bWJlciB9ID0ge307XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IHRkID0gdGRzW2ldO1xyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmJvdW5kU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaXRlbSA9IHRoaXMuYm91bmRTb3VyY2VbaV07XHJcbiAgICAgICAgICAgICAgICBsZXQgY3R4ID0gaXRlbS5faGFzaDtcclxuICAgICAgICAgICAgICAgIGxldCBrZXkgPSB0ZC50ZDtcclxuICAgICAgICAgICAgICAgIGxldCB0aCA9IHRoaXMudGhzQ2FjaGVbdGQudGRdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghIXRoKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoLl9yZWZlcmVuY2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTa2lwcGFyZSBzZW56YSB0aCAoY2FzaXN0aWNhIHRhYmVsbGEgZGluYW1pY2EpXHJcbiAgICAgICAgICAgICAgICBpZiAodGggJiYgdGgudGhJZiAmJiAodGQudGRJZiB8fCB0aC50aEdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0aENhc3RlZCA9IDxFc1RoRGlyZWN0aXZlPnRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpc0ZpeGVkID0gdGgudGhGaXhlZCB8fCB0aC50aEdyb3VwIHx8IHRoLnRoUGlubmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpdGVtVG9BZGQgPSBpdGVtLl9pdGVtID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRkRWxlbWVudD57XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWZ0Qm9yZGVyOiAoPGFueT50aENhc3RlZCkuX2xib3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmlnaHRCb3JkZXI6ICg8YW55PnRoQ2FzdGVkKS5fcmJvcmQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJRDoga2V5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUGlubmVkOiBjb2x1bW5zQ2FjaGVbdGQudGRdLnBpbm5lZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpbm5lZFdpZHRoOiB0aENhc3RlZC50aFBpbm5lZFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBIZWFkZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBBZ2dyZWdhdGlvbjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXNpYmxlOiBjb2x1bW5zQ2FjaGVbdGQudGRdLnZpc2libGUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JhcHM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M6IHRkLnRkQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJY29uQ2xhc3M6IHRkLnRkSWNvbkNsYXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29uZGl0aW9uRmllbGQ6IHRkLnRkQ29uZGl0aW9uRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25kaXRpb25WYWx1ZTogdGQudGRDb25kaXRpb25WYWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRpdGxlOiB0ZC50ZFRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGVudDogdGQudGRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVtcGxhdGU6IHRoQ2FzdGVkLnRoR3JvdXAgJiYgIXRoaXMuU2hvd0l0ZW1Hcm91cHNDb2x1bW5zID8gbnVsbCA6IHRkLlRlbXBsYXRlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGk6IHRkLl9tdWx0aSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpUHJvcDogdGQuX211bHRpID8gdGQudGQuc3BsaXQoJ18nKVswXSA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdWx0aUluZGV4OiB0ZC5fbXVsdGkgPyB0ZC50ZC5zcGxpdCgnXycpWzFdIDogbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsaWdubWVudDogKHRkLnRkQWxpZ25tZW50IHx8IHRoLnRoQWxpZ25tZW50IHx8IHRoaXMuRGVmYXVsdEFsaWdubWVudCkudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvcm1hdDogdGQudGRGb3JtYXQgfHwgdGgudGhGb3JtYXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eU5hbWU6IHRoLnRoUHJvcGVydHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVR5cGU6IHRoLnRoVHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5U291cmNlOiB0aC50aFNvdXJjZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3BBY2Nlc3NvcjogdGQudGRQcm9wZXJ0eUFjY2Vzc29yLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUm91dGVQYXRoOiAoPGFueT50aENhc3RlZCkudGhSb3V0ZVBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb3V0ZVBhcmFtZXRlclByb3BlcnRpZXM6ICg8YW55PnRoQ2FzdGVkKS50aFJvdXRlUGFyYW1ldGVyUHJvcGVydGllcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZEVsZW1lbnQ+e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTGVmdEJvcmRlcjogKDxhbnk+dGhDYXN0ZWQpLl9sYm9yZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJpZ2h0Qm9yZGVyOiAoPGFueT50aENhc3RlZCkuX3Jib3JkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSUQ6IGtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpbm5lZDogY29sdW1uc0NhY2hlW3RkLnRkXS5waW5uZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaW5uZWRXaWR0aDogdGhDYXN0ZWQudGhQaW5uZWRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyb3VwSGVhZGVyOiB0aENhc3RlZC50aEdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JvdXBBZ2dyZWdhdGlvbjogISF0aENhc3RlZC50aEFnZ3JlZ2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlzaWJsZTogY29sdW1uc0NhY2hlW3RkLnRkXS52aXNpYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JhcHM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M6IHRoQ2FzdGVkLnRoR3JvdXBDbGFzcyB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQ6IHRoaXMucm93R3JvdXBpbmdfSC5nZXRHcm91cENlbGxEaXNwbGF5KDxHcm91cD5pdGVtLCBrZXksIDxFc1RoRGlyZWN0aXZlPnRoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5UTVBSb3dURHNbY3R4XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRNUFJvd1REc1tjdHhdLnB1c2goaXRlbVRvQWRkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuUm93Q29udGV4dHMucHVzaChjdHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLlRNUFJvd1REc1tjdHhdID0gW2l0ZW1Ub0FkZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRGaXhlZHNbY3R4XSA9IGlzRml4ZWQgPyAxIDogMDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNlIG5vbiBobyBvZ2dldHRpIMOoIGludXRpbGUgY2hlIGNvbnRyb2xsbyBnbGkgZXJyb3JpLCBkYXRvIGNoZSBnbGkgZXMtdGQgbm9uIGVzaXN0ZXJhbm5vIGRpIGNlcnRvIGUgZGkgY29uc2VndWVuemEgZ2xpIGVzLXRoIG5vbiBzYXJhbm5vIHJlZmVyZW56aWF0aVxyXG4gICAgICAgIGlmICh0aGlzLlRNUEJvdW5kU291cmNlLmxlbmd0aCA9PSAwKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHZhciBlcnJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGxldCB0aCA9IHRoc1tpXTtcclxuICAgICAgICAgICAgaWYgKCF0aC5fcmVmZXJlbmNlZClcclxuICAgICAgICAgICAgICAgIGVycnMucHVzaCh0aC50aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXJycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHZhciBlcnJJZHMgPSBlcnJzLmpvaW4oJywgJyk7XHJcbiAgICAgICAgICAgIHRocm93IFwiTCdJRCBkaSB1bm8gbyBwacO5IEVzVGggbm9uIGhhbm5vIGFsY3VuIEVzVGQgYXNzb2NpYXRvOiBcIiArIGVycklkcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQYXJ0ZW5kbyBkYWdsaSAqKkVzVGhzKiogYmluZGF0aSBnZW5lcmEsIGFsbCdpbnRlcm5vIGRlbCBkaXppb25hcmlvICoqVE1QUm93VEhzKiogdHV0dGkgaSBjb250ZXN0aSBkZWkgdmFyaSBvZ2dldHRpLlxyXG4gICAgICpcclxuICAgICAqIFZlbmdvbm8gZXNjbHVzaSBpIFRIIFwiSW50ZXJuaVwiIGluIHF1YW50byB2ZW5nb25vIGdlbmVyYXRpIGRhZ2xpIG9yaWdpbmFsaSBxdWluZGkgaW5jbHVkZXJsaSB2b3JyZWJiZSBkaXJlIHJpZWZmZXR0dWFyZSBsZSBvcGVyYXppb25pIGR1ZSB2b2x0ZVxyXG4gICAgICpcclxuICAgICAqIENvc3RvOiAxIHNjYW4gRXNUaHMgKyAxIHNjYW4gQ29sdW1uc0xpc3RcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge0VzVGhEaXJlY3RpdmVbXX0gdGhzIENvbG9ubmUgZGVsbGEgdGFiZWxsYVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV2YWx1YXRlUm93VGhzKHRoczogRXNUaERpcmVjdGl2ZVtdKSB7XHJcbiAgICAgICAgaWYgKHRocy5sZW5ndGggPT0gMClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgY29sdW1uc0xpc3RDYWNoZTogeyBbaW5kZXg6IHN0cmluZ106IEVzVGFibGVDb2x1bW4gfSA9IHt9O1xyXG4gICAgICAgIGxldCBjYXN0ZWRWaWV3ID0gPEFwcFNlYXJjaDxhbnk+PnRoaXMuVmlldztcclxuICAgICAgICBsZXQgZ3JvdXBpbmdzVW5kZWZpbmVkID0gdGhpcy52aWV3TW9kZSAmJiAoY2FzdGVkVmlldyAmJiAhY2FzdGVkVmlldy5ncm91cGluZ3MgfHwgY2FzdGVkVmlldy5ncm91cGluZ3MubGVuZ3RoID09IDApO1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuQ29sdW1uc0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbGV0IGl0bSA9IHRoaXMuQ29sdW1uc0xpc3RbaV07XHJcbiAgICAgICAgICAgIGNvbHVtbnNMaXN0Q2FjaGVbaXRtLmlkXSA9IGl0bVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5UTVBSb3dUSHMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRocy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNbaV07XHJcbiAgICAgICAgICAgIGxldCB0b0FkZDogVGhFbGVtZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoLnRoSWYgfHwgdGgudGhHcm91cCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCB0aENsYXNzID0gKHRoLnRoQ2xhc3MgfHwgXCJcIikgKyAodGgudGhTaHJpbmsgPyBcIiBhcHAtY29sLW1pblwiIDogXCJcIikgKyAodGgudGhHcm91cCA/IFwiIGVzdC1jb2wtbWluXCIgOiBcIlwiKTtcclxuICAgICAgICAgICAgICAgIHRvQWRkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIFBpbm5lZDogY29sdW1uc0xpc3RDYWNoZVt0aC50aF0ucGlubmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpeGVkOiB0aC50aEZpeGVkLFxyXG4gICAgICAgICAgICAgICAgICAgIFBpbm5lZFdpZHRoOiB0aC50aFBpbm5lZFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIElEOiB0aC50aCxcclxuICAgICAgICAgICAgICAgICAgICBWaXNpYmxlOiB0aC50aFZpc2libGUsXHJcbiAgICAgICAgICAgICAgICAgICAgQ2xhc3M6IHRoQ2xhc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgT3JkZXI6IHRoLnRoT3JkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgT3JkZXJhYmxlOiB0aC50aE9yZGVyYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZTogdGguVGVtcGxhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgQWxpZ25tZW50OiAodGgudGhBbGlnbm1lbnQgfHwgdGhpcy5EZWZhdWx0QWxpZ25tZW50KS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlIG5vbiDDqCBuZXNzdW4gY29udGVudXRvIG7DqSBuZXNzdW4gdGVtcGxhdGUgbW9zdHJvIHNlbXBsaWNlbWVudGUgbCdJRCBkZWxsJ2hlYWRlclxyXG4gICAgICAgICAgICAgICAgICAgIENvbnRlbnQ6IHRoLnRoU3RhdGljQ29udGVudCAhPSBudWxsID8gdGgudGhTdGF0aWNDb250ZW50IDogdGguVGVtcGxhdGUgPyAnJyA6IHRoLnRoLFxyXG4gICAgICAgICAgICAgICAgICAgIFdyYXA6IHRoLnRoV3JhcCxcclxuICAgICAgICAgICAgICAgICAgICBMZWZ0Qm9yZGVyOiAoPGFueT50aCkuX2xib3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIFJpZ2h0Qm9yZGVyOiAoPGFueT50aCkuX3Jib3JkLFxyXG4gICAgICAgICAgICAgICAgICAgIE11bHRpOiB0aC5fbXVsdGksXHJcbiAgICAgICAgICAgICAgICAgICAgTXVsdGlDb250ZW50OiB0aC5fbXVsdGlfY29udGVudFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIHRoaXMuVE1QUm93VEhzLnB1c2godG9BZGQpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNlIGhvIHVuIG1vZGVsbG8gY2hlIGRldmUgZnVuemlvbmFyZSBhIHJvd2dyb3VwaW5nIG1hIG5vbiDDqCBhbmNvcmEgc3RhdGEgZWZmZXR0dWF0YSBuZXNzdW5hIHJpY2VyY2Egc3VpIGdydXBwaSBwcmluY2lwYWxpIChncm91cGluZ3NVbmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAvLyBsaSBnZW5lcm8gZSBtYW5kbyBsYSBwcmltYSByaWNlcmNhIGNoZSBkZXYnZXNzZXJlIHNwZWRpdGEgYWwgYmFja2VuZCBwZXIgaWwgcHJpbW8gY2FyaWNhbWVudG8gZGVpIGdydXBwaVxyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwaW5nc1VuZGVmaW5lZCAmJiAodGgudGhBZ2dyZWdhdGlvbiB8fCB0aC50aEdyb3VwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBncm91cEFnZ3JlZ2F0aW9uczogR3JvdXBPckFnZ3JlZ2F0aW9uW10gPSB0aGlzLnJvd0dyb3VwaW5nX0guZ2V0R3JvdXBBZ2dyZWdhdGlvbnModGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FzdGVkVmlldy5ncm91cGluZ3MpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc3RlZFZpZXcuZ3JvdXBpbmdzID0gZ3JvdXBBZ2dyZWdhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXN0ZWRWaWV3Lmdyb3VwaW5ncy5wdXNoKC4uLmdyb3VwQWdncmVnYXRpb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5SZXNlYXJjaE5lZWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcG9zdGEgbGEgcmljZXJjYSBkaSB1bmEgcGFnaW5hIGluIGF2YW50aSAobyBpbmRpZXRybylcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBOdW1lcm8gZGkgcGFnaW5lIGRhIGFnZ2l1bmdlcmUgKG8gc290dHJhcnJlLCBzZSBuZWdhdGl2bykgYWxsYSBwYWdpbmEgYXR0dWFsZVxyXG4gICAgICogQHBhcmFtIHthbnl9IHBhZ2VyIEVsZW1lbnRvIGRpIHNlcGFyYXppb25lIHN1IGN1aSDDqCBlZmZldHR1YXRhIGxhIHJpY2VyY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFkZFRvUGFnZUdyb3VwKHBhZ2U6IG51bWJlciwgcGFnZXI6IEdyb3VwUGFnZXIpIHtcclxuICAgICAgICB0aGlzLmdvVG9QYWdlR3JvdXAocGFnZXIudmlldy5wYWdlICsgcGFnZSwgcGFnZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU3Bvc3RhIGxhIHJpY2VyY2EgYWxsYSBwYWdpbmEgc3BlY2lmaWNhdGFcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBQYWdpbmEgYSBjdWkgbmF2aWdhcmVcclxuICAgICAqIEBwYXJhbSB7YW55fSBwYWdlciBFbGVtZW50byBkaSBzZXBhcmF6aW9uZSBzdSBjdWkgw6ggZWZmZXR0dWF0YSBsYSByaWNlcmNhXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnb1RvUGFnZUdyb3VwKHBhZ2U6IG51bWJlciwgcGFnZXI6IEdyb3VwUGFnZXIpIHtcclxuXHJcbiAgICAgICAgbGV0IGFwcFNlYXJjaEVsZW1lbnQgPSBwYWdlci52aWV3O1xyXG4gICAgICAgIGlmIChwYWdlID09PSAwIHx8IChwYWdlID4gYXBwU2VhcmNoRWxlbWVudC5wYWdlcyAmJiBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzID4gMCkpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgYXBwU2VhcmNoRWxlbWVudC5wYWdlID0gcGFnZTtcclxuICAgICAgICBwYWdlci5idXR0b25zID0gdGhpcy51dGlsaXRpZXNfSC5nZXRQYWdlc0FycmF5KDYsIGFwcFNlYXJjaEVsZW1lbnQucGFnZSwgYXBwU2VhcmNoRWxlbWVudC5wYWdlcyk7XHJcblxyXG4gICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QoZmFsc2UsIGFwcFNlYXJjaEVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBUT0RPIFNwb3N0YXJlIGluIFNlbGVjdGlvbkhhbmRsZXJcclxuICAgICAqIFxyXG4gICAgICogR2VzdGlzY2UgaSBjbGljayBzdWxsYSB0YWJlbGxhIHNvbG8gcGVyIGxlIHJpZ2hlIGEgZ3J1cHBvLiBcclxuICAgICAqIE8gcmltdW92ZSBnbGkgZWxlbWVudGkgYXR0dWFsbWVudGUgcHJlc2VudGkgbyBjYXJpY2EgaWwgY29udGVudXRvIGRlbCBncnVwcG9cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZ3JvdXAgR3J1cHBvIGJpbmRhdG8gc3UgY3VpIHNpIMOoIGVmZmV0dHVhdG8gaWwgY2xpY2tcclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gKip0cnVlKiogc2UgbCdvcGVyYWl6b25lIMOoIGFuZGF0YSBhIGJ1b24gZmluZSwgKipmYWxzZSoqIGFsdHJpbWVudGlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhbmRsZUdyb3VwQ2xpY2soZ3JvdXA6IEdyb3VwKTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IGNhc3RlZCA9IHRoaXMuVmlldyBhcyBBcHBTZWFyY2g8YW55PjtcclxuICAgICAgICBsZXQgYW55RyA9ICg8YW55Pmdyb3VwKTtcclxuICAgICAgICBhbnlHLl9leHBhbmRlZCA9ICFhbnlHLl9leHBhbmRlZDtcclxuXHJcbiAgICAgICAgLy8gU29ubyBpbiBtb2RhbGl0w6AgcmFnZ3J1cHBhbWVudG8gdmlydHVhbGUgZGEgYXJyYXk6IEVzcGFuZGVyZSBzaWduaWZpY2EgcmVuZGVyZSB2aXNpYmlsaSB0dXR0aSBnbGkgb2dnZXR0aSByZWxhdGl2aSBhIHF1ZXN0byBncnVwcG8sIHZpY2V2ZXJzYSBpbCBjb250cmFycmVcclxuICAgICAgICBpZiAodGhpcy5BcnJheUdyb3VwaW5nKSB7XHJcbiAgICAgICAgICAgIGxldCBhbGxSZWxhdGl2ZXMgPSB0aGlzLmJvdW5kU291cmNlLmZpbHRlcih0ID0+XHJcbiAgICAgICAgICAgICAgICAodC5fZ3JvdXAgJiYgKChhbnlHLl9leHBhbmRlZCAmJiB0Ll9wYXJlbnQgPT0gYW55Ry5fdGhpc0tleSkgfHwgKCFhbnlHLl9leHBhbmRlZCAmJiB0Ll9wYXJlbnQgJiYgdC5fcGFyZW50LnN0YXJ0c1dpdGgoYW55Ry5fdGhpc0tleSkpKSkgfHxcclxuICAgICAgICAgICAgICAgICh0Ll9pdGVtICYmICgoYW55Ry5fZXhwYW5kZWQgJiYgdC5fdGhpc0tleSA9PSBhbnlHLl90aGlzS2V5KSB8fCAoIWFueUcuX2V4cGFuZGVkICYmIHQuX3RoaXNLZXkuc3RhcnRzV2l0aChhbnlHLl90aGlzS2V5KSkpKSlcclxuICAgICAgICAgICAgYWxsUmVsYXRpdmVzLmZvckVhY2godCA9PiB7IHQuX3Zpc2libGUgPSBhbnlHLl9leHBhbmRlZDsgaWYgKHQuX2dyb3VwKSB0Ll9leHBhbmRlZCA9IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYW55Ry5fZXhwYW5kZWQpIHtcclxuICAgICAgICAgICAgLy8gUmVzZXR0byBpcHBcclxuICAgICAgICAgICAgY2FzdGVkLml0ZW1zcGVycGFnZW92ZXJyaWRlID0gMTU7XHJcbiAgICAgICAgICAgIGlmICghY2FzdGVkLnJlcXVlc3RlZGdyb3VwcylcclxuICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMgPSBbbmV3IEdyb3VwRmlsdGVyKGdyb3VwLmNvbHVtbiwgZ3JvdXAudmFsdWUpXTtcclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGV2ZWwgPSBhbnlHLl9ncm91cGxldmVsO1xyXG4gICAgICAgICAgICAgICAgLy8gc2UgaWwgZ3J1cHBvIGNsaWNjYXRvIG5vbiBoYSB1biBsaXZlbGxvIMOoIGlsIHByaW1vIGdydXBwbywgcXVpbmRpIG9yZGluYW1lbnRvIHVuaWNvXHJcbiAgICAgICAgICAgICAgICAvLyBhbHRyaW1lbnRpIGRldm8gcmltdW92ZXJlIHR1dHRpIGkgZmlsdHJpIHN1IGxpdmVsbGkgc3VwZXJpb3JpIGFsIGxldmVsIGNsaWNjYXRvIGUgYWdnaXVuZ2VyZSBpbCBsZXZlbCBjbGljY2F0b1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsZXZlbClcclxuICAgICAgICAgICAgICAgICAgICBjYXN0ZWQucmVxdWVzdGVkZ3JvdXBzID0gW25ldyBHcm91cEZpbHRlcihncm91cC5jb2x1bW4sIGdyb3VwLnZhbHVlKV07XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXN0ZWQucmVxdWVzdGVkZ3JvdXBzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgYW55Ry5fcGFyZW50Um91dGUuZm9yRWFjaCgoc3RlcDogR3JvdXBSb3V0ZUZyYWdtZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc3RlZC5yZXF1ZXN0ZWRncm91cHMucHVzaChuZXcgR3JvdXBGaWx0ZXIoc3RlcC5jb2x1bW4sIHN0ZXAudmFsdWUpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBjYXN0ZWQucmVxdWVzdGVkZ3JvdXBzLnB1c2gobmV3IEdyb3VwRmlsdGVyKGdyb3VwLmNvbHVtbiwgZ3JvdXAudmFsdWUpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdFNlYXJjaFJlcXVlc3QodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgcGF0aCA9IChhbnlHLl9wYXJlbnQgfHwgJycpICsgZ3JvdXAudmFsdWU7XHJcblxyXG4gICAgICAgICAgICAvLyBTZSBobyBjaGl1c28gdW4gZ3J1cHBvIG5vbiBtaSBzZXJ2ZSByaWVmZmV0dHVhcmUgcmljZXJjZSwgbWkgYmFzdGEgZWxpbWluYXJlIGRhZ2xpIG9nZ2V0dGkgYmluZGF0aSB0dXR0aSBnbGkgZWxlbWVudGkgc290dG9zdGFudGkgYSBxdWVsIGdydXBwb1xyXG4gICAgICAgICAgICB0aGlzLmJvdW5kU291cmNlID0gdGhpcy5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PiAhdC5fcGFyZW50IHx8ICF0Ll9wYXJlbnQuc3RhcnRzV2l0aChwYXRoKSk7XHJcblxyXG4gICAgICAgICAgICAvLyBkZXZvIHBlcsOyIGFuY2hlIHJpbXVvdmVyZSBldmVudHVhbGkgY2FjaGUgcmVsYXRpdmVcclxuICAgICAgICAgICAgdGhpcy5ncm91cFNlYXJjaFJlcXVlc3RzQ2FjaGUgPSB0aGlzLmdyb3VwU2VhcmNoUmVxdWVzdHNDYWNoZS5maWx0ZXIodCA9PiB0LnBhdGggIT0gcGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXN0aXNjZSBsYSBzZWxlemlvbmUgZ2xvYmFsZSBkZWdsaSBvZ2dldHRpLCBzaWEgcGVyIHBhZ2luYSBjaGUgYSBsaXZlbGxvIGRpICoqU2VsZWN0QWxsKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGZvcmNlZFZhbCBWYWxvcmUgZm9yemF0byBkaSBjaGVjayBkYSBhc3NlZ25hcmUgYWdsaSBvZ2dldHRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnbG9iYWxDaGVja0NoYW5nZWQoZm9yY2VkVmFsOiBib29sZWFuID0gbnVsbCkge1xyXG5cclxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzRXhjbHVkaW5nKG51bGwpO1xyXG5cclxuICAgICAgICAvLyBQcmVuZG8gdHV0dGkgZ2xpIGVsZW1lbnRpIHByZXNlbnRpIGluIHF1ZXN0YSB2aXN0YS4gU2UgaG8gZ3J1cHBpIHByZW5kbyBzb2xvIGkgZ3J1cHBpIGEgbGl2ZWxsbyAwLCBhbHRyaW1lbnRpIHByZW5kbyB0dXR0aSBnbGkgb2dnZXR0aSBwZXIgc2VsZXppb25hcmxpXHJcbiAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5ib3VuZFNvdXJjZS5maW5kKHQgPT4gdC5fZ3JvdXApID8gdGhpcy5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PiB0Ll9ncm91cCAmJiAhdC5fcGFyZW50KSA6IHRoaXMuYm91bmRTb3VyY2U7XHJcbiAgICAgICAgdmFyIGl0ZW1TZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbl9ILmhhbmRsZUl0ZW1zU2VsZWN0aW9uKGl0ZW1zLCBmb3JjZWRWYWwsIHRoaXMuZ2xvYmFsQ2hlY2spO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZCgpO1xyXG5cclxuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZC5lbWl0KGl0ZW1TZWxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQFRPRE8gU3Bvc3RhcmUgaW4gU2VsZWN0aW9uSGFuZGxlclxyXG4gICAgICogXHJcbiAgICAgKiBHZXN0aXNjZSBpIGNsaWNrIHN1bGxhIHRhYmVsbGEsIGdlc3RlbmRvIGV2ZW50dWFsbWVudGUgYW5jaGUgZ2xpIFNoaWZ0ICsgQ2xpY2sgcGVyIHNlbGV6aW9uYXJlIHVuIHJhbmdlIGRpIG9nZ2V0dGlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gZXZlbnQgRXZlbnRvIG5hdGl2byBIVE1MIGRlbCBjbGlja1xyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBiaW5kYXRvIHN1IGN1aSBzaSDDqCBlZmZldHR1YXRvIGlsIGNsaWNrXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59ICoqdHJ1ZSoqIHNlIGwnb3BlcmFpem9uZSDDqCBhbmRhdGEgYSBidW9uIGZpbmUsICoqZmFsc2UqKiBhbHRyaW1lbnRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVDbGljayhldmVudDogYW55LCBpdGVtOiBhbnkpOiBib29sZWFuIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILmNsZWFyU2VsZWN0aW9uU3RhdHVzRXhjbHVkaW5nKG51bGwpO1xyXG5cclxuICAgICAgICBsZXQgc2VsZWN0ZWRpdGVtczogYW55W10gPSBbXTtcclxuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5TaGlmdENsaWNrICYmICF0aGlzLlNpbmdsZVNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLnV0aUV4dHMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICAgIGxldCBzdGFydFNlbGVjdGluZyA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgbGV0IGl0ZW1zID0gdGhpcy5ib3VuZFNvdXJjZS5maWx0ZXIodCA9PiAhdC5fZ3JvdXAgJiYgIXQuX3NlcCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCB0ID0gaXRlbXNbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRTZWxlY3RpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0Ll9zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRpdGVtcy5wdXNoKHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCh0ID09IGl0ZW0gfHwgdCA9PSB0aGlzLmxhc3RTZWxlY3RlZCkgJiYgIXN0YXJ0U2VsZWN0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRTZWxlY3RpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHQuX3NlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZGl0ZW1zLnB1c2godCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0ID09IGl0ZW0gfHwgdCA9PSB0aGlzLmxhc3RTZWxlY3RlZCkgJiYgc3RhcnRTZWxlY3RpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnRTZWxlY3RpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uX3NlbGVjdGVkID0gIWl0ZW0uX3NlbGVjdGVkO1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZCA9IGl0ZW07XHJcbiAgICAgICAgICAgIHNlbGVjdGVkaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpdGVtU2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb25fSC5oYW5kbGVJdGVtc1NlbGVjdGlvbihzZWxlY3RlZGl0ZW1zKTtcclxuICAgICAgICB0aGlzLmNoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChpdGVtU2VsZWN0aW9uKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcG9zdGEgbGEgcmljZXJjYSBkaSB1bmEgcGFnaW5hIGluIGF2YW50aSAobyBpbmRlaXRybylcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBOdW1lcm8gZGkgcGFnaW5lIGRhIGFnZ2l1bmdlcmUgKG8gc290dHJhcnJlLCBzZSBuZWdhdGl2bykgYWxsYSBwYWdpbmEgYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWRkVG9QYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGxldCB2aWV3ID0gdGhpcy5NYWluR3JvdXBWaWV3ID8gdGhpcy5NYWluR3JvdXBWaWV3IDogdGhpcy5WaWV3O1xyXG5cclxuICAgICAgICB0aGlzLmdvVG9QYWdlKCgodGhpcy5TZWFyY2hWaWV3IHx8IHZpZXcpPy5wYWdlIHx8IDApICsgcGFnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTcG9zdGEgbGEgcmljZXJjYSBhbGxhIHBhZ2luYSBzcGVjaWZpY2F0YVxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIFBhZ2luYSBhIGN1aSBuYXZpZ2FyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ29Ub1BhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLk1haW5Hcm91cFZpZXcgPyB0aGlzLk1haW5Hcm91cFZpZXcgOiAodGhpcy5hcnJheU1vZGUgPyB0aGlzLlNlYXJjaFZpZXcgOiB0aGlzLlZpZXcpO1xyXG4gICAgICAgIGlmICghdmlldy5wYWdlIHx8ICF2aWV3LnBhZ2VzKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBhcHBTZWFyY2hFbGVtZW50ID0gdGhpcy5TZWFyY2hWaWV3IHx8IHZpZXc7XHJcbiAgICAgICAgaWYgKHBhZ2UgPT09IDAgfHwgKHBhZ2UgPiBhcHBTZWFyY2hFbGVtZW50LnBhZ2VzICYmIGFwcFNlYXJjaEVsZW1lbnQucGFnZXMgPiAwKSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICBhcHBTZWFyY2hFbGVtZW50LnBhZ2UgPSBwYWdlO1xyXG4gICAgICAgIGxldCBjb3VudCA9ICh2aWV3Lml0ZW1zLmxlbmd0aCB8fCB2aWV3Lmdyb3Vwcz8ubGVuZ3RoIHx8IDApO1xyXG4gICAgICAgIGxldCBpcHAgPSB2aWV3Lml0ZW1zcGVycGFnZW92ZXJyaWRlIHx8IDE1O1xyXG4gICAgICAgIHRoaXMuYXJyYXlQdWxzYW50aSA9IHRoaXMudXRpbGl0aWVzX0guZ2V0UGFnZXNBcnJheSg2LCBhcHBTZWFyY2hFbGVtZW50LnBhZ2UsIGFwcFNlYXJjaEVsZW1lbnQucGFnZXMsIGNvdW50LCBpcHApO1xyXG5cclxuICAgICAgICBsZXQgaGFzR3JvdXBpbmdzID0gISF0aGlzLk1haW5Hcm91cFZpZXc7XHJcbiAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdChmYWxzZSwgaGFzR3JvdXBpbmdzID8gdmlldyA6IHRoaXMuU2VhcmNoVmlldyA/IHRoaXMuU2VhcmNoVmlldyA6IG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRXZlbnRvIHJpY2hpYW1hdG8gc3VsIGNhbWJpbyBkZWxsYSBwYWdpbmF6aW9uZS4gVmVycsOgIHJpY2hpYW1hdG8gbCdldmVudG8gKiplbWl0U2VhcmNoUmVxdWVzdCoqXHJcbiAgICAgKiBwZXIgY29tdW5pY2FyZSBhbCBjb21wb25lbnRlIGNoZSB1dGlsaXp6YSBxdWVzdGEgdGFiZWxsYSBjaGUgaSBkYXRpIHNvbm8gZGEgYWdnaW9ybmFyZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb25JdGVtc1BlclBhZ2VDaGFuZ2VkKG5ld0lwcCkge1xyXG4gICAgICAgIHRoaXMuUGFnZXJPcHRpb25zLlZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSBuZXdJcHA7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuTWFpbkdyb3VwVmlldylcclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlLCB0aGlzLk1haW5Hcm91cFZpZXcpO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuU2VhcmNoVmlldykge1xyXG4gICAgICAgICAgICAvLyBRdWVzdG8gc2Vjb25kbyBtZSBzaSBwdcOyIHBvcnRhcmUgYSBsaXZlbGxvIHVuIHBvJyBwacO5IGFsdG9cclxuICAgICAgICAgICAgdGhpcy5TZWFyY2hWaWV3LnBhZ2UgPSAxO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KHRydWUsIHRoaXMuU2VhcmNoVmlldyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogRXZlbnRvIHJpY2hpYW1hdG8gc3VsIGNhbWJpbyBkZWxsYSBwYWdpbmF6aW9uZS4gVmVycsOgIHJpY2hpYW1hdG8gbCdldmVudG8gKiplbWl0U2VhcmNoUmVxdWVzdCoqIGNvbiBsYSB2aXN0YSBkZWwgc2VwYXJhdG9yZSAqL1xyXG4gICAgcHVibGljIG9uR3JvdXBJdGVtc1BlclBhZ2VDaGFuZ2VkKHBhZ2VyOiBHcm91cFBhZ2VyLCBuZXdJcHA6IG51bWJlcikge1xyXG4gICAgICAgIHBhZ2VyLnZpZXcuaXRlbXNwZXJwYWdlb3ZlcnJpZGUgPSBuZXdJcHA7XHJcbiAgICAgICAgdGhpcy5lbWl0U2VhcmNoUmVxdWVzdCh0cnVlLCBwYWdlci52aWV3KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqIE1ldG9kbyBjaGUgZ2VzdGlzY2UgbGEgbW9kaWZpY2EgZGVsIHRlbXBvIHNwZWNpZmljYXRvIHBlciBsJ2FnZ2lvcm5hbWVudG8gYXV0b21hdGljbyAqL1xyXG4gICAgcHVibGljIGF1dG9VcGRhdGVDaGFuZ2VkKCkge1xyXG4gICAgICAgIGlmICghL15bMS05XVxcZCokLy50ZXN0KHRoaXMuc2Vjb25kcykpXHJcbiAgICAgICAgICAgIHRoaXMuc2Vjb25kcyA9ICcxMCc7XHJcblxyXG4gICAgICAgIGxldCBzZWNvbmRzSW5NcyA9IHBhcnNlSW50KHRoaXMuc2Vjb25kcywgbnVsbCkgKiAxMDAwO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hdXRvVXBkYXRlKVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4geyB0aGlzLmVtaXRTZWFyY2hSZXF1ZXN0KGZhbHNlKTsgfSwgc2Vjb25kc0luTXMpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVyKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldG9kbyBjaGlhbWF0byBkYWwgY2xpY2sgc3UgdW5hIGRlbGxlIGNvbG9ubmUgZ2VuZXJhdGUgZGFsbCdJbnB1dCAqKkR5bmFtaWNPcGVyYXRpb25zKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gaXRlbSBMJ29nZ2V0dG8gc3UgY3VpIHZhIGVmZmV0dHVhdGEgbCdvcGVyYXppb25lXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3BpZCBDb2RpY2UgaWRlbnRpZmljYXRpdm8gZGVsbCdvcGVyYXppb25lIGRhIGVmZmV0dHVhcnNpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBkeW5hbWljT3BlcmF0aW9uKGl0ZW06IGFueSwgb3BpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5vbkR5bmFtaWNPcGVyYXRpb24uZW1pdCh7IGlkOiBvcGlkLCBpdGVtOiBpdGVtIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCBjb250ZW51dG8gZGVsbCdFc1RkIGRhIHV0aWxpenphcmUgcGVyIGxhIGNvbG9ubmEgc3BlY2lmaWNhdGFcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtbiBDb2xvbm5hIHBlciBjdWkgY2VyY2FyZSBsYSBjZWxsYVxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgTm9tZSBkaXJldHRvIHBlciBjZXJjYXJlIGlsIFREIGNvbiBsJ0lELiBRdWVzdGEgdmFyaWFiaWxlIGhhIHByaW9yaXTDoCByaXNwZXR0byBhICoqY29sdW1uKipcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1RlbXBsYXRlUmVmPGFueT59IFRlbXBsYXRlIGRhIHVzYXJlIHBlciBsYSBjb2xvbm5hXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBmaW5kRXNUZChjb2x1bW46IHN0cmluZywgbmFtZTogc3RyaW5nID0gbnVsbCk6IFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgICAgIHZhciBFc1RkID0gdGhpcy5Fc1Rkc0RpcmVjdGl2ZS5maW5kKChpdGVtKSA9PiBuYW1lID8gaXRlbS50ZCA9PT0gbmFtZSA6IGl0ZW0udGRGb3JQcm9wZXJ0eSA9PT0gY29sdW1uKTtcclxuICAgICAgICAvLyBOYW1lIG5vbiB0cm92YXRvLCBmYWxsYmFjayBhbCBub21lIGRlbGxhIGNvbG9ubmFcclxuICAgICAgICBpZiAobmFtZSAmJiBjb2x1bW4gJiYgIUVzVGQpXHJcbiAgICAgICAgICAgIEVzVGQgPSB0aGlzLkVzVGRzRGlyZWN0aXZlLmZpbmQoKGl0ZW0pID0+IGl0ZW0udGRGb3JQcm9wZXJ0eSA9PT0gY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gRXNUZCA/IEVzVGQuVGVtcGxhdGUgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3R0aWVuZSBpbCBjb250ZW51dG8gZGVsbCdlZGl0b3IgRXNUZCBkYSB1dGlsaXp6YXJlIHBlciBsYSBjb2xvbm5hIHNwZWNpZmljYXRhXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjb2x1bW4gQ29sb25uYSBwZXIgY3VpIGNlcmNhcmUgbCdlZGl0b3JcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5vbWUgZGlyZXR0byBwZXIgY2VyY2FyZSBsJ0VkaXRvciBjb24gbCdJRC4gUXVlc3RhIHZhcmlhYmlsZSBoYSBwcmlvcml0w6AgcmlzcGV0dG8gYSAqKmNvbHVtbioqXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIHtUZW1wbGF0ZVJlZjxhbnk+fSBUZW1wbGF0ZSBkYSB1c2FyZSBwZXIgbGEgY29sb25uYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZmluZEVkaXRvcihjb2x1bW46IHN0cmluZywgbmFtZTogc3RyaW5nID0gbnVsbCk6IFRlbXBsYXRlUmVmPGFueT4ge1xyXG4gICAgICAgIHZhciBFZGl0b3IgPSB0aGlzLkVzVGRFZGl0b3JEaXJlY3RpdmVzLmZpbmQoKGl0ZW0pID0+IG5hbWUgPyBpdGVtLmVkaXRvciA9PT0gbmFtZSA6IGl0ZW0uZWRpdG9yRm9yUHJvcGVydHkgPT09IGNvbHVtbik7XHJcbiAgICAgICAgLy8gTmFtZSBub24gdHJvdmF0bywgZmFsbGJhY2sgYWwgbm9tZSBkZWxsYSBjb2xvbm5hXHJcbiAgICAgICAgaWYgKG5hbWUgJiYgY29sdW1uICYmICFFZGl0b3IpXHJcbiAgICAgICAgICAgIEVkaXRvciA9IHRoaXMuRXNUZEVkaXRvckRpcmVjdGl2ZXMuZmluZCgoaXRlbSkgPT4gaXRlbS5lZGl0b3JGb3JQcm9wZXJ0eSA9PT0gY29sdW1uKTtcclxuICAgICAgICByZXR1cm4gRWRpdG9yID8gRWRpdG9yLlRlbXBsYXRlIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVxdWl2YWxlbnRlIGRlbCBtZXRvZG8gKiphZGRUb1BhZ2UqKiByaWFkYXR0YXRvIHBlciBsYSBtb2RhbGl0w6AgYXJyYXlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBOdW1lcm8gZGkgcGFnaW5lIGRhIGFnZ2l1bmdlcmUgKG8gc290dHJhcnJlLCBzZSBuZWdhdGl2bykgYWxsYSBwYWdpbmEgYXR0dWFsZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYXJyYXlBZGRUb1BhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5hcnJheUdvVG9QYWdlKHRoaXMuYXJyYXltb2RlUGFnZSArIHBhZ2UpXHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFcXVpdmFsZW50ZSBkZWwgbWV0b2RvICoqZ29Ub1BhZ2UqKiByaWFkYXR0YXRvIHBlciBsYSBtb2RhbGl0w6AgYXJyYXlcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcGFnZSBQYWdpbmEgYSBjdWkgbmF2aWdhcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGFycmF5R29Ub1BhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgPT09IDAgfHwgcGFnZSA+IHRoaXMuYXJyYXltb2RlUGFnZXMpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB0aGlzLmFycmF5bW9kZVBhZ2UgPSBwYWdlO1xyXG5cclxuICAgICAgICAvLyBSaWZvcnpvIGlsIHdyaXRldmFsdWUgaW4gbW9kbyBjaGUgaWwgY29kaWNlIHBhc3NpIGRhbGxhIGdlc3Rpb25lIGNvbWUgc2UgZm9zc2UgZmF0dGEgcmlwYXJ0aXJlIHVuYSByaWNlcmNhXHJcbiAgICAgICAgdGhpcy5pbnRlcm5hbFdyaXRlVmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlc3Rpb25lIGRlaSBjbGljayBzdWxsZSBvcHppb25pIGRlbCBtZW7DuSBjb250ZXN0dWFsZSBpbiBhbHRvIGEgZGVzdHJhIGdlbmVyYXRvIGRhbGwnSW5wdXQgKipDb3JuZXJNZW51T3B0aW9ucyoqXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNvcm5lcmlkIENvZGljZSBkZWxsJ29wZXJhemlvbmUgc2VsZXppb25hdGFcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvcm5lckFjdGlvbkNsaWNrZWQoY29ybmVyaWQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMub25Db3JuZXJBY3Rpb24uZW1pdCh7IGlkOiBjb3JuZXJpZCwgZXN0YWJsZTogdGhpcyB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBJbXBvc3RhemlvbmUgbW9kYWxpdMOgIGRlbGwnRXNUYWJsZSBcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHsnYXJyYXknIHwgJ3ZpZXcnIHwgJ3JlcG9ydCd9IG1vZGUgTW9kYWxpdMOgIGRhIGltcG9zdGFyZVxyXG4gICAgICoqL1xyXG4gICAgcHJpdmF0ZSBzZXRNb2RlKG1vZGU6ICdhcnJheScgfCAndmlldycpIHtcclxuICAgICAgICB0aGlzLnZpZXdNb2RlID0gbW9kZSA9PSAndmlldyc7XHJcbiAgICAgICAgdGhpcy5hcnJheU1vZGUgPSBtb2RlID09ICdhcnJheSc7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIZWxwZXIgcGVyIGVmZmV0dHVhcmUgY2hpYW1hdGUgaW50ZXJuZSBkaSBhbGxpbmVhbWVudG8gYWxsYSBmdW56aW9uZSAqKndyaXRlVmFsdWUqKiwgXHJcbiAgICAgKiBpbXBvc3RhbmRvIHByaW1hICoqaW50ZXJuYWxXcml0ZUNhbGwqKiBpbiBtb2RvIGRhIG5vbiBlZmZldHR1YXJlIG9wZXJhemlvbmkgaW51dGlsaVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW50ZXJuYWxXcml0ZVZhbHVlKCkge1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxXcml0ZUNhbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLlZpZXcpO1xyXG4gICAgICAgIHRoaXMuaW50ZXJuYWxXcml0ZUNhbGwgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogTWV0b2RvIGV2ZW50dWFsbWVudGUgcmljaGlhbWFiaWxlIGFuY2hlIGRhbCBjb21wb25lbnRlIGVzdGVybm8gY2hlIHBlcm1ldHRlIGRpIGZvcnphcmUgdW4gcmVmcmVzaCBkZWxsYSB0YWJlbGxhICovXHJcbiAgICBwdWJsaWMgZm9yY2VSZWZyZXNoKHJlbGF1bmNoU2VhcmNoOiBib29sZWFuID0gdHJ1ZSkge1xyXG5cclxuICAgICAgICAvLyBTZSBzb25vIGluIG1vZGFsaXTDoCBWaWV3IHZpZW5lIG1hbnRlbnV0byBpbiBhdXRvbWF0aWNvIGlsIG51bWVybyBkaSBwYWdpbmEsIG1hIHBlciBsYSBtb2RhbGl0w6AgYXJyYXkgZGV2byBwcmVuZGVyZSBsZSBpbmZvIGRpIHBhZ2luYXppb25lIHByaW1hIGUgcmlhcHBsaWNhcmxlIGRvcG9cclxuICAgICAgICBsZXQgYXJyYXlQYWdlOiBudW1iZXI7XHJcbiAgICAgICAgbGV0IGFycmF5SXBwOiBudW1iZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIGFycmF5UGFnZSA9IHRoaXMuYXJyYXltb2RlUGFnZTtcclxuICAgICAgICAgICAgYXJyYXlJcHAgPSB0aGlzLkFycmF5bW9kZUl0ZW1zUGVyUGFnZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCFyZWxhdW5jaFNlYXJjaCAmJiB0aGlzLnZpZXdNb2RlKVxyXG4gICAgICAgICAgICB0aGlzLlZpZXcuc2VsZnNlYXJjaCA9IHRydWU7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLlZpZXcpO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXJyYXlNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuQXJyYXltb2RlSXRlbXNQZXJQYWdlID0gYXJyYXlJcHA7XHJcbiAgICAgICAgICAgIHRoaXMuYXJyYXlHb1RvUGFnZShhcnJheVBhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogXHJcbiAgICAgKiBJbXBvc3RhIGxhIHZpc2liaWxpdMOgIGRpIHVuIGhlYWRlciBlIGRpIGV2ZW50dWFsaSBoZWFkZXIgY29sbGVnYXRpIHNlIHF1ZXN0byBoZWFkZXIgw6ggdW4gZ3J1cHBvLCBkb3BvZGljaMOpIGFnZ2lvcm5hIGwnZXMtdGFibGUgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cE9ySGVhZGVyIEhlYWRlciBkaSBjdWkgc2V0dGFyZSBsYSB2aXNpYmlsaXTDoFxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSB2aXNpYmlsaXR5IFZpc2liaWxpdMOgIGRhIGltcG9zdGFyZVxyXG4gICAgICoqL1xyXG4gICAgcHVibGljIHNldEhlYWRlclZpc2liaWxpdHkoZ3JvdXBPckhlYWRlcjogc3RyaW5nLCB2aXNpYmlsaXR5OiBib29sZWFuLCByZWZyZXNoOiBib29sZWFuID0gdHJ1ZSwgcmVsYXVuY2hTZWFyY2g6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgbGV0IGdyb3VwT3JIZWFkID0gdGhpcy50aHNDYWNoZVtncm91cE9ySGVhZGVyXTtcclxuICAgICAgICBpZiAoIWdyb3VwT3JIZWFkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGdyb3VwT3JIZWFkLnRoVmlzaWJsZSA9IHZpc2liaWxpdHk7XHJcblxyXG4gICAgICAgIGxldCB0aHNBcnIgPSB0aGlzLkVzVGhzRGlyZWN0aXZlLnRvQXJyYXkoKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoc0Fyci5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBsZXQgdGggPSB0aHNBcnJbaV07XHJcblxyXG4gICAgICAgICAgICBpZiAodGgudGhQYXJlbnQgPT0gZ3JvdXBPckhlYWRlcilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGVhZGVyVmlzaWJpbGl0eSh0aC50aCwgdmlzaWJpbGl0eSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlZnJlc2gpIHtcclxuICAgICAgICAgICAgdGhpcy51c2VMb2NhbFZpc2liaWxpdHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmZvcmNlUmVmcmVzaChyZWxhdW5jaFNlYXJjaCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuemlvbmUgY2hlIGluIGJhc2UgYWkgY2xpY2sgc3UgdW5hIGNlbGxhIGNhcGlzY2Ugc2Ugc3RvIGVmZmV0dHVhbmRvIHVuJ29wZXJhemlvbmUgZGkgc2VsZXppb25lIG8gc2Ugc3RvIGVudHJhbmRvIG5lbGwnZWRpdCBkaSB1bmEgY2VsbGEgY29uIHVuIGRvcHBpbyBjbGlja1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge2FueX0gJGV2ZW50IEV2ZW50byBuYXRpdm8gamF2YXNjcmlwdFxyXG4gICAgICogQHBhcmFtIHtUZEVsZW1lbnR9IHJvd0l0ZW0gUmlmZXJpbWVudG8gYSBiaW5kZXIgZGVsbGEgcmlnYVxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gSXRlbSBjaGUgcmFwcHJlc2VudGEgaWwgY29udGVzdG8gc3UgY3VpIMOoIHN0YXRvIGVmZmV0dHVhdG8gdW4gY2xpY2tcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRiQ2xpY2tFZGl0T3JTaW5nbGVDbGlja1Jvd1NlbGVjdGlvbigkZXZlbnQ6IE1vdXNlRXZlbnQsIHJvd0l0ZW06IFRkRWxlbWVudCwgaXRlbTogYW55KSB7XHJcblxyXG4gICAgICAgIC8vIFByaW1hIGNvc2EgZGEgZmFyZSDDqCBjb250cm9sbGFyZSBzZSBjaSBzb25vIGRlaSByYW5nZSBsYXNjaWF0aSBkYSBvcGVyYXppb25pIHByZWNlZGVudGkgKHNlIGFwcGxpY2FiaWxlKSBlIHJpcHVsaXJsaVxyXG4gICAgICAgIGlmICh0aGlzLnJhbmdlU2VsZWN0ZWQgJiYgISRldmVudC5jdHJsS2V5ICYmIHRoaXMuU2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcImNsZWFyaW5nIHByZXZpb3VzbHkgc2VsZWN0ZWQgcmFuZ2VcIik7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25TdGF0dXNFeGNsdWRpbmcobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2VTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBNb2RhbGl0w6AgRWRpdGFibGUsIGdlc3Rpc2NvIGkgZG9wcGkgY2xpY2sgc2VuemEgcGVyw7IgcmFsbGVudGFyZSBsYSBtb2RhbGl0w6AgZGkgc2VsZXppb25lIGEgcmFuZ2VcclxuICAgICAgICBpZiAodGhpcy5FZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAvLyBTZWNvbmRvIGNsaWNrOiBzZSBpbCB0aW1lciBub24gw6ggc2NhZHV0byDDqCB1biBkb3BwaW8gY2xpY2sgZWQgZXNlZ3VvIGlsIHJlc3RvXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNlbGxEYkNsaWNrVGltZXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcImhhbmRsaW5nIGRvdWJsZWNsaWNrIG9uIGVkaXRhYmxlIGNlbGw6IFwiICsgKHJvd0l0ZW0uUHJvcGVydHlOYW1lID8gJ2VkaXQgbW9kZSBmb3IgcHJvcGVydHkgJyArIHJvd0l0ZW0uUHJvcGVydHlOYW1lIDogJ25vIHByb3BlcnR5IHNldCwgZmFsbGJhY2sgdG8gc2ltcGxlIGNsaWNrJykpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJvd0l0ZW0uUHJvcGVydHlOYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dXBVc2VyRWRpdChyb3dJdGVtLCBpdGVtKTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJvd0NsaWNrKCRldmVudCwgaXRlbSwgdGhpcy5TZWxlY3Rpb24sIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhckNlbGxDbGlja1RpbWVyKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBQcmltbyBjbGljazogbm9uIGZhIG5pZW50ZSBlIHNlIGlsIHRlbXBvIHBlciBpbCBzZWNvbmRvIGNsaWNrIHNjYWRlIHJlc2V0dGEgdHV0dG9cclxuICAgICAgICAgICAgdGhpcy5jZWxsRGJDbGlja1RpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyQ2VsbENsaWNrVGltZXIoKTtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5SYW5nZVNlbGVjdGlvbiB8fCAhdGhpcy5tb3VzZUlzRG93bikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmxvZyhcInRpbWUncyB1cCBmb3Igc2Vjb25kIGNsaWNrLCBoYW5kbGluZyBzaW5nbGUgY2xpY2tcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSb3dDbGljaygkZXZlbnQsIGl0ZW0sIHRoaXMuU2VsZWN0aW9uLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgdGhpcy5kb3VibGVDbGlja0J1ZmZlck1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEluIG1vZGFsaXTDoCBhIHJhbmdlIGxhIGNyZWF6aW9uZSBkZWwgcmFuZ2Ugw6ggZ2VzdGl0YSBkYWkgbW91c2Vkb3duLCBtb3ZlIGVkIHVwLi4uXHJcbiAgICAgICAgLy8gTGEgc2VsZXppb25lIGRlbGxlIHJpZ2hlIGludmVjZSDDqCBnZXN0aXRhIGRhbGxlIGNhc2VsbGluZSBhIHNpbmlzdHJhXHJcbiAgICAgICAgaWYgKHRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gU2UgaG8gZmF0dG8gY2xpY2sgY29sIGNvbnRyb2wgYXR0YWNjYXRvIGVzY28gc3ViaXRvIGRhdG8gY2hlIGRldmUgc29sbyBwZXJtZXR0ZXJlIGxhIG5hdmlnYXppb25lIGRlaSBsaW5rXHJcbiAgICAgICAgaWYgKCRldmVudC5jdHJsS2V5KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIFR1dHRpIGkgY2xpY2sgc3UgdW5hIGNlbGxhIGdpw6AgaW4gZWRpdCBub24gZGV2b25vIGVmZmV0dHVhcmUgbGEgc2VsZXppb25lIGRlbGxhIHJpZ2FcclxuICAgICAgICBpZiAoKDxhbnk+cm93SXRlbSkuX2VkaXRpbmcpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gUGVyIGV2aXRhcmUgZGkgcmFsbGVudGFyZSBhIHByZXNjaW5kZXJlXHJcbiAgICAgICAgaWYgKCF0aGlzLkVkaXRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2soJGV2ZW50LCBpdGVtLCB0aGlzLlNlbGVjdGlvbiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGUgZ2VzdGlzY2UgaWwgY29tYW5kbyBcIkNvcGlhXCIgYnV0dGFuZG8gaSB2YWxvcmkgc2VsZXppb25hdGkgbmVsbGEgY2xpcGJvYXJkIGluIGJhc2UgYWwgbG9ybyB0aXBvICovXHJcbiAgICBwcml2YXRlIGhhbmRsZUNvcHkoKSB7XHJcbiAgICAgICAgaWYoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsZXQgc2VsID0gdGhpcy5zZWxlY3Rpb25fSC5nZXRTZWxlY3Rpb25TdGF0dXNTZWxlY3Rpb24oKTtcclxuICAgICAgICBpZiAoc2VsLmxlbmd0aCA+IDAgJiYgc2VsWzBdLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdmFyIHNlbGVjdGlvblRleHQgPSB0aGlzLnNlbGVjdGlvbl9ILmdldENsaXBiYXJkVGV4dEZyb21TZWxlY3Rpb24oc2VsKTtcclxuICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmRTZXJ2aWNlLmNvcHlUZXh0VG9DbGlwYm9hcmQoc2VsZWN0aW9uVGV4dCk7XHJcbiAgICAgICAgICAgIHRoaXMubXNnRXh0cy5zaW1wbGVJbmZvKHRoaXMubGMubG9jKFwiVmFsdWVzIGNvcGllZCBpbiB0aGUgY2xpcGJvYXJkXCIpLCBcInRvYXN0clwiLCAxMDAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIEV2ZW50byBjaGUgZ2VzdGlzY2UgaWwgY29tYW5kbyBcIkluY29sbGFcIiBwcmVuZGVuZG8gaSBkYXRpIGRlbGxhIGNsaXBib2FyZCBlIGFwcGxpY2FuZG9saSBhbCByYW5nZSBkaSBzZWxlemlvbmUgYXR0dWFsZSBpbiBiYXNlIGFsIHRpcG8gZGVsbGUgY2VsbGUgc290dG8gKi9cclxuICAgIGhhbmRsZVBhc3RlKCkge1xyXG4gICAgICAgIGlmKCF0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGV0IHNlbCA9IHRoaXMuc2VsZWN0aW9uX0guZ2V0U2VsZWN0aW9uU3RhdHVzU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgaWYgKHNlbC5sZW5ndGggPiAwICYmIHNlbFswXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkU2VydmljZS5nZXRDbGlwYm9hcmQoXCJtYXRyaXhcIiwgKHZhbHVlczogc3RyaW5nW11bXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gRml4IGNsaXBib2FyZCBzZXJ2aWNlIGNoZSBwYXJlIHVuIHBvJyBzdHJvbnphLCByaW11b3ZvIGwndWx0aW1vIGFycmF5IHNlIG1pIGFjY29yZ28gY2hlIMOoIHVuIHNpbmdvbG8gYXJyYXkgY29uIHVuIHNvbG8gZWxlbWVudG8gdnVvdG9cclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCAmJiB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdLmxlbmd0aCA9PSAxICYmIHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV1bMF0gPT0gJycpXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzLnNwbGljZSh2YWx1ZXMubGVuZ3RoIC0gMSwgMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwICYmIHZhbHVlc1swXS5sZW5ndGggPiAwKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHNlIGxhIG1vZGlmaWNhIMOoIGFiaWxpdGF0YVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5FZGl0YWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1zZ0V4dHMuc2ltcGxlV2FybmluZyh0aGlzLmxjLmxvYyhcIkRhdGEgZm9yIHRoaXMgdGFibGUgY2Fubm90IGJlIGVkaXRlZFwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIENvbnRyb2xsbyBjaGUgcXVlbGxvIGNoZSBzdG8gY29waWFuZG8gc2lhIGRlbGxhIHN0ZXNzYSBkaW1lbnNpb25lIGRlbGxhIHNlbGV6aW9uZSBzdWxsJ2VzLXRhYmxlLCB0cmFubmUgbmVsIGNhc28gaG8gdW4gc2luZ29sbyB2YWxvcmUgZGEgY29waWFyZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoc2VsLmxlbmd0aCAhPSB2YWx1ZXMubGVuZ3RoIHx8IHNlbFswXS5sZW5ndGggIT0gdmFsdWVzWzBdLmxlbmd0aCkgJiYgKHZhbHVlcy5sZW5ndGggIT0gMSB8fCB2YWx1ZXNbMF0ubGVuZ3RoICE9IDEpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubXNnRXh0cy5zaW1wbGVXYXJuaW5nKHRoaXMubGMubG9jKFwiU2l6ZSBvZiBjb3BpZWQgZGF0YSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc2l6ZSBvZiB0aGUgc2VsZWN0aW9uXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2UgbGUgZGltZW5zaW9uaSBjb2luY2lkb25vIGNvcGlvIGRhIHVuYSBwYXJ0ZSBhbGwnYWx0cmFcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY2hhbmdlczogRXNUYWJsZU1vZGVsQ2hhbmdlW10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByID0gMDsgciA8IHNlbC5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm93ID0gc2VsW3JdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNlbGwgPSByb3dbY107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTZSBobyB1biBzaW5nb2xvIHZhbG9yZSBsbyBhcHBsaWNvIGEgdHV0dGEgbGEgc2VsZXppb25lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZXMubGVuZ3RoID09IDEgJiYgdmFsdWVzWzBdLmxlbmd0aCA9PSAxID8gdmFsdWVzWzBdWzBdIDogdmFsdWVzW3JdW2NdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2xkID0gY2VsbC52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuaXUgPSBjZWxsLnZhbF9zZXR0ZXIodmFsdWUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbGRkYXRlID0gdGhpcy5kYXRlRXh0cy5nZXREYXRlQ29udmVydGlvbihvbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5pdWRhdGUgPSB0aGlzLmRhdGVFeHRzLmdldERhdGVDb252ZXJ0aW9uKG5pdSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG9sZGRhdGUgJiYgbml1ZGF0ZSAmJiBvbGRkYXRlLmlzU2FtZSAmJiBvbGRkYXRlLmlzU2FtZShuaXVkYXRlKSkgfHwgb2xkID09PSBuaXUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlcy5wdXNoKG5ldyBFc1RhYmxlTW9kZWxDaGFuZ2UoY2VsbC5pdGVtLCBjZWxsLmhlYWRlciwgY2VsbC5wcm9wZXJ0eSwgb2xkLCBuaXUpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoYW5nZXMubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlLmVtaXQoY2hhbmdlcyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKiogUmlwdWxpc2NlIGlsIHRpbWVyIHV0aWxpenphdG8gcGVyIGNhcGlyZSBzZSDDqCBzdGF0byBlZmZldHR1YXRvIHVuIGRvcHBpbyBjbGljayBvIG1lbm8gKi9cclxuICAgIHByaXZhdGUgY2xlYXJDZWxsQ2xpY2tUaW1lcigpIHtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jZWxsRGJDbGlja1RpbWVyKVxyXG4gICAgICAgIHRoaXMuY2VsbERiQ2xpY2tUaW1lciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBIYW5kbGVyIGNsaWNrIHNpbmdvbG8gc3UgdW5hIHJpZ2FcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHthbnl9ICRldmVudCBFdmVudG8gbmF0aXZvIGphdmFzY3JpcHRcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIEl0ZW0gY2hlIHJhcHByZXNlbnRhIGlsIGNvbnRlc3RvIHN1IGN1aSDDqCBzdGF0byBlZmZldHR1YXRvIHVuIGNsaWNrXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IHNlbGVjdGlvbiBJbmRpY2Egc2UgbGEgc2VsZXppb25lIMOoIGF0dGl2YVxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBpbnRlcm5hbENhbGwgSW5kaWNhIHNlIGxhIGNoaWFtYXRhIGEgcXVlc3RhIGZ1bnppb25lIMOoIGludGVybmE6IHBlcm1ldHRlIGRpIHNraXBwYXJlIGkgY2hlY2sgc3VsbGUgQ3VzdG9tQ2VsbHNcclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhbmRsZVJvd0NsaWNrKCRldmVudDogYW55LCBpdGVtOiBhbnksIHNlbGVjdGlvbjogYm9vbGVhbiwgaW50ZXJuYWxDYWxsOiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgICAgICAvLyBTZSBobyB1biBjdHJsIHByZW11dG8gZXNjbyBjb24gdHJ1ZSBpbiBtb2RvIGRhIGZhcmUgYnViYmxpbmcgZGVsbCdldmVudG8gZSBsYXNjaWFybG8gZ2VzdGlyZSBhbCBicm93c2VyIChsaW5rIGVjYy4uLilcclxuICAgICAgICAvLyBTdGVzc2EgY29zYSBzZSBobyBjdXN0b20gY2VsbCBkYXRvIGNoZSBsYSBnZXN0aW9uZSBkZWkgY2xpY2sgdmllbmUgYWZmaWRhdGEgYWkgc2luZ29saSBURFxyXG4gICAgICAgIGlmICgkZXZlbnQuY3RybEtleSB8fCAodGhpcy5Vc2VDdXN0b21DZWxscyAmJiAhaW50ZXJuYWxDYWxsKSlcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25TdGF0dXNFeGNsdWRpbmcobnVsbCk7XHJcblxyXG4gICAgICAgIGlmIChzZWxlY3Rpb24gJiYgIWl0ZW0ubG9ja2VkICYmICFpdGVtLl9zZXAgJiYgIWl0ZW0uX2dyb3VwKVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKCRldmVudCwgaXRlbSk7XHJcbiAgICAgICAgZWxzZSBpZiAoaXRlbS5fZ3JvdXApXHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlR3JvdXBDbGljayhpdGVtKTtcclxuXHJcbiAgICAgICAgLy8gT3JhIGNoZSBub24gw6ggYXR0YWNjYXRvIGRpcmV0dGFtZW50ZSBhbGwnaHRtbCBkZXZvIGZhcmUgdW4gbWFya2ZvcmNoZWNrIGZpbml0ZSBsZSBvcGVyYXppb25pIHN1aSBncm91cGluZ1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VzdGlvbmUgZGVsIGNsaWNrIGRlc3RybyBzdWxsJ2VzLXRhYmxlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblJpZ2h0Q2xpY2soKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICB0aGlzLm9uT3BlbkNvbnRleHRNZW51LmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExhIG1vZGlmaWNhIGRlbGwndXRlbnRlIMOoIGluaXppYXRhLiBTaSBpbXBvc3RhIGxhIHZhcmlhYmlsZSByZWxhdGl2YSBhIFwidHJ1ZVwiIGluIG1vZG8gZGEgbW9zdHJhcmUgbCdpbnB1dCBkaSB0ZXN0b1xyXG4gICAgICogXHJcbiAgICAgKiBEb3BvIGNoZSBsJ2lucHV0IMOoIGFwcGFyc28sIGRvcG8gdW4gY2ljbG8gZGkgQ2hhbmdlIERldGVjdGlvbiB2aWVuZSBhdHRpdmF0byBpbCBTdWJqZWN0IGNvbGxlZ2F0byBhbGwnaW5wdXQgY2hlIHNlcnZpcsOgIGEgZWZmZXR0dWFyZSBpbCBmb2N1c1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge1RkRWxlbWVudH0gcm93SXRlbSBFbGVtZW50byBkaSByaWdhIHN1IGN1aSDDqCBzdGF0YSBhdHRpdmF0YSBsYSBtb2RpZmljYVxyXG4gICAgICogQHBhcmFtIHthbnl9IGl0ZW0gT2dnZXR0byBzb3ByYSBpbCBxdWFsZSDDqCBzdGF0YSBhdHRpdmF0YSBsYSBtb2RpZmljYVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0dXBVc2VyRWRpdChyb3dJdGVtOiBUZEVsZW1lbnQsIGl0ZW06IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uX0guY2xlYXJTZWxlY3Rpb25TdGF0dXNFeGNsdWRpbmcobnVsbCk7XHJcbiAgICAgICAgaWYgKHRoaXMuRWRpdGFibGUgJiYgcm93SXRlbS5Qcm9wZXJ0eU5hbWUpIHtcclxuICAgICAgICAgICAgbGV0IGR5bk1vZGUgPSB0aGlzLkR5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbj8ubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgKDxhbnk+cm93SXRlbSkuX2VkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICAoPGFueT5yb3dJdGVtKS5vbGRfdmFsdWUgPSBkeW5Nb2RlID8gaXRlbS5wcm9wZXJ0aWVzW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXSA6IGl0ZW1bcm93SXRlbS5Qcm9wZXJ0eU5hbWVdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4geyB0aGlzLkZvY3VzU3ViamVjdC5uZXh0KCk7IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTGEgbW9kaWZpY2EgZGVsbCd1dGVudGUgw6ggdGVybWluYXRhLiBTaSByZWltcG9zdGEgbGEgdmFyaWFiaWxlIHJlbGF0aXZhIGEgXCJmYWxzZVwiIGluIG1vZG8gZGEgbmFzY29uZGVyZSBsJ2lucHV0IGRpIHRlc3RvIGUgc2kgZW1ldHRlIGxhIG1vZGlmaWNhIGRlbCB2YWxvcmVcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIHtUZEVsZW1lbnR9IHJvd0l0ZW0gRWxlbWVudG8gZGkgcmlnYSBzdSBjdWkgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqIEBwYXJhbSB7YW55fSBpdGVtIE9nZ2V0dG8gc29wcmEgaWwgcXVhbGUgw6ggc3RhdGEgYXR0aXZhdGEgbGEgbW9kaWZpY2FcclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBJbmRpY2UgZGVsbGEgY29sb25uYSBzdSBjdWkgw6ggYXZ2ZW51dGEgbGEgbW9kaWZpY2FcclxuICAgICAqL1xyXG4gICAgcHVibGljIGZpbmFsaXplVXNlckVkaXQocm93SXRlbTogVGRFbGVtZW50LCBpdGVtOiBhbnksIGNvbHVtbkluZGV4OiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgZHluTW9kZSA9IHRoaXMuRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uPy5sZW5ndGggPiAwO1xyXG4gICAgICAgIGxldCByb3dJdG0gPSA8YW55PnJvd0l0ZW07XHJcbiAgICAgICAgcm93SXRtLl9lZGl0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBvbGQgPSByb3dJdG0ub2xkX3ZhbHVlO1xyXG4gICAgICAgIGxldCBuaXUgPSBkeW5Nb2RlID8gaXRlbS5wcm9wZXJ0aWVzW3Jvd0l0ZW0uUHJvcGVydHlOYW1lXSA6IGl0ZW1bcm93SXRlbS5Qcm9wZXJ0eU5hbWVdO1xyXG5cclxuICAgICAgICBsZXQgb2xkZGF0ZSA9IHRoaXMuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24ob2xkKTtcclxuICAgICAgICBsZXQgbml1ZGF0ZSA9IHRoaXMuZGF0ZUV4dHMuZ2V0RGF0ZUNvbnZlcnRpb24obml1KTtcclxuICAgICAgICBpZiAoKG9sZGRhdGUgJiYgbml1ZGF0ZSAmJiBvbGRkYXRlLmlzU2FtZSAmJiBvbGRkYXRlLmlzU2FtZShuaXVkYXRlKSkgfHwgb2xkID09PSBuaXUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlLmVtaXQoW25ldyBFc1RhYmxlTW9kZWxDaGFuZ2UoaXRlbSwgcm93SXRlbS5JRCwgcm93SXRlbS5Qcm9wZXJ0eU5hbWUsIG9sZCwgbml1KV0pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdW2NvbHVtbkluZGV4XS52YWxfc2V0dGVyKG5pdSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmFuZ2Ugc2VsZWN0aW9uIEV4cGVyaW1lbnRhbHNcclxuXHJcbiAgICBwcml2YXRlIG1vdXNlSXNEb3duOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHJhbmdlU2VsZWN0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgcmFuZ2VTdGFydFdhc0lnbm9yZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZmlyc3RDb29yZGluYXRlczoge3JvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcn0gPSBudWxsO1xyXG5cclxuICAgIG1vdXNlZG93bihldmVudDogTW91c2VFdmVudCwgcm93SXRlbTogYW55LCBfOiBhbnkpIHtcclxuXHJcbiAgICAgICAgLy8gVGFzdG8gZGl2ZXJzbyBkYWwgY2xpY2sgc2luaXN0cm8gLT4gY2lhbyDDqCBzdGF0byBiZWxsbyBlIGludGVuc29cclxuICAgICAgICBpZihldmVudC5idXR0b25zICE9IDEgfHwgIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgLy8gU3RvIGxhdm9yYW5kbyBzdSBRVUVTVEEgZXMtdGFibGVcclxuICAgICAgICB0aGlzLmNvcHlQYXN0ZURldGVjdG9yLkFjdGl2ZUVzdFJlZmVyZW5jZSA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIFR1dHRpIGkgY2xpY2sgc3UgdW5hIGNlbGxhIGdpw6AgaW4gZWRpdCBub24gZGV2b25vIGVmZmV0dHVhcmUgbGEgc2VsZXppb25lIGRlbGxhIHJpZ2FcclxuICAgICAgICBpZiAoKDxhbnk+cm93SXRlbSkuX2VkaXRpbmcpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5tb3VzZUlzRG93biA9IHRydWU7XHJcblxyXG4gICAgICAgIGxldCBjb29yZHMgPSAoPEhUTUxFbGVtZW50PmV2ZW50LmN1cnJlbnRUYXJnZXQpLmlkLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgbGV0IHJvdyA9IHBhcnNlSW50KGNvb3Jkc1tjb29yZHMubGVuZ3RoIC0gMl0pO1xyXG4gICAgICAgIGxldCBjb2x1bW4gPSBwYXJzZUludChjb29yZHNbY29vcmRzLmxlbmd0aCAtIDFdKTtcclxuICAgICAgICB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMgPSB7IHJvdywgY29sdW1uIH07XHJcbiAgICAgICAgLy8gU2UgaG8gZ2nDoCB1biByYW5nZSBkaSBzZWxlemlvbmUgaWdub3JvIHRlbXBvcmFuZW1hZW50ZSBxdWVzdGEgc2VsZXppb25lIGluIG1vZG8gZGEgY2FwaXJlIGJlbmUgY29zYSBkZXZvIGZhcmUgZG9wbyAoY2xpY2sgc3VsbGEgcmlnYSAvIGFsdHJhIHNlbGV6aW9uZSlcclxuICAgICAgICAvLyBlIGdlc3RpcmUgbGEgZ3JhZmljYSBpbiBtYW5pZXJhIHVuIHBvJyBwacO5IHByZWNpc2FcclxuICAgICAgICBpZiAoIXRoaXMucmFuZ2VTZWxlY3RlZCB8fCAoZXZlbnQuY3RybEtleSB8fCAhdGhpcy5TZWxlY3Rpb24pKVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILnNpbmdsZUNlbGxTZWxlY3Rpb24oeyB2aWV3OiBldmVudC52aWV3LCByYW5nZTogZmFsc2UgfSwgcm93LCBjb2x1bW4pO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhpcy5yYW5nZVN0YXJ0V2FzSWdub3JlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKGBtb3VzZSBkb3duIG9uICR7cm93fToke2NvbHVtbn1gKTtcclxuICAgIH1cclxuXHJcbiAgICBtb3VzZWVudGVyKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYoIXRoaXMuUmFuZ2VTZWxlY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbnMgPT0gMClcclxuICAgICAgICAgICAgdGhpcy5tb3VzZUlzRG93biA9IGZhbHNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb3VzZUlzRG93biAmJiB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMpIHtcclxuICAgICAgICAgICAgbGV0IGlkID0gKDxIVE1MRWxlbWVudD5ldmVudC5jdXJyZW50VGFyZ2V0KS5pZDtcclxuICAgICAgICAgICAgbGV0IGNvb3JkcyA9IGlkLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgICAgIGxldCByb3cgPSBwYXJzZUludChjb29yZHNbY29vcmRzLmxlbmd0aCAtIDJdKTtcclxuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IHBhcnNlSW50KGNvb3Jkc1tjb29yZHMubGVuZ3RoIC0gMV0pO1xyXG4gICAgICAgICAgICAvLyBTZSBobyBpZ25vcmF0byBsJ2luaXppbyBkZWxsYSBzZWxlemlvbmUgbmVsIG1vdXNlZG93biBsbyByZWN1cGVybyBxdWlcclxuICAgICAgICAgICAgaWYgKHRoaXMucmFuZ2VTdGFydFdhc0lnbm9yZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guc2luZ2xlQ2VsbFNlbGVjdGlvbih7IHZpZXc6IGV2ZW50LnZpZXcsIHJhbmdlOiBmYWxzZSB9LCB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMucm93LCB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMuY29sdW1uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmFuZ2VTdGFydFdhc0lnbm9yZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbl9ILnNpbmdsZUNlbGxTZWxlY3Rpb24oeyB2aWV3OiBldmVudC52aWV3LCByYW5nZTogdHJ1ZSB9LCByb3csIGNvbHVtbiwgdGhpcy5maXJzdENvb3JkaW5hdGVzKTtcclxuICAgICAgICAgICAgdGhpcy5sb2dnZXIubG9nKGBtb3VzZSBtb3ZlIG92ZXIgJHtyb3d9OiR7Y29sdW1ufWApO1xyXG4gICAgICAgICAgICB0aGlzLnJhbmdlU2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBtb3VzZXVwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLlJhbmdlU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBpZCA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQuY3VycmVudFRhcmdldCkuaWQ7XHJcbiAgICAgICAgbGV0IGNvb3JkcyA9IGlkLnNwbGl0KCdfJyk7XHJcbiAgICAgICAgbGV0IHJvdyA9IHBhcnNlSW50KGNvb3Jkc1tjb29yZHMubGVuZ3RoIC0gMl0pO1xyXG4gICAgICAgIGxldCBjb2x1bW4gPSBwYXJzZUludChjb29yZHNbY29vcmRzLmxlbmd0aCAtIDFdKTtcclxuXHJcbiAgICAgICAgLy8gU2UgaWwgbW91c2V1cCB2aWVuZSBlZmZldHR1YXRvIHN1bGxhIHN0ZXNzYSBjZWxsYSBkZWwgcHJpbW8gbW91c2Vkb3duIGUgc2lhbW8gaW4gbW9kYWxpdMOgIGRpIHNlbGV6aW9uZSBkZXNlbGV6aW9ubyBsYSBjZWxsYSBwZXJjaMOpIMOoIHVuIHNlbXBsaWNlIGNsaWNrXHJcbiAgICAgICAgaWYgKHRoaXMubW91c2VJc0Rvd24gJiYgdGhpcy5maXJzdENvb3JkaW5hdGVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0Q29vcmRpbmF0ZXMucm93ID09IHJvdyAmJiB0aGlzLmZpcnN0Q29vcmRpbmF0ZXMuY29sdW1uID09IGNvbHVtbiAmJiAhZXZlbnQuY3RybEtleSAmJiAhdGhpcy5yYW5nZVN0YXJ0V2FzSWdub3JlZCAmJiB0aGlzLlNlbGVjdGlvbilcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uX0guc2luZ2xlQ2VsbFNlbGVjdGlvbih7IHZpZXc6IGV2ZW50LnZpZXcsIHJhbmdlOiBmYWxzZSB9LCByb3csIGNvbHVtbik7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkgfHwgIXRoaXMuU2VsZWN0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5nZVNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW91c2VJc0Rvd24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxvZ2dlci5sb2coYG1vdXNlIGxpZnRlZCB1cGApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vKiBQaWFuZ29cclxuICAgIHByaXZhdGUgRXNUZHNDYWNoZTogeyBbaWQ6IHN0cmluZ106IEVzVGQgfSA9IHt9O1xyXG5cclxuICAgIHB1YmxpYyBnZXRDZWxsUmVmZXJlbmNlKG9iamVjdDogYW55LCBjb2x1bW46IHN0cmluZyk6IEVzVGQge1xyXG4gICAgICAgIGxldCBma1RoaXNTaGl0SW1PdXQgPSB0aGlzLnV0aUV4dHMuZGVlcENsb25lKG9iamVjdCk7XHJcbiAgICAgICAgdGhpcy51dGlsaXRpZXNfSC5jYWxjdWxhdGVIYXNoKFtma1RoaXNTaGl0SW1PdXRdKTtcclxuICAgICAgICBsZXQgcHJvcCA9IGNvbHVtbjtcclxuICAgICAgICBsZXQgaGFzaCA9IGZrVGhpc1NoaXRJbU91dC5faGFzaDtcclxuXHJcbiAgICAgICAgbGV0IHRvUmV0ID0gdGhpcy5Fc1Rkc0NhY2hlW2Ake3Byb3B9XyR7aGFzaH1gXTtcclxuICAgICAgICByZXR1cm4gdG9SZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyQ2VsbChldmVudDogRXNUZFJlZmVyZW5jZSkge1xyXG4gICAgICAgIHRoaXMuRXNUZHNDYWNoZVtgJHtldmVudC5pZH1fJHtldmVudC5oYXNofWBdID0gZXZlbnQuc2VsZlxyXG4gICAgfVxyXG4gICAgLy8qIFBpYW5nbyBhbmNvcmFcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVzVGRSZWZlcmVuY2Uge1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIGhhc2g6IHN0cmluZzsgXHJcbiAgICBzZWxmOiBFc1RkO1xyXG59IiwiPCEtLSBQYXRhY2NoaW5vIGRpIGF1dG9hZ2dpb3JuYW1lbnRvIC0tPlxyXG48ZGl2IGNsYXNzPVwidy0xMDBcIiAqbmdJZj1cIkF1dG9VcGRhdGVcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwdWxsLXJpZ2h0XCI+XHJcbiAgICAgICAge3snVXBkYXRlIGV2ZXJ5JyB8IGxvY2FsaXplIDogbGN9fSZuYnNwOzxpbnB1dCBbcmVhZG9ubHldPVwiYXV0b1VwZGF0ZVwiIG1heGxlbmd0aD1cIjNcIiBjbGFzcz1cImZvcm0tY29udHJvbCBlc3QtY3VzdG9tLWlucHV0XCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlY29uZHNcIiBbbmdNb2RlbE9wdGlvbnNdPVwieydzdGFuZGFsb25lJzogdHJ1ZX1cIiAvPiZuYnNwO3t7J3NlY29uZC9zJyB8IGxvY2FsaXplIDogbGN9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodCBtLXQtMlwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImVzdC1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFsobmdNb2RlbCldPVwiYXV0b1VwZGF0ZVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7J3N0YW5kYWxvbmUnOiB0cnVlfVwiIChuZ01vZGVsQ2hhbmdlKT1cImF1dG9VcGRhdGVDaGFuZ2VkKCk7XCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1zbGlkZXIgcm91bmRcIj48L2Rpdj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2xlYXJmaXhcIj48L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2ICpuZ0lmPVwiVmlld1wiIGNsYXNzPVwiZXN0LXJlbGF0aXZlXCIgW3N0eWxlLmhlaWdodF09XCJIZWlnaHRcIiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJFbXB0eVNwYWNlQmFja2dyb3VuZENvbG9yXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiRmlyc3RCaW5kICYmIFNob3dMb2FkaW5nT25Cb290c3RyYXBcIiBjbGFzcz1cImVzdC1sb2FkaW5nLWJveFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlc3QtbG9hZGluZy1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtc3Bpbm5lciBmYS1zcGluXCI+PC9zcGFuPiZuYnNwO3t7J1BlcmZvcm1pbmcgVGFibGUgYm9vdHN0cmFwJyB8IGxvY2FsaXplOiBsY319Li4uXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZXN0LXRvcC1wYWdlclwiICpuZ0lmPVwiUGFnaW5nU3R5bGUgPT0gJ2JvdGgnIHx8IFBhZ2luZ1N0eWxlID09ICd0b3AnXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luZ0VsZW1lbnRcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJlc3QtdG9wLWFsbHNlbGVjdFwiICpuZ0lmPVwiY2FuU2VsZWN0QWxsIHx8IChWaWV3Py5zZWxlY3Rpb24gfHwgYXJyYXltb2RlU2VsZWN0aW9uKT8uYWxsXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgKHNlbGVjdGVkT2JqZWN0cyA9PSAtMSA/ICgnQWxsIHRoZScgfCBsb2NhbGl6ZSA6IGxjKSA6ICgoc2VsZWN0ZWRPYmplY3RzIHx8IDApIHwgbnVtYmVyIDogJzAuMC0wJyA6IGxjLkxvY2FsZSkpICsgJyAnICsgKChzZWxlY3RlZE9iamVjdHMgPT0gMSA/ICdPYmplY3QgU2VsZWN0ZWQnIDogJ09iamVjdHMgU2VsZWN0ZWQnKSB8IGxvY2FsaXplIDogbGMpIH19PC9zcGFuPiZuYnNwO1xyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXN0LWxpbmsgZXN0LWlubGluZVwiIChjbGljayk9XCJzZWxlY3Rpb25fSC5zZWxlY3RBbGxPclJlc2V0U2VsZWN0aW9uKClcIj57eyAoVmlldz8uc2VsZWN0aW9uIHx8IGFycmF5bW9kZVNlbGVjdGlvbik/LmFsbCA/ICgnUmVzZXQgU2VsZWN0aW9uJyB8IGxvY2FsaXplIDogbGMpIDogKCdTZWxlY3QgRXZlcnl0aGluZycgfCBsb2NhbGl6ZSA6IGxjKX19PC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgZGF0YXRhYmxlIGVzdC1mdWxsLWhlaWdodCB7e0NvbnRhaW5lckNsYXNzfX1cIiBbc3R5bGUubWF4LWhlaWdodC5weF09XCJNYXhIZWlnaHRcIj5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJ7eyBUYWJsZUNsYXNzIH19IGVzdC1tYXJnaW4tYm90dG9tLTEwIGVzdFwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XCIgIFtjbGFzcy5lc3QtaGlnaC1kZW5zaXR5XT1cIkhpZ2hDZWxsRGVuc2l0eVwiPlxyXG4gICAgICAgICAgICA8dGhlYWQgW2hpZGRlbl09XCJIZWFkZXJIaWRkZW4gfHwgRmlyc3RCaW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEFnZ2l1bmdvIGlsIHBlenpvIGNoZSBnZXN0aXNjZSBsYSBzZWxlemlvbmUgZGkgdHV0dG8gc2UgYXR0aXZvIGRhIGNvbmZpZyAtLT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIihTZWxlY3RBbGwgJiYgIVNpbmdsZVNlbGVjdGlvbikgfHwgUGFnaW5nU3R5bGUgIT0gJ2JvdHRvbSdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJlc3Qtbm8tc2VsZWN0aW9uXCIgW2F0dHIuY29sc3Bhbl09XCJDb2x1bW5zLkdsb2JhbFwiIFtjbGFzcy5lc3QtaGlkZGVuLXZpZXddPVwiIWNhblNlbGVjdEFsbCAmJiAhKFZpZXc/LnNlbGVjdGlvbiB8fCBhcnJheW1vZGVTZWxlY3Rpb24pPy5hbGwgJiYgUGFnaW5nU3R5bGUgPT0gJ2JvdHRvbSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJlc3QtaGlkZGVuLXZpZXcgYXBwLW1hcmdpbi1ib3R0b20tMFwiPsKnPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gQmxvY2NvIGhlYWRlciBncm91cCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJSb3dUaEdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgbGV2ZWwgb2YgUm93VGhHcm91cHM7IHRyYWNrQnk6IElEVHJhY2tCeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGNlbGwgb2YgbGV2ZWw7IHRyYWNrQnk6IElEVHJhY2tCeVwiIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5TcGFuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3QtcGlubmVkLWhlYWRlcl09XCJjZWxsLlBpbm5lZFwiIFtjbGFzcy5lc3QtY29sLW1pbl09XCJjZWxsLlBpbm5lZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LWx0YWItYm9yZGVyXT1cImNlbGwuQm9yZGVyc1wiIFtjbGFzcy5lc3QtcnRhYi1ib3JkZXJdPVwiY2VsbC5Cb3JkZXJzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXN0LXRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbC5QaW5uZWQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGgucHhdPVwiUGlubmVkQ29udGFpbmVyV2lkdGhcIiBjbGFzcz1cImVzdC1waW5uZWQtYm9yZGVyIGVzdC1jZWxsLWdyb3VwLXBhZGRpbmdcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjZWxsLlBpbm5lZCAmJiBjZWxsLkNvbnRlbnQ7IEVsc2U6IGNlbGwuVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2NlbGwuQ29udGVudH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFSb3dUaEdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkhhc0hlYWRlckdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJHcm91cFJlZlwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJFeHBvcnRcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQmxvY2NvIGhlYWRlciBncm91cCBzZWNvbmRhcmlvIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIkhhc1NlY29uZGFyeUhlYWRlckdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWNvbmRhcnlIZWFkZXJHcm91cFJlZlwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJFeHBvcnRcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEJsb2NjbyBlZmZldHRpdm8gZGVnbGkgaGVhZGVyIC0tPlxyXG4gICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGVhZC0+dHItPmRlYnVnX2Jsb2NrXCIgc3R5bGU9XCJkaXNwbGF5OiBub25lOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGVjdGlvbjoge3tTZWxlY3Rpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBIYXNQaW5uZWRDb2x1bW5zOiB7e0hhc1Bpbm5lZENvbHVtbnN9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheU1vZGU6IHt7YXJyYXlNb2RlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld01vZGU6IHt7dmlld01vZGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBVc2VDdXN0b21DZWxsczoge3tVc2VDdXN0b21DZWxsc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJvd1RIczoge3shIVJvd1RIc319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJvd1RIcy5sZW5ndGg6IHt7Um93VEhzPy5sZW5ndGh9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb246IHt7ISFEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIEFnZ2l1bmdvIHVuYSBjaGVja2JveCBzZSBsYSBzZWxlemlvbmUgw6ggYXR0aXZhIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImVzdC1jb2wtbWluXCIgKm5nSWY9XCJTZWxlY3Rpb24gJiYgIUhhc1Bpbm5lZENvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiIVNpbmdsZVNlbGVjdGlvblwiIGNsYXNzPVwiZXN0LXBvaW50ZXJcIiB0eXBlPVwiY2hlY2tib3hcIiBbZGlzYWJsZWRdPVwiU2VsZWN0aW9uRGlzYWJsZWRcIiBbKG5nTW9kZWwpXT1cImdsb2JhbENoZWNrXCIgW25nTW9kZWxPcHRpb25zXT1cInsnc3RhbmRhbG9uZSc6IHRydWV9XCIgKG5nTW9kZWxDaGFuZ2UpPVwiZ2xvYmFsQ2hlY2tDaGFuZ2VkKCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBIZWFkZXIgY2hlIHZhbGdvbm8gcGVyIHZpZXcgbW9kZSBlIGFycmF5IG1vZGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFycmF5TW9kZSB8fCB2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEluIHVuYSB0YWJlbGxhIGJhc2UgcHJlbmRvIHNlbXBsaWNlbWVudGUgaSB0aCBzY3JpdHRpIGRhbGwndXRlbnRlIG5lbGwnSFRNTCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIighVXNlQ3VzdG9tQ2VsbHMgfHwgIVJvd1RIcyB8fCBSb3dUSHMubGVuZ3RoID09IDApICYmICFEeW5hbWljUm93Q29sdW1uc0RlZmluaXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJSZWZcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlIGhvIHVuIG1vZGVsbG8gZGluYW1pY28gZGVsbCdvZ2dldHRvIGNyZW8gbGUgY29sb25uZSBpbiBiYXNlIGFsbGUgcHJvcHJpZXTDoCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIighVXNlQ3VzdG9tQ2VsbHMgfHwgIVJvd1RIcyB8fCBSb3dUSHMubGVuZ3RoID09IDApICYmIER5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0Zvcj1cImxldCBvcGVyYXRpb24gb2YgRHluYW1pY09wZXJhdGlvbnM7IHRyYWNrQnk6IGlkVHJhY2tCeVwiIGNsYXNzPVwiZXN0LWNvbC1taW4gZXN0LW5vLXNpZGUtcGFkZGluZ1wiPjwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93SGVhZGVyIG9mIER5bmFtaWNSb3dDb2x1bW5zRGVmaW5pdGlvbjsgdHJhY2tCeTogUHJvcGVydHlOYW1lVHJhY2tCeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dIZWFkZXIuVmlzaWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJPcmRlckJ5Q29sdW1uXCIgIGlkPVwiZXN0aF97e3Jvd0hlYWRlci5Qcm9wZXJ0eU5hbWV9fVwiIGVzLXRoPVwie3tyb3dIZWFkZXIuUHJvcGVydHlOYW1lfX1cIiBjbGFzcz1cInt7VXNlckRlZmluZWREeW5hbWljQ29scyA/ICgocm93SGVhZGVyLkNsc3MgfHwgJycpICsgKHJvd0hlYWRlci5IZWFkZXJXcmFwcyA/ICcnIDogJyBlc3Qtbm93cmFwJykpIDogJyBlc3Qtbm93cmFwJ319XCIgW09yZGVyXT1cInJvd0hlYWRlci5EYXRhT3JkZXJcIiBbUmVzaXphYmxlXT1cIkNvbHVtbnNSZXNpemFibGVcIiBbT3JkZXJhYmxlXT1cInJvd0hlYWRlci5PcmRlcmFibGVcIiBbT3JkZXJCeV09XCJPcmRlckJ5Q29sdW1uXCIgW1NlYXJjaEluUHJvZ3Jlc3NdPVwiISFyZXNlYXJjaEluUHJvZ3Jlc3NcIiAob25PcmRlckNoYW5nZSk9XCJ0aE9yZGVyQ2hhbmdlZChyb3dIZWFkZXIuUHJvcGVydHlOYW1lLCAkZXZlbnQpXCI+e3tyb3dIZWFkZXIuRGVzY3JpcHRpb259fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIiFPcmRlckJ5Q29sdW1uXCIgaWQ9XCJlc3RoX3t7cm93SGVhZGVyLlByb3BlcnR5TmFtZX19XCIgZXMtdGg9XCJ7e3Jvd0hlYWRlci5Qcm9wZXJ0eU5hbWV9fVwiIGNsYXNzPVwie3tVc2VyRGVmaW5lZER5bmFtaWNDb2xzID8gKChyb3dIZWFkZXIuQ2xzcyB8fCAnJykgKyAocm93SGVhZGVyLkhlYWRlcldyYXBzID8gJycgOiAnIGVzdC1ub3dyYXAnKSkgOiAnIGVzdC1ub3dyYXAnfX1cIiBbT3JkZXJdPVwicm93SGVhZGVyLkRhdGFPcmRlclwiIFtSZXNpemFibGVdPVwiQ29sdW1uc1Jlc2l6YWJsZVwiIFtPcmRlcmFibGVdPVwicm93SGVhZGVyLk9yZGVyYWJsZVwiIFtPcmRlckJ5XT1cIk9yZGVyQnlDb2x1bW5cIj57e3Jvd0hlYWRlci5EZXNjcmlwdGlvbn19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2Ugbm9uIGhvIHVuIG1vZGVsbG8gZGluYW1pY28gbWEgaW52ZWNlIGRlbGxlIGNlbGxlIGN1c3RvbSwgZ2VuZXJvIGdsaSBoZWFkZXIgaW4gYmFzZSBhaSByb3cgdGggLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJVc2VDdXN0b21DZWxscyAmJiBSb3dUSHM/Lmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIkhhc1Bpbm5lZENvbHVtbnNcIiBjbGFzcz1cImVzdC1waW5uZWQtaGVhZGVyIGVzdC1jb2wtbWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGgucHhdPVwiUGlubmVkQ29udGFpbmVyV2lkdGhcIiBjbGFzcz1cImVzdC1waW5uZWQtYm9yZGVyIGVzdC1zaW1wbGUtYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJlc3QtY29sLW1pbiBlc3Qtbm8tYm9yZGVyXCIgKm5nSWY9XCJTZWxlY3Rpb25cIiBbc3R5bGUud2lkdGgucHhdPVwiMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIiFTaW5nbGVTZWxlY3Rpb25cIiBjbGFzcz1cImVzdC1wb2ludGVyXCIgdHlwZT1cImNoZWNrYm94XCIgW2Rpc2FibGVkXT1cIlNlbGVjdGlvbkRpc2FibGVkXCIgWyhuZ01vZGVsKV09XCJnbG9iYWxDaGVja1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7J3N0YW5kYWxvbmUnOiB0cnVlfVwiIChuZ01vZGVsQ2hhbmdlKT1cImdsb2JhbENoZWNrQ2hhbmdlZCgpO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3dIZWFkZXIgb2YgUm93VEhzOyB0cmFja0J5OiBJRFRyYWNrQnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cInJvd0hlYWRlciAmJiByb3dIZWFkZXIuVmlzaWJsZSAmJiByb3dIZWFkZXIuUGlubmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwicm93SGVhZGVyLlBpbm5lZFdpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcy10aD1cInt7cm93SGVhZGVyLklEfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tyb3dIZWFkZXIuQ2xhc3MgfHwgJyd9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVzdC1waW5uZWQtaW50ZXJuYWwtaGVhZGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3Qtbm8tYm9yZGVyXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3Qtbm93cmFwXT1cIiFyb3dIZWFkZXIuV3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1Bpbm5lZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbRml4ZWRdPVwicm93SGVhZGVyLkZpeGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3JkZXJdPVwicm93SGVhZGVyLk9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmVzaXphYmxlXT1cIkNvbHVtbnNSZXNpemFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcmRlcmFibGVdPVwicm93SGVhZGVyLk9yZGVyYWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW09yZGVyQnldPVwiT3JkZXJCeUNvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlYXJjaEluUHJvZ3Jlc3NdPVwiISFyZXNlYXJjaEluUHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvblVucGlubmluZyk9XCJjb2x1bW5NZXRhZGF0YV9ILnVucGluQ29sdW1uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbk9yZGVyQ2hhbmdlKT1cInRoT3JkZXJDaGFuZ2VkKHJvd0hlYWRlci5JRCwgJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicm93SGVhZGVyLlRlbXBsYXRlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd0hlYWRlci5UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHJvd0hlYWRlci5NdWx0aSA/IHJvd0hlYWRlci5NdWx0aUNvbnRlbnQgOiBudWxsIH0gXCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcm93SGVhZGVyLlRlbXBsYXRlXCI+e3tyb3dIZWFkZXIuQ29udGVudH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93SGVhZGVyIG9mIFJvd1RIczsgdHJhY2tCeTogSURUcmFja0J5XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJ0aGVhZC0+dHItPnRoLT5kZWJ1Z19ibG9ja1wiIHN0eWxlPVwiZGlzcGxheTogbm9uZTsgd2hpdGUtc3BhY2U6IHByZS13cmFwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dIZWFkZXI6IHt7ISFyb3dIZWFkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dIZWFkZXIuVmlzaWJsZToge3tyb3dIZWFkZXI/LlZpc2libGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dIZWFkZXIuUGlubmVkOiB7e3Jvd0hlYWRlcj8uUGlubmVkfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93SGVhZGVyLlRlbXBsYXRlOiB7eyEhcm93SGVhZGVyLlRlbXBsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoICpuZ0lmPVwicm93SGVhZGVyICYmIHJvd0hlYWRlci5WaXNpYmxlICYmICFyb3dIZWFkZXIuUGlubmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXMtdGg9XCJ7e3Jvd0hlYWRlci5JRH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7e3Jvd0hlYWRlci5DbGFzcyB8fCAnJ319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiIHJvd0hlYWRlci5BbGlnbm1lbnQgfHwgbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3QtbHRhYi1ib3JkZXJdPVwicm93SGVhZGVyLkxlZnRCb3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZXN0LXJ0YWItYm9yZGVyXT1cInJvd0hlYWRlci5SaWdodEJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3Qtbm93cmFwXT1cIiFyb3dIZWFkZXIuV3JhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtPcmRlcl09XCJyb3dIZWFkZXIuT3JkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbUmVzaXphYmxlXT1cIkNvbHVtbnNSZXNpemFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3JkZXJhYmxlXT1cInJvd0hlYWRlci5PcmRlcmFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbT3JkZXJCeV09XCJPcmRlckJ5Q29sdW1uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1NlYXJjaEluUHJvZ3Jlc3NdPVwiISFyZXNlYXJjaEluUHJvZ3Jlc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25PcmRlckNoYW5nZSk9XCJ0aE9yZGVyQ2hhbmdlZChyb3dIZWFkZXIuSUQsICRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3dIZWFkZXIuVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicm93SGVhZGVyLlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogcm93SGVhZGVyLk11bHRpID8gcm93SGVhZGVyLk11bHRpQ29udGVudCA6IG51bGwgfVwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFyb3dIZWFkZXIuVGVtcGxhdGVcIj57e3Jvd0hlYWRlci5Db250ZW50fX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLVBlciBsJ2VsaW1pbmF6aW9uZSBtaSBzZXJ2ZSB1biBoZWFkZXIgYWdnaXVudGl2by0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIlJlbW92YWxcIiBbY2xhc3MuZXN0LXJpZ2h0LTldPVwiRXhwb3J0IHx8IEhpZGRlbkNvbHVtbnNcIiBjbGFzcz1cImVzdC1jb2wtbWluIGVzdC1zdGlja3ktbGFzdC1jb2x1bW5cIj48c3BhbiBjbGFzcz1cImZhIGZhLXRyYXNoXCI+PC9zcGFuPjwvdGg+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1QZXIgbCdlc3BvcnRhemlvbmUgbWkgc2VydmUgbCdoZWFkZXIgZXh0cmEgZGEgY3VpIGZhY2NpbyB1c2NpcmUgaSAzIHBhbGxvY2NoaS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cIkV4cG9ydCB8fCBIaWRkZW5Db2x1bW5zIHx8IENvbHVtbnNPcmRlcmluZyB8fCBDb3JuZXJNZW51T3B0aW9uc1wiIGNsYXNzPVwiZXN0LXRhYmxlLWRvdHRlZC1tZW51IGVzdC1zdGlja3ktbGFzdC1jb2x1bW4gZXN0LWNvbC1taW4gdGV4dC1zbS1jZW50ZXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQmxvY2NvIGNvbiBpIDMgcGFsbG9jY2hpIGNoZSB0aXJhIGZ1b3JpIGlsIGNvbnRleHQgbWVudSBkZWxsZSBvcGVyYXppb25pIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCIgY29udGFpbmVyPVwiYm9keVwiIHBsYWNlbWVudD1cImJvdHRvbSByaWdodFwiIGRyb3Bkb3duICNkcm9wZG93bj1cImJzLWRyb3Bkb3duXCIgW2F1dG9DbG9zZV09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBkcm9wZG93blRvZ2dsZSBjbGFzcz1cImZhIGZhLWVsbGlwc2lzLXYgZXN0LWZzLTE4IGVzdC1wb2ludGVyIGVzdC1wYWRkaW5nLTNcIj48L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqZHJvcGRvd25NZW51IGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJpZ2h0IGVzdC1icmluZy10by1mcm9udC1zdHJvbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXN0LXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nSWY9XCJIaWRkZW5Db2x1bW5zIHx8IENvbHVtbnNPcmRlcmluZ1wiIChjbGljayk9XCJjb2x1bW5NZXRhZGF0YV9ILnJlc2V0Q29sdW1uVmlzU2VsZWN0aW9uKCk7IGNoYW5nZUNvbHVtblZpc2liaWxpdHlNb2RhbC5zaG93KCk7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUhpZGRlbkNvbHVtbnMgJiYgQ29sdW1uc09yZGVyaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ29sdW1ucyBPcmRlcicgfCBsb2NhbGl6ZSA6IGxjfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkhpZGRlbkNvbHVtbnMgJiYgIUNvbHVtbnNPcmRlcmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NvbHVtbnMgVmlzaWJpbGl0eScgfCBsb2NhbGl6ZSA6IGxjfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkhpZGRlbkNvbHVtbnMgJiYgQ29sdW1uc09yZGVyaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ29sdW1ucyBWaXNpYmlsaXR5IGFuZCBPcmRlcicgfCBsb2NhbGl6ZSA6IGxjfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiICpuZ0lmPVwiRXhwb3J0ICYmIENTVkV4cG9ydFwiIChjbGljayk9XCJleHBvcnRfSC50cnlFeHBvcnQoJ0NTVicpXCI+e3snRXhwb3J0IFZpZXcnIHwgbG9jYWxpemUgOiBsY319IChDU1YpPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdJZj1cIkV4cG9ydCAmJiBYTFNYRXhwb3J0XCIgKGNsaWNrKT1cImV4cG9ydF9ILnRyeUV4cG9ydCgnWExTWCcpXCI+e3snRXhwb3J0IFZpZXcnIHwgbG9jYWxpemUgOiBsY319IChYTFNYKTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBDb3JuZXJNZW51T3B0aW9uczsgdHJhY2tCeTogaWRUcmFja0J5XCIgKGNsaWNrKT1cImNvcm5lckFjdGlvbkNsaWNrZWQob3B0aW9uLmlkKVwiPnt7b3B0aW9uLmRlc2NyaXB0aW9ufX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICAgICAgICA8dGJvZHkgW2hpZGRlbl09XCJCb2R5SGlkZGVuIHx8IEZpcnN0QmluZFwiIFtjbGFzcy5lc3Qtbm8tc2VsZWN0aW9uXT1cIlJhbmdlU2VsZWN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tQ29uIHNlbGVjdGlvbiBhdHRpdmEgcmljaGlhbW8gaWwgdGVtcGxhdGUgY2hlIGdlc3Rpc2NlIGlsIGNvbnRleHQgbWVudS0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJUQm9keVNlbGVjdGlvbjsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgc2VsRGlzYWJsZWQ6IGFycmF5TW9kZSA/IGZhbHNlIDogU2VsZWN0aW9uRGlzYWJsZWQsIHNlbDogU2VsZWN0aW9uIH19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tU2VuemEgc2VsZWN0aW9uIHJpY2hpYW1vIGlsIHRlbXBsYXRlIGNoZSBOT04gZ2VzdGlzY2UgaWwgY29udGV4dCBtZW51LS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIVNlbGVjdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJUQm9keVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgKm5nSWY9XCJQYWdpbmdTdHlsZSA9PSAnYm90aCcgfHwgUGFnaW5nU3R5bGUgPT0gJ2JvdHRvbSdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnaW5nRWxlbWVudFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBUZW1wbGF0ZSBjaGUgY29udGllbmUgdHV0dGUgbGUgaW5mbyBkaSBwYWdpbmF6aW9uZSBpbiBtb2RvIGRhIHBvdGVybG8gcmVwbGljYXJlIGFuY2hlIHNvcHJhIC0tPlxyXG48bmctdGVtcGxhdGUgI3BhZ2luZ0VsZW1lbnQ+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUZpcnN0QmluZFwiPlxyXG4gICAgICAgIDwhLS0gUHVsc2FudGkgYXZhbnRpLWluZGlldHJvIGRpIHBhZ2luYXppb25lIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJQYWdlck9wdGlvbnMuU2hvd1BhZ2luZyAmJiBQYWdlck9wdGlvbnMuU2hvd0J1dHRvbnMgJiYgKFBhZ2VyT3B0aW9ucy5QYWdlckNvdW50ID4gMTAgfHwgUGFnZXJPcHRpb25zLlBhZ2VyQ291bnQgPT0gLTEpXCIgY2xhc3M9XCJwdWxsLXJpZ2h0IGJ0bi10b29sYmFyXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJQYWdlck9wdGlvbnMuVmlldz8ucGFnaW5nYXZhaWxhYmxlIHx8IHZpZXdNb2RlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnaW5nQnV0dG9uczsgY29udGV4dDogeyAkaW1wbGljaXQ6IHsgTWFyZ2luOiB0cnVlLCBBVFA6IGFkZFRvUGFnZS5iaW5kKHRoaXMpLCBHVFA6IGdvVG9QYWdlLmJpbmQodGhpcyksIEFycmF5OiBhcnJheVB1bHNhbnRpIH19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXJyYXlNb2RlICYmIFVzZUFycmF5TW9kZVBhZ2luZyAmJiAhU2VhcmNoVmlld1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luZ0J1dHRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IE1hcmdpbjogdHJ1ZSwgQVRQOiBhcnJheUFkZFRvUGFnZS5iaW5kKHRoaXMpLCBHVFA6IGFycmF5R29Ub1BhZ2UuYmluZCh0aGlzKSwgQXJyYXk6IGFycmF5UHVsc2FudGkgfX1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBQYWdpbmF0b3JlIGRvdmUgYXBwYXJlIGxhIGNvdW50IGUgbGUgb3B6aW9uaSBkaSBwYWdpbmF6aW9uZSAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHVsbC1yaWdodFwiICpuZ0lmPVwiUGFnZXJPcHRpb25zLlNob3dDb3VudCB8fCBQYWdlck9wdGlvbnMuU2hvd1BhZ2luZ09wdGlvbnNcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1tdC1taW4tNVwiICpuZ0lmPVwiUGFnZXJPcHRpb25zLlNob3dQYWdpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxhcHAtcGFnaW5nICpuZ0lmPVwiIVBhZ2VyT3B0aW9ucy5Vc2VzVmlld1wiIFtDb3VudExhYmVsXT1cIkNvdW50TGFiZWxcIiBbU2hvd1BhZ2luZ109XCJQYWdlck9wdGlvbnMuU2hvd1BhZ2luZ09wdGlvbnNcIiBbU2hvd0NvdW50XT1cIlBhZ2VyT3B0aW9ucy5TaG93Q291bnRcIiBbUGFnZXJDb3VudF09XCJQYWdlck9wdGlvbnMuUGFnZXJDb3VudFwiIFtXYXJuT25BbGxdPVwiZmFsc2VcIiBbQ3VycmVudFBhZ2VTaXplXT1cIkFycmF5bW9kZUl0ZW1zUGVyUGFnZVwiIChwYWdpbmdTZWxlY3RlZCk9XCJpdGVtc19ILnJlZnJlc2hQYWdpbmcoJGV2ZW50KVwiPjwvYXBwLXBhZ2luZz5cclxuICAgICAgICAgICAgICAgIDxhcHAtcGFnaW5nICpuZ0lmPVwiUGFnZXJPcHRpb25zLlVzZXNWaWV3XCIgW0NvdW50TGFiZWxdPVwiQ291bnRMYWJlbFwiIFtTaG93UGFnaW5nXT1cIlBhZ2VyT3B0aW9ucy5TaG93UGFnaW5nT3B0aW9uc1wiIFtTaG93Q291bnRdPVwiUGFnZXJPcHRpb25zLlNob3dDb3VudFwiIFtQYWdlckNvdW50XT1cIlBhZ2VyT3B0aW9ucy5QYWdlckNvdW50XCIgW0dyb3VwTW9kZV09XCJQYWdlck9wdGlvbnMuU2VhcmNoZXMgPT0gJ2dyb3VwcydcIiBbQWxsU2VhcmNoXT1cIkFsbFNlYXJjaFwiIFtWaWV3XT1cIlBhZ2VyT3B0aW9ucy5WaWV3XCIgKHBhZ2luZ1NlbGVjdGVkKT1cIm9uSXRlbXNQZXJQYWdlQ2hhbmdlZCgkZXZlbnQpO1wiPjwvYXBwLXBhZ2luZz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNsZWFyZml4XCI+PC9kaXY+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVGVtcGxhdGUgY2hlIGNvbnRpZW5lIGkgcHVsc2FudGkgcGVyIGNhbWJpYXJlIHBhZ2luYSAtLT5cclxuPG5nLXRlbXBsYXRlICNwYWdpbmdCdXR0b25zIGxldC1vcHRpb25zPlxyXG4gICAgPGRpdiBjbGFzcz1cImVzdC1mbGV4XCIgW2NsYXNzLmVzdC1tYXJnaW4tbGVmdC01MF09XCJvcHRpb25zLk1hcmdpblwiPlxyXG4gICAgICAgIDxhIGNsYXNzPVwiYnRuXCIgY2xhc3M9XCJlc3QtcGFnZS1wcmV2IGFwcC1wb2ludGVyXCIgKGNsaWNrKT1cIm9wdGlvbnMuQVRQKC0xLCBvcHRpb25zLnNlcGFyYXRvcilcIj48c3BhbiBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdFwiPjwvc3Bhbj48L2E+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbnMuQXJyYXlcIiBjbGFzcz1cImVzdC1pbmxpbmVcIj48YSAqbmdGb3I9XCJsZXQgcCBvZiBvcHRpb25zLkFycmF5OyB0cmFja0J5OiB2YWxUcmFja0J5XCIgY2xhc3M9XCJidG4gZXN0LXBhZ2Utc2VsIHt7cC5jc3NDbGFzc319XCIgKGNsaWNrKT1cIm9wdGlvbnMuR1RQKHAudmFsLCBvcHRpb25zLnNlcGFyYXRvcilcIj57e3AudmFsfX08L2E+PC9kaXY+XHJcbiAgICAgICAgPGEgY2xhc3M9XCJidG5cIiBjbGFzcz1cImVzdC1wYWdlLW5leHQgYXBwLXBvaW50ZXJcIiAoY2xpY2spPVwib3B0aW9ucy5BVFAoMSwgb3B0aW9ucy5zZXBhcmF0b3IpXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9zcGFuPjwvYT5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBRdWVzdGkgZHVlIHRlbXBsYXRlIHJhcHByZXNlbnRhbm8gZWZmZXR0aXZhbWVudGUgaWwgYm9keSBkZWxsYSB0YWJlbGxhLiBlc3NlbmRvIGlsIHRyIGwndW5pY2EgY29zYSBjaGUgZGF2dmVybyBjYW1iaWEsIGlsIHJlc3RvIMOoIHRlbXBsYXRpenphdG8gLS0+XHJcbjxuZy10ZW1wbGF0ZSAjVEJvZHlTZWxlY3Rpb24gbGV0LXRlbXBsYXRlT3B0aW9ucz5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYm91bmRTb3VyY2U7IGxldCBldmVuID0gZXZlbjsgbGV0IGk9aW5kZXg7IHRyYWNrQnk6IGJvZHlUcmFja0J5XCI+XHJcbiAgICAgICAgPHRyICpuZ0lmPVwiaXRlbS5fdmlzaWJsZSB8fCAoIUhpZXJhcmNoeSAmJiAhQXJyYXlHcm91cGluZylcIlxyXG4gICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5fcm93Q2xhc3MgPyBpdGVtLl9yb3dDbGFzcyA6ICcnXCJcclxuICAgICAgICAgICAgW2NsYXNzLmVzdC1saW5lLXRocm91Z2hdPVwiaXRlbS5yZW1vdmVkIHx8IGl0ZW0uZGVsZXRlZFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5lc3QtcG9pbnRlcl09XCIhaXRlbS5sb2NrZWRcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXN0LXdoaXRlLXNlbGVjdGVkXT1cIml0ZW0uX3NlbGVjdGVkICYmICFpdGVtLmxvY2tlZFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5lc3QtcmddPVwiaXRlbS5fZ3JvdXBcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXN0LXJnLXNlcF09XCJpdGVtLl9zZXBcIlxyXG4gICAgICAgICAgICBbY29udGV4dE1lbnVdPVwiIWl0ZW0ubG9ja2VkID8gKENvbnRleHRNZW51IHx8IGVtcHR5TWVudSkgOiBlbXB0eU1lbnVcIiBbY29udGV4dE1lbnVTdWJqZWN0XT1cIml0ZW1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiIVJhbmdlU2VsZWN0aW9uICYmIGhhbmRsZVJvd0NsaWNrKCRldmVudCwgaXRlbSwgdHJ1ZSlcIlxyXG4gICAgICAgICAgICAoY29udGV4dG1lbnUpPVwib25SaWdodENsaWNrKCk7XCI+XHJcblxyXG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIhaXRlbS5sb2NrZWQgJiYgIWl0ZW0uX3NlcCAmJiAhSGFzUGlubmVkQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0ICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGVtcGxhdGVPcHRpb25zLnNlbERpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmVzdC1wb2ludGVyXT1cIiFpdGVtLmxvY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5fc2VsZWN0ZWRcIiBuYW1lPVwiY2hlY2t7e2l9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGhhbmRsZUNsaWNrKCRldmVudCwgaXRlbSk7XCI+XHJcbiAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIihpdGVtLmxvY2tlZCB8fCBpdGVtLl9zZXApICYmICFIYXNQaW5uZWRDb2x1bW5zXCI+PC90ZD5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLl9zZXBcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZ3JvdXBQYWdlcjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctY29udGFpbmVyPiA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5fc2VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzaWNDb2x1bW5zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUNlbGxzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGksIHRlbXBsYXRlT3B0aW9uczogdGVtcGxhdGVPcHRpb25zIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJib2R5RGVsZXRlQW5kRXhwb3J0OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBldmVuOiBldmVuLCBpdGVtOiBpdGVtLCBpbmRleDogaSB9fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjVEJvZHk+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJvdW5kU291cmNlOyBsZXQgaSA9IGluZGV4LCBsZXQgZXZlbiA9IGV2ZW47IHRyYWNrQnk6IGJvZHlUcmFja0J5XCI+XHJcbiAgICAgICAgPHRyICpuZ0lmPVwiaXRlbS5fdmlzaWJsZSB8fCAhSGllcmFyY2h5XCJcclxuICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uX3Jvd0NsYXNzID8gaXRlbS5fcm93Q2xhc3MgOiAnJ1wiXHJcbiAgICAgICAgICAgIFtjbGFzcy5lc3QtbGluZS10aHJvdWdoXT1cIml0ZW0ucmVtb3ZlZCB8fCBpdGVtLmRlbGV0ZWRcIlxyXG4gICAgICAgICAgICBbY2xhc3MuZXN0LXJnXT1cIml0ZW0uX2dyb3VwXCJcclxuICAgICAgICAgICAgW2NsYXNzLmVzdC1yZy1zZXBdPVwiaXRlbS5fc2VwXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVJvd0NsaWNrKCRldmVudCwgaXRlbSwgZmFsc2UpXCI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5fc2VwXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImdyb3VwUGFnZXI7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLWNvbnRhaW5lcj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5fc2VwXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYmFzaWNDb2x1bW5zOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbUNlbGxzOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSwgaW5kZXg6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlEZWxldGVBbmRFeHBvcnQ7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IGV2ZW46IGV2ZW4sIGl0ZW06IGl0ZW0sIGluZGV4OiBpIH19XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC90cj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNncm91cFBhZ2VyIGxldC1pdGVtPlxyXG4gICAgPHRkIGNsYXNzPVwiZXN0LXBpbm5lZC1ib2R5IFwiICpuZ0lmPVwiSGFzUGlubmVkQ29sdW1uc1wiPlxyXG4gICAgICAgIDxkaXYgW3N0eWxlLndpZHRoLnB4XT1cIlBpbm5lZENvbnRhaW5lcldpZHRoXCIgY2xhc3M9XCJlc3QtcGlubmVkLWJvcmRlciBlc3QtY2VsbC1ncm91cC1wYWRkaW5nXCI+PC9kaXY+XHJcbiAgICA8L3RkPlxyXG4gICAgPHRkICpuZ0lmPVwiaXRlbS5fZ3JvdXBsZXZlbCA+IDFcIiBbYXR0ci5jb2xzcGFuXT1cIml0ZW0uX2dyb3VwbGV2ZWwtMVwiPjwvdGQ+XHJcbiAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJDb2x1bW5zLlZpc2libGVVbnBpbm5lZCAtIChpdGVtLl9ncm91cGxldmVsID4gMCA/IGl0ZW0uX2dyb3VwbGV2ZWwgLSAxIDogMClcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXN0LXJnLXNlcC1mbGV4LXJpZ2h0XCIgKm5nSWY9XCJSb3dHcm91cGluZ1BhZ2luZ1N0eWxlID09ICdyaWdodCdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1yZy1wYWdlXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luZ0J1dHRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHNlcGFyYXRvcjogaXRlbSwgQVRQOiBhZGRUb1BhZ2VHcm91cC5iaW5kKHRoaXMpLCBHVFA6IGdvVG9QYWdlR3JvdXAuYmluZCh0aGlzKSwgQXJyYXk6IGl0ZW0uYnV0dG9ucyB9fVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXN0LXJnLWlwcFwiICpuZ0lmPVwiKGl0ZW0uc2VhcmNoZXMgPT0gJ2dyb3VwcycgPyBpdGVtLnZpZXcuZ3JvdXBjb3VudCA6IGl0ZW0udmlldy5vYmplY3Rjb3VudCkgPiAxMFwiPjxhcHAtcGFnaW5nIFtDb3VudExhYmVsXT1cIkNvdW50TGFiZWxcIiBbQWxsU2VhcmNoXT1cIkFsbFNlYXJjaFwiIFtHcm91cE1vZGVdPVwiaXRlbS5zZWFyY2hlcyA9PSAnZ3JvdXBzJ1wiIFtQYWdlckNvdW50XT1cIml0ZW0uc2VhcmNoZXMgPT0gJ2dyb3VwcycgPyBpdGVtLnZpZXcuZ3JvdXBjb3VudCA6IGl0ZW0udmlldy5vYmplY3Rjb3VudFwiIFtWaWV3XT1cIml0ZW0udmlld1wiIChwYWdpbmdTZWxlY3RlZCk9XCJvbkdyb3VwSXRlbXNQZXJQYWdlQ2hhbmdlZChpdGVtLCAkZXZlbnQpO1wiPjwvYXBwLXBhZ2luZz48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1yZy1zZXAtZmxleC1sZWZ0XCIgKm5nSWY9XCJSb3dHcm91cGluZ1BhZ2luZ1N0eWxlID09ICdsZWZ0J1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXN0LXJnLWlwcFwiPjxhcHAtcGFnaW5nIFtBbGxTZWFyY2hdPVwiQWxsU2VhcmNoXCIgW0NvdW50TGFiZWxdPVwiQ291bnRMYWJlbFwiIFtHcm91cE1vZGVdPVwiaXRlbS5zZWFyY2hlcyA9PSAnZ3JvdXBzJ1wiIFtQYWdlckNvdW50XT1cIml0ZW0uc2VhcmNoZXMgPT0gJ2dyb3VwcycgPyBpdGVtLnZpZXcuZ3JvdXBjb3VudCA6IGl0ZW0udmlldy5vYmplY3Rjb3VudFwiIFtWaWV3XT1cIml0ZW0udmlld1wiIChwYWdpbmdTZWxlY3RlZCk9XCJvbkdyb3VwSXRlbXNQZXJQYWdlQ2hhbmdlZChpdGVtLCAkZXZlbnQpO1wiPjwvYXBwLXBhZ2luZz48L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVzdC1yZy1wYWdlXCIgKm5nSWY9XCIoaXRlbS5zZWFyY2hlcyA9PSAnZ3JvdXBzJyA/IGl0ZW0udmlldy5ncm91cGNvdW50IDogaXRlbS52aWV3Lm9iamVjdGNvdW50KSA+IDEwXCI+PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luZ0J1dHRvbnM7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IHNlcGFyYXRvcjogaXRlbSwgQVRQOiBhZGRUb1BhZ2VHcm91cC5iaW5kKHRoaXMpLCBHVFA6IGdvVG9QYWdlR3JvdXAuYmluZCh0aGlzKSwgQXJyYXk6IGl0ZW0uYnV0dG9ucyB9fVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC90ZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gUXVlc3RvIHRlbXBsYXRlIGNvbnRpZW5lIGxhIHByaW50IGNvbmRpemlvbmFsZSBzdSB0YWJlbGxlIHNlbXBsaWNpLCBjb24gaGVhZGVyIGUgYm9keSBzY3JpdHRpIGEgbWFuYXp6YSAtLT5cclxuPG5nLXRlbXBsYXRlICNiYXNpY0NvbHVtbnMgbGV0LWl0ZW0gbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoIVVzZUN1c3RvbUNlbGxzIHx8IEVtcHR5Um93VGRzKSAmJiAhRHluYW1pY1Jvd0NvbHVtbnNEZWZpbml0aW9uXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJvZHlSZWY7IGNvbnRleHQgOiB7JGltcGxpY2l0OiBpdGVtLCBpbmRleDogaW5kZXh9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEVkaXRvciBsZXQtY3R4PlxyXG4gICAgPCEtLSBVbiBwbycgdHJpc3RlIG1hIHF1ZXN0byDDqCBpbCBtZXRvZG8gcGnDuSBzZW1wbGljZSBwZXIgZ2VzdGlyZSBpbCBjYW1iaW8gZGkgbW9kZWxsbyAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdHguaXRlbS5wcm9wZXJ0aWVzXCI+XHJcbiAgICAgICAgPGZvcm0tYWRhcHRpdmUgW0Zvcm1MYXlvdXRdPVwiZmFsc2VcIiBbVmFsaWRhdGlvbl09XCJmYWxzZVwiIFtPcHRpb25zXT1cImN0eC5kZWZpbml0aW9uLkVkaXRvck9wdGlvbnNcIiBbRm9jdXNTdWJqZWN0XT1cIkZvY3VzU3ViamVjdFwiIFsobmdNb2RlbCldPVwiY3R4Lml0ZW0ucHJvcGVydGllc1tjdHguZGVmaW5pdGlvbi5Qcm9wZXJ0eU5hbWVdXCIgbmFtZT1cInt7IGN0eC5kZWZpbml0aW9uLlByb3BlcnR5TmFtZSArICdfJyArIGN0eC5pdGVtLl9oYXNoIH19XCIgW1R5cGVdPVwiY3R4LmRlZmluaXRpb24uUHJvcGVydHlUeXBlXCIgW1NvdXJjZV09XCJjdHguZGVmaW5pdGlvbi5Qcm9wZXJ0eVNvdXJjZVwiIChpbnB1dEZpbmFsaXplZCk9XCJjdHguZmluYWxpemVyKClcIj48L2Zvcm0tYWRhcHRpdmU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY3R4Lml0ZW0ucHJvcGVydGllc1wiPlxyXG4gICAgICAgIDxmb3JtLWFkYXB0aXZlIFtGb3JtTGF5b3V0XT1cImZhbHNlXCIgW1ZhbGlkYXRpb25dPVwiZmFsc2VcIiBbT3B0aW9uc109XCJjdHguZGVmaW5pdGlvbi5FZGl0b3JPcHRpb25zXCIgW0ZvY3VzU3ViamVjdF09XCJGb2N1c1N1YmplY3RcIiBbKG5nTW9kZWwpXT1cImN0eC5pdGVtW2N0eC5kZWZpbml0aW9uLlByb3BlcnR5TmFtZV1cIiBuYW1lPVwie3sgY3R4LmRlZmluaXRpb24uUHJvcGVydHlOYW1lICsgJ18nICsgY3R4Lml0ZW0uX2hhc2ggfX1cIiBbVHlwZV09XCJjdHguZGVmaW5pdGlvbi5Qcm9wZXJ0eVR5cGVcIiBbU291cmNlXT1cImN0eC5kZWZpbml0aW9uLlByb3BlcnR5U291cmNlXCIgKGlucHV0RmluYWxpemVkKT1cImN0eC5maW5hbGl6ZXIoKVwiPjwvZm9ybS1hZGFwdGl2ZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RXNUZCBsZXQtY3R4PlxyXG4gICAgPCEtLSBUT0RPOiBGb3JtYXR0YXJlIGlsIHZhbG9yZSBpbiBiYXNlIGEgdmFsVHlwZS50eXBlIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN0eC50eXBlID09ICdlbnVtJ1wiPlxyXG4gICAgICAgIHt7IChjdHgudmFsdWUgfCBlc3RfbG9va3VwIDogY3R4LmRlZmluaXRpb24uUHJvcGVydHlTb3VyY2UpLmRlc2NyaXB0aW9uIH19XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdHgudHlwZSAhPSAnZW51bSdcIj5cclxuICAgICAgICB7e2N0eC52YWx1ZX19XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY3VzdG9tQ2VsbHMgbGV0LWl0ZW0gbGV0LW9wdD1cInRlbXBsYXRlT3B0aW9uc1wiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlVzZUN1c3RvbUNlbGxzICYmICFFbXB0eVJvd1Rkc1wiPlxyXG4gICAgICAgIDwhLS0gQ2VsbGEgY2hlIGFnZ3JlZ2EgdHV0dGUgbGUgY29sb25uZSBjaGUgZGV2b25vIGVzc2VyZSBwaW5uYXRlIC0tPlxyXG4gICAgICAgIDx0ZCAqbmdJZj1cIkhhc1Bpbm5lZENvbHVtbnNcIiBjbGFzcz1cImVzdC1waW5uZWQtYm9keSBlc3QtY29sLW1pblwiIFtjbGFzcy5lc3Qtd2hpdGUtc2VsZWN0ZWRdPVwiaXRlbS5fc2VsZWN0ZWRcIj5cclxuICAgICAgICAgICAgPGRpdiBbc3R5bGUud2lkdGgucHhdPVwiUGlubmVkQ29udGFpbmVyV2lkdGhcIiBjbGFzcz1cImVzdC1waW5uZWQtYm9yZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCIhaXRlbS5sb2NrZWQgJiYgIWl0ZW0uX3NlcCAmJiBTZWxlY3Rpb25cIiBjbGFzcz1cImVzdC1uby1ib3JkZXIgZXN0LWNvbC1taW5cIiBbc3R5bGUud2lkdGgucHhdPVwiMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2Rpc2FibGVkXT1cIm9wdC5zZWxEaXNhYmxlZFwiIFtjbGFzcy5lc3QtcG9pbnRlcl09XCIhaXRlbS5sb2NrZWRcIiBbKG5nTW9kZWwpXT1cIml0ZW0uX3NlbGVjdGVkXCIgbmFtZT1cImNoZWNre3tpdGVtLl9oYXNofX1cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBoYW5kbGVDbGljaygkZXZlbnQsIGl0ZW0pO1wiPlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImVzdC1uby1ib3JkZXIgZXN0LWNvbC1taW5cIiAqbmdJZj1cIihpdGVtLmxvY2tlZCB8fCBpdGVtLl9zZXApICYmIFNlbGVjdGlvblwiIFtzdHlsZS53aWR0aC5weF09XCIyMFwiPjwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiBSb3dURHNbaXRlbS5faGFzaF07IGxldCBpbmRleCA9IGluZGV4OyB0cmFja0J5OiBJRFRyYWNrQnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbC5QaW5uZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImN1c3RvbVRkOyBjb250ZXh0OiB7IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogaXRlbSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsOiBjZWxsLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IHRydWUsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXR1czogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdPy5baW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXR1c1VwOiBzZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbCAtIDFdPy5baW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXR1c0Rvd246IHNlbGVjdGlvblN0YXR1c1tpdGVtLl9vcmRpbmFsICsgMV0/LltpbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdHVzTGVmdDogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdPy5baW5kZXggLSAxXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXNSaWdodDogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdPy5baW5kZXggKyAxXSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPCEtLSBCb2R5IGVmZmV0dGl2byBkZWxsYSByaWdhIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNlbGwgb2YgUm93VERzW2l0ZW0uX2hhc2hdOyBsZXQgaW5kZXggPSBpbmRleDsgdHJhY2tCeTogSURUcmFja0J5XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2VsbC5QaW5uZWQ7XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tVGQ7IGNvbnRleHQ6IHsgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogaXRlbSwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNlbGw6IGNlbGwsIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaW5uZWQ6IGZhbHNlLCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uU3RhdHVzOiBzZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbF0/LltpbmRleF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblN0YXR1c1VwOiBzZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbCAtIDFdPy5baW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXNEb3duOiBzZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbCArIDFdPy5baW5kZXhdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXNMZWZ0OiBzZWxlY3Rpb25TdGF0dXNbaXRlbS5fb3JkaW5hbF0/LltpbmRleCAtIDFdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25TdGF0dXNSaWdodDogc2VsZWN0aW9uU3RhdHVzW2l0ZW0uX29yZGluYWxdPy5baW5kZXggKyAxXSBcclxuICAgICAgICAgICAgICAgICAgICB9O1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gQ2VsbGEgY3VzdG9taXp6YXRhLCBlbGVtZW50byBncmFmaWNvIGJhc2UgcGVyIGxhIHRhYmVsbGEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjY3VzdG9tVGQgbGV0LWl0ZW0gbGV0LWNlbGw9XCJjZWxsXCIgbGV0LWluZGV4PVwiaW5kZXhcIiBsZXQtcGlubmVkPVwicGlubmVkXCIgbGV0LXNlbFN0YXR1cz1cInNlbGVjdGlvblN0YXR1c1wiIGxldC1zZWxTdGF0dXNVcD1cInNlbGVjdGlvblN0YXR1c1VwXCIgbGV0LXNlbFN0YXR1c0Rvd249XCJzZWxlY3Rpb25TdGF0dXNEb3duXCIgbGV0LXNlbFN0YXR1c0xlZnQ9XCJzZWxlY3Rpb25TdGF0dXNMZWZ0XCIgbGV0LXNlbFN0YXR1c1JpZ2h0PVwic2VsZWN0aW9uU3RhdHVzUmlnaHRcIj5cclxuXHJcbiAgICA8IS0tIEN1c3RvbWl6emF6aW9uZSBwZXIgY2VsbGUgY29uIGljb25hIChzb25vIGVzc2VuemlhbG1lbnRlIG9wZXJhemlvbmkgc2VtcGxpY2kgZSBiYXN0YSkgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbC5JY29uQ2xhc3MgJiYgY2VsbC5WaXNpYmxlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjZWxsLkNvbmRpdGlvbkZpZWxkIHx8ICgoKGl0ZW0ucHJvcGVydGllcyB8fCBpdGVtKSB8IGVzdF9wcm9waW5zZW5zaXRpdmUgOiBjZWxsLkNvbmRpdGlvbkZpZWxkKSA9PSBjZWxsLkNvbmRpdGlvblZhbHVlKVwiPlxyXG4gICAgICAgICAgICA8dGQgW2NsYXNzLmVzdC1uby1yaWdodC1wYWRkaW5nXT1cImluZGV4ICE9IER5bmFtaWNPcGVyYXRpb25zLmxlbmd0aCAtMVwiIFtjbGFzcy5lc3Qtbm8tbGVmdC1wYWRkaW5nXT1cImluZGV4ICE9IDBcIiBjbGFzcz1cImVzdC1jb2wtbWluXCI+PHNwYW4gdGl0bGU9XCJ7e2NlbGwuVGl0bGV9fVwiIGNsYXNzPVwie3tjZWxsLkljb25DbGFzc319IGVzdC1wb2ludGVyXCIgKGNsaWNrKT1cImR5bmFtaWNPcGVyYXRpb24oaXRlbSwgY2VsbC5JRClcIj57e2NlbGwuQ29udGVudH19PC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuQ29uZGl0aW9uRmllbGQgJiYgKCgoaXRlbS5wcm9wZXJ0aWVzIHx8IGl0ZW0pIHwgZXN0X3Byb3BpbnNlbnNpdGl2ZSA6IGNlbGwuQ29uZGl0aW9uRmllbGQpICE9IGNlbGwuQ29uZGl0aW9uVmFsdWUpXCI+XHJcbiAgICAgICAgICAgIDx0ZCBjbGFzcz1cImVzdC1jb2wtbWluIGVzdC1uby1zaWRlLXBhZGRpbmdcIj48L3RkPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgLSAgIEFUVEVOWklPTkU6IEdsaSBzcGF6aSBmcmEgZ2xpIElucHV0IGRpIHF1ZXN0byBtZWdhIHRkIHNvbm8gc2lnbmlmaWNhdGl2aSBlIGRpdmlkb25vIGxhIGRpY2hpYXJhemlvbmUgaW4gc2V6aW9uaTogICAgLVxyXG4gICAgLSAgIC4gR2VuZXJpY2hlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLVxyXG4gICAgLSAgIC4gR2VzdGlvbmUgYWxsaW5lYW1lbnRvIGUgY29sb3JpIHBlciBsYSBtb2RhbGl0w6AgcmVwb3J0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1cclxuICAgIC0gICAuIEdlc3Rpb25pIGdyYWZpY2hlIHBhcnRpY29sYXJpIHBlciBpbCBQaW5uZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1cclxuICAgIC0gICAuIEdlc3Rpb25lIGRlbGxhIHNlbGV6aW9uZSBhIHNpbmdvbGEgY2VsbGEgaW4gYXNzZW56YSBkaSBwaW5uZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1cclxuICAgIC0gICAuIEdlc3Rpb25lIGNsaWNrIGNsYXNzaWNvIGUgc2VsZXppb25lIG11bHRpY2VsbGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxyXG5cclxuICAgIDx0ZCAqbmdJZj1cIiFjZWxsLkljb25DbGFzcyAmJiBjZWxsLlZpc2libGVcIlxyXG4gICAgICAgIGVzLXRkPVwie3tjZWxsLlByb3BlcnR5IHx8IGNlbGwuSUR9fVwiXHJcbiAgICAgICAgaWQ9XCJlc3RkX3t7Y2VsbC5Qcm9wZXJ0eSB8fCBjZWxsLklEfX1fe3tpdGVtLl9vcmRpbmFsfX1fe3tpbmRleH19XCJcclxuICAgICAgICBjbGFzcz1cInt7IGNlbGwuQ2xhc3MgfX1cIlxyXG5cclxuICAgICAgICBbQ29udGV4dF09XCJpdGVtLl9oYXNoXCJcclxuICAgICAgICBbY2xhc3MuZXN0LWRlZmF1bHQtcm93LWhlaWdodF09XCIhSGlnaENlbGxEZW5zaXR5XCJcclxuICAgICAgICBbY2xhc3MuZXN0LXdoaXRlLXNlbGVjdGVkXT1cIml0ZW0uX3NlbGVjdGVkXCJcclxuICAgICAgICBbY2xhc3MuZXN0LW5vLXNlbGVjdGlvbl09XCJFZGl0YWJsZSAmJiBjZWxsLlByb3BlcnR5TmFtZVwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1yZy1oZHJdPVwiY2VsbC5Hcm91cEhlYWRlclwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1yZy1hZ2ddPVwiY2VsbC5Hcm91cEFnZ3JlZ2F0aW9uXCJcclxuICAgICAgICBbY2xhc3MuZXN0LW5vd3JhcF09XCJIaWVyYXJjaHkgfHwgIWNlbGwuV3JhcHNcIlxyXG5cclxuICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCIgKCFwaW5uZWQgJiYgY2VsbC5BbGlnbm1lbnQpID8gY2VsbC5BbGlnbm1lbnQgOiBudWxsXCJcclxuICAgICAgICBbc3R5bGUuY29sb3JdPVwiKCFwaW5uZWQgJiYgaXRlbS5mb3JlY29sb3JzICYmIGNlbGwuUHJvcEFjY2Vzc29yKSA/IGl0ZW0uZm9yZWNvbG9yc1tjZWxsLlByb3BBY2Nlc3Nvcl0gOiBudWxsXCJcclxuICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCIoIXBpbm5lZCAmJiBpdGVtLmJhY2tjb2xvcnMgJiYgY2VsbC5Qcm9wQWNjZXNzb3IpID8gaXRlbS5iYWNrY29sb3JzW2NlbGwuUHJvcEFjY2Vzc29yXSA6IG51bGxcIlxyXG4gICAgICAgIFxyXG4gICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJwaW5uZWQgPyBjZWxsLlBpbm5lZFdpZHRoIDogbnVsbFwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1uby1ib3JkZXJdPVwicGlubmVkXCJcclxuXHJcbiAgICAgICAgW2NsYXNzLmVzdC1uby1ib3JkZXItYm90dG9tXT1cInNlbFN0YXR1c0Rvd24/LnRib3JkZXJcIlxyXG4gICAgICAgIFtjbGFzcy5lc3Qtbm8tYm9yZGVyLXRvcF09XCJzZWxTdGF0dXNVcD8uYmJvcmRlclwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1sdGFiLWJvcmRlcl09XCJjZWxsLkxlZnRCb3JkZXIgJiYgIXNlbFN0YXR1cz8ubGJvcmRlciAmJiAhc2VsU3RhdHVzTGVmdD8ucmJvcmRlclwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1ydGFiLWJvcmRlcl09XCJjZWxsLlJpZ2h0Qm9yZGVyICYmICFzZWxTdGF0dXM/LnJib3JkZXIgJiYgIXNlbFN0YXR1c1JpZ2h0Py5sYm9yZGVyXCJcclxuICAgICAgICBcclxuICAgICAgICBbY2xhc3MuZXN0LXNlbGVjdGVkLWNlbGxdPVwic2VsU3RhdHVzPy5zZWxlY3RlZFwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1jZWxsLWxib3JkZXJdPVwiIHNlbFN0YXR1cz8ubGJvcmRlclwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1jZWxsLXJib3JkZXJdPVwiIHNlbFN0YXR1cz8ucmJvcmRlclwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1jZWxsLXRib3JkZXJdPVwiIHNlbFN0YXR1cz8udGJvcmRlclwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1jZWxsLWJib3JkZXJdPVwiIHNlbFN0YXR1cz8uYmJvcmRlclwiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1jZWxsLWxib3JkZXItdG1wXT1cIiFjZWxsLkxlZnRCb3JkZXIgJiYgIXNlbFN0YXR1cz8ubGJvcmRlciAmJiAhc2VsU3RhdHVzPy5sb3ZlcmxhcHNcIlxyXG4gICAgICAgIFtjbGFzcy5lc3QtY2VsbC1yYm9yZGVyLXRtcF09XCIhY2VsbC5SaWdodEJvcmRlciAmJiAhc2VsU3RhdHVzPy5yYm9yZGVyICYmICFzZWxTdGF0dXM/LnJvdmVybGFwc1wiXHJcbiAgICAgICAgW2NsYXNzLmVzdC1jZWxsLXRib3JkZXItdG1wXT1cIiFzZWxTdGF0dXM/LnRib3JkZXIgJiYgIXNlbFN0YXR1cz8udG92ZXJsYXBzXCJcclxuICAgICAgICBbY2xhc3MuZXN0LWNlbGwtYmJvcmRlci10bXBdPVwiIXNlbFN0YXR1cz8uYmJvcmRlciAmJiAhc2VsU3RhdHVzPy5ib3ZlcmxhcHNcIlxyXG5cclxuICAgICAgICAobW91c2Vkb3duKT1cIm1vdXNlZG93bigkZXZlbnQsIGNlbGwsIGl0ZW0pXCJcclxuICAgICAgICAobW91c2VlbnRlcik9XCJtb3VzZWVudGVyKCRldmVudClcIlxyXG4gICAgICAgIChtb3VzZXVwKT1cIm1vdXNldXAoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uQ2VsbEdlbmVyYXRpb24pPVwicmVnaXN0ZXJDZWxsKCRldmVudClcIlxyXG4gICAgICAgIChjbGljayk9XCJkYkNsaWNrRWRpdE9yU2luZ2xlQ2xpY2tSb3dTZWxlY3Rpb24oJGV2ZW50LCBjZWxsLCBpdGVtKVwiPlxyXG5cclxuICAgICAgICA8ZGl2IFtjbGFzcy5lc3QtZWRpdC1oaWRkZW5dPVwiY2VsbC5fZWRpdGluZ1wiIFtjbGFzcy5lc3QtcHJlXT1cIiEoSGllcmFyY2h5ICYmIGluZGV4ID09IDApXCI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICNERUJVRz5cclxuICAgICAgICAgICAgICAgIDwhLS0gRGVidWcgYm94IGluIGNhc28gbGEgcm9iYSBjaGUgdmllbmUgc2NyaXR0YSBuZWxsZSBjZWxsZSBub24gdG9ybmkuIFNjaXJ2ZXJlIHF1aSBpIHByb3ByaSBiaW5kaW5nIHBlciBjb250cm9sbGFyZSBjb3NlIC0tPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gOTAlIFRlbXBsYXRlIGRpc3BvbmliaWxlLCBxdWluZGkgZGVyaXZhbnRlIGRhICp0ZCwgY29udHJvbGxvIGdpdXN0byBjaGUgbm9uIHNpYSB1biBmaWVsZCBwYXJ0aWNvbGFyZSBtdWx0aSAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGwuVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2VsbC5NdWx0aVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsLlRlbXBsYXRlOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNlbGwuTXVsdGlcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbC5UZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IChpdGVtW2NlbGwuTXVsdGlQcm9wXSA/IGl0ZW1bY2VsbC5NdWx0aVByb3BdW2NlbGwuTXVsdGlJbmRleF0gOiB7fSkgfVwiPjwvbmctY29udGFpbmVyPjwvc3Bhbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDglXHJcbiAgICAgICAgICAgICAgICBUZW1wbGF0ZSBub24gZGlzcG9uaWJpbGUsIHB1w7IgdmVuaXJlIGRhXHJcbiAgICAgICAgICAgICAgICBSb3V0ZVBhdGggaW4gY2FzbyBzaWEgdW4gbGluayBkaSB1bmEgdGFiZWxsYSBkaW5hbWljYVxyXG4gICAgICAgICAgICAgICAgUHJvcEFjY2Vzc29yIGluIGNhc28gZGkgUmVwb3J0Um93IChxdWluZGkgb2dnZXR0aSBjb24gXCJ2YWx1ZXNcIiAgZGVudHJvKSxcclxuICAgICAgICAgICAgICAgIG8gUmVuZGVyZXIgc2UgbW9kYWxpdMOgIGRpbmFtaWNhL3N0YW5kYXJkIChpbiBxdWFsIGNhc28gaWwgcmVuZGVyZXIgw6ggaWwgZGVmYXVsdClcclxuICAgICAgICAgICAgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY2VsbC5UZW1wbGF0ZSAmJiAhY2VsbC5NdWx0aSAmJiAhY2VsbC5Db250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8YSAqbmdJZj1cImNlbGwuUm91dGVQYXRoXCIgW3JvdXRlckxpbmtdPVwiaXRlbSB8IGVzdF9yb3V0ZXJsaW5rIDogY2VsbC5Sb3V0ZVBhdGggOiBjZWxsLlJvdXRlUGFyYW1ldGVyUHJvcGVydGllc1wiIGNsYXNzPVwiZXN0LWxpbmtcIiBbaW5uZXJIVE1MXT1cIml0ZW0ucHJvcGVydGllcyA/IGl0ZW0ucHJvcGVydGllc1tjZWxsLlByb3BlcnR5TmFtZV0gOiBpdGVtW2NlbGwuUHJvcGVydHlOYW1lXVwiPjwvYT5cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImNlbGwuUHJvcEFjY2Vzc29yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3soaXRlbS52YWx1ZXM/IGl0ZW0udmFsdWVzW2NlbGwuUHJvcEFjY2Vzc29yXSA6IGl0ZW1bY2VsbC5Qcm9wQWNjZXNzb3JdKSB8IGVzdF9mb3JtYXQ6IGNlbGwuRm9ybWF0IH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjZWxsLlByb3BBY2Nlc3NvciAmJiAhY2VsbC5Sb3V0ZVBhdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbC5Qcm9wZXJ0eU5hbWUgfCBlc3RfcmVuZGVyZXI6IHsgbmFtZTogY2VsbC5SZW5kZXJlck5hbWUsIHNyYzogRXNUZHNEaXJlY3RpdmUsIGZhbGxiYWNrOiBkZWZhdWx0RXNUZCB9OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogeyBkZWZpbml0aW9uOiBjZWxsLCB2YWx1ZTogaXRlbS5wcm9wZXJ0aWVzID8gaXRlbS5wcm9wZXJ0aWVzW2NlbGwuUHJvcGVydHlOYW1lXSA6IGl0ZW1bY2VsbC5Qcm9wZXJ0eU5hbWVdLCB0eXBlOiBjZWxsLlByb3BlcnR5VHlwZX0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSAxJSBTZSBpbiBtb2RhbGl0w6AgZ2VyYXJjaGljYSBtZXR0byBpbCB0ZCBwZXIgbmF2aWdhcmUgbGEgZ2VyYXJjaGlhIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiSGllcmFyY2h5ICYmIGluZGV4ID09IDBcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiSGllcmFyY2h5TmF2aWdhdG9yOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy1jb250YWluZXI+PC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8IS0tIDElIENvbnRlbnQgcHJvZ3JhbW1hdGljbyBwZXIgbGUgY2FzaXN0aWNoZSBkaSBSb3cgR3JvdXBpbmcgZWNjLi4uIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbC5Db250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICB7e2NlbGwuQ29udGVudH19XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY2VsbC5fZWRpdGluZ1wiIGNsYXNzPVwiZXN0LW10LW1pbi01XCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsLlByb3BlcnR5TmFtZSB8IGVzdF9lZGl0b3I6IHsgbmFtZTogY2VsbC5FZGl0b3JOYW1lLCBzcmM6IEVzVGRFZGl0b3JEaXJlY3RpdmVzLCBmYWxsYmFjazogZGVmYXVsdEVkaXRvcn07IGNvbnRleHQ6IHsgJGltcGxpY2l0OiB7IGRlZmluaXRpb246IGNlbGwsIGNvbHVtbkluZGV4OiBpbmRleCwgaXRlbTogaXRlbSwgZmluYWxpemVyOiBmaW5hbGl6ZVVzZXJFZGl0LmJpbmQodGhpcywgY2VsbCwgaXRlbSwgaW5kZXgpIH0gfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC90ZD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gTmF2aWdhdG9yZSBkZWxsYSBnZXJhcmNoaWEgZGkgdW5hIHZpZXcgZ2VyYXJjaGljYSwgY29uIHRhc3RvIHBlciBlc3BhbmRlcmUgZSBjb2xsYXNzYXJlIC0tPlxyXG48bmctdGVtcGxhdGUgI0hpZXJhcmNoeU5hdmlnYXRvciBsZXQtaXRlbT5cclxuICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0ucGFyZW50XCIgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWRvd25cIiBzdHlsZT1cInZpc2liaWxpdHk6aGlkZGVuXCI+PC9zcGFuPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJpdGVtLnBhcmVudCAmJiBpdGVtLl9leHBhbmRlZFwiIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1kb3duIGVzdC1wb2ludGVyIGVzdC1uby1zZWxlY3Rpb25cIiAoY2xpY2spPVwiaGllcmFyY2h5TW9kZV9ILmNvbGxhcHNlUGFyZW50KGl0ZW1bdGhpcy5Pd25LZXldKVwiPjwvc3Bhbj5cclxuICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5wYXJlbnQgJiYgIWl0ZW0uX2V4cGFuZGVkXCIgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXVwIGVzdC1wb2ludGVyIGVzdC1uby1zZWxlY3Rpb25cIiAoY2xpY2spPVwiaGllcmFyY2h5TW9kZV9ILmV4cGFuZFBhcmVudChpdGVtW3RoaXMuT3duS2V5XSlcIj48L3NwYW4+XHJcbiAgICAmbmJzcDtcclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gUHVsc2FudGkgZGkgZWxpbWluYXppb25lL3VuZG8gZWxpbWluYXppb25lIGVkIGVzcG9ydGF6aW9uZSBjaGUgdmFubm8gaW4gZm9uZG8gYWQgdW4gcmVjb3JkIGVkbGxhIHRhYmVsbGEgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjYm9keURlbGV0ZUFuZEV4cG9ydCBsZXQtb3B0aW9ucz5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJSZW1vdmFsICYmICFSZW1vdmFsQ29uZGl0aW9uXCI+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwiZXN0LXN0aWNreS1sYXN0LWNvbHVtbnt7b3B0aW9ucy5ldmVuPyAnLWFsdCcgOiAnJ319IHt7RXhwb3J0IHx8IEhpZGRlbkNvbHVtbnMgfHwgQ29ybmVyTWVudU9wdGlvbnMgPyAnZXN0LXJpZ2h0LTknIDogJyd9fVwiICpuZ0lmPVwiIShvcHRpb25zLml0ZW0ucmVtb3ZlZCB8fCBvcHRpb25zLml0ZW0uZGVsZXRlZClcIj48c3BhbiBjbGFzcz1cImZhIGZhLXJlbW92ZSBlc3QtcG9pbnRlciB0ZXh0LWRhbmdlclwiIFtoaWRkZW5dPVwib3B0aW9ucy5pdGVtLnJlbW92YWJsZSAhPSB1bmRlZmluZWQgJiYgIW9wdGlvbnMuaXRlbS5yZW1vdmFibGVcIiAoY2xpY2spPVwib25SZW1vdmFsLmVtaXQob3B0aW9ucy5pdGVtKVwiPjwvc3Bhbj48L3RkPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cImVzdC1zdGlja3ktbGFzdC1jb2x1bW57e29wdGlvbnMuZXZlbj8gJy1hbHQnIDogJyd9fSB7e0V4cG9ydCB8fCBIaWRkZW5Db2x1bW5zIHx8IENvcm5lck1lbnVPcHRpb25zID8gJ2VzdC1yaWdodC05JyA6ICcnfX1cIiAqbmdJZj1cIihvcHRpb25zLml0ZW0ucmVtb3ZlZCB8fCBvcHRpb25zLml0ZW0uZGVsZXRlZClcIj48c3BhbiBjbGFzcz1cImZhIGZhLXVuZG8gIHRleHQtd2FybmluZyBlc3QtcG9pbnRlclwiIChjbGljayk9XCJvbkFib3J0UmVtb3ZhbC5lbWl0KG9wdGlvbnMuaXRlbSlcIj48L3NwYW4+PC90ZD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlJlbW92YWwgJiYgUmVtb3ZhbENvbmRpdGlvblwiPlxyXG4gICAgICAgIDx0ZCBjbGFzcz1cImVzdC1zdGlja3ktbGFzdC1jb2x1bW57e29wdGlvbnMuZXZlbj8gJy1hbHQnIDogJyd9fSB7e0V4cG9ydCB8fCBIaWRkZW5Db2x1bW5zIHx8IENvcm5lck1lbnVPcHRpb25zID8gJ2VzdC1yaWdodC05JyA6ICcnfX1cIiAqbmdJZj1cIiEob3B0aW9ucy5pdGVtLnJlbW92ZWQgfHwgb3B0aW9ucy5pdGVtLmRlbGV0ZWQpICYmIG9wdGlvbnMuaXRlbVtSZW1vdmFsQ29uZGl0aW9uXVwiPjxzcGFuIGNsYXNzPVwiZmEgZmEtcmVtb3ZlIGVzdC1wb2ludGVyIHRleHQtZGFuZ2VyXCIgW2hpZGRlbl09XCJvcHRpb25zLml0ZW0ucmVtb3ZhYmxlICE9IHVuZGVmaW5lZCAmJiAhb3B0aW9ucy5pdGVtLnJlbW92YWJsZVwiIChjbGljayk9XCJvblJlbW92YWwuZW1pdChvcHRpb25zLml0ZW0pXCI+PC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgPHRkIGNsYXNzPVwiZXN0LXN0aWNreS1sYXN0LWNvbHVtbnt7b3B0aW9ucy5ldmVuPyAnLWFsdCcgOiAnJ319IHt7RXhwb3J0IHx8IEhpZGRlbkNvbHVtbnMgfHwgQ29ybmVyTWVudU9wdGlvbnMgPyAnZXN0LXJpZ2h0LTknIDogJyd9fVwiICpuZ0lmPVwiKG9wdGlvbnMuaXRlbS5yZW1vdmVkIHx8IG9wdGlvbnMuaXRlbS5kZWxldGVkKSAmJiBvcHRpb25zLml0ZW1bUmVtb3ZhbENvbmRpdGlvbl1cIj48c3BhbiBjbGFzcz1cImZhIGZhLXVuZG8gIHRleHQtd2FybmluZyBlc3QtcG9pbnRlclwiIChjbGljayk9XCJvbkFib3J0UmVtb3ZhbC5lbWl0KG9wdGlvbnMuaXRlbSlcIj48L3NwYW4+PC90ZD5cclxuICAgICAgICA8dGQgY2xhc3M9XCJlc3Qtc3RpY2t5LWxhc3QtY29sdW1ue3tvcHRpb25zLmV2ZW4/ICctYWx0JyA6ICcnfX0ge3tFeHBvcnQgfHwgSGlkZGVuQ29sdW1ucyB8fCBDb3JuZXJNZW51T3B0aW9ucyA/ICdlc3QtcmlnaHQtOScgOiAnJ319XCIgKm5nSWY9XCIhb3B0aW9ucy5pdGVtW1JlbW92YWxDb25kaXRpb25dXCI+PHNwYW4gY2xhc3M9XCJmYSBmYS1yZW1vdmUgZXN0LWhpZGRlbi12aWV3XCI+PC9zcGFuPjwvdGQ+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDx0ZCAqbmdJZj1cIkV4cG9ydCB8fCBIaWRkZW5Db2x1bW5zIHx8IENvcm5lck1lbnVPcHRpb25zXCIgY2xhc3M9XCJlc3Qtc3RpY2t5LWxhc3QtY29sdW1ue3tvcHRpb25zLmV2ZW4gJiYgIUhpZXJhcmNoeSA/ICctYWx0JyA6ICcnfX1cIj48L3RkPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBDb250ZXh0IG1lbnUgdnVvdG8gZGVmYXVsdCBwZXIgdHV0dGUgbGUgdGFiZWxsYSBjaGUgbm9uIGNlIGwnaGFubm8sIGluIG1vZG8gY2hlIGFsIGNsaWNrIGRlc3RybyBhcHBhaWEgXCJuZXNzdW5hIG9wIGRpc3BvbmliaWxlXCIgLS0+XHJcbjxjb250ZXh0LW1lbnUgI2VtcHR5TWVudT5cclxuICAgIDxuZy10ZW1wbGF0ZSBjb250ZXh0TWVudUl0ZW0+PHNwYW4+PGVtPnt7J05vIG9wZXJhdGlvbnMgYXZhaWxhYmxlJyB8IGxvY2FsaXplIDogbGN9fS4uLjwvZW0+PC9zcGFuPjwvbmctdGVtcGxhdGU+XHJcbjwvY29udGV4dC1tZW51PlxyXG5cclxuPCEtLSBNb2RhbCBwZXIgY2FtYmlhcmUgcG9zaXppb25lIGUgdmlzaWJpbGl0w6AgZGVsbGUgY29sb25uZSBkZWxsJ2VzLXRhYmxlIC0tPlxyXG48ZGl2IGJzTW9kYWwgI2NoYW5nZUNvbHVtblZpc2liaWxpdHlNb2RhbD1cImJzLW1vZGFsXCIgY2xhc3M9XCJtb2RhbCBmYWRlXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWRpYWxvZyBtb2RhbC1sZ1wiIGNka0RyYWc+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlciBlc3QtcG9pbnRlclwiIGNka0RyYWdIYW5kbGU+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZSBwdWxsLWxlZnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUhpZGRlbkNvbHVtbnMgJiYgQ29sdW1uc09yZGVyaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NvbHVtbnMgT3JkZXInIHwgbG9jYWxpemUgOiBsY319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkhpZGRlbkNvbHVtbnMgJiYgIUNvbHVtbnNPcmRlcmluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eydDb2x1bW5zIFZpc2liaWxpdHknIHwgbG9jYWxpemUgOiBsY319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkhpZGRlbkNvbHVtbnMgJiYgQ29sdW1uc09yZGVyaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NvbHVtbnMgVmlzaWJpbGl0eSBhbmQgT3JkZXInIHwgbG9jYWxpemUgOiBsY319XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjbG9zZSBwdWxsLXJpZ2h0XCIgKGNsaWNrKT1cImNoYW5nZUNvbHVtblZpc2liaWxpdHlNb2RhbC5oaWRlKCk7XCIgYXJpYS1sYWJlbD1cIkNsb3NlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhVE1QQ29sdW1uc0xpc3QgfHwgVE1QQ29sdW1uc0xpc3QubGVuZ3RoID09IDBcIiBjbGFzcz1cImNhcmQgY2FyZC1pbmZvIGVzdC1wYWRkaW5nLTEwIGVzdC1tYXJnaW4tYm90dG9tLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydUaGVyZSBhcmUgbm8gY29sdW1ucyBjb25maWd1cmVkIHRvIGJlIGhpZGRlbi9zaG93biBpbiB0aGlzIHZpZXcnIHwgbG9jYWxpemUgOiBsY319XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJUTVBDb2x1bW5zTGlzdCAmJiBUTVBDb2x1bW5zTGlzdC5sZW5ndGggPiAwXCIgc3R5bGU9XCJtYXgtaGVpZ2h0OjUwMHB4OyBvdmVyZmxvdy15OmF1dG9cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tQWFhYWFhYWggbGEgdHJpc3RlenphLi4uIHF1aSBtaSBzZXJ2aXJlYmJlIGwnZXMtdGFibGUgcGVyIGZhY2lsaXRhcmUgbGEgc2VsZXppb25lIG11bHRpcGxhIGVjYy4uLiBwZWNjYXRvIGNoZSBzZSBsYSBsaW5rbyBxdWkgZW50cm8gaW4gdW4gbG9vcCBpbXByZXNzaW9uYW50ZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXN0cmlwZWQgdGFibGUtc20gZXN0LW1hcmdpbi1ib3R0b20tMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiZXN0LWNvbC1taW5cIiAqbmdJZj1cIkhpZGRlbkNvbHVtbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZXN0LXBvaW50ZXJcIiB0eXBlPVwiY2hlY2tib3hcIiBbKG5nTW9kZWwpXT1cImdsb2JhbENvbFZpc0NoZWNrXCIgW25nTW9kZWxPcHRpb25zXT1cInsnc3RhbmRhbG9uZSc6IHRydWV9XCIgKG5nTW9kZWxDaGFuZ2UpPVwiY29sdW1uTWV0YWRhdGFfSC5nbG9iYWxDb2xWaXNDaGVja0NoYW5nZWQoKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHRoIGNsYXNzPVwiZXN0LWNvbC1taW5cIiAqbmdJZj1cIkNvbHVtbnNPcmRlcmluZ1wiPjwvdGg+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImVzdC1jb2wtbWluIGVzdC1ub3dyYXBcIj57eydDb2x1bW4gTmFtZScgfCBsb2NhbGl6ZSA6IGxjfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1GaWxsZXItLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBpbm5lciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggKm5nSWY9XCJEaXJlY3RpdmVzQmFzZWRcIiBjbGFzcz1cImVzdC1jb2wtbWluXCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJvcExpc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiVE1QQ29sdW1uc0xpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJjb2x1bW5NZXRhZGF0YV9ILmNvbHVtblJlb3JkZXJlZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiY29sdW1uTWV0YWRhdGFfSC5zb3J0UHJlZGljYXRlLmJpbmQodGhpcy5jb2x1bW5NZXRhZGF0YV9IKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImVzdC1kcm9wYm94XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBpdGVtIG9mIFRNUENvbHVtbnNMaXN0OyBsZXQgaSA9IGluZGV4OyBsZXQgbGFzdCA9IGxhc3Q7IHRyYWNrQnk6IGlkVHJhY2tCeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJlc3QtcG9pbnRlciBlc3QtZHJvcGxpc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3Qtd2hpdGUtc2VsZWN0ZWRdPVwibGFzdFNlbGVjdGVkSXRlbUlEID09IGl0ZW0uaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5lc3Qtbm8tc2VsZWN0aW9uXT1cIiFpdGVtLnZpc2libGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNka0RyYWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiaXRlbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhQ29sdW1uc09yZGVyaW5nIHx8IGl0ZW0uZml4ZWQgfHwgaXRlbS5waW5uZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiSGlkZGVuQ29sdW1uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NsYXNzLmVzdC1oaWRkZW4tdmlld109XCJpdGVtLmZpeGVkXCIgY2xhc3M9XCJlc3QtcG9pbnRlclwiIFsobmdNb2RlbCldPVwiaXRlbS52aXNpYmxlXCIgbmFtZT1cInZpc2libGV7e2l9fVwiIChuZ01vZGVsQ2hhbmdlKT1cImNvbHVtbk1ldGFkYXRhX0gudXBkYXRlR2xvYmFsQ29sVmlzQ2hlY2soKTtcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiZXN0LW5vd3JhcCBkcmFnLXZpc2libGVcIiAoY2xpY2spPVwiY29sdW1uTWV0YWRhdGFfSC5jb2x1bW5DbGlja2VkKGl0ZW0pO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50ZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQYWRyaSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS5wYXJlbnRUZW1wbGF0ZXMgJiYgaXRlbS5wYXJlbnRUZW1wbGF0ZXMubGVuZ3RoID4gMFwiIGNsYXNzPVwiZXN0LWZ3LWJvbGQgZXN0LWZzLTEzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCZuYnNwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBhcmVudCBvZiBpdGVtLnBhcmVudFRlbXBsYXRlczsgbGV0IGxhc3Q9bGFzdDsgdHJhY2tCeTogaWRUcmFja0J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYXJlbnQudG1wbFwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYXJlbnQudG1wbFwiPjwvbmctY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicGFyZW50LmNvbnRlbnRcIj57e3BhcmVudC5jb250ZW50fX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbGFzdFwiPiZuYnNwOy0mbmJzcDs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ic3A7KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUZW1wbGF0ZSBoZWFkZXIgb3JpZ2luYWxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW0udGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtLm11bHRpID8gaXRlbS5tdWx0aUNvbnRlbnQgOiBudWxsIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS50ZW1wbGF0ZVwiPnt7aXRlbS5kZXNjcmlwdGlvbn19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tRmlsbGVyLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIChjbGljayk9XCJjb2x1bW5NZXRhZGF0YV9ILmNvbHVtbkNsaWNrZWQoaXRlbSk7XCI+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBpbm5lciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJEaXJlY3RpdmVzQmFzZWQgJiYgQ29sdW1uc1Bpbm5hYmxlXCI+PHNwYW4gKm5nSWY9XCIhaXRlbS5maXhlZCAmJiBpdGVtLnBpbm5hYmxlXCIgY2xhc3M9XCJmYSBmYS10aHVtYi10YWNrXCIgW2NsYXNzLnRleHQtc3VjY2Vzc109XCJpdGVtLnBpbm5lZFwiIChjbGljayk9XCJjb2x1bW5NZXRhZGF0YV9ILnBpbk9yVW5waW5Db2x1bW4oaXRlbSlcIj48L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBlc3QtbWFyZ2luLXJpZ2h0LTEwXCIgKGNsaWNrKT1cImxhc3RTZWxlY3RlZEl0ZW1JRCA9IG51bGw7IGNoYW5nZUNvbHVtblZpc2liaWxpdHlNb2RhbC5oaWRlKCk7XCI+e3snQ2xvc2UnIHwgbG9jYWxpemUgOiBsY319PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwiIVRNUENvbHVtbnNMaXN0IHx8IFRNUENvbHVtbnNMaXN0Lmxlbmd0aCA9PSAwXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwiY29sdW1uTWV0YWRhdGFfSC5jb25maXJtQ29sdW1uVmlzaWJpbGl0eVNlbGVjdGlvbigpICYmIGNoYW5nZUNvbHVtblZpc2liaWxpdHlNb2RhbC5oaWRlKClcIj57eydDb25maXJtJyB8IGxvY2FsaXplIDogbGN9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=