@theseam/ui-common 0.4.15 → 0.4.18

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.
@@ -82,6 +82,7 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
82
82
  this.zoom = 14;
83
83
  this.longitude = -98.570209;
84
84
  this.latitude = 37.633814;
85
+ this.padding = 0;
85
86
  this.mapReady = new EventEmitter();
86
87
  this._options = {
87
88
  mapTypeControl: true,
@@ -117,6 +118,7 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
117
118
  }
118
119
  }));
119
120
  this._googleMaps.setBaseLatLng(this.latitude, this.longitude);
121
+ this._googleMaps.setPadding(this.padding);
120
122
  this._gmApiLoaded = this._googleMapsApiLoader.load().pipe(map(() => true), catchError(() => of(false)));
121
123
  }
122
124
  ngOnInit() {
@@ -175,6 +177,9 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
175
177
  if (Object.prototype.hasOwnProperty.call(changes, 'editingEnabled')) {
176
178
  this._googleMaps.setEditingEnabled(this.editingEnabled);
177
179
  }
180
+ if (Object.prototype.hasOwnProperty.call(changes, 'padding')) {
181
+ this._googleMaps.setPadding(this.padding);
182
+ }
178
183
  }
179
184
  writeValue(value) {
180
185
  this.value = value;
@@ -207,27 +212,24 @@ export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
207
212
  _onMapReady(theMap) {
208
213
  this._googleMaps.setMap(theMap);
209
214
  this._googleMaps.setData(this._mapValueManager.value);
210
- // NOTE: AgmMap has a race condition problem that causes the input latitude,
211
- // longitude, and zoom to get ignored, before googlemaps emits
212
- // 'center_changed'. This should avoid the issue, until we stop using AgmMap
213
- // or upgrade to a more recent version that may not have the issue anymore.
214
- // TODO: Check if the switch to '@angular/google-maps' fixed this problem.
215
- this._googleMaps.reCenterOnFeatures();
216
- // NOTE: the input zoom level was getting reset after this function ran,
215
+ // NOTE: The input zoom level was getting reset after this function ran,
217
216
  // so putting in this idle listener to wait until the map is fully rendered
218
217
  // to set the zoom.
218
+ // Calling reCenterOnFeatures() after setZoom() ensures that maps with pre-drawn shapes
219
+ // will display correctly
219
220
  this.idleListener = this._googleMaps.googleMap?.addListener('idle', () => {
220
221
  this._googleMaps.googleMap?.setZoom(this.zoom);
222
+ this._googleMaps.reCenterOnFeatures();
223
+ this.mapReady.emit(this._googleMaps.googleMap);
221
224
  this.idleListener?.remove();
222
225
  });
223
- this.mapReady.emit(this._googleMaps.googleMap);
224
226
  }
225
227
  _onClickDeleteFeature() {
226
228
  this._googleMaps.deleteSelection();
227
229
  }
228
230
  }
229
231
  TheSeamGoogleMapsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TheSeamGoogleMapsComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: i2.GoogleMapsService }, { token: i3.MapValueManagerService }, { token: i4.TheSeamGoogleMapsApiLoader }], target: i0.ɵɵFactoryTarget.Component });
230
- TheSeamGoogleMapsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamGoogleMapsComponent, selector: "seam-google-maps", inputs: { disabled: "disabled", value: "value", tabIndex: "tabIndex", fileDropEnabled: "fileDropEnabled", fileUploadControlEnabled: "fileUploadControlEnabled", fullscreenControlEnabled: "fullscreenControlEnabled", reCenterControlEnabled: "reCenterControlEnabled", mapTypeControlEnabled: "mapTypeControlEnabled", streetViewControlEnabled: "streetViewControlEnabled", allowDrawingHoleInPolygon: "allowDrawingHoleInPolygon", editingEnabled: "editingEnabled", fileImportHandler: "fileImportHandler", zoom: "zoom", longitude: "longitude", latitude: "latitude" }, outputs: { mapReady: "mapReady" }, host: { properties: { "attr.disabled": "this._attrDisabled", "attr.tabindex": "this._attrTabIndex" } }, providers: [
232
+ TheSeamGoogleMapsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TheSeamGoogleMapsComponent, selector: "seam-google-maps", inputs: { disabled: "disabled", value: "value", tabIndex: "tabIndex", fileDropEnabled: "fileDropEnabled", fileUploadControlEnabled: "fileUploadControlEnabled", fullscreenControlEnabled: "fullscreenControlEnabled", reCenterControlEnabled: "reCenterControlEnabled", mapTypeControlEnabled: "mapTypeControlEnabled", streetViewControlEnabled: "streetViewControlEnabled", allowDrawingHoleInPolygon: "allowDrawingHoleInPolygon", editingEnabled: "editingEnabled", fileImportHandler: "fileImportHandler", zoom: "zoom", longitude: "longitude", latitude: "latitude", padding: "padding" }, outputs: { mapReady: "mapReady" }, host: { properties: { "attr.disabled": "this._attrDisabled", "attr.tabindex": "this._attrTabIndex" } }, providers: [
231
233
  MapValueManagerService,
232
234
  GoogleMapsService,
233
235
  { provide: MAP_CONTROLS_SERVICE, useClass: GoogleMapsControlsService },
@@ -320,10 +322,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
320
322
  type: Input
321
323
  }], latitude: [{
322
324
  type: Input
325
+ }], padding: [{
326
+ type: Input
323
327
  }], mapReady: [{
324
328
  type: Output
325
329
  }], featureContextMenu: [{
326
330
  type: ViewChild,
327
331
  args: ['featureContextMenu', { static: true, read: MenuComponent }]
328
332
  }] } });
329
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDOUUsT0FBTyxFQUE4QixZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQzlHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUd2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUMzRSxPQUFPLEVBQ0wsK0NBQStDLEdBQ2hELE1BQU0sc0ZBQXNGLENBQUE7QUFDN0YsT0FBTyxFQUNMLDZDQUE2QyxHQUM5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UztzQkFBaEMsS0FBSztnQkFDa0IsUUFBUTtzQkFBL0IsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUV3RSxrQkFBa0I7c0JBQWhHLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IsIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFDcm9zc2hhaXJzLCBmYUZpbGVJbXBvcnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQgeyBDYW5EaXNhYmxlLCBDYW5EaXNhYmxlQ3RvciwgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciwgbWl4aW5EaXNhYmxlZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9tZW51J1xuXG5pbXBvcnQgeyBUaGVTZWFtR29vZ2xlTWFwc0FwaUxvYWRlciB9IGZyb20gJy4uL2dvb2dsZS1tYXBzLWFwaS1sb2FkZXIvZ29vZ2xlLW1hcHMtYXBpLWxvYWRlcidcbmltcG9ydCB7IEdvb2dsZU1hcHNDb250cm9sc1NlcnZpY2UgfSBmcm9tICcuLi9nb29nbGUtbWFwcy1jb250cm9scy5zZXJ2aWNlJ1xuaW1wb3J0IHtcbiAgVGhlU2VhbUdvb2dsZU1hcHNSZWNlbnRlckJ1dHRvbkNvbnRyb2xDb21wb25lbnQsXG59IGZyb20gJy4uL2dvb2dsZS1tYXBzLXJlY2VudGVyLWJ1dHRvbi1jb250cm9sL2dvb2dsZS1tYXBzLXJlY2VudGVyLWJ1dHRvbi1jb250cm9sLmNvbXBvbmVudCdcbmltcG9ydCB7XG4gIFRoZVNlYW1Hb29nbGVNYXBzVXBsb2FkQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbn0gZnJvbSAnLi4vZ29vZ2xlLW1hcHMtdXBsb2FkLWJ1dHRvbi1jb250cm9sL2dvb2dsZS1tYXBzLXVwbG9hZC1idXR0b24tY29udHJvbC5jb21wb25lbnQnXG5pbXBvcnQgeyBHb29nbGVNYXBzU2VydmljZSB9IGZyb20gJy4uL2dvb2dsZS1tYXBzLnNlcnZpY2UnXG5pbXBvcnQgeyBNYXBDb250cm9sLCBNQVBfQ09OVFJPTFNfU0VSVklDRSB9IGZyb20gJy4uL21hcC1jb250cm9scy1zZXJ2aWNlJ1xuaW1wb3J0IHsgTWFwVmFsdWUsIE1hcFZhbHVlTWFuYWdlclNlcnZpY2UsIE1hcFZhbHVlU291cmNlIH0gZnJvbSAnLi4vbWFwLXZhbHVlLW1hbmFnZXIuc2VydmljZSdcblxuaW50ZXJmYWNlIFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nXG4gIGFjdGlvbjogKGl0ZW06IFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW0pID0+IHZvaWRcbn1cblxuY2xhc3MgVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnRCYXNlIHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbn1cblxuY29uc3QgX1RoZVNlYW1Hb29nbGVNYXBzTWl4aW5CYXNlOiBDYW5EaXNhYmxlQ3RvciAmXG4gIHR5cGVvZiBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudEJhc2UgPVxuICAgIG1peGluRGlzYWJsZWQoVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnRCYXNlKVxuXG4vKipcbiAqIEEgd3JhcHBlciBmb3IgZ29vZ2xlbWFwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWdvb2dsZS1tYXBzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dvb2dsZS1tYXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ29vZ2xlLW1hcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgaW5wdXRzOiBbXG4gICAgJ2Rpc2FibGVkJyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSxcbiAgICBHb29nbGVNYXBzU2VydmljZSxcbiAgICB7IHByb3ZpZGU6IE1BUF9DT05UUk9MU19TRVJWSUNFLCB1c2VDbGFzczogR29vZ2xlTWFwc0NvbnRyb2xzU2VydmljZSB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZXhwb3J0QXM6ICdzZWFtR29vZ2xlTWFwcycsXG59KVxuZXhwb3J0IGNsYXNzIFRoZVNlYW1Hb29nbGVNYXBzQ29tcG9uZW50IGV4dGVuZHMgX1RoZVNlYW1Hb29nbGVNYXBzTWl4aW5CYXNlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ2FuRGlzYWJsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV96b29tOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9uZ2l0dWRlOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGF0aXR1ZGU6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9maWxlRHJvcEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Z1bGxzY3JlZW5Db250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZUNlbnRlckNvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX21hcFR5cGVDb250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lZGl0aW5nRW5hYmxlZDogQm9vbGVhbklucHV0XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICByZWFkb25seSBfZ21BcGlMb2FkZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cblxuICByZWFkb25seSBfZmlsZVVwbG9hZENvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1VwbG9hZEJ1dHRvbkNvbnRyb2xDb21wb25lbnQsXG4gICAgZGF0YTogeyBsYWJlbDogJ0ltcG9ydCBHZW8gRmlsZScsIGljb246IGZhRmlsZUltcG9ydCB9LFxuICAgIHBvc2l0aW9uOiA2IC8qIGdvb2dsZS5tYXBzLkNvbnRyb2xQb3NpdGlvbi5MRUZUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHJlYWRvbmx5IF9yZUNlbnRlckNvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1JlY2VudGVyQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbiAgICBkYXRhOiB7IGxhYmVsOiAnQ2VudGVyIG9uIEZpZWxkJywgaWNvbjogZmFDcm9zc2hhaXJzIH0sXG4gICAgcG9zaXRpb246IDkgLyogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uLlJJR0hUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzT3JpZ2luOiBGb2N1c09yaWdpbiA9IG51bGxcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IE1hcFZhbHVlKSB7XG4gICAgdGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnNldFZhbHVlKHZhbHVlLCBNYXBWYWx1ZVNvdXJjZS5JbnB1dClcbiAgfVxuICBnZXQgdmFsdWUoKTogTWFwVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9tYXBWYWx1ZU1hbmFnZXIudmFsdWVcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX3RhYkluZGV4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIH1cbiAgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl90YWJJbmRleCB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRhYiBpbmRleCB0byBgLTFgIHRvIGFsbG93IHRoZSByb290IGVsZW1lbnQgb2YgdGhlXG4gICAqIGNvbXBvbmVudCB0byByZWNlaXZlIGBmb2N1c2AgZXZlbnQgZnJvbSBqYXZhc2NyaXB0LCBidXQgbm90IGdldCBmb2N1c2VkIGJ5XG4gICAqIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqL1xuICBwcml2YXRlIF90YWJJbmRleCA9IC0xXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZpbGVEcm9wRW5hYmxlZCA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZ1bGxzY3JlZW5Db250cm9sRW5hYmxlZCA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlQ2VudGVyQ29udHJvbEVuYWJsZWQgPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBtYXBUeXBlQ29udHJvbEVuYWJsZWQgPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBhbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uID0gZmFsc2VcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZWRpdGluZ0VuYWJsZWQgPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGZpbGVJbXBvcnRIYW5kbGVyKHZhbHVlOiAoKGZpbGU6IEZpbGUpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RmlsZUlucHV0SGFuZGxlcih2YWx1ZSlcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gIGdldCBfYXR0ckRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCBudWxsIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgX2F0dHJUYWJJbmRleCgpIHsgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6ICh0aGlzLnRhYkluZGV4IHx8IDApIH1cblxuICBvbkNoYW5nZTogYW55XG4gIG9uVG91Y2hlZDogYW55XG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgem9vbSA9IDE0XG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxvbmdpdHVkZSA9IC05OC41NzAyMDlcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGF0aXR1ZGUgPSAzNy42MzM4MTRcblxuICBAT3V0cHV0KCkgbWFwUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGdvb2dsZS5tYXBzLk1hcCB8IHVuZGVmaW5lZD4oKVxuXG4gIEBWaWV3Q2hpbGQoJ2ZlYXR1cmVDb250ZXh0TWVudScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBNZW51Q29tcG9uZW50IH0pIHB1YmxpYyBmZWF0dXJlQ29udGV4dE1lbnUhOiBNZW51Q29tcG9uZW50XG5cbiAgX29wdGlvbnMgPSB7XG4gICAgbWFwVHlwZUNvbnRyb2w6IHRydWUsXG4gICAgbWFwVHlwZUlkOiAnaHlicmlkJyxcbiAgICBzdHJlZXRWaWV3Q29udHJvbDogZmFsc2UsXG4gICAgZnVsbHNjcmVlbkNvbnRyb2w6IHRoaXMuZnVsbHNjcmVlbkNvbnRyb2xFbmFibGVkLFxuICB9XG5cbiAgcmVhZG9ubHkgX2NvbnRleHRNZW51SXRlbXMkOiBPYnNlcnZhYmxlPFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW1bXT5cblxuICBwcml2YXRlIGlkbGVMaXN0ZW5lcjogZ29vZ2xlLm1hcHMuTWFwc0V2ZW50TGlzdGVuZXIgfCB1bmRlZmluZWRcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dvb2dsZU1hcHM6IEdvb2dsZU1hcHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21hcFZhbHVlTWFuYWdlcjogTWFwVmFsdWVNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9nb29nbGVNYXBzQXBpTG9hZGVyOiBUaGVTZWFtR29vZ2xlTWFwc0FwaUxvYWRlcixcbiAgKSB7XG4gICAgc3VwZXIoZWxlbWVudFJlZilcblxuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsIHRydWUpLnBpcGUoXG4gICAgICB0YXAob3JpZ2luID0+IHsgdGhpcy5fZm9jdXNPcmlnaW4gPSBvcmlnaW4gfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnZhbHVlQ2hhbmdlZC5waXBlKFxuICAgICAgdGFwKGNoYW5nZSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9uQ2hhbmdlKSB7IHRoaXMub25DaGFuZ2UoY2hhbmdlLnZhbHVlKSB9XG4gICAgICAgIGlmICh0aGlzLm9uVG91Y2hlZCkgeyB0aGlzLm9uVG91Y2hlZCgpIH1cbiAgICAgIH0pLFxuICAgICAgdGFwKGNoYW5nZWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZ29vZ2xlTWFwcy5tYXBSZWFkeSAmJiBjaGFuZ2VkLnNvdXJjZSAhPT0gTWFwVmFsdWVTb3VyY2UuRmVhdHVyZUNoYW5nZSkge1xuICAgICAgICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RGF0YShjaGFuZ2VkLnZhbHVlKVxuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSxcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICB0aGlzLl9jb250ZXh0TWVudUl0ZW1zJCA9IHRoaXMuX2dvb2dsZU1hcHMuZWRpdGluZ0VuYWJsZWQkLnBpcGUoXG4gICAgICBtYXAoZW5hYmxlZCA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiBUaGVTZWFtTWFwQ29udGV4dE1lbnVJdGVtW10gPSBbXVxuICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgIGl0ZW1zLnB1c2goeyBsYWJlbDogJ0RlbGV0ZScsIGFjdGlvbjogKCkgPT4gdGhpcy5fb25DbGlja0RlbGV0ZUZlYXR1cmUoKSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtc1xuICAgICAgfSksXG4gICAgICB0YXAoaXRlbXMgPT4ge1xuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRGZWF0dXJlQ29udGV4dE1lbnUobnVsbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9nb29nbGVNYXBzLnNldEZlYXR1cmVDb250ZXh0TWVudSh0aGlzLmZlYXR1cmVDb250ZXh0TWVudSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApXG5cbiAgICB0aGlzLl9nb29nbGVNYXBzLnNldEJhc2VMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpXG5cbiAgICB0aGlzLl9nbUFwaUxvYWRlZCA9IHRoaXMuX2dvb2dsZU1hcHNBcGlMb2FkZXIubG9hZCgpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSksXG4gICAgKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHdpbmRvdywgJ2tleWRvd24nKS5waXBlKFxuICAgICAgdGFwKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICAgICAgaWYgKHRoaXMuX2dvb2dsZU1hcHMuaXNFZGl0aW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2dvb2dsZU1hcHMuZGVsZXRlU2VsZWN0aW9uKClcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdFc2NhcGUnOiB0aGlzLl9nb29nbGVNYXBzLnN0b3BEcmF3aW5nKCk7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBicmVha1xuICAgICAgICAgIGNhc2UgJ0NvbnRleHRNZW51JzogdGhpcy5fZ29vZ2xlTWFwcy5vcGVuQ29udGV4dE1lbnUoKTsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKVxuXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBsZXQgdXBkYXRlQmFzZSA9IGZhbHNlXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnbGF0aXR1ZGUnKSkge1xuICAgICAgdGhpcy5sYXRpdHVkZSA9IGNoYW5nZXMubGF0aXR1ZGUuY3VycmVudFZhbHVlXG4gICAgICB1cGRhdGVCYXNlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdsb25naXR1ZGUnKSkge1xuICAgICAgdGhpcy5sb25naXR1ZGUgPSBjaGFuZ2VzLmxvbmdpdHVkZS5jdXJyZW50VmFsdWVcbiAgICAgIHVwZGF0ZUJhc2UgPSB0cnVlXG4gICAgfVxuICAgIGlmICh1cGRhdGVCYXNlKSB7XG4gICAgICB0aGlzLl9nb29nbGVNYXBzLnNldEJhc2VMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbicpKSB7XG4gICAgICB0aGlzLl9nb29nbGVNYXBzLmFsbG93RHJhd2luZ0hvbGVJblBvbHlnb24odGhpcy5hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uKVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2Z1bGxzY3JlZW5Db250cm9sRW5hYmxlZCcpKSB7XG4gICAgICBjb25zdCBmdWxsc2NyZWVuQ29udHJvbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLmZ1bGxzY3JlZW5Db250cm9sRW5hYmxlZC5jdXJyZW50VmFsdWUpXG4gICAgICBpZiAoZnVsbHNjcmVlbkNvbnRyb2wgIT09IHRoaXMuX29wdGlvbnMuZnVsbHNjcmVlbkNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICAgIGZ1bGxzY3JlZW5Db250cm9sLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZWRpdGluZ0VuYWJsZWQnKSkge1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRFZGl0aW5nRW5hYmxlZCh0aGlzLmVkaXRpbmdFbmFibGVkKVxuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IE1hcFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm5cbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuXG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWRcbiAgfVxuXG4gIHB1YmxpYyBmaXRCb3VuZHMoYm91bmRzOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMgfCBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHNMaXRlcmFsLCBwYWRkaW5nPzogbnVtYmVyIHwgZ29vZ2xlLm1hcHMuUGFkZGluZyk6IHZvaWQge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuZml0Qm91bmRzKGJvdW5kcywgcGFkZGluZylcbiAgfVxuXG4gIHB1YmxpYyBnZXRHZW9Kc29uKCk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcHMuZ2V0R2VvSnNvbigpXG4gIH1cblxuICBwdWJsaWMgaGFzRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzT3JpZ2luICE9PSBudWxsICYmIHRoaXMuX2ZvY3VzT3JpZ2luICE9PSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBGb2N1c2VzIHRoZSBidXR0b24uICovXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKClcbiAgfVxuXG4gIHByaXZhdGUgX2dldEhvc3RFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgfVxuXG4gIF9vbk1hcFJlYWR5KHRoZU1hcDogZ29vZ2xlLm1hcHMuTWFwKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRNYXAodGhlTWFwKVxuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RGF0YSh0aGlzLl9tYXBWYWx1ZU1hbmFnZXIudmFsdWUpXG4gICAgLy8gTk9URTogQWdtTWFwIGhhcyBhIHJhY2UgY29uZGl0aW9uIHByb2JsZW0gdGhhdCBjYXVzZXMgdGhlIGlucHV0IGxhdGl0dWRlLFxuICAgIC8vIGxvbmdpdHVkZSwgYW5kIHpvb20gdG8gZ2V0IGlnbm9yZWQsIGJlZm9yZSBnb29nbGVtYXBzIGVtaXRzXG4gICAgLy8gJ2NlbnRlcl9jaGFuZ2VkJy4gVGhpcyBzaG91bGQgYXZvaWQgdGhlIGlzc3VlLCB1bnRpbCB3ZSBzdG9wIHVzaW5nIEFnbU1hcFxuICAgIC8vIG9yIHVwZ3JhZGUgdG8gYSBtb3JlIHJlY2VudCB2ZXJzaW9uIHRoYXQgbWF5IG5vdCBoYXZlIHRoZSBpc3N1ZSBhbnltb3JlLlxuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoZSBzd2l0Y2ggdG8gJ0Bhbmd1bGFyL2dvb2dsZS1tYXBzJyBmaXhlZCB0aGlzIHByb2JsZW0uXG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5yZUNlbnRlck9uRmVhdHVyZXMoKVxuXG4gICAgLy8gTk9URTogdGhlIGlucHV0IHpvb20gbGV2ZWwgd2FzIGdldHRpbmcgcmVzZXQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByYW4sXG4gICAgLy8gc28gcHV0dGluZyBpbiB0aGlzIGlkbGUgbGlzdGVuZXIgdG8gd2FpdCB1bnRpbCB0aGUgbWFwIGlzIGZ1bGx5IHJlbmRlcmVkXG4gICAgLy8gdG8gc2V0IHRoZSB6b29tLlxuICAgIHRoaXMuaWRsZUxpc3RlbmVyID0gdGhpcy5fZ29vZ2xlTWFwcy5nb29nbGVNYXA/LmFkZExpc3RlbmVyKCdpZGxlJywgKCkgPT4ge1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5nb29nbGVNYXA/LnNldFpvb20odGhpcy56b29tKVxuICAgICAgdGhpcy5pZGxlTGlzdGVuZXI/LnJlbW92ZSgpXG4gICAgfSlcblxuICAgIHRoaXMubWFwUmVhZHkuZW1pdCh0aGlzLl9nb29nbGVNYXBzLmdvb2dsZU1hcClcbiAgfVxuXG4gIF9vbkNsaWNrRGVsZXRlRmVhdHVyZSgpIHtcbiAgICB0aGlzLl9nb29nbGVNYXBzLmRlbGV0ZVNlbGVjdGlvbigpXG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIl9nbUFwaUxvYWRlZCB8IGFzeW5jXCI+XG4gIDxnb29nbGUtbWFwXG4gICAgaGVpZ2h0PVwiMTAwJVwiXG4gICAgd2lkdGg9XCIxMDAlXCJcbiAgICBbY2VudGVyXT1cInsgbGF0OiBsYXRpdHVkZSwgbG5nOiBsb25naXR1ZGUgfVwiXG4gICAgW3pvb21dPVwiem9vbVwiXG4gICAgW29wdGlvbnNdPVwiX29wdGlvbnNcIlxuICAgIChtYXBJbml0aWFsaXplZCk9XCJfb25NYXBSZWFkeSgkYW55KCRldmVudCkpXCJcbiAgICA+XG4gIDwvZ29vZ2xlLW1hcD5cbjwvbmctY29udGFpbmVyPlxuPHNlYW0tbWVudSAjZmVhdHVyZUNvbnRleHRNZW51PlxuICA8YnV0dG9uIHNlYW1NZW51SXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBfY29udGV4dE1lbnVJdGVtcyQgfCBhc3luY1wiIChjbGljayk9XCJpdGVtLmFjdGlvbihpdGVtKVwiPnt7IGl0ZW0ubGFiZWwgfX08L2J1dHRvbj5cbjwvc2VhbS1tZW51PlxuPHNlYW0tbWFwLWZpbGUtZHJvcCAqbmdJZj1cImZpbGVEcm9wRW5hYmxlZFwiPjwvc2VhbS1tYXAtZmlsZS1kcm9wPlxuXG48c2VhbS1tYXAtY29udHJvbCAqbmdJZj1cImZpbGVVcGxvYWRDb250cm9sRW5hYmxlZFwiIFtkZWZdPVwiX2ZpbGVVcGxvYWRDb250cm9sRGVmXCI+PC9zZWFtLW1hcC1jb250cm9sPlxuPHNlYW0tbWFwLWNvbnRyb2wgKm5nSWY9XCJyZUNlbnRlckNvbnRyb2xFbmFibGVkXCIgW2RlZl09XCJfcmVDZW50ZXJDb250cm9sRGVmXCI+PC9zZWFtLW1hcC1jb250cm9sPlxuIl19
333
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlHLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUN4RSxPQUFPLEVBQUUsU0FBUyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUE7QUFDOUUsT0FBTyxFQUE4QixZQUFZLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFBO0FBQzlHLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUd2RCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUMzRSxPQUFPLEVBQ0wsK0NBQStDLEdBQ2hELE1BQU0sc0ZBQXNGLENBQUE7QUFDN0YsT0FBTyxFQUNMLDZDQUE2QyxHQUM5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QjtzQkFBaEQsS0FBSztnQkFFbUIseUJBQXlCO3NCQUFqRCxLQUFLO2dCQUVtQixjQUFjO3NCQUF0QyxLQUFLO2dCQUdGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFNRixhQUFhO3NCQURoQixXQUFXO3VCQUFDLGVBQWU7Z0JBSXhCLGFBQWE7c0JBRGhCLFdBQVc7dUJBQUMsZUFBZTtnQkFNSixJQUFJO3NCQUEzQixLQUFLO2dCQUNrQixTQUFTO3NCQUFoQyxLQUFLO2dCQUNrQixRQUFRO3NCQUEvQixLQUFLO2dCQUVHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxRQUFRO3NCQUFqQixNQUFNO2dCQUV3RSxrQkFBa0I7c0JBQWhHLFNBQVM7dUJBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c01vbml0b3IsIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBmb3J3YXJkUmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnXG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFDcm9zc2hhaXJzLCBmYUZpbGVJbXBvcnQgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQgeyBDYW5EaXNhYmxlLCBDYW5EaXNhYmxlQ3RvciwgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciwgbWl4aW5EaXNhYmxlZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgTWVudUNvbXBvbmVudCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9tZW51J1xuXG5pbXBvcnQgeyBUaGVTZWFtR29vZ2xlTWFwc0FwaUxvYWRlciB9IGZyb20gJy4uL2dvb2dsZS1tYXBzLWFwaS1sb2FkZXIvZ29vZ2xlLW1hcHMtYXBpLWxvYWRlcidcbmltcG9ydCB7IEdvb2dsZU1hcHNDb250cm9sc1NlcnZpY2UgfSBmcm9tICcuLi9nb29nbGUtbWFwcy1jb250cm9scy5zZXJ2aWNlJ1xuaW1wb3J0IHtcbiAgVGhlU2VhbUdvb2dsZU1hcHNSZWNlbnRlckJ1dHRvbkNvbnRyb2xDb21wb25lbnQsXG59IGZyb20gJy4uL2dvb2dsZS1tYXBzLXJlY2VudGVyLWJ1dHRvbi1jb250cm9sL2dvb2dsZS1tYXBzLXJlY2VudGVyLWJ1dHRvbi1jb250cm9sLmNvbXBvbmVudCdcbmltcG9ydCB7XG4gIFRoZVNlYW1Hb29nbGVNYXBzVXBsb2FkQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbn0gZnJvbSAnLi4vZ29vZ2xlLW1hcHMtdXBsb2FkLWJ1dHRvbi1jb250cm9sL2dvb2dsZS1tYXBzLXVwbG9hZC1idXR0b24tY29udHJvbC5jb21wb25lbnQnXG5pbXBvcnQgeyBHb29nbGVNYXBzU2VydmljZSB9IGZyb20gJy4uL2dvb2dsZS1tYXBzLnNlcnZpY2UnXG5pbXBvcnQgeyBNYXBDb250cm9sLCBNQVBfQ09OVFJPTFNfU0VSVklDRSB9IGZyb20gJy4uL21hcC1jb250cm9scy1zZXJ2aWNlJ1xuaW1wb3J0IHsgTWFwVmFsdWUsIE1hcFZhbHVlTWFuYWdlclNlcnZpY2UsIE1hcFZhbHVlU291cmNlIH0gZnJvbSAnLi4vbWFwLXZhbHVlLW1hbmFnZXIuc2VydmljZSdcblxuaW50ZXJmYWNlIFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW0ge1xuICBsYWJlbDogc3RyaW5nXG4gIGFjdGlvbjogKGl0ZW06IFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW0pID0+IHZvaWRcbn1cblxuY2xhc3MgVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnRCYXNlIHtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbn1cblxuY29uc3QgX1RoZVNlYW1Hb29nbGVNYXBzTWl4aW5CYXNlOiBDYW5EaXNhYmxlQ3RvciAmXG4gIHR5cGVvZiBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudEJhc2UgPVxuICAgIG1peGluRGlzYWJsZWQoVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnRCYXNlKVxuXG4vKipcbiAqIEEgd3JhcHBlciBmb3IgZ29vZ2xlbWFwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWdvb2dsZS1tYXBzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dvb2dsZS1tYXBzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ29vZ2xlLW1hcHMuY29tcG9uZW50LnNjc3MnXSxcbiAgaW5wdXRzOiBbXG4gICAgJ2Rpc2FibGVkJyxcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSxcbiAgICBHb29nbGVNYXBzU2VydmljZSxcbiAgICB7IHByb3ZpZGU6IE1BUF9DT05UUk9MU19TRVJWSUNFLCB1c2VDbGFzczogR29vZ2xlTWFwc0NvbnRyb2xzU2VydmljZSB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZSxcbiAgICB9LFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZXhwb3J0QXM6ICdzZWFtR29vZ2xlTWFwcycsXG59KVxuZXhwb3J0IGNsYXNzIFRoZVNlYW1Hb29nbGVNYXBzQ29tcG9uZW50IGV4dGVuZHMgX1RoZVNlYW1Hb29nbGVNYXBzTWl4aW5CYXNlXG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgQ2FuRGlzYWJsZSwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV96b29tOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9uZ2l0dWRlOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGF0aXR1ZGU6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9maWxlRHJvcEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Z1bGxzY3JlZW5Db250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZUNlbnRlckNvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX21hcFR5cGVDb250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9lZGl0aW5nRW5hYmxlZDogQm9vbGVhbklucHV0XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICByZWFkb25seSBfZ21BcGlMb2FkZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cblxuICByZWFkb25seSBfZmlsZVVwbG9hZENvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1VwbG9hZEJ1dHRvbkNvbnRyb2xDb21wb25lbnQsXG4gICAgZGF0YTogeyBsYWJlbDogJ0ltcG9ydCBHZW8gRmlsZScsIGljb246IGZhRmlsZUltcG9ydCB9LFxuICAgIHBvc2l0aW9uOiA2IC8qIGdvb2dsZS5tYXBzLkNvbnRyb2xQb3NpdGlvbi5MRUZUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHJlYWRvbmx5IF9yZUNlbnRlckNvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1JlY2VudGVyQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbiAgICBkYXRhOiB7IGxhYmVsOiAnQ2VudGVyIG9uIEZpZWxkJywgaWNvbjogZmFDcm9zc2hhaXJzIH0sXG4gICAgcG9zaXRpb246IDkgLyogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uLlJJR0hUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzT3JpZ2luOiBGb2N1c09yaWdpbiA9IG51bGxcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IE1hcFZhbHVlKSB7XG4gICAgdGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnNldFZhbHVlKHZhbHVlLCBNYXBWYWx1ZVNvdXJjZS5JbnB1dClcbiAgfVxuICBnZXQgdmFsdWUoKTogTWFwVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9tYXBWYWx1ZU1hbmFnZXIudmFsdWVcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX3RhYkluZGV4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIH1cbiAgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl90YWJJbmRleCB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRhYiBpbmRleCB0byBgLTFgIHRvIGFsbG93IHRoZSByb290IGVsZW1lbnQgb2YgdGhlXG4gICAqIGNvbXBvbmVudCB0byByZWNlaXZlIGBmb2N1c2AgZXZlbnQgZnJvbSBqYXZhc2NyaXB0LCBidXQgbm90IGdldCBmb2N1c2VkIGJ5XG4gICAqIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqL1xuICBwcml2YXRlIF90YWJJbmRleCA9IC0xXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZpbGVEcm9wRW5hYmxlZCA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZ1bGxzY3JlZW5Db250cm9sRW5hYmxlZCA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlQ2VudGVyQ29udHJvbEVuYWJsZWQgPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBtYXBUeXBlQ29udHJvbEVuYWJsZWQgPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQgPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBhbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uID0gZmFsc2VcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZWRpdGluZ0VuYWJsZWQgPSB0cnVlXG5cbiAgQElucHV0KClcbiAgc2V0IGZpbGVJbXBvcnRIYW5kbGVyKHZhbHVlOiAoKGZpbGU6IEZpbGUpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RmlsZUlucHV0SGFuZGxlcih2YWx1ZSlcbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXNhYmxlZCcpXG4gIGdldCBfYXR0ckRpc2FibGVkKCkgeyByZXR1cm4gdGhpcy5kaXNhYmxlZCB8fCBudWxsIH1cblxuICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKVxuICBnZXQgX2F0dHJUYWJJbmRleCgpIHsgcmV0dXJuIHRoaXMuZGlzYWJsZWQgPyAtMSA6ICh0aGlzLnRhYkluZGV4IHx8IDApIH1cblxuICBvbkNoYW5nZTogYW55XG4gIG9uVG91Y2hlZDogYW55XG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgem9vbSA9IDE0XG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxvbmdpdHVkZSA9IC05OC41NzAyMDlcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGF0aXR1ZGUgPSAzNy42MzM4MTRcblxuICBASW5wdXQoKSBwYWRkaW5nOiBudW1iZXIgfCBnb29nbGUubWFwcy5QYWRkaW5nIHwgdW5kZWZpbmVkID0gMFxuXG4gIEBPdXRwdXQoKSBtYXBSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8Z29vZ2xlLm1hcHMuTWFwIHwgdW5kZWZpbmVkPigpXG5cbiAgQFZpZXdDaGlsZCgnZmVhdHVyZUNvbnRleHRNZW51JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IE1lbnVDb21wb25lbnQgfSkgcHVibGljIGZlYXR1cmVDb250ZXh0TWVudSE6IE1lbnVDb21wb25lbnRcblxuICBfb3B0aW9ucyA9IHtcbiAgICBtYXBUeXBlQ29udHJvbDogdHJ1ZSxcbiAgICBtYXBUeXBlSWQ6ICdoeWJyaWQnLFxuICAgIHN0cmVldFZpZXdDb250cm9sOiBmYWxzZSxcbiAgICBmdWxsc2NyZWVuQ29udHJvbDogdGhpcy5mdWxsc2NyZWVuQ29udHJvbEVuYWJsZWQsXG4gIH1cblxuICByZWFkb25seSBfY29udGV4dE1lbnVJdGVtcyQ6IE9ic2VydmFibGU8VGhlU2VhbU1hcENvbnRleHRNZW51SXRlbVtdPlxuXG4gIHByaXZhdGUgaWRsZUxpc3RlbmVyOiBnb29nbGUubWFwcy5NYXBzRXZlbnRMaXN0ZW5lciB8IHVuZGVmaW5lZFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZ29vZ2xlTWFwczogR29vZ2xlTWFwc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWFwVmFsdWVNYW5hZ2VyOiBNYXBWYWx1ZU1hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dvb2dsZU1hcHNBcGlMb2FkZXI6IFRoZVNlYW1Hb29nbGVNYXBzQXBpTG9hZGVyLFxuICApIHtcbiAgICBzdXBlcihlbGVtZW50UmVmKVxuXG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwgdHJ1ZSkucGlwZShcbiAgICAgIHRhcChvcmlnaW4gPT4geyB0aGlzLl9mb2N1c09yaWdpbiA9IG9yaWdpbiB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSxcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICB0aGlzLl9tYXBWYWx1ZU1hbmFnZXIudmFsdWVDaGFuZ2VkLnBpcGUoXG4gICAgICB0YXAoY2hhbmdlID0+IHtcbiAgICAgICAgaWYgKHRoaXMub25DaGFuZ2UpIHsgdGhpcy5vbkNoYW5nZShjaGFuZ2UudmFsdWUpIH1cbiAgICAgICAgaWYgKHRoaXMub25Ub3VjaGVkKSB7IHRoaXMub25Ub3VjaGVkKCkgfVxuICAgICAgfSksXG4gICAgICB0YXAoY2hhbmdlZCA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9nb29nbGVNYXBzLm1hcFJlYWR5ICYmIGNoYW5nZWQuc291cmNlICE9PSBNYXBWYWx1ZVNvdXJjZS5GZWF0dXJlQ2hhbmdlKSB7XG4gICAgICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXREYXRhKGNoYW5nZWQudmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuX2NvbnRleHRNZW51SXRlbXMkID0gdGhpcy5fZ29vZ2xlTWFwcy5lZGl0aW5nRW5hYmxlZCQucGlwZShcbiAgICAgIG1hcChlbmFibGVkID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXM6IFRoZVNlYW1NYXBDb250ZXh0TWVudUl0ZW1bXSA9IFtdXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgaXRlbXMucHVzaCh7IGxhYmVsOiAnRGVsZXRlJywgYWN0aW9uOiAoKSA9PiB0aGlzLl9vbkNsaWNrRGVsZXRlRmVhdHVyZSgpIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW1zXG4gICAgICB9KSxcbiAgICAgIHRhcChpdGVtcyA9PiB7XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aGlzLl9nb29nbGVNYXBzLnNldEZlYXR1cmVDb250ZXh0TWVudShudWxsKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RmVhdHVyZUNvbnRleHRNZW51KHRoaXMuZmVhdHVyZUNvbnRleHRNZW51KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIClcblxuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0QmFzZUxhdExuZyh0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZSlcblxuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0UGFkZGluZyh0aGlzLnBhZGRpbmcpXG5cbiAgICB0aGlzLl9nbUFwaUxvYWRlZCA9IHRoaXMuX2dvb2dsZU1hcHNBcGlMb2FkZXIubG9hZCgpLnBpcGUoXG4gICAgICBtYXAoKCkgPT4gdHJ1ZSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IG9mKGZhbHNlKSksXG4gICAgKVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KHdpbmRvdywgJ2tleWRvd24nKS5waXBlKFxuICAgICAgdGFwKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmNvZGUpIHtcbiAgICAgICAgICBjYXNlICdEZWxldGUnOlxuICAgICAgICAgICAgaWYgKHRoaXMuX2dvb2dsZU1hcHMuaXNFZGl0aW5nRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2dvb2dsZU1hcHMuZGVsZXRlU2VsZWN0aW9uKClcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICBjYXNlICdFc2NhcGUnOiB0aGlzLl9nb29nbGVNYXBzLnN0b3BEcmF3aW5nKCk7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBicmVha1xuICAgICAgICAgIGNhc2UgJ0NvbnRleHRNZW51JzogdGhpcy5fZ29vZ2xlTWFwcy5vcGVuQ29udGV4dE1lbnUoKTsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKVxuXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKClcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBsZXQgdXBkYXRlQmFzZSA9IGZhbHNlXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnbGF0aXR1ZGUnKSkge1xuICAgICAgdGhpcy5sYXRpdHVkZSA9IGNoYW5nZXMubGF0aXR1ZGUuY3VycmVudFZhbHVlXG4gICAgICB1cGRhdGVCYXNlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdsb25naXR1ZGUnKSkge1xuICAgICAgdGhpcy5sb25naXR1ZGUgPSBjaGFuZ2VzLmxvbmdpdHVkZS5jdXJyZW50VmFsdWVcbiAgICAgIHVwZGF0ZUJhc2UgPSB0cnVlXG4gICAgfVxuICAgIGlmICh1cGRhdGVCYXNlKSB7XG4gICAgICB0aGlzLl9nb29nbGVNYXBzLnNldEJhc2VMYXRMbmcodGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpXG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbicpKSB7XG4gICAgICB0aGlzLl9nb29nbGVNYXBzLmFsbG93RHJhd2luZ0hvbGVJblBvbHlnb24odGhpcy5hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uKVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2Z1bGxzY3JlZW5Db250cm9sRW5hYmxlZCcpKSB7XG4gICAgICBjb25zdCBmdWxsc2NyZWVuQ29udHJvbCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLmZ1bGxzY3JlZW5Db250cm9sRW5hYmxlZC5jdXJyZW50VmFsdWUpXG4gICAgICBpZiAoZnVsbHNjcmVlbkNvbnRyb2wgIT09IHRoaXMuX29wdGlvbnMuZnVsbHNjcmVlbkNvbnRyb2wpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHtcbiAgICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICAgIGZ1bGxzY3JlZW5Db250cm9sLFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZWRpdGluZ0VuYWJsZWQnKSkge1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRFZGl0aW5nRW5hYmxlZCh0aGlzLmVkaXRpbmdFbmFibGVkKVxuICAgIH1cblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ3BhZGRpbmcnKSkge1xuICAgICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRQYWRkaW5nKHRoaXMucGFkZGluZylcbiAgICB9XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBNYXBWYWx1ZSk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuXG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmblxuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZT8oaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkXG4gIH1cblxuICBwdWJsaWMgZml0Qm91bmRzKGJvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzIHwgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzTGl0ZXJhbCwgcGFkZGluZz86IG51bWJlciB8IGdvb2dsZS5tYXBzLlBhZGRpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9nb29nbGVNYXBzLmZpdEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpXG4gIH1cblxuICBwdWJsaWMgZ2V0R2VvSnNvbigpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIHJldHVybiB0aGlzLl9nb29nbGVNYXBzLmdldEdlb0pzb24oKVxuICB9XG5cbiAgcHVibGljIGhhc0ZvY3VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9mb2N1c09yaWdpbiAhPT0gbnVsbCAmJiB0aGlzLl9mb2N1c09yaWdpbiAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgYnV0dG9uLiAqL1xuICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0SG9zdEVsZW1lbnQoKS5mb2N1cygpXG4gIH1cblxuICBwcml2YXRlIF9nZXRIb3N0RWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gIH1cblxuICBfb25NYXBSZWFkeSh0aGVNYXA6IGdvb2dsZS5tYXBzLk1hcCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0TWFwKHRoZU1hcClcbiAgICB0aGlzLl9nb29nbGVNYXBzLnNldERhdGEodGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnZhbHVlKVxuXG4gICAgLy8gTk9URTogVGhlIGlucHV0IHpvb20gbGV2ZWwgd2FzIGdldHRpbmcgcmVzZXQgYWZ0ZXIgdGhpcyBmdW5jdGlvbiByYW4sXG4gICAgLy8gc28gcHV0dGluZyBpbiB0aGlzIGlkbGUgbGlzdGVuZXIgdG8gd2FpdCB1bnRpbCB0aGUgbWFwIGlzIGZ1bGx5IHJlbmRlcmVkXG4gICAgLy8gdG8gc2V0IHRoZSB6b29tLlxuICAgIC8vIENhbGxpbmcgcmVDZW50ZXJPbkZlYXR1cmVzKCkgYWZ0ZXIgc2V0Wm9vbSgpIGVuc3VyZXMgdGhhdCBtYXBzIHdpdGggcHJlLWRyYXduIHNoYXBlc1xuICAgIC8vIHdpbGwgZGlzcGxheSBjb3JyZWN0bHlcbiAgICB0aGlzLmlkbGVMaXN0ZW5lciA9IHRoaXMuX2dvb2dsZU1hcHMuZ29vZ2xlTWFwPy5hZGRMaXN0ZW5lcignaWRsZScsICgpID0+IHtcbiAgICAgIHRoaXMuX2dvb2dsZU1hcHMuZ29vZ2xlTWFwPy5zZXRab29tKHRoaXMuem9vbSlcbiAgICAgIHRoaXMuX2dvb2dsZU1hcHMucmVDZW50ZXJPbkZlYXR1cmVzKClcbiAgICAgIHRoaXMubWFwUmVhZHkuZW1pdCh0aGlzLl9nb29nbGVNYXBzLmdvb2dsZU1hcClcblxuICAgICAgdGhpcy5pZGxlTGlzdGVuZXI/LnJlbW92ZSgpXG4gICAgfSlcblxuICB9XG5cbiAgX29uQ2xpY2tEZWxldGVGZWF0dXJlKCkge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuZGVsZXRlU2VsZWN0aW9uKClcbiAgfVxuXG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwiX2dtQXBpTG9hZGVkIHwgYXN5bmNcIj5cbiAgPGdvb2dsZS1tYXBcbiAgICBoZWlnaHQ9XCIxMDAlXCJcbiAgICB3aWR0aD1cIjEwMCVcIlxuICAgIFtjZW50ZXJdPVwieyBsYXQ6IGxhdGl0dWRlLCBsbmc6IGxvbmdpdHVkZSB9XCJcbiAgICBbem9vbV09XCJ6b29tXCJcbiAgICBbb3B0aW9uc109XCJfb3B0aW9uc1wiXG4gICAgKG1hcEluaXRpYWxpemVkKT1cIl9vbk1hcFJlYWR5KCRhbnkoJGV2ZW50KSlcIlxuICAgID5cbiAgPC9nb29nbGUtbWFwPlxuPC9uZy1jb250YWluZXI+XG48c2VhbS1tZW51ICNmZWF0dXJlQ29udGV4dE1lbnU+XG4gIDxidXR0b24gc2VhbU1lbnVJdGVtICpuZ0Zvcj1cImxldCBpdGVtIG9mIF9jb250ZXh0TWVudUl0ZW1zJCB8IGFzeW5jXCIgKGNsaWNrKT1cIml0ZW0uYWN0aW9uKGl0ZW0pXCI+e3sgaXRlbS5sYWJlbCB9fTwvYnV0dG9uPlxuPC9zZWFtLW1lbnU+XG48c2VhbS1tYXAtZmlsZS1kcm9wICpuZ0lmPVwiZmlsZURyb3BFbmFibGVkXCI+PC9zZWFtLW1hcC1maWxlLWRyb3A+XG5cbjxzZWFtLW1hcC1jb250cm9sICpuZ0lmPVwiZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkXCIgW2RlZl09XCJfZmlsZVVwbG9hZENvbnRyb2xEZWZcIj48L3NlYW0tbWFwLWNvbnRyb2w+XG48c2VhbS1tYXAtY29udHJvbCAqbmdJZj1cInJlQ2VudGVyQ29udHJvbEVuYWJsZWRcIiBbZGVmXT1cIl9yZUNlbnRlckNvbnRyb2xEZWZcIj48L3NlYW0tbWFwLWNvbnRyb2w+XG4iXX0=
@@ -92,6 +92,9 @@ export class GoogleMapsService {
92
92
  setBaseLatLng(lat, lng) {
93
93
  this._baseLatLng = { lat, lng };
94
94
  }
95
+ setPadding(padding) {
96
+ this._padding = padding;
97
+ }
95
98
  // TODO: Refactor out of the service meant to just wrap the google maps api.
96
99
  setFeatureContextMenu(menu) {
97
100
  this.closeContextMenu();
@@ -203,7 +206,7 @@ export class GoogleMapsService {
203
206
  this._assertInitialized();
204
207
  removeAllFeatures(this.googleMap.data);
205
208
  this.googleMap.data.addGeoJson(data);
206
- this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data));
209
+ this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data), this._padding);
207
210
  }
208
211
  // TODO: Refactor out of the service meant to just wrap the google maps api.
209
212
  reCenterOnFeatures() {
@@ -215,7 +218,7 @@ export class GoogleMapsService {
215
218
  this.googleMap.panTo(this._baseLatLng);
216
219
  return;
217
220
  }
218
- this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data));
221
+ this.googleMap.fitBounds(getBoundsWithAllFeatures(this.googleMap.data), this._padding);
219
222
  // TODO: Fix to pan to center. Currently fitBounds results in the expected
220
223
  // result, but pantToBounds animates.
221
224
  // this.googleMap.panToBounds(getBoundsWithAllFeatures(this.googleMap.data))
@@ -423,4 +426,4 @@ GoogleMapsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ve
423
426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: GoogleMapsService, decorators: [{
424
427
  type: Injectable
425
428
  }], ctorParameters: function () { return [{ type: i1.MapValueManagerService }, { type: i0.NgZone }, { type: i0.ViewContainerRef }]; } });
426
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXVDLE1BQU0sZUFBZSxDQUFBO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUcxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUVoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNqRSxPQUFPLEVBQ0wsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0Isd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0NBQXNDLEVBQ3RDLDBCQUEwQixFQUMxQiwrQkFBK0IsRUFDL0IsaUJBQWlCLEVBQ2pCLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGlDQUFpQyxHQUNsQyxNQUFNLCtCQUErQixDQUFBO0FBQ3RDLE9BQU8sRUFBMEIsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUE7OztBQUlwRixNQUFNLHVCQUF1QixHQUFHLENBQUMsY0FBdUIsRUFBOEIsRUFBRSxDQUFDLENBQUM7SUFDeEYsU0FBUyxFQUFFLGNBQWM7SUFDekIsU0FBUyxFQUFFLGNBQWM7SUFDekIsUUFBUSxFQUFFLGNBQWM7Q0FDekIsQ0FBQyxDQUFBO0FBRUYsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLGNBQXVCLEVBQTZDLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLGNBQWMsRUFBRSxjQUFj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K0IsSUFBSTtRQUNuRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxtQkFBbUIsRUFBRTtvQkFDdkIsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUE7aUJBQ3JDO2dCQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNaLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsaURBQWlEO0lBQ3pDLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUMsRUFBRTtZQUN0RSxNQUFNLEtBQUssQ0FDVCw0RUFBNEU7Z0JBQzFFLG9FQUFvRSxDQUN2RSxDQUFBO1NBQ0Y7SUFDSCxDQUFDOzs4R0FuY1UsaUJBQWlCO2tIQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vbWVudSdcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkLCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IEdvb2dsZU1hcHNDb250ZXh0TWVudSB9IGZyb20gJy4vZ29vZ2xlLW1hcHMtY29udGV4dG1lbnUnXG5pbXBvcnQge1xuICBhZGRJbm5lckZlYXR1cmVDdXRvdXRUb0V4dGVyaW9yRmVhdHVyZSxcbiAgY3JlYXRlRGF0YUZlYXR1cmVGcm9tUG9seWdvbixcbiAgY3JlYXRlRmVhdHVyZUNoYW5nZU9ic2VydmFibGUsXG4gIGdldEJvdW5kc1dpdGhBbGxGZWF0dXJlcyxcbiAgZ2V0RmVhdHVyZUNlbnRlcixcbiAgZ2V0RmVhdHVyZXNDb3VudCxcbiAgZ2V0SG92ZXJlZFN0eWxlT3B0aW9uc0RlZmluZWRCeUZlYXR1cmUsXG4gIGdldFBvc3NpYmxlRXh0ZXJpb3JGZWF0dXJlLFxuICBnZXRTdHlsZU9wdGlvbnNEZWZpbmVkQnlGZWF0dXJlLFxuICBpc0ZlYXR1cmVTZWxlY3RlZCxcbiAgcG9seWdvbkhhc1ZhbGlkUGF0aHNMZW5ndGhzLFxuICByZW1vdmVBbGxGZWF0dXJlcyxcbiAgc2V0RmVhdHVyZVNlbGVjdGVkLFxuICBzdHJpcEFwcEZlYXR1cmVQcm9wZXJ0aWVzRnJvbUpzb24sXG59IGZyb20gJy4vZ29vZ2xlLW1hcHMtZmVhdHVyZS1oZWxwZXJzJ1xuaW1wb3J0IHsgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSwgTWFwVmFsdWVTb3VyY2UgfSBmcm9tICcuL21hcC12YWx1ZS1tYW5hZ2VyLnNlcnZpY2UnXG5cbmRlY2xhcmUgY29uc3QgbmdEZXZNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkXG5cbmNvbnN0IERFRkFVTFRfUE9MWUdPTl9PUFRJT05TID0gKGVkaXRpbmdFbmFibGVkOiBib29sZWFuKTogZ29vZ2xlLm1hcHMuUG9seWdvbk9wdGlvbnMgPT4gKHtcbiAgY2xpY2thYmxlOiBlZGl0aW5nRW5hYmxlZCxcbiAgZHJhZ2dhYmxlOiBlZGl0aW5nRW5hYmxlZCxcbiAgZWRpdGFibGU6IGVkaXRpbmdFbmFibGVkLFxufSlcblxuY29uc3QgREVGQVVMVF9EUkFXSU5HX01BTkFHRVJfT1BUSU9OUyA9IChlZGl0aW5nRW5hYmxlZDogYm9vbGVhbik6IGdvb2dsZS5tYXBzLmRyYXdpbmcuRHJhd2luZ01hbmFnZXJPcHRpb25zID0+ICh7XG4gIGRyYXdpbmdDb250cm9sOiBlZGl0aW5nRW5hYmxlZCxcbiAgZHJhd2luZ0NvbnRyb2xPcHRpb25zOiB7XG4gICAgZHJhd2luZ01vZGVzOiBbXG4gICAgICBnb29nbGUubWFwcy5kcmF3aW5nLk92ZXJsYXlUeXBlLlBPTFlHT04sXG4gICAgXSxcbiAgfSxcbiAgcG9seWdvbk9wdGlvbnM6IERFRkFVTFRfUE9MWUdPTl9PUFRJT05TKGVkaXRpbmdFbmFibGVkKSxcbiAgZHJhd2luZ01vZGU6IG51bGwsXG59KVxuXG5jb25zdCBGRUFUVVJFX1NUWUxFX09QVElPTlNfREVGQVVMVCA9IChlZGl0aW5nRW5hYmxlZDogYm9vbGVhbik6IGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zID0+ICh7XG4gIGNsaWNrYWJsZTogdHJ1ZSxcbiAgLy8gY2xpY2thYmxlOiBlZGl0aW5nRW5hYmxlZCxcbiAgdmlzaWJsZTogdHJ1ZSxcbiAgLy8gekluZGV4PzogbnVtYmVyO1xuXG4gIC8vIGN1cnNvcj86IHN0cmluZztcbiAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgZWRpdGFibGU6IGZhbHNlLFxuICBmaWxsQ29sb3I6ICd0ZWFsJyxcbiAgZmlsbE9wYWNpdHk6IDAuMyxcbiAgc3Ryb2tlQ29sb3I6ICdibHVlJyxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2VpZ2h0OiAyLFxufSlcblxuY29uc3QgRkVBVFVSRV9TVFlMRV9PUFRJT05TX1NFTEVDVEVEID0gKGVkaXRpbmdFbmFibGVkOiBib29sZWFuKTogZ29vZ2xlLm1hcHMuRGF0YS5TdHlsZU9wdGlvbnMgPT4gKHtcbiAgLi4uRkVBVFVSRV9TVFlMRV9PUFRJT05TX0RFRkFVTFQoZWRpdGluZ0VuYWJsZWQpLFxuICBkcmFnZ2FibGU6IGVkaXRpbmdFbmFibGVkLFxuICBlZGl0YWJsZTogZWRpdGluZ0VuYWJsZWQsXG4gIGZpbGxDb2xvcjogJ2dyZWVuJyxcbiAgZmlsbE9wYWNpdHk6IDAuNyxcbiAgc3Ryb2tlQ29sb3I6ICdsaW1lZ3JlZW4nLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXZWlnaHQ6IDIsXG59KVxuXG5jb25zdCBGRUFUVVJFX1NUWUxFX09WRVJSSURFX09QVElPTlNfSE9WRVJFRCA9IChlZGl0aW5nRW5hYmxlZDogYm9vbGVhbik6IGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zID0+ICh7XG4gIHN0cm9rZUNvbG9yOiAnYmxhY2snLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXZWlnaHQ6IDQsXG59KVxuXG5jb25zdCBTVVBQT1JURURfUFJPUEVSVFlfU1RZTEVfT1BUSU9OUzogKGtleW9mIGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zKVtdID0gW1xuICAnZmlsbENvbG9yJyxcbiAgJ2ZpbGxPcGFjaXR5JyxcbiAgJ3N0cm9rZUNvbG9yJyxcbiAgJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlV2VpZ2h0JyxcbiAgJ2xhYmVsJyxcbiAgJ29wYWNpdHknLFxuICAnaWNvbicsXG4gICdjbGlja2FibGUnLFxuICAndmlzaWJsZScsXG5dXG5cbnR5cGUgV2l0aFJlcXVpcmVkPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFQgJiB7IFtQIGluIEtdLT86IFRbUF0gfVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR29vZ2xlTWFwc1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdGluZ0VuYWJsZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKVxuXG4gIHByaXZhdGUgX2RyYXdpbmdNYW5hZ2VyPzogZ29vZ2xlLm1hcHMuZHJhd2luZy5EcmF3aW5nTWFuYWdlclxuICBwcml2YXRlIF9mZWF0dXJlQ29udGV4dE1lbnU6IE1lbnVDb21wb25lbnQgfCBudWxsID0gbnVsbFxuICBwcml2YXRlIF9hY3RpdmVDb250ZXh0TWVudTogR29vZ2xlTWFwc0NvbnRleHRNZW51IHwgbnVsbCA9IG51bGxcbiAgcHJpdmF0ZSBfYmFzZUxhdExuZz86IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWxcblxuICBwcml2YXRlIF9hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uID0gZmFsc2VcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHRoYW4gdGhlIG1hcCB3cmFwcGVyIHNlcnZpY2UuXG4gIHByaXZhdGUgX2ZpbGVJbnB1dEhhbmRsZXI6ICgoZmlsZTogRmlsZSkgPT4gdm9pZCkgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgcHVibGljIGdvb2dsZU1hcD86IGdvb2dsZS5tYXBzLk1hcFxuXG4gIHB1YmxpYyByZWFkb25seSBtYXBSZWFkeSQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cblxuICBwdWJsaWMgZ2V0IG1hcFJlYWR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fbWFwUmVhZHlTdWJqZWN0LnZhbHVlIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdGluZ0VuYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWFwVmFsdWVNYW5hZ2VyOiBNYXBWYWx1ZU1hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgKSB7XG4gICAgdGhpcy5lZGl0aW5nRW5hYmxlZCQgPSB0aGlzLl9lZGl0aW5nRW5hYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICB0aGlzLm1hcFJlYWR5JCA9IHRoaXMuX21hcFJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKClcbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXAobWFwOiBnb29nbGUubWFwcy5NYXApOiB2b2lkIHtcbiAgICB0aGlzLmdvb2dsZU1hcCA9IG1hcFxuICAgIHRoaXMuX21hcFJlYWR5U3ViamVjdC5uZXh0KHRydWUpXG4gICAgdGhpcy5faW5pdERyYXdpbmdNYW5hZ2VyKClcbiAgICB0aGlzLl9pbml0RmVhdHVyZVN0eWxpbmcoKVxuICAgIHRoaXMuX2luaXRGZWF0dXJlQ2hhbmdlTGlzdGVuZXJzKClcbiAgfVxuXG4gIHB1YmxpYyBzZXRCYXNlTGF0TG5nKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2Jhc2VMYXRMbmcgPSB7IGxhdCwgbG5nIH1cbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIG91dCBvZiB0aGUgc2VydmljZSBtZWFudCB0byBqdXN0IHdyYXAgdGhlIGdvb2dsZSBtYXBzIGFwaS5cbiAgcHVibGljIHNldEZlYXR1cmVDb250ZXh0TWVudShtZW51OiBNZW51Q29tcG9uZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VDb250ZXh0TWVudSgpXG4gICAgdGhpcy5fZmVhdHVyZUNvbnRleHRNZW51ID0gbWVudVxuICB9XG5cbiAgcHVibGljIHNldEVkaXRpbmdFbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9lZGl0aW5nRW5hYmxlZFN1YmplY3QubmV4dChlbmFibGVkKVxuXG4gICAgaWYgKHRoaXMubWFwUmVhZHkpIHtcbiAgICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEucmV2ZXJ0U3R5bGUoKVxuICAgICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICAgIHRoaXMuc3RvcERyYXdpbmcoKVxuICAgICAgICBjb25zdCBvcHRpb25zID0gREVGQVVMVF9EUkFXSU5HX01BTkFHRVJfT1BUSU9OUyh0aGlzLmlzRWRpdGluZ0VuYWJsZWQoKSlcbiAgICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXI/LnNldE9wdGlvbnMob3B0aW9ucylcbiAgICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXI/LnNldE1hcChudWxsKVxuICAgICAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgaWYgKGlzRmVhdHVyZVNlbGVjdGVkKGYpKSB7XG4gICAgICAgICAgICBzZXRGZWF0dXJlU2VsZWN0ZWQoZiwgZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IERFRkFVTFRfRFJBV0lOR19NQU5BR0VSX09QVElPTlModGhpcy5pc0VkaXRpbmdFbmFibGVkKCkpXG4gICAgICAgIHRoaXMuX2RyYXdpbmdNYW5hZ2VyPy5zZXRPcHRpb25zKG9wdGlvbnMpXG4gICAgICAgIHRoaXMuX2RyYXdpbmdNYW5hZ2VyPy5zZXRNYXAodGhpcy5nb29nbGVNYXApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRWRpdGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRpbmdFbmFibGVkU3ViamVjdC52YWx1ZVxuICB9XG5cbiAgcHVibGljIGdldERpdigpOiBIVE1MRGl2RWxlbWVudCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgIHJldHVybiB0aGlzLmdvb2dsZU1hcC5nZXREaXYoKSBhcyBIVE1MRGl2RWxlbWVudFxuICB9XG5cbiAgcHVibGljIGZpdEJvdW5kcyhib3VuZHM6IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kcyB8IGdvb2dsZS5tYXBzLkxhdExuZ0JvdW5kc0xpdGVyYWwsIHBhZGRpbmc/OiBudW1iZXIgfCBnb29nbGUubWFwcy5QYWRkaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgIHRoaXMuZ29vZ2xlTWFwLmZpdEJvdW5kcyhib3VuZHMsIHBhZGRpbmcpXG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgdGhlIG1hcCdzIGZlYXR1cmVzIGFuZCByZW1vdmVzIGFueSB0aGF0IGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIHB1YmxpYyBkZWxldGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgIGNvbnN0IG1hcERhdGEgPSB0aGlzLmdvb2dsZU1hcC5kYXRhXG4gICAgbWFwRGF0YS5mb3JFYWNoKGYgPT4ge1xuICAgICAgaWYgKGlzRmVhdHVyZVNlbGVjdGVkKGYpKSB7XG4gICAgICAgIG1hcERhdGEucmVtb3ZlKGYpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wcyB0aGUgY3VycmVudCBkcmF3aW5nLlxuICAgKi9cbiAgcHVibGljIHN0b3BEcmF3aW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5fZHJhd2luZ01hbmFnZXIpIHx8IHRoaXMuX2RyYXdpbmdNYW5hZ2VyLmdldERyYXdpbmdNb2RlKCkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIExpc3RlbmluZyBmb3IgdGhlIGNvbXBsZXRpb24gZXZlbnQgb2YgdGhlIG92ZXJsYXkgY3VycmVudGx5IGJlaW5nIGRyYXduXG4gICAgICAvLyBhbmQgcmVtb3ZpbmcgaXQuIEkgaGF2ZW4ndCBmb3VuZCBhIHdheSB0byBjYW5jZWwgdGhlIGN1cnJlbnQgZHJhd2luZyxcbiAgICAgIC8vIHdpdGhvdXQgdGhpcyBoYWNrIHRoYXQgYXNzdW1lcyBvdXIgbGlzdGVuZXJzIHdpbGwgbm90IHJ1biBpbnRvIGEgcmFjZVxuICAgICAgLy8gY29uZGl0aW9uLlxuICAgICAgY29uc3QgbGlzdGVuZXIgPSBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXIsXG4gICAgICAgICdvdmVybGF5Y29tcGxldGUnLFxuICAgICAgICAoZXZlbnQ6IGdvb2dsZS5tYXBzLmRyYXdpbmcuT3ZlcmxheUNvbXBsZXRlRXZlbnQpID0+IHtcbiAgICAgICAgICBldmVudC5vdmVybGF5Py5zZXRNYXAobnVsbClcbiAgICAgICAgICBsaXN0ZW5lci5yZW1vdmUoKVxuICAgICAgICB9LFxuICAgICAgKVxuXG4gICAgICAvLyBUbyBmYWtlIGNhbmNlbGluZyB0aGUgY3VycmVudCBkcmF3aW5nLCB3aXRob3V0IGRpc2FibGluZyB0aGUgZHJhd2luZ1xuICAgICAgLy8gbW9kZSwgdGhlIGRyYXdpbmcgbW9kZSBpcyBiZWluZyB1bnNldCB0aGVuIGltbWVkaWF0ZWx5IHNldCBiYWNrLiBXaGVuXG4gICAgICAvLyB0aGUgbW9kZSBpcyB1bnNldCB0aGUgJ292ZXJsYXljb21wbGV0ZScgZXZlbnQgd2lsbCBmaXJlLCB3aGljaCB3aWxsXG4gICAgICAvLyBnaXZlIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IG92ZXJsYXkgdG8gcmVtb3ZlLCB0aGVuIGl0IGlzIHNldCBiYWNrXG4gICAgICAvLyB0byB0aGUgbW9kZSB0aGUgdXNlciB3YXMgdXNpbmcuIFRvIHRoZSB1c2VyIGlzIHNob3VsZCBqdXN0IHNlZW0gbGlrZVxuICAgICAgLy8gdGhlIGN1cnJlbnQgZHJhd2luZyB3YXMgY2FuY2VsZWQgYW5kIHRoZXkgY2FuIHN0YXJ0IGRyYXdpbmcgYWdhaW4uXG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5fZHJhd2luZ01hbmFnZXIuZ2V0RHJhd2luZ01vZGUoKVxuICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXIuc2V0RHJhd2luZ01vZGUobnVsbClcbiAgICAgIHRoaXMuX2RyYXdpbmdNYW5hZ2VyLnNldERyYXdpbmdNb2RlKG1vZGUpXG5cbiAgICAgIC8vICdvdmVybGF5Y29tcGxldGUnIHNob3VsZCBmaXJlIGltbWVkaWF0ZWx5LCB1bmxlc3MgYW4gb3ZlcmxheSBoYWRuJ3RcbiAgICAgIC8vIHN0YXJ0ZWQgZHJhd2luZy4gVGhpcyB0aW1lb3V0IHdpbGwgbWFrZSBzdXJlIHRoZSBsaXN0ZW5lciBnZXRzIHJlbW92ZWQuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgbGlzdGVuZXIucmVtb3ZlKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHByaXZhdGUgX2luaXREcmF3aW5nTWFuYWdlcigpOiB2b2lkIHtcbiAgICBpZiAobm90TnVsbE9yVW5kZWZpbmVkKHRoaXMuX2RyYXdpbmdNYW5hZ2VyKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYERyYXdpbmdNYW5hZ2VyIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuYClcbiAgICB9XG5cbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCBvcHRpb25zID0gREVGQVVMVF9EUkFXSU5HX01BTkFHRVJfT1BUSU9OUyh0aGlzLmlzRWRpdGluZ0VuYWJsZWQoKSlcblxuICAgIGNvbnN0IGRyYXdpbmdNYW5hZ2VyID0gbmV3IGdvb2dsZS5tYXBzLmRyYXdpbmcuRHJhd2luZ01hbmFnZXIob3B0aW9ucylcbiAgICBkcmF3aW5nTWFuYWdlci5zZXRNYXAodGhpcy5nb29nbGVNYXApXG5cbiAgICB0aGlzLl9kcmF3aW5nTWFuYWdlciA9IGRyYXdpbmdNYW5hZ2VyXG5cbiAgICB0aGlzLl9kcmF3aW5nTWFuYWdlci5hZGRMaXN0ZW5lcignZHJhd2luZ21vZGVfY2hhbmdlZCcsIChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAodGhpcy5fZHJhd2luZ01hbmFnZXI/LmdldERyYXdpbmdNb2RlKCkgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgICAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgaWYgKGlzRmVhdHVyZVNlbGVjdGVkKGYpKSB7XG4gICAgICAgICAgICBzZXRGZWF0dXJlU2VsZWN0ZWQoZiwgZmFsc2UpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgYWRkQ29udHJvbChlbGVtZW50OiBIVE1MRWxlbWVudCwgcG9zaXRpb246IGdvb2dsZS5tYXBzLkNvbnRyb2xQb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICB0aGlzLmdvb2dsZU1hcC5jb250cm9sc1twb3NpdGlvbl0ucHVzaChlbGVtZW50KVxuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldERhdGEoZGF0YTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgIHJlbW92ZUFsbEZlYXR1cmVzKHRoaXMuZ29vZ2xlTWFwLmRhdGEpXG4gICAgdGhpcy5nb29nbGVNYXAuZGF0YS5hZGRHZW9Kc29uKGRhdGEpXG4gICAgdGhpcy5nb29nbGVNYXAuZml0Qm91bmRzKGdldEJvdW5kc1dpdGhBbGxGZWF0dXJlcyh0aGlzLmdvb2dsZU1hcC5kYXRhKSlcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIG91dCBvZiB0aGUgc2VydmljZSBtZWFudCB0byBqdXN0IHdyYXAgdGhlIGdvb2dsZSBtYXBzIGFwaS5cbiAgcHVibGljIHJlQ2VudGVyT25GZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgaWYgKGdldEZlYXR1cmVzQ291bnQodGhpcy5nb29nbGVNYXAuZGF0YSkgPT09IDApIHtcbiAgICAgIGlmICghdGhpcy5fYmFzZUxhdExuZykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5nb29nbGVNYXAucGFuVG8odGhpcy5fYmFzZUxhdExuZylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmdvb2dsZU1hcC5maXRCb3VuZHMoZ2V0Qm91bmRzV2l0aEFsbEZlYXR1cmVzKHRoaXMuZ29vZ2xlTWFwLmRhdGEpKVxuXG4gICAgLy8gVE9ETzogRml4IHRvIHBhbiB0byBjZW50ZXIuIEN1cnJlbnRseSBmaXRCb3VuZHMgcmVzdWx0cyBpbiB0aGUgZXhwZWN0ZWRcbiAgICAvLyByZXN1bHQsIGJ1dCBwYW50VG9Cb3VuZHMgYW5pbWF0ZXMuXG4gICAgLy8gdGhpcy5nb29nbGVNYXAucGFuVG9Cb3VuZHMoZ2V0Qm91bmRzV2l0aEFsbEZlYXR1cmVzKHRoaXMuZ29vZ2xlTWFwLmRhdGEpKVxuICB9XG5cbiAgcHVibGljIGFsbG93RHJhd2luZ0hvbGVJblBvbHlnb24oYWxsb3c6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uID0gYWxsb3dcbiAgfVxuXG4gIHB1YmxpYyBzZXRGaWxlSW5wdXRIYW5kbGVyKGhhbmRsZXI6ICgoZmlsZTogRmlsZSkgPT4gdm9pZCkgfCB1bmRlZmluZWQgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsZUlucHV0SGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIHB1YmxpYyBnZXRGaWxlSW5wdXRIYW5kbGVyKCk6ICgoZmlsZTogRmlsZSkgPT4gdm9pZCkgfCB1bmRlZmluZWQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsZUlucHV0SGFuZGxlclxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEZlYXR1cmVTdHlsaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcblxuICAgIC8vIERpc2FibGUgYW55IHNlbGVjdGlvbiB3aGVuIGNsaWNraW5nIHRoZSBtYXAuXG4gICAgLy9cbiAgICAvLyBUT0RPOiBUaGVyZSBtYXkgYmUgYSBiZXR0ZXIgd2F5IHRvIGRvIHRoaXMgdGhhdCB3b3VsZCBiZSBtb3JlIGFjY3VyYXRlIG9yXG4gICAgLy8gYWRkaXRpb25hbCBldmVudHMgdGhhdCBzaG91bGQgYmUgbGlzdGVuZWQgdG8sIHN1Y2ggYXMgdGhlIGRpc2FibGluZ1xuICAgIC8vIHNlbGVjdGlvbiB3aGVuIHRoZSBtYXAgbG9vc2VzIGZvY3VzLlxuICAgIHRoaXMuZ29vZ2xlTWFwLmFkZExpc3RlbmVyKCdjbGljaycsIChldmVuOiBnb29nbGUubWFwcy5NYXBNb3VzZUV2ZW50IHwgZ29vZ2xlLm1hcHMuSWNvbk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuZm9yRWFjaChmID0+IHNldEZlYXR1cmVTZWxlY3RlZChmLCBmYWxzZSkpXG4gICAgfSlcblxuICAgIC8vIERldGVybWluZSB3aGF0IHRoZSBzdHlsZSBvZiB0aGUgZmVhdHVyZXMgYXJlLlxuICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuc2V0U3R5bGUoZmVhdHVyZSA9PiB7XG4gICAgICBsZXQgb3B0cyA9IEZFQVRVUkVfU1RZTEVfT1BUSU9OU19ERUZBVUxUKHRoaXMuaXNFZGl0aW5nRW5hYmxlZCgpKVxuXG4gICAgICBjb25zdCBvcHRpb25zID0gZ2V0U3R5bGVPcHRpb25zRGVmaW5lZEJ5RmVhdHVyZShmZWF0dXJlKVxuICAgICAgdGhpcy5fbWVyZ2VTdHlsZU9wdGlvbnMob3B0cywgb3B0aW9ucyA/PyB7fSlcblxuICAgICAgaWYgKGlzRmVhdHVyZVNlbGVjdGVkKGZlYXR1cmUpKSB7XG4gICAgICAgIGNvbnN0IGhvdmVyT3B0aW9ucyA9IGdldEhvdmVyZWRTdHlsZU9wdGlvbnNEZWZpbmVkQnlGZWF0dXJlKGZlYXR1cmUpXG4gICAgICAgIG9wdHMgPSBGRUFUVVJFX1NUWUxFX09QVElPTlNfU0VMRUNURUQodGhpcy5pc0VkaXRpbmdFbmFibGVkKCkpXG4gICAgICAgIHRoaXMuX21lcmdlU3R5bGVPcHRpb25zKG9wdHMsIGhvdmVyT3B0aW9ucyA/PyB7fSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9wdHNcbiAgICB9KVxuXG4gICAgLy8gU2VsZWN0IGEgZmVhdHVyZSB3aGVuIGNsaWNrZWQuXG4gICAgdGhpcy5nb29nbGVNYXAuZGF0YS5hZGRMaXN0ZW5lcignY2xpY2snLCAoZXZlbnQ6IGdvb2dsZS5tYXBzLkRhdGEuTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuXG4gICAgICBzZXRGZWF0dXJlU2VsZWN0ZWQoZXZlbnQuZmVhdHVyZSwgdHJ1ZSlcbiAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuZm9yRWFjaChmID0+IHtcbiAgICAgICAgaWYgKGYgIT09IGV2ZW50LmZlYXR1cmUgJiYgaXNGZWF0dXJlU2VsZWN0ZWQoZikpIHtcbiAgICAgICAgICBzZXRGZWF0dXJlU2VsZWN0ZWQoZiwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIC8vIFNldCBhIHN0eWxlIG9uIGhvdmVyZWQgZmVhdHVyZXMgdGhhdCBjYW4gYmUgc2VsZWN0ZWQuXG4gICAgdGhpcy5nb29nbGVNYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdmVyJywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEucmV2ZXJ0U3R5bGUoKVxuXG4gICAgICBpZiAoIXRoaXMuaXNEcmF3aW5nKCkgJiYgIWlzRmVhdHVyZVNlbGVjdGVkKGV2ZW50LmZlYXR1cmUpKSB7XG4gICAgICAgIHRoaXMuc2V0RmVhdHVyZUhvdmVyZWRTdHlsZU92ZXJyaWRlKGV2ZW50LmZlYXR1cmUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIFJlbW92ZSBhbnkgaG92ZXIgc3R5bGVzIHdoZW4gbW91c2UgbW92ZXMgYXdheS5cbiAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmFkZExpc3RlbmVyKCdtb3VzZW91dCcsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLnJldmVydFN0eWxlKClcbiAgICB9KVxuICB9XG5cbiAgcHVibGljIHNldEZlYXR1cmVIb3ZlcmVkU3R5bGVPdmVycmlkZShmZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUpIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgY29uc3Qgb3ZlcnJpZGVPcHRzID0gRkVBVFVSRV9TVFlMRV9PVkVSUklERV9PUFRJT05TX0hPVkVSRUQodGhpcy5pc0VkaXRpbmdFbmFibGVkKCkpXG4gICAgY29uc3QgaG92ZXJPcHRpb25zID0gZ2V0SG92ZXJlZFN0eWxlT3B0aW9uc0RlZmluZWRCeUZlYXR1cmUoZmVhdHVyZSlcbiAgICB0aGlzLl9tZXJnZVN0eWxlT3B0aW9ucyhvdmVycmlkZU9wdHMsIGhvdmVyT3B0aW9ucyA/PyB7fSlcbiAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLm92ZXJyaWRlU3R5bGUoZmVhdHVyZSwgb3ZlcnJpZGVPcHRzKVxuICB9XG5cbiAgcHJpdmF0ZSBfbWVyZ2VTdHlsZU9wdGlvbnMob3B0aW9uczogZ29vZ2xlLm1hcHMuRGF0YS5TdHlsZU9wdGlvbnMsIHByb3BlcnRpZXNTdHlsZU9wdGlvbnM6IGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHByb3BlcnRpZXNTdHlsZU9wdGlvbnMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHQgb2YgU1VQUE9SVEVEX1BST1BFUlRZX1NUWUxFX09QVElPTlMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvcGVydGllc1N0eWxlT3B0aW9ucywgb3B0KSkge1xuICAgICAgICBvcHRpb25zW29wdF0gPSBwcm9wZXJ0aWVzU3R5bGVPcHRpb25zW29wdF0gYXMgYW55XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdEZlYXR1cmVDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuXG4gICAgY3JlYXRlRmVhdHVyZUNoYW5nZU9ic2VydmFibGUodGhpcy5nb29nbGVNYXAuZGF0YSwgdGhpcy5fbmdab25lKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IGZyb20odGhpcy5nZXRHZW9Kc29uKCkpLnBpcGUoXG4gICAgICAgIHRhcChnZW9Kc29uID0+IHRoaXMuX21hcFZhbHVlTWFuYWdlci5zZXRWYWx1ZShnZW9Kc29uLCBNYXBWYWx1ZVNvdXJjZS5GZWF0dXJlQ2hhbmdlKSksXG4gICAgICApKSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSxcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmFkZExpc3RlbmVyKCdjb250ZXh0bWVudScsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWlzRmVhdHVyZVNlbGVjdGVkKGV2ZW50LmZlYXR1cmUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9vcGVuQ29udGV4dE1lbnVGb3JGZWF0dXJlKGV2ZW50LmZlYXR1cmUsIGV2ZW50LmxhdExuZyA/PyB1bmRlZmluZWQpXG4gICAgfSlcblxuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodGhpcy5fZHJhd2luZ01hbmFnZXIpKSB7XG4gICAgICBnb29nbGUubWFwcy5ldmVudC5hZGRMaXN0ZW5lcih0aGlzLl9kcmF3aW5nTWFuYWdlciwgJ3BvbHlnb25jb21wbGV0ZScsIChwb2x5Z29uOiBnb29nbGUubWFwcy5Qb2x5Z29uKSA9PiB7XG4gICAgICAgIC8vIFRoZSBEcmF3aW5nTWFuYWdlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHdheSB0byBhY2Nlc3MgdGhlIG92ZXJsYXlzLFxuICAgICAgICAvLyBzbyBpZiB0aGUgbWFwIGlzIG5vdCBzZXQgdGhlbiBpdCBzaG91bGRuJ3kgYmUgY29uc2lkZXJlZCBhIHN1Y2Nlc3NmdWxcbiAgICAgICAgLy8gY29tcGxldGlvbi4gSSBhbSBjYW5jZWxpbmcgdGhlIGFjdGl2ZSBkcmF3aW5nIGJ5IGRpc2FibGluZyBkcmF3aW5nXG4gICAgICAgIC8vIG1vZGUgYW5kIHNldHRpbmcgdGhlIG1hcCBudWxsIGluIHRoZSAnb3ZlcmxheWNvbXBsZXRlJyBldmVudCwgd2hpY2hcbiAgICAgICAgLy8gZmlyZXMgYmVmb3JlIHRoZSAncG9seWdvbmNvbXBsZXRlJyBldmVudC5cbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKHBvbHlnb24uZ2V0TWFwKCkpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG5cbiAgICAgICAgLy8gVE9ETzogU2VlIGlmIHRoZXJlIGlzIGEgd2F5IHRvIHByZXZlbnQgdGhlIHBvbHlnb24gZnJvbSBjb21wbGV0aW5nXG4gICAgICAgIC8vIHdpdGhvdXQgZW5vdWdoIHBvaW50cy4gVGhpcyBpcyB2ZXJ5IGxvdyBwcmlvcml0eSwgYmVjYXVzZSBzdGFydGluZ1xuICAgICAgICAvLyBvdmVyIGFmdGVyIGFkZGluZyBhIHNpbmdsZSBwb2ludCBpc24ndCBhIG1ham9yIGluY29udmVuaWVuY2UuXG4gICAgICAgIGlmICghcG9seWdvbkhhc1ZhbGlkUGF0aHNMZW5ndGhzKHBvbHlnb24pKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIHRoZSBkcmF3biBwb2x5Z29uLlxuICAgICAgICAgIHBvbHlnb24uc2V0TWFwKG51bGwpXG4gICAgICAgICAgLy8gU3RvcCBkcmF3aW5nLlxuICAgICAgICAgIHRoaXMuX2RyYXdpbmdNYW5hZ2VyPy5zZXREcmF3aW5nTW9kZShudWxsKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgbWFwIGZlYXR1cmUgb2YgdGhlIGRyYXduIHBvbHlnb24uXG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBjcmVhdGVEYXRhRmVhdHVyZUZyb21Qb2x5Z29uKHBvbHlnb24pXG4gICAgICAgIC8vIFJlbW92ZSB0aGUgZHJhd24gcG9seWdvbi5cbiAgICAgICAgcG9seWdvbi5zZXRNYXAobnVsbClcblxuICAgICAgICAvLyBTdG9wIGRyYXdpbmcuXG4gICAgICAgIHRoaXMuX2RyYXdpbmdNYW5hZ2VyPy5zZXREcmF3aW5nTW9kZShudWxsKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBmZWF0dXJlIHNob3VsZCBiZSB1c2VkIGFzIGEgY3V0b3V0IHRvIGFuIGV4aXN0aW5nXG4gICAgICAgIC8vIGZlYXR1cmUgb3IgYWRkZWQgYXMgaXQncyBvd24gZmVhdHVyZS5cbiAgICAgICAgY29uc3QgZXh0ZXJpb3JQb2x5Z29uRmVhdHVyZSA9IHRoaXMuX2FsbG93RHJhd2luZ0hvbGVJblBvbHlnb25cbiAgICAgICAgICA/IGdldFBvc3NpYmxlRXh0ZXJpb3JGZWF0dXJlKHRoaXMuZ29vZ2xlTWFwLmRhdGEsIGZlYXR1cmUpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgaWYgKGV4dGVyaW9yUG9seWdvbkZlYXR1cmUpIHtcbiAgICAgICAgICBhZGRJbm5lckZlYXR1cmVDdXRvdXRUb0V4dGVyaW9yRmVhdHVyZShleHRlcmlvclBvbHlnb25GZWF0dXJlLCBmZWF0dXJlKVxuICAgICAgICAgIHNldEZlYXR1cmVTZWxlY3RlZChleHRlcmlvclBvbHlnb25GZWF0dXJlLCB0cnVlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuYWRkKGZlYXR1cmUpXG4gICAgICAgICAgc2V0RmVhdHVyZVNlbGVjdGVkKGZlYXR1cmUsIHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzRHJhd2luZygpOiBib29sZWFuIHtcbiAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQodGhpcy5fZHJhd2luZ01hbmFnZXIpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kcmF3aW5nTWFuYWdlci5nZXREcmF3aW5nTW9kZSgpICE9PSBudWxsXG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciBvdXQgb2YgdGhlIHNlcnZpY2UgbWVhbnQgdG8ganVzdCB3cmFwIHRoZSBnb29nbGUgbWFwcyBhcGkuXG4gIHB1YmxpYyBoYXNTZWxlY3RlZEZlYXR1cmUoKTogYm9vbGVhbiB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgIGxldCBpc1NlbGVjdGVkID0gZmFsc2VcbiAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmZvckVhY2goZiA9PiB7XG4gICAgICBpZiAoaXNGZWF0dXJlU2VsZWN0ZWQoZikpIHtcbiAgICAgICAgaXNTZWxlY3RlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBpc1NlbGVjdGVkXG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciBvdXQgb2YgdGhlIHNlcnZpY2UgbWVhbnQgdG8ganVzdCB3cmFwIHRoZSBnb29nbGUgbWFwcyBhcGkuXG4gIHB1YmxpYyBnZXRTZWxlY3RlZEZlYXR1cmUoKTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlIHwgbnVsbCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgIGxldCBmZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUgfCBudWxsID0gbnVsbFxuICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuZm9yRWFjaChmID0+IHtcbiAgICAgIGlmIChpc0ZlYXR1cmVTZWxlY3RlZChmKSkge1xuICAgICAgICBmZWF0dXJlID0gZlxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGZlYXR1cmVcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIG91dCBvZiB0aGUgc2VydmljZSBtZWFudCB0byBqdXN0IHdyYXAgdGhlIGdvb2dsZSBtYXBzIGFwaS5cbiAgcHVibGljIG9wZW5Db250ZXh0TWVudSgpOiB2b2lkIHtcbiAgICBjb25zdCBmZWF0dXJlID0gdGhpcy5nZXRTZWxlY3RlZEZlYXR1cmUoKVxuICAgIGlmIChmZWF0dXJlKSB7XG4gICAgICB0aGlzLl9vcGVuQ29udGV4dE1lbnVGb3JGZWF0dXJlKGZlYXR1cmUpXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3Igb3V0IG9mIHRoZSBzZXJ2aWNlIG1lYW50IHRvIGp1c3Qgd3JhcCB0aGUgZ29vZ2xlIG1hcHMgYXBpLlxuICBwdWJsaWMgY2xvc2VDb250ZXh0TWVudSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlQ29udGV4dE1lbnUpIHtcbiAgICAgIHRoaXMuX2FjdGl2ZUNvbnRleHRNZW51LmNsb3NlKClcbiAgICAgIHRoaXMuX2FjdGl2ZUNvbnRleHRNZW51ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIG91dCBvZiB0aGUgc2VydmljZSBtZWFudCB0byBqdXN0IHdyYXAgdGhlIGdvb2dsZSBtYXBzIGFwaS5cbiAgcHJpdmF0ZSBfb3BlbkNvbnRleHRNZW51Rm9yRmVhdHVyZShmZWF0dXJlOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUsIHBvc2l0aW9uPzogZ29vZ2xlLm1hcHMuTGF0TG5nKSB7XG4gICAgdGhpcy5jbG9zZUNvbnRleHRNZW51KClcblxuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcblxuICAgIGxldCBfcG9zaXRpb24gPSBwb3NpdGlvblxuICAgIGlmICghX3Bvc2l0aW9uKSB7XG4gICAgICBfcG9zaXRpb24gPSBnZXRGZWF0dXJlQ2VudGVyKGZlYXR1cmUpXG4gICAgfVxuICAgIGlmICh0aGlzLl9mZWF0dXJlQ29udGV4dE1lbnUpIHtcbiAgICAgIHRoaXMuX2FjdGl2ZUNvbnRleHRNZW51ID0gbmV3IEdvb2dsZU1hcHNDb250ZXh0TWVudShcbiAgICAgICAgdGhpcy5nb29nbGVNYXAsXG4gICAgICAgIHRoaXMuX2ZlYXR1cmVDb250ZXh0TWVudSxcbiAgICAgICAgX3Bvc2l0aW9uLFxuICAgICAgICB0aGlzLl92Y3IsXG4gICAgICAgIHRoaXMuX25nWm9uZSxcbiAgICAgICAgdGhpcy5nb29nbGVNYXAuZGF0YSxcbiAgICAgICAgZmVhdHVyZSxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0R2VvSnNvbihyZW1vdmVBcHBQcm9wZXJ0aWVzOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEudG9HZW9Kc29uKGYgPT4ge1xuICAgICAgICBpZiAocmVtb3ZlQXBwUHJvcGVydGllcykge1xuICAgICAgICAgIHN0cmlwQXBwRmVhdHVyZVByb3BlcnRpZXNGcm9tSnNvbihmKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZilcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIC8qKiBBc3NlcnRzIHRoYXQgdGhlIG1hcCBoYXMgYmVlbiBpbml0aWFsaXplZC4gKi9cbiAgcHJpdmF0ZSBfYXNzZXJ0SW5pdGlhbGl6ZWQoKTogYXNzZXJ0cyB0aGlzIGlzIFdpdGhSZXF1aXJlZDxHb29nbGVNYXBzU2VydmljZSwgJ2dvb2dsZU1hcCc+IHtcbiAgICBpZiAoIXRoaXMuZ29vZ2xlTWFwICYmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpKSB7XG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBhY2Nlc3MgR29vZ2xlIE1hcCBpbmZvcm1hdGlvbiBiZWZvcmUgdGhlIEFQSSBoYXMgYmVlbiBpbml0aWFsaXplZC4gJyArXG4gICAgICAgICAgJ1BsZWFzZSB3YWl0IGZvciB0aGUgQVBJIHRvIGxvYWQgYmVmb3JlIHRyeWluZyB0byBpbnRlcmFjdCB3aXRoIGl0LicsXG4gICAgICApXG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
429
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQXVDLE1BQU0sZUFBZSxDQUFBO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUcxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUVoRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQTtBQUNqRSxPQUFPLEVBQ0wsc0NBQXNDLEVBQ3RDLDRCQUE0QixFQUM1Qiw2QkFBNkIsRUFDN0Isd0JBQXdCLEVBQ3hCLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsc0NBQXNDLEVBQ3RDLDBCQUEwQixFQUMxQiwrQkFBK0IsRUFDL0IsaUJBQWlCLEVBQ2pCLDJCQUEyQixFQUMzQixpQkFBaUIsRUFDakIsa0JBQWtCLEVBQ2xCLGlDQUFpQyxHQUNsQyxNQUFNLCtCQUErQixDQUFBO0FBQ3RDLE9BQU8sRUFBMEIsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUE7OztBQUlwRixNQUFNLHVCQUF1QixHQUFHLENBQUMsY0FBdUIsRUFBOEIsRUFBRSxDQUFDLENBQUM7SUFDeEYsU0FBUyxFQUFFLGNBQWM7SUFDekIsU0FBUyxFQUFFLGNBQWM7SUFDekIsUUFBUSxFQUFFLGNBQWM7Q0FDekIsQ0FBQyxDQUFBO0FBRUYsTUFBTSwrQkFBK0IsR0FBRyxDQUFDLGNBQXVCLEVBQTZDLEVBQUUsQ0FBQyxDQUFDO0lBQy9HLGNBQWMsRUFBRSxjQUFj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QUksRUFDVCxJQUFJLENBQUMsT0FBTyxFQUNaLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUNuQixPQUFPLENBQ1IsQ0FBQTtTQUNGO0lBQ0gsQ0FBQztJQUVNLFVBQVUsQ0FBQyxzQkFBK0IsSUFBSTtRQUNuRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFBO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxtQkFBbUIsRUFBRTtvQkFDdkIsaUNBQWlDLENBQUMsQ0FBQyxDQUFDLENBQUE7aUJBQ3JDO2dCQUNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNaLENBQUMsQ0FBQyxDQUFBO1FBQ0osQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsaURBQWlEO0lBQ3pDLGtCQUFrQjtRQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFDLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUMsRUFBRTtZQUN0RSxNQUFNLEtBQUssQ0FDVCw0RUFBNEU7Z0JBQzFFLG9FQUFvRSxDQUN2RSxDQUFBO1NBQ0Y7SUFDSCxDQUFDOzs4R0F4Y1UsaUJBQWlCO2tIQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgT25EZXN0cm95LCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vbWVudSdcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkLCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IEdvb2dsZU1hcHNDb250ZXh0TWVudSB9IGZyb20gJy4vZ29vZ2xlLW1hcHMtY29udGV4dG1lbnUnXG5pbXBvcnQge1xuICBhZGRJbm5lckZlYXR1cmVDdXRvdXRUb0V4dGVyaW9yRmVhdHVyZSxcbiAgY3JlYXRlRGF0YUZlYXR1cmVGcm9tUG9seWdvbixcbiAgY3JlYXRlRmVhdHVyZUNoYW5nZU9ic2VydmFibGUsXG4gIGdldEJvdW5kc1dpdGhBbGxGZWF0dXJlcyxcbiAgZ2V0RmVhdHVyZUNlbnRlcixcbiAgZ2V0RmVhdHVyZXNDb3VudCxcbiAgZ2V0SG92ZXJlZFN0eWxlT3B0aW9uc0RlZmluZWRCeUZlYXR1cmUsXG4gIGdldFBvc3NpYmxlRXh0ZXJpb3JGZWF0dXJlLFxuICBnZXRTdHlsZU9wdGlvbnNEZWZpbmVkQnlGZWF0dXJlLFxuICBpc0ZlYXR1cmVTZWxlY3RlZCxcbiAgcG9seWdvbkhhc1ZhbGlkUGF0aHNMZW5ndGhzLFxuICByZW1vdmVBbGxGZWF0dXJlcyxcbiAgc2V0RmVhdHVyZVNlbGVjdGVkLFxuICBzdHJpcEFwcEZlYXR1cmVQcm9wZXJ0aWVzRnJvbUpzb24sXG59IGZyb20gJy4vZ29vZ2xlLW1hcHMtZmVhdHVyZS1oZWxwZXJzJ1xuaW1wb3J0IHsgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSwgTWFwVmFsdWVTb3VyY2UgfSBmcm9tICcuL21hcC12YWx1ZS1tYW5hZ2VyLnNlcnZpY2UnXG5cbmRlY2xhcmUgY29uc3QgbmdEZXZNb2RlOiBib29sZWFuIHwgdW5kZWZpbmVkXG5cbmNvbnN0IERFRkFVTFRfUE9MWUdPTl9PUFRJT05TID0gKGVkaXRpbmdFbmFibGVkOiBib29sZWFuKTogZ29vZ2xlLm1hcHMuUG9seWdvbk9wdGlvbnMgPT4gKHtcbiAgY2xpY2thYmxlOiBlZGl0aW5nRW5hYmxlZCxcbiAgZHJhZ2dhYmxlOiBlZGl0aW5nRW5hYmxlZCxcbiAgZWRpdGFibGU6IGVkaXRpbmdFbmFibGVkLFxufSlcblxuY29uc3QgREVGQVVMVF9EUkFXSU5HX01BTkFHRVJfT1BUSU9OUyA9IChlZGl0aW5nRW5hYmxlZDogYm9vbGVhbik6IGdvb2dsZS5tYXBzLmRyYXdpbmcuRHJhd2luZ01hbmFnZXJPcHRpb25zID0+ICh7XG4gIGRyYXdpbmdDb250cm9sOiBlZGl0aW5nRW5hYmxlZCxcbiAgZHJhd2luZ0NvbnRyb2xPcHRpb25zOiB7XG4gICAgZHJhd2luZ01vZGVzOiBbXG4gICAgICBnb29nbGUubWFwcy5kcmF3aW5nLk92ZXJsYXlUeXBlLlBPTFlHT04sXG4gICAgXSxcbiAgfSxcbiAgcG9seWdvbk9wdGlvbnM6IERFRkFVTFRfUE9MWUdPTl9PUFRJT05TKGVkaXRpbmdFbmFibGVkKSxcbiAgZHJhd2luZ01vZGU6IG51bGwsXG59KVxuXG5jb25zdCBGRUFUVVJFX1NUWUxFX09QVElPTlNfREVGQVVMVCA9IChlZGl0aW5nRW5hYmxlZDogYm9vbGVhbik6IGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zID0+ICh7XG4gIGNsaWNrYWJsZTogdHJ1ZSxcbiAgLy8gY2xpY2thYmxlOiBlZGl0aW5nRW5hYmxlZCxcbiAgdmlzaWJsZTogdHJ1ZSxcbiAgLy8gekluZGV4PzogbnVtYmVyO1xuXG4gIC8vIGN1cnNvcj86IHN0cmluZztcbiAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgZWRpdGFibGU6IGZhbHNlLFxuICBmaWxsQ29sb3I6ICd0ZWFsJyxcbiAgZmlsbE9wYWNpdHk6IDAuMyxcbiAgc3Ryb2tlQ29sb3I6ICdibHVlJyxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2VpZ2h0OiAyLFxufSlcblxuY29uc3QgRkVBVFVSRV9TVFlMRV9PUFRJT05TX1NFTEVDVEVEID0gKGVkaXRpbmdFbmFibGVkOiBib29sZWFuKTogZ29vZ2xlLm1hcHMuRGF0YS5TdHlsZU9wdGlvbnMgPT4gKHtcbiAgLi4uRkVBVFVSRV9TVFlMRV9PUFRJT05TX0RFRkFVTFQoZWRpdGluZ0VuYWJsZWQpLFxuICBkcmFnZ2FibGU6IGVkaXRpbmdFbmFibGVkLFxuICBlZGl0YWJsZTogZWRpdGluZ0VuYWJsZWQsXG4gIGZpbGxDb2xvcjogJ2dyZWVuJyxcbiAgZmlsbE9wYWNpdHk6IDAuNyxcbiAgc3Ryb2tlQ29sb3I6ICdsaW1lZ3JlZW4nLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXZWlnaHQ6IDIsXG59KVxuXG5jb25zdCBGRUFUVVJFX1NUWUxFX09WRVJSSURFX09QVElPTlNfSE9WRVJFRCA9IChlZGl0aW5nRW5hYmxlZDogYm9vbGVhbik6IGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zID0+ICh7XG4gIHN0cm9rZUNvbG9yOiAnYmxhY2snLFxuICBzdHJva2VPcGFjaXR5OiAxLFxuICBzdHJva2VXZWlnaHQ6IDQsXG59KVxuXG5jb25zdCBTVVBQT1JURURfUFJPUEVSVFlfU1RZTEVfT1BUSU9OUzogKGtleW9mIGdvb2dsZS5tYXBzLkRhdGEuU3R5bGVPcHRpb25zKVtdID0gW1xuICAnZmlsbENvbG9yJyxcbiAgJ2ZpbGxPcGFjaXR5JyxcbiAgJ3N0cm9rZUNvbG9yJyxcbiAgJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlV2VpZ2h0JyxcbiAgJ2xhYmVsJyxcbiAgJ29wYWNpdHknLFxuICAnaWNvbicsXG4gICdjbGlja2FibGUnLFxuICAndmlzaWJsZScsXG5dXG5cbnR5cGUgV2l0aFJlcXVpcmVkPFQsIEsgZXh0ZW5kcyBrZXlvZiBUPiA9IFQgJiB7IFtQIGluIEtdLT86IFRbUF0gfVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR29vZ2xlTWFwc1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbWFwUmVhZHlTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdGluZ0VuYWJsZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKVxuXG4gIHByaXZhdGUgX2RyYXdpbmdNYW5hZ2VyPzogZ29vZ2xlLm1hcHMuZHJhd2luZy5EcmF3aW5nTWFuYWdlclxuICBwcml2YXRlIF9mZWF0dXJlQ29udGV4dE1lbnU6IE1lbnVDb21wb25lbnQgfCBudWxsID0gbnVsbFxuICBwcml2YXRlIF9hY3RpdmVDb250ZXh0TWVudTogR29vZ2xlTWFwc0NvbnRleHRNZW51IHwgbnVsbCA9IG51bGxcbiAgcHJpdmF0ZSBfYmFzZUxhdExuZz86IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWxcbiAgcHJpdmF0ZSBfcGFkZGluZz86IG51bWJlciB8IGdvb2dsZS5tYXBzLlBhZGRpbmdcblxuICBwcml2YXRlIF9hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uID0gZmFsc2VcblxuICAvLyBUT0RPOiBNb3ZlIHRvIGEgYmV0dGVyIHBsYWNlIHRoYW4gdGhlIG1hcCB3cmFwcGVyIHNlcnZpY2UuXG4gIHByaXZhdGUgX2ZpbGVJbnB1dEhhbmRsZXI6ICgoZmlsZTogRmlsZSkgPT4gdm9pZCkgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgcHVibGljIGdvb2dsZU1hcD86IGdvb2dsZS5tYXBzLk1hcFxuXG4gIHB1YmxpYyByZWFkb25seSBtYXBSZWFkeSQ6IE9ic2VydmFibGU8Ym9vbGVhbj5cblxuICBwdWJsaWMgZ2V0IG1hcFJlYWR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fbWFwUmVhZHlTdWJqZWN0LnZhbHVlIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgZWRpdGluZ0VuYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWFwVmFsdWVNYW5hZ2VyOiBNYXBWYWx1ZU1hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgKSB7XG4gICAgdGhpcy5lZGl0aW5nRW5hYmxlZCQgPSB0aGlzLl9lZGl0aW5nRW5hYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKClcbiAgICB0aGlzLm1hcFJlYWR5JCA9IHRoaXMuX21hcFJlYWR5U3ViamVjdC5hc09ic2VydmFibGUoKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKClcbiAgfVxuXG4gIHB1YmxpYyBzZXRNYXAobWFwOiBnb29nbGUubWFwcy5NYXApOiB2b2lkIHtcbiAgICB0aGlzLmdvb2dsZU1hcCA9IG1hcFxuICAgIHRoaXMuX21hcFJlYWR5U3ViamVjdC5uZXh0KHRydWUpXG4gICAgdGhpcy5faW5pdERyYXdpbmdNYW5hZ2VyKClcbiAgICB0aGlzLl9pbml0RmVhdHVyZVN0eWxpbmcoKVxuICAgIHRoaXMuX2luaXRGZWF0dXJlQ2hhbmdlTGlzdGVuZXJzKClcbiAgfVxuXG4gIHB1YmxpYyBzZXRCYXNlTGF0TG5nKGxhdDogbnVtYmVyLCBsbmc6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2Jhc2VMYXRMbmcgPSB7IGxhdCwgbG5nIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRQYWRkaW5nKHBhZGRpbmc6IG51bWJlciB8IGdvb2dsZS5tYXBzLlBhZGRpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLl9wYWRkaW5nID0gcGFkZGluZ1xuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3Igb3V0IG9mIHRoZSBzZXJ2aWNlIG1lYW50IHRvIGp1c3Qgd3JhcCB0aGUgZ29vZ2xlIG1hcHMgYXBpLlxuICBwdWJsaWMgc2V0RmVhdHVyZUNvbnRleHRNZW51KG1lbnU6IE1lbnVDb21wb25lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZUNvbnRleHRNZW51KClcbiAgICB0aGlzLl9mZWF0dXJlQ29udGV4dE1lbnUgPSBtZW51XG4gIH1cblxuICBwdWJsaWMgc2V0RWRpdGluZ0VuYWJsZWQoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2VkaXRpbmdFbmFibGVkU3ViamVjdC5uZXh0KGVuYWJsZWQpXG5cbiAgICBpZiAodGhpcy5tYXBSZWFkeSkge1xuICAgICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgICAgdGhpcy5nb29nbGVNYXAuZGF0YS5yZXZlcnRTdHlsZSgpXG4gICAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zdG9wRHJhd2luZygpXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBERUZBVUxUX0RSQVdJTkdfTUFOQUdFUl9PUFRJT05TKHRoaXMuaXNFZGl0aW5nRW5hYmxlZCgpKVxuICAgICAgICB0aGlzLl9kcmF3aW5nTWFuYWdlcj8uc2V0T3B0aW9ucyhvcHRpb25zKVxuICAgICAgICB0aGlzLl9kcmF3aW5nTWFuYWdlcj8uc2V0TWFwKG51bGwpXG4gICAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICBpZiAoaXNGZWF0dXJlU2VsZWN0ZWQoZikpIHtcbiAgICAgICAgICAgIHNldEZlYXR1cmVTZWxlY3RlZChmLCBmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gREVGQVVMVF9EUkFXSU5HX01BTkFHRVJfT1BUSU9OUyh0aGlzLmlzRWRpdGluZ0VuYWJsZWQoKSlcbiAgICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXI/LnNldE9wdGlvbnMob3B0aW9ucylcbiAgICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXI/LnNldE1hcCh0aGlzLmdvb2dsZU1hcClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNFZGl0aW5nRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZWRpdGluZ0VuYWJsZWRTdWJqZWN0LnZhbHVlXG4gIH1cblxuICBwdWJsaWMgZ2V0RGl2KCk6IEhUTUxEaXZFbGVtZW50IHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgcmV0dXJuIHRoaXMuZ29vZ2xlTWFwLmdldERpdigpIGFzIEhUTUxEaXZFbGVtZW50XG4gIH1cblxuICBwdWJsaWMgZml0Qm91bmRzKGJvdW5kczogZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzIHwgZ29vZ2xlLm1hcHMuTGF0TG5nQm91bmRzTGl0ZXJhbCwgcGFkZGluZz86IG51bWJlciB8IGdvb2dsZS5tYXBzLlBhZGRpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgdGhpcy5nb29nbGVNYXAuZml0Qm91bmRzKGJvdW5kcywgcGFkZGluZylcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyB0aGUgbWFwJ3MgZmVhdHVyZXMgYW5kIHJlbW92ZXMgYW55IHRoYXQgYXJlIHNlbGVjdGVkLlxuICAgKi9cbiAgcHVibGljIGRlbGV0ZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgY29uc3QgbWFwRGF0YSA9IHRoaXMuZ29vZ2xlTWFwLmRhdGFcbiAgICBtYXBEYXRhLmZvckVhY2goZiA9PiB7XG4gICAgICBpZiAoaXNGZWF0dXJlU2VsZWN0ZWQoZikpIHtcbiAgICAgICAgbWFwRGF0YS5yZW1vdmUoZilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFN0b3BzIHRoZSBjdXJyZW50IGRyYXdpbmcuXG4gICAqL1xuICBwdWJsaWMgc3RvcERyYXdpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLl9kcmF3aW5nTWFuYWdlcikgfHwgdGhpcy5fZHJhd2luZ01hbmFnZXIuZ2V0RHJhd2luZ01vZGUoKSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gTGlzdGVuaW5nIGZvciB0aGUgY29tcGxldGlvbiBldmVudCBvZiB0aGUgb3ZlcmxheSBjdXJyZW50bHkgYmVpbmcgZHJhd25cbiAgICAgIC8vIGFuZCByZW1vdmluZyBpdC4gSSBoYXZlbid0IGZvdW5kIGEgd2F5IHRvIGNhbmNlbCB0aGUgY3VycmVudCBkcmF3aW5nLFxuICAgICAgLy8gd2l0aG91dCB0aGlzIGhhY2sgdGhhdCBhc3N1bWVzIG91ciBsaXN0ZW5lcnMgd2lsbCBub3QgcnVuIGludG8gYSByYWNlXG4gICAgICAvLyBjb25kaXRpb24uXG4gICAgICBjb25zdCBsaXN0ZW5lciA9IGdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKFxuICAgICAgICB0aGlzLl9kcmF3aW5nTWFuYWdlcixcbiAgICAgICAgJ292ZXJsYXljb21wbGV0ZScsXG4gICAgICAgIChldmVudDogZ29vZ2xlLm1hcHMuZHJhd2luZy5PdmVybGF5Q29tcGxldGVFdmVudCkgPT4ge1xuICAgICAgICAgIGV2ZW50Lm92ZXJsYXk/LnNldE1hcChudWxsKVxuICAgICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpXG4gICAgICAgIH0sXG4gICAgICApXG5cbiAgICAgIC8vIFRvIGZha2UgY2FuY2VsaW5nIHRoZSBjdXJyZW50IGRyYXdpbmcsIHdpdGhvdXQgZGlzYWJsaW5nIHRoZSBkcmF3aW5nXG4gICAgICAvLyBtb2RlLCB0aGUgZHJhd2luZyBtb2RlIGlzIGJlaW5nIHVuc2V0IHRoZW4gaW1tZWRpYXRlbHkgc2V0IGJhY2suIFdoZW5cbiAgICAgIC8vIHRoZSBtb2RlIGlzIHVuc2V0IHRoZSAnb3ZlcmxheWNvbXBsZXRlJyBldmVudCB3aWxsIGZpcmUsIHdoaWNoIHdpbGxcbiAgICAgIC8vIGdpdmUgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgb3ZlcmxheSB0byByZW1vdmUsIHRoZW4gaXQgaXMgc2V0IGJhY2tcbiAgICAgIC8vIHRvIHRoZSBtb2RlIHRoZSB1c2VyIHdhcyB1c2luZy4gVG8gdGhlIHVzZXIgaXMgc2hvdWxkIGp1c3Qgc2VlbSBsaWtlXG4gICAgICAvLyB0aGUgY3VycmVudCBkcmF3aW5nIHdhcyBjYW5jZWxlZCBhbmQgdGhleSBjYW4gc3RhcnQgZHJhd2luZyBhZ2Fpbi5cbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLl9kcmF3aW5nTWFuYWdlci5nZXREcmF3aW5nTW9kZSgpXG4gICAgICB0aGlzLl9kcmF3aW5nTWFuYWdlci5zZXREcmF3aW5nTW9kZShudWxsKVxuICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXIuc2V0RHJhd2luZ01vZGUobW9kZSlcblxuICAgICAgLy8gJ292ZXJsYXljb21wbGV0ZScgc2hvdWxkIGZpcmUgaW1tZWRpYXRlbHksIHVubGVzcyBhbiBvdmVybGF5IGhhZG4ndFxuICAgICAgLy8gc3RhcnRlZCBkcmF3aW5nLiBUaGlzIHRpbWVvdXQgd2lsbCBtYWtlIHN1cmUgdGhlIGxpc3RlbmVyIGdldHMgcmVtb3ZlZC5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBsaXN0ZW5lci5yZW1vdmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcHJpdmF0ZSBfaW5pdERyYXdpbmdNYW5hZ2VyKCk6IHZvaWQge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodGhpcy5fZHJhd2luZ01hbmFnZXIpKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRHJhd2luZ01hbmFnZXIgaXMgYWxyZWFkeSBpbml0aWFsaXplZC5gKVxuICAgIH1cblxuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBERUZBVUxUX0RSQVdJTkdfTUFOQUdFUl9PUFRJT05TKHRoaXMuaXNFZGl0aW5nRW5hYmxlZCgpKVxuXG4gICAgY29uc3QgZHJhd2luZ01hbmFnZXIgPSBuZXcgZ29vZ2xlLm1hcHMuZHJhd2luZy5EcmF3aW5nTWFuYWdlcihvcHRpb25zKVxuICAgIGRyYXdpbmdNYW5hZ2VyLnNldE1hcCh0aGlzLmdvb2dsZU1hcClcblxuICAgIHRoaXMuX2RyYXdpbmdNYW5hZ2VyID0gZHJhd2luZ01hbmFnZXJcblxuICAgIHRoaXMuX2RyYXdpbmdNYW5hZ2VyLmFkZExpc3RlbmVyKCdkcmF3aW5nbW9kZV9jaGFuZ2VkJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kcmF3aW5nTWFuYWdlcj8uZ2V0RHJhd2luZ01vZGUoKSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICBpZiAoaXNGZWF0dXJlU2VsZWN0ZWQoZikpIHtcbiAgICAgICAgICAgIHNldEZlYXR1cmVTZWxlY3RlZChmLCBmYWxzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1YmxpYyBhZGRDb250cm9sKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgIHRoaXMuZ29vZ2xlTWFwLmNvbnRyb2xzW3Bvc2l0aW9uXS5wdXNoKGVsZW1lbnQpXG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0RGF0YShkYXRhOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgcmVtb3ZlQWxsRmVhdHVyZXModGhpcy5nb29nbGVNYXAuZGF0YSlcbiAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmFkZEdlb0pzb24oZGF0YSlcbiAgICB0aGlzLmdvb2dsZU1hcC5maXRCb3VuZHMoZ2V0Qm91bmRzV2l0aEFsbEZlYXR1cmVzKHRoaXMuZ29vZ2xlTWFwLmRhdGEpLCB0aGlzLl9wYWRkaW5nKVxuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3Igb3V0IG9mIHRoZSBzZXJ2aWNlIG1lYW50IHRvIGp1c3Qgd3JhcCB0aGUgZ29vZ2xlIG1hcHMgYXBpLlxuICBwdWJsaWMgcmVDZW50ZXJPbkZlYXR1cmVzKCk6IHZvaWQge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICBpZiAoZ2V0RmVhdHVyZXNDb3VudCh0aGlzLmdvb2dsZU1hcC5kYXRhKSA9PT0gMCkge1xuICAgICAgaWYgKCF0aGlzLl9iYXNlTGF0TG5nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLmdvb2dsZU1hcC5wYW5Ubyh0aGlzLl9iYXNlTGF0TG5nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZ29vZ2xlTWFwLmZpdEJvdW5kcyhnZXRCb3VuZHNXaXRoQWxsRmVhdHVyZXModGhpcy5nb29nbGVNYXAuZGF0YSksIHRoaXMuX3BhZGRpbmcpXG5cbiAgICAvLyBUT0RPOiBGaXggdG8gcGFuIHRvIGNlbnRlci4gQ3VycmVudGx5IGZpdEJvdW5kcyByZXN1bHRzIGluIHRoZSBleHBlY3RlZFxuICAgIC8vIHJlc3VsdCwgYnV0IHBhbnRUb0JvdW5kcyBhbmltYXRlcy5cbiAgICAvLyB0aGlzLmdvb2dsZU1hcC5wYW5Ub0JvdW5kcyhnZXRCb3VuZHNXaXRoQWxsRmVhdHVyZXModGhpcy5nb29nbGVNYXAuZGF0YSkpXG4gIH1cblxuICBwdWJsaWMgYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbihhbGxvdzogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2FsbG93RHJhd2luZ0hvbGVJblBvbHlnb24gPSBhbGxvd1xuICB9XG5cbiAgcHVibGljIHNldEZpbGVJbnB1dEhhbmRsZXIoaGFuZGxlcjogKChmaWxlOiBGaWxlKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLl9maWxlSW5wdXRIYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgcHVibGljIGdldEZpbGVJbnB1dEhhbmRsZXIoKTogKChmaWxlOiBGaWxlKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maWxlSW5wdXRIYW5kbGVyXG4gIH1cblxuICBwcml2YXRlIF9pbml0RmVhdHVyZVN0eWxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuXG4gICAgLy8gRGlzYWJsZSBhbnkgc2VsZWN0aW9uIHdoZW4gY2xpY2tpbmcgdGhlIG1hcC5cbiAgICAvL1xuICAgIC8vIFRPRE86IFRoZXJlIG1heSBiZSBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyB0aGF0IHdvdWxkIGJlIG1vcmUgYWNjdXJhdGUgb3JcbiAgICAvLyBhZGRpdGlvbmFsIGV2ZW50cyB0aGF0IHNob3VsZCBiZSBsaXN0ZW5lZCB0bywgc3VjaCBhcyB0aGUgZGlzYWJsaW5nXG4gICAgLy8gc2VsZWN0aW9uIHdoZW4gdGhlIG1hcCBsb29zZXMgZm9jdXMuXG4gICAgdGhpcy5nb29nbGVNYXAuYWRkTGlzdGVuZXIoJ2NsaWNrJywgKGV2ZW46IGdvb2dsZS5tYXBzLk1hcE1vdXNlRXZlbnQgfCBnb29nbGUubWFwcy5JY29uTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgICAgdGhpcy5nb29nbGVNYXAuZGF0YS5mb3JFYWNoKGYgPT4gc2V0RmVhdHVyZVNlbGVjdGVkKGYsIGZhbHNlKSlcbiAgICB9KVxuXG4gICAgLy8gRGV0ZXJtaW5lIHdoYXQgdGhlIHN0eWxlIG9mIHRoZSBmZWF0dXJlcyBhcmUuXG4gICAgdGhpcy5nb29nbGVNYXAuZGF0YS5zZXRTdHlsZShmZWF0dXJlID0+IHtcbiAgICAgIGxldCBvcHRzID0gRkVBVFVSRV9TVFlMRV9PUFRJT05TX0RFRkFVTFQodGhpcy5pc0VkaXRpbmdFbmFibGVkKCkpXG5cbiAgICAgIGNvbnN0IG9wdGlvbnMgPSBnZXRTdHlsZU9wdGlvbnNEZWZpbmVkQnlGZWF0dXJlKGZlYXR1cmUpXG4gICAgICB0aGlzLl9tZXJnZVN0eWxlT3B0aW9ucyhvcHRzLCBvcHRpb25zID8/IHt9KVxuXG4gICAgICBpZiAoaXNGZWF0dXJlU2VsZWN0ZWQoZmVhdHVyZSkpIHtcbiAgICAgICAgY29uc3QgaG92ZXJPcHRpb25zID0gZ2V0SG92ZXJlZFN0eWxlT3B0aW9uc0RlZmluZWRCeUZlYXR1cmUoZmVhdHVyZSlcbiAgICAgICAgb3B0cyA9IEZFQVRVUkVfU1RZTEVfT1BUSU9OU19TRUxFQ1RFRCh0aGlzLmlzRWRpdGluZ0VuYWJsZWQoKSlcbiAgICAgICAgdGhpcy5fbWVyZ2VTdHlsZU9wdGlvbnMob3B0cywgaG92ZXJPcHRpb25zID8/IHt9KVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb3B0c1xuICAgIH0pXG5cbiAgICAvLyBTZWxlY3QgYSBmZWF0dXJlIHdoZW4gY2xpY2tlZC5cbiAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmFkZExpc3RlbmVyKCdjbGljaycsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG5cbiAgICAgIHNldEZlYXR1cmVTZWxlY3RlZChldmVudC5mZWF0dXJlLCB0cnVlKVxuICAgICAgdGhpcy5nb29nbGVNYXAuZGF0YS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICBpZiAoZiAhPT0gZXZlbnQuZmVhdHVyZSAmJiBpc0ZlYXR1cmVTZWxlY3RlZChmKSkge1xuICAgICAgICAgIHNldEZlYXR1cmVTZWxlY3RlZChmLCBmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgLy8gU2V0IGEgc3R5bGUgb24gaG92ZXJlZCBmZWF0dXJlcyB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLmFkZExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZXZlbnQ6IGdvb2dsZS5tYXBzLkRhdGEuTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgICAgdGhpcy5nb29nbGVNYXAuZGF0YS5yZXZlcnRTdHlsZSgpXG5cbiAgICAgIGlmICghdGhpcy5pc0RyYXdpbmcoKSAmJiAhaXNGZWF0dXJlU2VsZWN0ZWQoZXZlbnQuZmVhdHVyZSkpIHtcbiAgICAgICAgdGhpcy5zZXRGZWF0dXJlSG92ZXJlZFN0eWxlT3ZlcnJpZGUoZXZlbnQuZmVhdHVyZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gUmVtb3ZlIGFueSBob3ZlciBzdHlsZXMgd2hlbiBtb3VzZSBtb3ZlcyBhd2F5LlxuICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuYWRkTGlzdGVuZXIoJ21vdXNlb3V0JywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEucmV2ZXJ0U3R5bGUoKVxuICAgIH0pXG4gIH1cblxuICBwdWJsaWMgc2V0RmVhdHVyZUhvdmVyZWRTdHlsZU92ZXJyaWRlKGZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSkge1xuICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcbiAgICBjb25zdCBvdmVycmlkZU9wdHMgPSBGRUFUVVJFX1NUWUxFX09WRVJSSURFX09QVElPTlNfSE9WRVJFRCh0aGlzLmlzRWRpdGluZ0VuYWJsZWQoKSlcbiAgICBjb25zdCBob3Zlck9wdGlvbnMgPSBnZXRIb3ZlcmVkU3R5bGVPcHRpb25zRGVmaW5lZEJ5RmVhdHVyZShmZWF0dXJlKVxuICAgIHRoaXMuX21lcmdlU3R5bGVPcHRpb25zKG92ZXJyaWRlT3B0cywgaG92ZXJPcHRpb25zID8/IHt9KVxuICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEub3ZlcnJpZGVTdHlsZShmZWF0dXJlLCBvdmVycmlkZU9wdHMpXG4gIH1cblxuICBwcml2YXRlIF9tZXJnZVN0eWxlT3B0aW9ucyhvcHRpb25zOiBnb29nbGUubWFwcy5EYXRhLlN0eWxlT3B0aW9ucywgcHJvcGVydGllc1N0eWxlT3B0aW9uczogZ29vZ2xlLm1hcHMuRGF0YS5TdHlsZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoT2JqZWN0LmtleXMocHJvcGVydGllc1N0eWxlT3B0aW9ucykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBTVVBQT1JURURfUFJPUEVSVFlfU1RZTEVfT1BUSU9OUykge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9wZXJ0aWVzU3R5bGVPcHRpb25zLCBvcHQpKSB7XG4gICAgICAgIG9wdGlvbnNbb3B0XSA9IHByb3BlcnRpZXNTdHlsZU9wdGlvbnNbb3B0XSBhcyBhbnlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pbml0RmVhdHVyZUNoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG5cbiAgICBjcmVhdGVGZWF0dXJlQ2hhbmdlT2JzZXJ2YWJsZSh0aGlzLmdvb2dsZU1hcC5kYXRhLCB0aGlzLl9uZ1pvbmUpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4gZnJvbSh0aGlzLmdldEdlb0pzb24oKSkucGlwZShcbiAgICAgICAgdGFwKGdlb0pzb24gPT4gdGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnNldFZhbHVlKGdlb0pzb24sIE1hcFZhbHVlU291cmNlLkZlYXR1cmVDaGFuZ2UpKSxcbiAgICAgICkpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuYWRkTGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLk1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghaXNGZWF0dXJlU2VsZWN0ZWQoZXZlbnQuZmVhdHVyZSkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29wZW5Db250ZXh0TWVudUZvckZlYXR1cmUoZXZlbnQuZmVhdHVyZSwgZXZlbnQubGF0TG5nID8/IHVuZGVmaW5lZClcbiAgICB9KVxuXG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0aGlzLl9kcmF3aW5nTWFuYWdlcikpIHtcbiAgICAgIGdvb2dsZS5tYXBzLmV2ZW50LmFkZExpc3RlbmVyKHRoaXMuX2RyYXdpbmdNYW5hZ2VyLCAncG9seWdvbmNvbXBsZXRlJywgKHBvbHlnb246IGdvb2dsZS5tYXBzLlBvbHlnb24pID0+IHtcbiAgICAgICAgLy8gVGhlIERyYXdpbmdNYW5hZ2VyIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgd2F5IHRvIGFjY2VzcyB0aGUgb3ZlcmxheXMsXG4gICAgICAgIC8vIHNvIGlmIHRoZSBtYXAgaXMgbm90IHNldCB0aGVuIGl0IHNob3VsZG4neSBiZSBjb25zaWRlcmVkIGEgc3VjY2Vzc2Z1bFxuICAgICAgICAvLyBjb21wbGV0aW9uLiBJIGFtIGNhbmNlbGluZyB0aGUgYWN0aXZlIGRyYXdpbmcgYnkgZGlzYWJsaW5nIGRyYXdpbmdcbiAgICAgICAgLy8gbW9kZSBhbmQgc2V0dGluZyB0aGUgbWFwIG51bGwgaW4gdGhlICdvdmVybGF5Y29tcGxldGUnIGV2ZW50LCB3aGljaFxuICAgICAgICAvLyBmaXJlcyBiZWZvcmUgdGhlICdwb2x5Z29uY29tcGxldGUnIGV2ZW50LlxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQocG9seWdvbi5nZXRNYXAoKSkpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Fzc2VydEluaXRpYWxpemVkKClcblxuICAgICAgICAvLyBUT0RPOiBTZWUgaWYgdGhlcmUgaXMgYSB3YXkgdG8gcHJldmVudCB0aGUgcG9seWdvbiBmcm9tIGNvbXBsZXRpbmdcbiAgICAgICAgLy8gd2l0aG91dCBlbm91Z2ggcG9pbnRzLiBUaGlzIGlzIHZlcnkgbG93IHByaW9yaXR5LCBiZWNhdXNlIHN0YXJ0aW5nXG4gICAgICAgIC8vIG92ZXIgYWZ0ZXIgYWRkaW5nIGEgc2luZ2xlIHBvaW50IGlzbid0IGEgbWFqb3IgaW5jb252ZW5pZW5jZS5cbiAgICAgICAgaWYgKCFwb2x5Z29uSGFzVmFsaWRQYXRoc0xlbmd0aHMocG9seWdvbikpIHtcbiAgICAgICAgICAvLyBSZW1vdmUgdGhlIGRyYXduIHBvbHlnb24uXG4gICAgICAgICAgcG9seWdvbi5zZXRNYXAobnVsbClcbiAgICAgICAgICAvLyBTdG9wIGRyYXdpbmcuXG4gICAgICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXI/LnNldERyYXdpbmdNb2RlKG51bGwpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDcmVhdGUgYSBtYXAgZmVhdHVyZSBvZiB0aGUgZHJhd24gcG9seWdvbi5cbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IGNyZWF0ZURhdGFGZWF0dXJlRnJvbVBvbHlnb24ocG9seWdvbilcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBkcmF3biBwb2x5Z29uLlxuICAgICAgICBwb2x5Z29uLnNldE1hcChudWxsKVxuXG4gICAgICAgIC8vIFN0b3AgZHJhd2luZy5cbiAgICAgICAgdGhpcy5fZHJhd2luZ01hbmFnZXI/LnNldERyYXdpbmdNb2RlKG51bGwpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZlYXR1cmUgc2hvdWxkIGJlIHVzZWQgYXMgYSBjdXRvdXQgdG8gYW4gZXhpc3RpbmdcbiAgICAgICAgLy8gZmVhdHVyZSBvciBhZGRlZCBhcyBpdCdzIG93biBmZWF0dXJlLlxuICAgICAgICBjb25zdCBleHRlcmlvclBvbHlnb25GZWF0dXJlID0gdGhpcy5fYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvblxuICAgICAgICAgID8gZ2V0UG9zc2libGVFeHRlcmlvckZlYXR1cmUodGhpcy5nb29nbGVNYXAuZGF0YSwgZmVhdHVyZSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICBpZiAoZXh0ZXJpb3JQb2x5Z29uRmVhdHVyZSkge1xuICAgICAgICAgIGFkZElubmVyRmVhdHVyZUN1dG91dFRvRXh0ZXJpb3JGZWF0dXJlKGV4dGVyaW9yUG9seWdvbkZlYXR1cmUsIGZlYXR1cmUpXG4gICAgICAgICAgc2V0RmVhdHVyZVNlbGVjdGVkKGV4dGVyaW9yUG9seWdvbkZlYXR1cmUsIHRydWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nb29nbGVNYXAuZGF0YS5hZGQoZmVhdHVyZSlcbiAgICAgICAgICBzZXRGZWF0dXJlU2VsZWN0ZWQoZmVhdHVyZSwgdHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNEcmF3aW5nKCk6IGJvb2xlYW4ge1xuICAgIGlmIChpc051bGxPclVuZGVmaW5lZCh0aGlzLl9kcmF3aW5nTWFuYWdlcikpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2RyYXdpbmdNYW5hZ2VyLmdldERyYXdpbmdNb2RlKCkgIT09IG51bGxcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIG91dCBvZiB0aGUgc2VydmljZSBtZWFudCB0byBqdXN0IHdyYXAgdGhlIGdvb2dsZSBtYXBzIGFwaS5cbiAgcHVibGljIGhhc1NlbGVjdGVkRmVhdHVyZSgpOiBib29sZWFuIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgbGV0IGlzU2VsZWN0ZWQgPSBmYWxzZVxuICAgIHRoaXMuZ29vZ2xlTWFwLmRhdGEuZm9yRWFjaChmID0+IHtcbiAgICAgIGlmIChpc0ZlYXR1cmVTZWxlY3RlZChmKSkge1xuICAgICAgICBpc1NlbGVjdGVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIGlzU2VsZWN0ZWRcbiAgfVxuXG4gIC8vIFRPRE86IFJlZmFjdG9yIG91dCBvZiB0aGUgc2VydmljZSBtZWFudCB0byBqdXN0IHdyYXAgdGhlIGdvb2dsZSBtYXBzIGFwaS5cbiAgcHVibGljIGdldFNlbGVjdGVkRmVhdHVyZSgpOiBnb29nbGUubWFwcy5EYXRhLkZlYXR1cmUgfCBudWxsIHtcbiAgICB0aGlzLl9hc3NlcnRJbml0aWFsaXplZCgpXG4gICAgbGV0IGZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSB8IG51bGwgPSBudWxsXG4gICAgdGhpcy5nb29nbGVNYXAuZGF0YS5mb3JFYWNoKGYgPT4ge1xuICAgICAgaWYgKGlzRmVhdHVyZVNlbGVjdGVkKGYpKSB7XG4gICAgICAgIGZlYXR1cmUgPSBmXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gZmVhdHVyZVxuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3Igb3V0IG9mIHRoZSBzZXJ2aWNlIG1lYW50IHRvIGp1c3Qgd3JhcCB0aGUgZ29vZ2xlIG1hcHMgYXBpLlxuICBwdWJsaWMgb3BlbkNvbnRleHRNZW51KCk6IHZvaWQge1xuICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldFNlbGVjdGVkRmVhdHVyZSgpXG4gICAgaWYgKGZlYXR1cmUpIHtcbiAgICAgIHRoaXMuX29wZW5Db250ZXh0TWVudUZvckZlYXR1cmUoZmVhdHVyZSlcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBSZWZhY3RvciBvdXQgb2YgdGhlIHNlcnZpY2UgbWVhbnQgdG8ganVzdCB3cmFwIHRoZSBnb29nbGUgbWFwcyBhcGkuXG4gIHB1YmxpYyBjbG9zZUNvbnRleHRNZW51KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9hY3RpdmVDb250ZXh0TWVudSkge1xuICAgICAgdGhpcy5fYWN0aXZlQ29udGV4dE1lbnUuY2xvc2UoKVxuICAgICAgdGhpcy5fYWN0aXZlQ29udGV4dE1lbnUgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gVE9ETzogUmVmYWN0b3Igb3V0IG9mIHRoZSBzZXJ2aWNlIG1lYW50IHRvIGp1c3Qgd3JhcCB0aGUgZ29vZ2xlIG1hcHMgYXBpLlxuICBwcml2YXRlIF9vcGVuQ29udGV4dE1lbnVGb3JGZWF0dXJlKGZlYXR1cmU6IGdvb2dsZS5tYXBzLkRhdGEuRmVhdHVyZSwgcG9zaXRpb24/OiBnb29nbGUubWFwcy5MYXRMbmcpIHtcbiAgICB0aGlzLmNsb3NlQ29udGV4dE1lbnUoKVxuXG4gICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuXG4gICAgbGV0IF9wb3NpdGlvbiA9IHBvc2l0aW9uXG4gICAgaWYgKCFfcG9zaXRpb24pIHtcbiAgICAgIF9wb3NpdGlvbiA9IGdldEZlYXR1cmVDZW50ZXIoZmVhdHVyZSlcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZlYXR1cmVDb250ZXh0TWVudSkge1xuICAgICAgdGhpcy5fYWN0aXZlQ29udGV4dE1lbnUgPSBuZXcgR29vZ2xlTWFwc0NvbnRleHRNZW51KFxuICAgICAgICB0aGlzLmdvb2dsZU1hcCxcbiAgICAgICAgdGhpcy5fZmVhdHVyZUNvbnRleHRNZW51LFxuICAgICAgICBfcG9zaXRpb24sXG4gICAgICAgIHRoaXMuX3ZjcixcbiAgICAgICAgdGhpcy5fbmdab25lLFxuICAgICAgICB0aGlzLmdvb2dsZU1hcC5kYXRhLFxuICAgICAgICBmZWF0dXJlLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRHZW9Kc29uKHJlbW92ZUFwcFByb3BlcnRpZXM6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fYXNzZXJ0SW5pdGlhbGl6ZWQoKVxuICAgICAgdGhpcy5nb29nbGVNYXAuZGF0YS50b0dlb0pzb24oZiA9PiB7XG4gICAgICAgIGlmIChyZW1vdmVBcHBQcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgc3RyaXBBcHBGZWF0dXJlUHJvcGVydGllc0Zyb21Kc29uKGYpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgLyoqIEFzc2VydHMgdGhhdCB0aGUgbWFwIGhhcyBiZWVuIGluaXRpYWxpemVkLiAqL1xuICBwcml2YXRlIF9hc3NlcnRJbml0aWFsaXplZCgpOiBhc3NlcnRzIHRoaXMgaXMgV2l0aFJlcXVpcmVkPEdvb2dsZU1hcHNTZXJ2aWNlLCAnZ29vZ2xlTWFwJz4ge1xuICAgIGlmICghdGhpcy5nb29nbGVNYXAgJiYgKHR5cGVvZiBuZ0Rldk1vZGUgPT09ICd1bmRlZmluZWQnIHx8IG5nRGV2TW9kZSkpIHtcbiAgICAgIHRocm93IEVycm9yKFxuICAgICAgICAnQ2Fubm90IGFjY2VzcyBHb29nbGUgTWFwIGluZm9ybWF0aW9uIGJlZm9yZSB0aGUgQVBJIGhhcyBiZWVuIGluaXRpYWxpemVkLiAnICtcbiAgICAgICAgICAnUGxlYXNlIHdhaXQgZm9yIHRoZSBBUEkgdG8gbG9hZCBiZWZvcmUgdHJ5aW5nIHRvIGludGVyYWN0IHdpdGggaXQuJyxcbiAgICAgIClcbiAgICB9XG4gIH1cblxufVxuIl19
@@ -15,25 +15,39 @@ class ConfirmDialogComponent {
15
15
  this.message = 'Are you sure you want to continue?';
16
16
  this.alertType = 'warning';
17
17
  }
18
+ get tpl() {
19
+ if (this.template && 'template' in this.template) {
20
+ return this.template.template;
21
+ }
22
+ return this.template;
23
+ }
24
+ get tplContext() {
25
+ if (this.template && 'context' in this.template) {
26
+ return this.template.context;
27
+ }
28
+ return undefined;
29
+ }
18
30
  }
19
31
  ConfirmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
- ConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ConfirmDialogComponent, selector: "seam-confirm-dialog", inputs: { message: "message", alertMessage: "alertMessage", alertType: "alertType" }, ngImport: i0, template: "<seam-modal-body>\n <h5>{{ message }}</h5>\n\n <div *ngIf=\"alertMessage\" class=\"alert {{ alertType ? 'alert-' + alertType : '' }} mb-0\">\n {{ alertMessage }}\n </div>\n</seam-modal-body>\n<seam-modal-footer>\n <button class=\"btn btn-primary\" seamModalClose=\"confirm\">Yes</button>\n <button class=\"btn btn-lightgray\" data-dismiss=\"modal\" seamModalClose=\"cancel\" seamAutoFocus>No</button>\n</seam-modal-footer>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.AutoFocusDirective, selector: "[seamAutoFocus]", inputs: ["seamAutoFocus"], exportAs: ["seamAutoFocus"] }, { kind: "component", type: i3.ModalBodyComponent, selector: "seam-modal-body" }, { kind: "component", type: i3.ModalFooterComponent, selector: "seam-modal-footer" }, { kind: "directive", type: i3.ModalCloseDirective, selector: "button[seamModalClose]", inputs: ["type", "aria-label", "seamModalClose", "seamModalNext", "seamModalNextConfig"], exportAs: ["seamModalClose"] }] });
32
+ ConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: ConfirmDialogComponent, selector: "seam-confirm-dialog", inputs: { message: "message", alertMessage: "alertMessage", alertType: "alertType", template: "template" }, ngImport: i0, template: "<seam-modal-body>\n <ng-container *ngIf=\"tpl; else messageTpl\">\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: tplContext }\"></ng-container>\n </ng-container>\n\n <ng-template #messageTpl>\n <h5>{{ message }}</h5>\n\n <div *ngIf=\"alertMessage\" class=\"alert {{ alertType ? 'alert-' + alertType : '' }} mb-0\">\n {{ alertMessage }}\n </div>\n </ng-template>\n\n</seam-modal-body>\n<seam-modal-footer>\n <button class=\"btn btn-primary\" seamModalClose=\"confirm\">Yes</button>\n <button class=\"btn btn-lightgray\" data-dismiss=\"modal\" seamModalClose=\"cancel\" seamAutoFocus>No</button>\n</seam-modal-footer>\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.AutoFocusDirective, selector: "[seamAutoFocus]", inputs: ["seamAutoFocus"], exportAs: ["seamAutoFocus"] }, { kind: "component", type: i3.ModalBodyComponent, selector: "seam-modal-body" }, { kind: "component", type: i3.ModalFooterComponent, selector: "seam-modal-footer" }, { kind: "directive", type: i3.ModalCloseDirective, selector: "button[seamModalClose]", inputs: ["type", "aria-label", "seamModalClose", "seamModalNext", "seamModalNextConfig"], exportAs: ["seamModalClose"] }] });
21
33
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
22
34
  type: Component,
23
- args: [{ selector: 'seam-confirm-dialog', template: "<seam-modal-body>\n <h5>{{ message }}</h5>\n\n <div *ngIf=\"alertMessage\" class=\"alert {{ alertType ? 'alert-' + alertType : '' }} mb-0\">\n {{ alertMessage }}\n </div>\n</seam-modal-body>\n<seam-modal-footer>\n <button class=\"btn btn-primary\" seamModalClose=\"confirm\">Yes</button>\n <button class=\"btn btn-lightgray\" data-dismiss=\"modal\" seamModalClose=\"cancel\" seamAutoFocus>No</button>\n</seam-modal-footer>\n" }]
35
+ args: [{ selector: 'seam-confirm-dialog', template: "<seam-modal-body>\n <ng-container *ngIf=\"tpl; else messageTpl\">\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: tplContext }\"></ng-container>\n </ng-container>\n\n <ng-template #messageTpl>\n <h5>{{ message }}</h5>\n\n <div *ngIf=\"alertMessage\" class=\"alert {{ alertType ? 'alert-' + alertType : '' }} mb-0\">\n {{ alertMessage }}\n </div>\n </ng-template>\n\n</seam-modal-body>\n<seam-modal-footer>\n <button class=\"btn btn-primary\" seamModalClose=\"confirm\">Yes</button>\n <button class=\"btn btn-lightgray\" data-dismiss=\"modal\" seamModalClose=\"cancel\" seamAutoFocus>No</button>\n</seam-modal-footer>\n" }]
24
36
  }], propDecorators: { message: [{
25
37
  type: Input
26
38
  }], alertMessage: [{
27
39
  type: Input
28
40
  }], alertType: [{
29
41
  type: Input
42
+ }], template: [{
43
+ type: Input
30
44
  }] } });
31
45
 
32
46
  class SeamConfirmDialogService {
33
47
  constructor(modal) {
34
48
  this.modal = modal;
35
49
  }
36
- open(message, alert) {
50
+ open(message, alert, template) {
37
51
  const modalRef = this.modal.openFromComponent(ConfirmDialogComponent);
38
52
  if (!modalRef.componentInstance) {
39
53
  throw new Error('ConfirmDialogComponent not created.');
@@ -54,6 +68,9 @@ class SeamConfirmDialogService {
54
68
  throw new Error('Invalid alert argument.');
55
69
  }
56
70
  }
71
+ if (template) {
72
+ comp.template = template;
73
+ }
57
74
  return modalRef;
58
75
  }
59
76
  }
@@ -75,7 +92,7 @@ class ConfirmClickDirective {
75
92
  if (this._modalRef) {
76
93
  return;
77
94
  }
78
- this._modalRef = this._confirmService.open(this.seamConfirmMsg || '', this.seamConfirmAlert || undefined);
95
+ this._modalRef = this._confirmService.open(this.seamConfirmMsg || '', this.seamConfirmAlert || undefined, this.seamConfirmTpl || undefined);
79
96
  this._modalRef.afterClosed().subscribe(result => {
80
97
  if (result === 'confirm') {
81
98
  this.seamConfirmClick.emit(result);
@@ -101,7 +118,7 @@ class ConfirmClickDirective {
101
118
  }
102
119
  }
103
120
  ConfirmClickDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: ConfirmClickDirective, deps: [{ token: SeamConfirmDialogService }], target: i0.ɵɵFactoryTarget.Directive });
104
- ConfirmClickDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: ConfirmClickDirective, selector: "[seamConfirmClick]", inputs: { seamConfirmMsg: "seamConfirmMsg", seamConfirmAlert: "seamConfirmAlert", seamConfirmDisabled: "seamConfirmDisabled" }, outputs: { seamConfirmClick: "seamConfirmClick" }, host: { listeners: { "click": "_onClick($event)" }, properties: { "class.lib-confirm-click-active": "this._confirmClickActiveCss" } }, exportAs: ["seamConfirmClick"], ngImport: i0 });
121
+ ConfirmClickDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.7", type: ConfirmClickDirective, selector: "[seamConfirmClick]", inputs: { seamConfirmMsg: "seamConfirmMsg", seamConfirmAlert: "seamConfirmAlert", seamConfirmTpl: "seamConfirmTpl", seamConfirmDisabled: "seamConfirmDisabled" }, outputs: { seamConfirmClick: "seamConfirmClick" }, host: { listeners: { "click": "_onClick($event)" }, properties: { "class.lib-confirm-click-active": "this._confirmClickActiveCss" } }, exportAs: ["seamConfirmClick"], ngImport: i0 });
105
122
  __decorate([
106
123
  InputBoolean()
107
124
  ], ConfirmClickDirective.prototype, "seamConfirmDisabled", void 0);
@@ -115,6 +132,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
115
132
  type: Input
116
133
  }], seamConfirmAlert: [{
117
134
  type: Input
135
+ }], seamConfirmTpl: [{
136
+ type: Input
118
137
  }], seamConfirmDisabled: [{
119
138
  type: Input
120
139
  }], seamConfirmClick: [{
@@ -1 +1 @@
1
- {"version":3,"file":"theseam-ui-common-confirm-dialog.mjs","sources":["../../../projects/ui-common/confirm-dialog/confirm-dialog.component.ts","../../../projects/ui-common/confirm-dialog/confirm-dialog.component.html","../../../projects/ui-common/confirm-dialog/confirm-dialog.service.ts","../../../projects/ui-common/confirm-dialog/confirm-click.directive.ts","../../../projects/ui-common/confirm-dialog/confirm-dialog.module.ts","../../../projects/ui-common/confirm-dialog/theseam-ui-common-confirm-dialog.ts"],"sourcesContent":["import { Component, Input } from '@angular/core'\n\nimport type { ThemeTypes } from '@theseam/ui-common/models'\n\n@Component({\n selector: 'seam-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss']\n})\nexport class ConfirmDialogComponent {\n\n @Input() message: string | undefined | null = 'Are you sure you want to continue?'\n @Input() alertMessage: string | undefined | null\n @Input() alertType: ThemeTypes | undefined | null = 'warning'\n\n}\n","<seam-modal-body>\n <h5>{{ message }}</h5>\n\n <div *ngIf=\"alertMessage\" class=\"alert {{ alertType ? 'alert-' + alertType : '' }} mb-0\">\n {{ alertMessage }}\n </div>\n</seam-modal-body>\n<seam-modal-footer>\n <button class=\"btn btn-primary\" seamModalClose=\"confirm\">Yes</button>\n <button class=\"btn btn-lightgray\" data-dismiss=\"modal\" seamModalClose=\"cancel\" seamAutoFocus>No</button>\n</seam-modal-footer>\n","import { Injectable } from '@angular/core'\n\nimport { Modal, ModalRef } from '@theseam/ui-common/modal'\nimport { ThemeTypes } from '@theseam/ui-common/models'\n\nimport { ConfirmDialogComponent } from './confirm-dialog.component'\n\n@Injectable()\nexport class SeamConfirmDialogService {\n\n constructor(\n private modal: Modal\n ) { }\n\n public open(\n message?: string,\n alert?: string | { message: string, type: ThemeTypes }\n ): ModalRef<ConfirmDialogComponent, 'confirm' | undefined> {\n const modalRef = this.modal.openFromComponent(ConfirmDialogComponent)\n\n if (!modalRef.componentInstance) {\n throw new Error('ConfirmDialogComponent not created.')\n }\n\n const comp: ConfirmDialogComponent = modalRef.componentInstance\n\n if (message) {\n comp.message = message\n }\n\n if (alert) {\n if (typeof alert === 'string') {\n comp.alertMessage = alert\n } else if (alert.message && alert.type) {\n comp.alertMessage = alert.message\n comp.alertType = alert.type\n } else {\n throw new Error('Invalid alert argument.')\n }\n }\n\n return modalRef\n }\n\n}\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport { Directive, EventEmitter, HostBinding, HostListener, Input, OnDestroy, Output } from '@angular/core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { ModalRef } from '@theseam/ui-common/modal'\nimport { ThemeTypes } from '@theseam/ui-common/models'\n\nimport { ConfirmDialogComponent } from './confirm-dialog.component'\nimport { SeamConfirmDialogService } from './confirm-dialog.service'\n\n@Directive({\n selector: '[seamConfirmClick]',\n exportAs: 'seamConfirmClick'\n})\nexport class ConfirmClickDirective implements OnDestroy {\n static ngAcceptInputType_seamConfirmDisabled: BooleanInput\n\n private _modalRef: ModalRef<ConfirmDialogComponent, 'confirm' | undefined> | undefined\n\n @Input() seamConfirmMsg: string | undefined | null\n @Input() seamConfirmAlert: string | { message: string, type: ThemeTypes } | undefined | null\n @Input() @InputBoolean() seamConfirmDisabled = false\n\n @Output() seamConfirmClick = new EventEmitter<'confirm'>()\n\n @HostBinding('class.lib-confirm-click-active')\n get _confirmClickActiveCss() { return !!this._modalRef }\n\n @HostListener('click', [ '$event' ])\n _onClick(event: any) {\n if (this.seamConfirmDisabled) {\n if (this._modalRef) {\n this._modalRef.close()\n this._modalRef = undefined\n }\n }\n\n if (this._modalRef) { return }\n\n this._modalRef = this._confirmService.open(this.seamConfirmMsg || '', this.seamConfirmAlert || undefined)\n\n this._modalRef.afterClosed().subscribe(result => {\n if (result === 'confirm') {\n this.seamConfirmClick.emit(result)\n }\n\n this._modalRef = undefined\n })\n }\n\n constructor(private _confirmService: SeamConfirmDialogService) { }\n\n ngOnDestroy() {\n if (this._modalRef) {\n this._modalRef.close()\n }\n }\n\n get modalRef() { return this._modalRef }\n\n public close() {\n if (this._modalRef) {\n this._modalRef.close()\n }\n }\n\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamModalModule } from '@theseam/ui-common/modal'\nimport { TheSeamSharedModule } from '@theseam/ui-common/shared'\n\nimport { ConfirmClickDirective } from './confirm-click.directive'\nimport { ConfirmDialogComponent } from './confirm-dialog.component'\nimport { SeamConfirmDialogService } from './confirm-dialog.service'\n\n@NgModule({\n declarations: [\n ConfirmDialogComponent,\n ConfirmClickDirective\n ],\n imports: [\n CommonModule,\n TheSeamSharedModule,\n TheSeamModalModule,\n TheSeamIconModule\n ],\n exports: [\n ConfirmDialogComponent,\n ConfirmClickDirective\n ],\n providers: [\n SeamConfirmDialogService\n ]\n})\nexport class TheSeamConfirmDialogModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.SeamConfirmDialogService"],"mappings":"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"}
1
+ {"version":3,"file":"theseam-ui-common-confirm-dialog.mjs","sources":["../../../projects/ui-common/confirm-dialog/confirm-dialog.component.ts","../../../projects/ui-common/confirm-dialog/confirm-dialog.component.html","../../../projects/ui-common/confirm-dialog/confirm-dialog.service.ts","../../../projects/ui-common/confirm-dialog/confirm-click.directive.ts","../../../projects/ui-common/confirm-dialog/confirm-dialog.module.ts","../../../projects/ui-common/confirm-dialog/theseam-ui-common-confirm-dialog.ts"],"sourcesContent":["import { Component, Input, TemplateRef } from '@angular/core'\n\nimport type { ThemeTypes } from '@theseam/ui-common/models'\n\n@Component({\n selector: 'seam-confirm-dialog',\n templateUrl: './confirm-dialog.component.html',\n styleUrls: ['./confirm-dialog.component.scss']\n})\nexport class ConfirmDialogComponent {\n\n @Input() message: string | undefined | null = 'Are you sure you want to continue?'\n @Input() alertMessage: string | undefined | null\n @Input() alertType: ThemeTypes | undefined | null = 'warning'\n @Input() template: TemplateRef<any> | { template: TemplateRef<any>, context: any } | undefined | null\n\n get tpl(): TemplateRef<any> | null | undefined {\n if (this.template && 'template' in this.template) {\n return this.template.template\n }\n\n return this.template\n }\n\n get tplContext(): any {\n if (this.template && 'context' in this.template) {\n return this.template.context\n }\n\n return undefined\n }\n\n}\n","<seam-modal-body>\n <ng-container *ngIf=\"tpl; else messageTpl\">\n <ng-container [ngTemplateOutlet]=\"tpl\" [ngTemplateOutletContext]=\"{ $implicit: tplContext }\"></ng-container>\n </ng-container>\n\n <ng-template #messageTpl>\n <h5>{{ message }}</h5>\n\n <div *ngIf=\"alertMessage\" class=\"alert {{ alertType ? 'alert-' + alertType : '' }} mb-0\">\n {{ alertMessage }}\n </div>\n </ng-template>\n\n</seam-modal-body>\n<seam-modal-footer>\n <button class=\"btn btn-primary\" seamModalClose=\"confirm\">Yes</button>\n <button class=\"btn btn-lightgray\" data-dismiss=\"modal\" seamModalClose=\"cancel\" seamAutoFocus>No</button>\n</seam-modal-footer>\n","import { Injectable, TemplateRef } from '@angular/core'\n\nimport { Modal, ModalRef } from '@theseam/ui-common/modal'\nimport { ThemeTypes } from '@theseam/ui-common/models'\n\nimport { ConfirmDialogComponent } from './confirm-dialog.component'\n\n@Injectable()\nexport class SeamConfirmDialogService {\n\n constructor(\n private modal: Modal\n ) { }\n\n public open(\n message?: string,\n alert?: string | { message: string, type: ThemeTypes },\n template?: TemplateRef<any> | { template: TemplateRef<any>, context: any }\n ): ModalRef<ConfirmDialogComponent, 'confirm' | undefined> {\n const modalRef = this.modal.openFromComponent(ConfirmDialogComponent)\n\n if (!modalRef.componentInstance) {\n throw new Error('ConfirmDialogComponent not created.')\n }\n\n const comp: ConfirmDialogComponent = modalRef.componentInstance\n\n if (message) {\n comp.message = message\n }\n\n if (alert) {\n if (typeof alert === 'string') {\n comp.alertMessage = alert\n } else if (alert.message && alert.type) {\n comp.alertMessage = alert.message\n comp.alertType = alert.type\n } else {\n throw new Error('Invalid alert argument.')\n }\n }\n\n if (template) {\n comp.template = template\n }\n\n return modalRef\n }\n\n}\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport { Directive, EventEmitter, HostBinding, HostListener, Input, OnDestroy, Output, TemplateRef } from '@angular/core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { ModalRef } from '@theseam/ui-common/modal'\nimport { ThemeTypes } from '@theseam/ui-common/models'\n\nimport { ConfirmDialogComponent } from './confirm-dialog.component'\nimport { SeamConfirmDialogService } from './confirm-dialog.service'\n\n@Directive({\n selector: '[seamConfirmClick]',\n exportAs: 'seamConfirmClick'\n})\nexport class ConfirmClickDirective implements OnDestroy {\n static ngAcceptInputType_seamConfirmDisabled: BooleanInput\n\n private _modalRef: ModalRef<ConfirmDialogComponent, 'confirm' | undefined> | undefined\n\n @Input() seamConfirmMsg: string | undefined | null\n @Input() seamConfirmAlert: string | { message: string, type: ThemeTypes } | undefined | null\n @Input() seamConfirmTpl: TemplateRef<any> | { template: TemplateRef<any>, context: any } | undefined | null\n @Input() @InputBoolean() seamConfirmDisabled = false\n\n @Output() seamConfirmClick = new EventEmitter<'confirm'>()\n\n @HostBinding('class.lib-confirm-click-active')\n get _confirmClickActiveCss() { return !!this._modalRef }\n\n @HostListener('click', [ '$event' ])\n _onClick(event: any) {\n if (this.seamConfirmDisabled) {\n if (this._modalRef) {\n this._modalRef.close()\n this._modalRef = undefined\n }\n }\n\n if (this._modalRef) { return }\n\n this._modalRef = this._confirmService.open(this.seamConfirmMsg || '', this.seamConfirmAlert || undefined, this.seamConfirmTpl || undefined)\n\n this._modalRef.afterClosed().subscribe(result => {\n if (result === 'confirm') {\n this.seamConfirmClick.emit(result)\n }\n\n this._modalRef = undefined\n })\n }\n\n constructor(private _confirmService: SeamConfirmDialogService) { }\n\n ngOnDestroy() {\n if (this._modalRef) {\n this._modalRef.close()\n }\n }\n\n get modalRef() { return this._modalRef }\n\n public close() {\n if (this._modalRef) {\n this._modalRef.close()\n }\n }\n\n}\n","import { CommonModule } from '@angular/common'\nimport { NgModule } from '@angular/core'\n\nimport { TheSeamIconModule } from '@theseam/ui-common/icon'\nimport { TheSeamModalModule } from '@theseam/ui-common/modal'\nimport { TheSeamSharedModule } from '@theseam/ui-common/shared'\n\nimport { ConfirmClickDirective } from './confirm-click.directive'\nimport { ConfirmDialogComponent } from './confirm-dialog.component'\nimport { SeamConfirmDialogService } from './confirm-dialog.service'\n\n@NgModule({\n declarations: [\n ConfirmDialogComponent,\n ConfirmClickDirective\n ],\n imports: [\n CommonModule,\n TheSeamSharedModule,\n TheSeamModalModule,\n TheSeamIconModule\n ],\n exports: [\n ConfirmDialogComponent,\n ConfirmClickDirective\n ],\n providers: [\n SeamConfirmDialogService\n ]\n})\nexport class TheSeamConfirmDialogModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.SeamConfirmDialogService"],"mappings":"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"}
@@ -1733,7 +1733,7 @@ class DatatableComponent {
1733
1733
  const currentOrderAlteration = this._columnsAlterationsManager.get().find(x => x.type === 'order');
1734
1734
  const state = {
1735
1735
  columns: [
1736
- ...((currentOrderAlteration === null || currentOrderAlteration === void 0 ? void 0 : currentOrderAlteration.state.columns) || []),
1736
+ ...((currentOrderAlteration === null || currentOrderAlteration === void 0 ? void 0 : currentOrderAlteration.state.columns) || []).filter((x) => x.columnProp !== columnProp),
1737
1737
  { columnProp, index: event.newValue }
1738
1738
  ]
1739
1739
  };